aboutsummaryrefslogtreecommitdiff
path: root/src/Java/gtPlusPlus/xmod/gregtech
diff options
context:
space:
mode:
authorJordan Byrne <draknyte1@hotmail.com>2018-02-12 01:37:27 +1000
committerJordan Byrne <draknyte1@hotmail.com>2018-02-12 01:37:27 +1000
commit8f69fec821185ae46fceca42fe54aa625ea40ba5 (patch)
tree1e5c874ca87cc368da045a3bf4a5978957256332 /src/Java/gtPlusPlus/xmod/gregtech
parent8587d9a54c24f84c2a3bf34b5f4cc49a4b2cb9f1 (diff)
downloadGT5-Unofficial-8f69fec821185ae46fceca42fe54aa625ea40ba5.tar.gz
GT5-Unofficial-8f69fec821185ae46fceca42fe54aa625ea40ba5.tar.bz2
GT5-Unofficial-8f69fec821185ae46fceca42fe54aa625ea40ba5.zip
$ Basically completed the Matter Fabricator rewrite.
Diffstat (limited to 'src/Java/gtPlusPlus/xmod/gregtech')
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_MassFabricator.java167
1 files changed, 133 insertions, 34 deletions
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_MassFabricator.java b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_MassFabricator.java
index 80fc673700..c6498ff889 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_MassFabricator.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_MassFabricator.java
@@ -28,6 +28,7 @@ import gtPlusPlus.api.objects.GenericStack;
import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.core.block.ModBlocks;
import gtPlusPlus.core.lib.CORE;
+import gtPlusPlus.core.recipe.common.CI;
import gtPlusPlus.core.util.Utils;
import gtPlusPlus.core.util.array.AutoMap;
import gtPlusPlus.core.util.array.Pair;
@@ -114,7 +115,7 @@ public class GregtechMetaTileEntity_MassFabricator extends GregtechMeta_MultiBlo
@Override
public boolean hasSlotInGUI() {
- return false;
+ return true;
}
public ItemStack getScrapPile() {
@@ -147,13 +148,45 @@ public class GregtechMetaTileEntity_MassFabricator extends GregtechMeta_MultiBlo
@Override
public boolean checkRecipe(final ItemStack aStack) {
+ Logger.INFO("Doing Recipe.");
ArrayList<ItemStack> tItems = getStoredInputs();
ArrayList<FluidStack> tFluids = getStoredFluids();
ItemStack[] tItemInputs = tItems.toArray(new ItemStack[tItems.size()]);
FluidStack[] tFluidInputs = tFluids.toArray(new FluidStack[tFluids.size()]);
- if (tItems.size() == 0) {
- return false;
+ if (tItems.size() == 0 && tFluids.size() == 0) {
+ if (this.mMode != PRODUCE_UUM) {
+ Logger.INFO("Not Processing.");
+ return false;
+ }
+ }
+ else {
+ if (tItems.size() != 0 && tFluids.size() == 0) {
+
+ int yu = 0;
+
+ for (ItemStack h : tItems) {
+ if (h != null) {
+ if (h.getItem() != getScrapPile().getItem() && h.getItem() != getScrapBox().getItem() && h.getItem() != CI.getNumberedCircuit(0).getItem()) {
+ yu++;
+ Logger.INFO("Found "+h.getDisplayName()+"++");
+ }
+ else {
+ Logger.INFO("Found "+h.getDisplayName());
+ if (h.getItem() == CI.getNumberedCircuit(0).getItem()) {
+ this.mMode = getGUICircuit(new ItemStack[] {h});
+ }
+
+ }
+ }
+ }
+
+ if (yu == 0 && this.mMode != PRODUCE_UUM) {
+ Logger.INFO("Not Processing.");
+ return false;
+ }
+
+ }
}
return checkRecipeGeneric(tItemInputs, tFluidInputs, 1, 500, 75, 100);
@@ -316,11 +349,14 @@ public class GregtechMetaTileEntity_MassFabricator extends GregtechMeta_MultiBlo
FluidStack fluidIn = null;
FluidStack fluidOut = null;
Pair<Integer, ItemStack[]> K = new Pair<Integer, ItemStack[]>(mode, aItemInputs);
- if (mCachedRecipeMap.containsKey(K.hashCode())) {
- return mCachedRecipeMap.get(K.hashCode());
+ int mapKey = ((K.getValue().length < 1 || K.getValue() == null) ? -1 : K.hashCode());
+ if (mCachedRecipeMap.containsKey(mapKey)) {
+ Logger.INFO("2.x. Returning Cached Result.");
+ return mCachedRecipeMap.get(mapKey);
}
final boolean oldRecipe = Utils.invertBoolean(CORE.MAIN_GREGTECH_5U_EXPERIMENTAL_FORK);
+ Logger.INFO("2.x.1");
int baseEuCost = 0;
int baseTimeCost = 0;
@@ -334,20 +370,27 @@ public class GregtechMetaTileEntity_MassFabricator extends GregtechMeta_MultiBlo
final Item SP = this.getScrapPile().getItem();
final Item SB = this.getScrapBox().getItem();
+ final Item CR = CI.getNumberedCircuit(0).getItem();
+ Logger.INFO("2.x.2");
/**
* Count Inputs
*/
+ ItemStack[] mStrippedInputs = new ItemStack[aItemInputs.length];
+ int mStrippedIndex = 0;
+
int inputCount = 0;
if (aItemInputs.length > 0) {
for (int y=0;y<aItemInputs.length;y++) {
- if (aItemInputs[y].getItem() != SP && aItemInputs[y].getItem() != SB) {
+ if (aItemInputs[y].getItem() != SP && aItemInputs[y].getItem() != SB && aItemInputs[y].getItem() != CR) {
inputCount += aItemInputs[y].stackSize;
+ mStrippedInputs[mStrippedIndex++] = aItemInputs[y].copy();
}
}
}
+ Logger.INFO("2.x.3");
/**
* Set Inputs and Outputs depending on mode.
@@ -355,8 +398,9 @@ public class GregtechMetaTileEntity_MassFabricator extends GregtechMeta_MultiBlo
//Recycler mode
if (mode == JUNK_TO_SCRAP) {
- if (aItemInputs.length > 0) {
- inputs = aItemInputs;
+ if (mStrippedInputs.length > 0) {
+ Logger.INFO("2.x.4.1");
+ inputs = mStrippedInputs;
outputs = getScrapPiles(inputCount);
baseEuCost = mEuPerRecycleOperation;
baseTimeCost = mTicksPerRecycleOperation;
@@ -365,8 +409,9 @@ public class GregtechMetaTileEntity_MassFabricator extends GregtechMeta_MultiBlo
//Hybrid mode
else if (mode == JUNK_TO_UUA) {
- if (aItemInputs.length > 0) {
- inputs = aItemInputs;
+ if (mStrippedInputs.length > 0) {
+ Logger.INFO("2.x.4.2");
+ inputs = mStrippedInputs;
GenericStack x = getUUAFromScrapStack(getScrapPiles(inputCount));
outputs = new ItemStack[]{x.getItemStack()};
fluidOut = x.getFluidStack();
@@ -377,8 +422,9 @@ public class GregtechMetaTileEntity_MassFabricator extends GregtechMeta_MultiBlo
//Amplifabricator mode
else if (mode == SCRAP_UUA) {
- if (aItemInputs.length > 0) {
- inputs = aItemInputs;
+ if (mStrippedInputs.length > 0) {
+ Logger.INFO("2.x.4.3");
+ inputs = mStrippedInputs;
GenericStack x = getUUAFromScrapStack(inputs);
outputs = new ItemStack[]{x.getItemStack()};
fluidOut = x.getFluidStack();
@@ -389,6 +435,7 @@ public class GregtechMetaTileEntity_MassFabricator extends GregtechMeta_MultiBlo
//Matter Fabricator mode
else if (mode == PRODUCE_UUM) {
+ Logger.INFO("2.x.4.4");
if (sDurationMultiplier != 0) {
baseTimeCost = sDurationMultiplier;
}
@@ -408,15 +455,17 @@ public class GregtechMetaTileEntity_MassFabricator extends GregtechMeta_MultiBlo
baseEuCost = mEuPerMatterFabOperation;
baseTimeCost = (fluidIn == GT_Values.NF ? mTicksPerMatterFabOperation: mTicksPerMatterFabOperation/sUUASpeedBonus);
}
+ Logger.INFO("2.x.5");
//Pre 5.09 compat
if (oldRecipe) {
baseEuCost = (baseEuCost/8);
}
-
-
- Recipe_GT B = new Recipe_GT(
+
+ Recipe_GT B = null;
+ try {
+ B = new Recipe_GT(
true,
inputs, //Inputs
outputs, //Outputs
@@ -427,42 +476,82 @@ public class GregtechMetaTileEntity_MassFabricator extends GregtechMeta_MultiBlo
baseTimeCost, //duration
baseEuCost, //eu/t
0);
+ }
+ catch (Throwable t) {
+ t.printStackTrace();
+ }
- mCachedRecipeMap.put(K.hashCode(), B);
+ Logger.INFO("2.x.6");
+ //Map Key
+ mCachedRecipeMap.put(B == null ? -1 : mapKey, B);
+ Logger.INFO("2.x.7");
Recipe_GT.Gregtech_Recipe_Map.sMatterFab2Recipes.add(B);
+ Logger.INFO("2.x.8");
//The Recipe Itself.
return B;
}
private ItemStack[] getScrapPiles(int inputSize) {
+
+ if (inputSize < 1) {
+ Logger.INFO("2.x.4.x.x");
+ return null;
+ }
+
+ Logger.INFO("2.x.4.x.1");
+
//Generate Trash
ItemStack[] mOutputs;
AutoMap<ItemStack> mTemp = new AutoMap<ItemStack>();
for (int r=0;r<inputSize;r++) {
- if (MathUtils.randInt(0, 5) == 5) {
+ Logger.INFO("2.x.4.x.1.0");
+ if (MathUtils.randInt(0, 5) != 6) {
mTemp.put(getScrapPile());
}
}
- int mSlots = (int) Math.ceil((mTemp.size()/64) / 100.0);
- mOutputs = new ItemStack[mSlots];
+ Logger.INFO("2.x.4.x.2");
+ //int mSlots = (int) Math.ceil((mTemp.size()/64) / 100.0);
+ int mSlots = (int) (mTemp.size()/64);
+ Logger.INFO("2.x.4.x.3 | mSlots: "+mSlots);
+ mOutputs = new ItemStack[(mSlots > 0 ? mSlots : 1)];
+ Logger.INFO("2.x.4.x.4 | mOutputs: "+mOutputs.length);
int totalScrap = mTemp.size();
+ Logger.INFO("2.x.4.x.5");
int index = 0;
- while (totalScrap > 0) {
- if (mOutputs[index].stackSize == 64) {
- index++;
- }
- else {
- if (mOutputs[index] == null) {
- mOutputs[index] = getScrapPile();
- totalScrap--;
- }
- else {
- mOutputs[index].stackSize++;
- totalScrap--;
+ Logger.INFO("2.x.4.x.6");
+ try {
+ if (totalScrap > 0) {
+ Logger.INFO("2.x.4.x.6.x | "+totalScrap);
+ while (totalScrap > 0) {
+ Logger.INFO("2.x.4.x.6.xx | "+index);
+ //if (index < mOutputs.length) {
+ if (mOutputs[index] == null) { //TODO
+ Logger.WARNING("2.x.4.x.6.1");
+ mOutputs[index] = getScrapPile();
+ totalScrap--;
+ }
+ else {
+ Logger.WARNING("2.x.4.x.6.2");
+ if (mOutputs[index].stackSize < 64) {
+ mOutputs[index].stackSize++;
+ totalScrap--;
+ }
+ }
+
+ if (mOutputs[index] != null && mOutputs[index].stackSize >= 64) {
+ Logger.WARNING("2.x.4.x.6.0");
+ index++;
+ }
+ //}
}
}
}
+ catch (Throwable t) {
+ t.printStackTrace();
+
+ }
+ Logger.WARNING("2.x.4.x.7");
return mOutputs;
}
@@ -494,19 +583,24 @@ public class GregtechMetaTileEntity_MassFabricator extends GregtechMeta_MultiBlo
}
private GT_Recipe getFakeRecipeForMode(ItemStack[] aItemInputs) {
- if (this.mMode == JUNK_TO_SCRAP) {
+ if (this.mMode == JUNK_TO_SCRAP) {
+ Logger.WARNING("2.1");
return generateCustomRecipe(JUNK_TO_SCRAP, aItemInputs);
}
else if (this.mMode == JUNK_TO_UUA) {
+ Logger.WARNING("2.2");
return generateCustomRecipe(JUNK_TO_UUA, aItemInputs);
}
else if (this.mMode == SCRAP_UUA) {
+ Logger.WARNING("2.3");
return generateCustomRecipe(SCRAP_UUA, aItemInputs);
}
else if (this.mMode == PRODUCE_UUM) {
+ Logger.WARNING("2.4");
return generateCustomRecipe(PRODUCE_UUM, aItemInputs);
}
else {
+ Logger.WARNING("2.5");
return null;
}
}
@@ -557,12 +651,15 @@ public class GregtechMetaTileEntity_MassFabricator extends GregtechMeta_MultiBlo
this.mMaxProgresstime = 0;
this.mOutputItems = new ItemStack[]{};
this.mOutputFluids = new FluidStack[]{};
- //Set Mode
- this.mMode = getGUICircuit(aItemInputs);
+
+ Logger.INFO("1.");
+ Logger.INFO("2.");
mFakeRecipe = getFakeRecipeForMode(aItemInputs);
+ Logger.INFO("3.");
long tVoltage = getMaxInputVoltage();
byte tTier = (byte) Math.max(1, GT_Utility.getTier(tVoltage));
+ Logger.INFO("4.");
GT_Recipe tRecipe = mFakeRecipe;
@@ -570,10 +667,12 @@ public class GregtechMetaTileEntity_MassFabricator extends GregtechMeta_MultiBlo
this.mLastRecipe = tRecipe;
if (tRecipe == null) {
+ Logger.INFO("Bad Recipe Generated.");
return false;
}
if (!this.canBufferOutputs(tRecipe, aMaxParallelRecipes)) {
+ Logger.INFO("Cannot buffer output.");
return false;
}