diff options
author | Technus <daniel112092@gmail.com> | 2017-08-19 15:12:18 +0200 |
---|---|---|
committer | Technus <daniel112092@gmail.com> | 2017-08-19 15:13:34 +0200 |
commit | 41a48a7b9019814430dbf582a4e484b55c924e45 (patch) | |
tree | 4856ecf64453ae909963c6eaeacd671e64cfd355 /src/main/java/com | |
parent | ccc5ddf3b6eab0be2946b7cd32f57e4bd5d7bb8b (diff) | |
download | GT5-Unofficial-41a48a7b9019814430dbf582a4e484b55c924e45.tar.gz GT5-Unofficial-41a48a7b9019814430dbf582a4e484b55c924e45.tar.bz2 GT5-Unofficial-41a48a7b9019814430dbf582a4e484b55c924e45.zip |
Implement scanner
Diffstat (limited to 'src/main/java/com')
5 files changed, 276 insertions, 34 deletions
diff --git a/src/main/java/com/github/technus/tectech/recipe/TT_recipe.java b/src/main/java/com/github/technus/tectech/recipe/TT_recipe.java index 5b18af2bb0..2b9f917418 100644 --- a/src/main/java/com/github/technus/tectech/recipe/TT_recipe.java +++ b/src/main/java/com/github/technus/tectech/recipe/TT_recipe.java @@ -1,9 +1,10 @@ package com.github.technus.tectech.recipe; import com.github.technus.tectech.auxiliary.TecTechConfig; -import com.github.technus.tectech.elementalMatter.classes.cElementalDefinitionStack; +import com.github.technus.tectech.elementalMatter.classes.cElementalDefinition; import com.github.technus.tectech.elementalMatter.classes.cElementalDefinitionStackMap; import com.github.technus.tectech.elementalMatter.classes.cElementalInstanceStackMap; +import com.github.technus.tectech.elementalMatter.interfaces.iElementalDefinition; import cpw.mods.fml.common.registry.GameRegistry; import gregtech.api.util.GT_Recipe; import net.minecraft.item.ItemStack; @@ -147,7 +148,8 @@ public class TT_recipe extends GT_Recipe { } public static class GT_Recipe_MapTT extends GT_Recipe.GT_Recipe_Map { - public static GT_Recipe_MapTT sResearchableFakeRecipes =new GT_Recipe_MapTT(new HashSet(30), "gt.recipe.researchStation", "Research station", (String)null, "gregtech:textures/gui/multimachines/ResearchFake", 1, 1, 1, 0, 1, "", 1, "", true, false);//nei to false - using custom handler + public static GT_Recipe_MapTT sResearchableFakeRecipes =new GT_Recipe_MapTT(new HashSet<GT_Recipe>(32), "gt.recipe.researchStation", "Research station", (String)null, "gregtech:textures/gui/multimachines/ResearchFake", 1, 1,1,0,1,"", 1, "", true, false);//nei to false - using custom handler + public static GT_Recipe_MapTT sScannableFakeRecipes = new GT_Recipe_MapTT(new HashSet<GT_Recipe>(32),"gt.recipe.em_scanner","EM Scanner Research",(String)null,"gregtech:textures/gui/multimachines/ResearchFake",1,1,1,0,1,"",1,"",true,false); public GT_Recipe_MapTT(Collection<GT_Recipe> aRecipeList, String aUnlocalizedName, String aLocalName, String aNEIName, String aNEIGUIPath, int aUsualInputCount, int aUsualOutputCount, int aMinimalInputItems, int aMinimalInputFluids, int aAmperage, String aNEISpecialValuePre, int aNEISpecialValueMultiplier, String aNEISpecialValuePost, boolean aShowVoltageAmperageInNEI, boolean aNEIAllowed) { super(aRecipeList, aUnlocalizedName, aLocalName, aNEIName, aNEIGUIPath, aUsualInputCount, aUsualOutputCount, aMinimalInputItems, aMinimalInputFluids, aAmperage, aNEISpecialValuePre, aNEISpecialValueMultiplier, aNEISpecialValuePost, aShowVoltageAmperageInNEI, aNEIAllowed); @@ -174,42 +176,48 @@ public class TT_recipe extends GT_Recipe { } public static class TT_EMRecipe extends TT_recipe{ - public final cElementalDefinitionStack mResearchEM; + public final iElementalDefinition mResearchEM; + public final GT_Recipe scannerRecipe; - public TT_EMRecipe(boolean aOptimize, cElementalDefinitionStack researchEM, + public TT_EMRecipe(boolean aOptimize, GT_Recipe scannerRecipe, iElementalDefinition researchEM, ItemStack[] aInputs, ItemStack[] aOutputs, Object aSpecialItems, FluidStack[] aFluidInputs, int aDuration, int aEUt, int aSpecialValue, cElementalDefinitionStackMap[] in, cElementalDefinitionStackMap[] out, cElementalDefinitionStackMap[] catalyst, AdditionalCheck check) { super(aOptimize, aInputs, aOutputs, aSpecialItems, null, aFluidInputs, null, aDuration, aEUt, aSpecialValue, in, out, catalyst, check); mResearchEM=researchEM; + this.scannerRecipe=scannerRecipe; } - public TT_EMRecipe(boolean aOptimize, cElementalDefinitionStack researchEM, + public TT_EMRecipe(boolean aOptimize, GT_Recipe scannerRecipe, iElementalDefinition researchEM, ItemStack[] aInputs, ItemStack[] aOutputs, Object aSpecialItems, FluidStack[] aFluidInputs, int aDuration, int aEUt, int aSpecialValue, cElementalDefinitionStackMap[] in) { - this(aOptimize, researchEM, aInputs, aOutputs, aSpecialItems, aFluidInputs, aDuration, aEUt, aSpecialValue, in, null, null,null); + this(aOptimize, scannerRecipe, researchEM, aInputs, aOutputs, aSpecialItems, aFluidInputs, aDuration, aEUt, aSpecialValue, in, null, null,null); } } public static class TT_Recipe_Map_EM<T extends TT_EMRecipe> { - public static TT_Recipe_Map_EM<TT_EMRecipe> sCrafterRecipesEM = new TT_Recipe_Map_EM<>(); - public static TT_Recipe_Map_EM<TT_EMRecipe> sMachineRecipesEM = new TT_Recipe_Map_EM<>(); + public static TT_Recipe_Map_EM<TT_EMRecipe> sCrafterRecipesEM = new TT_Recipe_Map_EM<>("EM Crafter Recipes","gt.recipe.em_crafter",null); + public static TT_Recipe_Map_EM<TT_EMRecipe> sMachineRecipesEM = new TT_Recipe_Map_EM<>("EM Machinert Recipe","gt.recipe.em_machinery",null); - private final HashMap<cElementalDefinitionStack,T> mRecipeMap; + private final HashMap<iElementalDefinition,T> mRecipeMap; + public final String mNEIName,mUnlocalizedName,mNEIGUIPath; - public TT_Recipe_Map_EM(){ + public TT_Recipe_Map_EM(String mNEIName,String mUnlocalizedName,String mNEIGUIPath){ mRecipeMap =new HashMap<>(16); + this.mNEIName=mNEIName; + this.mUnlocalizedName=mUnlocalizedName; + this.mNEIGUIPath=mNEIGUIPath; } - public T findRecipe(cElementalDefinitionStack stack){ + public T findRecipe(iElementalDefinition stack){ return mRecipeMap.get(stack); } public T findRecipe(ItemStack dataHandler){ if(dataHandler==null || dataHandler.stackTagCompound==null) return null; try { - return mRecipeMap.get(cElementalDefinitionStack.fromNBT(dataHandler.stackTagCompound.getCompoundTag(E_RECIPE_ID))); + return mRecipeMap.get(cElementalDefinition.fromNBT(dataHandler.stackTagCompound.getCompoundTag(E_RECIPE_ID))); }catch (Exception e){ if (TecTechConfig.DEBUG_MODE) e.printStackTrace(); return null; diff --git a/src/main/java/com/github/technus/tectech/recipe/TT_recipeAdder.java b/src/main/java/com/github/technus/tectech/recipe/TT_recipeAdder.java index 57d5390af6..6d7060b4fb 100644 --- a/src/main/java/com/github/technus/tectech/recipe/TT_recipeAdder.java +++ b/src/main/java/com/github/technus/tectech/recipe/TT_recipeAdder.java @@ -3,6 +3,8 @@ package com.github.technus.tectech.recipe; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.elementalMatter.classes.cElementalDefinitionStack; import com.github.technus.tectech.elementalMatter.classes.cElementalDefinitionStackMap; +import com.github.technus.tectech.elementalMatter.interfaces.iElementalDefinition; +import com.github.technus.tectech.thing.item.DefinitionContainer_EM; import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_crafter; import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_machine; import gregtech.api.enums.ItemList; @@ -54,7 +56,7 @@ public class TT_recipeAdder extends GT_RecipeAdder { } for(ItemStack tItem : aInputs){ if(tItem==null){ - TecTech.Logger.error("addAssemblingLineRecipe "+aResearchItem.getDisplayName()+" --> "+aOutput.getUnlocalizedName()+" there is some null item in that recipe"); + TecTech.Logger.error("addEMmachineRecipe "+aResearchItem.getDisplayName()+" --> "+aOutput.getUnlocalizedName()+" there is some null item in that recipe"); } } if(researchAmperage<=0) researchAmperage=1; @@ -85,7 +87,7 @@ public class TT_recipeAdder extends GT_RecipeAdder { } public static boolean addScannableEMmachineRecipe( - cElementalDefinitionStack aResearchEM, int totalComputationRequired, int computationRequiredPerSec, int researchEUt, int researchAmperage, + iElementalDefinition aResearchEM, int totalComputationRequired, int computationRequiredPerSec, int researchEUt, int researchAmperage, ItemStack[] aInputs, FluidStack[] aFluidInputs, cElementalDefinitionStackMap[] eInputs, ItemStack aOutput, int machineDuration, int machineEUt, int machineAmperage) { if(aInputs==null)aInputs=nullItem; @@ -95,21 +97,23 @@ public class TT_recipeAdder extends GT_RecipeAdder { } for(ItemStack tItem : aInputs){ if(tItem==null){ - TecTech.Logger.error("addAssemblingLineRecipe "+aResearchEM+" --> "+aOutput.getUnlocalizedName()+" there is some null item in that recipe"); + TecTech.Logger.error("addEMmachineRecipe "+aResearchEM+" --> "+aOutput.getUnlocalizedName()+" there is some null item in that recipe"); } } if(researchAmperage<=0) researchAmperage=1; else if(researchAmperage > Short.MAX_VALUE) researchAmperage=Short.MAX_VALUE; if(computationRequiredPerSec<=0) computationRequiredPerSec=1; else if(computationRequiredPerSec > Short.MAX_VALUE) computationRequiredPerSec=Short.MAX_VALUE; - //todo replace //TT_recipe.GT_Recipe_MapTT.sResearchableFakeRecipes.addFakeRecipe(false, new ItemStack[]{aResearchEM}, new ItemStack[]{aOutput}, new ItemStack[]{ItemList.Tool_DataOrb.getWithName(1L, "Writes Research result for "+ GT_MetaTileEntity_EM_research.machine)}, null, null, totalComputationRequired, researchEUt, researchAmperage|(computationRequiredPerSec<<16)); - TT_recipe.TT_Recipe_Map_EM.sMachineRecipesEM.add(new TT_recipe.TT_EMRecipe(false,aResearchEM,aInputs,new ItemStack[]{aOutput},new ItemStack[]{ItemList.Tool_DataOrb.getWithName(1L, "Reads Research result")}, + ItemStack placeholder=new ItemStack(DefinitionContainer_EM.INSTANCE); + DefinitionContainer_EM.setContent(placeholder,new cElementalDefinitionStackMap(new cElementalDefinitionStack(aResearchEM,1))); + GT_Recipe thisRecipe=TT_recipe.GT_Recipe_MapTT.sScannableFakeRecipes.addFakeRecipe(false, new ItemStack[]{placeholder}, new ItemStack[]{aOutput}, new ItemStack[]{ItemList.Tool_DataOrb.getWithName(1L, "Writes Research result for "+ GT_MetaTileEntity_EM_machine.machine)}, null, null, totalComputationRequired, researchEUt, researchAmperage|(computationRequiredPerSec<<16)); + TT_recipe.TT_Recipe_Map_EM.sMachineRecipesEM.add(new TT_recipe.TT_EMRecipe(false,thisRecipe,aResearchEM,aInputs,new ItemStack[]{aOutput},new ItemStack[]{ItemList.Tool_DataOrb.getWithName(1L, "Reads Research result")}, aFluidInputs,machineDuration,machineEUt,machineAmperage,eInputs)); return true; } public static boolean addScannableEMcrafterRecipe( - cElementalDefinitionStack aResearchEM, int totalComputationRequired, int computationRequiredPerSec, int researchEUt, int researchAmperage, + iElementalDefinition aResearchEM, int totalComputationRequired, int computationRequiredPerSec, int researchEUt, int researchAmperage, cElementalDefinitionStackMap[] eInputs, cElementalDefinitionStackMap[] catalyst, TT_recipe.AdditionalCheck check, ItemStack aOutput, int crafterDuration, int crafterEUt, int crafterAmperage) { if ((aResearchEM==null)||(totalComputationRequired<=0)||(aOutput == null)) { @@ -119,8 +123,10 @@ public class TT_recipeAdder extends GT_RecipeAdder { else if(researchAmperage > Short.MAX_VALUE) researchAmperage=Short.MAX_VALUE; if(computationRequiredPerSec<=0) computationRequiredPerSec=1; else if(computationRequiredPerSec > Short.MAX_VALUE) computationRequiredPerSec=Short.MAX_VALUE; - //todo replace //TT_recipe.GT_Recipe_MapTT.sResearchableFakeRecipes.addFakeRecipe(false, new ItemStack[]{aResearchEM}, new ItemStack[]{aOutput}, new ItemStack[]{ItemList.Tool_DataOrb.getWithName(1L, "Writes Research result for "+GT_MetaTileEntity_EM_research.crafter)}, null, null, totalComputationRequired, researchEUt, researchAmperage|(computationRequiredPerSec<<16)); - TT_recipe.TT_Recipe_Map_EM.sCrafterRecipesEM.add(new TT_recipe.TT_EMRecipe(false,aResearchEM,null,new ItemStack[]{aOutput},new ItemStack[]{ItemList.Tool_DataOrb.getWithName(1L, "Reads Research result")}, + ItemStack placeholder=new ItemStack(DefinitionContainer_EM.INSTANCE); + DefinitionContainer_EM.setContent(placeholder,new cElementalDefinitionStackMap(new cElementalDefinitionStack(aResearchEM,1))); + GT_Recipe thisRecipe=TT_recipe.GT_Recipe_MapTT.sScannableFakeRecipes.addFakeRecipe(false, new ItemStack[]{placeholder}, new ItemStack[]{aOutput}, new ItemStack[]{ItemList.Tool_DataOrb.getWithName(1L, "Writes Research result for "+GT_MetaTileEntity_EM_crafter.crafter)}, null, null, totalComputationRequired, researchEUt, researchAmperage|(computationRequiredPerSec<<16)); + TT_recipe.TT_Recipe_Map_EM.sCrafterRecipesEM.add(new TT_recipe.TT_EMRecipe(false,thisRecipe,aResearchEM,null,new ItemStack[]{aOutput},new ItemStack[]{ItemList.Tool_DataOrb.getWithName(1L, "Reads Research result")}, null,crafterDuration,crafterEUt,crafterAmperage,eInputs,null,catalyst,check)); return true; } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java index 90042f351f..de29a4f96e 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java @@ -46,6 +46,7 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB private GT_Recipe.GT_Recipe_AssemblyLine tRecipe; private TT_recipe.TT_assLineRecipe aRecipe; private String machineType; + private ItemStack holdItem; private long computationRemaining,computationRequired; //region structure @@ -114,6 +115,9 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB super.saveNBTData(aNBT); aNBT.setLong("eComputationRemaining",computationRemaining); aNBT.setLong("eComputationRequired",computationRequired); + if(holdItem!=null) + aNBT.setTag("eHold", holdItem.writeToNBT(new NBTTagCompound())); + else aNBT.removeTag("eHold"); } @Override @@ -121,6 +125,9 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB super.loadNBTData(aNBT); computationRemaining=aNBT.getLong("eComputationRemaining"); computationRequired=aNBT.getLong("eComputationRequired"); + if(aNBT.hasKey("eHold")) + holdItem =ItemStack.loadItemStackFromNBT(aNBT.getCompoundTag("eHold")); + else holdItem=null; } @Override @@ -129,18 +136,17 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB if(computationRemaining>0) { aRecipe=null; tRecipe=null; - if (!eHolders.isEmpty() && eHolders.get(0).mInventory[0] != null) { - ItemStack researchItem = eHolders.get(0).mInventory[0]; + if (holdItem != null) { if (ItemList.Tool_DataStick.isStackEqual(mInventory[1], false, true)) { for (GT_Recipe.GT_Recipe_AssemblyLine tRecipe : GT_Recipe.GT_Recipe_AssemblyLine.sAssemblylineRecipes) { - if (GT_Utility.areStacksEqual(tRecipe.mResearchItem, researchItem, true)) { + if (GT_Utility.areStacksEqual(tRecipe.mResearchItem, holdItem, true)) { this.tRecipe = tRecipe; break; } } } else if (ItemList.Tool_DataOrb.isStackEqual(mInventory[1], false, true)) { for (TT_recipe.TT_assLineRecipe assRecipeTT : TT_recipe.TT_Recipe_Map.sMachineRecipes.recipeList()) { - if (GT_Utility.areStacksEqual(assRecipeTT.mResearchItem, researchItem, true)) { + if (GT_Utility.areStacksEqual(assRecipeTT.mResearchItem, holdItem, true)) { this.aRecipe = assRecipeTT; machineType = machine; break; @@ -148,7 +154,7 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB } if (aRecipe == null) { for (TT_recipe.TT_assLineRecipe assRecipeTT : TT_recipe.TT_Recipe_Map.sCrafterRecipes.recipeList()) { - if (GT_Utility.areStacksEqual(assRecipeTT.mResearchItem, researchItem, true)) { + if (GT_Utility.areStacksEqual(assRecipeTT.mResearchItem, holdItem, true)) { this.aRecipe = assRecipeTT; machineType = crafter; break; @@ -158,6 +164,7 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB } } if (tRecipe == null && aRecipe == null) { + holdItem=null; computationRequired=computationRemaining=0; mMaxProgresstime = 0; mEfficiencyIncrease = 0; @@ -172,14 +179,14 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB tRecipe=null; aRecipe=null; if(!eHolders.isEmpty() && eHolders.get(0).mInventory[0]!=null) { - ItemStack researchItem = eHolders.get(0).mInventory[0]; + holdItem = eHolders.get(0).mInventory[0].copy(); if(ItemList.Tool_DataStick.isStackEqual(itemStack, false, true)) { for (GT_Recipe.GT_Recipe_AssemblyLine assRecipe : GT_Recipe.GT_Recipe_AssemblyLine.sAssemblylineRecipes) { - if (GT_Utility.areStacksEqual(assRecipe.mResearchItem, researchItem, true)) { + if (GT_Utility.areStacksEqual(assRecipe.mResearchItem, holdItem, true)) { this.tRecipe = assRecipe; //if found for (GT_Recipe ttRecipe : TT_recipe.GT_Recipe_MapTT.sResearchableFakeRecipes.mRecipeList) { - if (GT_Utility.areStacksEqual(ttRecipe.mInputs[0], researchItem, true)) { + if (GT_Utility.areStacksEqual(ttRecipe.mInputs[0], holdItem, true)) { computationRequired = computationRemaining = ttRecipe.mDuration * 20L; mMaxProgresstime = 20; mEfficiencyIncrease = 10000; @@ -194,12 +201,12 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB } }else if(ItemList.Tool_DataOrb.isStackEqual(itemStack, false, true)){ for (TT_recipe.TT_assLineRecipe assRecipeTT:TT_recipe.TT_Recipe_Map.sMachineRecipes.recipeList()){ - if (GT_Utility.areStacksEqual(assRecipeTT.mResearchItem, researchItem, true)) { + if (GT_Utility.areStacksEqual(assRecipeTT.mResearchItem, holdItem, true)) { this.aRecipe = assRecipeTT; machineType=machine; //if found for (GT_Recipe ttRecipe : TT_recipe.GT_Recipe_MapTT.sResearchableFakeRecipes.mRecipeList) { - if (GT_Utility.areStacksEqual(ttRecipe.mInputs[0], researchItem, true)) { + if (GT_Utility.areStacksEqual(ttRecipe.mInputs[0], holdItem, true)) { computationRequired = computationRemaining = ttRecipe.mDuration * 20L; mMaxProgresstime = 20; mEfficiencyIncrease = 10000; @@ -213,12 +220,12 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB } } for (TT_recipe.TT_assLineRecipe assRecipeTT:TT_recipe.TT_Recipe_Map.sCrafterRecipes.recipeList()){ - if (GT_Utility.areStacksEqual(assRecipeTT.mResearchItem, researchItem, true)) { + if (GT_Utility.areStacksEqual(assRecipeTT.mResearchItem, holdItem, true)) { this.aRecipe = assRecipeTT; machineType=crafter; //if found for (GT_Recipe ttRecipe : TT_recipe.GT_Recipe_MapTT.sResearchableFakeRecipes.mRecipeList) { - if (GT_Utility.areStacksEqual(ttRecipe.mInputs[0], researchItem, true)) { + if (GT_Utility.areStacksEqual(ttRecipe.mInputs[0], holdItem, true)) { computationRequired = computationRemaining = ttRecipe.mDuration * 20L; mMaxProgresstime = 20; mEfficiencyIncrease = 10000; @@ -233,6 +240,7 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB } } } + holdItem=null; computationRequired=computationRemaining=0; mMaxProgresstime=0; mEfficiencyIncrease = 0; @@ -291,7 +299,7 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB eHolders.get(0).getBaseMetaTileEntity().setActive(false); eHolders.get(0).mInventory[0] = null; - mInventory[1].setStackDisplayName(GT_LanguageManager.getTranslation(tRecipe.mOutput.getDisplayName()) + ' ' + machineType +" Construction Data"); + mInventory[1].setStackDisplayName(GT_LanguageManager.getTranslation(aRecipe.mOutputs[0].getDisplayName()) + ' ' + machineType +" Construction Data"); NBTTagCompound tNBT = mInventory[1].getTagCompound();//code above makes it not null tNBT.setString("eMachineType", machineType); @@ -303,6 +311,7 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB computationRequired=computationRemaining=0; tRecipe=null; aRecipe=null; + holdItem=null; } @Override @@ -345,6 +354,10 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB super.stopMachine(); for (GT_MetaTileEntity_Hatch_Holder r : eHolders) r.getBaseMetaTileEntity().setActive(false); + computationRequired=computationRemaining=0; + tRecipe=null; + aRecipe=null; + holdItem=null; } //NEW METHOD @@ -372,6 +385,7 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB return 1; } + @Override public String[] getInfoData() { long storedEnergy = 0; long maxEnergy = 0; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java index c1435de900..535cc53c0f 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java @@ -1,16 +1,32 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.elementalMatter.classes.cElementalDefinitionStack; +import com.github.technus.tectech.elementalMatter.classes.cElementalInstanceStack; +import com.github.technus.tectech.elementalMatter.classes.cElementalInstanceStackMap; +import com.github.technus.tectech.recipe.TT_recipe; import com.github.technus.tectech.thing.block.QuantumGlassBlock; +import com.github.technus.tectech.thing.block.QuantumStuffBlock; import com.github.technus.tectech.thing.metaTileEntity.IConstructable; +import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; +import gregtech.api.enums.ItemList; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; +import gregtech.api.util.GT_LanguageManager; +import gregtech.api.util.GT_Recipe; import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; import net.minecraftforge.common.util.ForgeDirection; import static com.github.technus.tectech.Util.StructureBuilder; +import static com.github.technus.tectech.Util.VN; +import static com.github.technus.tectech.elementalMatter.definitions.cPrimitiveDefinition.nbtE__; +import static com.github.technus.tectech.recipe.TT_recipe.E_RECIPE_ID; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -18,6 +34,10 @@ import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBloc * Created by danie_000 on 17.12.2016. */ public class GT_MetaTileEntity_EM_scanner extends GT_MetaTileEntity_MultiblockBase_EM implements IConstructable { + private TT_recipe.TT_EMRecipe.TT_EMRecipe eRecipe; + private cElementalDefinitionStack objectResearched; + private String machineType; + private long computationRemaining,computationRequired; //region structure private static final String[][] shape = new String[][]{ @@ -88,6 +108,27 @@ public class GT_MetaTileEntity_EM_scanner extends GT_MetaTileEntity_MultiblockBa } @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setLong("eComputationRemaining",computationRemaining); + aNBT.setLong("eComputationRequired",computationRequired); + if(objectResearched!=null) + aNBT.setTag("eObject",objectResearched.toNBT()); + else aNBT.removeTag("eObject"); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + computationRemaining=aNBT.getLong("eComputationRemaining"); + computationRequired=aNBT.getLong("eComputationRequired"); + if(aNBT.hasKey("eObject")) { + objectResearched = cElementalDefinitionStack.fromNBT(aNBT.getCompoundTag("eObject")); + if(objectResearched.definition==nbtE__) objectResearched=null; + }else objectResearched=null; + } + + @Override public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { if(aBaseMetaTileEntity.isActive() && (aTick & 0x2)==0 && aBaseMetaTileEntity.isClientSide()){ int xDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetX*3; @@ -96,4 +137,174 @@ public class GT_MetaTileEntity_EM_scanner extends GT_MetaTileEntity_MultiblockBa aBaseMetaTileEntity.getWorld().markBlockRangeForRenderUpdate(xDir,yDir,zDir,xDir,yDir,zDir); } } + + @Override + protected void EM_onFirstTick() { + if(getBaseMetaTileEntity().isClientSide()) return; + if(computationRemaining>0) { + eRecipe=null; + if (objectResearched!=null) { + if(ItemList.Tool_DataOrb.isStackEqual(mInventory[1], false, true)) { + eRecipe = TT_recipe.TT_Recipe_Map_EM.sMachineRecipesEM.findRecipe(objectResearched.definition); + if(eRecipe!=null) { + machineType=GT_MetaTileEntity_EM_machine.machine; + } else { + eRecipe = TT_recipe.TT_Recipe_Map_EM.sCrafterRecipesEM.findRecipe(objectResearched.definition); + if (eRecipe != null) { + machineType = GT_MetaTileEntity_EM_crafter.crafter; + } + } + } + } + if (eRecipe == null) { + quantumStuff(false); + objectResearched=null; + computationRequired=computationRemaining=0; + mMaxProgresstime = 0; + mEfficiencyIncrease = 0; + } else quantumStuff(true); + } + } + + @Override + public boolean EM_checkRecipe(ItemStack itemStack) { + eRecipe=null; + if(!eInputHatches.isEmpty() && eInputHatches.get(0).getContainerHandler().hasStacks() && !eOutputHatches.isEmpty()) { + cElementalInstanceStackMap researchEM = eInputHatches.get(0).getContainerHandler(); + if(ItemList.Tool_DataOrb.isStackEqual(itemStack, false, true)) { + GT_Recipe scannerRecipe=null; + for(cElementalInstanceStack stackEM:researchEM.values()){ + eRecipe = TT_recipe.TT_Recipe_Map_EM.sMachineRecipesEM.findRecipe(stackEM.definition); + if(eRecipe!=null) { + scannerRecipe=eRecipe.scannerRecipe; + machineType=GT_MetaTileEntity_EM_machine.machine; + objectResearched=new cElementalDefinitionStack(stackEM.definition,1); + //cleanMass(objectResearched.getMass()); + researchEM.remove(objectResearched.definition); + break; + } + eRecipe = TT_recipe.TT_Recipe_Map_EM.sCrafterRecipesEM.findRecipe(stackEM.definition); + if(eRecipe!=null) { + scannerRecipe=eRecipe.scannerRecipe; + machineType=GT_MetaTileEntity_EM_crafter.crafter; + objectResearched=new cElementalDefinitionStack(stackEM.definition,1); + //cleanMass(objectResearched.getMass()); + researchEM.remove(objectResearched.definition); + break; + } + //todo implement molecular in depth info scan + cleanInstanceStack(stackEM); + researchEM.remove(stackEM.definition); + } + if(eRecipe!=null && scannerRecipe!=null){//make sure it werks + computationRequired = computationRemaining = scannerRecipe.mDuration * 20L; + mMaxProgresstime = 20; + mEfficiencyIncrease = 10000; + eRequiredData = (short) (scannerRecipe.mSpecialValue >>> 16); + eAmpereFlow = (short) (scannerRecipe.mSpecialValue & 0xFFFF); + mEUt = scannerRecipe.mEUt; + quantumStuff(true); + return true; + } + } + } + quantumStuff(false); + objectResearched=null; + computationRequired=computationRemaining=0; + mMaxProgresstime=0; + mEfficiencyIncrease = 0; + return false; + } + + @Override + public void EM_outputFunction() { + if (eRecipe != null && ItemList.Tool_DataOrb.isStackEqual(mInventory[1], false, true)){ + + mInventory[1].setStackDisplayName(GT_LanguageManager.getTranslation(eRecipe.mOutputs[0].getDisplayName()) + ' ' + machineType +" Construction Data"); + NBTTagCompound tNBT = mInventory[1].getTagCompound();//code above makes it not null + + tNBT.setString("eMachineType", machineType); + tNBT.setTag(E_RECIPE_ID, objectResearched.toNBT()); + tNBT.setString("author", EnumChatFormatting.BLUE + "Tec" + EnumChatFormatting.DARK_BLUE + "Tech" + EnumChatFormatting.WHITE + ' ' + machineType+ " EM Recipe Generator"); + } + quantumStuff(false); + objectResearched=null; + computationRequired=computationRemaining=0; + } + + @Override + public int getInventoryStackLimit() { + return 1; + } + + @Override + public String[] getInfoData() { + long storedEnergy = 0; + long maxEnergy = 0; + for (GT_MetaTileEntity_Hatch_Energy tHatch : mEnergyHatches) { + if (isValidMetaTileEntity(tHatch)) { + storedEnergy += tHatch.getBaseMetaTileEntity().getStoredEU(); + maxEnergy += tHatch.getBaseMetaTileEntity().getEUCapacity(); + } + } + for (GT_MetaTileEntity_Hatch_EnergyMulti tHatch : eEnergyMulti) { + if (isValidMetaTileEntity(tHatch)) { + storedEnergy += tHatch.getBaseMetaTileEntity().getStoredEU(); + maxEnergy += tHatch.getBaseMetaTileEntity().getEUCapacity(); + } + } + + return new String[]{ + "Energy Hatches:", + EnumChatFormatting.GREEN + Long.toString(storedEnergy) + EnumChatFormatting.RESET + " EU / " + + EnumChatFormatting.YELLOW + Long.toString(maxEnergy) + EnumChatFormatting.RESET + " EU", + (mEUt <= 0 ? "Probably uses: " : "Probably makes: ") + + EnumChatFormatting.RED + Integer.toString(Math.abs(mEUt)) + EnumChatFormatting.RESET + " EU/t at " + + EnumChatFormatting.RED + eAmpereFlow + EnumChatFormatting.RESET + " A", + "Tier Rating: " + EnumChatFormatting.YELLOW + VN[getMaxEnergyInputTier()] + EnumChatFormatting.RESET + " / " + EnumChatFormatting.GREEN + VN[getMinEnergyInputTier()] + EnumChatFormatting.RESET + + " Amp Rating: " + EnumChatFormatting.GREEN + eMaxAmpereFlow + EnumChatFormatting.RESET + " A", + "Problems: " + EnumChatFormatting.RED + (getIdealStatus() - getRepairStatus()) + EnumChatFormatting.RESET + + " Efficiency: " + EnumChatFormatting.YELLOW + Float.toString(mEfficiency / 100.0F) + EnumChatFormatting.RESET + " %", + "PowerPass: " + EnumChatFormatting.BLUE + ePowerPass + EnumChatFormatting.RESET + + " SafeVoid: " + EnumChatFormatting.BLUE + eSafeVoid, + "Computation Available: " + EnumChatFormatting.GREEN + eAvailableData + EnumChatFormatting.RESET, + "Computation Remaining:", + EnumChatFormatting.GREEN + Long.toString(computationRemaining / 20L) + EnumChatFormatting.RESET + " / " + + EnumChatFormatting.YELLOW + Long.toString(computationRequired / 20L) + }; + } + + @Override + public void onRemoval() { + super.onRemoval(); + quantumStuff(false); + } + + @Override + public void stopMachine() { + super.stopMachine(); + computationRequired=computationRemaining=0; + objectResearched=null; + quantumStuff(false); + + } + + private void quantumStuff(boolean shouldExist){ + IGregTechTileEntity base=getBaseMetaTileEntity(); + if(base!=null && base.getWorld()!=null) { + int xDir = ForgeDirection.getOrientation(base.getBackFacing()).offsetX * 3; + int yDir = ForgeDirection.getOrientation(base.getBackFacing()).offsetY * 3; + int zDir = ForgeDirection.getOrientation(base.getBackFacing()).offsetZ * 3; + Block block = base.getWorld().getBlock(xDir, yDir, zDir); + if (shouldExist) { + if (block != null && block.getMaterial() == Material.air) + getBaseMetaTileEntity().getWorld().setBlock(xDir, yDir, zDir, QuantumStuffBlock.INSTANCE); + } else { + if (block instanceof QuantumStuffBlock) + getBaseMetaTileEntity().getWorld().setBlock(xDir, yDir, zDir, Blocks.air); + } + } + if(eOutputHatches!=null && !eOutputHatches.isEmpty()) eOutputHatches.get(0).getBaseMetaTileEntity().setActive(shouldExist); + eDismatleBoom=shouldExist; + } } 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 d7b152b105..518a1c7a0a 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 @@ -926,7 +926,10 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt public void cleanInstanceStack(cElementalInstanceStack target) { if (target == null) return; - float mass = target.getMass(); + cleanMass(target.getMass()); + } + + public void cleanMass(float mass) { if (mass > 0) { if (eMufflerHatches.size() < 1) explodeMultiblock(); mass /= eMufflerHatches.size(); |