diff options
author | Jordan Byrne <draknyte1@hotmail.com> | 2018-04-16 21:22:56 +1000 |
---|---|---|
committer | Jordan Byrne <draknyte1@hotmail.com> | 2018-04-16 21:22:56 +1000 |
commit | 333c1a09cf1a6ae7e128284c27d098f548042cca (patch) | |
tree | fe068ab7574e23d1a3490964a3a93c663981cf2f /src | |
parent | 8c03170c38ef203c1264453ab04e9a9e80248708 (diff) | |
download | GT5-Unofficial-333c1a09cf1a6ae7e128284c27d098f548042cca.tar.gz GT5-Unofficial-333c1a09cf1a6ae7e128284c27d098f548042cca.tar.bz2 GT5-Unofficial-333c1a09cf1a6ae7e128284c27d098f548042cca.zip |
% Changed Adv. Cryo Freezer to not handle cells and instead use fluids (LCR type).
$ Added a check to ensure the inputs and outputs of all Adv. Cryo Freezer contain equal cell counts (Some Plasmas do not have a non-cell version, plus things like carbon becomes a solid).
Diffstat (limited to 'src')
6 files changed, 197 insertions, 8 deletions
diff --git a/src/Java/gregtech/api/util/Recipe_GT.java b/src/Java/gregtech/api/util/Recipe_GT.java index 4e8e344fb9..11ac153195 100644 --- a/src/Java/gregtech/api/util/Recipe_GT.java +++ b/src/Java/gregtech/api/util/Recipe_GT.java @@ -293,6 +293,7 @@ public class Recipe_GT extends GT_Recipe{ public static final GT_Recipe_Map sFishPondRecipes = new GT_Recipe_Map(new HashSet<GT_Recipe>(3), "gt.recipe.fishpond", "Zhuhai - Fishing Port", null, RES_PATH_GUI + "basicmachines/PotionBrewer", 0, 1, 0, 0, 1, "Requires Circuit: ", 1, ".", true, true); public static final GT_Recipe_Map sMultiblockCentrifugeRecipes = new GT_Recipe_Map_LargeCentrifuge(); public static final GT_Recipe_Map sMultiblockElectrolyzerRecipes = new GT_Recipe_Map_LargeElectrolyzer(); + public static final GT_Recipe_Map sAdvFreezerRecipes = new GT_Recipe_Map_AdvancedVacuumFreezer(); /** @@ -1126,5 +1127,152 @@ public class Recipe_GT extends GT_Recipe{ } } } + + public static class GT_Recipe_Map_AdvancedVacuumFreezer extends GT_Recipe_Map { + private static int INPUT_COUNT; + private static int OUTPUT_COUNT; + private static int FLUID_INPUT_COUNT; + private static int FLUID_OUTPUT_COUNT; + + public GT_Recipe_Map_AdvancedVacuumFreezer() { + super(new HashSet<GT_Recipe>(2000), "gt.recipe.advfreezer", "Adv. Cryogenic Freezer", null, + "gregtech:textures/gui/basicmachines/Default", GT_Recipe_Map_AdvancedVacuumFreezer.INPUT_COUNT, + GT_Recipe_Map_AdvancedVacuumFreezer.OUTPUT_COUNT, 0, 0, 1, "", 1, "", true, true); + } + + @Override + public GT_Recipe addRecipe(final boolean aOptimize, ItemStack[] aInputs, ItemStack[] aOutputs, + final Object aSpecial, final int[] aOutputChances, FluidStack[] aFluidInputs, + FluidStack[] aFluidOutputs, final int aDuration, final int aEUt, final int aSpecialValue) { + final ArrayList<ItemStack> adjustedInputs = new ArrayList<ItemStack>(); + final ArrayList<ItemStack> adjustedOutputs = new ArrayList<ItemStack>(); + final ArrayList<FluidStack> adjustedFluidInputs = new ArrayList<FluidStack>(); + final ArrayList<FluidStack> adjustedFluidOutputs = new ArrayList<FluidStack>(); + if (aInputs == null) { + aInputs = new ItemStack[0]; + } + for (final ItemStack input : aInputs) { + FluidStack inputFluidContent = FluidContainerRegistry.getFluidForFilledItem(input); + if (inputFluidContent != null) { + final FluidStack fluidStack = inputFluidContent; + fluidStack.amount *= input.stackSize; + if (inputFluidContent.getFluid().getName().equals("ic2steam")) { + inputFluidContent = GT_ModHandler.getSteam((long) inputFluidContent.amount); + } + adjustedFluidInputs.add(inputFluidContent); + } else { + final ItemData itemData = GT_OreDictUnificator.getItemData(input); + if (itemData == null || !itemData.hasValidPrefixMaterialData() + || itemData.mMaterial.mMaterial != Materials.Empty) { + if (itemData != null && itemData.hasValidPrefixMaterialData() + && itemData.mPrefix == OrePrefixes.cell) { + final ItemStack dustStack = itemData.mMaterial.mMaterial.getDust(input.stackSize); + if (dustStack != null) { + adjustedInputs.add(dustStack); + } else { + adjustedInputs.add(input); + } + } else { + adjustedInputs.add(input); + } + } + } + } + if (aFluidInputs == null) { + aFluidInputs = new FluidStack[0]; + } + for (final FluidStack fluidInput : aFluidInputs) { + adjustedFluidInputs.add(fluidInput); + } + aInputs = adjustedInputs.toArray(new ItemStack[adjustedInputs.size()]); + aFluidInputs = adjustedFluidInputs.toArray(new FluidStack[adjustedFluidInputs.size()]); + if (aOutputs == null) { + aOutputs = new ItemStack[0]; + } + for (final ItemStack output : aOutputs) { + FluidStack outputFluidContent = FluidContainerRegistry.getFluidForFilledItem(output); + if (outputFluidContent != null) { + final FluidStack fluidStack2 = outputFluidContent; + fluidStack2.amount *= output.stackSize; + if (outputFluidContent.getFluid().getName().equals("ic2steam")) { + outputFluidContent = GT_ModHandler.getSteam((long) outputFluidContent.amount); + } + adjustedFluidOutputs.add(outputFluidContent); + } else { + final ItemData itemData = GT_OreDictUnificator.getItemData(output); + if (itemData == null || !itemData.hasValidPrefixMaterialData() + || itemData.mMaterial.mMaterial != Materials.Empty) { + adjustedOutputs.add(output); + } + } + } + if (aFluidOutputs == null) { + aFluidOutputs = new FluidStack[0]; + } + for (final FluidStack fluidOutput : aFluidOutputs) { + adjustedFluidOutputs.add(fluidOutput); + } + aOutputs = adjustedOutputs.toArray(new ItemStack[adjustedOutputs.size()]); + aFluidOutputs = adjustedFluidOutputs.toArray(new FluidStack[adjustedFluidOutputs.size()]); + return this.addRecipe(new GT_Recipe_AdvFreezer(aOptimize, aInputs, aOutputs, aSpecial, + aOutputChances, aFluidInputs, aFluidOutputs, aDuration, aEUt, aSpecialValue)); + } + + static { + GT_Recipe_Map_AdvancedVacuumFreezer.INPUT_COUNT = 2; + GT_Recipe_Map_AdvancedVacuumFreezer.OUTPUT_COUNT = 2; + GT_Recipe_Map_AdvancedVacuumFreezer.FLUID_INPUT_COUNT = 4; + GT_Recipe_Map_AdvancedVacuumFreezer.FLUID_OUTPUT_COUNT = 4; + } + + private static class GT_Recipe_AdvFreezer extends GT_Recipe { + protected GT_Recipe_AdvFreezer(final boolean aOptimize, final ItemStack[] aInputs, + final ItemStack[] aOutputs, final Object aSpecialItems, final int[] aChances, + final FluidStack[] aFluidInputs, final FluidStack[] aFluidOutputs, final int aDuration, + final int aEUt, final int aSpecialValue) { + super(aOptimize, aInputs, aOutputs, aSpecialItems, aChances, aFluidInputs, aFluidOutputs, aDuration, + aEUt, aSpecialValue); + } + + @Override + public ArrayList<PositionedStack> getInputPositionedStacks() { + final int itemLimit = Math.min(this.mInputs.length, GT_Recipe_Map_AdvancedVacuumFreezer.INPUT_COUNT); + final int fluidLimit = Math.min(this.mFluidInputs.length, + GT_Recipe_Map_AdvancedVacuumFreezer.FLUID_INPUT_COUNT); + final ArrayList<PositionedStack> inputStacks = new ArrayList<PositionedStack>(itemLimit + fluidLimit); + for (int i = 0; i < itemLimit; ++i) { + inputStacks.add((PositionedStack) new GT_NEI_DefaultHandler.FixedPositionedStack( + (Object) this.mInputs[i].copy(), 48 - i * 18, 5)); + } + for (int i = 0; i < fluidLimit; ++i) { + if (i < 3) { + inputStacks.add((PositionedStack) new GT_NEI_DefaultHandler.FixedPositionedStack( + (Object) GT_Utility.getFluidDisplayStack(this.mFluidInputs[i], true), 48 - i * 18, 23)); + } else { + inputStacks.add((PositionedStack) new GT_NEI_DefaultHandler.FixedPositionedStack( + (Object) GT_Utility.getFluidDisplayStack(this.mFluidInputs[i], true), 12, 5)); + } + } + return inputStacks; + } + + @Override + public ArrayList<PositionedStack> getOutputPositionedStacks() { + final int itemLimit = Math.min(this.mOutputs.length, GT_Recipe_Map_AdvancedVacuumFreezer.OUTPUT_COUNT); + final int fluidLimit = Math.min(this.mFluidOutputs.length, + GT_Recipe_Map_AdvancedVacuumFreezer.FLUID_OUTPUT_COUNT); + final ArrayList<PositionedStack> outputStacks = new ArrayList<PositionedStack>(itemLimit + fluidLimit); + for (int i = 0; i < itemLimit; ++i) { + outputStacks.add((PositionedStack) new GT_NEI_DefaultHandler.FixedPositionedStack( + (Object) this.mOutputs[i].copy(), 102 + i * 18, 5)); + } + for (int i = 0; i < fluidLimit; ++i) { + outputStacks.add((PositionedStack) new GT_NEI_DefaultHandler.FixedPositionedStack( + (Object) GT_Utility.getFluidDisplayStack(this.mFluidOutputs[i], true), 102 + i * 18, 23)); + } + return outputStacks; + } + } + } }
\ No newline at end of file diff --git a/src/Java/gtPlusPlus/GTplusplus.java b/src/Java/gtPlusPlus/GTplusplus.java index 8fb0b04089..2abe195212 100644 --- a/src/Java/gtPlusPlus/GTplusplus.java +++ b/src/Java/gtPlusPlus/GTplusplus.java @@ -40,6 +40,7 @@ import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.data.LocaleUtils; import gtPlusPlus.core.util.minecraft.ItemUtils; import gtPlusPlus.core.util.minecraft.PlayerUtils; +import gtPlusPlus.core.util.minecraft.RecipeUtils; import gtPlusPlus.core.util.sys.GeoUtils; import gtPlusPlus.core.util.sys.NetworkUtils; import gtPlusPlus.plugin.manager.Core_Manager; @@ -202,19 +203,28 @@ public class GTplusplus implements ActionListener { public void onLoadComplete(FMLLoadCompleteEvent event) { RecipeGen_BlastSmelterGT_GTNH.generateGTNHBlastSmelterRecipesFromEBFList(); FishPondFakeRecipe.generateFishPondRecipes(); - + + //Large Centrifuge generation for (GT_Recipe x : GT_Recipe.GT_Recipe_Map.sCentrifugeRecipes.mRecipeList) { if (x != null) { CORE.RA.addMultiblockCentrifugeRecipe(x.mInputs, x.mFluidInputs, x.mFluidOutputs, x.mOutputs, x.mDuration, x.mEUt); } } - + + //Large Electrolyzer generation for (GT_Recipe x : GT_Recipe.GT_Recipe_Map.sElectrolyzerRecipes.mRecipeList) { if (x != null) { CORE.RA.addMultiblockElectrolyzerRecipe(x.mInputs, x.mFluidInputs, x.mFluidOutputs, x.mOutputs, x.mDuration, x.mEUt); } } + //Advanced Vacuum Freezer generation + for (GT_Recipe x : GT_Recipe.GT_Recipe_Map.sVacuumRecipes.mRecipeList) { + if (x != null && RecipeUtils.doesGregtechRecipeHaveEqualCells(x)) { + CORE.RA.addAdvancedFreezerRecipe(x.mInputs, x.mFluidInputs, x.mFluidOutputs, x.mOutputs, (x.mDuration/2), x.mEUt); + } + } + } protected void dumpGtRecipeMap(final GT_Recipe_Map r) { diff --git a/src/Java/gtPlusPlus/core/util/minecraft/RecipeUtils.java b/src/Java/gtPlusPlus/core/util/minecraft/RecipeUtils.java index d3367cc46b..e5e4bb1181 100644 --- a/src/Java/gtPlusPlus/core/util/minecraft/RecipeUtils.java +++ b/src/Java/gtPlusPlus/core/util/minecraft/RecipeUtils.java @@ -11,7 +11,10 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.CraftingManager; import net.minecraft.item.crafting.IRecipe; +import gregtech.api.enums.GT_Values; +import gregtech.api.enums.Materials; import gregtech.api.util.GT_ModHandler; +import gregtech.api.util.GT_Recipe; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.handler.COMPAT_HANDLER; @@ -492,4 +495,21 @@ public class RecipeUtils { aOutput); } + public static boolean doesGregtechRecipeHaveEqualCells(GT_Recipe x) { + if (x.mInputs.length < 1) { + return false; + } + final int tInputAmount = GT_ModHandler.getCapsuleCellContainerCountMultipliedWithStackSize(x.mInputs); + final int tOutputAmount = GT_ModHandler.getCapsuleCellContainerCountMultipliedWithStackSize(x.mOutputs); + if (tInputAmount < tOutputAmount) { + if (!Materials.Tin.contains(x.mInputs)) { + return false; + } + } else if (tInputAmount > tOutputAmount && !Materials.Tin.contains(x.mOutputs)) { + return false; + } + + return true; + } + } diff --git a/src/Java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IGregtech_RecipeAdder.java b/src/Java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IGregtech_RecipeAdder.java index 63393d2081..1f3d14fd0c 100644 --- a/src/Java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IGregtech_RecipeAdder.java +++ b/src/Java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IGregtech_RecipeAdder.java @@ -158,5 +158,6 @@ public interface IGregtech_RecipeAdder { public boolean addMultiblockElectrolyzerRecipe(ItemStack[] aInputs, FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, ItemStack[] aOutputs, int aDuration, int aEUtick); + public boolean addAdvancedFreezerRecipe(ItemStack[] aInputs, FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, ItemStack[] aOutputs, int aDuration, int aEUtick); } diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialVacuumFreezer.java b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialVacuumFreezer.java index 9e5ccf0dc0..29a1b0ff78 100644 --- a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialVacuumFreezer.java +++ b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialVacuumFreezer.java @@ -11,6 +11,7 @@ import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.Gregtech import net.minecraft.item.ItemStack; import gregtech.api.util.GT_Recipe; +import gregtech.api.util.Recipe_GT; import gregtech.api.gui.GT_GUIContainer_MultiMachine; import net.minecraft.entity.player.InventoryPlayer; import gregtech.api.interfaces.IIconContainer; @@ -53,8 +54,8 @@ public class GregtechMetaTileEntity_IndustrialVacuumFreezer extends GregtechMeta "Size(WxHxD): 3x3x3 (Hollow), Controller (Front centered)", "1x Input Bus (Any casing)", "1x Output Bus (Any casing)", - "1x Input Hatch (Any casing)", - "1x Output Hatch (Any casing)", + "1x Input Hatch (Any casing, optional)", + "1x Output Hatch (Any casing, optional)", "1x Maintenance Hatch (Any casing)", "1x Energy Hatch (Any casing)", mCasingName+"s for the rest (10 at least!)"}; @@ -78,7 +79,7 @@ public class GregtechMetaTileEntity_IndustrialVacuumFreezer extends GregtechMeta } public GT_Recipe.GT_Recipe_Map getRecipeMap() { - return GT_Recipe.GT_Recipe_Map.sVacuumRecipes; + return Recipe_GT.Gregtech_Recipe_Map.sAdvFreezerRecipes; } public boolean isCorrectMachinePart(final ItemStack aStack) { @@ -90,7 +91,7 @@ public class GregtechMetaTileEntity_IndustrialVacuumFreezer extends GregtechMeta } public boolean checkRecipe(final ItemStack aStack) { - return this.checkRecipeGeneric(4, 100, 200); + return this.checkRecipeGeneric(4, 100, 100); } public boolean checkMachine(final IGregTechTileEntity aBaseMetaTileEntity, final ItemStack aStack) { diff --git a/src/Java/gtPlusPlus/xmod/gregtech/recipes/GregtechRecipeAdder.java b/src/Java/gtPlusPlus/xmod/gregtech/recipes/GregtechRecipeAdder.java index 28923578de..29c05c4045 100644 --- a/src/Java/gtPlusPlus/xmod/gregtech/recipes/GregtechRecipeAdder.java +++ b/src/Java/gtPlusPlus/xmod/gregtech/recipes/GregtechRecipeAdder.java @@ -505,8 +505,17 @@ public class GregtechRecipeAdder implements IGregtech_RecipeAdder { return true; } - - + + public boolean addAdvancedFreezerRecipe(ItemStack[] aInputs, FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, ItemStack[] aOutputs, int aDuration, int aEUtick) { + if (areItemsAndFluidsBothNull(aInputs, aFluidInputs) || areItemsAndFluidsBothNull(aOutputs, aFluidOutputs)) { + return false; + } + if (aEUtick <= 0) { + return false; + } + Recipe_GT.Gregtech_Recipe_Map.sAdvFreezerRecipes.addRecipe(false, aInputs, aOutputs, null, null, aFluidInputs, aFluidOutputs, aDuration, aEUtick, 0); + return true; + } |