aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/github/technus/tectech/recipe/TT_recipe.java32
-rw-r--r--src/main/java/com/github/technus/tectech/recipe/TT_recipeAdder.java22
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java40
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java211
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_MultiblockBase_EM.java5
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();