Moving electrolyzer

This commit is contained in:
TheDarkDnKTv 2021-02-02 03:26:09 +02:00
parent 1c2ffbb23f
commit 10c510df35
6 changed files with 55 additions and 457 deletions

View file

@ -45,8 +45,6 @@ public abstract class BasicFluidWorkable extends GT_MetaTileEntity_BasicTank imp
@Override public int maxEUStore() {return 10000;}
@Override public int maxRFStore() {return maxEUStore();}
@Override public int maxSteamStore() {return maxEUStore();}
@Override public int getInvSize() {return 7;}
@Override public void onRightclick(EntityPlayer aPlayer) {getBaseMetaTileEntity().openGUI(aPlayer, 146);}
@Override public boolean isAccessAllowed(EntityPlayer aPlayer) {return true;}
@Override public RecipeLogic getRecipeLogic() {return recipeLogic;}
@Override public int increaseProgress(int aProgress) {recipeLogic.increaseProgressTime(aProgress); return recipeLogic.getMaxProgressTime()-recipeLogic.getProgressTime();}
@ -58,15 +56,15 @@ public abstract class BasicFluidWorkable extends GT_MetaTileEntity_BasicTank imp
@Override public boolean displaysItemStack() {return true;}
@Override public boolean displaysStackSize() {return true;}
@Override public int getInputSlot() {return 1;}
@Override public int getOutputSlot() {return 2;}
@Override public int getStackDisplaySlot() {return 6;}
@Override public int getInputSlot() {return 1;}
@Override public int getOutputSlot() {return 2;}
@Override public int getStackDisplaySlot() {return 6;}
protected void initRecipeLogic(List<Recipe> recipeMap) {
recipeLogic = new RecipeLogic(recipeMap, this) {
@Override
protected void consumeInputs(Recipe recipe) {
if (mFluid == null || BasicFluidWorkable.this.consumeFluids(true, recipe)) {
if (mFluid == null || !BasicFluidWorkable.this.consumeFluids(true, recipe)) {
super.consumeInputs(recipe);
}
}
@ -92,17 +90,11 @@ public abstract class BasicFluidWorkable extends GT_MetaTileEntity_BasicTank imp
ItemStack filledBucket = GT_Utility.fillFluidContainer(mFluid, new ItemStack(Items.bucket));
if (filledBucket != null) {
filledBucket.stackSize = mFluid.amount / 1000;
// result = recipeLogic.recipeMap.stream()
// .filter(rec -> rec.match(filledBucket)) // TODO cache recipe haven't inplemented here
// .findFirst()
// .orElse(null);
result = Recipe.findEqualRecipe(false, recipeLogic.recipeMap, filledBucket);
}
} else {
// result = recipeLogic.recipeMap.stream()
// .filter(rec -> rec.match(false, getBaseMetaTileEntity(), getInputSlots()))
// .findFirst()
// .orElse(null);
}
if (result == null) {
result = Recipe.findEqualRecipe(false, recipeLogic.recipeMap, getBaseMetaTileEntity(), getInputSlots());
}
@ -120,7 +112,7 @@ public abstract class BasicFluidWorkable extends GT_MetaTileEntity_BasicTank imp
ItemStack fluidItem = findFluidItem(recipe);
FluidStack fluid = null;
if (mFluid != null && (fluid = GT_Utility.getFluidForFilledItem(fluidItem)) != null) {
if (mFluid != null && fluidItem != null && (fluid = GT_Utility.getFluidForFilledItem(fluidItem)) != null) {
fluid.amount = 1000 * fluidItem.stackSize;
if (fluid.getFluidID() == mFluid.getFluidID() && mFluid.amount >= fluid.amount) {
if (consume) mFluid.amount -= fluid.amount;
@ -135,7 +127,7 @@ public abstract class BasicFluidWorkable extends GT_MetaTileEntity_BasicTank imp
ItemStack fluidItem = null;
for (ItemStack[] stacks : recipe.getRepresentativeInputs()) {
for (ItemStack stack : stacks) {
if (GT_Utility.getFluidForFilledItem(stack) != null) {
if (GT_Utility.getFluidForFilledItem(stack) != null && GT_Utility.getContainerForFilledItem(stack).getItem() == Items.bucket) {
fluidItem = stack;
break;
}
@ -166,7 +158,7 @@ public abstract class BasicFluidWorkable extends GT_MetaTileEntity_BasicTank imp
if (recipe.getOutputs().length <= getOutputSlots().length) {
List<ItemStack> slots = new ArrayList<>();
for (int i : getOutputSlots()) slots.add(mInventory[i]);
for (int i = 0; i < slots.size(); i++) {
for (int i = 0; i < recipe.getOutputs().length && i < slots.size(); i++) {
if (slots.get(i) != null && recipe.getOutputs()[i] != null) {
if (!GT_Utility.areStacksEqual(slots.get(i), recipe.getOutputs()[i]) || slots.get(i).stackSize + recipe.getOutputs()[i].stackSize > slots.get(i).getMaxStackSize()) {
return false;

View file

@ -203,11 +203,11 @@ public class RecipeLogic {
}
public int getMaxProgressTime() {
return maxProgressTime;
return maxProgressTime / (int)Math.pow(2, overclockersCount);
}
public int getProgressTime() {
return progressTime;
return progressTime / (int)Math.pow(2, overclockersCount);
}
public int getEUt() {

View file

@ -4,15 +4,9 @@ import gregtechmod.api.gui.GT_ContainerMetaTile_Machine;
import gregtechmod.api.gui.GT_Slot_Holo;
import gregtechmod.api.gui.GT_Slot_Output;
import gregtechmod.api.interfaces.IGregTechTileEntity;
import gregtechmod.common.tileentities.machines.GT_MetaTileEntity_Electrolyzer;
import java.util.Iterator;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.ICrafting;
import net.minecraft.inventory.Slot;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class GT_Container_Electrolyzer extends GT_ContainerMetaTile_Machine {
@ -30,35 +24,6 @@ public class GT_Container_Electrolyzer extends GT_ContainerMetaTile_Machine {
addSlotToContainer(new GT_Slot_Holo (mTileEntity, 6, 110, 46, false, false, 64));
}
public int mProgress, mMaxProgress, mProgressScale;
@SuppressWarnings("rawtypes")
public void detectAndSendChanges() {
super.detectAndSendChanges();
if (mTileEntity.isClientSide() || mTileEntity.getMetaTileEntity() == null) return;
mProgress = ((GT_MetaTileEntity_Electrolyzer)mTileEntity.getMetaTileEntity()).getProgresstime();
mMaxProgress = ((GT_MetaTileEntity_Electrolyzer)mTileEntity.getMetaTileEntity()).maxProgresstime();
mProgressScale = Math.max(0, Math.min(10, (mProgress>0?1:0) + (mProgress * 10) / (mMaxProgress<1?1:mMaxProgress)));
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);
}
}
@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;
}
}
public int getSlotCount() {
return 6;
}

View file

@ -30,7 +30,8 @@ public class GT_GUIContainer_Electrolyzer extends GT_GUIContainerMetaTile_Machin
drawTexturedModalRect(x, y, 0, 0, xSize, ySize);
if (mContainer != null && mContainer.mProgressTime>0) {
int tScale = ((GT_Container_Electrolyzer)mContainer).mProgressScale;
int tScale = (int) ((mContainer.mProgressTime * 1.0D / mContainer.mMaxProgressTime * 10));
tScale = tScale < 0 || tScale > 10 ? 0 : tScale;
drawTexturedModalRect(x + 73, y + 44 - tScale, 183, 44 - tScale, 30, tScale);
}
}

View file

@ -1,80 +1,25 @@
package gregtechmod.common.tileentities.machines;
import java.util.List;
import java.util.Map;
import gregtechmod.api.GregTech_API;
import gregtechmod.api.interfaces.IGregTechTileEntity;
import gregtechmod.api.interfaces.IRecipeWorkable;
import gregtechmod.api.metatileentity.MetaTileEntity;
import gregtechmod.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank;
import gregtechmod.api.recipe.Recipe;
import gregtechmod.api.recipe.RecipeLogic;
import gregtechmod.api.metatileentity.implementations.BasicFluidWorkable;
import gregtechmod.api.recipe.RecipeMaps;
import gregtechmod.api.util.GT_ModHandler;
import gregtechmod.api.util.GT_Utility;
import gregtechmod.api.util.InfoBuilder;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.fluids.FluidStack;
public class GT_MetaTileEntity_Centrifuge extends GT_MetaTileEntity_BasicTank implements IRecipeWorkable {
public class GT_MetaTileEntity_Centrifuge extends BasicFluidWorkable {
private RecipeLogic recipeLogic;
private int mSpeed = 0;
public GT_MetaTileEntity_Centrifuge(int aID, String mName) {
super(aID, mName);
init();
super(aID, mName, RecipeMaps.sCentrifugeRecipes);
}
public GT_MetaTileEntity_Centrifuge() {
init();
super(RecipeMaps.sCentrifugeRecipes);
}
private void init() {
recipeLogic = new RecipeLogic(RecipeMaps.sCentrifugeRecipes, this) {
@Override
protected void consumeInputs(Recipe recipe) {
if (mFluid == null || GT_MetaTileEntity_Centrifuge.this.consumeFluids(true, recipe)) {
super.consumeInputs(recipe);
}
}
@Override
protected boolean isInputNonEmpty() {
return mFluid != null || super.isInputNonEmpty();
}
@Override
protected boolean match(Recipe recipe) {
return consumeFluids(false, recipe) || super.match(recipe);
}
};
recipeLogic.moveItems = false;
recipeLogic.setRecipeProvider(this::searchForRecipe);
}
@Override public boolean isTransformerUpgradable() {return true;}
@Override public boolean isOverclockerUpgradable() {return true;}
@Override public boolean isBatteryUpgradable() {return true;}
@Override public boolean isValidSlot(int aIndex) {return aIndex < 6;}
@Override public boolean isSimpleMachine() {return false;}
@Override public boolean isFacingValid(byte aFacing) {return false;}
@Override public boolean isEnetInput() {return true;}
@Override public boolean isInputFacing(byte aSide) {return true;}
@Override public int maxEUInput() {return 32;}
@Override public int maxEUStore() {return 10000;}
@Override public int maxRFStore() {return maxEUStore();}
@Override public int maxSteamStore() {return maxEUStore();}
@Override public int getInvSize() {return 7;}
@Override public void onRightclick(EntityPlayer aPlayer) {getBaseMetaTileEntity().openGUI(aPlayer, 146);}
@Override public boolean isAccessAllowed(EntityPlayer aPlayer) {return true;}
@Override public RecipeLogic getRecipeLogic() {return recipeLogic;}
@Override public int increaseProgress(int aProgress) {recipeLogic.increaseProgressTime(aProgress); return recipeLogic.getMaxProgressTime()-recipeLogic.getProgressTime();}
@Override
public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
@ -82,95 +27,20 @@ public class GT_MetaTileEntity_Centrifuge extends GT_MetaTileEntity_BasicTank im
}
@Override
public void saveNBTData(NBTTagCompound aNBT) {
super.saveNBTData(aNBT);
recipeLogic.saveToNBT(aNBT);
}
@Override
public void loadNBTData(NBTTagCompound aNBT) {
super.loadNBTData(aNBT);
recipeLogic.loadFromNBT(aNBT);
}
@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 true;}
@Override public boolean displaysStackSize() {return true;}
@Override public int getInputSlot() {return 1;}
@Override public int getOutputSlot() {return 2;}
@Override public int getStackDisplaySlot() {return 6;}
@Override
public void onPostTick() {
if (getBaseMetaTileEntity().isServerSide()) {
mSpeed = getBaseMetaTileEntity().getOverclockerUpgradeCount();
recipeLogic.update();
public void onPostTick() {
super.onPostTick();
if (getBaseMetaTileEntity().isServerSide()) {
mSpeed = getBaseMetaTileEntity().getOverclockerUpgradeCount();
}
}
public boolean spaceForOutput(Recipe aRecipe) {
if (mInventory[2] == null || aRecipe.getOutputs()[0] == null || (mInventory[2].stackSize + aRecipe.getOutputs()[0].stackSize <= mInventory[2].getMaxStackSize() && GT_Utility.areStacksEqual(mInventory[2], aRecipe.getOutputs()[0])))
if (mInventory[3] == null || aRecipe.getOutputs()[1] == null || (mInventory[3].stackSize + aRecipe.getOutputs()[1].stackSize <= mInventory[3].getMaxStackSize() && GT_Utility.areStacksEqual(mInventory[3], aRecipe.getOutputs()[1])))
if (mInventory[4] == null || aRecipe.getOutputs()[2] == null || (mInventory[4].stackSize + aRecipe.getOutputs()[2].stackSize <= mInventory[4].getMaxStackSize() && GT_Utility.areStacksEqual(mInventory[4], aRecipe.getOutputs()[2])))
if (mInventory[5] == null || aRecipe.getOutputs()[3] == null || (mInventory[5].stackSize + aRecipe.getOutputs()[3].stackSize <= mInventory[5].getMaxStackSize() && GT_Utility.areStacksEqual(mInventory[5], aRecipe.getOutputs()[3])))
return true;
return false;
}
private Recipe searchForRecipe() {
Recipe result = null;
if (mFluid != null) {
ItemStack filledBucket = GT_Utility.fillFluidContainer(mFluid, new ItemStack(Items.bucket));
if (filledBucket != null) {
filledBucket.stackSize = mFluid.amount / 1000;
result = recipeLogic.recipeMap.stream()
.filter(rec -> rec.match(filledBucket))
.findFirst()
.orElse(null);
}
} else {
result = recipeLogic.recipeMap.stream()
.filter(rec -> rec.match(false, getBaseMetaTileEntity(), getInputSlots()))
.findFirst()
.orElse(null);
}
return result;
}
private boolean consumeFluids(boolean consume, Recipe recipe) {
ItemStack fluidItem = findFluidItem(recipe);
FluidStack fluid = null;
if (mFluid != null && (fluid = GT_Utility.getFluidForFilledItem(fluidItem)) != null) {
fluid.amount = 1000 * fluidItem.stackSize;
if (fluid.getFluidID() == mFluid.getFluidID() && mFluid.amount >= fluid.amount) {
if (consume) mFluid.amount -= fluid.amount;
return true;
}
}
return false;
}
private ItemStack findFluidItem(Recipe recipe) {
ItemStack fluidItem = null;
for (ItemStack[] stacks : recipe.getRepresentativeInputs()) {
for (ItemStack stack : stacks) {
if (GT_Utility.getFluidForFilledItem(stack) != null) {
fluidItem = stack;
break;
}
}
}
return fluidItem;
}
}
@Override public int getInputSlot() {return 1;}
@Override public int getOutputSlot() {return 2;}
@Override public int getStackDisplaySlot() {return 6;}
@Override public int getInvSize() {return 7;}
@Override public void onRightclick(EntityPlayer aPlayer) {getBaseMetaTileEntity().openGUI(aPlayer, 146);}
@Override public int[] getInputSlots() { return new int[] {0, 1}; }
@Override public int[] getOutputSlots() { return new int[] {2, 3, 4, 5}; };
@Override
public int getTextureIndex(byte aSide, byte aFacing, boolean aActive, boolean aRedstone) {
@ -179,19 +49,6 @@ public class GT_MetaTileEntity_Centrifuge extends GT_MetaTileEntity_BasicTank im
return aActive ? mSpeed >= 2 ? 28 : mSpeed == 1 ? 27 : 26 : 25;
}
@Override
public Map<String, List<Object>> getInfoData() {
return InfoBuilder.create()
.newKey("sensor.progress.percentage", recipeLogic.getProgressTime() * 100.0D / recipeLogic.getMaxProgressTime())
.newKey("sensor.progress.secs", recipeLogic.getProgressTime() / 20)
.newKey("sensor.progress.secs", recipeLogic.getMaxProgressTime() / 20)
.build();
}
@Override
public boolean isGivingInformation() {
return true;
}
@Override
public String getDescription() {
return "metatileentity.GT_Centrifuge.tooltip";
@ -221,36 +78,13 @@ public class GT_MetaTileEntity_Centrifuge extends GT_MetaTileEntity_BasicTank im
@Override public int getCapacity() {return 64000;}
@Override
public void startProcess() {}
public void stutterProcess() {
super.stutterProcess();
getBaseMetaTileEntity().setErrorDisplayID(1);
}
@Override
public void endProcess() {
getBaseMetaTileEntity().setErrorDisplayID(0);
}
@Override
public void stutterProcess() {
if (GregTech_API.sConstantEnergy) {
int val = (int) (recipeLogic.getMaxProgressTime() * 0.1D);
if (recipeLogic.getProgressTime() > val)
recipeLogic.increaseProgressTime(-val);
getBaseMetaTileEntity().setErrorDisplayID(1);
}
}
@Override
public boolean allowToCheckRecipe() {
return true;
}
@Override
public int[] getInputSlots() {
return new int[] {0, 1};
}
@Override
public int[] getOutputSlots() {
return new int[] {2, 3, 4, 5};
}
}

View file

@ -1,230 +1,50 @@
package gregtechmod.common.tileentities.machines;
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.BasicFluidWorkable;
import gregtechmod.api.recipe.RecipeMaps;
import gregtechmod.api.util.GT_ModHandler;
import gregtechmod.api.util.GT_Utility;
import gregtechmod.api.util.InfoBuilder;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.fluids.FluidStack;
public class GT_MetaTileEntity_Electrolyzer extends GT_MetaTileEntity_BasicTank {
private int mProgresstime = 0, mMaxProgresstime = 0, mEUt = 0;
private ItemStack mOutputItem1, mOutputItem2, mOutputItem3, mOutputItem4;
public class GT_MetaTileEntity_Electrolyzer extends BasicFluidWorkable {
public GT_MetaTileEntity_Electrolyzer(int aID, String mName) {
super(aID, mName);
super(aID, mName, RecipeMaps.sElectrolyzerRecipes);
}
public GT_MetaTileEntity_Electrolyzer() {
super(RecipeMaps.sElectrolyzerRecipes);
}
@Override public boolean isTransformerUpgradable() {return true;}
@Override public boolean isOverclockerUpgradable() {return true;}
@Override public boolean isBatteryUpgradable() {return true;}
@Override public boolean isValidSlot(int aIndex) {return aIndex < 6;}
@Override public boolean isSimpleMachine() {return false;}
@Override public boolean isFacingValid(byte aFacing) {return false;}
@Override public boolean isEnetInput() {return true;}
@Override public boolean isInputFacing(byte aSide) {return true;}
@Override public int maxEUInput() {return 128;}
@Override public int maxEUStore() {return 10000;}
@Override public int maxRFStore() {return maxEUStore();}
@Override public int maxSteamStore() {return maxEUStore();}
@Override public int getInvSize() {return 7;}
@Override public int getInputSlot() {return 1;}
@Override public int getOutputSlot() {return 2;}
@Override public int getStackDisplaySlot() {return 6;}
@Override public void onRightclick(EntityPlayer aPlayer) {getBaseMetaTileEntity().openGUI(aPlayer, 109);}
@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 int[] getInputSlots() { return new int[] {0, 1}; }
@Override public int[] getOutputSlots() { return new int[] {2, 3, 4, 5}; };
@Override
public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
return new GT_MetaTileEntity_Electrolyzer();
}
@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);
}
public void endProcess() {
getBaseMetaTileEntity().setErrorDisplayID(0);
}
@Override
public void loadNBTData(NBTTagCompound aNBT) {
super.loadNBTData(aNBT);
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);
}
}
@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 true;}
@Override public boolean displaysStackSize() {return true;}
@Override public int getInputSlot() {return 1;}
@Override public int getOutputSlot() {return 2;}
@Override public int getStackDisplaySlot() {return 6;}
@Override
public void onPostTick() {
if (getBaseMetaTileEntity().isServerSide()) {
if (mMaxProgresstime > 0) {
getBaseMetaTileEntity().setActive(true);
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 {
getBaseMetaTileEntity().setActive(false);
if (GregTech_API.sConstantEnergy) {
mProgresstime = -10;
getBaseMetaTileEntity().setErrorDisplayID(1);
}
}
} else {
getBaseMetaTileEntity().setActive(false);
if (getBaseMetaTileEntity().isAllowedToWork() && getBaseMetaTileEntity().getUniversalEnergyStored() > 100) checkRecipe();
}
}
public void stutterProcess() {
super.stutterProcess();
getBaseMetaTileEntity().setErrorDisplayID(1);
}
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() {
Recipe tRecipe = Recipe.findEqualRecipe(false, false, Recipe.sElectrolyzerRecipes, 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));
mOutputItem3 = GT_Utility.copy(tRecipe.getOutput(2));
mOutputItem4 = GT_Utility.copy(tRecipe.getOutput(3));
return true;
}
}
if (mFluid != null) {
ItemStack tStack = GT_Utility.fillFluidContainer(mFluid, new ItemStack(Items.bucket, 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.sElectrolyzerRecipes, tStack, mInventory[1]);
if (tRecipe != null) {
if (spaceForOutput(tRecipe) && tRecipe.isRecipeInputEqual(true, true, tStack, mInventory[1])) {
mFluid.amount -= (tAmount - tStack.stackSize) * tFluid.amount;
if (mFluid.amount <= 0) mFluid = 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));
if (!GT_Utility.areStacksEqual(tRecipe.getOutput(3), new ItemStack(Items.bucket, 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;
@ -244,20 +64,6 @@ public class GT_MetaTileEntity_Electrolyzer extends GT_MetaTileEntity_BasicTank
return aActive?65:64;
}
@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_Electrolyzer.tooltip";