diff options
9 files changed, 81 insertions, 79 deletions
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java index b151678e5a..b2db48ee35 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java @@ -167,7 +167,7 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt if (outputEM != null) { float mass = 0; for (cElementalInstanceStackMap tree : outputEM) - mass += tree.getMass(); + if(tree!=null) mass += tree.getMass(); if (mass > 0) { if (eMufflerHatches.size() < 1) explodeMultiblock(); else { @@ -205,7 +205,7 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt if (outputEM != null) { float mass = 0; for (cElementalInstanceStackMap tree : outputEM) - mass += tree.getMass(); + if(tree!=null) mass += tree.getMass(); if (mass > 0) { if (eMufflerHatches.size() < 1) explodeMultiblock(); else { @@ -329,13 +329,14 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt } if (outputEM != null) { - aNBT.setInteger("outputStackCount", outputEM.length); + aNBT.setInteger("eOutputStackCount", outputEM.length); NBTTagCompound output = new NBTTagCompound(); for (int i = 0; i < outputEM.length; i++) - output.setTag(Integer.toString(i), outputEM[i].toNBT()); + if(outputEM[i]!=null) + output.setTag(Integer.toString(i), outputEM[i].toNBT()); aNBT.setTag("outputEM", output); } else { - aNBT.setInteger("outputStackCount", 0); + aNBT.setInteger("eOutputStackCount", 0); aNBT.removeTag("outputEM"); } @@ -400,18 +401,21 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt mOutputFluids[i] = GT_Utility.loadFluid(aNBT, "mOutputFluids" + i); } - final int outputLen = aNBT.getInteger("outputStackCount"); + final int outputLen = aNBT.getInteger("eOutputStackCount"); if (outputLen > 0) { outputEM = new cElementalInstanceStackMap[outputLen]; - for (int i = 0; i < outputEM.length; i++) - try { - outputEM[i] = cElementalInstanceStackMap.fromNBT( - aNBT.getCompoundTag("outputEM").getCompoundTag(Integer.toString(i))); - } catch (tElementalException e) { - if (DEBUG_MODE) e.printStackTrace(); - outputEM[i] = new cElementalInstanceStackMap(); + NBTTagCompound compound=aNBT.getCompoundTag("outputEM"); + for (int i = 0; i < outputEM.length; i++) { + if (compound.hasKey(Integer.toString(i))) { + try { + outputEM[i] = cElementalInstanceStackMap.fromNBT(compound.getCompoundTag(Integer.toString(i))); + } catch (tElementalException e) { + if (DEBUG_MODE) e.printStackTrace(); + outputEM[i] = null; + } } - } else outputEM = new cElementalInstanceStackMap[0]; + } + } else outputEM = null; NBTTagCompound paramI = aNBT.getCompoundTag("eParamsIn"); for (int i = 0; i < iParamsIn.length; i++) @@ -596,7 +600,7 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt explodeMultiblock(); if (outputEM != null) for (cElementalInstanceStackMap tree : outputEM) - if (tree.hasStacks()) explodeMultiblock(); + if (tree!=null && tree.hasStacks()) explodeMultiblock(); } if (eUncertainHatches.size() > 1) mMachine = false; @@ -1153,7 +1157,7 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt if (outputEM == null) return; float mass = 0; for (cElementalInstanceStackMap map : outputEM) - mass += map.getMass(); + if(map!=null) mass += map.getMass(); if (mass > 0) { if (eMufflerHatches.size() < 1) explodeMultiblock(); @@ -1285,7 +1289,7 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt explodeMultiblock(); if (outputEM != null) for (cElementalInstanceStackMap output : outputEM) - if (output.hasStacks()) explodeMultiblock(); + if (output!=null && output.hasStacks()) explodeMultiblock(); } catch (Exception e) { if (DEBUG_MODE) e.printStackTrace(); } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/MultiblockControl.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/MultiblockControl.java index daa5c7568b..930d81a21f 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/MultiblockControl.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/MultiblockControl.java @@ -6,9 +6,9 @@ package com.github.technus.tectech.thing.metaTileEntity.multi.base; public class MultiblockControl<T>{ private final int[] controls=new int[7]; - private final T[] values; + private final T values; - public MultiblockControl(T[] values, int EUt, int amperes, int requiredData, int effIncrease, int maxProgressTime){ + public MultiblockControl(T values, int EUt, int amperes, int requiredData, int effIncrease, int maxProgressTime){ this.values = values; controls[0]=EUt; controls[1]=amperes; @@ -19,7 +19,7 @@ public class MultiblockControl<T>{ controls[6]=Float.floatToIntBits(0); } - public MultiblockControl(T[] values, int EUt, int amperes, int requiredData, int effIncrease, int maxProgressTime, int pollutionToAdd, float excessMass){ + public MultiblockControl(T values, int EUt, int amperes, int requiredData, int effIncrease, int maxProgressTime, int pollutionToAdd, float excessMass){ this.values = values; controls[0]=EUt; controls[1]=amperes; @@ -30,7 +30,7 @@ public class MultiblockControl<T>{ controls[6]=Float.floatToIntBits(excessMass); } - public T[] getValues() { + public T getValue() { return values; } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Centrifuge.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Centrifuge.java index 91ef19744b..da81932189 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Centrifuge.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Centrifuge.java @@ -18,7 +18,7 @@ public class Behaviour_Centrifuge extends GT_MetaTileEntity_EM_machine.Behaviour } @Override - public MultiblockControl<cElementalInstanceStackMap> process(cElementalInstanceStackMap[] inputs, double[] parameters) { + public MultiblockControl<cElementalInstanceStackMap[]> process(cElementalInstanceStackMap[] inputs, double[] parameters) { return null; } } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Electrolyzer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Electrolyzer.java index c6b9306b94..fccca17ddc 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Electrolyzer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Electrolyzer.java @@ -18,7 +18,7 @@ public class Behaviour_Electrolyzer extends GT_MetaTileEntity_EM_machine.Behavio } @Override - public MultiblockControl<cElementalInstanceStackMap> process(cElementalInstanceStackMap[] inputs, double[] parameters) { + public MultiblockControl<cElementalInstanceStackMap[]> process(cElementalInstanceStackMap[] inputs, double[] parameters) { return null; } } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_ElectromagneticSeparator.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_ElectromagneticSeparator.java index 7a2ed9ffcf..26e9cacbf2 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_ElectromagneticSeparator.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_ElectromagneticSeparator.java @@ -18,7 +18,7 @@ public class Behaviour_ElectromagneticSeparator extends GT_MetaTileEntity_EM_mac } @Override - public MultiblockControl<cElementalInstanceStackMap> process(cElementalInstanceStackMap[] inputs, double[] parameters) { + public MultiblockControl<cElementalInstanceStackMap[]> process(cElementalInstanceStackMap[] inputs, double[] parameters) { return null; } } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Mixer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Mixer.java index 29d9c4a081..50acb59a85 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Mixer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Mixer.java @@ -18,7 +18,7 @@ public class Behaviour_Mixer extends GT_MetaTileEntity_EM_machine.Behaviour { } @Override - public MultiblockControl<cElementalInstanceStackMap> process(cElementalInstanceStackMap[] inputs, double[] parameters) { + public MultiblockControl<cElementalInstanceStackMap[]> process(cElementalInstanceStackMap[] inputs, double[] parameters) { return null; } } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_PrecisionLaser.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_PrecisionLaser.java index 0365f436c3..8a003e35b0 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_PrecisionLaser.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_PrecisionLaser.java @@ -18,7 +18,7 @@ public class Behaviour_PrecisionLaser extends GT_MetaTileEntity_EM_machine.Behav } @Override - public MultiblockControl<cElementalInstanceStackMap> process(cElementalInstanceStackMap[] inputs, double[] parameters) { + public MultiblockControl<cElementalInstanceStackMap[]> process(cElementalInstanceStackMap[] inputs, double[] parameters) { return null; } } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Recycler.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Recycler.java index e0fc30b469..7b922521d0 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Recycler.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Recycler.java @@ -18,7 +18,7 @@ public class Behaviour_Recycler extends GT_MetaTileEntity_EM_machine.Behaviour { } @Override - public MultiblockControl<cElementalInstanceStackMap> process(cElementalInstanceStackMap[] inputs, double[] parameters) { + public MultiblockControl<cElementalInstanceStackMap[]> process(cElementalInstanceStackMap[] inputs, double[] parameters) { return null; } } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java index 3a2a54ddb6..3de4bed480 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java @@ -4,8 +4,6 @@ import com.github.technus.tectech.CommonValues; import com.github.technus.tectech.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.metaTileEntity.IConstructable; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputElemental; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_OutputElemental; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.MultiblockControl; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; @@ -16,6 +14,7 @@ import net.minecraft.block.Block; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; +import java.util.BitSet; import java.util.HashMap; import static com.github.technus.tectech.Util.StructureBuilder; @@ -113,15 +112,12 @@ public class GT_MetaTileEntity_EM_machine extends GT_MetaTileEntity_MultiblockBa if(pointer>=0 && pointer<eInputHatches.size()) handles[4]=eInputHatches.get(pointer).getContainerHandler(); pointer= getParameterInInt(6,1)-1; if(pointer>=0 && pointer<eInputHatches.size()) handles[5]=eInputHatches.get(pointer).getContainerHandler(); + for(int i=0;i<5;i++) for(int j=i+1;j<6;j++) if (handles[i]!=null && handles[j]!=null && handles[i]==handles[j]) return false; - MultiblockControl<cElementalInstanceStackMap> control=currentBehaviour.process(handles,parameters); + MultiblockControl<cElementalInstanceStackMap[]> control=currentBehaviour.process(handles,parameters); if(control==null) return false; //update other pare - outputEM=control.getValues(); - cElementalInstanceStackMap nullFix=new cElementalInstanceStackMap(); - for(int i=0;i<outputEM.length;i++){ - if(outputEM[i]==null) outputEM[i]=nullFix; - } + outputEM=control.getValue(); mEUt=control.getEUT(); eAmpereFlow=control.getAmperage(); mMaxProgresstime=control.getMaxProgressTime(); @@ -164,50 +160,52 @@ public class GT_MetaTileEntity_EM_machine extends GT_MetaTileEntity_MultiblockBa @Override public void parametersOutAndStatusesWrite_EM(boolean machineBusy) { - double pointer; - for (int i = 4; i <= 6; i++) { - pointer= getParameterInInt(i,0); - if(Double.isNaN(pointer)) - setStatusOfParameterIn(i,0,STATUS_WRONG); - else if(pointer<0) - setStatusOfParameterIn(i,0,STATUS_TOO_LOW); - else if(pointer==0) - setStatusOfParameterIn(i,0,STATUS_LOW); - else if(pointer<=eInputHatches.size()) - setStatusOfParameterIn(i,0,STATUS_OK); - else setStatusOfParameterIn(i,0,STATUS_TOO_HIGH); - pointer= getParameterInInt(i,1); - if(Double.isNaN(pointer)) - setStatusOfParameterIn(i,1,STATUS_WRONG); - else if(pointer<0) - setStatusOfParameterIn(i,1,STATUS_TOO_LOW); - else if(pointer==0) - setStatusOfParameterIn(i,1,STATUS_LOW); - else if(pointer<=eInputHatches.size()) - setStatusOfParameterIn(i,1,STATUS_OK); - else setStatusOfParameterIn(i,1,STATUS_TOO_HIGH); + int pointer; + { + BitSet checkArray = new BitSet(); + for (int i = 4; i <= 6; i++) { + pointer = getParameterInInt(i, 0); + if (Double.isNaN(pointer)) setStatusOfParameterIn(i, 0, STATUS_WRONG); + else if (pointer <= 0) setStatusOfParameterIn(i, 0, STATUS_TOO_LOW); + //else if(pointer==0) + // setStatusOfParameterIn(i,0,STATUS_LOW); + else if (pointer <= eInputHatches.size()) { + if (checkArray.get(pointer)) { + setStatusOfParameterIn(i, 0, STATUS_WRONG); + } else { + setStatusOfParameterIn(i, 0, STATUS_OK); + checkArray.set(pointer); + } + } else setStatusOfParameterIn(i, 0, STATUS_TOO_HIGH); + pointer = getParameterInInt(i, 1); + if (Double.isNaN(pointer)) setStatusOfParameterIn(i, 1, STATUS_WRONG); + else if (pointer < 0) setStatusOfParameterIn(i, 1, STATUS_TOO_LOW); + else if (pointer == 0) setStatusOfParameterIn(i, 1, STATUS_LOW); + else if (pointer <= eInputHatches.size()) { + if (checkArray.get(pointer)) { + setStatusOfParameterIn(i, 1, STATUS_WRONG); + } else { + setStatusOfParameterIn(i, 1, STATUS_OK); + checkArray.set(pointer); + } + } else setStatusOfParameterIn(i, 1, STATUS_TOO_HIGH); + } } - for (int i = 7; i <= 9; i++) { - pointer= getParameterInInt(i,0); - if(Double.isNaN(pointer)) - setStatusOfParameterIn(i,0,STATUS_WRONG); - else if(pointer<0) - setStatusOfParameterIn(i,0,STATUS_TOO_LOW); - else if(pointer==0) - setStatusOfParameterIn(i,0,STATUS_LOW); - else if(pointer<=eOutputHatches.size()) - setStatusOfParameterIn(i,0,STATUS_OK); - else setStatusOfParameterIn(i,0,STATUS_TOO_HIGH); - pointer= getParameterInInt(i,1); - if(Double.isNaN(pointer)) - setStatusOfParameterIn(i,1,STATUS_WRONG); - else if(pointer<0) - setStatusOfParameterIn(i,1,STATUS_TOO_LOW); - else if(pointer==0) - setStatusOfParameterIn(i,1,STATUS_LOW); - else if(pointer<=eOutputHatches.size()) - setStatusOfParameterIn(i,1,STATUS_OK); - else setStatusOfParameterIn(i,1,STATUS_TOO_HIGH); + { + for (int i = 7; i <= 9; i++) { + pointer = getParameterInInt(i, 0); + if (Double.isNaN(pointer)) setStatusOfParameterIn(i, 0, STATUS_WRONG); + else if (pointer < 0) setStatusOfParameterIn(i, 0, STATUS_TOO_LOW); + else if (pointer == 0) setStatusOfParameterIn(i, 0, STATUS_LOW); + else if (pointer <= eOutputHatches.size()) setStatusOfParameterIn(i, 0, STATUS_OK); + else setStatusOfParameterIn(i, 0, STATUS_TOO_HIGH); + pointer = getParameterInInt(i, 1); + if (Double.isNaN(pointer)) setStatusOfParameterIn(i, 1, STATUS_WRONG); + else if (pointer < 0) setStatusOfParameterIn(i, 1, STATUS_TOO_LOW); + else if (pointer == 0) setStatusOfParameterIn(i, 1, STATUS_LOW); + else if (pointer <= eOutputHatches.size()) setStatusOfParameterIn(i, 1, STATUS_OK); + else setStatusOfParameterIn(i, 1, STATUS_TOO_HIGH); + } } } @@ -220,6 +218,6 @@ public class GT_MetaTileEntity_EM_machine extends GT_MetaTileEntity_MultiblockBa public static abstract class Behaviour { public abstract boolean setAndCheckParametersOutAndStatuses(GT_MetaTileEntity_EM_machine te, double[] parameters); - public abstract MultiblockControl<cElementalInstanceStackMap> process(cElementalInstanceStackMap[] inputs, double[] parameters); + public abstract MultiblockControl<cElementalInstanceStackMap[]> process(cElementalInstanceStackMap[] inputs, double[] parameters); } } |