aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJordan Byrne <draknyte1@hotmail.com>2018-02-23 15:05:11 +1000
committerJordan Byrne <draknyte1@hotmail.com>2018-02-23 15:05:11 +1000
commitbe0120b50727284a7dc0c4d26534716678542c55 (patch)
tree572bb4845b9bca0294235eb5f1bf407cb95bc25b /src
parent465486960758a7ae2dad9d98d842ff95bbec2763 (diff)
downloadGT5-Unofficial-be0120b50727284a7dc0c4d26534716678542c55.tar.gz
GT5-Unofficial-be0120b50727284a7dc0c4d26534716678542c55.tar.bz2
GT5-Unofficial-be0120b50727284a7dc0c4d26534716678542c55.zip
$ Fixed weird loop lag from Itemutils.getItemStackOfAmountFromOreDict().
$ Fixed ASM circular loading issue.
Diffstat (limited to 'src')
-rw-r--r--src/Java/gtPlusPlus/core/util/minecraft/ItemUtils.java38
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/Modify_OreDict.java93
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer.java2
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer2.java1
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java22
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechConduits.java13
6 files changed, 40 insertions, 129 deletions
diff --git a/src/Java/gtPlusPlus/core/util/minecraft/ItemUtils.java b/src/Java/gtPlusPlus/core/util/minecraft/ItemUtils.java
index 62cb3f147e..627400f401 100644
--- a/src/Java/gtPlusPlus/core/util/minecraft/ItemUtils.java
+++ b/src/Java/gtPlusPlus/core/util/minecraft/ItemUtils.java
@@ -263,25 +263,31 @@ public class ItemUtils {
}
if (oredictName.toLowerCase().contains("vanadiumsteel")){
mTemp = oredictName.replace("VanadiumSteel", "StainlessSteel");
- }
-
- //Use Cache
- if (mDustCache.containsKey(oredictName)) {
- return getSimpleStack(mDustCache.get(oredictName), amount);
- }
- if (mOreDictCache.containsKey(mTemp)) {
+ }
+ //Use Cache
+ if (mOreDictCache.containsKey(mTemp) && mOreDictCache.get(mTemp) != null) {
+ Logger.INFO("[ODC] Returning mOreDictCache value.");
return getCachedValue(mTemp, amount);
}
-
- final ArrayList<ItemStack> oreDictList = OreDictionary.getOres(mTemp);
- if (!oreDictList.isEmpty()){
- final ItemStack returnValue = oreDictList.get(0).copy();
- returnValue.stackSize = amount;
- setCachedValue(mTemp, returnValue);
- return returnValue;
+ else if (mDustCache.containsKey(oredictName) && mDustCache.get(mTemp) != null) {
+ Logger.INFO("[ODC] Returning mDustCache value.");
+ return getSimpleStack(mDustCache.get(oredictName), amount);
+ }
+ else {
+ Logger.INFO("[ODC] Setting mOreDictCache value.");
+ final ArrayList<ItemStack> oreDictList = OreDictionary.getOres(mTemp);
+ if (!oreDictList.isEmpty()){
+ final ItemStack returnValue = oreDictList.get(0).copy();
+ returnValue.stackSize = amount;
+ setCachedValue(mTemp, returnValue);
+ Logger.INFO("[ODC] Setting and Returning mOreDictCache value.");
+ return returnValue;
+ }
+ setCachedValue(oredictName, getSimpleStack(ModItems.AAA_Broken));
+ Logger.INFO("[ODC] Returning AAA_Broken.");
+ return getSimpleStack(ModItems.AAA_Broken, amount);
}
- setCachedValue(oredictName, getSimpleStack(ModItems.AAA_Broken));
- return getSimpleStack(ModItems.AAA_Broken, amount);
+
}
private static Map<String, ItemStack> mOreDictCache = new HashMap();
diff --git a/src/Java/gtPlusPlus/preloader/asm/Modify_OreDict.java b/src/Java/gtPlusPlus/preloader/asm/Modify_OreDict.java
deleted file mode 100644
index b4a8bf5c00..0000000000
--- a/src/Java/gtPlusPlus/preloader/asm/Modify_OreDict.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package gtPlusPlus.preloader.asm;
-
-import java.lang.reflect.Field;
-import java.util.*;
-
-import com.google.common.collect.Lists;
-
-import cpw.mods.fml.common.FMLLog;
-import cpw.mods.fml.common.Loader;
-import cpw.mods.fml.common.registry.GameData;
-import gtPlusPlus.core.util.reflect.ReflectionUtils;
-import net.minecraft.item.ItemStack;
-import net.minecraftforge.common.MinecraftForge;
-import net.minecraftforge.oredict.OreDictionary;
-
-@SuppressWarnings("unchecked")
-public class Modify_OreDict extends OreDictionary{
-
- static Field stack;
- static Field id;
-
- private static Map<Integer, List<Integer>> stackToId; // Calculated from 128 * 0.75
- private static List<ArrayList<ItemStack>> idToStack; //ToDo: Unqualify to List when possible {1.8}
-
-
- static {
- try {
- stack = ReflectionUtils.getField(OreDictionary.class, "stackToId");
- id = ReflectionUtils.getField(OreDictionary.class, "idToStack");
- stackToId = (Map<Integer, List<Integer>>) stack.get(OreDictionary.class);
- idToStack = (List<ArrayList<ItemStack>>) stack.get(OreDictionary.class);
- }
- catch (NoSuchFieldException | IllegalArgumentException | IllegalAccessException e) {}
- }
-
- //Utils.LOG_INFO("O-"+(byte) nameField.get(clazz) + " | "+newValue);
-
- /**
- * Registers a ore item into the dictionary.
- * Raises the registerOre function in all registered handlers.
- *
- * @param name The name of the ore
- * @param id The ID of the ore
- * @param ore The ore's ItemStack
- */
- private static void registerOreImpl(String name, ItemStack ore)
- {
- if (name == null || name.isEmpty() || "Unknown".equals(name)) return; //prevent bad IDs.
- if (ore == null || ore.getItem() == null)
- {
- FMLLog.bigWarning("Invalid registration attempt for an Ore Dictionary item with name %s has occurred. The registration has been denied to prevent crashes. The mod responsible for the registration needs to correct this.", name);
- return; //prevent bad ItemStacks.
- }
-
- int oreID = getOreID(name);
- // HACK: use the registry name's ID. It is unique and it knows about substitutions. Fallback to a -1 value (what Item.getIDForItem would have returned) in the case where the registry is not aware of the item yet
- // IT should be noted that -1 will fail the gate further down, if an entry already exists with value -1 for this name. This is what is broken and being warned about.
- // APPARENTLY it's quite common to do this. OreDictionary should be considered alongside Recipes - you can't make them properly until you've registered with the game.
- String registryName = ore.getItem().delegate.name();
- int hash;
- if (registryName == null)
- {
- FMLLog.bigWarning("A broken ore dictionary registration with name %s has occurred. It adds an item (type: %s) which is currently unknown to the game registry. This dictionary item can only support a single value when"
- + " registered with ores like this, and NO I am not going to turn this spam off. Just register your ore dictionary entries after the GameRegistry.\n"
- + "TO USERS: YES this is a BUG in the mod "+Loader.instance().activeModContainer().getName()+" report it to them!", name, ore.getItem().getClass());
- hash = -1;
- }
- else
- {
- hash = GameData.getItemRegistry().getId(registryName);
- }
- if (ore.getItemDamage() != WILDCARD_VALUE)
- {
- hash |= ((ore.getItemDamage() + 1) << 16); // +1 so 0 is significant
- }
-
- //Add things to the baked version, and prevent duplicates
- List<Integer> ids = stackToId.get(hash);
- if (ids != null && ids.contains(oreID)) return;
- if (ids == null)
- {
- ids = Lists.newArrayList();
- stackToId.put(hash, ids);
- }
- ids.add(oreID);
-
- //Add to the unbaked version
- ore = ore.copy();
- idToStack.get(oreID).add(ore);
- MinecraftForge.EVENT_BUS.post(new OreRegisterEvent(name, ore));
- }
-
-}
diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer.java b/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer.java
index 535d1f778b..4b7ac94884 100644
--- a/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer.java
+++ b/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer.java
@@ -15,7 +15,7 @@ import net.minecraftforge.common.config.Configuration;
public class Preloader_ClassTransformer {
- public boolean getConfig(){
+ public static boolean getConfig(){
final Configuration config = new Configuration( new File(Utils.getMcDir(), "config/GTplusplus/GTplusplus.cfg"));
if (config != null){
config.load();
diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer2.java b/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer2.java
index 465d845c63..1763be7330 100644
--- a/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer2.java
+++ b/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer2.java
@@ -29,7 +29,6 @@ import net.minecraft.block.BlockContainer;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.init.Blocks;
-import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java b/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java
index 3f65e5d102..6b10a056b8 100644
--- a/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java
+++ b/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java
@@ -4,10 +4,7 @@ import org.apache.logging.log4j.Level;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassWriter;
-import cpw.mods.fml.common.Loader;
import cpw.mods.fml.relauncher.FMLRelaunchLog;
-import gtPlusPlus.core.lib.LoadedMods;
-import gtPlusPlus.preloader.CORE_Preloader;
import gtPlusPlus.preloader.asm.transformers.Preloader_ClassTransformer.OreDictionaryVisitor;
import gtPlusPlus.preloader.asm.transformers.Preloader_ClassTransformer2.GT_MetaTile_Visitor;
import net.minecraft.launchwrapper.IClassTransformer;
@@ -17,16 +14,15 @@ public class Preloader_Transformer_Handler implements IClassTransformer {
private final boolean mEnabled = false;
public byte[] transform(String name, String transformedName, byte[] basicClass) {
-
- if (CORE_Preloader.enableOldGTcircuits || Loader.isModLoaded("Mekanism")){
- if(transformedName.equals("net.minecraftforge.oredict.OreDictionary")) {
- FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, "Transforming %s", transformedName);
- ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
- new ClassReader(basicClass).accept(new OreDictionaryVisitor(classWriter), 0);
- return classWriter.toByteArray();
- }
- }
-
+
+
+ if(transformedName.equals("net.minecraftforge.oredict.OreDictionary")) {
+ FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, "Transforming %s", transformedName);
+ ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
+ new ClassReader(basicClass).accept(new OreDictionaryVisitor(classWriter), 0);
+ return classWriter.toByteArray();
+ }
+
if (mEnabled) {
if(transformedName.equals("gregtech.api.metatileentity.BaseMetaTileEntity")) {
FMLRelaunchLog.log("[GT++ ASM] NBTFixer", Level.INFO, "Transforming %s", transformedName);
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechConduits.java b/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechConduits.java
index 64405a0607..0ab5cb477c 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechConduits.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechConduits.java
@@ -6,7 +6,6 @@ import static gtPlusPlus.core.lib.LoadedMods.Gregtech;
import java.util.ArrayList;
import gregtech.api.enums.*;
-import gregtech.api.interfaces.ITexture;
import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Fluid;
import gregtech.api.util.GT_OreDictUnificator;
import gregtech.api.util.GT_Utility;
@@ -20,7 +19,6 @@ import gtPlusPlus.core.util.Utils;
import gtPlusPlus.core.util.minecraft.FluidUtils;
import gtPlusPlus.core.util.minecraft.ItemUtils;
import gtPlusPlus.core.util.minecraft.RecipeUtils;
-import gtPlusPlus.xmod.gregtech.api.enums.GregtechOrePrefixes;
import gtPlusPlus.xmod.gregtech.api.enums.GregtechOrePrefixes.GT_Materials;
import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.*;
import net.minecraft.item.ItemStack;
@@ -276,8 +274,8 @@ public class GregtechConduits {
Logger.INFO("Generating "+output+" pipes & respective recipes.");
- ItemStack pipeIngot = ItemUtils.getItemStackOfAmountFromOreDictNoBroken("ingot"+output, 1);
- ItemStack pipePlate = ItemUtils.getItemStackOfAmountFromOreDictNoBroken("plate"+output, 1);
+ ItemStack pipeIngot = ItemUtils.getItemStackOfAmountFromOreDict("ingot"+output, 1);
+ ItemStack pipePlate = ItemUtils.getItemStackOfAmountFromOreDict("plate"+output, 1);
if (pipeIngot == null){
if (pipePlate != null){
@@ -349,6 +347,7 @@ public class GregtechConduits {
4*20, eut);
if ((eut < 512) && !output.equals("Void")){
+ try {
final ItemStack pipePlateDouble = ItemUtils.getItemStackOfAmountFromOreDict("plateDouble"+output, 1).copy();
if (pipePlateDouble != null) {
RecipeUtils.recipeBuilder(
@@ -359,6 +358,10 @@ public class GregtechConduits {
} else {
Logger.INFO("Failed to add a recipe for "+materialName+" Huge pipes. Double plates probably do not exist.");
}
+ }
+ catch (Throwable t) {
+ t.printStackTrace();
+ }
}
@@ -384,7 +387,7 @@ public class GregtechConduits {
String tName = aName.toString();
if (GT_Utility.isStringInvalid(tName))
return false;
- ArrayList tList = GT_OreDictUnificator.getOres(tName);
+ ArrayList<ItemStack> tList = GT_OreDictUnificator.getOres(tName);
for (int i = 0; i < tList.size(); ++i)
if (GT_Utility.areStacksEqual((ItemStack) tList.get(i), aStack, true))
return false;