diff options
author | Technus <daniel112092@gmail.com> | 2017-05-28 12:47:12 +0200 |
---|---|---|
committer | Technus <daniel112092@gmail.com> | 2017-05-28 12:47:12 +0200 |
commit | 9a4e959ec14a780b6f6fe5a9990af804d6689eab (patch) | |
tree | b4e07f54b0961c7af3b0b8b5934eb42275c1f221 | |
parent | d37b7bb680d8baf71a657655be18f3c0d679fc84 (diff) | |
download | GT5-Unofficial-9a4e959ec14a780b6f6fe5a9990af804d6689eab.tar.gz GT5-Unofficial-9a4e959ec14a780b6f6fe5a9990af804d6689eab.tar.bz2 GT5-Unofficial-9a4e959ec14a780b6f6fe5a9990af804d6689eab.zip |
Dequantization done?
5 files changed, 111 insertions, 25 deletions
diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalDefinition.java b/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalDefinition.java index 9e9b54cf0c..6e27486466 100644 --- a/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalDefinition.java +++ b/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalDefinition.java @@ -85,6 +85,7 @@ public abstract class cElementalDefinition implements iElementalDefinition { @Override public final boolean equals(Object obj) { + if(this==obj)return true; if (obj instanceof iElementalDefinition) return compareTo((iElementalDefinition) obj) == 0; if (obj instanceof iHasElementalDefinition) diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalInstanceStackMap.java b/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalInstanceStackMap.java index 52d8ad1e0c..6e1a0b8386 100644 --- a/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalInstanceStackMap.java +++ b/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalInstanceStackMap.java @@ -135,19 +135,19 @@ public final class cElementalInstanceStackMap implements Comparable<cElementalIn return false; } - public boolean removeAmount(boolean testOnly, cElementalDefinitionStack stack) { - final cElementalInstanceStack target = map.get(stack.definition); + public boolean removeAmount(boolean testOnly, iHasElementalDefinition stack) { + final cElementalInstanceStack target = map.get(stack.getDefinition()); if (target == null) return false; if (testOnly) - return target.amount >= stack.amount; + return target.amount >= stack.getAmount(); else { - final int diff = target.amount - stack.amount; + final int diff = target.amount - stack.getAmount(); if (diff > 0) { target.amount = diff; return true; } else if (diff == 0) { - map.remove(stack.definition); + map.remove(stack.getDefinition()); return true; } } @@ -169,12 +169,12 @@ public final class cElementalInstanceStackMap implements Comparable<cElementalIn return true; } - public boolean removeAllAmounts(boolean testOnly, cElementalDefinitionStack... stacks) { + public boolean removeAllAmounts(boolean testOnly, iHasElementalDefinition... stacks) { boolean test = true; - for (cElementalDefinitionStack stack : stacks) + for (iHasElementalDefinition stack : stacks) test &= removeAmount(true, stack); if (testOnly || !test) return test; - for (cElementalDefinitionStack stack : stacks) + for (iHasElementalDefinition stack : stacks) removeAmount(false, stack); return true; } @@ -406,7 +406,7 @@ public final class cElementalInstanceStackMap implements Comparable<cElementalIn } @Override - public int hashCode() {//Internal amounts should be also hashed + public int hashCode() {//Hash only definitions to compare contents not amounts or data int hash = -(map.size() << 4); for (cElementalInstanceStack s : map.values()) { hash += s.definition.hashCode(); diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalMutableDefinitionStackMap.java b/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalMutableDefinitionStackMap.java index 3b4870185e..70931016d7 100644 --- a/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalMutableDefinitionStackMap.java +++ b/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalMutableDefinitionStackMap.java @@ -105,19 +105,19 @@ public final class cElementalMutableDefinitionStackMap extends cElementalStackMa return false; } - public boolean removeAmount(boolean testOnly, cElementalDefinitionStack stack) { - final cElementalDefinitionStack target = map.get(stack.definition); + public boolean removeAmount(boolean testOnly, iHasElementalDefinition stack) { + final cElementalDefinitionStack target = map.get(stack.getDefinition()); if (target == null) return false; if (testOnly) - return target.amount >= stack.amount; + return target.amount >= stack.getAmount(); else { - final int diff = target.amount - stack.amount; + final int diff = target.amount - stack.getAmount(); if (diff > 0) { map.put(target.definition, new cElementalDefinitionStack(target.definition, diff)); return true; } else if (diff == 0) { - map.remove(stack.definition); + map.remove(stack.getDefinition()); return true; } } @@ -139,12 +139,12 @@ public final class cElementalMutableDefinitionStackMap extends cElementalStackMa return true; } - public boolean removeAllAmounts(boolean testOnly, cElementalDefinitionStack... stacks) { + public boolean removeAllAmounts(boolean testOnly, iHasElementalDefinition... stacks) { boolean test = true; - for (cElementalDefinitionStack stack : stacks) + for (iHasElementalDefinition stack : stacks) test &= removeAmount(true, stack); if (testOnly || !test) return test; - for (cElementalDefinitionStack stack : stacks) + for (iHasElementalDefinition stack : stacks) removeAmount(false, stack); return true; } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java index c53fa706b8..f32ecad3dd 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java @@ -1,16 +1,28 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.elementalMatter.classes.*; +import com.github.technus.tectech.elementalMatter.interfaces.iExchangeInfo; +import com.github.technus.tectech.elementalMatter.interfaces.iHasElementalDefinition; import com.github.technus.tectech.thing.block.QuantumGlassBlock; +import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputElemental; import com.github.technus.tectech.thing.metaTileEntity.iConstructible; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import net.minecraft.block.Block; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.oredict.OreDictionary; + +import java.util.ArrayList; import static com.github.technus.tectech.Util.StructureBuilder; +import static com.github.technus.tectech.elementalMatter.definitions.dAtomDefinition.refMass; +import static com.github.technus.tectech.elementalMatter.definitions.dAtomDefinition.refUnstableMass; import static com.github.technus.tectech.thing.casing.GT_Container_CasingsTT.sBlockCasingsTT; +import static gregtech.api.enums.GT_Values.V; /** * Created by danie_000 on 17.12.2016. @@ -55,10 +67,65 @@ public class GT_MetaTileEntity_EM_dequantizer extends GT_MetaTileEntity_Multiblo StructureBuilder(shape, blockType, blockMeta,1, 1, 0, getBaseMetaTileEntity()); } - //@Override - //public boolean EM_checkRecipe(ItemStack itemStack) { - // - //} + @Override + public boolean EM_checkRecipe(ItemStack itemStack) { + for (GT_MetaTileEntity_Hatch_InputElemental in : eInputHatches) { + cElementalInstanceStackMap map = in.getContainerHandler(); + for (cElementalInstanceStack stack : map.values()) { + iExchangeInfo info = stack.getDefinition().someAmountIntoFluidStack(); + if (info instanceof aFluidDequantizationInfo) { + if(map.removeAllAmounts(false,(iHasElementalDefinition) info.input())){ + mOutputFluids=new FluidStack[]{(FluidStack) info.output()}; + startRecipe((iHasElementalDefinition)info.input()); + return true; + } + } else { + info = stack.getDefinition().someAmountIntoItemsStack(); + if (info != null) { + if (info instanceof aItemDequantizationInfo) { + if(map.removeAllAmounts(false,(iHasElementalDefinition) info.input())){ + mOutputItems=new ItemStack[]{(ItemStack) info.output()}; + startRecipe((iHasElementalDefinition)info.input()); + return true; + } + } else if (info instanceof aOredictDequantizationInfo) { + if(map.removeAllAmounts(false,(iHasElementalDefinition) info.input())){ + ArrayList<ItemStack> items=OreDictionary.getOres(((aOredictDequantizationInfo) info).out); + if(items!=null && items.size()>0) { + mOutputItems = new ItemStack[]{ + items.get(0) + }; + startRecipe((iHasElementalDefinition) info.input()); + return true; + } + } + } + } + } + } + } + mEfficiencyIncrease = 0; + mMaxProgresstime = 0; + return false; + } + + private void startRecipe(iHasElementalDefinition from) { + mMaxProgresstime = 20; + mEfficiencyIncrease = 10000; + float mass = from.getMass(); + float euMult = mass / refMass; + eAmpereFlow = (int) Math.ceil(euMult); + if (mass > refUnstableMass) { + mEUt = (int) -V[9]; + } else { + mEUt = (int) -V[8]; + } + outputEM = new cElementalInstanceStackMap[]{ + from instanceof cElementalInstanceStack ? + new cElementalInstanceStackMap((cElementalInstanceStack) from) : + new cElementalInstanceStackMap(new cElementalInstanceStack(from.getDefinition(), from.getAmount())) + }; + } @Override public String[] getDescription() { diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_MultiblockBase_EM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_MultiblockBase_EM.java index bfd32d83b1..34ef275fab 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_MultiblockBase_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_MultiblockBase_EM.java @@ -743,10 +743,10 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt EU > maxEUinputMax || (euVar - 1) / maxEUinputMin + 1 > eMaxAmpereFlow) {// euVar==0? --> (euVar - 1) / maxEUinputMin + 1 = 1! if (TecTechConfig.DEBUG_MODE) { - TecTech.Logger.debug("OMG1 " + euVar + " " + getEUVar() + " " + (euVar > getEUVar())); - TecTech.Logger.debug("OMG2 " + EU + " " + maxEUinputMax + " " + (EU > maxEUinputMax)); - TecTech.Logger.debug("OMG3 " + euVar + " " + eMaxAmpereFlow); - TecTech.Logger.debug("OMG4 " + ((euVar - 1) / maxEUinputMin + 1) + " " + eMaxAmpereFlow + " " + ((euVar - 1) / maxEUinputMin + 1 > eMaxAmpereFlow)); + TecTech.Logger.debug("L1 " + euVar + " " + getEUVar() + " " + (euVar > getEUVar())); + TecTech.Logger.debug("L2 " + EU + " " + maxEUinputMax + " " + (EU > maxEUinputMax)); + TecTech.Logger.debug("L3 " + euVar + " " + eMaxAmpereFlow); + TecTech.Logger.debug("L4 " + ((euVar - 1) / maxEUinputMin + 1) + " " + eMaxAmpereFlow + " " + ((euVar - 1) / maxEUinputMin + 1 > eMaxAmpereFlow)); } return false; } @@ -799,6 +799,24 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt return GT_Utility.getTier(maxEUinputMin); } + //new Method + public final cElementalInstanceStackMap EMgetInputsClone(){ + cElementalInstanceStackMap in=new cElementalInstanceStackMap(); + for(GT_MetaTileEntity_Hatch_ElementalContainer hatch:eInputHatches){ + in.putUnifyAll(hatch.getContainerHandler()); + } + return in.hasStacks()?in:null; + } + + //new Method + public final cElementalInstanceStackMap EMgetOutputsClone(){ + cElementalInstanceStackMap out=new cElementalInstanceStackMap(); + for(GT_MetaTileEntity_Hatch_ElementalContainer hatch:eOutputHatches){ + out.putUnifyAll(hatch.getContainerHandler()); + } + return out.hasStacks()?out:null; + } + @Override public final void stopMachine() { mOutputItems = null; |