@ZenMethod public static void addRecipe( IItemStack output, IIngredient input, int turns, @stanhebben.zenscript.annotations.Optional IItemStack secondary1Output, @stanhebben.zenscript.annotations.Optional Float secondary1Chance, @stanhebben.zenscript.annotations.Optional IItemStack secondary2Output, @stanhebben.zenscript.annotations.Optional Float secondary2Chance ) { Collection<ItemStack> inStacks = CTModule.toStacks( input ).orElse( Collections.emptySet() ); for( ItemStack inStack : inStacks ) { IGrinderRecipeBuilder builder = AEApi.instance().registries().grinder().builder(); builder.withInput( inStack ) .withOutput( CTModule.toStack( output ) ) .withTurns( turns ); final ItemStack s1 = CTModule.toStack( secondary1Output ); if( !s1.isEmpty() ) { builder.withFirstOptional( s1, secondary1Chance == null ? 1.0f : secondary1Chance ); } final ItemStack s2 = CTModule.toStack( secondary2Output ); if( !s2.isEmpty() ) { builder.withFirstOptional( s2, secondary2Chance == null ? 1.0f : secondary2Chance ); } CTModule.MODIFICATIONS.add( new Add( builder.build() ) ); } }
@ZenMethod public static void addRecipe( IItemStack output, IIngredient input, boolean inscribe, @stanhebben.zenscript.annotations.Optional IIngredient top, @stanhebben.zenscript.annotations.Optional IIngredient bottom ) { Optional<Collection<ItemStack>> inStacks = CTModule.toStacks( input ); if( !inStacks.isPresent() ) { return; } Collection<ItemStack> topList = CTModule.toStacks( top ).orElse( Collections.singleton( ItemStack.EMPTY ) ); Collection<ItemStack> bottomList = CTModule.toStacks( bottom ).orElse( Collections.singleton( ItemStack.EMPTY ) ); for( ItemStack topStack : topList ) { for( ItemStack bottomStack : bottomList ) { final IInscriberRecipeBuilder builder = AEApi.instance().registries().inscriber().builder(); builder.withProcessType( inscribe ? InscriberProcessType.INSCRIBE : InscriberProcessType.PRESS ) .withOutput( CTModule.toStack( output ) ) .withInputs( inStacks.get() ); if( !topStack.isEmpty() ) { builder.withTopOptional( topStack ); } if( !bottomStack.isEmpty() ) { builder.withBottomOptional( bottomStack ); } CTModule.MODIFICATIONS.add( new Add( builder.build() ) ); } } }
@ZenMethod public static IngotMaterial createIngotMaterial(int metaItemSubId, String name, int color, String iconSet, int harvestLevel, @Optional MaterialStack[] materialComponents, @Optional float toolSpeed, @Optional int toolDurability, @Optional int blastFurnaceTemperature) { return new IngotMaterial(metaItemSubId, name, color, MaterialIconSet.getByName(iconSet), harvestLevel, validateComponentList(materialComponents), 0, null, Math.max(0.0f, toolSpeed), Math.max(0, toolDurability), blastFurnaceTemperature); }
@ZenMethod public static void addRecipe(ILiquidStack fluid, int genAmount, @Optional int genTime) { if(genTime == 0) { genTime = 100; } ModTweaker.LATE_ADDITIONS.add(new Add(Collections.singletonList(new OilGenRecipe(fluid.getName(), genAmount, genTime)))); }
@ZenMethod public static void addFillRecipe(IIngredient input, ILiquidStack fluid, int amount, @Optional IItemStack container, @Optional Boolean boiling) { if (amount < 1 || amount > InspirationsRegistry.getCauldronMax()) { CraftTweakerAPI.logError(String.format("Ignoring Cauldron Fill recipe for %s: Invalid amount %d given, must be between 1 and %d", fluid.getDisplayName(), amount, InspirationsRegistry.getCauldronMax())); return; } ModTweaker.LATE_ADDITIONS.add(new AddFill(input, InputHelper.toFluid(fluid), amount, InputHelper.toStack(container), boiling)); }
@ZenMethod @ZenDoc("Remove matching printable items.") public static void remove(@Optional final IIngredient item) { recipes.remove(item); }
@ZenMethod @ZenDoc("Remove matching washable items.") public static void remove(@Optional final IIngredient item) { recipes.remove(item); }
@ZenMethod @SuppressWarnings("unused") public static void addPurchasable(String shop, IItemStack sellable, long cost, @Optional IIngredient[] materials) { Shop theShop = Shop.REGISTRY.get(new ResourceLocation(shop)); if (theShop == null) CraftTweaker.logError(String.format("No shop with the id %s could be found. Use /hf shoplist for a list of ids", shop)); MineTweakerAPI.apply(new AddPurchasable(theShop, asStack(sellable), cost, CraftTweaker.asRequirements(materials))); }
@ZenMethod public static void removeRecipe(IItemStack output, @Optional IItemStack input) { init(); CraftTweakerAPI.apply(new Remove(output, input)); }
@ZenMethod public static void removeRecipe(ILiquidStack output, @Optional IItemStack input) { init(); CraftTweakerAPI.apply(new Melting.Remove(output, input)); }
@ZenMethod public static void add(IItemStack output, IItemStack input, @Optional IItemStack sneakOutput) { if (checkNull(output, false) & checkNull(input, true)) { CraftTweakerAPI.apply(new WorldTransmuteAction.Add(output, input, sneakOutput)); } }
@ZenMethod public static void remove(IBlockState output, IBlockState input, @Optional IBlockState sneakOutput) { if (checkNull(output, false) & checkNull(input, true)) { CraftTweakerAPI.apply(new WorldTransmuteAction.Remove(output, input, sneakOutput)); } }
@ZenMethod public static void add(IBlockState output, IBlockState input, @Optional IBlockState sneakOutput) { if (checkNull(output, false) & checkNull(input, true)) { CraftTweakerAPI.apply(new WorldTransmuteAction.Add(output, input, sneakOutput)); } }
@ZenMethod public static void remove(IItemStack output, IItemStack input, @Optional IItemStack sneakOutput) { if (checkNull(output, false) & checkNull(input, true)) { CraftTweakerAPI.apply(new WorldTransmuteAction.Remove(output, input, sneakOutput)); } }