aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbartimaeusnek <33183715+bartimaeusnek@users.noreply.github.com>2020-01-02 06:34:26 +0100
committerbartimaeusnek <33183715+bartimaeusnek@users.noreply.github.com>2020-01-02 06:34:26 +0100
commit7dde152e0f3f11a7e5cac613140baa78624ed290 (patch)
treed908cb7629d45b9167e53ff96e614263da59dbe5
parent814c7d783d1aba4695a6a9da3fd279f1095999e6 (diff)
downloadGT5-Unofficial-7dde152e0f3f11a7e5cac613140baa78624ed290.tar.gz
GT5-Unofficial-7dde152e0f3f11a7e5cac613140baa78624ed290.tar.bz2
GT5-Unofficial-7dde152e0f3f11a7e5cac613140baa78624ed290.zip
moved imprint loader onto server start
+ fixes NBT issues with recipes Signed-off-by: bartimaeusnek <33183715+bartimaeusnek@users.noreply.github.com> Former-commit-id: b145d22c3a8af5bdda021c4039b830935fd1dbe1
-rw-r--r--build.properties2
-rw-r--r--src/main/java/com/github/bartimaeusnek/bartworks/MainMod.java8
-rw-r--r--src/main/java/com/github/bartimaeusnek/bartworks/system/material/CircuitGeneration/CircuitImprintLoader.java79
3 files changed, 68 insertions, 21 deletions
diff --git a/build.properties b/build.properties
index 13606e11cd..1a4f713309 100644
--- a/build.properties
+++ b/build.properties
@@ -22,7 +22,7 @@
mc_version=1.7.10
majorUpdate=0
minorUpdate=5
-buildNumber=3_f2
+buildNumber=4
APIVersion=8
ic2.version=2.2.828-experimental
gregtech.version=5.09.32.36
diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/MainMod.java b/src/main/java/com/github/bartimaeusnek/bartworks/MainMod.java
index 2d33252b12..cf0c828cc5 100644
--- a/src/main/java/com/github/bartimaeusnek/bartworks/MainMod.java
+++ b/src/main/java/com/github/bartimaeusnek/bartworks/MainMod.java
@@ -217,7 +217,7 @@ public final class MainMod {
removeIC2Recipes();
MainMod.addElectricImplosionCompressorRecipes();
PlatinumSludgeOverHaul.replacePureElements();
- new CircuitImprintLoader().run();
+
runOnServerStarted();
fixEnergyRequirements();
MainMod.unificationRecipeEnforcer();
@@ -225,8 +225,11 @@ public final class MainMod {
private static boolean recipesAdded;
- public static void runOnPlayerJoined(boolean classicMode, boolean extraGasRecipes){
+ public static void runOnPlayerJoined(boolean classicMode, boolean extraGasRecipes) {
OreDictHandler.adaptCacheForWorld();
+
+ CircuitImprintLoader.run();
+
if (!recipesAdded) {
if (!extraGasRecipes) {
ArrayListMultimap<SubTag, GT_Recipe> toChange = MainMod.getRecipesToChange(NOBLE_GAS, ANAEROBE_GAS);
@@ -238,6 +241,7 @@ public final class MainMod {
// removeDuplicateRecipes();
recipesAdded = true;
}
+
}
private static void fixEnergyRequirements() {
diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/CircuitGeneration/CircuitImprintLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/CircuitGeneration/CircuitImprintLoader.java
index 3298aec12b..403556f4eb 100644
--- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/CircuitGeneration/CircuitImprintLoader.java
+++ b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/CircuitGeneration/CircuitImprintLoader.java
@@ -44,14 +44,35 @@ import net.minecraftforge.oredict.OreDictionary;
import java.util.HashSet;
import java.util.Iterator;
-public class CircuitImprintLoader implements Runnable {
+public class CircuitImprintLoader {
public static final ArrayListMultimap<NBTTagCompound,GT_Recipe> recipeTagMap = ArrayListMultimap.create();
+
static final HashBiMap<CircuitData,ItemStack> bwCircuitTagMap = HashBiMap.create(20);
- static final HashSet<NBTTagCompound> refs = new HashSet<>();
public static short reverseIDs = Short.MAX_VALUE-1;
public static HashBiMap<Short, ItemList> circuitIIconRefs = HashBiMap.create(20);
+// /**
+// * stack is assumed valid
+// **/
+// private static NBTTagCompound getUniqueIdentifierFromStack(ItemStack stack){
+// NBTTagCompound tagCompound = new NBTTagCompound();
+// tagCompound.setString("Name", stack.getUnlocalizedName());
+// tagCompound.setString("ODName", OreDictionary.getOreName(OreDictionary.getOreID(stack)));
+// tagCompound.setShort("Damage", (short)stack.getItemDamage());
+//
+// return tagCompound;
+// }
+//
+// private static ItemStack getStackFromUniqueIdentifier(NBTTagCompound tagCompound){
+// return OreDictionary.getOres(tagCompound.getString("ODName")).stream().filter(
+// e ->
+// e.getItemDamage() == tagCompound.getShort("Damage")
+// && e.getUnlocalizedName().equals(tagCompound.getString("Name"))
+//
+// ).findFirst().orElse(null);
+// }
+
public static NBTTagCompound getTagFromStack(ItemStack stack){
if (GT_Utility.isStackValid(stack))
return stack.copy().splitStack(1).writeToNBT(new NBTTagCompound());
@@ -62,49 +83,66 @@ public class CircuitImprintLoader implements Runnable {
return ItemStack.loadItemStackFromNBT(tagCompound);
}
- @Override
- public void run() {
- if (BWRecipes.instance.getMappingsFor(BWRecipes.CIRCUITASSEMBLYLINE).mRecipeList.size() > 0)
- return;
+ public static void run() {
+ boolean newServer = false;
+ if (BWRecipes.instance.getMappingsFor(BWRecipes.CIRCUITASSEMBLYLINE).mRecipeList.size() > 0){
+ BWRecipes.instance.getMappingsFor(BWRecipes.CIRCUITASSEMBLYLINE).mRecipeList.clear();
+ recipeTagMap.clear();
+ newServer = true;
+ }
+
Iterator<GT_Recipe> it = GT_Recipe.GT_Recipe_Map.sCircuitAssemblerRecipes.mRecipeList.iterator();
GT_Recipe circuitRecipe;
+
HashSet<GT_Recipe> toRem = new HashSet<>();
HashSet<GT_Recipe> toAdd = new HashSet<>();
+
while (it.hasNext()) {
circuitRecipe = it.next();
+
ItemStack[] outputs = circuitRecipe.mOutputs;
+
if (outputs.length < 1)
continue;
+
int[] oreIDS = OreDictionary.getOreIDs(outputs[0]);
+
if (oreIDS.length < 1)
continue;
+
String name = OreDictionary.getOreName(oreIDS[0]);
+
if (name.contains("Circuit") || name.contains("circuit")) {
+
CircuitImprintLoader.recipeTagMap.put(CircuitImprintLoader.getTagFromStack(outputs[0]), circuitRecipe.copy());
- for (ItemStack s : circuitRecipe.mInputs) {
- if (circuitRecipe.mFluidInputs[0].isFluidEqual(Materials.SolderingAlloy.getMolten(0)))
- CircuitImprintLoader.refs.add(CircuitImprintLoader.getTagFromStack(s.copy().splitStack(1)));
- }
+
if (circuitRecipe.mFluidInputs[0].isFluidEqual(Materials.SolderingAlloy.getMolten(0))) {
GT_Recipe newRecipe = CircuitImprintLoader.reBuildRecipe(circuitRecipe);
+
if (newRecipe != null)
BWRecipes.instance.getMappingsFor(BWRecipes.CIRCUITASSEMBLYLINE).addRecipe(newRecipe);
+
if (circuitRecipe.mEUt > BW_Util.getTierVoltage(ConfigHandler.cutoffTier)) {
toRem.add(circuitRecipe);
toAdd.add(CircuitImprintLoader.makeMoreExpensive(circuitRecipe));
}
+
} else {
- if (circuitRecipe.mEUt > BW_Util.getTierVoltage(ConfigHandler.cutoffTier)) {
+
+ if (circuitRecipe.mEUt > BW_Util.getTierVoltage(ConfigHandler.cutoffTier))
toRem.add(circuitRecipe);
- }
- }
+ }
}
}
- GT_Recipe.GT_Recipe_Map.sCircuitAssemblerRecipes.mRecipeList.addAll(toAdd);
- GT_Recipe.GT_Recipe_Map.sCircuitAssemblerRecipes.mRecipeList.removeAll(toRem);
- this.makeCircuitImprints();
+
+ if (!newServer) {
+ GT_Recipe.GT_Recipe_Map.sCircuitAssemblerRecipes.mRecipeList.addAll(toAdd);
+ GT_Recipe.GT_Recipe_Map.sCircuitAssemblerRecipes.mRecipeList.removeAll(toRem);
+ }
+
+ makeCircuitImprints();
}
@SuppressWarnings("deprecation")
@@ -165,7 +203,6 @@ public class CircuitImprintLoader implements Runnable {
return new BWRecipes.DynamicGTRecipe(false,in,new ItemStack[]{out},BW_Meta_Items.getNEWCIRCUITS().getStackWithNBT(CircuitImprintLoader.getTagFromStack(original.mOutputs[0]),0,0),null, original.mFluidInputs,null,original.mDuration * 16,original.mEUt,0);
}
-
public static final HashSet<ItemStack> blacklistSet = new HashSet<>();
private static boolean checkForBlacklistedComponents(ItemStack[] itemStacks){
@@ -178,16 +215,21 @@ public class CircuitImprintLoader implements Runnable {
return false;
}
- private void makeCircuitImprints(){
+ private static void makeCircuitImprints() {
+ //TODO: cache and remove recipes if new world is loaded.
+
for (NBTTagCompound tag : CircuitImprintLoader.recipeTagMap.keySet()){
ItemStack stack = CircuitImprintLoader.getStackFromTag(tag);
int eut = Integer.MAX_VALUE;
+
for (GT_Recipe recipe : CircuitImprintLoader.recipeTagMap.get(tag)) {
eut = Math.min(eut, recipe.mEUt);
}
+
eut = Math.min(eut, BW_Util.getMachineVoltageFromTier(BW_Util.getCircuitTierFromOreDictName(OreDictionary.getOreName(OreDictionary.getOreIDs(stack)[0]))));
GT_Recipe slicingRecipe = new BWRecipes.DynamicGTRecipe(true,new ItemStack[]{stack,ItemList.Shape_Slicer_Flat.get(0)},new ItemStack[]{BW_Meta_Items.getNEWCIRCUITS().getStackWithNBT(tag,1,1)},null,null,null,null,300,eut, BW_Util.CLEANROOM);
GT_Recipe.GT_Recipe_Map.sSlicerRecipes.add(slicingRecipe);
+
GameRegistry.addRecipe(new BWRecipes.BWNBTDependantCraftingRecipe(BW_Meta_Items.getNEWCIRCUITS().getStackWithNBT(tag,0,1),
" X ",
"GPG",
@@ -195,6 +237,7 @@ public class CircuitImprintLoader implements Runnable {
'P', BW_Meta_Items.getNEWCIRCUITS().getStackWithNBT(tag,1,1),
'G', WerkstoffLoader.Prasiolite.get(OrePrefixes.gemExquisite,1),
'X', BW_Meta_Items.getNEWCIRCUITS().getStack(3)));
+
GT_ModHandler.addCraftingRecipe(BW_Meta_Items.getNEWCIRCUITS().getStackWithNBT(tag,0,1), GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.BUFFERED, new Object[]{
" X ",
"GPG",