From 8391992b43365e261b986da893cf659e6aa178ee Mon Sep 17 00:00:00 2001 From: Alkalus Date: Sun, 24 Sep 2017 14:06:28 +1000 Subject: $ Temporary Trade Table crash fix. --- .../machines/TileEntityTradeTable.java | 20 ++- src/Java/gtPlusPlus/core/util/nbt/NBTUtils.java | 141 ++++++++++----------- 2 files changed, 85 insertions(+), 76 deletions(-) (limited to 'src/Java/gtPlusPlus/core') diff --git a/src/Java/gtPlusPlus/core/tileentities/machines/TileEntityTradeTable.java b/src/Java/gtPlusPlus/core/tileentities/machines/TileEntityTradeTable.java index 52c1fd6789..945cb3d16f 100644 --- a/src/Java/gtPlusPlus/core/tileentities/machines/TileEntityTradeTable.java +++ b/src/Java/gtPlusPlus/core/tileentities/machines/TileEntityTradeTable.java @@ -6,6 +6,7 @@ import java.util.Vector; import gtPlusPlus.core.container.Container_TradeTable; import gtPlusPlus.core.inventories.tradetable.InventoryTradeMain; import gtPlusPlus.core.inventories.tradetable.InventoryTradeOutput; +import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.nbt.NBTUtils; import ic2.api.network.INetworkDataProvider; import ic2.api.network.INetworkUpdateListener; @@ -112,11 +113,20 @@ public class TileEntityTradeTable extends TileEntity implements INetworkDataProv @Override public void updateEntity() { if (!this.worldObj.isRemote){ - ItemStack slot0 = this.inventoryOutputs.getStackInSlot(0); - if (slot0 != null && slot0.hasTagCompound()){ - NBTUtils.tryIterateNBTData(slot0); - this.inventoryOutputs.setInventorySlotContents(0, null); - } + + try{ + + ItemStack slot0 = this.inventoryOutputs.getStackInSlot(0); + if (slot0 != null && slot0.hasTagCompound()){ + NBTUtils.tryIterateNBTData(slot0); + this.inventoryOutputs.setInventorySlotContents(0, null); + } + + } + catch (Throwable t){ + Utils.LOG_INFO("NBT utils not found."); + } + } super.updateEntity(); } diff --git a/src/Java/gtPlusPlus/core/util/nbt/NBTUtils.java b/src/Java/gtPlusPlus/core/util/nbt/NBTUtils.java index a82a4f1ba4..636fb60e6b 100644 --- a/src/Java/gtPlusPlus/core/util/nbt/NBTUtils.java +++ b/src/Java/gtPlusPlus/core/util/nbt/NBTUtils.java @@ -2,13 +2,11 @@ package gtPlusPlus.core.util.nbt; import static gtPlusPlus.core.item.ModItems.ZZZ_Empty; -import java.util.Iterator; import java.util.Map; import gregtech.api.items.GT_MetaGenerated_Tool; import gregtech.api.util.GT_ModHandler; import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.item.ModItems; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.item.ItemUtils; import gtPlusPlus.core.util.reflect.ReflectionUtils; @@ -17,7 +15,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; public class NBTUtils { - + public static NBTTagCompound getNBT(ItemStack aStack) { NBTTagCompound rNBT = aStack.getTagCompound(); return ((rNBT == null) ? new NBTTagCompound() : rNBT); @@ -34,18 +32,17 @@ public class NBTUtils { return tNBT.getString("title"); } - public static ItemStack[] readItemsFromNBT(ItemStack itemstack){ + public static ItemStack[] readItemsFromNBT(ItemStack itemstack) { NBTTagCompound tNBT = getNBT(itemstack); final NBTTagList list = tNBT.getTagList("Items", 10); ItemStack inventory[] = new ItemStack[list.tagCount()]; - for(int i = 0;i= 0) && (slot < list.tagCount())){ - if (ItemStack.loadItemStackFromNBT(data) == ItemUtils.getSimpleStack(ZZZ_Empty)){ + if ((slot >= 0) && (slot < list.tagCount())) { + if (ItemStack.loadItemStackFromNBT(data) == ItemUtils.getSimpleStack(ZZZ_Empty)) { inventory[slot] = null; - } - else { + } else { inventory[slot] = ItemStack.loadItemStackFromNBT(data); } @@ -53,19 +50,18 @@ public class NBTUtils { } return inventory; } - - public static ItemStack[] readItemsFromNBT(ItemStack itemstack, String customkey){ + + public static ItemStack[] readItemsFromNBT(ItemStack itemstack, String customkey) { NBTTagCompound tNBT = getNBT(itemstack); final NBTTagList list = tNBT.getTagList(customkey, 10); ItemStack inventory[] = new ItemStack[list.tagCount()]; - for(int i = 0;i= 0) && (slot < list.tagCount())){ - if (ItemStack.loadItemStackFromNBT(data) == ItemUtils.getSimpleStack(ZZZ_Empty)){ + if ((slot >= 0) && (slot < list.tagCount())) { + if (ItemStack.loadItemStackFromNBT(data) == ItemUtils.getSimpleStack(ZZZ_Empty)) { inventory[slot] = null; - } - else { + } else { inventory[slot] = ItemStack.loadItemStackFromNBT(data); } @@ -74,18 +70,17 @@ public class NBTUtils { return inventory; } - public static ItemStack writeItemsToNBT(ItemStack itemstack, ItemStack[] stored){ + public static ItemStack writeItemsToNBT(ItemStack itemstack, ItemStack[] stored) { NBTTagCompound tNBT = getNBT(itemstack); final NBTTagList list = new NBTTagList(); - for(int i = 0;i mInternalMap = ReflectionUtils.getField(aNBT, "tagMap"); - - if (mInternalMap != null){ - mInternalMap.forEach( (k,v) -> System.out.println("Key: " + k + ": Value: " + v)); - } - else { - Utils.LOG_INFO("Data map reflected from NBTTagCompound was not valid."); + + public static boolean tryIterateNBTData(ItemStack aStack) { + try { + NBTTagCompound aNBT = NBTUtils.getNBT(aStack); + if (aNBT != null) { + if (!aNBT.hasNoTags()) { + int tagCount = 0; + Map mInternalMap = ReflectionUtils.getField(aNBT, "tagMap"); + + if (mInternalMap != null) { + mInternalMap.forEach((k, v) -> System.out.println("Key: " + k + ": Value: " + v)); + } else { + Utils.LOG_INFO("Data map reflected from NBTTagCompound was not valid."); + return false; + } + } else { return false; - } - } - else { + } + } else { return false; } - } - else { + return true; + } catch (Throwable t) { return false; } - return true; } - } -- cgit