aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/goodgenerator/util
diff options
context:
space:
mode:
authorRaven Szewczyk <git@eigenraven.me>2024-05-25 14:13:58 +0100
committerRaven Szewczyk <git@eigenraven.me>2024-05-25 14:13:58 +0100
commit91b1909427bb0cab0f72505c325b07f8fb39c62e (patch)
treed6570897b7150afd4f3cb1470202af11e3e9ece3 /src/main/java/goodgenerator/util
parent40efa0d238677418071b658b11b0a1a7c9e0d864 (diff)
downloadGT5-Unofficial-91b1909427bb0cab0f72505c325b07f8fb39c62e.tar.gz
GT5-Unofficial-91b1909427bb0cab0f72505c325b07f8fb39c62e.tar.bz2
GT5-Unofficial-91b1909427bb0cab0f72505c325b07f8fb39c62e.zip
Move GoodGen sources
Diffstat (limited to 'src/main/java/goodgenerator/util')
-rw-r--r--src/main/java/goodgenerator/util/CharExchanger.java52
-rw-r--r--src/main/java/goodgenerator/util/CrackRecipeAdder.java624
-rw-r--r--src/main/java/goodgenerator/util/DescTextLocalization.java22
-rw-r--r--src/main/java/goodgenerator/util/ItemRefer.java221
-rw-r--r--src/main/java/goodgenerator/util/Log.java9
-rw-r--r--src/main/java/goodgenerator/util/MaterialFix.java393
-rw-r--r--src/main/java/goodgenerator/util/MyRecipeAdder.java72
-rw-r--r--src/main/java/goodgenerator/util/StackUtils.java143
-rw-r--r--src/main/java/goodgenerator/util/StructureHelper.java117
9 files changed, 1653 insertions, 0 deletions
diff --git a/src/main/java/goodgenerator/util/CharExchanger.java b/src/main/java/goodgenerator/util/CharExchanger.java
new file mode 100644
index 0000000000..96019eecd1
--- /dev/null
+++ b/src/main/java/goodgenerator/util/CharExchanger.java
@@ -0,0 +1,52 @@
+package goodgenerator.util;
+
+import net.minecraft.util.EnumChatFormatting;
+
+public class CharExchanger {
+
+ public static final String[] tierName = new String[] { EnumChatFormatting.RED + "ULV" + EnumChatFormatting.RESET,
+ EnumChatFormatting.GRAY + "LV" + EnumChatFormatting.RESET,
+ EnumChatFormatting.AQUA + "MV" + EnumChatFormatting.RESET,
+ EnumChatFormatting.GOLD + "HV" + EnumChatFormatting.RESET,
+ EnumChatFormatting.DARK_PURPLE + "EV" + EnumChatFormatting.RESET,
+ EnumChatFormatting.DARK_BLUE + "IV" + EnumChatFormatting.RESET,
+ EnumChatFormatting.LIGHT_PURPLE + "LuV" + EnumChatFormatting.RESET,
+ EnumChatFormatting.WHITE + "ZPM" + EnumChatFormatting.RESET,
+ EnumChatFormatting.DARK_AQUA + "UV" + EnumChatFormatting.RESET,
+ EnumChatFormatting.DARK_RED + "UHV" + EnumChatFormatting.RESET,
+ EnumChatFormatting.GREEN + "UEV" + EnumChatFormatting.RESET, };
+
+ public static char shifter(int unicode) {
+ return (char) unicode;
+ }
+
+ public static String formatNumber(String exp) {
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < exp.length(); ++i) {
+ if (Character.isDigit(exp.charAt(i))) {
+ int cnt = 0, prt = i;
+ while (i < exp.length() && Character.isDigit(exp.charAt(i))) {
+ i++;
+ cnt++;
+ }
+ while (prt < exp.length() && Character.isDigit(exp.charAt(prt))) {
+ sb.append(exp.charAt(prt));
+ prt++;
+ cnt--;
+ if (cnt % 3 == 0 && cnt != 0) sb.append(",");
+ }
+ }
+ if (i < exp.length()) sb.append(exp.charAt(i));
+ }
+ return sb.toString();
+ }
+
+ public static String[] genString(String content, int len) {
+ String[] ret = new String[len];
+ while (len > 0) {
+ len--;
+ ret[len] = content;
+ }
+ return ret;
+ }
+}
diff --git a/src/main/java/goodgenerator/util/CrackRecipeAdder.java b/src/main/java/goodgenerator/util/CrackRecipeAdder.java
new file mode 100644
index 0000000000..dddb7fe69d
--- /dev/null
+++ b/src/main/java/goodgenerator/util/CrackRecipeAdder.java
@@ -0,0 +1,624 @@
+package goodgenerator.util;
+
+import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes;
+import static gregtech.api.recipe.RecipeMaps.crackingRecipes;
+import static gregtech.api.recipe.RecipeMaps.distillationTowerRecipes;
+import static gregtech.api.recipe.RecipeMaps.distilleryRecipes;
+import static gregtech.api.recipe.RecipeMaps.extruderRecipes;
+import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes;
+import static gregtech.api.recipe.RecipeMaps.wiremillRecipes;
+import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
+import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+import static gregtech.api.util.GT_RecipeConstants.COIL_HEAT;
+
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidRegistry;
+import net.minecraftforge.fluids.FluidStack;
+
+import com.github.bartimaeusnek.bartworks.system.material.Werkstoff;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.TierEU;
+import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Cable;
+import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Fluid;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_RecipeBuilder;
+import gregtech.api.util.GT_Utility;
+
+public class CrackRecipeAdder {
+
+ static float[] coe1 = { 1.25f, 1.2f, 1.1f, 0.9f, 0.85f, 0.8f, 0.75f };
+ static float[] coe2 = { 1.4f, 1.25f, 1.2f, 0.8f, 0.75f, 0.7f, 0.65f };
+ static float[] coe3 = { 1.6f, 1.5f, 1.45f, 0.7f, 0.6f, 0.55f, 0.45f };
+
+ public static void crackerAdder(FluidStack inputFluid, FluidStack cracker, FluidStack[] outputFluids,
+ ItemStack outputItem, int num, int EUt, int Duration) {
+
+ String name;
+ FluidStack[] actOutput = new FluidStack[num];
+ name = inputFluid.getFluid()
+ .getName()
+ .replaceAll(" ", "");
+
+ GT_Values.RA.stdBuilder()
+ .itemInputs(GT_Utility.getIntegratedCircuit(1))
+ .fluidInputs(inputFluid, cracker)
+ .fluidOutputs(FluidRegistry.getFluidStack("lightlycracked" + name, 1000))
+ .duration(Math.max((long) (Duration * 0.8), 1L) * TICKS)
+ .eut(EUt)
+ .addTo(crackingRecipes);
+
+ GT_Values.RA.stdBuilder()
+ .itemInputs(GT_Utility.getIntegratedCircuit(2))
+ .fluidInputs(inputFluid, cracker)
+ .fluidOutputs(FluidRegistry.getFluidStack("moderatelycracked" + name, 1000))
+ .duration(Math.max((long) (Duration), 1L) * TICKS)
+ .eut(EUt)
+ .addTo(crackingRecipes);
+
+ GT_Values.RA.stdBuilder()
+ .itemInputs(GT_Utility.getIntegratedCircuit(3))
+ .fluidInputs(inputFluid, cracker)
+ .fluidOutputs(FluidRegistry.getFluidStack("heavilycracked" + name, 1000))
+ .duration(Math.max((long) (Duration * 1.2), 1L) * TICKS)
+ .eut(EUt)
+ .addTo(crackingRecipes);
+
+ for (int i = num - 1, j = 0; i >= 0; i--, j++) {
+ Fluid tmp1 = outputFluids[i].getFluid();
+ int tmp2 = (int) (outputFluids[i].amount * coe1[i]);
+ actOutput[j] = new FluidStack(tmp1, tmp2);
+ }
+
+ addUniversalDistillationRecipe(
+ FluidRegistry.getFluidStack("lightlycracked" + name, 1000),
+ actOutput,
+ outputItem,
+ Duration / 2,
+ EUt / 3);
+
+ for (int i = num - 1, j = 0; i >= 0; i--, j++) {
+ Fluid tmp1 = outputFluids[i].getFluid();
+ int tmp2 = (int) (outputFluids[i].amount * coe2[i]);
+ actOutput[j] = new FluidStack(tmp1, tmp2);
+ }
+
+ addUniversalDistillationRecipe(
+ FluidRegistry.getFluidStack("moderatelycracked" + name, 1000),
+ actOutput,
+ outputItem,
+ Duration / 2,
+ EUt / 3);
+
+ for (int i = num - 1, j = 0; i >= 0; i--, j++) {
+ Fluid tmp1 = outputFluids[i].getFluid();
+ int tmp2 = (int) (outputFluids[i].amount * coe3[i]);
+ actOutput[j] = new FluidStack(tmp1, tmp2);
+ }
+
+ addUniversalDistillationRecipe(
+ FluidRegistry.getFluidStack("heavilycracked" + name, 1000),
+ actOutput,
+ outputItem,
+ Duration / 2,
+ EUt / 3);
+ }
+
+ public static void reAddBlastRecipe(Werkstoff material, int duration, int EUt, int level, boolean gas) {
+ ItemStack input = material.get(OrePrefixes.dust, 1);
+ ItemStack output = level > 1750 ? material.get(OrePrefixes.ingotHot, 1) : material.get(OrePrefixes.ingot, 1);
+ if (gas) {
+ GT_Values.RA.stdBuilder()
+ .itemInputs(input, GT_Utility.getIntegratedCircuit(11))
+ .fluidInputs(Materials.Helium.getGas(1000))
+ .itemOutputs(output)
+ .duration(duration * TICKS)
+ .eut(EUt)
+ .metadata(COIL_HEAT, level)
+ .addTo(blastFurnaceRecipes);
+ } else {
+ GT_Values.RA.stdBuilder()
+ .itemInputs(input, GT_Utility.getIntegratedCircuit(1))
+ .itemOutputs(output)
+ .duration(duration * TICKS)
+ .eut(EUt)
+ .metadata(COIL_HEAT, level)
+ .addTo(blastFurnaceRecipes);
+ }
+ }
+
+ public static void addUniversalDistillationRecipewithCircuit(FluidStack aInput, ItemStack[] aCircuit,
+ FluidStack[] aOutputs, ItemStack aOutput2, int aDuration, long aEUt) {
+ for (int i = 0; i < Math.min(aOutputs.length, 11); i++) {
+ GT_RecipeBuilder buildDistillation = GT_Values.RA.stdBuilder()
+ .itemInputs(GT_Utility.getIntegratedCircuit(i + 1));
+ if (aOutput2 != GT_Values.NI) {
+ buildDistillation.itemOutputs(aOutput2);
+ }
+ buildDistillation.fluidInputs(aInput)
+ .fluidOutputs(aOutputs[i])
+ .duration(2 * aDuration)
+ .eut(aEUt / 4)
+ .addTo(distilleryRecipes);
+ }
+ GT_RecipeBuilder buildDT = GT_Values.RA.stdBuilder()
+ .itemInputs(aCircuit);
+ if (aOutput2 != GT_Values.NI) {
+ buildDT.itemOutputs(aOutput2);
+ }
+ buildDT.fluidInputs(aInput)
+ .fluidOutputs(aOutputs)
+ .duration(aDuration)
+ .eut(aEUt)
+ .addTo(distillationTowerRecipes);
+ }
+
+ public static void addUniversalDistillationRecipe(FluidStack aInput, FluidStack[] aOutputs, ItemStack aOutput2,
+ int aDuration, long aEUt) {
+ for (int i = 0; i < Math.min(aOutputs.length, 11); i++) {
+ GT_RecipeBuilder buildDistillation = GT_Values.RA.stdBuilder()
+ .itemInputs(GT_Utility.getIntegratedCircuit(i + 1));
+ if (aOutput2 != GT_Values.NI) {
+ buildDistillation.itemOutputs(aOutput2);
+ }
+ buildDistillation.fluidInputs(aInput)
+ .fluidOutputs(aOutputs[i])
+ .duration(2 * aDuration)
+ .eut(aEUt / 4)
+ .addTo(distilleryRecipes);
+ }
+ GT_RecipeBuilder buildDT = GT_Values.RA.stdBuilder();
+ if (aOutput2 != GT_Values.NI) {
+ buildDT.itemOutputs(aOutput2);
+ }
+ buildDT.fluidInputs(aInput)
+ .fluidOutputs(aOutputs)
+ .duration(aDuration)
+ .eut(aEUt)
+ .addTo(distillationTowerRecipes);
+ }
+
+ public static FluidStack copyFluidWithAmount(FluidStack fluid, int amount) {
+ if (fluid == null || amount <= 0) return null;
+ return new FluidStack(fluid.getFluid(), amount);
+ }
+
+ public static void registerPipe(int ID, Werkstoff material, int flow, int temp, boolean gas) {
+ String unName = material.getDefaultName()
+ .replace(" ", "_");
+ String Name = material.getDefaultName();
+ GT_OreDictUnificator.registerOre(
+ OrePrefixes.pipeTiny.get(material.getBridgeMaterial()),
+ new GT_MetaPipeEntity_Fluid(
+ ID,
+ "GT_Pipe_" + unName + "_Tiny",
+ "Tiny " + Name + " Fluid Pipe",
+ 0.25F,
+ material.getBridgeMaterial(),
+ flow / 6,
+ temp,
+ gas).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(
+ OrePrefixes.pipeSmall.get(material.getBridgeMaterial()),
+ new GT_MetaPipeEntity_Fluid(
+ ID + 1,
+ "GT_Pipe_" + unName + "_Small",
+ "Small " + Name + " Fluid Pipe",
+ 0.375F,
+ material.getBridgeMaterial(),
+ flow / 3,
+ temp,
+ gas).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(
+ OrePrefixes.pipeMedium.get(material.getBridgeMaterial()),
+ new GT_MetaPipeEntity_Fluid(
+ ID + 2,
+ "GT_Pipe_" + unName,
+ Name + " Fluid Pipe",
+ 0.5F,
+ material.getBridgeMaterial(),
+ flow,
+ temp,
+ gas).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(
+ OrePrefixes.pipeLarge.get(material.getBridgeMaterial()),
+ new GT_MetaPipeEntity_Fluid(
+ ID + 3,
+ "GT_Pipe_" + unName + "_Large",
+ "Large " + Name + " Fluid Pipe",
+ 0.75F,
+ material.getBridgeMaterial(),
+ flow * 2,
+ temp,
+ gas).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(
+ OrePrefixes.pipeHuge.get(material.getBridgeMaterial()),
+ new GT_MetaPipeEntity_Fluid(
+ ID + 4,
+ "GT_Pipe_" + unName + "_Huge",
+ "Huge " + Name + " Fluid Pipe",
+ 0.875F,
+ material.getBridgeMaterial(),
+ flow * 4,
+ temp,
+ gas).getStackForm(1L));
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.ingot, 1), ItemList.Shape_Extruder_Pipe_Tiny.get(0))
+ .itemOutputs(material.get(OrePrefixes.pipeTiny, 2))
+ .duration(
+ material.getStats()
+ .getMass() * TICKS)
+ .eut(TierEU.RECIPE_MV)
+ .addTo(extruderRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.ingot, 1), ItemList.Shape_Extruder_Pipe_Small.get(0))
+ .itemOutputs(material.get(OrePrefixes.pipeSmall, 1))
+ .duration(
+ material.getStats()
+ .getMass() * 2
+ * TICKS)
+ .eut(TierEU.RECIPE_MV)
+ .addTo(extruderRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.ingot, 3), ItemList.Shape_Extruder_Pipe_Medium.get(0))
+ .itemOutputs(material.get(OrePrefixes.pipeMedium, 1))
+ .duration(
+ material.getStats()
+ .getMass() * 6
+ * TICKS)
+ .eut(TierEU.RECIPE_MV)
+ .addTo(extruderRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.ingot, 6), ItemList.Shape_Extruder_Pipe_Large.get(0))
+ .itemOutputs(material.get(OrePrefixes.pipeLarge, 1))
+ .duration(
+ material.getStats()
+ .getMass() * 12
+ * TICKS)
+ .eut(TierEU.RECIPE_MV)
+ .addTo(extruderRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.ingot, 12), ItemList.Shape_Extruder_Pipe_Huge.get(0))
+ .itemOutputs(material.get(OrePrefixes.pipeHuge, 1))
+ .duration(
+ material.getStats()
+ .getMass() * 24
+ * TICKS)
+ .eut(TierEU.RECIPE_MV)
+ .addTo(extruderRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(ItemList.Shape_Mold_Pipe_Tiny.get(0))
+ .fluidInputs(material.getMolten(72))
+ .itemOutputs(material.get(OrePrefixes.pipeTiny, 1))
+ .duration(
+ material.getStats()
+ .getMass() * TICKS)
+ .eut(TierEU.RECIPE_LV)
+ .addTo(fluidSolidifierRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(ItemList.Shape_Mold_Pipe_Small.get(0))
+ .fluidInputs(material.getMolten(144))
+ .itemOutputs(material.get(OrePrefixes.pipeSmall, 1))
+ .duration(
+ material.getStats()
+ .getMass() * 2
+ * TICKS)
+ .eut(TierEU.RECIPE_LV)
+ .addTo(fluidSolidifierRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(ItemList.Shape_Mold_Pipe_Medium.get(0))
+ .fluidInputs(material.getMolten(432))
+ .itemOutputs(material.get(OrePrefixes.pipeMedium, 1))
+ .duration(
+ material.getStats()
+ .getMass() * 6
+ * TICKS)
+ .eut(TierEU.RECIPE_LV)
+ .addTo(fluidSolidifierRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(ItemList.Shape_Mold_Pipe_Large.get(0))
+ .fluidInputs(material.getMolten(864))
+ .itemOutputs(material.get(OrePrefixes.pipeLarge, 1))
+ .duration(
+ material.getStats()
+ .getMass() * 12
+ * TICKS)
+ .eut(TierEU.RECIPE_LV)
+ .addTo(fluidSolidifierRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(ItemList.Shape_Mold_Pipe_Huge.get(0))
+ .fluidInputs(material.getMolten(1728))
+ .itemOutputs(material.get(OrePrefixes.pipeHuge, 1))
+ .duration(
+ material.getStats()
+ .getMass() * 24
+ * TICKS)
+ .eut(TierEU.RECIPE_LV)
+ .addTo(fluidSolidifierRecipes);
+ }
+
+ public static void registerWire(int ID, Werkstoff material, int aAmperage, int aVoltage, int aLoss, boolean cover) {
+ String unName = material.getDefaultName()
+ .replace(" ", "_")
+ .toLowerCase();
+ String Name = material.getDefaultName();
+ String aTextWire1 = "wire.";
+ String aTextCable1 = "cable.";
+ String aTextWire2 = " Wire";
+ String aTextCable2 = " Cable";
+ int aLossInsulated = aLoss / 4;
+ GT_OreDictUnificator.registerOre(
+ OrePrefixes.wireGt01,
+ material.getBridgeMaterial(),
+ new GT_MetaPipeEntity_Cable(
+ ID + 0,
+ aTextWire1 + unName + ".01",
+ "1x " + Name + aTextWire2,
+ 0.125F,
+ material.getBridgeMaterial(),
+ aLoss,
+ 1L * aAmperage,
+ aVoltage,
+ false,
+ true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(
+ OrePrefixes.wireGt02,
+ material.getBridgeMaterial(),
+ new GT_MetaPipeEntity_Cable(
+ ID + 1,
+ aTextWire1 + unName + ".02",
+ "2x " + Name + aTextWire2,
+ 0.25F,
+ material.getBridgeMaterial(),
+ aLoss,
+ 2L * aAmperage,
+ aVoltage,
+ false,
+ true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(
+ OrePrefixes.wireGt04,
+ material.getBridgeMaterial(),
+ new GT_MetaPipeEntity_Cable(
+ ID + 2,
+ aTextWire1 + unName + ".04",
+ "4x " + Name + aTextWire2,
+ 0.375F,
+ material.getBridgeMaterial(),
+ aLoss,
+ 4L * aAmperage,
+ aVoltage,
+ false,
+ true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(
+ OrePrefixes.wireGt08,
+ material.getBridgeMaterial(),
+ new GT_MetaPipeEntity_Cable(
+ ID + 3,
+ aTextWire1 + unName + ".08",
+ "8x " + Name + aTextWire2,
+ 0.5F,
+ material.getBridgeMaterial(),
+ aLoss,
+ 8L * aAmperage,
+ aVoltage,
+ false,
+ true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(
+ OrePrefixes.wireGt12,
+ material.getBridgeMaterial(),
+ new GT_MetaPipeEntity_Cable(
+ ID + 4,
+ aTextWire1 + unName + ".12",
+ "12x " + Name + aTextWire2,
+ 0.625F,
+ material.getBridgeMaterial(),
+ aLoss,
+ 12L * aAmperage,
+ aVoltage,
+ false,
+ true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(
+ OrePrefixes.wireGt16,
+ material.getBridgeMaterial(),
+ new GT_MetaPipeEntity_Cable(
+ ID + 5,
+ aTextWire1 + unName + ".16",
+ "16x " + Name + aTextWire2,
+ 0.75F,
+ material.getBridgeMaterial(),
+ aLoss,
+ 16L * aAmperage,
+ aVoltage,
+ false,
+ true).getStackForm(1L));
+ if (cover) {
+ GT_OreDictUnificator.registerOre(
+ OrePrefixes.cableGt01,
+ material.getBridgeMaterial(),
+ new GT_MetaPipeEntity_Cable(
+ ID + 6,
+ aTextCable1 + unName + ".01",
+ "1x " + Name + aTextCable2,
+ 0.25F,
+ material.getBridgeMaterial(),
+ aLossInsulated,
+ 1L * aAmperage,
+ aVoltage,
+ true,
+ false).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(
+ OrePrefixes.cableGt02,
+ material.getBridgeMaterial(),
+ new GT_MetaPipeEntity_Cable(
+ ID + 7,
+ aTextCable1 + unName + ".02",
+ "2x " + Name + aTextCable2,
+ 0.375F,
+ material.getBridgeMaterial(),
+ aLossInsulated,
+ 2L * aAmperage,
+ aVoltage,
+ true,
+ false).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(
+ OrePrefixes.cableGt04,
+ material.getBridgeMaterial(),
+ new GT_MetaPipeEntity_Cable(
+ ID + 8,
+ aTextCable1 + unName + ".04",
+ "4x " + Name + aTextCable2,
+ 0.5F,
+ material.getBridgeMaterial(),
+ aLossInsulated,
+ 4L * aAmperage,
+ aVoltage,
+ true,
+ false).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(
+ OrePrefixes.cableGt08,
+ material.getBridgeMaterial(),
+ new GT_MetaPipeEntity_Cable(
+ ID + 9,
+ aTextCable1 + unName + ".08",
+ "8x " + Name + aTextCable2,
+ 0.625F,
+ material.getBridgeMaterial(),
+ aLossInsulated,
+ 8L * aAmperage,
+ aVoltage,
+ true,
+ false).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(
+ OrePrefixes.cableGt12,
+ material.getBridgeMaterial(),
+ new GT_MetaPipeEntity_Cable(
+ ID + 10,
+ aTextCable1 + unName + ".12",
+ "12x " + Name + aTextCable2,
+ 0.75F,
+ material.getBridgeMaterial(),
+ aLossInsulated,
+ 12L * aAmperage,
+ aVoltage,
+ true,
+ false).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(
+ OrePrefixes.cableGt16,
+ material.getBridgeMaterial(),
+ new GT_MetaPipeEntity_Cable(
+ ID + 11,
+ aTextCable1 + unName + ".16",
+ "16x " + Name + aTextCable2,
+ 0.875F,
+ material.getBridgeMaterial(),
+ aLossInsulated,
+ 16L * aAmperage,
+ aVoltage,
+ true,
+ false).getStackForm(1L));
+ }
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.ingot, 1), GT_Utility.getIntegratedCircuit(1))
+ .itemOutputs(material.get(OrePrefixes.wireGt01, 2))
+ .duration(5 * SECONDS)
+ .eut(4)
+ .addTo(wiremillRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.ingot, 1), GT_Utility.getIntegratedCircuit(2))
+ .itemOutputs(material.get(OrePrefixes.wireGt02, 1))
+ .duration(7 * SECONDS + 10 * TICKS)
+ .eut(4)
+ .addTo(wiremillRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.ingot, 2), GT_Utility.getIntegratedCircuit(4))
+ .itemOutputs(material.get(OrePrefixes.wireGt04, 1))
+ .duration(10 * SECONDS)
+ .eut(4)
+ .addTo(wiremillRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.ingot, 4), GT_Utility.getIntegratedCircuit(8))
+ .itemOutputs(material.get(OrePrefixes.wireGt08, 1))
+ .duration(12 * SECONDS + 10 * TICKS)
+ .eut(4)
+ .addTo(wiremillRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.ingot, 6), GT_Utility.getIntegratedCircuit(12))
+ .itemOutputs(material.get(OrePrefixes.wireGt12, 1))
+ .duration(15 * SECONDS)
+ .eut(4)
+ .addTo(wiremillRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.ingot, 8), GT_Utility.getIntegratedCircuit(16))
+ .itemOutputs(material.get(OrePrefixes.wireGt16, 1))
+ .duration(17 * SECONDS + 10 * TICKS)
+ .eut(4)
+ .addTo(wiremillRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.stick, 1), GT_Utility.getIntegratedCircuit(1))
+ .itemOutputs(material.get(OrePrefixes.wireGt01, 1))
+ .duration(2 * SECONDS + 10 * TICKS)
+ .eut(4)
+ .addTo(wiremillRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.stick, 2), GT_Utility.getIntegratedCircuit(2))
+ .itemOutputs(material.get(OrePrefixes.wireGt02, 1))
+ .duration(5 * SECONDS)
+ .eut(4)
+ .addTo(wiremillRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.stick, 4), GT_Utility.getIntegratedCircuit(4))
+ .itemOutputs(material.get(OrePrefixes.wireGt04, 1))
+ .duration(7 * SECONDS + 10 * TICKS)
+ .eut(4)
+ .addTo(wiremillRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.stick, 8), GT_Utility.getIntegratedCircuit(8))
+ .itemOutputs(material.get(OrePrefixes.wireGt08, 1))
+ .duration(10 * SECONDS)
+ .eut(4)
+ .addTo(wiremillRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.stick, 12), GT_Utility.getIntegratedCircuit(12))
+ .itemOutputs(material.get(OrePrefixes.wireGt12, 1))
+ .duration(12 * SECONDS + 10 * TICKS)
+ .eut(4)
+ .addTo(wiremillRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.stick, 16), GT_Utility.getIntegratedCircuit(16))
+ .itemOutputs(material.get(OrePrefixes.wireGt16, 1))
+ .duration(15 * SECONDS)
+ .eut(4)
+ .addTo(wiremillRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.ingot, 1), GT_Utility.getIntegratedCircuit(3))
+ .itemOutputs(material.get(OrePrefixes.wireFine, 8))
+ .duration(5 * SECONDS)
+ .eut(4)
+ .addTo(wiremillRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.stick, 1), GT_Utility.getIntegratedCircuit(3))
+ .itemOutputs(material.get(OrePrefixes.wireFine, 4))
+ .duration(2 * SECONDS + 10 * TICKS)
+ .eut(4)
+ .addTo(wiremillRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.wireGt01, 1), GT_Utility.getIntegratedCircuit(1))
+ .itemOutputs(material.get(OrePrefixes.wireFine, 4))
+ .duration(10 * SECONDS)
+ .eut(8)
+ .addTo(wiremillRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.ingot, 1), ItemList.Shape_Extruder_Wire.get(0))
+ .itemOutputs(material.get(OrePrefixes.wireGt01, 2))
+ .duration(
+ material.getStats()
+ .getMass() * 8
+ * TICKS)
+ .eut(TierEU.RECIPE_HV)
+ .addTo(extruderRecipes);
+ }
+}
diff --git a/src/main/java/goodgenerator/util/DescTextLocalization.java b/src/main/java/goodgenerator/util/DescTextLocalization.java
new file mode 100644
index 0000000000..3470737d6b
--- /dev/null
+++ b/src/main/java/goodgenerator/util/DescTextLocalization.java
@@ -0,0 +1,22 @@
+package goodgenerator.util;
+
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.StatCollector;
+
+public class DescTextLocalization {
+
+ public static final String BLUE_PRINT_INFO = "Follow the" + EnumChatFormatting.BLUE
+ + " Structure"
+ + EnumChatFormatting.DARK_BLUE
+ + "Lib"
+ + EnumChatFormatting.GRAY
+ + " hologram projector to build the main structure.";
+
+ public static String[] addText(String preFix, int length) {
+ String[] text = new String[length];
+ for (int i = 0; i < length; i++) {
+ text[i] = StatCollector.translateToLocal(preFix + "." + i);
+ }
+ return text;
+ }
+}
diff --git a/src/main/java/goodgenerator/util/ItemRefer.java b/src/main/java/goodgenerator/util/ItemRefer.java
new file mode 100644
index 0000000000..400199ef03
--- /dev/null
+++ b/src/main/java/goodgenerator/util/ItemRefer.java
@@ -0,0 +1,221 @@
+package goodgenerator.util;
+
+import static goodgenerator.loader.FuelRodLoader.*;
+import static goodgenerator.loader.Loaders.*;
+
+import net.minecraft.block.Block;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+
+import gregtech.api.util.GT_Utility;
+import ic2.core.Ic2Items;
+
+public final class ItemRefer {
+
+ public static ItemRefer NULL = getItemStack(_null_);
+
+ public static ItemRefer Radiation_Protection_Plate = getItemStack(radiationProtectionPlate);
+ public static ItemRefer Wrapped_Uranium_Ingot = getItemStack(wrappedUraniumIngot);
+ public static ItemRefer High_Density_Uranium_Nugget = getItemStack(highDensityUraniumNugget);
+ public static ItemRefer High_Density_Uranium = getItemStack(highDensityUranium);
+ public static ItemRefer Wrapped_Thorium_Ingot = getItemStack(wrappedThoriumIngot);
+ public static ItemRefer High_Density_Thorium_Nugget = getItemStack(highDensityThoriumNugget);
+ public static ItemRefer High_Density_Thorium = getItemStack(highDensityThorium);
+ public static ItemRefer Wrapped_Plutonium_Ingot = getItemStack(wrappedPlutoniumIngot);
+ public static ItemRefer High_Density_Plutonium_Nugget = getItemStack(highDensityPlutoniumNugget);
+ public static ItemRefer High_Density_Plutonium = getItemStack(highDensityPlutonium);
+ public static ItemRefer Raw_Atomic_Separation_Catalyst = getItemStack(rawAtomicSeparationCatalyst);
+ public static ItemRefer Advanced_Radiation_Protection_Plate = getItemStack(advancedRadiationProtectionPlate);
+ public static ItemRefer Aluminum_Nitride_Dust = getItemStack(aluminumNitride);
+ public static ItemRefer Special_Ceramics_Dust = getItemStack(specialCeramics);
+ public static ItemRefer Special_Ceramics_Plate = getItemStack(specialCeramicsPlate);
+ public static ItemRefer Radioactive_Waste = getItemStack(radioactiveWaste);
+ public static ItemRefer Plastic_Case = getItemStack(plasticCase);
+ public static ItemRefer Quartz_Wafer = getItemStack(quartzWafer);
+ public static ItemRefer Micro_Heater = getItemStack(microHeater);
+ public static ItemRefer Quartz_Crystal_Resonator = getItemStack(quartzCrystalResonator);
+ public static ItemRefer Inverter = getItemStack(inverter);
+ public static ItemRefer Neutron_Source = getItemStack(neutronSource);
+ public static ItemRefer Naquadah_Mass = getItemStack(naquadahMass);
+ public static ItemRefer Enriched_Naquadah_Mass = getItemStack(enrichedNaquadahMass);
+ public static ItemRefer Naquadria_Mass = getItemStack(naquadriaMass);
+ public static ItemRefer Advanced_Fuel_Rod = getItemStack(advancedFuelRod);
+ public static ItemRefer Fuel_Rod_U_Depleted_1 = getItemStack(rodCompressedUraniumDepleted);
+ public static ItemRefer Fuel_Rod_U_Depleted_2 = getItemStack(rodCompressedUraniumDepleted_2);
+ public static ItemRefer Fuel_Rod_U_Depleted_4 = getItemStack(rodCompressedUraniumDepleted_4);
+ public static ItemRefer Fuel_Rod_U_1 = getItemStack(rodCompressedUranium);
+ public static ItemRefer Fuel_Rod_U_2 = getItemStack(rodCompressedUranium_2);
+ public static ItemRefer Fuel_Rod_U_4 = getItemStack(rodCompressedUranium_4);
+ public static ItemRefer Fuel_Rod_Pu_Depleted_1 = getItemStack(rodCompressedPlutoniumDepleted);
+ public static ItemRefer Fuel_Rod_Pu_Depleted_2 = getItemStack(rodCompressedPlutoniumDepleted_2);
+ public static ItemRefer Fuel_Rod_Pu_Depleted_4 = getItemStack(rodCompressedPlutoniumDepleted_4);
+ public static ItemRefer Fuel_Rod_Pu_1 = getItemStack(rodCompressedPlutonium);
+ public static ItemRefer Fuel_Rod_Pu_2 = getItemStack(rodCompressedPlutonium_2);
+ public static ItemRefer Fuel_Rod_Pu_4 = getItemStack(rodCompressedPlutonium_4);
+ public static ItemRefer Fuel_Rod_LU_Depleted_1 = getItemStack(rodLiquidUraniumDepleted);
+ public static ItemRefer Fuel_Rod_LU_Depleted_2 = getItemStack(rodLiquidUraniumDepleted_2);
+ public static ItemRefer Fuel_Rod_LU_Depleted_4 = getItemStack(rodLiquidUraniumDepleted_4);
+ public static ItemRefer Fuel_Rod_LU_1 = getItemStack(rodLiquidUranium);
+ public static ItemRefer Fuel_Rod_LU_2 = getItemStack(rodLiquidUranium_2);
+ public static ItemRefer Fuel_Rod_LU_4 = getItemStack(rodLiquidUranium_4);
+ public static ItemRefer Fuel_Rod_LPu_Depleted_1 = getItemStack(rodLiquidPlutoniumDepleted);
+ public static ItemRefer Fuel_Rod_LPu_Depleted_2 = getItemStack(rodLiquidPlutoniumDepleted_2);
+ public static ItemRefer Fuel_Rod_LPu_Depleted_4 = getItemStack(rodLiquidPlutoniumDepleted_4);
+ public static ItemRefer Fuel_Rod_LPu_1 = getItemStack(rodLiquidPlutonium);
+ public static ItemRefer Fuel_Rod_LPu_2 = getItemStack(rodLiquidPlutonium_2);
+ public static ItemRefer Fuel_Rod_LPu_4 = getItemStack(rodLiquidPlutonium_4);
+ public static ItemRefer Fluid_Storage_Core_T1 = getItemStack(fluidCore, 0);
+ public static ItemRefer Fluid_Storage_Core_T2 = getItemStack(fluidCore, 1);
+ public static ItemRefer Fluid_Storage_Core_T3 = getItemStack(fluidCore, 2);
+ public static ItemRefer Fluid_Storage_Core_T4 = getItemStack(fluidCore, 3);
+ public static ItemRefer Fluid_Storage_Core_T5 = getItemStack(fluidCore, 4);
+ public static ItemRefer Fluid_Storage_Core_T6 = getItemStack(fluidCore, 5);
+ public static ItemRefer Fluid_Storage_Core_T7 = getItemStack(fluidCore, 6);
+ public static ItemRefer Fluid_Storage_Core_T8 = getItemStack(fluidCore, 7);
+ public static ItemRefer Fluid_Storage_Core_T9 = getItemStack(fluidCore, 8);
+ public static ItemRefer Fluid_Storage_Core_T10 = getItemStack(fluidCore, 9);
+ public static ItemRefer Essentia_Upgrade_Empty = getItemStack(upgradeEssentia, 0);
+ public static ItemRefer Essentia_Upgrade_Air = getItemStack(upgradeEssentia, 1);
+ public static ItemRefer Essentia_Upgrade_Thermal = getItemStack(upgradeEssentia, 2);
+ public static ItemRefer Essentia_Upgrade_Unstable = getItemStack(upgradeEssentia, 3);
+ public static ItemRefer Essentia_Upgrade_Victus = getItemStack(upgradeEssentia, 4);
+ public static ItemRefer Essentia_Upgrade_Tainted = getItemStack(upgradeEssentia, 5);
+ public static ItemRefer Essentia_Upgrade_Mechanics = getItemStack(upgradeEssentia, 6);
+ public static ItemRefer Essentia_Upgrade_Spirit = getItemStack(upgradeEssentia, 7);
+ public static ItemRefer Essentia_Upgrade_Radiation = getItemStack(upgradeEssentia, 8);
+ public static ItemRefer Essentia_Upgrade_Electric = getItemStack(upgradeEssentia, 9);
+ public static ItemRefer High_Energy_Mixture = getItemStack(highEnergyMixture);
+ public static ItemRefer Salty_Root = getItemStack(saltyRoot);
+ public static ItemRefer HiC_T1 = getItemStack(huiCircuit, 0);
+ public static ItemRefer HiC_T2 = getItemStack(huiCircuit, 1);
+ public static ItemRefer HiC_T3 = getItemStack(huiCircuit, 2);
+ public static ItemRefer HiC_T4 = getItemStack(huiCircuit, 3);
+ public static ItemRefer HiC_T5 = getItemStack(huiCircuit, 4);
+ public static ItemRefer IC2_Ir_Plate = getItemStack(Ic2Items.iridiumPlate);
+ public static ItemRefer IC2_Glass = getItemStack(Ic2Items.reinforcedGlass);
+
+ public static ItemRefer Field_Restriction_Casing = getItemStack(MAR_Casing);
+ public static ItemRefer Naquadah_Fuel_Refinery_Casing = getItemStack(FRF_Casings);
+ public static ItemRefer Field_Restriction_Coil_T1 = getItemStack(FRF_Coil_1);
+ public static ItemRefer Field_Restriction_Coil_T2 = getItemStack(FRF_Coil_2);
+ public static ItemRefer Field_Restriction_Coil_T3 = getItemStack(FRF_Coil_3);
+ public static ItemRefer Field_Restriction_Coil_T4 = getItemStack(FRF_Coil_4);
+ public static ItemRefer Radiation_Proof_Steel_Frame_Box = getItemStack(radiationProtectionSteelFrame);
+ public static ItemRefer Field_Restriction_Glass = getItemStack(fieldRestrictingGlass);
+ public static ItemRefer Raw_Cylinder = getItemStack(rawCylinder);
+ public static ItemRefer Titanium_Plated_Cylinder = getItemStack(titaniumPlatedCylinder);
+ public static ItemRefer Magic_Casing = getItemStack(magicCasing);
+ public static ItemRefer Speeding_Pipe = getItemStack(speedingPipe);
+ public static ItemRefer Essentia_Cell_T1 = getItemStack(essentiaCell, 0);
+ public static ItemRefer Essentia_Cell_T2 = getItemStack(essentiaCell, 1);
+ public static ItemRefer Essentia_Cell_T3 = getItemStack(essentiaCell, 2);
+ public static ItemRefer Essentia_Cell_T4 = getItemStack(essentiaCell, 3);
+ public static ItemRefer Essentia_Hatch = getItemStack(essentiaHatch);
+ public static ItemRefer YOTTank_Casing = getItemStack(yottaFluidTankCasing);
+ public static ItemRefer YOTTank_Cell_T1 = getItemStack(yottaFluidTankCell, 0);
+ public static ItemRefer YOTTank_Cell_T2 = getItemStack(yottaFluidTankCell, 1);
+ public static ItemRefer YOTTank_Cell_T3 = getItemStack(yottaFluidTankCell, 2);
+ public static ItemRefer YOTTank_Cell_T4 = getItemStack(yottaFluidTankCell, 3);
+ public static ItemRefer YOTTank_Cell_T5 = getItemStack(yottaFluidTankCell, 4);
+ public static ItemRefer YOTTank_Cell_T6 = getItemStack(yottaFluidTankCell, 5);
+ public static ItemRefer YOTTank_Cell_T7 = getItemStack(yottaFluidTankCell, 6);
+ public static ItemRefer YOTTank_Cell_T8 = getItemStack(yottaFluidTankCell, 7);
+ public static ItemRefer YOTTank_Cell_T9 = getItemStack(yottaFluidTankCell, 8);
+ public static ItemRefer YOTTank_Cell_T10 = getItemStack(yottaFluidTankCell, 9);
+ public static ItemRefer SC_Turbine_Casing = getItemStack(supercriticalFluidTurbineCasing);
+ public static ItemRefer Pressure_Resistant_Wall = getItemStack(pressureResistantWalls);
+ public static ItemRefer Precise_Electronic_Unit_T1 = getItemStack(preciseUnitCasing, 0);
+ public static ItemRefer Precise_Electronic_Unit_T2 = getItemStack(preciseUnitCasing, 1);
+ public static ItemRefer Precise_Electronic_Unit_T3 = getItemStack(preciseUnitCasing, 2);
+ public static ItemRefer Compact_Fusion_Coil_T0 = getItemStack(compactFusionCoil, 0);
+ public static ItemRefer Compact_Fusion_Coil_T1 = getItemStack(compactFusionCoil, 1);
+ public static ItemRefer Compact_Fusion_Coil_T2 = getItemStack(compactFusionCoil, 2);
+ public static ItemRefer Compact_Fusion_Coil_T3 = getItemStack(compactFusionCoil, 3);
+ public static ItemRefer Compact_Fusion_Coil_T4 = getItemStack(compactFusionCoil, 4);
+ public static ItemRefer Essentia_Filter_Casing = getItemStack(essentiaFilterCasing);
+ public static ItemRefer Essentia_Output_Hatch = getItemStack(essentiaOutputHatch);
+ public static ItemRefer Essentia_Output_Hatch_ME = getItemStack(essentiaOutputHatch_ME);
+
+ public static ItemRefer Large_Naquadah_Reactor = getItemStack(MAR);
+ public static ItemRefer Naquadah_Fuel_Refinery = getItemStack(FRF);
+ public static ItemRefer Universal_Chemical_Fuel_Engine = getItemStack(UCFE);
+ public static ItemRefer Large_Essentia_Generator = getItemStack(LEG);
+ public static ItemRefer YOTTank = getItemStack(YFT);
+ public static ItemRefer Combustion_Generator_EV = getItemStack(Generator_Diesel[0]);
+ public static ItemRefer Combustion_Generator_IV = getItemStack(Generator_Diesel[1]);
+ public static ItemRefer SC_Fluid_Turbine = getItemStack(SCTurbine);
+ public static ItemRefer Extreme_Heat_Exchanger = getItemStack(XHE);
+ public static ItemRefer Precise_Assembler = getItemStack(PA);
+ public static ItemRefer Compact_Fusion_MK1 = getItemStack(LFC[0]);
+ public static ItemRefer Compact_Fusion_MK2 = getItemStack(LFC[1]);
+ public static ItemRefer Compact_Fusion_MK3 = getItemStack(LFC[2]);
+ public static ItemRefer Compact_Fusion_MK4 = getItemStack(LFC[3]);
+ public static ItemRefer Compact_Fusion_MK5 = getItemStack(LFC[4]);
+ public static ItemRefer Large_Essentia_Smeltery = getItemStack(LES);
+ public static ItemRefer Coolant_Tower = getItemStack(CT);
+ public static ItemRefer Component_Assembly_Line = getItemStack(CompAssline);
+
+ public static ItemRefer Compassline_Casing_LV = getItemStack(componentAssemblylineCasing, 0);
+ public static ItemRefer Compassline_Casing_MV = getItemStack(componentAssemblylineCasing, 1);
+ public static ItemRefer Compassline_Casing_HV = getItemStack(componentAssemblylineCasing, 2);
+ public static ItemRefer Compassline_Casing_EV = getItemStack(componentAssemblylineCasing, 3);
+ public static ItemRefer Compassline_Casing_IV = getItemStack(componentAssemblylineCasing, 4);
+ public static ItemRefer Compassline_Casing_LuV = getItemStack(componentAssemblylineCasing, 5);
+ public static ItemRefer Compassline_Casing_ZPM = getItemStack(componentAssemblylineCasing, 6);
+ public static ItemRefer Compassline_Casing_UV = getItemStack(componentAssemblylineCasing, 7);
+ public static ItemRefer Compassline_Casing_UHV = getItemStack(componentAssemblylineCasing, 8);
+ public static ItemRefer Compassline_Casing_UEV = getItemStack(componentAssemblylineCasing, 9);
+ public static ItemRefer Compassline_Casing_UIV = getItemStack(componentAssemblylineCasing, 10);
+ public static ItemRefer Compassline_Casing_UMV = getItemStack(componentAssemblylineCasing, 11);
+ public static ItemRefer Compassline_Casing_UXV = getItemStack(componentAssemblylineCasing, 12);
+ public static ItemRefer Compassline_Casing_MAX = getItemStack(componentAssemblylineCasing, 13);
+
+ private Item mItem = null;
+ private Block mBlock = null;
+ private ItemStack mItemStack = null;
+ private int mMeta = 0;
+
+ private static ItemRefer getItemStack(ItemStack itemStack) {
+ if (itemStack == null) return NULL;
+ return new ItemRefer(itemStack);
+ }
+
+ private static ItemRefer getItemStack(Item item) {
+ return getItemStack(item, 0);
+ }
+
+ private static ItemRefer getItemStack(Item item, int meta) {
+ if (item == null) return NULL;
+ return new ItemRefer(item, meta);
+ }
+
+ private static ItemRefer getItemStack(Block block) {
+ return getItemStack(block, 0);
+ }
+
+ private static ItemRefer getItemStack(Block block, int meta) {
+ if (block == null) return NULL;
+ return new ItemRefer(block, meta);
+ }
+
+ private ItemRefer(Item item, int meta) {
+ mItem = item;
+ mMeta = meta;
+ }
+
+ private ItemRefer(Block block, int meta) {
+ mBlock = block;
+ mMeta = meta;
+ }
+
+ private ItemRefer(ItemStack itemStack) {
+ mItemStack = itemStack;
+ }
+
+ public ItemStack get(int amount) {
+ if (mItem != null) return new ItemStack(mItem, amount, mMeta);
+ if (mBlock != null) return new ItemStack(mBlock, amount, mMeta);
+ if (mItemStack != null) return GT_Utility.copyAmount(amount, mItemStack);
+ return new ItemStack(_null_, amount, 0);
+ }
+}
diff --git a/src/main/java/goodgenerator/util/Log.java b/src/main/java/goodgenerator/util/Log.java
new file mode 100644
index 0000000000..4cf9e40484
--- /dev/null
+++ b/src/main/java/goodgenerator/util/Log.java
@@ -0,0 +1,9 @@
+package goodgenerator.util;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+public class Log {
+
+ public static final Logger LOGGER = LogManager.getLogger("GoodGenerator");
+}
diff --git a/src/main/java/goodgenerator/util/MaterialFix.java b/src/main/java/goodgenerator/util/MaterialFix.java
new file mode 100644
index 0000000000..32827b18b2
--- /dev/null
+++ b/src/main/java/goodgenerator/util/MaterialFix.java
@@ -0,0 +1,393 @@
+package goodgenerator.util;
+
+import static gregtech.api.recipe.RecipeMaps.benderRecipes;
+import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes;
+import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes;
+import static gregtech.api.recipe.RecipeMaps.hammerRecipes;
+import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
+import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+
+import com.github.bartimaeusnek.bartworks.system.material.Werkstoff;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.TierEU;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+
+public class MaterialFix {
+
+ public static void MaterialFluidExtractionFix(Werkstoff material) {
+ if (material.hasItemType(OrePrefixes.ingot)) {
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.ingot))
+ .fluidOutputs(material.getMolten(144))
+ .duration(1 * SECONDS + 12 * TICKS)
+ .eut(8)
+ .addTo(fluidExtractionRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(ItemList.Shape_Mold_Ingot.get(0))
+ .fluidInputs(material.getMolten(144))
+ .itemOutputs(material.get(OrePrefixes.ingot))
+ .duration(1 * SECONDS + 12 * TICKS)
+ .eut(TierEU.RECIPE_MV / 2)
+ .addTo(fluidSolidifierRecipes);
+ }
+ if (material.hasItemType(OrePrefixes.plate)) {
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.plate))
+ .fluidOutputs(material.getMolten(144))
+ .duration(1 * SECONDS + 12 * TICKS)
+ .eut(8)
+ .addTo(fluidExtractionRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(ItemList.Shape_Mold_Plate.get(0))
+ .fluidInputs(material.getMolten(144))
+ .itemOutputs(material.get(OrePrefixes.plate))
+ .duration(1 * SECONDS + 12 * TICKS)
+ .eut(TierEU.RECIPE_MV / 2)
+ .addTo(fluidSolidifierRecipes);
+ }
+ if (material.hasItemType(OrePrefixes.gearGtSmall)) {
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.gearGtSmall))
+ .fluidOutputs(material.getMolten(144))
+ .duration(1 * SECONDS + 12 * TICKS)
+ .eut(8)
+ .addTo(fluidExtractionRecipes);
+ }
+ if (material.hasItemType(OrePrefixes.stickLong)) {
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.stickLong))
+ .fluidOutputs(material.getMolten(144))
+ .duration(1 * SECONDS + 12 * TICKS)
+ .eut(8)
+ .addTo(fluidExtractionRecipes);
+ }
+ if (material.hasItemType(OrePrefixes.spring)) {
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.spring))
+ .fluidOutputs(material.getMolten(144))
+ .duration(1 * SECONDS + 12 * TICKS)
+ .eut(8)
+ .addTo(fluidExtractionRecipes);
+ }
+ if (material.hasItemType(OrePrefixes.stick)) {
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.stick))
+ .fluidOutputs(material.getMolten(72))
+ .duration(16 * TICKS)
+ .eut(8)
+ .addTo(fluidExtractionRecipes);
+ }
+ if (material.hasItemType(OrePrefixes.itemCasing)) {
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.itemCasing))
+ .fluidOutputs(material.getMolten(72))
+ .duration(16 * TICKS)
+ .eut(8)
+ .addTo(fluidExtractionRecipes);
+ }
+ if (material.hasItemType(OrePrefixes.wireGt01)) {
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.wireGt01))
+ .fluidOutputs(material.getMolten(72))
+ .duration(16 * TICKS)
+ .eut(8)
+ .addTo(fluidExtractionRecipes);
+ }
+ if (material.hasItemType(OrePrefixes.cableGt01)) {
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.cableGt01))
+ .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Ash, 2))
+ .fluidOutputs(material.getMolten(72))
+ .duration(16 * TICKS)
+ .eut(8)
+ .addTo(fluidExtractionRecipes);
+ }
+ if (material.hasItemType(OrePrefixes.foil)) {
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.foil))
+ .fluidOutputs(material.getMolten(36))
+ .duration(8 * TICKS)
+ .eut(8)
+ .addTo(fluidExtractionRecipes);
+ }
+ if (material.hasItemType(OrePrefixes.springSmall)) {
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.springSmall))
+ .fluidOutputs(material.getMolten(36))
+ .duration(8 * TICKS)
+ .eut(8)
+ .addTo(fluidExtractionRecipes);
+ }
+ if (material.hasItemType(OrePrefixes.ring)) {
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.ring))
+ .fluidOutputs(material.getMolten(36))
+ .duration(8 * TICKS)
+ .eut(8)
+ .addTo(fluidExtractionRecipes);
+ }
+ if (material.hasItemType(OrePrefixes.bolt)) {
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.bolt))
+ .fluidOutputs(material.getMolten(18))
+ .duration(4 * TICKS)
+ .eut(8)
+ .addTo(fluidExtractionRecipes);
+ }
+ if (material.hasItemType(OrePrefixes.wireFine)) {
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.wireFine))
+ .fluidOutputs(material.getMolten(18))
+ .duration(4 * TICKS)
+ .eut(8)
+ .addTo(fluidExtractionRecipes);
+ }
+ if (material.hasItemType(OrePrefixes.round)) {
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.round))
+ .fluidOutputs(material.getMolten(16))
+ .duration(4 * TICKS)
+ .eut(8)
+ .addTo(fluidExtractionRecipes);
+ }
+ if (material.hasItemType(OrePrefixes.screw)) {
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.screw))
+ .fluidOutputs(material.getMolten(16))
+ .duration(4 * TICKS)
+ .eut(8)
+ .addTo(fluidExtractionRecipes);
+ }
+ if (material.hasItemType(OrePrefixes.nugget)) {
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.nugget))
+ .fluidOutputs(material.getMolten(16))
+ .duration(4 * TICKS)
+ .eut(8)
+ .addTo(fluidExtractionRecipes);
+ }
+ if (material.hasItemType(OrePrefixes.rotor)) {
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.rotor))
+ .fluidOutputs(material.getMolten(612))
+ .duration(136 * TICKS)
+ .eut(8)
+ .addTo(fluidExtractionRecipes);
+ }
+ if (material.hasItemType(OrePrefixes.gearGt)) {
+ GT_Values.RA.stdBuilder()
+ .itemInputs(material.get(OrePrefixes.gearGt))
+ .fluidOutputs(material.getMolten(576))
+ .duration(128 * TICKS)
+ .eut(8)
+ .addTo(fluidExtractionRecipes);
+ }
+ }
+
+ public static void addRecipeForMultiItems() {
+ for (Werkstoff tMaterial : Werkstoff.werkstoffHashSet) {
+ if (tMaterial == null) continue;
+ if (tMaterial.hasItemType(OrePrefixes.plateDouble) && tMaterial.hasItemType(OrePrefixes.ingotDouble)) {
+ GT_Values.RA.stdBuilder()
+ .itemInputs(tMaterial.get(OrePrefixes.plate, 2), GT_Utility.getIntegratedCircuit(2))
+ .itemOutputs(tMaterial.get(OrePrefixes.plateDouble, 1))
+ .duration(
+ Math.max(
+ tMaterial.getStats()
+ .getMass() * 2,
+ 1L) * TICKS)
+ .eut(TierEU.RECIPE_MV / 2)
+ .addTo(benderRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(tMaterial.get(OrePrefixes.ingotDouble, 1), GT_Utility.getIntegratedCircuit(1))
+ .itemOutputs(tMaterial.get(OrePrefixes.plateDouble, 1))
+ .duration(
+ Math.max(
+ tMaterial.getStats()
+ .getMass(),
+ 1L) * TICKS)
+ .eut(TierEU.RECIPE_MV / 2)
+ .addTo(benderRecipes);
+ GT_ModHandler.addCraftingRecipe(
+ tMaterial.get(OrePrefixes.plateDouble, 1),
+ new Object[] { "P", "P", "h", 'P', tMaterial.get(OrePrefixes.plate, 1) });
+ GT_ModHandler.addCraftingRecipe(
+ tMaterial.get(OrePrefixes.ingotDouble, 1),
+ new Object[] { "P", "P", "h", 'P', tMaterial.get(OrePrefixes.ingot, 1) });
+ }
+ if (tMaterial.hasItemType(OrePrefixes.plateTriple) && tMaterial.hasItemType(OrePrefixes.ingotTriple)) {
+ GT_Values.RA.stdBuilder()
+ .itemInputs(tMaterial.get(OrePrefixes.plate, 3), GT_Utility.getIntegratedCircuit(3))
+ .itemOutputs(tMaterial.get(OrePrefixes.plateTriple, 1))
+ .duration(
+ Math.max(
+ tMaterial.getStats()
+ .getMass() * 3,
+ 1L) * TICKS)
+ .eut(TierEU.RECIPE_MV / 2)
+ .addTo(benderRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(tMaterial.get(OrePrefixes.ingot, 3), GT_Utility.getIntegratedCircuit(3))
+ .itemOutputs(tMaterial.get(OrePrefixes.plateTriple, 1))
+ .duration(
+ Math.max(
+ tMaterial.getStats()
+ .getMass() * 3,
+ 1L) * TICKS)
+ .eut(TierEU.RECIPE_MV / 2)
+ .addTo(benderRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(tMaterial.get(OrePrefixes.ingotTriple, 1), GT_Utility.getIntegratedCircuit(1))
+ .itemOutputs(tMaterial.get(OrePrefixes.plateTriple, 1))
+ .duration(
+ Math.max(
+ tMaterial.getStats()
+ .getMass(),
+ 1L) * TICKS)
+ .eut(TierEU.RECIPE_MV / 2)
+ .addTo(benderRecipes);
+ GT_ModHandler.addCraftingRecipe(
+ tMaterial.get(OrePrefixes.plateTriple, 1),
+ new Object[] { "B", "P", "h", 'P', tMaterial.get(OrePrefixes.plate, 1), 'B',
+ tMaterial.get(OrePrefixes.plateDouble, 1) });
+ GT_ModHandler.addCraftingRecipe(
+ tMaterial.get(OrePrefixes.ingotTriple, 1),
+ new Object[] { "B", "P", "h", 'P', tMaterial.get(OrePrefixes.ingot, 1), 'B',
+ tMaterial.get(OrePrefixes.ingotDouble, 1) });
+ }
+ if (tMaterial.hasItemType(OrePrefixes.plateDense)) {
+ GT_Values.RA.stdBuilder()
+ .itemInputs(tMaterial.get(OrePrefixes.plate, 9), GT_Utility.getIntegratedCircuit(9))
+ .itemOutputs(tMaterial.get(OrePrefixes.plateDense, 1))
+ .duration(
+ Math.max(
+ tMaterial.getStats()
+ .getMass() * 9,
+ 1L) * TICKS)
+ .eut(TierEU.RECIPE_MV / 2)
+ .addTo(benderRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(tMaterial.get(OrePrefixes.ingot, 9), GT_Utility.getIntegratedCircuit(9))
+ .itemOutputs(tMaterial.get(OrePrefixes.plateDense, 1))
+ .duration(
+ Math.max(
+ tMaterial.getStats()
+ .getMass() * 9,
+ 1L) * TICKS)
+ .eut(TierEU.RECIPE_MV / 2)
+ .addTo(benderRecipes);
+
+ if (tMaterial.hasItemType(OrePrefixes.plateTriple) && tMaterial.hasItemType(OrePrefixes.ingotTriple)) {
+ GT_Values.RA.stdBuilder()
+ .itemInputs(tMaterial.get(OrePrefixes.plateTriple, 3), GT_Utility.getIntegratedCircuit(3))
+ .itemOutputs(tMaterial.get(OrePrefixes.plateDense, 1))
+ .duration(
+ Math.max(
+ tMaterial.getStats()
+ .getMass() * 3,
+ 1L) * TICKS)
+ .eut(TierEU.RECIPE_MV / 2)
+ .addTo(benderRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(tMaterial.get(OrePrefixes.ingotTriple, 3), GT_Utility.getIntegratedCircuit(3))
+ .itemOutputs(tMaterial.get(OrePrefixes.plateDense, 1))
+ .duration(
+ Math.max(
+ tMaterial.getStats()
+ .getMass() * 3,
+ 1L) * TICKS)
+ .eut(TierEU.RECIPE_MV / 2)
+ .addTo(benderRecipes);
+ }
+ }
+ if (tMaterial.hasItemType(OrePrefixes.stick)) {
+ if (tMaterial.hasItemType(OrePrefixes.cellMolten)) {
+ GT_Values.RA.stdBuilder()
+ .itemInputs(ItemList.Shape_Mold_Rod.get(0))
+ .fluidInputs(tMaterial.getMolten(72))
+ .itemOutputs(tMaterial.get(OrePrefixes.stick, 1))
+ .duration(
+ Math.max(
+ tMaterial.getStats()
+ .getMass() >> 1,
+ 1L) * TICKS)
+ .eut(TierEU.RECIPE_HV)
+ .addTo(fluidSolidifierRecipes);
+ }
+ }
+ if (tMaterial.hasItemType(OrePrefixes.stickLong)) {
+ if (tMaterial.hasItemType(OrePrefixes.cellMolten)) {
+ GT_Values.RA.stdBuilder()
+ .itemInputs(ItemList.Shape_Mold_Rod_Long.get(0))
+ .fluidInputs(tMaterial.getMolten(144))
+ .itemOutputs(tMaterial.get(OrePrefixes.stickLong, 1))
+ .duration(
+ Math.max(
+ tMaterial.getStats()
+ .getMass(),
+ 1L) * TICKS)
+ .eut(TierEU.RECIPE_HV)
+ .addTo(fluidSolidifierRecipes);
+ }
+ if (tMaterial.hasItemType(OrePrefixes.stick)) {
+ GT_ModHandler.addCraftingRecipe(
+ tMaterial.get(OrePrefixes.stickLong, 1),
+ new Object[] { "PhP", 'P', tMaterial.get(OrePrefixes.stick, 1) });
+ GT_Values.RA.stdBuilder()
+ .itemInputs(tMaterial.get(OrePrefixes.stick, 2))
+ .itemOutputs(tMaterial.get(OrePrefixes.stickLong, 1))
+ .duration(
+ Math.max(
+ tMaterial.getStats()
+ .getMass(),
+ 1L) * TICKS)
+ .eut(TierEU.RECIPE_LV / 2)
+ .addTo(hammerRecipes);
+ }
+ }
+ if (tMaterial.hasItemType(OrePrefixes.spring)) {
+ GT_ModHandler.addCraftingRecipe(
+ tMaterial.get(OrePrefixes.spring, 1),
+ new Object[] { " s ", "fPx", " P ", 'P', tMaterial.get(OrePrefixes.stickLong, 1) });
+ GT_Values.RA.stdBuilder()
+ .itemInputs(tMaterial.get(OrePrefixes.stickLong, 1), GT_Utility.getIntegratedCircuit(1))
+ .itemOutputs(tMaterial.get(OrePrefixes.spring, 1))
+ .duration(
+ Math.max(
+ tMaterial.getStats()
+ .getMass() * 2,
+ 1L) * TICKS)
+ .eut(TierEU.RECIPE_LV / 2)
+ .addTo(benderRecipes);
+ }
+ if (tMaterial.hasItemType(OrePrefixes.springSmall)) {
+ GT_ModHandler.addCraftingRecipe(
+ tMaterial.get(OrePrefixes.springSmall, 1),
+ new Object[] { " s ", "fPx", 'P', tMaterial.get(OrePrefixes.stick, 1) });
+ GT_Values.RA.stdBuilder()
+ .itemInputs(tMaterial.get(OrePrefixes.stick, 1), GT_Utility.getIntegratedCircuit(1))
+ .itemOutputs(tMaterial.get(OrePrefixes.springSmall, 1))
+ .duration(
+ Math.max(
+ tMaterial.getStats()
+ .getMass(),
+ 1L) * TICKS)
+ .eut(TierEU.RECIPE_LV / 2)
+ .addTo(benderRecipes);
+ }
+ }
+ Materials tUHV = Materials.Longasssuperconductornameforuhvwire;
+ GT_Values.RA.stdBuilder()
+ .itemInputs(GT_OreDictUnificator.get(OrePrefixes.stick, tUHV, 2))
+ .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.stickLong, tUHV, 1))
+ .duration(Math.max(tUHV.getMass(), 1L) * TICKS)
+ .eut(TierEU.RECIPE_LV / 2)
+ .addTo(hammerRecipes);
+ }
+}
diff --git a/src/main/java/goodgenerator/util/MyRecipeAdder.java b/src/main/java/goodgenerator/util/MyRecipeAdder.java
new file mode 100644
index 0000000000..6cc0eb585c
--- /dev/null
+++ b/src/main/java/goodgenerator/util/MyRecipeAdder.java
@@ -0,0 +1,72 @@
+package goodgenerator.util;
+
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.FluidStack;
+
+import goodgenerator.api.recipe.ExtremeHeatExchangerRecipe;
+import goodgenerator.api.recipe.GoodGeneratorRecipeMaps;
+
+public class MyRecipeAdder {
+
+ public static final MyRecipeAdder instance = new MyRecipeAdder();
+
+ public void addLiquidMentalFuel(FluidStack input, FluidStack output, int EUt, int ticks) {
+ GoodGeneratorRecipeMaps.naquadahReactorFuels
+ .addRecipe(true, null, null, null, new FluidStack[] { input }, new FluidStack[] { output }, ticks, 0, EUt);
+ }
+
+ public void addNaquadahFuelRefineRecipe(FluidStack[] input1, ItemStack[] input2, FluidStack output, int EUt,
+ int ticks, int tier) {
+ GoodGeneratorRecipeMaps.naquadahFuelRefineFactoryRecipes
+ .addRecipe(false, input2, null, null, input1, new FluidStack[] { output }, ticks, EUt, tier);
+ }
+
+ public void addNeutronActivatorRecipe(FluidStack[] input1, ItemStack[] input2, FluidStack[] output1,
+ ItemStack[] output2, int ticks, int maxNKE, int minNKE) {
+ if (maxNKE <= 0) maxNKE = 1;
+ if (maxNKE >= 1100) maxNKE = 1100;
+ if (minNKE < 0) minNKE = 0;
+ if (minNKE >= maxNKE) minNKE = maxNKE - 1;
+ GoodGeneratorRecipeMaps.neutronActivatorRecipes
+ .addRecipe(false, input2, output2, null, input1, output1, ticks, 0, maxNKE * 10000 + minNKE);
+ }
+
+ public void addExtremeHeatExchangerRecipe(FluidStack HotFluid, FluidStack ColdFluid, FluidStack WorkFluid,
+ FluidStack HeatedWorkFluid, FluidStack OverHeatedWorkFluid, int Threshold) {
+ GoodGeneratorRecipeMaps.extremeHeatExchangerFuels.addRecipe(
+ new ExtremeHeatExchangerRecipe(
+ new FluidStack[] { HotFluid, WorkFluid },
+ new FluidStack[] { HeatedWorkFluid, OverHeatedWorkFluid, ColdFluid },
+ Threshold));
+ }
+
+ public void addPreciseAssemblerRecipe(ItemStack[] aItemInputs, FluidStack[] aFluidInputs, ItemStack aOutput,
+ int aEUt, int aDuration, int aTier) {
+ if (aOutput == null) return;
+ GoodGeneratorRecipeMaps.preciseAssemblerRecipes.addRecipe(
+ false,
+ aItemInputs,
+ new ItemStack[] { aOutput },
+ null,
+ null,
+ aFluidInputs,
+ null,
+ aDuration,
+ aEUt,
+ aTier);
+ }
+
+ public void addComponentAssemblyLineRecipe(ItemStack[] ItemInputArray, FluidStack[] FluidInputArray,
+ ItemStack OutputItem, int aDuration, int aEUt, int casingLevel) {
+ GoodGeneratorRecipeMaps.componentAssemblyLineRecipes.addRecipe(
+ false,
+ ItemInputArray,
+ new ItemStack[] { OutputItem },
+ null,
+ FluidInputArray,
+ null,
+ aDuration,
+ aEUt,
+ casingLevel);
+ }
+}
diff --git a/src/main/java/goodgenerator/util/StackUtils.java b/src/main/java/goodgenerator/util/StackUtils.java
new file mode 100644
index 0000000000..2784828117
--- /dev/null
+++ b/src/main/java/goodgenerator/util/StackUtils.java
@@ -0,0 +1,143 @@
+package goodgenerator.util;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidContainerRegistry;
+import net.minecraftforge.fluids.FluidRegistry;
+import net.minecraftforge.fluids.FluidStack;
+
+import appeng.api.AEApi;
+import appeng.api.storage.data.IAEFluidStack;
+import goodgenerator.items.MyMaterial;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.MaterialsUEVplus;
+import gregtech.api.util.GT_Utility;
+
+public class StackUtils {
+
+ /**
+ * Multiplies one ItemStack by a multiplier, and splits it into as many full stacks as it needs to.
+ *
+ * @param stack The ItemStack you want to multiply
+ * @param multiplier The number the stack is multiplied by
+ * @return A List of stacks that, in total, are the same as the input ItemStack after it has been multiplied.
+ */
+ public static List<ItemStack> multiplyAndSplitIntoStacks(ItemStack stack, int multiplier) {
+ int totalItems = stack.stackSize * multiplier;
+ ArrayList<ItemStack> stacks = new ArrayList<>();
+ if (totalItems >= 64) {
+ for (int i = 0; i < totalItems / 64; i++) {
+ stacks.add(GT_Utility.copyAmount(64, stack));
+ }
+ }
+ if (totalItems % 64 > 0) {
+ stacks.add(GT_Utility.copyAmount(totalItems % 64, stack));
+ }
+ return stacks;
+ }
+
+ /**
+ * Merges the ItemStacks in the array into full stacks.
+ */
+ public static ArrayList<ItemStack> mergeStacks(List<ItemStack> stacks) {
+ ArrayList<ItemStack> output = new ArrayList<>();
+ for (int index = 0; index < stacks.size(); index++) {
+ ItemStack i = stacks.get(index);
+ int newSize = i.stackSize;
+ for (int j = index + 1; j < stacks.size(); j++) {
+ ItemStack is2 = stacks.get(j);
+ if (GT_Utility.areStacksEqual(i, is2)) {
+ newSize += is2.stackSize;
+ stacks.remove(j);
+ j--;
+ }
+ }
+ output.add(GT_Utility.copyAmountUnsafe(newSize, i));
+ }
+ return output;
+ }
+
+ /**
+ * Turns the {@code items} List into a {@code HashMap} containing each unique {@code ItemStack} as the key, and a
+ * value representing the total amount of the respective {@code ItemStack} in the List.
+ */
+ public static HashMap<ItemStack, Integer> getTotalItems(List<ItemStack> items) {
+ HashMap<ItemStack, Integer> totals = new HashMap<>();
+ itemLoop: for (ItemStack item : items) {
+ int t = items.stream()
+ .filter(i2 -> GT_Utility.areStacksEqual(item, i2))
+ .mapToInt(i -> i.stackSize)
+ .sum();
+ for (ItemStack i2 : totals.keySet()) if (GT_Utility.areStacksEqual(item, i2)) continue itemLoop;
+ totals.put(GT_Utility.copyAmount(1, item), t);
+ }
+ return totals;
+ }
+
+ /**
+ * Turns the {@code items} Array into a {@code HashMap} containing each unique {@code ItemStack} as the key, and a
+ * value representing the total amount of the respective {@code ItemStack} in the Array.
+ */
+ public static HashMap<ItemStack, Integer> getTotalItems(ItemStack[] items) {
+ return getTotalItems(Arrays.asList(items));
+ }
+
+ public static FluidStack getTieredFluid(int aTier, int aAmount) {
+ switch (aTier) {
+ case 0: // ULV
+ return Materials.RedAlloy.getMolten(aAmount);
+ case 1: // LV
+ return Materials.TinAlloy.getMolten(aAmount);
+ case 2: // MV
+ return Materials.RoseGold.getMolten(aAmount);
+ case 3: // HV
+ return MyMaterial.zircaloy4.getMolten(aAmount);
+ case 4: // EV
+ return MyMaterial.incoloy903.getMolten(aAmount);
+ case 5: // IV
+ return MyMaterial.titaniumBetaC.getMolten(aAmount);
+ case 6: // LuV
+ return MyMaterial.artheriumSn.getMolten(aAmount);
+ case 7: // ZPM
+ return MyMaterial.dalisenite.getMolten(aAmount);
+ case 8: // UV
+ return MyMaterial.tairitsu.getMolten(aAmount);
+ case 9: // UHV
+ return MyMaterial.preciousMetalAlloy.getMolten(aAmount);
+ case 10: // UEV
+ return MyMaterial.enrichedNaquadahAlloy.getMolten(aAmount);
+ case 11: // UIV
+ return MyMaterial.metastableOganesson.getMolten(aAmount);
+ case 12: // UMV
+ return MaterialsUEVplus.SpaceTime.getMolten(aAmount);
+ default:
+ return MyMaterial.shirabon.getMolten(aAmount);
+ }
+ }
+
+ // === Copied from AE2FC to avoid hard dep ===
+
+ public static IAEFluidStack createAEFluidStack(Fluid fluid) {
+ return createAEFluidStack(new FluidStack(fluid, FluidContainerRegistry.BUCKET_VOLUME));
+ }
+
+ public static IAEFluidStack createAEFluidStack(Fluid fluid, long amount) {
+ return createAEFluidStack(fluid.getID(), amount);
+ }
+
+ public static IAEFluidStack createAEFluidStack(FluidStack fluid) {
+ return AEApi.instance()
+ .storage()
+ .createFluidStack(fluid);
+ }
+
+ public static IAEFluidStack createAEFluidStack(int fluidId, long amount) {
+ return createAEFluidStack(new FluidStack(FluidRegistry.getFluid(fluidId), 1)).setStackSize(amount);
+ }
+
+}
diff --git a/src/main/java/goodgenerator/util/StructureHelper.java b/src/main/java/goodgenerator/util/StructureHelper.java
new file mode 100644
index 0000000000..e66ac9f9ee
--- /dev/null
+++ b/src/main/java/goodgenerator/util/StructureHelper.java
@@ -0,0 +1,117 @@
+package goodgenerator.util;
+
+import java.util.Arrays;
+import java.util.function.BiConsumer;
+import java.util.function.BiPredicate;
+import java.util.function.Function;
+
+import net.minecraft.block.Block;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemBlock;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.IIcon;
+import net.minecraft.world.World;
+
+import com.gtnewhorizon.structurelib.StructureLibAPI;
+import com.gtnewhorizon.structurelib.structure.IStructureElement;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.metatileentity.BaseMetaPipeEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Frame;
+import gregtech.api.util.GT_OreDictUnificator;
+
+public class StructureHelper {
+
+ public static <T> IStructureElement<T> addFrame(Materials aMaterials) {
+ return new IStructureElement<T>() {
+
+ private IIcon[] mIcons;
+
+ @Override
+ public boolean check(T t, World world, int x, int y, int z) {
+ TileEntity tBlock = world.getTileEntity(x, y, z);
+ if (tBlock instanceof BaseMetaPipeEntity) {
+ BaseMetaPipeEntity tFrame = (BaseMetaPipeEntity) tBlock;
+ if (tFrame.isInvalidTileEntity()) return false;
+ if (tFrame.getMetaTileEntity() instanceof GT_MetaPipeEntity_Frame) {
+ return ((GT_MetaPipeEntity_Frame) tFrame.getMetaTileEntity()).mMaterial == aMaterials;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
+ if (mIcons == null) {
+ mIcons = new IIcon[6];
+ Arrays.fill(mIcons, aMaterials.mIconSet.mTextures[OrePrefixes.frameGt.mTextureIndex].getIcon());
+ }
+ StructureLibAPI.hintParticleTinted(world, x, y, z, mIcons, aMaterials.mRGBa);
+ return true;
+ }
+
+ @Override
+ public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
+ ItemStack tFrame = GT_OreDictUnificator.get(OrePrefixes.frameGt, aMaterials, 1);
+ if (tFrame.getItem() instanceof ItemBlock) {
+ ItemBlock tFrameStackItem = (ItemBlock) tFrame.getItem();
+ return tFrameStackItem
+ .placeBlockAt(tFrame, null, world, x, y, z, 6, 0, 0, 0, Items.feather.getDamage(tFrame));
+ }
+ return false;
+ }
+ };
+ }
+
+ // Only support to use meta to tier
+ public static <T> IStructureElement<T> addTieredBlock(Block aBlock, BiConsumer<T, Integer> aSetTheFuckingMeta,
+ Function<T, Integer> aGetTheFuckingMeta, int maxMeta) {
+ return addTieredBlock(aBlock, (t, i) -> {
+ aSetTheFuckingMeta.accept(t, i);
+ return true;
+ }, aGetTheFuckingMeta, maxMeta);
+ }
+
+ public static <T> IStructureElement<T> addTieredBlock(Block aBlock, BiPredicate<T, Integer> aSetTheFuckingMeta,
+ Function<T, Integer> aGetTheFuckingMeta, int maxMeta) {
+
+ return new IStructureElement<T>() {
+
+ @Override
+ public boolean check(T t, World world, int x, int y, int z) {
+ Block tBlock = world.getBlock(x, y, z);
+ if (aBlock == tBlock) {
+ Integer currentMeta = aGetTheFuckingMeta.apply(t);
+ int newMeta = tBlock.getDamageValue(world, x, y, z) + 1;
+ if (newMeta > maxMeta) return false;
+ if (currentMeta == 0) {
+ return aSetTheFuckingMeta.test(t, newMeta);
+ } else {
+ return currentMeta == newMeta;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
+ StructureLibAPI.hintParticle(world, x, y, z, aBlock, getMeta(trigger));
+ return true;
+ }
+
+ @Override
+ public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
+ return world.setBlock(x, y, z, aBlock, getMeta(trigger), 3);
+ }
+
+ private int getMeta(ItemStack trigger) {
+ int meta = trigger.stackSize - 1;
+ if (meta <= 0) meta = 0;
+ if (meta >= maxMeta) meta = maxMeta - 1;
+ return meta;
+ }
+ };
+ }
+}