diff options
7 files changed, 188 insertions, 5 deletions
diff --git a/src/Java/gtPlusPlus/core/handler/COMPAT_HANDLER.java b/src/Java/gtPlusPlus/core/handler/COMPAT_HANDLER.java index d6f2472fd0..3fad9c5ffb 100644 --- a/src/Java/gtPlusPlus/core/handler/COMPAT_HANDLER.java +++ b/src/Java/gtPlusPlus/core/handler/COMPAT_HANDLER.java @@ -16,6 +16,7 @@ import gtPlusPlus.core.recipe.*; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.item.ItemUtils; import gtPlusPlus.core.util.recipe.RecipeUtils; +import gtPlusPlus.xmod.gregtech.recipes.MultiblockRecipeMapHandler; import gtPlusPlus.xmod.gregtech.registration.gregtech.*; import net.minecraft.item.ItemStack; @@ -41,6 +42,10 @@ public class COMPAT_HANDLER { public static void registerGregtechMachines() { if (Gregtech) { + + //Register some custom recipe maps for any enabled multiblocks. + MultiblockRecipeMapHandler.run(); + new RECIPES_LaserEngraver(); GregtechEnergyBuffer.run(); GregtechLFTR.run(); diff --git a/src/Java/gtPlusPlus/core/util/math/MathUtils.java b/src/Java/gtPlusPlus/core/util/math/MathUtils.java index b61af67566..72969550e8 100644 --- a/src/Java/gtPlusPlus/core/util/math/MathUtils.java +++ b/src/Java/gtPlusPlus/core/util/math/MathUtils.java @@ -143,6 +143,10 @@ public class MathUtils { final double roundOff = Math.round(c * 100.00) / 100.00; return roundOff; } + + public static int findPercentageOfInt(int input, int percentage){ + return (int)(input*(percentage/100.0f)); + } //Smooth Rounding Function diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_IndustrialCentrifuge.java b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_IndustrialCentrifuge.java index c436b7ee38..8c71ccc6fc 100644 --- a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_IndustrialCentrifuge.java +++ b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_IndustrialCentrifuge.java @@ -22,6 +22,7 @@ import gtPlusPlus.core.util.Utils; import gtPlusPlus.xmod.gregtech.api.gui.GUI_MultiMachine; import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.CustomIcon; +import gtPlusPlus.xmod.gregtech.recipes.MultiblockRecipeMapHandler; import net.minecraft.block.Block; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; @@ -84,7 +85,7 @@ extends GregtechMeta_MultiBlockBase { @Override public GT_Recipe.GT_Recipe_Map getRecipeMap() { - return GT_Recipe.GT_Recipe_Map.sCentrifugeRecipes; + return MultiblockRecipeMapHandler.mMultiCentrifuge; } @Override diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_IndustrialElectrolyzer.java b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_IndustrialElectrolyzer.java index 702c764441..523886578e 100644 --- a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_IndustrialElectrolyzer.java +++ b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_IndustrialElectrolyzer.java @@ -20,6 +20,7 @@ import gtPlusPlus.core.lib.CORE; import gtPlusPlus.core.util.Utils; import gtPlusPlus.xmod.gregtech.api.gui.GUI_MultiMachine; import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; +import gtPlusPlus.xmod.gregtech.recipes.MultiblockRecipeMapHandler; import net.minecraft.block.Block; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; @@ -72,7 +73,7 @@ extends GregtechMeta_MultiBlockBase { @Override public GT_Recipe.GT_Recipe_Map getRecipeMap() { - return GT_Recipe.GT_Recipe_Map.sElectrolyzerRecipes; + return MultiblockRecipeMapHandler.mMultiElectrolyzer; } @Override @@ -233,7 +234,7 @@ extends GregtechMeta_MultiBlockBase { } } } - return tAmount >= 16; + return tAmount >= 12; } @Override diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_IndustrialMacerator.java b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_IndustrialMacerator.java index 305e9a3a85..134bec0d4e 100644 --- a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_IndustrialMacerator.java +++ b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_IndustrialMacerator.java @@ -20,6 +20,7 @@ import gtPlusPlus.core.util.Utils; import gtPlusPlus.xmod.gregtech.api.gui.GUI_MultiMachine; import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import gtPlusPlus.xmod.gregtech.recipes.MultiblockRecipeMapHandler; import net.minecraft.block.Block; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; @@ -71,7 +72,7 @@ extends GregtechMeta_MultiBlockBase { @Override public GT_Recipe.GT_Recipe_Map getRecipeMap() { - return GT_Recipe.GT_Recipe_Map.sMaceratorRecipes; + return MultiblockRecipeMapHandler.mMultiMacerator; } /*@Override diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_IndustrialWireMill.java b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_IndustrialWireMill.java index 5f19f4c447..833178a1ae 100644 --- a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_IndustrialWireMill.java +++ b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_IndustrialWireMill.java @@ -17,6 +17,7 @@ import gtPlusPlus.core.lib.CORE; import gtPlusPlus.core.util.Utils; import gtPlusPlus.xmod.gregtech.api.gui.GUI_MultiMachine; import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; +import gtPlusPlus.xmod.gregtech.recipes.MultiblockRecipeMapHandler; import net.minecraft.block.Block; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; @@ -65,7 +66,7 @@ extends GregtechMeta_MultiBlockBase { @Override public GT_Recipe.GT_Recipe_Map getRecipeMap() { - return GT_Recipe.GT_Recipe_Map.sWiremillRecipes; + return MultiblockRecipeMapHandler.mMultiWireMill; } @Override diff --git a/src/Java/gtPlusPlus/xmod/gregtech/recipes/MultiblockRecipeMapHandler.java b/src/Java/gtPlusPlus/xmod/gregtech/recipes/MultiblockRecipeMapHandler.java new file mode 100644 index 0000000000..5680951cae --- /dev/null +++ b/src/Java/gtPlusPlus/xmod/gregtech/recipes/MultiblockRecipeMapHandler.java @@ -0,0 +1,170 @@ +package gtPlusPlus.xmod.gregtech.recipes; + +import static gregtech.api.enums.GT_Values.E; +import static gregtech.api.enums.GT_Values.RES_PATH_GUI; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; + +import gregtech.api.util.CustomRecipeMap; +import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GT_Recipe.GT_Recipe_Map; +import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.util.Utils; +import gtPlusPlus.core.util.math.MathUtils; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fluids.FluidStack; + +public class MultiblockRecipeMapHandler{ + + public static final CustomRecipeMap mMultiElectrolyzer = new CustomRecipeMap(new HashSet<GT_Recipe>(50), "gt.recipe.fissionfuel", "Fission Fuel Processing", null, RES_PATH_GUI + "basicmachines/FissionFuel", 0, 0, 0, 0, 1, E, 1, E, true, true); + public static final CustomRecipeMap mMultiCentrifuge = new CustomRecipeMap(new HashSet<GT_Recipe>(50), "gt.recipe.fissionfuel", "Fission Fuel Processing", null, RES_PATH_GUI + "basicmachines/FissionFuel", 0, 0, 0, 0, 1, E, 1, E, true, true); + public static final CustomRecipeMap mMultiMacerator = new CustomRecipeMap(new HashSet<GT_Recipe>(50), "gt.recipe.fissionfuel", "Fission Fuel Processing", null, RES_PATH_GUI + "basicmachines/FissionFuel", 0, 0, 0, 0, 1, E, 1, E, true, true); + public static final CustomRecipeMap mMultiWireMill = new CustomRecipeMap(new HashSet<GT_Recipe>(50), "gt.recipe.fissionfuel", "Fission Fuel Processing", null, RES_PATH_GUI + "basicmachines/FissionFuel", 0, 0, 0, 0, 1, E, 1, E, true, true); + + + + public static void run() { + + if(CORE.configSwitches.enableMultiblock_IndustrialElectrolyzer){ + generateMultimachineRecipeMap(GT_Recipe.GT_Recipe_Map.sElectrolyzerRecipes, mMultiElectrolyzer); + } + if(CORE.configSwitches.enableMultiblock_IndustrialCentrifuge){ + generateMultimachineRecipeMap(GT_Recipe.GT_Recipe_Map.sCentrifugeRecipes, mMultiCentrifuge); + } + if(CORE.configSwitches.enableMultiblock_IndustrialMacerationStack){ + generateMultimachineRecipeMap(GT_Recipe.GT_Recipe_Map.sMaceratorRecipes, mMultiMacerator); + } + if(CORE.configSwitches.enableMultiblock_IndustrialWireMill){ + generateMultimachineRecipeMap(GT_Recipe.GT_Recipe_Map.sWiremillRecipes, mMultiWireMill); + } + + } + + + + + + + + + + + + + + + + + + + + + + + + public static boolean isCell(ItemStack cell) { + if (cell.getDisplayName().toLowerCase().contains("cell") + || cell.getUnlocalizedName().toLowerCase().contains("cell") + || FluidContainerRegistry.isFilledContainer(cell)) { + if (cell.getDisplayName().toLowerCase().contains("plasma") + || cell.getUnlocalizedName().toLowerCase().contains("plasma")) { + return false; + } + return true; + } + return false; + } + + public static boolean isCellEmpty(ItemStack cell){ + if (cell.getDisplayName().toLowerCase().contains("empty") + || cell.getUnlocalizedName().toLowerCase().contains("empty") + ) { + return true; + } + return false; + } + + private static ItemStack[] copyItemElements(ItemStack[] items){ + int inputCount = 0; + ItemStack[] item = new ItemStack[9]; + for (ItemStack input : items) { + if (!isCell(input)){ + item[inputCount] = input; + inputCount++; + } + } + return item; + } + + private FluidStack[] copyFluidElements(FluidStack[] fluids){ + FluidStack fluid[] = new FluidStack[9]; + for (int r = 0; r<fluids.length;r++){ + fluid[r] = fluids[r]; + } + return fluid; + } + + private static FluidStack[] addRemovedCellsToArray(ItemStack[] items, FluidStack[] fluids){ + ArrayList<FluidStack> fluidInputs = new ArrayList<FluidStack>(); + + for (FluidStack fluid : fluids){ + fluidInputs.add(fluid); + } + + for (ItemStack input : items) { + if (isCell(input) && !isCellEmpty(input)){ + FluidStack cellFluid = FluidContainerRegistry.getFluidForFilledItem(input); + cellFluid.amount = 1000; + fluidInputs.add(cellFluid); + } + } + FluidStack[] returnArray = new FluidStack[fluidInputs.size()]; + for (int h=0;h<fluidInputs.size();h++){ + returnArray[h] = fluidInputs.get(h); + } + return returnArray; + } + + private static void generateMultimachineRecipeMap(GT_Recipe_Map inputMap, CustomRecipeMap newMap) { + GT_Recipe_Map r = inputMap; + final Collection<GT_Recipe> x = r.mRecipeList; + for (final GT_Recipe newBo : x) { + ItemStack[] mInputs = copyItemElements(newBo.mInputs); + ItemStack[] mOutputs = copyItemElements(newBo.mOutputs); + FluidStack[] mFluidInputs = addRemovedCellsToArray(newBo.mInputs, newBo.mFluidInputs); + FluidStack[] mFluidOutputs = addRemovedCellsToArray(newBo.mOutputs, newBo.mFluidOutputs); + int duration = MathUtils.findPercentageOfInt(newBo.mDuration, 80); + + //Change bonus chances + int[] outputChances = null; + if (newBo.mChances != null){ + outputChances = newBo.mChances.clone(); + for (int g=0;g<outputChances.length;g++){ + Utils.LOG_WARNING("Output["+g+"] chance = "+outputChances[g]); + if (outputChances[g]<10000){ + int temp = outputChances[g]; + if (outputChances[g] < 8000 && outputChances[g] >= 1){ + outputChances[g] = temp+600; + Utils.LOG_WARNING("Output["+g+"] chance now = "+outputChances[g]); + } + else if (outputChances[g] < 9000 && outputChances[g] >= 8000){ + outputChances[g] = temp+200; + Utils.LOG_WARNING("Output["+g+"] chance now = "+outputChances[g]); + } + else if (outputChances[g] <= 9900 && outputChances[g] >= 9000){ + outputChances[g] = temp+100; + Utils.LOG_WARNING("Output["+g+"] chance now = "+outputChances[g]); + } + } + } + } + newMap.addRecipe(true, mInputs, mOutputs, newBo.mSpecialItems, outputChances, mFluidInputs, mFluidOutputs, duration, newBo.mEUt, newBo.mSpecialValue); + } + } + + + +} |