From 0ec40230ff872ae46c2faa78fb821a77ff1bf2a3 Mon Sep 17 00:00:00 2001 From: TheDarkDnKTv Date: Fri, 26 Feb 2021 21:05:32 +0200 Subject: [PATCH] Fixed most of multiblocks --- .../java/gregtechmod/api/GregTech_API.java | 12 +- .../BaseMultiFluidWorkable.java | 178 +++++++++++++ .../implementations}/BaseMultiWorkable.java | 4 +- .../containers/GT_Container_Grinder.java | 16 +- .../GT_Container_ImplosionCompressor.java | 18 +- .../GT_Container_VacuumFreezer.java | 16 +- .../common/gui/GT_GUIContainer_Grinder.java | 5 +- .../GT_GUIContainer_ImplosionCompressor.java | 3 +- .../gui/GT_GUIContainer_VacuumFreezer.java | 3 +- .../gregtechmod/common/recipe/RecipeMaps.java | 2 +- .../multi/GT_MetaTileEntity_BlastFurnace.java | 1 + .../GT_MetaTileEntity_BronzeBlastFurnace.java | 1 + .../GT_MetaTileEntity_DistillationTower.java | 1 + .../multi/GT_MetaTileEntity_Grinder.java | 241 +----------------- ...GT_MetaTileEntity_ImplosionCompressor.java | 151 +---------- .../multi/GT_MetaTileEntity_Sawmill.java | 61 +---- .../GT_MetaTileEntity_VacuumFreezer.java | 137 +--------- 17 files changed, 248 insertions(+), 602 deletions(-) create mode 100644 src/main/java/gregtechmod/api/metatileentity/implementations/BaseMultiFluidWorkable.java rename src/main/java/gregtechmod/{common/tileentities/machines/multi => api/metatileentity/implementations}/BaseMultiWorkable.java (98%) diff --git a/src/main/java/gregtechmod/api/GregTech_API.java b/src/main/java/gregtechmod/api/GregTech_API.java index 9f01f7c..bfbf24e 100644 --- a/src/main/java/gregtechmod/api/GregTech_API.java +++ b/src/main/java/gregtechmod/api/GregTech_API.java @@ -831,12 +831,12 @@ public class GregTech_API { sDimensionalList.add( 0); sDimensionalList.add( 1); - sSoundList.put( 0, "random.break"); - sSoundList.put( 1, "random.anvil_use"); - sSoundList.put( 2, "random.anvil_break"); - sSoundList.put( 3, "random.click"); - sSoundList.put( 4, "random.fizz"); - sSoundList.put( 5, "random.explode"); + sSoundList.put( 0, "minecraft:random.break"); + sSoundList.put( 1, "minecraft:random.anvil_use"); + sSoundList.put( 2, "minecraft:random.anvil_break"); + sSoundList.put( 3, "minecraft:random.click"); + sSoundList.put( 4, "minecraft:random.fizz"); + sSoundList.put( 5, "minecraft:random.explode"); sSoundList.put(100, GregTech_API.IC2_MOD_ID + ":" + "tools.Wrench"); sSoundList.put(101, GregTech_API.IC2_MOD_ID + ":" + "tools.RubberTrampoline"); diff --git a/src/main/java/gregtechmod/api/metatileentity/implementations/BaseMultiFluidWorkable.java b/src/main/java/gregtechmod/api/metatileentity/implementations/BaseMultiFluidWorkable.java new file mode 100644 index 0000000..28a0dd9 --- /dev/null +++ b/src/main/java/gregtechmod/api/metatileentity/implementations/BaseMultiFluidWorkable.java @@ -0,0 +1,178 @@ +package gregtechmod.api.metatileentity.implementations; + +import java.util.List; + +import gregtechmod.api.recipe.RecipeLogic; +import gregtechmod.api.recipe.RecipeMap; +import gregtechmod.api.util.GT_Utility; +import gregtechmod.api.util.InventoryHandler; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +/** + * @author TheDarkDnKTv + * + */ +public abstract class BaseMultiFluidWorkable extends BaseMultiWorkable { + + protected final List fluidInputs, fluidOutputs; + + public BaseMultiFluidWorkable(int aID, String aBasicName, RecipeMap map, int fluidInputs, int fluidOutputs) { + super(aID, aBasicName, map); + this.fluidInputs = new InventoryHandler<>(fluidInputs); + this.fluidOutputs = new InventoryHandler<>(fluidOutputs); + recipeLogic = new RecipeLogic(map, this) { + @Override protected void triggerMachine(boolean value) {} + }; + } + + public BaseMultiFluidWorkable(RecipeMap map, int fluidInputs, int fluidOutputs) { + super(map); + this.fluidInputs = new InventoryHandler<>(fluidInputs); + this.fluidOutputs = new InventoryHandler<>(fluidOutputs); + recipeLogic = new RecipeLogic(map, this) { + @Override protected void triggerMachine(boolean value) {} + }; + } + + @Override // Fuck this shit, called before i init fluid IO + protected void initRecipeLogic(RecipeMap map) {} + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + if (!fluidInputs.isEmpty()) { + NBTTagCompound data = new NBTTagCompound(); + for (int i = 0; i < fluidInputs.size(); i++) { + FluidStack fluid = fluidInputs.get(i); + NBTTagCompound flTag = fluid == null ? null : fluid.writeToNBT(new NBTTagCompound()); + data.setTag("fluid." + i, flTag); + } + + aNBT.setTag("FluidInputs", data); + } + + if (!fluidOutputs.isEmpty()) { + NBTTagCompound data = new NBTTagCompound(); + for (int i = 0; i < fluidOutputs.size(); i++) { + FluidStack fluid = fluidOutputs.get(i); + NBTTagCompound flTag = fluid == null ? null : fluid.writeToNBT(new NBTTagCompound()); + data.setTag("fluid." + i, flTag); + } + + aNBT.setTag("FluidOutputs", data); + } + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + + if (aNBT.hasKey("FluidInputs")) { + NBTTagCompound data = aNBT.getCompoundTag("FluidInputs"); + for (int i = 0; i < fluidInputs.size(); i++) { + NBTTagCompound fluid = data.hasKey("fluid." + i) ? data.getCompoundTag("fluid." + i) : null; + if (fluid != null) { + fluidInputs.set(i, FluidStack.loadFluidStackFromNBT(fluid)); + } + } + } + + if (aNBT.hasKey("FluidOutputs")) { + NBTTagCompound data = aNBT.getCompoundTag("FluidOutputs"); + for (int i = 0; i < fluidOutputs.size(); i++) { + NBTTagCompound fluid = data.hasKey("fluid." + i) ? data.getCompoundTag("fluid." + i) : null; + if (fluid != null) { + fluidOutputs.set(i, FluidStack.loadFluidStackFromNBT(fluid)); + } + } + } + } + + @Override + public List getFluidInputs() { + return fluidInputs; + } + + @Override + public List getFluidOutputs() { + return fluidOutputs; + } + + @Override + public boolean canFill(ForgeDirection aSide, Fluid aFluid) { + return fluidInputs.isEmpty() || fluidInputs.contains(new FluidStack(aFluid, 0)); + } + + @Override + public boolean canDrain(ForgeDirection aSide, Fluid aFluid) { + return fluidOutputs.contains(new FluidStack(aFluid, 0)); + } + + @Override + public int fill(ForgeDirection aSide, FluidStack resource, boolean doFill) { + if (GT_Utility.isFluidStackValid(resource)) { + for (int i = 0; i < fluidInputs.size(); i++) { + FluidStack stackInSlot = fluidInputs.get(i); + if (!GT_Utility.isFluidStackValid(stackInSlot) || stackInSlot.isFluidEqual(resource)) { + int space = getCapacity() - stackInSlot.amount; + int toFill = resource.amount <= space ? resource.amount : space; + if (doFill) { + stackInSlot.amount += toFill; + // TODO could be dupe, may change resource + } + + return toFill; + } + } + } + + return 0; + } + + @Override + public FluidStack drain(ForgeDirection aSide, FluidStack aFluid, boolean doDrain) { + if (GT_Utility.isFluidStackValid(aFluid)) + for (int i = 0; i < fluidOutputs.size(); i++) { + FluidStack stackInSlot = fluidOutputs.get(i); + if (GT_Utility.isFluidStackValid(stackInSlot) && aFluid.isFluidEqual(stackInSlot)) { + int amount = Math.min(aFluid.amount, stackInSlot.amount); + FluidStack result = stackInSlot.copy(); + result.amount = amount; + if (doDrain) { + if (stackInSlot.amount == amount) { + fluidOutputs.set(i, null); + } else stackInSlot.amount -= amount; + } + + return result; + } + } + + return null; + } + + @Override + public FluidStack drain(ForgeDirection aSide, int maxDrain, boolean doDrain) { + for (int i = 0; i < fluidOutputs.size(); i++) { + FluidStack stackInSlot = fluidOutputs.get(i); + if (GT_Utility.isFluidStackValid(stackInSlot)) { + int amount = Math.min(maxDrain, stackInSlot.amount); + FluidStack result = stackInSlot.copy(); + result.amount = amount; + if (doDrain) { + if (stackInSlot.amount == amount) { + fluidOutputs.set(i, null); + } else stackInSlot.amount -= amount; + } + + return result; + } + } + + return null; + } +} diff --git a/src/main/java/gregtechmod/common/tileentities/machines/multi/BaseMultiWorkable.java b/src/main/java/gregtechmod/api/metatileentity/implementations/BaseMultiWorkable.java similarity index 98% rename from src/main/java/gregtechmod/common/tileentities/machines/multi/BaseMultiWorkable.java rename to src/main/java/gregtechmod/api/metatileentity/implementations/BaseMultiWorkable.java index 46199c1..65ff046 100644 --- a/src/main/java/gregtechmod/common/tileentities/machines/multi/BaseMultiWorkable.java +++ b/src/main/java/gregtechmod/api/metatileentity/implementations/BaseMultiWorkable.java @@ -1,4 +1,4 @@ -package gregtechmod.common.tileentities.machines.multi; +package gregtechmod.api.metatileentity.implementations; import java.util.Collections; import java.util.List; @@ -26,7 +26,7 @@ import net.minecraftforge.fluids.FluidStack; public abstract class BaseMultiWorkable extends MetaTileEntity implements IRecipeWorkable { protected RecipeLogic recipeLogic; - protected boolean needCheckStruct = false; + protected boolean needCheckStruct = true; protected boolean structComplete = false; public BaseMultiWorkable(int aID, String aBasicName, RecipeMap map) { diff --git a/src/main/java/gregtechmod/common/containers/GT_Container_Grinder.java b/src/main/java/gregtechmod/common/containers/GT_Container_Grinder.java index cc20246..7fb16f4 100644 --- a/src/main/java/gregtechmod/common/containers/GT_Container_Grinder.java +++ b/src/main/java/gregtechmod/common/containers/GT_Container_Grinder.java @@ -28,25 +28,20 @@ public class GT_Container_Grinder extends GT_ContainerMetaTile_Machine { addSlotToContainer(new GT_Slot_Output(mTileEntity, 5, 140, 25)); } - public int mProgress, mMaxProgress, mProgressScale, mWaterAmount; + public int mWaterAmount; public boolean mMachine = true; @SuppressWarnings("rawtypes") public void detectAndSendChanges() { super.detectAndSendChanges(); if (mTileEntity.isClientSide() || mTileEntity.getMetaTileEntity() == null) return; - mMachine = ((GT_MetaTileEntity_Grinder)mTileEntity.getMetaTileEntity()).mMachine; - mWaterAmount = ((GT_MetaTileEntity_Grinder)mTileEntity.getMetaTileEntity()).mFluidAmount; - mProgress = ((GT_MetaTileEntity_Grinder)mTileEntity.getMetaTileEntity()).getProgresstime(); - mMaxProgress = ((GT_MetaTileEntity_Grinder)mTileEntity.getMetaTileEntity()).maxProgresstime(); - mProgressScale = Math.max(0, Math.min(20, (mProgress>0?1:0) + (mProgress * 20) / (mMaxProgress<1?1:mMaxProgress))); + mMachine = ((GT_MetaTileEntity_Grinder)mTileEntity.getMetaTileEntity()).isStructComplete(); + mWaterAmount = ((GT_MetaTileEntity_Grinder)mTileEntity.getMetaTileEntity()).getFluidAmount(); + Iterator var2 = this.crafters.iterator(); while (var2.hasNext()) { ICrafting var1 = (ICrafting)var2.next(); - var1.sendProgressBarUpdate(this, 100, mProgress); - var1.sendProgressBarUpdate(this, 101, mMaxProgress); - var1.sendProgressBarUpdate(this, 102, mProgressScale); var1.sendProgressBarUpdate(this, 103, mMachine?1:0); var1.sendProgressBarUpdate(this, 104, mWaterAmount); } @@ -56,9 +51,6 @@ public class GT_Container_Grinder extends GT_ContainerMetaTile_Machine { public void updateProgressBar(int par1, int par2) { super.updateProgressBar(par1, par2); switch (par1) { - case 100: mProgress = par2; break; - case 101: mMaxProgress = par2; break; - case 102: mProgressScale = par2; break; case 103: mMachine = (par2!=0); break; case 104: mWaterAmount = par2; break; } diff --git a/src/main/java/gregtechmod/common/containers/GT_Container_ImplosionCompressor.java b/src/main/java/gregtechmod/common/containers/GT_Container_ImplosionCompressor.java index 8434b5d..b568151 100644 --- a/src/main/java/gregtechmod/common/containers/GT_Container_ImplosionCompressor.java +++ b/src/main/java/gregtechmod/common/containers/GT_Container_ImplosionCompressor.java @@ -26,36 +26,26 @@ public class GT_Container_ImplosionCompressor extends GT_ContainerMetaTile_Machi addSlotToContainer(new GT_Slot_Output(mTileEntity, 3, 104, 25)); } - public int mProgress, mMaxProgress, mProgressScale; public boolean mMachine = true; @SuppressWarnings("rawtypes") public void detectAndSendChanges() { super.detectAndSendChanges(); if (mTileEntity.isClientSide() || mTileEntity.getMetaTileEntity() == null) return; - mMachine = ((GT_MetaTileEntity_ImplosionCompressor)mTileEntity.getMetaTileEntity()).mMachine; - mProgress = ((GT_MetaTileEntity_ImplosionCompressor)mTileEntity.getMetaTileEntity()).getProgresstime(); - mMaxProgress = ((GT_MetaTileEntity_ImplosionCompressor)mTileEntity.getMetaTileEntity()).maxProgresstime(); - mProgressScale = Math.max(0, Math.min(20, (mProgress>0?1:0) + (mProgress * 20) / (mMaxProgress<1?1:mMaxProgress))); + mMachine = ((GT_MetaTileEntity_ImplosionCompressor)mTileEntity.getMetaTileEntity()).isStructComplete(); Iterator var2 = this.crafters.iterator(); while (var2.hasNext()) { ICrafting var1 = (ICrafting)var2.next(); - var1.sendProgressBarUpdate(this, 100, mProgress); - var1.sendProgressBarUpdate(this, 101, mMaxProgress); - var1.sendProgressBarUpdate(this, 102, mProgressScale); - var1.sendProgressBarUpdate(this, 103, mMachine?1:0); + var1.sendProgressBarUpdate(this, 100, mMachine?1:0); } } @SideOnly(Side.CLIENT) public void updateProgressBar(int par1, int par2) { super.updateProgressBar(par1, par2); - switch (par1) { - case 100: mProgress = par2; break; - case 101: mMaxProgress = par2; break; - case 102: mProgressScale = par2; break; - case 103: mMachine = (par2!=0); break; + if (par1 == 100) { + mMachine = par2 != 0; } } diff --git a/src/main/java/gregtechmod/common/containers/GT_Container_VacuumFreezer.java b/src/main/java/gregtechmod/common/containers/GT_Container_VacuumFreezer.java index c5f7714..d631341 100644 --- a/src/main/java/gregtechmod/common/containers/GT_Container_VacuumFreezer.java +++ b/src/main/java/gregtechmod/common/containers/GT_Container_VacuumFreezer.java @@ -24,24 +24,17 @@ public class GT_Container_VacuumFreezer extends GT_ContainerMetaTile_Machine { addSlotToContainer(new GT_Slot_Output(mTileEntity, 1, 86, 25)); } - public int mProgress, mMaxProgress, mProgressScale; public boolean mMachine = true; @SuppressWarnings("rawtypes") public void detectAndSendChanges() { super.detectAndSendChanges(); if (mTileEntity.isClientSide() || mTileEntity.getMetaTileEntity() == null) return; - mMachine = ((GT_MetaTileEntity_VacuumFreezer)mTileEntity.getMetaTileEntity()).mMachine; - mProgress = ((GT_MetaTileEntity_VacuumFreezer)mTileEntity.getMetaTileEntity()).getProgresstime(); - mMaxProgress = ((GT_MetaTileEntity_VacuumFreezer)mTileEntity.getMetaTileEntity()).maxProgresstime(); - mProgressScale = Math.max(0, Math.min(20, (mProgress>0?1:0) + (mProgress * 20) / (mMaxProgress<1?1:mMaxProgress))); + mMachine = ((GT_MetaTileEntity_VacuumFreezer)mTileEntity.getMetaTileEntity()).isStructComplete(); Iterator var2 = this.crafters.iterator(); while (var2.hasNext()) { ICrafting var1 = (ICrafting)var2.next(); - var1.sendProgressBarUpdate(this, 100, mProgress); - var1.sendProgressBarUpdate(this, 101, mMaxProgress); - var1.sendProgressBarUpdate(this, 102, mProgressScale); var1.sendProgressBarUpdate(this, 103, mMachine?1:0); } } @@ -49,11 +42,8 @@ public class GT_Container_VacuumFreezer extends GT_ContainerMetaTile_Machine { @SideOnly(Side.CLIENT) public void updateProgressBar(int par1, int par2) { super.updateProgressBar(par1, par2); - switch (par1) { - case 100: mProgress = par2; break; - case 101: mMaxProgress = par2; break; - case 102: mProgressScale = par2; break; - case 103: mMachine = (par2!=0); break; + if (par1 == 103) { + mMachine = par2 != 0; } } diff --git a/src/main/java/gregtechmod/common/gui/GT_GUIContainer_Grinder.java b/src/main/java/gregtechmod/common/gui/GT_GUIContainer_Grinder.java index 5131c4b..fda74cf 100644 --- a/src/main/java/gregtechmod/common/gui/GT_GUIContainer_Grinder.java +++ b/src/main/java/gregtechmod/common/gui/GT_GUIContainer_Grinder.java @@ -32,10 +32,11 @@ public class GT_GUIContainer_Grinder extends GT_GUIContainerMetaTile_Machine { drawTexturedModalRect(x, y, 0, 0, xSize, ySize); if (mContainer != null) { - int tScale = ((GT_Container_Grinder)mContainer).mProgressScale; + GT_Container_Grinder cont = (GT_Container_Grinder) mContainer; + int tScale = Math.max(0, Math.min(20, (cont.mProgressTime>0?1:0) + (cont.mProgressTime * 20) / (cont.mMaxProgressTime<1?1:cont.mMaxProgressTime))); if (mContainer.mProgressTime > 0) drawTexturedModalRect(x + 58, y + 28, 176, 0, tScale, 11); - tScale = ((GT_Container_Grinder)mContainer).mWaterAmount/550; + tScale = cont.mWaterAmount/550; if (tScale > 0) drawTexturedModalRect(x + 33, y + 33 + 18 - tScale, 176, 33 + 18 - tScale, 18, tScale); } diff --git a/src/main/java/gregtechmod/common/gui/GT_GUIContainer_ImplosionCompressor.java b/src/main/java/gregtechmod/common/gui/GT_GUIContainer_ImplosionCompressor.java index 617604b..c71fd19 100644 --- a/src/main/java/gregtechmod/common/gui/GT_GUIContainer_ImplosionCompressor.java +++ b/src/main/java/gregtechmod/common/gui/GT_GUIContainer_ImplosionCompressor.java @@ -29,7 +29,8 @@ public class GT_GUIContainer_ImplosionCompressor extends GT_GUIContainerMetaTile drawTexturedModalRect(x, y, 0, 0, xSize, ySize); if (mContainer != null && mContainer.mProgressTime>0) { - int tScale = ((GT_Container_ImplosionCompressor)mContainer).mProgressScale; + GT_Container_ImplosionCompressor cont = (GT_Container_ImplosionCompressor) mContainer; + int tScale = Math.max(0, Math.min(20, (cont.mProgressTime>0?1:0) + (cont.mProgressTime * 20) / (cont.mMaxProgressTime<1?1:cont.mMaxProgressTime))); this.drawTexturedModalRect(x + 58, y + 28, 176, 0, tScale, 11); } } diff --git a/src/main/java/gregtechmod/common/gui/GT_GUIContainer_VacuumFreezer.java b/src/main/java/gregtechmod/common/gui/GT_GUIContainer_VacuumFreezer.java index a95a930..befe474 100644 --- a/src/main/java/gregtechmod/common/gui/GT_GUIContainer_VacuumFreezer.java +++ b/src/main/java/gregtechmod/common/gui/GT_GUIContainer_VacuumFreezer.java @@ -32,7 +32,8 @@ public class GT_GUIContainer_VacuumFreezer extends GT_GUIContainerMetaTile_Machi drawTexturedModalRect(x, y, 0, 0, xSize, ySize); if (mContainer != null && mContainer.mProgressTime>0) { - int tScale = ((GT_Container_VacuumFreezer)mContainer).mProgressScale; + GT_Container_VacuumFreezer cont = (GT_Container_VacuumFreezer) mContainer; + int tScale = Math.max(0, Math.min(20, (cont.mProgressTime>0?1:0) + (cont.mProgressTime * 20) / (cont.mMaxProgressTime<1?1:cont.mMaxProgressTime))); this.drawTexturedModalRect(x + 58, y + 28, 176, 0, tScale, 11); } } diff --git a/src/main/java/gregtechmod/common/recipe/RecipeMaps.java b/src/main/java/gregtechmod/common/recipe/RecipeMaps.java index 81759b3..4352904 100644 --- a/src/main/java/gregtechmod/common/recipe/RecipeMaps.java +++ b/src/main/java/gregtechmod/common/recipe/RecipeMaps.java @@ -21,7 +21,7 @@ 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 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, new SimpleRecipeFactory()); // TODO multiblocks! + public static final RecipeMap GRINDER = new RecipeMap<>(1, 2, 1, 4, 0, 1, 0, 0, new SimpleRecipeFactory()); // TODO multiblocks! public static final RecipeMap BLAST_FURNANCE = new RecipeMap<>(1, 2, 1, 2, new BlastFurnanceRecipeFactory()); public static final RecipeMap BRONZE_BLAST_FURNANCE = new RecipeMap<>(1, 2, 1, 2, new SimpleRecipeFactory()); public static final RecipeMap IMPLOSION_COMPRESSOR= new RecipeMap<>(1, 2, 1, 2, new SimpleRecipeFactory()); // diff --git a/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_BlastFurnace.java b/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_BlastFurnace.java index e1012be..ca5e9a5 100644 --- a/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_BlastFurnace.java +++ b/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_BlastFurnace.java @@ -3,6 +3,7 @@ package gregtechmod.common.tileentities.machines.multi; import gregtechmod.api.GregTech_API; import gregtechmod.api.interfaces.IGregTechTileEntity; import gregtechmod.api.metatileentity.MetaTileEntity; +import gregtechmod.api.metatileentity.implementations.BaseMultiWorkable; import gregtechmod.api.recipe.RecipeMap; import gregtechmod.api.util.GT_OreDictUnificator; import gregtechmod.api.util.GT_Utility; diff --git a/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_BronzeBlastFurnace.java b/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_BronzeBlastFurnace.java index c62ae66..96ea985 100644 --- a/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_BronzeBlastFurnace.java +++ b/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_BronzeBlastFurnace.java @@ -4,6 +4,7 @@ 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.BaseMultiWorkable; import gregtechmod.api.recipe.RecipeLogic; import gregtechmod.api.recipe.RecipeMap; import gregtechmod.api.util.GT_Utility; diff --git a/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_DistillationTower.java b/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_DistillationTower.java index a221501..23c3a3c 100644 --- a/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_DistillationTower.java +++ b/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_DistillationTower.java @@ -5,6 +5,7 @@ import java.util.List; import gregtechmod.api.GregTech_API; import gregtechmod.api.interfaces.IGregTechTileEntity; import gregtechmod.api.metatileentity.MetaTileEntity; +import gregtechmod.api.metatileentity.implementations.BaseMultiWorkable; import gregtechmod.api.util.GT_ModHandler; import gregtechmod.api.util.GT_Utility; import gregtechmod.api.util.ListAdapter; diff --git a/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_Grinder.java b/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_Grinder.java index 1adf44e..466d7b5 100644 --- a/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_Grinder.java +++ b/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_Grinder.java @@ -1,117 +1,41 @@ package gregtechmod.common.tileentities.machines.multi; -import java.util.List; -import java.util.Map; - import gregtechmod.api.GregTech_API; import gregtechmod.api.interfaces.IGregTechTileEntity; import gregtechmod.api.metatileentity.MetaTileEntity; -import gregtechmod.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank; -import gregtechmod.api.recipe.Recipe; +import gregtechmod.api.metatileentity.implementations.BaseMultiFluidWorkable; import gregtechmod.api.util.GT_ModHandler; import gregtechmod.api.util.GT_Utility; -import gregtechmod.api.util.InfoBuilder; +import gregtechmod.common.recipe.RecipeMaps; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; -public class GT_MetaTileEntity_Grinder extends GT_MetaTileEntity_BasicTank { - - public int mProgresstime = 0, mMaxProgresstime = 0, mEUt = 0, mUpdate = 5, mFluidAmount = 0; - private ItemStack mOutputItem1, mOutputItem2, mOutputItem3, mOutputItem4; - public boolean mMachine = false; +public class GT_MetaTileEntity_Grinder extends BaseMultiFluidWorkable { public GT_MetaTileEntity_Grinder(int aID, String mName) { - super(aID, mName); + super(aID, mName, RecipeMaps.GRINDER, 1, 0); } public GT_MetaTileEntity_Grinder() { - + super(RecipeMaps.GRINDER, 1, 0); } - @Override public boolean isTransformerUpgradable() {return true;} - @Override public boolean isOverclockerUpgradable() {return true;} - @Override public boolean isBatteryUpgradable() {return true;} - @Override public boolean isSimpleMachine() {return false;} @Override public boolean isFacingValid(byte aFacing) {return aFacing > 1;} - @Override public boolean isEnetInput() {return true;} - @Override public boolean isInputFacing(byte aSide) {return true;} @Override public boolean isValidSlot(int aIndex) {return true;} - @Override public int maxEUInput() {return 128;} - @Override public int maxEUStore() {return 10000;} - @Override public int maxRFStore() {return maxEUStore();} - @Override public int maxSteamStore() {return maxEUStore();} @Override public int getInvSize() {return 6;} @Override public void onRightclick(EntityPlayer aPlayer) {getBaseMetaTileEntity().openGUI(aPlayer, 112);} - @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) {mProgresstime += aProgress; return mMaxProgresstime-mProgresstime;} @Override public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Grinder(); + GT_MetaTileEntity_Grinder m = new GT_MetaTileEntity_Grinder(); + m.fluidInputs.set(0, GT_ModHandler.getWater(0)); + return m; } - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(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); - } - if (mOutputItem2 != null) { - NBTTagCompound tNBT = new NBTTagCompound(); - mOutputItem2.writeToNBT(tNBT); - aNBT.setTag("mOutputItem2", tNBT); - } - if (mOutputItem3 != null) { - NBTTagCompound tNBT = new NBTTagCompound(); - mOutputItem3.writeToNBT(tNBT); - aNBT.setTag("mOutputItem3", tNBT); - } - if (mOutputItem4 != null) { - NBTTagCompound tNBT = new NBTTagCompound(); - mOutputItem4.writeToNBT(tNBT); - aNBT.setTag("mOutputItem4", tNBT); - } - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - mUpdate = 5; - 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); - } - NBTTagCompound tNBT2 = (NBTTagCompound)aNBT.getTag("mOutputItem2"); - if (tNBT2 != null) { - mOutputItem2 = GT_Utility.loadItem(tNBT2); - } - NBTTagCompound tNBT3 = (NBTTagCompound)aNBT.getTag("mOutputItem3"); - if (tNBT3 != null) { - mOutputItem3 = GT_Utility.loadItem(tNBT3); - } - NBTTagCompound tNBT4 = (NBTTagCompound)aNBT.getTag("mOutputItem4"); - if (tNBT4 != null) { - mOutputItem4 = GT_Utility.loadItem(tNBT4); - } - } - - private boolean checkMachine() { + protected boolean checkMachine() { int xDir = ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing()).offsetX*2, yDir = ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing()).offsetY*2, zDir = ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing()).offsetZ*2; for (int i = -1; i < 2; i++) for (int j = -1; j < 2; j++) for (int k = -1; k < 2; k++) { if (i!=0||j!=0||k!=0) { @@ -124,136 +48,6 @@ public class GT_MetaTileEntity_Grinder extends GT_MetaTileEntity_BasicTank { return true; } - @Override - public void onMachineBlockUpdate() { - mUpdate = 5; - } - - @Override public boolean doesFillContainers() {return false;} - @Override public boolean doesEmptyContainers() {return false;} - @Override public boolean canTankBeFilled() {return true;} - @Override public boolean canTankBeEmptied() {return true;} - @Override public boolean displaysItemStack() {return false;} - @Override public boolean displaysStackSize() {return false;} - - @Override - public void onPostTick() { - if (getBaseMetaTileEntity().isServerSide()) { - if (mUpdate--==0) { - mMachine = checkMachine(); - } - if (mFluid == null) { - mFluidAmount = 0; - } else { - mFluidAmount = mFluid.amount; - } - - - getBaseMetaTileEntity().setActive(mMachine); - if (mMachine && mMaxProgresstime > 0) { - if (mProgresstime < 0 || getBaseMetaTileEntity().decreaseStoredEnergyUnits(mEUt*(int)Math.pow(4, getBaseMetaTileEntity().getOverclockerUpgradeCount()), false)) { - if ((mProgresstime+=(int)Math.pow(2, getBaseMetaTileEntity().getOverclockerUpgradeCount()))>=mMaxProgresstime) { - addOutputProducts(); - mOutputItem1 = null; - mOutputItem2 = null; - mOutputItem3 = null; - mOutputItem4 = null; - mProgresstime = 0; - mMaxProgresstime = 0; - getBaseMetaTileEntity().setErrorDisplayID(0); - } - } else { - if (GregTech_API.sConstantEnergy) { - mProgresstime = -10; - getBaseMetaTileEntity().setErrorDisplayID(1); - } - } - } else { - if (getBaseMetaTileEntity().isAllowedToWork() && getBaseMetaTileEntity().getUniversalEnergyStored() > 100) checkRecipe(); - } - } - } - - private void addOutputProducts() { - if (mOutputItem1 != null) - if (mInventory[2] == null) - mInventory[2] = GT_Utility.copy(mOutputItem1); - else if (GT_Utility.areStacksEqual(mInventory[2], mOutputItem1)) - mInventory[2].stackSize = Math.min(mOutputItem1.getMaxStackSize(), mOutputItem1.stackSize + mInventory[2].stackSize); - - if (mOutputItem2 != null) - if (mInventory[3] == null) - mInventory[3] = GT_Utility.copy(mOutputItem2); - else if (GT_Utility.areStacksEqual(mInventory[3], mOutputItem2)) - mInventory[3].stackSize = Math.min(mOutputItem2.getMaxStackSize(), mOutputItem2.stackSize + mInventory[3].stackSize); - - if (mOutputItem3 != null) - if (mInventory[4] == null) - mInventory[4] = GT_Utility.copy(mOutputItem3); - else if (GT_Utility.areStacksEqual(mInventory[4], mOutputItem3)) - mInventory[4].stackSize = Math.min(mOutputItem3.getMaxStackSize(), mOutputItem3.stackSize + mInventory[4].stackSize); - - if (mOutputItem4 != null) - if (mInventory[5] == null) - mInventory[5] = GT_Utility.copy(mOutputItem4); - else if (GT_Utility.areStacksEqual(mInventory[5], mOutputItem4)) - mInventory[5].stackSize = Math.min(mOutputItem4.getMaxStackSize(), mOutputItem4.stackSize + mInventory[5].stackSize); - } - - private boolean spaceForOutput(Recipe aRecipe) { - if (mInventory[2] == null || aRecipe.getOutput(0) == null || (mInventory[2].stackSize + aRecipe.getOutput(0).stackSize <= mInventory[2].getMaxStackSize() && GT_Utility.areStacksEqual(mInventory[2], aRecipe.getOutput(0)))) - if (mInventory[3] == null || aRecipe.getOutput(1) == null || (mInventory[3].stackSize + aRecipe.getOutput(1).stackSize <= mInventory[3].getMaxStackSize() && GT_Utility.areStacksEqual(mInventory[3], aRecipe.getOutput(1)))) - if (mInventory[4] == null || aRecipe.getOutput(2) == null || (mInventory[4].stackSize + aRecipe.getOutput(2).stackSize <= mInventory[4].getMaxStackSize() && GT_Utility.areStacksEqual(mInventory[4], aRecipe.getOutput(2)))) - if (mInventory[5] == null || aRecipe.getOutput(3) == null || (mInventory[5].stackSize + aRecipe.getOutput(3).stackSize <= mInventory[5].getMaxStackSize() && GT_Utility.areStacksEqual(mInventory[5], aRecipe.getOutput(3)))) - return true; - return false; - } - - private boolean checkRecipe() { - if (!mMachine) return false; - Recipe tRecipe = Recipe.findEqualRecipe(false, false, Recipe.sGrinderRecipes, mInventory[0], mInventory[1]); - if (tRecipe != null) { - if (spaceForOutput(tRecipe)) { - if (tRecipe.isRecipeInputEqual(true, true, mInventory[0], mInventory[1])) { - if (mInventory[0] != null) if (mInventory[0].stackSize == 0) mInventory[0] = null; - if (mInventory[1] != null) if (mInventory[1].stackSize == 0) mInventory[1] = null; - mMaxProgresstime = tRecipe.mDuration; - mEUt = tRecipe.mEUt; - mOutputItem1 = GT_Utility.copy(tRecipe.getOutput(0)); - mOutputItem2 = GT_Utility.copy(tRecipe.getOutput(1)); - mOutputItem3 = GT_Utility.copy(tRecipe.getOutput(2)); - mOutputItem4 = GT_Utility.copy(tRecipe.getOutput(3)); - return true; - } - } - } else { - if (mFluid != null) { - ItemStack tStack = GT_Utility.fillFluidContainer(mFluid, GT_ModHandler.getEmptyCell(1)); - FluidStack tFluid = GT_Utility.getFluidForFilledItem(tStack); - if (tStack != null && tFluid != null) { - tStack.stackSize = mFluid.amount / tFluid.amount; - int tAmount = tStack.stackSize; - tRecipe = Recipe.findEqualRecipe(false, false, Recipe.sGrinderRecipes, mInventory[0], tStack); - if (tRecipe != null) { - if (spaceForOutput(tRecipe) && tRecipe.isRecipeInputEqual(true, true, mInventory[0], tStack)) { - mFluid.amount -= (tAmount - tStack.stackSize) * tFluid.amount; - if (mFluid.amount <= 0) mFluid = null; - if (mInventory[0] != null) if (mInventory[0].stackSize == 0) mInventory[0] = null; - mMaxProgresstime = tRecipe.mDuration; - mEUt = tRecipe.mEUt; - mOutputItem1 = GT_Utility.copy(tRecipe.getOutput(0)); - mOutputItem2 = GT_Utility.copy(tRecipe.getOutput(1)); - mOutputItem3 = GT_Utility.copy(tRecipe.getOutput(2)); - if (!GT_Utility.areStacksEqual(tRecipe.getOutput(3), GT_ModHandler.getEmptyCell(1))) mOutputItem4 = GT_Utility.copy(tRecipe.getOutput(3)); - return true; - } - } - } - } - } - return false; - } - @Override public boolean allowPullStack(int aIndex, byte aSide, ItemStack aStack) { return aIndex>1; @@ -273,20 +67,6 @@ public class GT_MetaTileEntity_Grinder extends GT_MetaTileEntity_BasicTank { return 70; } - @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) - .build(); - } - - @Override - public boolean isGivingInformation() { - return true; - } - @Override public String getDescription() { return "metatilentity.GT_Grinder.tooltip"; @@ -294,4 +74,5 @@ public class GT_MetaTileEntity_Grinder extends GT_MetaTileEntity_BasicTank { @Override public int getTankPressure() {return -100;} @Override public int getCapacity() {return 10000;} + @Override public int getFluidAmount() {return fluidInputs.get(0).amount;} } diff --git a/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_ImplosionCompressor.java b/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_ImplosionCompressor.java index bc64af0..cfcf617 100644 --- a/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_ImplosionCompressor.java +++ b/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_ImplosionCompressor.java @@ -1,93 +1,39 @@ package gregtechmod.common.tileentities.machines.multi; -import java.util.List; -import java.util.Map; - import gregtechmod.api.GregTech_API; import gregtechmod.api.interfaces.IGregTechTileEntity; import gregtechmod.api.metatileentity.MetaTileEntity; -import gregtechmod.api.recipe.Recipe; +import gregtechmod.api.metatileentity.implementations.BaseMultiWorkable; import gregtechmod.api.util.GT_ModHandler; import gregtechmod.api.util.GT_Utility; -import gregtechmod.api.util.InfoBuilder; +import gregtechmod.common.recipe.RecipeMaps; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -public class GT_MetaTileEntity_ImplosionCompressor extends MetaTileEntity { - - public int mProgresstime = 0, mMaxProgresstime = 0, mEUt = 0, mUpdate = 5; - public ItemStack mOutputItem1, mOutputItem2; - public boolean mMachine = false; +public class GT_MetaTileEntity_ImplosionCompressor extends BaseMultiWorkable { public GT_MetaTileEntity_ImplosionCompressor(int aID, String mName) { - super(aID, mName); + super(aID, mName, RecipeMaps.IMPLOSION_COMPRESSOR); } public GT_MetaTileEntity_ImplosionCompressor() { - + super(RecipeMaps.IMPLOSION_COMPRESSOR); } - @Override public boolean isTransformerUpgradable() {return true;} @Override public boolean isOverclockerUpgradable() {return false;} - @Override public boolean isBatteryUpgradable() {return true;} - @Override public boolean isSimpleMachine() {return false;} @Override public boolean isFacingValid(byte aFacing) {return aFacing == 0;} - @Override public boolean isEnetInput() {return true;} - @Override public boolean isInputFacing(byte aSide) {return true;} @Override public int maxEUInput() {return 32;} - @Override public int maxEUStore() {return 10000;} - @Override public int maxRFStore() {return maxEUStore();} - @Override public int maxSteamStore() {return maxEUStore();} @Override public int getInvSize() {return 4;} @Override public void onRightclick(EntityPlayer aPlayer) {getBaseMetaTileEntity().openGUI(aPlayer, 115);} - @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) {mProgresstime += aProgress; return mMaxProgresstime-mProgresstime;} @Override public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { return new GT_MetaTileEntity_ImplosionCompressor(); } - @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); - } - if (mOutputItem2 != null) { - NBTTagCompound tNBT = new NBTTagCompound(); - mOutputItem2.writeToNBT(tNBT); - aNBT.setTag("mOutputItem2", tNBT); - } - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - mUpdate = 5; - 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); - } - NBTTagCompound tNBT2 = (NBTTagCompound)aNBT.getTag("mOutputItem2"); - if (tNBT2 != null) { - mOutputItem2 = GT_Utility.loadItem(tNBT2); - } - } - - private boolean checkMachine() { + protected boolean checkMachine() { for (int i = -1; i < 2; i++) for (int j = -1; j < 2; j++) for (int k = -1; k < 2; k++) { if (i!=0||j!=0||k!=0) { if (getBaseMetaTileEntity().getBlockOffset(i, j-2, k) != GregTech_API.sBlockList[0]) return false; @@ -100,74 +46,8 @@ public class GT_MetaTileEntity_ImplosionCompressor extends MetaTileEntity { } @Override - public void onMachineBlockUpdate() { - mUpdate = 5; - } - - @Override - public void onPostTick() { - if (getBaseMetaTileEntity().isServerSide()) { - if (mUpdate--==0) { - mMachine = checkMachine(); - } - getBaseMetaTileEntity().setActive(mMachine); - if (mMachine && mMaxProgresstime > 0) { - if (getBaseMetaTileEntity().decreaseStoredEnergyUnits(mEUt, false)) { - if (++mProgresstime>mMaxProgresstime) { - addOutputProducts(); - mOutputItem1 = null; - mOutputItem2 = null; - mProgresstime = 0; - mMaxProgresstime = 0; - } - if (mProgresstime == mMaxProgresstime/2) { - sendSound((byte)1); - } - } else { - - } - } else { - if (getBaseMetaTileEntity().isAllowedToWork() && getBaseMetaTileEntity().getUniversalEnergyStored() > 100) checkRecipe(); - } - } - } - - private void addOutputProducts() { - if (mOutputItem1 != null) - if (mInventory[2] == null) - mInventory[2] = GT_Utility.copy(mOutputItem1); - else if (GT_Utility.areStacksEqual(mInventory[2], mOutputItem1)) - mInventory[2].stackSize = Math.min(mOutputItem1.getMaxStackSize(), mOutputItem1.stackSize + mInventory[2].stackSize); - - if (mOutputItem2 != null) - if (mInventory[3] == null) - mInventory[3] = GT_Utility.copy(mOutputItem2); - else if (GT_Utility.areStacksEqual(mInventory[3], mOutputItem2)) - mInventory[3].stackSize = Math.min(mOutputItem2.getMaxStackSize(), mOutputItem2.stackSize + mInventory[3].stackSize); - } - - private boolean spaceForOutput(Recipe aRecipe) { - if (mInventory[2] == null || aRecipe.getOutput(0) == null || (mInventory[2].stackSize + aRecipe.getOutput(0).stackSize <= mInventory[2].getMaxStackSize() && GT_Utility.areStacksEqual(mInventory[2], aRecipe.getOutput(0)))) - if (mInventory[3] == null || aRecipe.getOutput(1) == null || (mInventory[3].stackSize + aRecipe.getOutput(1).stackSize <= mInventory[3].getMaxStackSize() && GT_Utility.areStacksEqual(mInventory[3], aRecipe.getOutput(1)))) - return true; - return false; - } - - private boolean checkRecipe() { - if (!mMachine) return false; - Recipe tRecipe = Recipe.findEqualRecipe(false, false, Recipe.sImplosionRecipes, mInventory[0], mInventory[1]); - if (tRecipe != null) { - if (spaceForOutput(tRecipe) && tRecipe.isRecipeInputEqual(true, true, mInventory[0], mInventory[1])) { - if (mInventory[0] != null) if (mInventory[0].stackSize == 0) mInventory[0] = null; - if (mInventory[1] != null) if (mInventory[1].stackSize == 0) mInventory[1] = null; - mMaxProgresstime = tRecipe.mDuration; - mEUt = tRecipe.mEUt; - mOutputItem1 = GT_Utility.copy(tRecipe.getOutput(0)); - mOutputItem2 = GT_Utility.copy(tRecipe.getOutput(1)); - return true; - } - } - return false; + public void endProcess() { + sendSound((byte)1); } @Override @@ -196,19 +76,6 @@ public class GT_MetaTileEntity_ImplosionCompressor extends MetaTileEntity { GT_Utility.doSoundAtClient(GregTech_API.sSoundList.get(5), 5, 1.0F, aX, aY, aZ); } - @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) - .build(); - } - - @Override - public boolean isGivingInformation() { - return true; - } @Override public String getDescription() { return "metatileentity.GT_ImplosionCompressor.tooltip"; diff --git a/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_Sawmill.java b/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_Sawmill.java index e98ef91..fc398f3 100644 --- a/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_Sawmill.java +++ b/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_Sawmill.java @@ -5,6 +5,7 @@ import java.util.List; import gregtechmod.api.GregTech_API; import gregtechmod.api.interfaces.IGregTechTileEntity; import gregtechmod.api.metatileentity.MetaTileEntity; +import gregtechmod.api.metatileentity.implementations.BaseMultiFluidWorkable; import gregtechmod.api.util.GT_ModHandler; import gregtechmod.api.util.GT_Utility; import gregtechmod.api.util.ListAdapter; @@ -12,19 +13,18 @@ import gregtechmod.common.recipe.RecipeMaps; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; -public class GT_MetaTileEntity_Sawmill extends BaseMultiWorkable { - - private FluidStack[] fluids = new FluidStack[] { GT_ModHandler.getWater(0) }; +public class GT_MetaTileEntity_Sawmill extends BaseMultiFluidWorkable { public GT_MetaTileEntity_Sawmill(int aID, String mName) { - super(aID, mName, RecipeMaps.SAWMILL); + super(aID, mName, RecipeMaps.SAWMILL, 1, 0); } public GT_MetaTileEntity_Sawmill() { - super(RecipeMaps.SAWMILL); + super(RecipeMaps.SAWMILL, 1, 0); } @Override public boolean isFacingValid(byte aFacing) {return aFacing == 0;} @@ -33,7 +33,9 @@ public class GT_MetaTileEntity_Sawmill extends BaseMultiWorkable { @Override public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Sawmill(); + GT_MetaTileEntity_Sawmill sawmill = new GT_MetaTileEntity_Sawmill(); + sawmill.getFluidInputs().set(0, GT_ModHandler.getWater(0)); + return sawmill; } @Override @@ -41,32 +43,6 @@ public class GT_MetaTileEntity_Sawmill extends BaseMultiWorkable { return new ListAdapter<>(mInventory, 2, 4); } - @Override - public List getFluidInputs() { - if (fluids == null) { - return new ListAdapter<>(new FluidStack[1]); - } - - return new ListAdapter<>(fluids); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - if (GT_Utility.isFluidStackValid(fluids[0])) { - fluids[0].writeToNBT(aNBT); - } - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - FluidStack stack = FluidStack.loadFluidStackFromNBT(aNBT); - if (GT_Utility.isFluidStackValid(stack)) { - fluids[0] = stack; - } - } - protected boolean checkMachine() { for (int i = -1; i < 2; i++) for (int j = 1; j < 2; j++) for (int k = -1; k < 2; k++) { if (getBaseMetaTileEntity().getBlockOffset(i, j-2, k) != GregTech_API.sBlockList[0]) return false; @@ -102,23 +78,12 @@ public class GT_MetaTileEntity_Sawmill extends BaseMultiWorkable { } @Override - public int fill(FluidStack resource, boolean doFill) { - if (GT_Utility.isFluidStackValid(resource)) { - int space = getCapacity() - fluids[0].amount; - int toFill = resource.amount <= space ? resource.amount : space; - if (doFill) { - fluids[0].amount += toFill; - // TODO could be dupe, may change resource - } - - return toFill; - } - - return 0; + public boolean canFill(ForgeDirection aSide, Fluid aFluid) { + return getFluidAmount() < getCapacity(); } - @Override public FluidStack getFluid() {return fluids[0].copy();} - @Override public int getFluidAmount() {return fluids[0].amount;} + @Override public FluidStack getFluid() {return fluidInputs.get(0).copy();} + @Override public int getFluidAmount() {return fluidInputs.get(0).amount;} @Override public int getTankPressure() {return -100;} @Override public int getCapacity() {return 10000;} } diff --git a/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_VacuumFreezer.java b/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_VacuumFreezer.java index 82a7f46..f88941e 100644 --- a/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_VacuumFreezer.java +++ b/src/main/java/gregtechmod/common/tileentities/machines/multi/GT_MetaTileEntity_VacuumFreezer.java @@ -1,82 +1,34 @@ package gregtechmod.common.tileentities.machines.multi; -import java.util.List; -import java.util.Map; - import gregtechmod.api.GregTech_API; import gregtechmod.api.interfaces.IGregTechTileEntity; import gregtechmod.api.metatileentity.MetaTileEntity; -import gregtechmod.api.recipe.Recipe; -import gregtechmod.api.util.GT_Utility; -import gregtechmod.api.util.InfoBuilder; +import gregtechmod.api.metatileentity.implementations.BaseMultiWorkable; +import gregtechmod.common.recipe.RecipeMaps; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -public class GT_MetaTileEntity_VacuumFreezer extends MetaTileEntity { - - public int mProgresstime = 0, mMaxProgresstime = 0, mEUt = 0, mUpdate = 5; - public ItemStack mOutputItem1; - public boolean mMachine = false; +public class GT_MetaTileEntity_VacuumFreezer extends BaseMultiWorkable { public GT_MetaTileEntity_VacuumFreezer(int aID, String mName) { - super(aID, mName); + super(aID, mName, RecipeMaps.VACUUM_FREEZER); } public GT_MetaTileEntity_VacuumFreezer() { - + super(RecipeMaps.VACUUM_FREEZER); } - @Override public boolean isTransformerUpgradable() {return true;} - @Override public boolean isOverclockerUpgradable() {return true;} - @Override public boolean isBatteryUpgradable() {return true;} - @Override public boolean isSimpleMachine() {return false;} @Override public boolean isFacingValid(byte aFacing) {return aFacing == 0;} - @Override public boolean isEnetInput() {return true;} - @Override public boolean isInputFacing(byte aSide) {return true;} - @Override public int maxEUInput() {return 128;} - @Override public int maxEUStore() {return 10000;} - @Override public int maxRFStore() {return maxEUStore();} - @Override public int maxSteamStore() {return maxEUStore();} @Override public int getInvSize() {return 2;} @Override public void onRightclick(EntityPlayer aPlayer) {getBaseMetaTileEntity().openGUI(aPlayer, 122);} - @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) {mProgresstime += aProgress; return mMaxProgresstime-mProgresstime;} @Override public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { return new GT_MetaTileEntity_VacuumFreezer(); } - - @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 = 5; - 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 boolean checkMachine() { + protected boolean checkMachine() { for (int i = -1; i < 2; i++) for (int j = -1; j < 2; j++) for (int k = -1; k < 2; k++) { if (i!=0||j!=0||k!=0) { if (getBaseMetaTileEntity().getBlockOffset(i, j-2, k) != GregTech_API.sBlockList[0]) return false; @@ -88,68 +40,6 @@ public class GT_MetaTileEntity_VacuumFreezer extends MetaTileEntity { return true; } - @Override - public void onMachineBlockUpdate() { - mUpdate = 5; - } - - @Override - public void onPostTick() { - if (getBaseMetaTileEntity().isServerSide()) { - if (mUpdate--==0) { - mMachine = checkMachine(); - } - getBaseMetaTileEntity().setActive(mMachine); - if (mMachine && mMaxProgresstime > 0) { - if (mProgresstime < 0 || getBaseMetaTileEntity().decreaseStoredEnergyUnits(mEUt*(int)Math.pow(4, getBaseMetaTileEntity().getOverclockerUpgradeCount()), false)) { - if ((mProgresstime+=(int)Math.pow(2, getBaseMetaTileEntity().getOverclockerUpgradeCount()))>=mMaxProgresstime) { - addOutputProducts(); - mOutputItem1 = null; - mProgresstime = 0; - mMaxProgresstime = 0; - getBaseMetaTileEntity().setErrorDisplayID(0); - } - } else { - if (GregTech_API.sConstantEnergy) { - mProgresstime = -10; - getBaseMetaTileEntity().setErrorDisplayID(1); - } - } - } else { - if (getBaseMetaTileEntity().isAllowedToWork() && getBaseMetaTileEntity().getUniversalEnergyStored() > 100) checkRecipe(); - } - } - } - - private void addOutputProducts() { - if (mOutputItem1 != null) - if (mInventory[1] == null) - mInventory[1] = GT_Utility.copy(mOutputItem1); - else if (GT_Utility.areStacksEqual(mInventory[1], mOutputItem1)) - mInventory[1].stackSize = Math.min(mOutputItem1.getMaxStackSize(), mOutputItem1.stackSize + mInventory[1].stackSize); - } - - private boolean spaceForOutput(Recipe aRecipe) { - if (mInventory[1] == null || aRecipe.getOutput(0) == null || (mInventory[1].stackSize + aRecipe.getOutput(0).stackSize <= mInventory[1].getMaxStackSize() && GT_Utility.areStacksEqual(mInventory[1], aRecipe.getOutput(0)))) - return true; - return false; - } - - private boolean checkRecipe() { - if (!mMachine) return false; - Recipe tRecipe = Recipe.findEqualRecipe(false, false, Recipe.sVacuumRecipes, mInventory[0], null); - if (tRecipe != null) { - if (spaceForOutput(tRecipe) && tRecipe.isRecipeInputEqual(true, true, mInventory[0], null)) { - if (mInventory[0] != null) if (mInventory[0].stackSize == 0) mInventory[0] = null; - mMaxProgresstime = tRecipe.mDuration; - mEUt = tRecipe.mEUt; - mOutputItem1 = GT_Utility.copy(tRecipe.getOutput(0)); - return true; - } - } - return false; - } - @Override public boolean allowPullStack(int aIndex, byte aSide, ItemStack aStack) { return aIndex==1; @@ -169,19 +59,6 @@ public class GT_MetaTileEntity_VacuumFreezer extends MetaTileEntity { return 77; } - @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) - .build(); - } - - @Override - public boolean isGivingInformation() { - return true; - } @Override public String getDescription() { return "metatileentity.GT_VacuumFreezer.tooltip";