Moving electrolyzer
This commit is contained in:
parent
1c2ffbb23f
commit
10c510df35
6 changed files with 55 additions and 457 deletions
|
@ -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;
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,176 +1,46 @@
|
|||
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) {
|
||||
return new GT_MetaTileEntity_Centrifuge();
|
||||
}
|
||||
|
||||
@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};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,53 +1,33 @@
|
|||
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) {
|
||||
|
@ -55,174 +35,14 @@ public class GT_MetaTileEntity_Electrolyzer extends GT_MetaTileEntity_BasicTank
|
|||
}
|
||||
|
||||
@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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
public void stutterProcess() {
|
||||
super.stutterProcess();
|
||||
getBaseMetaTileEntity().setErrorDisplayID(1);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -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";
|
||||
|
|
Loading…
Reference in a new issue