Fixed most of multiblocks

This commit is contained in:
TheDarkDnKTv 2021-02-26 21:05:32 +02:00
parent ca27b8df8e
commit 0ec40230ff
17 changed files with 248 additions and 602 deletions

View file

@ -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");

View file

@ -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<FluidStack> 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<FluidStack> getFluidInputs() {
return fluidInputs;
}
@Override
public List<FluidStack> 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;
}
}

View file

@ -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) {

View file

@ -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;
}

View file

@ -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;
}
}

View file

@ -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;
}
}

View file

@ -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);
}

View file

@ -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);
}
}

View file

@ -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);
}
}

View file

@ -21,7 +21,7 @@ public class RecipeMaps {
public static final RecipeMap<SimpleRecipeFactory> FUSION_REACTOR = new RecipeMap<>(0, 0, 0, 0, 2, 2, 1, 1, new SimpleRecipeFactory());
public static final RecipeMap<SimpleRecipeFactory> CENTRIFUGE = new RecipeMap<>(0, 2, 1, 4, 0, 1, 0, 0, new SimpleRecipeFactory());
public static final RecipeMap<SimpleRecipeFactory> ELECTROLYZER = new RecipeMap<>(0, 2, 1, 4, 0, 1, 0, 0, new SimpleRecipeFactory());
public static final RecipeMap<SimpleRecipeFactory> GRINDER = new RecipeMap<>(1, 2, 1, 4, new SimpleRecipeFactory()); // TODO multiblocks!
public static final RecipeMap<SimpleRecipeFactory> GRINDER = new RecipeMap<>(1, 2, 1, 4, 0, 1, 0, 0, new SimpleRecipeFactory()); // TODO multiblocks!
public static final RecipeMap<BlastFurnanceRecipeFactory> BLAST_FURNANCE = new RecipeMap<>(1, 2, 1, 2, new BlastFurnanceRecipeFactory());
public static final RecipeMap<SimpleRecipeFactory> BRONZE_BLAST_FURNANCE = new RecipeMap<>(1, 2, 1, 2, new SimpleRecipeFactory());
public static final RecipeMap<SimpleRecipeFactory> IMPLOSION_COMPRESSOR= new RecipeMap<>(1, 2, 1, 2, new SimpleRecipeFactory()); //

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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<String, List<Object>> 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;}
}

View file

@ -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<String, List<Object>> 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";

View file

@ -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<FluidStack> 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;}
}

View file

@ -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<String, List<Object>> 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";