update to new libcd! (#1902)

This commit is contained in:
Meredith Espinosa 2019-12-09 23:31:32 -08:00 committed by modmuss50
parent b74d46101b
commit 649d28d63c
7 changed files with 175 additions and 106 deletions

View file

@ -82,10 +82,10 @@ dependencies {
modCompileOnly "io.github.prospector:modmenu:1.7.9-unstable.19w34a+build.1"
modCompileOnly ("me.shedaniel:RoughlyEnoughItems:3.2.7-unstable.201911150440")
modCompile ('io.github.cottonmc:LibCD:1.5.0+1.14.4') {
modCompile ('io.github.cottonmc:LibCD:2.0.1+1.15') {
transitive = false
}
modRuntime ("io.github.cottonmc:Jankson:1.0.0+j1.1.2") {
modRuntime ("io.github.cottonmc:Jankson-Fabric:2.0.0+j1.2.0") {
transitive = false
}

View file

@ -91,10 +91,6 @@ public class TechReborn implements ModInitializer {
DataAttachment.REGISTRY.register(IDSUManager.class, IDSUManager::new);
if (FabricLoader.getInstance().isModLoaded("libcd")) {
TRTweaker.init();
}
LOGGER.info("TechReborn setup done!");
}

View file

@ -0,0 +1,22 @@
package techreborn.compat.libcd;
import io.github.cottonmc.libcd.api.LibCDInitializer;
import io.github.cottonmc.libcd.api.condition.ConditionManager;
import io.github.cottonmc.libcd.api.tweaker.TweakerManager;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
import techreborn.TechReborn;
import techreborn.items.ItemDynamicCell;
public class LibCDPlugin implements LibCDInitializer {
@Override
public void initTweakers(TweakerManager manager) {
manager.addTweaker("techreborn.TRTweaker", TRTweaker.INSTANCE);
manager.addStackFactory(new Identifier(TechReborn.MOD_ID, "cell"), (id) -> ItemDynamicCell.getCellWithFluid(Registry.FLUID.get(id)));
}
@Override
public void initConditions(ConditionManager manager) {
}
}

View file

@ -2,8 +2,8 @@ package techreborn.compat.libcd;
import com.mojang.brigadier.StringReader;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import io.github.cottonmc.libcd.tweaker.TweakerSyntaxException;
import io.github.cottonmc.libcd.tweaker.TweakerUtils;
import io.github.cottonmc.libcd.api.CDSyntaxError;
import io.github.cottonmc.libcd.api.tweaker.util.TweakerUtils;
import net.minecraft.fluid.Fluid;
import net.minecraft.fluid.Fluids;
import net.minecraft.item.Item;
@ -24,7 +24,7 @@ import java.util.Optional;
public class TRRecipeParser {
public static RebornIngredient processIngredient(Object input) throws TweakerSyntaxException {
public static RebornIngredient processIngredient(Object input) throws CDSyntaxError {
if (input instanceof RebornIngredient) {
return (RebornIngredient) input;
} else if (input instanceof Ingredient) {
@ -42,12 +42,12 @@ public class TRRecipeParser {
//fluids
Identifier id = new Identifier(in.substring(1));
Fluid fluid = Registry.FLUID.get(id);
if (fluid == Fluids.EMPTY) throw new TweakerSyntaxException("Failed to get fluid for input: " + in);
if (fluid == Fluids.EMPTY) throw new CDSyntaxError("Failed to get fluid for input: " + in);
return new FluidIngredient(fluid, Optional.empty(), amount);
} else if (in.indexOf('#') == 0) {
Identifier id = new Identifier(in.substring(1));
Tag<Item> itemTag = ItemTags.getContainer().get(id);
if (itemTag == null) throw new TweakerSyntaxException("Failed to get item tag for input: " + in);
if (itemTag == null) throw new CDSyntaxError("Failed to get item tag for input: " + in);
return new TagIngredient(id, ItemTags.getContainer().get(id), amount);
} else {
ItemStack stack;
@ -56,7 +56,7 @@ public class TRRecipeParser {
if (in.contains("->")) {
ItemStack readStack = TweakerUtils.INSTANCE.getSpecialStack(in);
if (readStack.isEmpty())
throw new TweakerSyntaxException("Failed to get special stack for input: " + in);
throw new CDSyntaxError("Failed to get special stack for input: " + in);
if (readStack.hasTag()) {
tag = Optional.of(readStack.getTag());
} else {
@ -74,18 +74,18 @@ public class TRRecipeParser {
if (parsedTag.isEmpty()) requireEmpty = true;
else tag = Optional.of(reader.parseCompoundTag());
} catch (CommandSyntaxException e) {
throw new TweakerSyntaxException(e.getMessage());
throw new CDSyntaxError(e.getMessage());
}
}
Identifier id = new Identifier(in);
Item item = Registry.ITEM.get(id);
if (item == Items.AIR) throw new TweakerSyntaxException("Failed to get item for input: " + in);
if (item == Items.AIR) throw new CDSyntaxError("Failed to get item for input: " + in);
stack = new ItemStack(item);
}
return new StackIngredient(Collections.singletonList(stack), amount, tag, requireEmpty);
}
}
else throw new TweakerSyntaxException("Illegal object passed to TechReborn of type " + input.getClass().getName());
else throw new CDSyntaxError("Illegal object passed to TechReborn ingredient parser of type " + input.getClass().getName());
}
public static FluidInstance parseFluid(String fluid) {

View file

@ -1,6 +1,12 @@
package techreborn.compat.libcd;
import io.github.cottonmc.libcd.tweaker.*;
import blue.endless.jankson.JsonArray;
import blue.endless.jankson.JsonObject;
import blue.endless.jankson.JsonPrimitive;
import io.github.cottonmc.libcd.api.tweaker.Tweaker;
import io.github.cottonmc.libcd.api.tweaker.recipe.RecipeParser;
import io.github.cottonmc.libcd.api.tweaker.recipe.RecipeTweaker;
import io.github.cottonmc.libcd.api.tweaker.util.TweakerUtils;
import net.minecraft.fluid.Fluid;
import net.minecraft.fluid.Fluids;
import net.minecraft.item.Item;
@ -17,14 +23,12 @@ import reborncore.common.crafting.RecipeManager;
import reborncore.common.crafting.ingredient.FluidIngredient;
import reborncore.common.crafting.ingredient.RebornIngredient;
import reborncore.common.fluid.container.FluidInstance;
import techreborn.TechReborn;
import techreborn.api.generator.EFluidGenerator;
import techreborn.api.generator.FluidGeneratorRecipe;
import techreborn.api.generator.GeneratorRecipeHelper;
import techreborn.api.recipe.recipes.*;
import techreborn.init.ModRecipes;
import techreborn.init.TRContent;
import techreborn.items.ItemDynamicCell;
import java.util.*;
import java.util.concurrent.Executor;
@ -32,12 +36,14 @@ import java.util.concurrent.Executor;
public class TRTweaker implements Tweaker {
public static final TRTweaker INSTANCE = new TRTweaker();
private RecipeTweaker tweaker = RecipeTweaker.INSTANCE;
private JsonObject debug;
List<FluidGeneratorRecipe> added = new ArrayList<>();
List<FluidGeneratorRecipe> toAdd = new ArrayList<>();
@Override
public void prepareReload(ResourceManager resourceManager) {
debug = new JsonObject();
for (FluidGeneratorRecipe recipe : added) {
GeneratorRecipeHelper.removeFluidRecipe(recipe.getGeneratorType(), recipe.getFluid());
}
@ -49,8 +55,17 @@ public class TRTweaker implements Tweaker {
for (FluidGeneratorRecipe recipe : toAdd) {
if (GeneratorRecipeHelper.getFluidRecipesForGenerator(recipe.getGeneratorType()).addRecipe(recipe)) {
added.add(recipe);
String genID = recipe.getGeneratorType().getRecipeID();
if (!debug.containsKey(genID)) {
debug.put(genID, new JsonArray());
}
JsonArray array = (JsonArray) debug.get(genID);
JsonObject recipeInfo = new JsonObject();
recipeInfo.put("fluid", new JsonPrimitive(Registry.FLUID.getId(recipe.getFluid()).toString()));
recipeInfo.put("energy_per_mb", new JsonPrimitive(recipe.getEnergyPerMb()));
array.add(recipeInfo);
} else {
TechReborn.LOGGER.error("Could not add recipe to TechReborn generator " + recipe.getGeneratorType().getRecipeID()
tweaker.getLogger().error("Could not add recipe to TechReborn generator " + recipe.getGeneratorType().getRecipeID()
+ ": a recipe for fluid " + Registry.FLUID.getId(recipe.getFluid()) + " already exists");
}
}
@ -63,6 +78,11 @@ public class TRTweaker implements Tweaker {
return recipeCount + " TechReborn fluid generator " + (recipeCount == 1? "recipe" : "recipes");
}
@Override
public JsonObject getDebugInfo() {
return debug;
}
/**
* Create a fluid ingredient
* @param fluid The fluid required.
@ -95,20 +115,24 @@ public class TRTweaker implements Tweaker {
* @param power How much power the recipe consumes per tick.
* @param time How many ticks (1/20 of a second) to process for.
*/
public void add(RebornRecipeType type, Object[] inputs, ItemStack[] outputs, int power, int time) {
public void add(RebornRecipeType<?> type, Object[] inputs, Object[] outputs, int power, int time) {
try {
Identifier id = tweaker.getRecipeId(outputs[0]);
ItemStack[] parsedOut = new ItemStack[outputs.length];
for (int i = 0; i < outputs.length; i++) {
parsedOut[i] = RecipeParser.processItemStack(outputs[i]);
}
Identifier id = tweaker.getRecipeId(parsedOut[0]);
DefaultedList<RebornIngredient> ingredients = DefaultedList.of();
for (Object input : inputs) {
ingredients.add(TRRecipeParser.processIngredient(input));
}
tweaker.addRecipe(new RebornRecipe(type, id, ingredients, DefaultedList.copyOf(ItemStack.EMPTY, outputs), power, time));
tweaker.addRecipe(new RebornRecipe(type, id, ingredients, DefaultedList.copyOf(ItemStack.EMPTY, parsedOut), power, time));
} catch (Exception e) {
TechReborn.LOGGER.error("Error parsing TechReborn " + type.getName().getPath().replace('_', ' ') + " recipe - " + e.getMessage());
tweaker.getLogger().error("Error parsing TechReborn " + type.getName().getPath().replace('_', ' ') + " recipe - " + e.getMessage());
}
}
public void add(String type, Object[] inputs, ItemStack[] outputs, int power, int time) {
public void add(String type, Object[] inputs, Object[] outputs, int power, int time) {
Identifier id;
if (type.contains(":")) id = new Identifier(type);
else id = new Identifier("techreborn", type);
@ -123,7 +147,7 @@ public class TRTweaker implements Tweaker {
* @param power How much power the recipe consumes per tick.
* @param time How many ticks (1/20 of a second) to smelt for.
*/
public void addAlloySmelter(Object[] inputs, ItemStack[] outputs, int power, int time) {
public void addAlloySmelter(Object[] inputs, Object[] outputs, int power, int time) {
add(ModRecipes.ALLOY_SMELTER, inputs, outputs, power, time);
}
@ -134,7 +158,7 @@ public class TRTweaker implements Tweaker {
* @param power How much power the recipe consumes per tick.
* @param time How many ticks (1/20 of a second) to process for.
*/
public void addAssemblingMachine(Object[] inputs, ItemStack[] outputs, int power, int time) {
public void addAssemblingMachine(Object[] inputs, Object[] outputs, int power, int time) {
add(ModRecipes.ASSEMBLING_MACHINE, inputs, outputs, power, time);
}
@ -146,16 +170,20 @@ public class TRTweaker implements Tweaker {
* @param time How many ticks (1/20 of a second) to smelt for.
* @param heat How hot the blast furnace needs to be.
*/
public void addBlastFurnace(Object[] inputs, ItemStack[] outputs, int power, int time, int heat) {
public void addBlastFurnace(Object[] inputs, Object[] outputs, int power, int time, int heat) {
try {
Identifier id = tweaker.getRecipeId(outputs[0]);
ItemStack[] parsedOut = new ItemStack[outputs.length];
for (int i = 0; i < outputs.length; i++) {
parsedOut[i] = RecipeParser.processItemStack(outputs[i]);
}
Identifier id = tweaker.getRecipeId(parsedOut[0]);
DefaultedList<RebornIngredient> ingredients = DefaultedList.of();
for (Object input : inputs) {
ingredients.add(TRRecipeParser.processIngredient(input));
}
tweaker.addRecipe(new BlastFurnaceRecipe(ModRecipes.BLAST_FURNACE, id, ingredients, DefaultedList.copyOf(ItemStack.EMPTY, outputs), power, time, heat));
tweaker.addRecipe(new BlastFurnaceRecipe(ModRecipes.BLAST_FURNACE, id, ingredients, DefaultedList.copyOf(ItemStack.EMPTY, parsedOut), power, time, heat));
} catch (Exception e) {
TechReborn.LOGGER.error("Error parsing TechReborn blast furnace recipe - " + e.getMessage());
tweaker.getLogger().error("Error parsing TechReborn blast furnace recipe - " + e.getMessage());
}
}
@ -166,7 +194,7 @@ public class TRTweaker implements Tweaker {
* @param power How much power the recipe consumes per tick.
* @param time How many ticks (1/20 of a second) to process for.
*/
public void addCentrifuge(Object[] inputs, ItemStack[] outputs, int power, int time) {
public void addCentrifuge(Object[] inputs, Object[] outputs, int power, int time) {
add(ModRecipes.CENTRIFUGE, inputs, outputs, power, time);
}
@ -177,7 +205,7 @@ public class TRTweaker implements Tweaker {
* @param power How much power the recipe consumes per tick.
* @param time How many ticks (1/20 of a second) to process for.
*/
public void addChemicalReactor(Object[] inputs, ItemStack[] outputs, int power, int time) {
public void addChemicalReactor(Object[] inputs, Object[] outputs, int power, int time) {
add(ModRecipes.CHEMICAL_REACTOR, inputs, outputs, power, time);
}
@ -188,7 +216,7 @@ public class TRTweaker implements Tweaker {
* @param power How much power the recipe consumes per tick.
* @param time How many ticks (1/20 of a second) to process for.
*/
public void addCompressor(Object[] inputs, ItemStack[] outputs, int power, int time) {
public void addCompressor(Object[] inputs, Object[] outputs, int power, int time) {
add(ModRecipes.COMPRESSOR, inputs, outputs, power, time);
}
@ -199,7 +227,7 @@ public class TRTweaker implements Tweaker {
* @param power How much power the recipe consumes per tick.
* @param time How many ticks (1/20 of a second) to process for.
*/
public void addDistillationTower(Object[] inputs, ItemStack[] outputs, int power, int time) {
public void addDistillationTower(Object[] inputs, Object[] outputs, int power, int time) {
add(ModRecipes.DISTILLATION_TOWER, inputs, outputs, power, time);
}
@ -210,7 +238,7 @@ public class TRTweaker implements Tweaker {
* @param power How much power the recipe consumes per tick.
* @param time How many ticks (1/20 of a second) to process for.
*/
public void addExtractor(Object[] inputs, ItemStack[] outputs, int power, int time) {
public void addExtractor(Object[] inputs, Object[] outputs, int power, int time) {
add(ModRecipes.EXTRACTOR, inputs, outputs, power, time);
}
@ -221,7 +249,7 @@ public class TRTweaker implements Tweaker {
* @param power How much power the recipe consumes per tick.
* @param time How many ticks (1/20 of a second) to process for.
*/
public void addGrinder(Object[] inputs, ItemStack[] outputs, int power, int time) {
public void addGrinder(Object[] inputs, Object[] outputs, int power, int time) {
add(ModRecipes.GRINDER, inputs, outputs, power, time);
}
@ -232,7 +260,7 @@ public class TRTweaker implements Tweaker {
* @param power How much power the recipe consumes per tick.
* @param time How many ticks (1/20 of a second) to process for.
*/
public void addImplosionCompressor(Object[] inputs, ItemStack[] outputs, int power, int time) {
public void addImplosionCompressor(Object[] inputs, Object[] outputs, int power, int time) {
add(ModRecipes.IMPLOSION_COMPRESSOR, inputs, outputs, power, time);
}
@ -243,7 +271,7 @@ public class TRTweaker implements Tweaker {
* @param power How much power the recipe consumes per tick.
* @param time How many ticks (1/20 of a second) to process for.
*/
public void addIndustrialElectrolyzer(Object[] inputs, ItemStack[] outputs, int power, int time) {
public void addIndustrialElectrolyzer(Object[] inputs, Object[] outputs, int power, int time) {
add(ModRecipes.INDUSTRIAL_ELECTROLYZER, inputs, outputs, power, time);
}
@ -254,16 +282,20 @@ public class TRTweaker implements Tweaker {
* @param power How much power the recipe consumes per tick.
* @param time How many ticks (1/20 of a second) to process for.
*/
public void addIndustrialGrinder(Object[] inputs, ItemStack[] outputs, int power, int time) {
public void addIndustrialGrinder(Object[] inputs, Object[] outputs, int power, int time) {
try {
Identifier id = tweaker.getRecipeId(outputs[0]);
ItemStack[] parsedOut = new ItemStack[outputs.length];
for (int i = 0; i < outputs.length; i++) {
parsedOut[i] = RecipeParser.processItemStack(outputs[i]);
}
Identifier id = tweaker.getRecipeId(parsedOut[0]);
DefaultedList<RebornIngredient> ingredients = DefaultedList.of();
for (Object input : inputs) {
ingredients.add(TRRecipeParser.processIngredient(input));
}
tweaker.addRecipe(new IndustrialGrinderRecipe(ModRecipes.INDUSTRIAL_GRINDER, id, ingredients, DefaultedList.copyOf(ItemStack.EMPTY, outputs), power, time));
tweaker.addRecipe(new IndustrialGrinderRecipe(ModRecipes.INDUSTRIAL_GRINDER, id, ingredients, DefaultedList.copyOf(ItemStack.EMPTY, parsedOut), power, time));
} catch (Exception e) {
TechReborn.LOGGER.error("Error parsing TechReborn industrial grinder recipe - " + e.getMessage());
tweaker.getLogger().error("Error parsing TechReborn industrial grinder recipe - " + e.getMessage());
}
}
@ -275,17 +307,21 @@ public class TRTweaker implements Tweaker {
* @param time How many ticks (1/20 of a second) to process for.
* @param fluid The fluid required for the operation, including an amount.
*/
public void addIndustrialGrinder(Object[] inputs, ItemStack[] outputs, int power, int time, String fluid) {
public void addIndustrialGrinder(Object[] inputs, Object[] outputs, int power, int time, String fluid) {
try {
Identifier id = tweaker.getRecipeId(outputs[0]);
ItemStack[] parsedOut = new ItemStack[outputs.length];
for (int i = 0; i < outputs.length; i++) {
parsedOut[i] = RecipeParser.processItemStack(outputs[i]);
}
Identifier id = tweaker.getRecipeId(parsedOut[0]);
DefaultedList<RebornIngredient> ingredients = DefaultedList.of();
for (Object input : inputs) {
ingredients.add(TRRecipeParser.processIngredient(input));
}
FluidInstance fluidInst = TRRecipeParser.parseFluid(fluid);
tweaker.addRecipe(new IndustrialGrinderRecipe(ModRecipes.INDUSTRIAL_GRINDER, id, ingredients, DefaultedList.copyOf(ItemStack.EMPTY, outputs), power, time, fluidInst));
tweaker.addRecipe(new IndustrialGrinderRecipe(ModRecipes.INDUSTRIAL_GRINDER, id, ingredients, DefaultedList.copyOf(ItemStack.EMPTY, parsedOut), power, time, fluidInst));
} catch (Exception e) {
TechReborn.LOGGER.error("Error parsing TechReborn industrial grinder recipe - " + e.getMessage());
tweaker.getLogger().error("Error parsing TechReborn industrial grinder recipe - " + e.getMessage());
}
}
@ -296,16 +332,20 @@ public class TRTweaker implements Tweaker {
* @param power How much power the recipe consumes per tick.
* @param time How many ticks (1/20 of a second) to process for.
*/
public void addIndustrialSawmill(Object[] inputs, ItemStack[] outputs, int power, int time) {
public void addIndustrialSawmill(Object[] inputs, Object[] outputs, int power, int time) {
try {
Identifier id = tweaker.getRecipeId(outputs[0]);
ItemStack[] parsedOut = new ItemStack[outputs.length];
for (int i = 0; i < outputs.length; i++) {
parsedOut[i] = RecipeParser.processItemStack(outputs[i]);
}
Identifier id = tweaker.getRecipeId(parsedOut[0]);
DefaultedList<RebornIngredient> ingredients = DefaultedList.of();
for (Object input : inputs) {
ingredients.add(TRRecipeParser.processIngredient(input));
}
tweaker.addRecipe(new IndustrialSawmillRecipe(ModRecipes.INDUSTRIAL_SAWMILL, id, ingredients, DefaultedList.copyOf(ItemStack.EMPTY, outputs), power, time));
tweaker.addRecipe(new IndustrialSawmillRecipe(ModRecipes.INDUSTRIAL_SAWMILL, id, ingredients, DefaultedList.copyOf(ItemStack.EMPTY, parsedOut), power, time));
} catch (Exception e) {
TechReborn.LOGGER.error("Error parsing TechReborn industrial sawmill recipe - " + e.getMessage());
tweaker.getLogger().error("Error parsing TechReborn industrial sawmill recipe - " + e.getMessage());
}
}
@ -317,17 +357,21 @@ public class TRTweaker implements Tweaker {
* @param time How many ticks (1/20 of a second) to process for.
* @param fluid The fluid required for this operation, including an amount.
*/
public void addIndustrialSawmill(Object[] inputs, ItemStack[] outputs, int power, int time, String fluid) {
public void addIndustrialSawmill(Object[] inputs, Object[] outputs, int power, int time, String fluid) {
try {
Identifier id = tweaker.getRecipeId(outputs[0]);
ItemStack[] parsedOut = new ItemStack[outputs.length];
for (int i = 0; i < outputs.length; i++) {
parsedOut[i] = RecipeParser.processItemStack(outputs[i]);
}
Identifier id = tweaker.getRecipeId(parsedOut[0]);
DefaultedList<RebornIngredient> ingredients = DefaultedList.of();
for (Object input : inputs) {
ingredients.add(TRRecipeParser.processIngredient(input));
}
FluidInstance fluidInst = TRRecipeParser.parseFluid(fluid);
tweaker.addRecipe(new IndustrialSawmillRecipe(ModRecipes.INDUSTRIAL_SAWMILL, id, ingredients, DefaultedList.copyOf(ItemStack.EMPTY, outputs), power, time, fluidInst));
tweaker.addRecipe(new IndustrialSawmillRecipe(ModRecipes.INDUSTRIAL_SAWMILL, id, ingredients, DefaultedList.copyOf(ItemStack.EMPTY, parsedOut), power, time, fluidInst));
} catch (Exception e) {
TechReborn.LOGGER.error("Error parsing TechReborn industrial sawmill recipe - " + e.getMessage());
tweaker.getLogger().error("Error parsing TechReborn industrial sawmill recipe - " + e.getMessage());
}
}
@ -338,7 +382,7 @@ public class TRTweaker implements Tweaker {
* @param power How much power the recipe consumes per tick.
* @param time How many ticks (1/20 of a second) to process for.
*/
public void addRecycler(Object[] inputs, ItemStack[] outputs, int power, int time) {
public void addRecycler(Object[] inputs, Object[] outputs, int power, int time) {
add(ModRecipes.RECYCLER, inputs, outputs, power, time);
}
@ -348,8 +392,8 @@ public class TRTweaker implements Tweaker {
* @param power How much power the recipe consumes per tick.
* @param time How many ticks (1/20 of a second) to process for.
*/
public void addScrapbox(ItemStack output, int power, int time) {
add(ModRecipes.SCRAPBOX, new String[]{"techreborn:scrap_box"}, new ItemStack[]{output}, power, time);
public void addScrapbox(Object output, int power, int time) {
add(ModRecipes.SCRAPBOX, new String[]{"techreborn:scrap_box"}, new Object[]{output}, power, time);
}
/**
@ -359,7 +403,7 @@ public class TRTweaker implements Tweaker {
* @param power How much power the recipe consumes per tick.
* @param time How many ticks (1/20 of a second) to process for.
*/
public void addVacuumFreezer(Object[] inputs, ItemStack[] outputs, int power, int time) {
public void addVacuumFreezer(Object[] inputs, Object[] outputs, int power, int time) {
add(ModRecipes.VACUUM_FREEZER, inputs, outputs, power, time);
}
@ -380,7 +424,7 @@ public class TRTweaker implements Tweaker {
FluidInstance fluidInst = TRRecipeParser.parseFluid(fluid);
tweaker.addRecipe(new FluidReplicatorRecipe(ModRecipes.FLUID_REPLICATOR, id, ingredients, DefaultedList.of(), power, time, fluidInst));
} catch (Exception e) {
TechReborn.LOGGER.error("Error parsing TechReborn fluid replicator recipe - " + e.getMessage());
tweaker.getLogger().error("Error parsing TechReborn fluid replicator recipe - " + e.getMessage());
}
}
@ -393,16 +437,20 @@ public class TRTweaker implements Tweaker {
* @param startE The energy requried to start the reaction.
* @param minSize The minimum size of the reactor coil ring for this reaction.
*/
public void addFusionReactor(Object[] inputs, ItemStack[] outputs, int power, int time, int startE, int minSize) {
public void addFusionReactor(Object[] inputs, Object[] outputs, int power, int time, int startE, int minSize) {
try {
Identifier id = tweaker.getRecipeId(outputs[0]);
ItemStack[] parsedOut = new ItemStack[outputs.length];
for (int i = 0; i < outputs.length; i++) {
parsedOut[i] = RecipeParser.processItemStack(outputs[i]);
}
Identifier id = tweaker.getRecipeId(parsedOut[0]);
DefaultedList<RebornIngredient> ingredients = DefaultedList.of();
for (Object input : inputs) {
ingredients.add(TRRecipeParser.processIngredient(input));
}
tweaker.addRecipe(new FusionReactorRecipe(ModRecipes.FUSION_REACTOR, id, ingredients, DefaultedList.copyOf(ItemStack.EMPTY, outputs), power, time, startE, minSize));
tweaker.addRecipe(new FusionReactorRecipe(ModRecipes.FUSION_REACTOR, id, ingredients, DefaultedList.copyOf(ItemStack.EMPTY, parsedOut), power, time, startE, minSize));
} catch (Exception e) {
TechReborn.LOGGER.error("Error parsing TechReborn fusion reactor recipe - " + e.getMessage());
tweaker.getLogger().error("Error parsing TechReborn fusion reactor recipe - " + e.getMessage());
}
}
@ -411,14 +459,14 @@ public class TRTweaker implements Tweaker {
* @param inputs the 2D array (array of arrays) of inputs to use.
* @param output The output of the recipe.
*/
public void addRollingMachine(Object[][] inputs, ItemStack output) {
public void addRollingMachine(Object[][] inputs, Object output) {
try {
Object[] processed = RecipeParser.processGrid(inputs);
int width = inputs[0].length;
int height = inputs.length;
addRollingMachine(processed, output, width, height);
} catch (Exception e) {
TechReborn.LOGGER.error("Error parsing TechReborn rolling machine recipe - " + e.getMessage());
tweaker.getLogger().error("Error parsing TechReborn 2D array rolling machine recipe - " + e.getMessage());
}
}
@ -429,18 +477,19 @@ public class TRTweaker implements Tweaker {
* @param width How many rows the recipe needs.
* @param height How many columns the recipe needs.
*/
public void addRollingMachine(Object[] inputs, ItemStack output, int width, int height) {
Identifier recipeId = tweaker.getRecipeId(output);
public void addRollingMachine(Object[] inputs, Object output, int width, int height) {
try {
DefaultedList<Ingredient> ingredients = DefaultedList.of();
ItemStack out = RecipeParser.processItemStack(output);
Identifier recipeId = tweaker.getRecipeId(out);
DefaultedList<Ingredient> ingredients = DefaultedList.ofSize(width * height, Ingredient.EMPTY);
for (int i = 0; i < Math.min(inputs.length, width * height); i++) {
Object id = inputs[i];
if (id.equals("")) continue;
ingredients.add(i, RecipeParser.processIngredient(id));
if (id == null || id.equals("") || id.equals("minecraft:air")) continue;
ingredients.set(i, RecipeParser.processIngredient(id));
}
tweaker.addRecipe(new RollingMachineRecipe(ModRecipes.ROLLING_MACHINE, recipeId, new ShapedRecipe(recipeId, "", width, height, ingredients, output)));
tweaker.addRecipe(new RollingMachineRecipe(ModRecipes.ROLLING_MACHINE, recipeId, new ShapedRecipe(recipeId, "", width, height, ingredients, out)));
} catch (Exception e) {
TechReborn.LOGGER.error("Error parsing TechReborn rolling machine recipe - " + e.getMessage());
tweaker.getLogger().error("Error parsing TechReborn 1D array rolling machine recipe - " + e.getMessage());
}
}
@ -450,17 +499,18 @@ public class TRTweaker implements Tweaker {
* @param dictionary A map of single characters to item or tag ids.
* @param output The output of the recipe.
*/
public void addRollingMachine(String[] pattern, Map<String, Object> dictionary, ItemStack output) {
Identifier recipeId = tweaker.getRecipeId(output);
public void addDictRollingMachine(String[] pattern, Map<String, Object> dictionary, Object output) {
try {
ItemStack out = RecipeParser.processItemStack(output);
Identifier recipeId = tweaker.getRecipeId(out);
pattern = RecipeParser.processPattern(pattern);
Map<String, Ingredient> map = RecipeParser.processDictionary(dictionary);
int x = pattern[0].length();
int y = pattern.length;
DefaultedList<Ingredient> ingredients = RecipeParser.getIngredients(pattern, map, x, y);
tweaker.addRecipe(new RollingMachineRecipe(ModRecipes.ROLLING_MACHINE, recipeId, new ShapedRecipe(recipeId, "", x, y, ingredients, output)));
tweaker.addRecipe(new RollingMachineRecipe(ModRecipes.ROLLING_MACHINE, recipeId, new ShapedRecipe(recipeId, "", x, y, ingredients, out)));
} catch (Exception e) {
TechReborn.LOGGER.error("Error parsing TechReborn rolling machine recipe - " + e.getMessage());
tweaker.getLogger().error("Error parsing TechReborn dictionary rolling machine recipe - " + e.getMessage());
}
}
@ -471,7 +521,7 @@ public class TRTweaker implements Tweaker {
* @param power How much power the recipe consumes per tick.
* @param time How many ticks (1/20 of a second) to process for.
*/
public void addSolidCanningMachine(Object[] inputs, ItemStack[] outputs, int power, int time) {
public void addSolidCanningMachine(Object[] inputs, Object[] outputs, int power, int time) {
add(ModRecipes.SOLID_CANNING_MACHINE, inputs, outputs, power, time);
}
@ -482,7 +532,7 @@ public class TRTweaker implements Tweaker {
* @param power How much power the recipe consumes per tick.
* @param time How many ticks (1/20 of a second) to process for.
*/
public void addWireMill(Object[] inputs, ItemStack[] outputs, int power, int time) {
public void addWireMill(Object[] inputs, Object[] outputs, int power, int time) {
add(ModRecipes.WIRE_MILL, inputs, outputs, power, time);
}
@ -516,19 +566,14 @@ public class TRTweaker implements Tweaker {
type = EFluidGenerator.PLASMA;
break;
default:
TechReborn.LOGGER.error("Error parsing TechReborn fluid generator recipe - could not find generator: " + generator);
tweaker.getLogger().error("Error parsing TechReborn fluid generator recipe - could not find generator: " + generator);
return;
}
Fluid parsedFluid = TweakerUtils.INSTANCE.getFluid(fluid);
if (parsedFluid == Fluids.EMPTY) {
TechReborn.LOGGER.error("Error parsing TechReborn fluid generator recipe - could not find fluid: " + fluid);
tweaker.getLogger().error("Error parsing TechReborn fluid generator recipe - could not find fluid: " + fluid);
return;
}
toAdd.add(new FluidGeneratorRecipe(parsedFluid, euPerMB, type));
}
public static void init() {
Tweaker.addTweaker("TRTweaker", TRTweaker.INSTANCE);
TweakerStackGetter.registerGetter(new Identifier("techreborn:cell"), (id) -> ItemDynamicCell.getCellWithFluid(Registry.FLUID.get(id)));
}
}

View file

@ -1,15 +1,18 @@
//Warn that the sample script is running
print("WARNING! The TechReborn tweaker sample script is running!");
print("If you're seeing this and aren't in dev mode, please report it!");
log.warn("WARNING! The TechReborn tweaker sample script is running!");
log.warn("If you're seeing this and aren't in dev mode, please report it!");
var TRTweaker = libcd.require("techreborn.TRTweaker");
var TweakerUtils = libcd.require("libcd.util.TweakerUtils");
//Add an alloy smelter recipe that takes 8 coal and 2 obsidian -> 2 diamonds
TRTweaker.addAlloySmelter(["minecraft:coal@8", "minecraft:obsidian@2"], [TweakerUtils.createItemStack("minecraft:diamond", 2)], 6, 200);
TRTweaker.addAlloySmelter(["minecraft:coal@8", "minecraft:obsidian@2"], ["minecraft:diamond@2"], 6, 200);
//Add an assembling machine recipe that takes 3 diamonds and 2 sticks -> 1 diamond pickaxe
TRTweaker.addAssemblingMachine(["minecraft:diamond@3", "minecraft:stick@2"], [TweakerUtils.createItemStack("minecraft:diamond_pickaxe", 1)], 20, 200);
TRTweaker.addAssemblingMachine(["minecraft:diamond@3", "minecraft:stick@2"], ["minecraft:diamond_pickaxe"], 20, 200);
//Add a blast furnace recipe that takes 64 of any item in the minecraft:coals tag -> 8 diamonds
TRTweaker.addBlastFurnace(["#minecraft:coals@64"], [TweakerUtils.createItemStack("minecraft:diamond", 8)], 128, 200, 1300);
TRTweaker.addBlastFurnace(["#minecraft:coals@64"], ["minecraft:diamond@8"], 128, 200, 1300);
//Add a centrifuge recipe that takes any potion -> a water bottle
TRTweaker.addCentrifuge(["minecraft:potion"], [TweakerUtils.getSpecialStack("minecraft:potion->minecraft:water")], 5, 1000);
@ -19,53 +22,53 @@ TRTweaker.addCentrifuge(["minecraft:potion"], [TweakerUtils.getSpecialStack("min
TRTweaker.addChemicalReactor(["minecraft:potion->minecraft:water", TRTweaker.createFluidIngredient("techreborn:methane", ["techreborn:cell"], -1)], [TweakerUtils.getSpecialStack("minecraft:potion->minecraft:fire_resistance")], 30, 800);
//Add a compressor recipe that takes 9 coal blocks -> 3 pieces of obsidian
TRTweaker.addCompressor(["minecraft:coal_ore@9"], [TweakerUtils.createItemStack("minecraft:coal_block", 3)], 10, 300);
TRTweaker.addCompressor(["minecraft:coal_ore@9"], ["minecraft:coal_block@3"], 10, 300);
//Add a distillation tower recipe that takes a potion of regneration -> a strong potion of regeneration
TRTweaker.addDistillationTower(["minecraft:potion->minecraft:regeneration"], [TweakerUtils.getSpecialStack("minecraft:potion->minecraft:strong_regeneration")], 20, 400);
//Add an extractor recipe that takes 4 coal -> 1 gunpowder
TRTweaker.addExtractor(["minecraft:coal@4"], [TweakerUtils.createItemStack("minecraft:gunpowder", 1)], 10, 300);
TRTweaker.addExtractor(["minecraft:coal@4"], ["minecraft:gunpowder"], 10, 300);
//Add a grinder recipe of 1 sugar cane -> 3 sugar
TRTweaker.addGrinder(["minecraft:sugar_cane"], [TweakerUtils.createItemStack("minecraft:sugar", 3)], 4, 270);
TRTweaker.addGrinder(["minecraft:sugar_cane"], ["minecraft:sugar@3"], 4, 270);
//Add an implosion compressor recipe of 32 coal and 16 flint -> 16 diamonds
TRTweaker.addImplosionCompressor(["minecraft:coal@32", "minecraft:flint@16"], [TweakerUtils.createItemStack("minecraft:diamond", 16)], 30, 2000);
TRTweaker.addImplosionCompressor(["minecraft:coal@32", "minecraft:flint@16"], ["minecraft:diamond@16"], 30, 2000);
//Add an industrial electrolyzer recipe of 1 skeleton skull -> 1 wither skeleton skull
TRTweaker.addIndustrialElectrolyzer(["minecraft:skeleton_skull"], [TweakerUtils.createItemStack("minecraft:wither_skeleton_skull", 1)], 50, 1400);
TRTweaker.addIndustrialElectrolyzer(["minecraft:skeleton_skull"], ["minecraft:wither_skeleton_skull"], 50, 1400);
//Add an industrial electrolyzer recipe of 1 sea lantern -> 5 prismarine crystals and 4 prismarine shards
TRTweaker.addIndustrialGrinder(["minecraft:sea_lantern"], [TweakerUtils.createItemStack("minecraft:prismarine_crystals", 5), TweakerUtils.createItemStack("minecraft:prismarine_shard", 4)], 64, 100);
TRTweaker.addIndustrialGrinder(["minecraft:sea_lantern"], ["minecraft:prismarine_crystals@5", "minecraft:prismarine_shard@4"], 64, 100);
//Add an industrial electrolyzer recipe of 1 sea lantern and 1 bucket of electrolyzed water -> 9 prismarine crystals
TRTweaker.addIndustrialGrinder(["minecraft:sea_lantern"], [TweakerUtils.createItemStack("minecraft:prismarine_crystals", 9)], 64, 100, "techreborn:electrolyzed_water@1000");
TRTweaker.addIndustrialGrinder(["minecraft:sea_lantern"], ["minecraft:prismarine_crystals@9"], 64, 100, "techreborn:electrolyzed_water@1000");
//Add an industrial sawmill recipe of 3 sugar cane -> 18 paper
TRTweaker.addIndustrialSawmill(["minecraft:sugar_cane@3"], [TweakerUtils.createItemStack("minecraft:paper", 18)], 40, 200);
TRTweaker.addIndustrialSawmill(["minecraft:sugar_cane@3"], ["minecraft:paper@18"], 40, 200);
//Add an industrial sawmill recipe of 1 heart of the sea and 1/2 bucket of water -> 16 nautilus shells
TRTweaker.addIndustrialSawmill(["minecraft:heart_of_the_sea"], [TweakerUtils.createItemStack("minecraft:nautilus_shell", 16)], 40, 200, "minecraft:water@500");
TRTweaker.addIndustrialSawmill(["minecraft:heart_of_the_sea"], ["minecraft:nautilus_shell@16"], 40, 200, "minecraft:water@500");
//Add a recycler recipe of 1 water bucket -> 1 empty bucket
TRTweaker.addRecycler(["minecraft:water_bucket"], [TweakerUtils.createItemStack("minecraft:bucket", 1)], 5, 40);
TRTweaker.addRecycler(["minecraft:water_bucket"], ["minecraft:bucket"], 5, 40);
//Add a scrapbox recipe of 1 scrap box -> 1 shulker box
TRTweaker.addScrapbox(TweakerUtils.createItemStack("minecraft:shulker_box", 1), 10, 20);
TRTweaker.addScrapbox("minecraft:shulker_box", 10, 20);
//Add a scrapbox recipe of 1 cell of water -> 1 blue ice
TRTweaker.addVacuumFreezer([TRTweaker.createFluidIngredient("minecraft:water", ["techreborn:cell"], -1)], [TweakerUtils.createItemStack("minecraft:blue_ice", 1)], 60, 440);
TRTweaker.addVacuumFreezer([TRTweaker.createFluidIngredient("minecraft:water", ["techreborn:cell"], -1)], ["minecraft:blue_ice"], 60, 440);
//Add a fluid replicator recipe of 2 uu matter and 1 bucket of wulframium -> 2 buckets of wolframium
TRTweaker.addFluidReplicator(["techreborn:uu_matter@2"], 40, 100, "techreborn:wolframium@1000");
//Add a fusion reactor recipe of 3 wither skeleton skulls and 4 soul sand -> 1 nether star
TRTweaker.addFusionReactor(["minecraft:wither_skeleton_skull@3", "minecraft:soul_sand@4"], [TweakerUtils.createItemStack("minecraft:nether_star", 1)], -2048, 1024, 90000, 1);
TRTweaker.addFusionReactor(["minecraft:wither_skeleton_skull@3", "minecraft:soul_sand@4"], ["minecraft:nether_star"], -2048, 1024, 90000, 1);
//Add a rolling machine recipe for 5 popped chorus fruit in a helmet shape -> a shulker shell
var chorus = "minecraft:popped_chorus_fruit";
TRTweaker.addRollingMachine([[chorus, chorus, chorus], [chorus, "", chorus]], TweakerUtils.createItemStack("minecraft:shulker_shell", 1));
TRTweaker.addRollingMachine([[chorus, chorus, chorus], [chorus, "", chorus]], "minecraft:shulker_shell");
//Create a pattern/dictionary set for a shaped recipe
var pattern = [ '/ /',
@ -77,13 +80,13 @@ var dict = {
};
//Add a rolling machine recipe for sticks on the sides and any wooden slab in the middle -> six ladders
TRTweaker.addRollingMachine(pattern, dict, TweakerUtils.createItemStack("minecraft:ladder", 12));
TRTweaker.addDictRollingMachine(pattern, dict, "minecraft:ladder@12");
//Add a solid canning machine recipe for 1 empty cell and 1 blue ice -> a cell full of water
TRTweaker.addSolidCanningMachine(["techreborn:cell{}", "minecraft:blue_ice"], [TweakerUtils.getSpecialStack("techreborn:cell->minecraft:water")], 1, 100);
//Add a wire mill recipe for 1 woll -> 4 string
TRTweaker.addWireMill(["#minecraft:wool"], [TweakerUtils.createItemStack("minecraft:string", 4)], 2, 200);
TRTweaker.addWireMill(["#minecraft:wool"], ["minecraft:string@4"], 2, 200);
//Add a plasma fluid generator recipe for 1 mB of wolframium -> 300 EU
TRTweaker.addFluidGenerator("plasma", "techreborn:wolframium", 300);

View file

@ -24,6 +24,9 @@
],
"towelette": [
"techreborn.compat.towelette.TowelettePlugin"
],
"libcd": [
"techreborn.compat.libcd.LibCDPlugin"
]
},
"depends": {