diff --git a/src/main/java/gregtechmod/api/enums/Materials.java b/src/main/java/gregtechmod/api/enums/Materials.java index 864037b..92ee3f5 100644 --- a/src/main/java/gregtechmod/api/enums/Materials.java +++ b/src/main/java/gregtechmod/api/enums/Materials.java @@ -173,6 +173,7 @@ public enum Materials { FieryBlood ( -1, GT_ItemTextures.SET_NONE , 1|2 |64 , 255, 255, 255, 0, 5, 2048, 0, 0, 0, 0, false, false, 1, 1, 1, Dyes.dyeRed ), Firestone ( -1, GT_ItemTextures.SET_NONE , 0 , 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, false, false, 3, 1, 1, Dyes.dyeOrange ), Fluorite ( -1, GT_ItemTextures.SET_NONE , 1 |8 , 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, false, false, 3, 1, 1, Dyes.dyeGreen ), + // TODO remove this shit FoolsRuby ( 512, GT_ItemTextures.SET_RUBY , 1 |4|8 , 255, 100, 100, 127, 0, 0, 0, 0, 0, 0, false, true, 3, 1, 1, Dyes.dyeRed ), Force ( 521, GT_ItemTextures.SET_DIAMOND , 1|2|4|8 |64|128 , 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, false, false, 3, 1, 1, Dyes.dyeYellow ), Forcicium ( 518, GT_ItemTextures.SET_DIAMOND , 1 |4|8|16 , 50, 50, 70, 0, 0, 0, 0, 0, 0, 0, false, false, 3, 1, 1, Dyes.dyeGreen ), diff --git a/src/main/java/gregtechmod/api/metatileentity/implementations/BaseMultiFluidWorkable.java b/src/main/java/gregtechmod/api/metatileentity/implementations/BaseMultiFluidWorkable.java index dca57c7..2fcee8c 100644 --- a/src/main/java/gregtechmod/api/metatileentity/implementations/BaseMultiFluidWorkable.java +++ b/src/main/java/gregtechmod/api/metatileentity/implementations/BaseMultiFluidWorkable.java @@ -2,6 +2,7 @@ package gregtechmod.api.metatileentity.implementations; import java.util.List; +import gregtechmod.api.recipe.Recipe; import gregtechmod.api.recipe.RecipeLogic; import gregtechmod.api.recipe.RecipeMap; import gregtechmod.api.util.GT_Utility; @@ -41,6 +42,11 @@ public abstract class BaseMultiFluidWorkable extends BaseMultiWorkable { @Override // Fuck this shit, called before i init fluid IO protected void initRecipeLogic(RecipeMap map) {} + @Override + public boolean spaceForOutput(Recipe recipe) { + return super.spaceForOutput(recipe); // TODO FIX FLUIDS CHECK! + } + @Override public void saveNBTData(NBTTagCompound aNBT) { super.saveNBTData(aNBT); diff --git a/src/main/java/gregtechmod/api/metatileentity/implementations/BasicFluidWorkable.java b/src/main/java/gregtechmod/api/metatileentity/implementations/BasicFluidWorkable.java index 792c4c8..f343dcd 100644 --- a/src/main/java/gregtechmod/api/metatileentity/implementations/BasicFluidWorkable.java +++ b/src/main/java/gregtechmod/api/metatileentity/implementations/BasicFluidWorkable.java @@ -99,7 +99,7 @@ public abstract class BasicFluidWorkable extends GT_MetaTileEntity_BasicTank imp } } - @Override // TODO did not check for fluid output slots, not needed yet + @Override public boolean spaceForOutput(Recipe recipe) { List outputSlots = this.getOutputItems(); List allOutputs = recipe.getAllOutputs(); @@ -123,7 +123,7 @@ public abstract class BasicFluidWorkable extends GT_MetaTileEntity_BasicTank imp } for (FluidStack fluid : recipe.getFluidOutputs()) { - int amount = this.fill(fluid.copy(), false); + int amount = this.fill(fluid.copy(), false); // TODO FIX FLUID CHECK! if (amount < fluid.amount) { return false; } diff --git a/src/main/java/gregtechmod/api/metatileentity/implementations/MTEWorkableMultiblock.java b/src/main/java/gregtechmod/api/metatileentity/implementations/MTEWorkableMultiblock.java index aeea40f..857c801 100644 --- a/src/main/java/gregtechmod/api/metatileentity/implementations/MTEWorkableMultiblock.java +++ b/src/main/java/gregtechmod/api/metatileentity/implementations/MTEWorkableMultiblock.java @@ -104,7 +104,7 @@ public abstract class MTEWorkableMultiblock extends MetaTileEntityMultiblock imp } } - for (FluidStack fluid : recipe.getFluidOutputs()) { + for (FluidStack fluid : recipe.getFluidOutputs()) { // TODO fix this fluid check! int amount = this.fill(fluid.copy(), false); if (amount < fluid.amount) { return false; diff --git a/src/main/java/gregtechmod/api/metatileentity/implementations/MetaTileEntityMultiblock.java b/src/main/java/gregtechmod/api/metatileentity/implementations/MetaTileEntityMultiblock.java index 0de910d..de8402c 100644 --- a/src/main/java/gregtechmod/api/metatileentity/implementations/MetaTileEntityMultiblock.java +++ b/src/main/java/gregtechmod/api/metatileentity/implementations/MetaTileEntityMultiblock.java @@ -544,7 +544,7 @@ public abstract class MetaTileEntityMultiblock extends MetaTileEntity { } } - return false; + return getBaseMetaTileEntity().hasInventoryBeenModified(); } public boolean addEnergyOutput(int aEU) { diff --git a/src/main/java/gregtechmod/api/recipe/RecipeLogic.java b/src/main/java/gregtechmod/api/recipe/RecipeLogic.java index e683bf9..fab02e6 100644 --- a/src/main/java/gregtechmod/api/recipe/RecipeLogic.java +++ b/src/main/java/gregtechmod/api/recipe/RecipeLogic.java @@ -8,7 +8,6 @@ import java.util.function.Predicate; import gregtechmod.api.interfaces.IGregTechTileEntity; import gregtechmod.api.interfaces.IRecipeWorkable; -import gregtechmod.api.metatileentity.MetaTileEntity; import gregtechmod.api.util.GT_Log; import gregtechmod.api.util.GT_Utility; @@ -27,6 +26,7 @@ public class RecipeLogic { public WeakReference metaTileEntity; public final RecipeMap recipeMap; + public int MAX_FLUID_STACK = 16_000; public int batterySlot = 5; /** Custom fucntion called every recipe progress time update, if you want to speed up machine because of some factor, just increase the value up */ protected IntUnaryOperator progressTimeManipulator = i -> i; @@ -96,6 +96,8 @@ public class RecipeLogic { wasNoEnergy = true; triggerMachine(false); } + } else { + previousRecipe = null; } } } @@ -213,11 +215,20 @@ public class RecipeLogic { GT_Log.log.error("Output overflow detected! Left items: " + amount + " for output stack: " + recipeOut); } - MetaTileEntity mte = (MetaTileEntity) getMachine(); + List fluidOutputs = getMachine().getFluidOutputs(); for (FluidStack fluid : recipe.getFluidOutputs()) { - int amount = mte.fill(fluid.copy(), true); - if (amount > 0) - GT_Log.log.error("Output overflow detected! Left fluid: " + amount + " for output stack: " + fluid); + int amount = fluid.amount; + for (int i = 0; amount > 0 && i < fluidOutputs.size(); i++) { + FluidStack stackInSlot = fluidOutputs.get(i); + if (GT_Utility.isFluidStackValid(stackInSlot) && stackInSlot.isFluidEqual(fluid)) { + int tmp = Math.min(MAX_FLUID_STACK, stackInSlot.amount + fluid.amount); + amount -= tmp - stackInSlot.amount; + stackInSlot.amount = tmp; + } else if (stackInSlot == null) { + fluidOutputs.set(i, fluid.copy()); + amount = 0; + } + } } stuttering = false; diff --git a/src/main/java/gregtechmod/api/util/GT_Utility.java b/src/main/java/gregtechmod/api/util/GT_Utility.java index b3e2a8c..bec3dfb 100644 --- a/src/main/java/gregtechmod/api/util/GT_Utility.java +++ b/src/main/java/gregtechmod/api/util/GT_Utility.java @@ -1002,6 +1002,12 @@ public class GT_Utility { return null; } + public static FluidStack copy(FluidStack fluid, int amount) { + fluid = fluid.copy(); + fluid.amount = amount; + return fluid; + } + public static List copy(Collection stacks) { return stacks.stream().map(ItemStack::copy).collect(Collectors.toList()); } diff --git a/src/main/java/gregtechmod/common/recipe/RecipeMaps.java b/src/main/java/gregtechmod/common/recipe/RecipeMaps.java index 370621f..14d669d 100644 --- a/src/main/java/gregtechmod/common/recipe/RecipeMaps.java +++ b/src/main/java/gregtechmod/common/recipe/RecipeMaps.java @@ -18,7 +18,7 @@ import gregtechmod.common.recipe.maps.ScannerRecipeMap; * */ public class RecipeMaps { - public static final RecipeMap FUSION_REACTOR = new RecipeMap<>(0, 0, 0, 0, 2, 2, 1, 1, new SimpleRecipeFactory()); + public static final RecipeMap FUSION_REACTOR = new RecipeMap<>(0, 2, 0, 1, 0, 2, 0, 1, new SimpleRecipeFactory()); public static final RecipeMap CENTRIFUGE = new RecipeMap<>(0, 2, 1, 4, 0, 1, 0, 0, new SimpleRecipeFactory()); public static final RecipeMap ELECTROLYZER = new RecipeMap<>(0, 2, 1, 4, 0, 1, 0, 0, new SimpleRecipeFactory()); public static final RecipeMap GRINDER = new RecipeMap<>(1, 2, 1, 4, 0, 1, 0, 0, new SimpleRecipeFactory()); diff --git a/src/main/java/gregtechmod/common/recipe/maps/IC2RecipeMap.java b/src/main/java/gregtechmod/common/recipe/maps/IC2RecipeMap.java index 3e18396..fdcce69 100644 --- a/src/main/java/gregtechmod/common/recipe/maps/IC2RecipeMap.java +++ b/src/main/java/gregtechmod/common/recipe/maps/IC2RecipeMap.java @@ -25,7 +25,7 @@ public class IC2RecipeMap extends DummyRecipeMap { @Override public Recipe findRecipe(List input, List fluidInputs) { - for (ItemStack in : input) { // TODO find items + for (ItemStack in : input) { if (GT_Utility.isStackValid(in)) { ItemStack inValid = in.copy(); List results = recipeGetter.apply(inValid); diff --git a/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java b/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java index a1cec21..8c331aa 100644 --- a/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java +++ b/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java @@ -2,14 +2,24 @@ package gregtechmod.common.tileentities.machines.multi; import gregtechmod.api.GregTech_API; import gregtechmod.api.interfaces.IGregTechTileEntity; +import gregtechmod.api.interfaces.IRecipeWorkable; import gregtechmod.api.metatileentity.MetaTileEntity; +import gregtechmod.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank; +import gregtechmod.api.metatileentity.implementations.MetaTileEntityMultiblock; import gregtechmod.api.recipe.Recipe; +import gregtechmod.api.recipe.RecipeLogic; +import gregtechmod.api.util.GT_Log; import gregtechmod.api.util.GT_Utility; import gregtechmod.api.util.InfoBuilder; +import gregtechmod.api.util.InventoryHandler; +import gregtechmod.api.util.InventoryHandlerList; +import gregtechmod.api.util.ListAdapter; +import gregtechmod.api.util.WeakList; +import gregtechmod.common.recipe.RecipeMaps; -import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -18,23 +28,32 @@ import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidStack; -public class GT_MetaTileEntity_FusionComputer extends MetaTileEntity { +public class GT_MetaTileEntity_FusionComputer extends MetaTileEntity implements IRecipeWorkable { - public int mProgresstime = 0, mMaxProgresstime = 0, mEUt = 0, mUpdate = 0, mStartUpCheck = 100; - private ItemStack mOutputItem1; - public boolean mMachine = true; + /* STRUCTURE STATUS */ + protected boolean structComplete = false; + protected boolean needCheckStruct = true; - private ArrayList mPlasmaExtractors = new ArrayList(); - private ArrayList mEnergyInjectors = new ArrayList(); - private ArrayList mPrimaryInjectors = new ArrayList(); - private ArrayList mSecondaryInjectors = new ArrayList(); + protected int MAX_FLUID_STACK = 16_000; + + protected RecipeLogic recipeLogic; + + private WeakList mPlasmaExtractors = new WeakList<>(); + private WeakList mPlasmaInjectors = new WeakList<>(); + private WeakList mEnergyInjectors = new WeakList<>(); + + protected List fluidInputs = null; + protected List fluidOutputs = null; + protected List itemInputs = null; + protected List itemOutputs = null; public GT_MetaTileEntity_FusionComputer(int aID, String mName) { super(aID, mName); + recipeLogic = new FusionRecipeLogic(); } public GT_MetaTileEntity_FusionComputer() { - + recipeLogic = new FusionRecipeLogic(); } @Override public boolean isSimpleMachine() {return false;} @@ -45,8 +64,6 @@ public class GT_MetaTileEntity_FusionComputer extends MetaTileEntity { @Override public int getEUVar() {return getStoredEU();} @Override public void onRightclick(EntityPlayer aPlayer) {getBaseMetaTileEntity().openGUI(aPlayer, 143);} @Override public boolean isAccessAllowed(EntityPlayer aPlayer) {return true;} - @Override public int getProgresstime() {return mProgresstime;} - @Override public int maxProgresstime() {return mMaxProgresstime;} @Override public int increaseProgress(int aProgress) {return aProgress;} @Override @@ -59,135 +76,91 @@ public class GT_MetaTileEntity_FusionComputer extends MetaTileEntity { return aSide != getBaseMetaTileEntity().getFrontFacing(); } - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setInteger("mEUt", mEUt); - aNBT.setInteger("mProgresstime", mProgresstime); - aNBT.setInteger("mMaxProgresstime", mMaxProgresstime); - - if (mOutputItem1 != null) { - NBTTagCompound tNBT = new NBTTagCompound(); - mOutputItem1.writeToNBT(tNBT); - aNBT.setTag("mOutputItem1", tNBT); - } - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - mUpdate = 100; - mEUt = aNBT.getInteger("mEUt"); - mProgresstime = aNBT.getInteger("mProgresstime"); - mMaxProgresstime = aNBT.getInteger("mMaxProgresstime"); - - NBTTagCompound tNBT1 = (NBTTagCompound)aNBT.getTag("mOutputItem1"); - if (tNBT1 != null) { - mOutputItem1 = GT_Utility.loadItem(tNBT1); - } - } - private void setComputerOf(MetaTileEntity aMetaTileEntity, boolean setreset) { if (aMetaTileEntity != null) { if (aMetaTileEntity instanceof GT_MetaTileEntity_FusionInjector) { - ((GT_MetaTileEntity_FusionInjector)aMetaTileEntity).mFusionComputer = setreset?getBaseMetaTileEntity():null; + ((GT_MetaTileEntity_FusionInjector)aMetaTileEntity).setComputer(setreset?getBaseMetaTileEntity():null); if (setreset) - if (aMetaTileEntity.getBaseMetaTileEntity().getYCoord() > getBaseMetaTileEntity().getYCoord()) - mPrimaryInjectors.add(aMetaTileEntity.getBaseMetaTileEntity()); - else - mSecondaryInjectors.add(aMetaTileEntity.getBaseMetaTileEntity()); + mPlasmaInjectors.add((GT_MetaTileEntity_FusionInjector)aMetaTileEntity); } if (aMetaTileEntity instanceof GT_MetaTileEntity_FusionEnergyInjector) { - ((GT_MetaTileEntity_FusionEnergyInjector)aMetaTileEntity).mFusionComputer = setreset?getBaseMetaTileEntity():null; + ((GT_MetaTileEntity_FusionEnergyInjector)aMetaTileEntity).setComputer(setreset?getBaseMetaTileEntity():null); if (setreset) mEnergyInjectors.add(aMetaTileEntity.getBaseMetaTileEntity()); } if (aMetaTileEntity instanceof GT_MetaTileEntity_FusionExtractor) { - ((GT_MetaTileEntity_FusionExtractor)aMetaTileEntity).mFusionComputer = setreset?getBaseMetaTileEntity():null; + ((GT_MetaTileEntity_FusionExtractor)aMetaTileEntity).setComputer(setreset?getBaseMetaTileEntity():null); if (setreset) - mPlasmaExtractors.add(aMetaTileEntity.getBaseMetaTileEntity()); + mPlasmaExtractors.add((GT_MetaTileEntity_FusionExtractor)aMetaTileEntity); } } } private void reset() { - for (IGregTechTileEntity tTileEntity : mPlasmaExtractors ) setComputerOf((MetaTileEntity)tTileEntity.getMetaTileEntity(), false); - for (IGregTechTileEntity tTileEntity : mPrimaryInjectors ) setComputerOf((MetaTileEntity)tTileEntity.getMetaTileEntity(), false); - for (IGregTechTileEntity tTileEntity : mSecondaryInjectors) setComputerOf((MetaTileEntity)tTileEntity.getMetaTileEntity(), false); + for (GT_MetaTileEntity_BasicTank tTileEntity : mPlasmaExtractors ) setComputerOf(tTileEntity, false); + for (GT_MetaTileEntity_BasicTank tTileEntity : mPlasmaInjectors ) setComputerOf(tTileEntity, false); for (IGregTechTileEntity tTileEntity : mEnergyInjectors ) setComputerOf((MetaTileEntity)tTileEntity.getMetaTileEntity(), false); - mPlasmaExtractors = new ArrayList(); - mPrimaryInjectors = new ArrayList(); - mSecondaryInjectors = new ArrayList(); - mEnergyInjectors = new ArrayList(); + mPlasmaExtractors.clear(); + mPlasmaInjectors.clear(); + mEnergyInjectors.clear(); + + fluidInputs = null; + fluidOutputs = null; + itemInputs = null; + itemOutputs = null; } @Override public void onMachineBlockUpdate() { - mUpdate = 100; + needCheckStruct = true; } @Override public void onPostTick() { if (getBaseMetaTileEntity().isServerSide()) { - if (mUpdate--==0 || mStartUpCheck==0) { - mMachine = checkMachine(); - } - if (mStartUpCheck-- < 0) { - if (mMaxProgresstime > 0) { - if (mMachine && decreaseStoredEU(-mEUt)) { - if (++mProgresstime>mMaxProgresstime) { - addOutput(mOutputItem1); - mOutputItem1 = null; - mProgresstime = 0; - mMaxProgresstime = 0; - if (getBaseMetaTileEntity().isAllowedToWork()) checkRecipe(); - } - } else { - addOutput(mOutputItem1); - mOutputItem1 = null; - mProgresstime = 0; - mMaxProgresstime = 0; - } - } else { - if (getBaseMetaTileEntity().isAllowedToWork()) checkRecipe(); - } - getBaseMetaTileEntity().setActive(mMaxProgresstime > 0); + if (getBaseMetaTileEntity().isServerSide()) { + if (needCheckStruct) { + reset(); + structComplete = checkMachine(); + needCheckStruct = false; + + if (structComplete) { + fluidInputs = new InventoryHandlerList<>(mPlasmaInjectors.stream().map(extr -> new ListAdapter<>(extr.mFluid)).collect(Collectors.toList())); + fluidOutputs = new InventoryHandlerList<>(mPlasmaExtractors.stream().map(extr -> new ListAdapter<>(extr.mFluid)).collect(Collectors.toList())); + itemInputs = new InventoryHandlerList<>(mPlasmaInjectors.stream().map(extr -> new ListAdapter<>(extr.mInventory, extr.getInputSlot(), extr.getInputSlot())).collect(Collectors.toList())); + itemOutputs = new InventoryHandlerList<>(mPlasmaExtractors.stream().map(extr -> new ListAdapter<>(extr.mInventory, extr.getOutputSlot(), extr.getOutputSlot())).collect(Collectors.toList())); + } + } else if (!structComplete && getBaseMetaTileEntity().getTimer() % 600 == 0) { + needCheckStruct = true; + } + + if (structComplete) { + recipeLogic.update(); + } else recipeLogic.stop(); } } } - private boolean checkRecipe() { - if (!mMachine) return false; - ItemStack input1 = getPrimaryInput(); - ItemStack input2 = getSecondaryInput(); - Recipe tRecipe = Recipe.findEqualRecipe(false, false, Recipe.sFusionRecipes, input1, input2); - if (tRecipe != null && consumeInput(tRecipe.mInputs[0], tRecipe.mInputs[1], getBaseMetaTileEntity().isActive()?0:tRecipe.mStartEU)) { - mMaxProgresstime = tRecipe.mDuration; - mEUt = tRecipe.mEUt; - mOutputItem1 = GT_Utility.copy(tRecipe.getOutput(0)); - return true; - } - return false; - } - - private ItemStack getPrimaryInput() { - for (IGregTechTileEntity tTileEntity : mPrimaryInjectors) { - if (tTileEntity.getMetaTileEntity() != null && tTileEntity.getMetaTileEntity() instanceof GT_MetaTileEntity_FusionInjector) { - ItemStack rStack = ((GT_MetaTileEntity_FusionInjector)tTileEntity.getMetaTileEntity()).getMaterial(); - if (rStack != null) return rStack; - } - } - return null; - } - - private ItemStack getSecondaryInput() { - for (IGregTechTileEntity tTileEntity : mSecondaryInjectors) { - if (tTileEntity.getMetaTileEntity() != null && tTileEntity.getMetaTileEntity() instanceof GT_MetaTileEntity_FusionInjector) { - ItemStack rStack = ((GT_MetaTileEntity_FusionInjector)tTileEntity.getMetaTileEntity()).getMaterial(); - if (rStack != null) return rStack; - } - } - return null; - } + public boolean hasInventoryBeenModified() { + for (GT_MetaTileEntity_BasicTank hatch : mPlasmaInjectors) { + if (MetaTileEntityMultiblock.isValidMetaTileEntity(hatch)) { + if (hatch.getBaseMetaTileEntity().hasInventoryBeenModified()) { + return true; + } + } + } + + for (GT_MetaTileEntity_BasicTank hatch : mPlasmaExtractors) { + if (MetaTileEntityMultiblock.isValidMetaTileEntity(hatch)) { + if (hatch.getBaseMetaTileEntity().hasInventoryBeenModified()) { + return true; + } + } + } + + return getBaseMetaTileEntity().hasInventoryBeenModified(); + } private int getStoredEU() { int rEU = 0; @@ -211,73 +184,6 @@ public class GT_MetaTileEntity_FusionComputer extends MetaTileEntity { return false; } - private boolean consumeInput(ItemStack aInput1, ItemStack aInput2, int aEU) { - if (aInput1 != null && aInput2 != null) { - if (aEU <= 0 || getStoredEU() >= aEU) { - for (IGregTechTileEntity tTileEntity : mPrimaryInjectors) { - if (tTileEntity.getMetaTileEntity() != null && tTileEntity.getMetaTileEntity() instanceof GT_MetaTileEntity_FusionInjector) { - ItemStack tStack = ((GT_MetaTileEntity_FusionInjector)tTileEntity.getMetaTileEntity()).getMaterial(); - if (tStack != null) { - if (GT_Utility.areStacksEqual(tStack, aInput1) && tStack.stackSize >= aInput1.stackSize) { - for (IGregTechTileEntity tTileEntity2 : mSecondaryInjectors) { - if (tTileEntity2.getMetaTileEntity() != null && tTileEntity2.getMetaTileEntity() instanceof GT_MetaTileEntity_FusionInjector) { - if (((GT_MetaTileEntity_FusionInjector)tTileEntity2.getMetaTileEntity()).consumeMaterial(aInput2)) { - return decreaseStoredEU(aEU) && ((GT_MetaTileEntity_FusionInjector)tTileEntity.getMetaTileEntity()).consumeMaterial(aInput1); - } - } - } - return false; - } - } - } - } - for (IGregTechTileEntity tTileEntity : mSecondaryInjectors) { - if (tTileEntity.getMetaTileEntity() != null && tTileEntity.getMetaTileEntity() instanceof GT_MetaTileEntity_FusionInjector) { - ItemStack tStack = ((GT_MetaTileEntity_FusionInjector)tTileEntity.getMetaTileEntity()).getMaterial(); - if (tStack != null) { - if (GT_Utility.areStacksEqual(tStack, aInput1) && tStack.stackSize >= aInput1.stackSize) { - for (IGregTechTileEntity tTileEntity2 : mPrimaryInjectors) { - if (tTileEntity2.getMetaTileEntity() != null && tTileEntity2.getMetaTileEntity() instanceof GT_MetaTileEntity_FusionInjector) { - if (((GT_MetaTileEntity_FusionInjector)tTileEntity2.getMetaTileEntity()).consumeMaterial(aInput2)) { - return decreaseStoredEU(aEU) && ((GT_MetaTileEntity_FusionInjector)tTileEntity.getMetaTileEntity()).consumeMaterial(aInput1); - } - } - } - return false; - } - } - } - } - } - } - return false; - } - - private void addOutput(ItemStack aOutput) { - if (aOutput == null) return; - FluidStack tLiquid = GT_Utility.getFluidForFilledItem(aOutput); - if (tLiquid == null) { - for (IGregTechTileEntity tTileEntity : mPlasmaExtractors) { - ItemStack tStack = tTileEntity.getStackInSlot(1); - if (tStack == null) { - tTileEntity.setInventorySlotContents(1, GT_Utility.copy(aOutput)); - return; - } - if (GT_Utility.areStacksEqual(tStack, aOutput) && tStack.stackSize + aOutput.stackSize <= tStack.getMaxStackSize()) { - tStack.stackSize+=aOutput.stackSize; - return; - } - } - } else { - for (IGregTechTileEntity tTileEntity : mPlasmaExtractors) { - if (((MetaTileEntity)tTileEntity.getMetaTileEntity()).fill(tLiquid, false) == tLiquid.amount) { - ((MetaTileEntity)tTileEntity.getMetaTileEntity()).fill(tLiquid, true); - return; - } - } - } - } - @Override public int getTextureIndex(byte aSide, byte aFacing, boolean aActive, boolean aRedstone) { if (aSide != aFacing) return aActive?20:19; @@ -287,9 +193,10 @@ public class GT_MetaTileEntity_FusionComputer extends MetaTileEntity { @Override public Map> getInfoData() { return InfoBuilder.create() - .newKey("sensor.progress.percentage", mProgresstime * 100.0D / mMaxProgresstime) - .newKey("sensor.progress.secs", mProgresstime / 20) - .newKey("sensor.progress.secs", mMaxProgresstime / 20) + .newKey("sensor.progress.percentage", recipeLogic.getDisplayProgress() * 100.0D / recipeLogic.getDisplayMaxProgress()) + .newKey("sensor.progress.secs", recipeLogic.getDisplayProgress() / 20) + .newKey("sensor.progress.secs.1", recipeLogic.getDisplayMaxProgress() / 20) + .newKey("nei.extras.eu_total", GT_Utility.parseNumberToString(getStoredEU())) .build(); } @@ -555,4 +462,210 @@ public class GT_MetaTileEntity_FusionComputer extends MetaTileEntity { if (tObject == null || !(tObject instanceof MetaTileEntity)) return null; return (MetaTileEntity)tObject; } + + @Override + public void startProcess() {} + + @Override + public void endProcess() {} + + @Override + public void stutterProcess() {} + + @Override + public boolean allowToCheckRecipe() { + return true; + } + + @Override + public boolean spaceForOutput(Recipe recipe) { + for (FluidStack fluid : recipe.getFluidOutputs()) { + int amount = fluid.amount; + for (int i = 0; amount > 0 && i < fluidOutputs.size(); i++) { + FluidStack stackInSlot = fluidOutputs.get(i); + if (GT_Utility.isFluidStackValid(stackInSlot) && stackInSlot.isFluidEqual(fluid)) { + int tmp = Math.min(MAX_FLUID_STACK, stackInSlot.amount + fluid.amount); + amount -= tmp - stackInSlot.amount; + } else if (stackInSlot == null) amount = 0; + } + + if (amount > 0) // Could not work fine, need check + return false; + } + + return true; + } + + @Override + public List getInputItems() { + if (structComplete && itemInputs != null) { + return itemInputs; + } + + return new InventoryHandler<>(2); + } + + @Override + public List getOutputItems() { + if (structComplete && itemOutputs != null) { + return itemOutputs; + } + + return new InventoryHandler<>(1); + } + + @Override + public List getFluidInputs() { + if (structComplete && fluidInputs != null) { + return fluidInputs; + } + + return new InventoryHandler<>(2); + } + + @Override + public List getFluidOutputs() { + if (structComplete && fluidOutputs != null) { + return fluidOutputs; + } + + return new InventoryHandler<>(1); + } + + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + recipeLogic.saveToNBT(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + recipeLogic.loadFromNBT(aNBT); + } + + private class FusionRecipeLogic extends RecipeLogic { + + private boolean firstStart = true; + + protected FusionRecipeLogic() { + super(RecipeMaps.FUSION_REACTOR, GT_MetaTileEntity_FusionComputer.this); + } + + @Override + public boolean update() { + boolean success = false; + IGregTechTileEntity base = getMachine().getBaseMetaTileEntity(); + GT_MetaTileEntity_FusionComputer machine = (GT_MetaTileEntity_FusionComputer)getMachine(); + overclockersCount = base.getOverclockerUpgradeCount(); + + if (base.isAllowedToWork()) { + if (progressTime > 0) { + int tmp = progressTime; + success = updateRecipeProgress(); + if (tmp == 0 && !success) { + throw new IllegalStateException(); + } + } + + if (progressTime == 0) { + if (machine.hasInventoryBeenModified() || base.hasWorkJustBeenEnabled() || success || base.getTimer() % 600 == 0 || wasNoEnergy) { + if (machine.getStoredEU() >= machine.getMinimumStoredEU() - 100) { + trySerachRecipe(); + wasNoEnergy = false; + } else { + previousRecipe = null; + wasNoEnergy = true; + triggerMachine(false); + } + } else { + previousRecipe = null; + } + } + } + + return success; + } + + @Override + protected boolean updateRecipeProgress() { + if (((GT_MetaTileEntity_FusionComputer)getMachine()).decreaseStoredEU(EUt)) { + if ((progressTime += progressTimeManipulator.applyAsInt((int)Math.pow(2, overclockersCount))) >= maxProgressTime) { + progressTime = 0; + maxProgressTime = 0; + EUt = 0; + + endRecipe(previousRecipe); + getMachine().endProcess(); + return true; + } + } else stop(); + + return false; + } + + @Override + protected void trySerachRecipe() { + if (getMachine().allowToCheckRecipe()) { + if (previousRecipe != null) { + if (match(previousRecipe)) { + startRecipe(previousRecipe); + } else { + previousRecipe = null; + triggerMachine(false); + } + } else { + firstStart = true; + Recipe resRec = findRecipe(); + if (resRec != null) + startRecipe(resRec); + firstStart = false; + } + } + } + + + @Override + protected void startRecipe(Recipe recipe) { + if (getMachine().spaceForOutput(recipe) && firstStart ? ((GT_MetaTileEntity_FusionComputer)getMachine()).decreaseStoredEU(recipe.getEUtoStart()) : true) { + previousRecipe = recipe; + maxProgressTime = recipe.getDuration(); + progressTime = 1; + EUt = recipe.getEUt(); + if (consumeInputs(recipe)) { + triggerMachine(true); + getMachine().startProcess(); + } else { + GT_Log.log.catching(new IllegalStateException("Error state detected! RecipeMap passed recipe, but it's not matching! Report about this!!!")); + EUt = 0; + progressTime = 0; + maxProgressTime = 0; + previousRecipe = null; + } + + } else stop(); + } + + @Override + public void stop() { + super.stop(); + getMachine().getBaseMetaTileEntity().disableWorking(); + triggerMachine(false); + firstStart = true; + } + + @Override + public void saveToNBT(NBTTagCompound data) { + super.saveToNBT(data); + NBTTagCompound data1 = data.getCompoundTag("RecipeLogic"); + data1.setBoolean("firstStart", firstStart); + data.setTag("RecipeLogic", data1); + } + + @Override + public void loadFromNBT(NBTTagCompound data) { + super.loadFromNBT(data); + NBTTagCompound data1 = data.getCompoundTag("RecipeLogic"); + firstStart = data1.getBoolean("firstStart"); + } + } } diff --git a/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_FusionEnergyInjector.java b/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_FusionEnergyInjector.java index 20a3c47..8279956 100644 --- a/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_FusionEnergyInjector.java +++ b/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_FusionEnergyInjector.java @@ -2,54 +2,25 @@ package gregtechmod.common.tileentities.machines.multi; import gregtechmod.api.interfaces.IGregTechTileEntity; import gregtechmod.api.metatileentity.MetaTileEntity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -public class GT_MetaTileEntity_FusionEnergyInjector extends MetaTileEntity { - - public IGregTechTileEntity mFusionComputer; +public class GT_MetaTileEntity_FusionEnergyInjector extends MTEFusionBus { public GT_MetaTileEntity_FusionEnergyInjector(int aID, String mName) { super(aID, mName); } - public GT_MetaTileEntity_FusionEnergyInjector() { - - } + public GT_MetaTileEntity_FusionEnergyInjector() {} - @Override public boolean isSimpleMachine() {return false;} - @Override public boolean isFacingValid(byte aFacing) {return false;} @Override public boolean isEnetInput() {return true;} @Override public boolean isInputFacing(byte aSide) {return true;} @Override public int maxEUInput() {return 8192;} @Override public int maxEUStore() {return 10000000;} - @Override public int maxRFStore() {return maxEUStore();} - @Override public int maxSteamStore() {return maxEUStore();} @Override public int getInvSize() {return 0;} - @Override public boolean isAccessAllowed(EntityPlayer aPlayer) {return true;} - + @Override public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { return new GT_MetaTileEntity_FusionEnergyInjector(); } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - - } - - @Override - public void onPostTick() { - if (getBaseMetaTileEntity().isServerSide()) { - getBaseMetaTileEntity().setActive(mFusionComputer!=null&&mFusionComputer.isActive()); - } - } @Override public int getTextureIndex(byte aSide, byte aFacing, boolean aActive, boolean aRedstone) { @@ -60,14 +31,4 @@ public class GT_MetaTileEntity_FusionEnergyInjector extends MetaTileEntity { public String getDescription() { return "metatileentity.GT_Fusion_Energy.tooltip"; } - - @Override - public boolean allowPullStack(int aIndex, byte aSide, ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(int aIndex, byte aSide, ItemStack aStack) { - return false; - } } diff --git a/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_FusionExtractor.java b/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_FusionExtractor.java index 4ae4ff7..b4f317e 100644 --- a/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_FusionExtractor.java +++ b/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_FusionExtractor.java @@ -1,5 +1,7 @@ package gregtechmod.common.tileentities.machines.multi; +import java.lang.ref.WeakReference; + import gregtechmod.api.interfaces.IGregTechTileEntity; import gregtechmod.api.metatileentity.MetaTileEntity; import gregtechmod.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank; @@ -7,7 +9,7 @@ import net.minecraft.entity.player.EntityPlayer; public class GT_MetaTileEntity_FusionExtractor extends GT_MetaTileEntity_BasicTank { - public IGregTechTileEntity mFusionComputer; + private WeakReference mFusionComputer; public GT_MetaTileEntity_FusionExtractor(int aID, String mName) { super(aID, mName); @@ -35,12 +37,23 @@ public class GT_MetaTileEntity_FusionExtractor extends GT_MetaTileEntity_BasicTa @Override public boolean displaysItemStack() {return true;} @Override public boolean displaysStackSize() {return true;} - @Override + @Override public void onPostTick() { - if (getBaseMetaTileEntity().isServerSide() && getBaseMetaTileEntity().getTimer()%20==0) { - getBaseMetaTileEntity().setActive(mFusionComputer!=null&&mFusionComputer.isActive()); + if (getBaseMetaTileEntity().isServerSide()) { + if (mFusionComputer != null && mFusionComputer.get() != null) { + if (mFusionComputer.get().isInvalidTileEntity()) { + mFusionComputer.clear(); + getBaseMetaTileEntity().setActive(false); + } else if (getBaseMetaTileEntity().isActive() != mFusionComputer.get().isActive()) { + getBaseMetaTileEntity().setActive(!getBaseMetaTileEntity().isActive()); + } + } } } + + public void setComputer(IGregTechTileEntity computer) { + mFusionComputer = new WeakReference<>(computer); + } @Override public int getTextureIndex(byte aSide, byte aFacing, boolean aActive, boolean aRedstone) { diff --git a/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_FusionInjector.java b/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_FusionInjector.java index c68c10d..1f1a5af 100644 --- a/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_FusionInjector.java +++ b/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_FusionInjector.java @@ -1,17 +1,16 @@ package gregtechmod.common.tileentities.machines.multi; -import gregtechmod.api.enums.GT_Items; +import java.lang.ref.WeakReference; + import gregtechmod.api.interfaces.IGregTechTileEntity; import gregtechmod.api.metatileentity.MetaTileEntity; import gregtechmod.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank; -import gregtechmod.api.util.GT_ModHandler; -import gregtechmod.api.util.GT_Utility; + import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; public class GT_MetaTileEntity_FusionInjector extends GT_MetaTileEntity_BasicTank { - public IGregTechTileEntity mFusionComputer; + private WeakReference mFusionComputer; public GT_MetaTileEntity_FusionInjector(int aID, String mName) { super(aID, mName); @@ -41,41 +40,20 @@ public class GT_MetaTileEntity_FusionInjector extends GT_MetaTileEntity_BasicTan @Override public void onPostTick() { - if (getBaseMetaTileEntity().isServerSide() && getBaseMetaTileEntity().getTimer()%20==0) { - getBaseMetaTileEntity().setActive(mFusionComputer!=null&&mFusionComputer.isActive()); - } - } - - public ItemStack getMaterial() { - if (mInventory[getInputSlot()] == null) { - ItemStack tStack = GT_Utility.fillFluidContainer(mFluid[0], GT_Items.Cell_Empty.get(1)); - if (tStack == null) return null; - tStack.stackSize = mFluid[0].amount / GT_Utility.getFluidForFilledItem(tStack).amount; - return tStack; - } - return mInventory[getInputSlot()]; - } - - public boolean consumeMaterial(ItemStack aStack) { - if (aStack == null) return false; - if (mFluid[0] == null || !GT_Utility.containsFluid(aStack, mFluid[0]) || GT_Utility.getFluidForFilledItem(aStack).amount * aStack.stackSize > mFluid[0].amount) { - if (mInventory[0] != null && GT_Utility.areStacksEqual(mInventory[0], aStack) && mInventory[0].stackSize >= aStack.stackSize) { - ItemStack tOutputCells = GT_ModHandler.getEmptyCell(GT_ModHandler.getCapsuleCellContainerCount(aStack)); - if (tOutputCells != null && tOutputCells.stackSize > 0) { - if (mInventory[1] == null) { - mInventory[1] = tOutputCells; - } else if (GT_Utility.areStacksEqual(mInventory[1], tOutputCells)) { - mInventory[1].stackSize = Math.min(mInventory[1].getMaxStackSize(), mInventory[1].stackSize + tOutputCells.stackSize); - } + if (getBaseMetaTileEntity().isServerSide()) { + if (mFusionComputer != null && mFusionComputer.get() != null) { + if (mFusionComputer.get().isInvalidTileEntity()) { + mFusionComputer.clear(); + getBaseMetaTileEntity().setActive(false); + } else if (getBaseMetaTileEntity().isActive() != mFusionComputer.get().isActive()) { + getBaseMetaTileEntity().setActive(!getBaseMetaTileEntity().isActive()); } - getBaseMetaTileEntity().decrStackSize(0, aStack.stackSize); - return true; } - } else { - mFluid[0].amount -= (GT_Utility.getFluidForFilledItem(aStack).amount * aStack.stackSize); - return true; } - return false; + } + + public void setComputer(IGregTechTileEntity computer) { + mFusionComputer = new WeakReference<>(computer); } @Override diff --git a/src/main/java/gregtechmod/common/tileentities/machines/multi/MTEFusionBus.java b/src/main/java/gregtechmod/common/tileentities/machines/multi/MTEFusionBus.java new file mode 100644 index 0000000..4607956 --- /dev/null +++ b/src/main/java/gregtechmod/common/tileentities/machines/multi/MTEFusionBus.java @@ -0,0 +1,52 @@ +package gregtechmod.common.tileentities.machines.multi; + +import java.lang.ref.WeakReference; + +import gregtechmod.api.interfaces.IGregTechTileEntity; +import gregtechmod.api.metatileentity.MetaTileEntity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +/** + * @author TheDarkDnKTv + * + */ +public abstract class MTEFusionBus extends MetaTileEntity { + + private WeakReference mFusionComputer; + + public MTEFusionBus(int aID, String aBasicName) { + super(aID, aBasicName); + } + + public MTEFusionBus() {} + + @Override public boolean isSimpleMachine() {return false;} + @Override public boolean isAccessAllowed(EntityPlayer aPlayer) {return true;} + @Override public boolean isFacingValid(byte aFacing) {return false;} + @Override public int maxRFStore() {return maxEUStore();} + @Override public int maxSteamStore() {return maxEUStore();} + @Override public void saveNBTData(NBTTagCompound aNBT) {} + @Override public void loadNBTData(NBTTagCompound aNBT) {} + @Override public boolean allowPullStack(int aIndex, byte aSide, ItemStack aStack) { return false; } + @Override public boolean allowPutStack(int aIndex, byte aSide, ItemStack aStack) { return false; } + + @Override + public void onPostTick() { + if (getBaseMetaTileEntity().isServerSide()) { + if (mFusionComputer != null && mFusionComputer.get() != null) { + if (mFusionComputer.get().isInvalidTileEntity()) { + mFusionComputer.clear(); + getBaseMetaTileEntity().setActive(false); + } else if (getBaseMetaTileEntity().isActive() != mFusionComputer.get().isActive()) { + getBaseMetaTileEntity().setActive(!getBaseMetaTileEntity().isActive()); + } + } + } + } + + public void setComputer(IGregTechTileEntity computer) { + mFusionComputer = new WeakReference<>(computer); + } +} diff --git a/src/main/java/gregtechmod/loaders/postload/GT_MachineRecipeLoader.java b/src/main/java/gregtechmod/loaders/postload/GT_MachineRecipeLoader.java index aa39861..5e97ffa 100644 --- a/src/main/java/gregtechmod/loaders/postload/GT_MachineRecipeLoader.java +++ b/src/main/java/gregtechmod/loaders/postload/GT_MachineRecipeLoader.java @@ -158,11 +158,10 @@ public class GT_MachineRecipeLoader implements Runnable RecipeMaps.CANINNING.factory().EUt(1).duration(100).inputs(new ItemStack(Items.lava_bucket), GT_Items.Cell_Empty.get(1L)).outputs(GT_Items.Cell_Lava.get(1L), new ItemStack(Items.bucket, 1)).buildAndRegister(); RecipeMaps.CANINNING.factory().EUt(1).duration(100).inputs(new ItemStack(Items.water_bucket), GT_Items.Cell_Empty.get(1L)).outputs(GT_Items.Cell_Water.get(1L), new ItemStack(Items.bucket, 1)).buildAndRegister(); - //TODO!!! -// RecipeMaps.FUSION_REACTOR.factory().EUt(-4096).startEU(40000000).duration(128).inputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Deuterium, 1L), GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Tritium, 1L)).output(GT_OreDictUnificator.get(OrePrefixes.cellPlasma, Materials.Helium, 1L)).buildAndRegister(); -// RecipeMaps.FUSION_REACTOR.factory().EUt(-2048).startEU(60000000).duration(128).inputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Deuterium, 1L), GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Helium_3, 1L)).output(GT_OreDictUnificator.get(OrePrefixes.cellPlasma, Materials.Helium, 1L)).buildAndRegister(); -// RecipeMaps.FUSION_REACTOR.factory().EUt(-32768).startEU(150000000).duration(512).inputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Lithium, 1L), GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Tungsten, 1L)).output(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iridium, 1L)).buildAndRegister(); -// RecipeMaps.FUSION_REACTOR.factory().EUt(-32768).startEU(100000000).duration(512).inputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Beryllium, 1L), GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Tungsten, 1L)).output(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Platinum, 1L)).buildAndRegister(); + RecipeMaps.FUSION_REACTOR.factory().EUt(4096).startEU(40000000).duration(128).inputs(GT_Utility.copy(Materials.Deuterium.mGas, 1000), GT_Utility.copy(Materials.Tritium.mGas, 1000)).output(GT_Utility.copy(Materials.Helium.mPlasma, 1000)).buildAndRegister(); + RecipeMaps.FUSION_REACTOR.factory().EUt(2048).startEU(60000000).duration(128).inputs(GT_Utility.copy(Materials.Deuterium.mGas, 1000), GT_Utility.copy(Materials.Helium_3.mGas, 1000)).output(GT_Utility.copy(Materials.Helium.mPlasma, 1000)).buildAndRegister(); + RecipeMaps.FUSION_REACTOR.factory().EUt(32768).startEU(150000000).duration(512).inputs(GT_Utility.copy(Materials.Lithium.mFluid, 1000), GT_Utility.copy(Materials.Tungsten.mSolid, 1000)).output(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iridium, 1L)).buildAndRegister(); + RecipeMaps.FUSION_REACTOR.factory().EUt(32768).startEU(100000000).duration(512).inputs(GT_Utility.copy(Materials.Beryllium.mSolid, 1000), GT_Utility.copy(Materials.Tungsten.mSolid, 1000)).output(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Platinum, 1L)).buildAndRegister(); RecipeMaps.IMPLOSION_COMPRESSOR.factory().EUt(1).duration(800).setShaped(true).input(GregTech_API.getGregTechMaterial(4, 1)).input(GT_ModHandler.getIC2Item("industrialTnt", 8)).outputs(GT_OreDictUnificator.get(OrePrefixes.plateAlloy, Materials.Iridium, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DarkAsh, 4L)).buildAndRegister(); RecipeMaps.IMPLOSION_COMPRESSOR.factory().EUt(1).duration(800).setShaped(true).input(GT_Items.IC2_Compressed_Coal_Chunk.get(1)).input(GT_ModHandler.getIC2Item("industrialTnt", 8)).outputs(GT_Items.IC2_Industrial_Diamond.get(1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DarkAsh, 4L)).buildAndRegister();