diff --git a/src/main/java/gregtechmod/api/GregTech_API.java b/src/main/java/gregtechmod/api/GregTech_API.java index 66bed0b..a87e529 100644 --- a/src/main/java/gregtechmod/api/GregTech_API.java +++ b/src/main/java/gregtechmod/api/GregTech_API.java @@ -129,6 +129,9 @@ public class GregTech_API { /** The Icon List for Covers */ public static final Map sCovers = new HashMap(); + /** The Item List for Covers */ + public static final Map sCoversItems = new HashMap(); + /** The List of Circuit Behaviors for the Redstone Circuit Block */ public static final Map sCircuitryBehaviors = new HashMap(); @@ -526,8 +529,11 @@ public class GregTech_API { * Best is you make a Runnable with all Cover Registrations, and add it to the Cover Registration ArrayList ontop of this File. */ public static void registerCover(ItemStack aStack, IIcon aCover) { - int tStack = GT_Utility.stackToInt(aStack); - if (tStack != 0 && sCovers.get(tStack) == null) sCovers.put(tStack, aCover); + int tStack = GT_Utility.stackToInt1(aStack); + if (tStack != 0 && sCovers.get(tStack) == null) { + sCoversItems.put(tStack, aStack.copy()); + sCovers.put(tStack, aCover); + } } /** @@ -568,7 +574,7 @@ public class GregTech_API { * returns a Cover behavior, guaranteed to not return null after preload */ public static GT_CoverBehavior getCoverBehavior(ItemStack aStack) { - return getCoverBehavior(GT_Utility.stackToInt(aStack)); + return getCoverBehavior(GT_Utility.stackToInt1(aStack)); } /** diff --git a/src/main/java/gregtechmod/api/metatileentity/BaseMetaPipeEntity.java b/src/main/java/gregtechmod/api/metatileentity/BaseMetaPipeEntity.java index 896e2bb..f4808d7 100644 --- a/src/main/java/gregtechmod/api/metatileentity/BaseMetaPipeEntity.java +++ b/src/main/java/gregtechmod/api/metatileentity/BaseMetaPipeEntity.java @@ -604,7 +604,7 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE if (getCoverIDAtSide(cSide) == 0) { if (GT_Utility.isItemStackInIntList(aPlayer.inventory.getCurrentItem(), GregTech_API.sCovers.keySet())) { - if (GregTech_API.getCoverBehavior(aPlayer.inventory.getCurrentItem()).isCoverPlaceable(cSide, GT_Utility.stackToInt(aPlayer.inventory.getCurrentItem()), this) && mMetaTileEntity.allowCoverOnSide(cSide, GT_Utility.stackToInt(aPlayer.inventory.getCurrentItem()))) { + if (GregTech_API.getCoverBehavior(aPlayer.inventory.getCurrentItem()).isCoverPlaceable(cSide, GT_Utility.stackToInt1(aPlayer.inventory.getCurrentItem()), this) && mMetaTileEntity.allowCoverOnSide(cSide, GT_Utility.stackToInt1(aPlayer.inventory.getCurrentItem()))) { setCoverItemAtSide(cSide, aPlayer.inventory.getCurrentItem()); if (!aPlayer.capabilities.isCreativeMode) aPlayer.inventory.getCurrentItem().stackSize--; GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(100), 1.0F, -1, xCoord, yCoord, zCoord); @@ -850,7 +850,7 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE @Override public void setCoverItemAtSide(byte aSide, ItemStack aCover) { - setCoverIDAtSide(aSide, GT_Utility.stackToInt(aCover)); + setCoverIDAtSide(aSide, GT_Utility.stackToInt1(aCover)); } @Override @@ -860,7 +860,7 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE @Override public ItemStack getCoverItemAtSide(byte aSide) { - return GT_Utility.intToStack(getCoverIDAtSide(aSide)); + return GT_Utility.getCoverByID(getCoverIDAtSide(aSide)); } @Override diff --git a/src/main/java/gregtechmod/api/metatileentity/BaseMetaTileEntity.java b/src/main/java/gregtechmod/api/metatileentity/BaseMetaTileEntity.java index f45c77b..71abc6b 100644 --- a/src/main/java/gregtechmod/api/metatileentity/BaseMetaTileEntity.java +++ b/src/main/java/gregtechmod/api/metatileentity/BaseMetaTileEntity.java @@ -888,7 +888,7 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE if (getCoverIDAtSide(aSide) == 0) { if (GT_Utility.isItemStackInIntList(aPlayer.inventory.getCurrentItem(), GregTech_API.sCovers.keySet())) { - if (GregTech_API.getCoverBehavior(aPlayer.inventory.getCurrentItem()).isCoverPlaceable(aSide, GT_Utility.stackToInt(aPlayer.inventory.getCurrentItem()), this) && mMetaTileEntity.allowCoverOnSide(aSide, GT_Utility.stackToInt(aPlayer.inventory.getCurrentItem()))) { + if (GregTech_API.getCoverBehavior(aPlayer.inventory.getCurrentItem()).isCoverPlaceable(aSide, GT_Utility.stackToInt1(aPlayer.inventory.getCurrentItem()), this) && mMetaTileEntity.allowCoverOnSide(aSide, GT_Utility.stackToInt1(aPlayer.inventory.getCurrentItem()))) { setCoverItemAtSide(aSide, aPlayer.inventory.getCurrentItem()); if (!aPlayer.capabilities.isCreativeMode) aPlayer.inventory.getCurrentItem().stackSize--; GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(100), 1.0F, -1, xCoord, yCoord, zCoord); @@ -1287,7 +1287,7 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE @Override public void setCoverItemAtSide(byte aSide, ItemStack aCover) { - setCoverIDAtSide(aSide, GT_Utility.stackToInt(aCover)); + setCoverIDAtSide(aSide, GT_Utility.stackToInt1(aCover)); } @Override @@ -1297,7 +1297,7 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE @Override public ItemStack getCoverItemAtSide(byte aSide) { - return GT_Utility.intToStack(getCoverIDAtSide(aSide)); + return GT_Utility.getCoverByID(getCoverIDAtSide(aSide)); } @Override diff --git a/src/main/java/gregtechmod/api/util/GT_CoverBehavior.java b/src/main/java/gregtechmod/api/util/GT_CoverBehavior.java index 3e2734f..bee531c 100644 --- a/src/main/java/gregtechmod/api/util/GT_CoverBehavior.java +++ b/src/main/java/gregtechmod/api/util/GT_CoverBehavior.java @@ -15,7 +15,7 @@ public abstract class GT_CoverBehavior { * Gives all Covers which are out of these Stacks a special behavior. */ public GT_CoverBehavior(ItemStack[] aCovers) { - for (ItemStack tCover : aCovers) GregTech_API.sCoverBehaviors.put(GT_Utility.stackToInt(tCover), this); + for (ItemStack tCover : aCovers) GregTech_API.sCoverBehaviors.put(GT_Utility.stackToInt1(tCover), this); } /** @@ -29,7 +29,7 @@ public abstract class GT_CoverBehavior { * Gives Cover which is out of this Stack a special behavior. */ public GT_CoverBehavior(ItemStack aCover) { - GregTech_API.sCoverBehaviors.put(GT_Utility.stackToInt(aCover), this); + GregTech_API.sCoverBehaviors.put(GT_Utility.stackToInt1(aCover), this); } /** diff --git a/src/main/java/gregtechmod/api/util/GT_Utility.java b/src/main/java/gregtechmod/api/util/GT_Utility.java index b21a50b..336ef7d 100644 --- a/src/main/java/gregtechmod/api/util/GT_Utility.java +++ b/src/main/java/gregtechmod/api/util/GT_Utility.java @@ -862,7 +862,9 @@ public class GT_Utility { public static int stackToInt(ItemStack aStack, boolean aForceWildcard) { if (isStackInvalid(aStack)) return -1; if (aStack.getItem().delegate == null || aStack.getItem().delegate.name() == null) throw new IllegalStateException(); - return aStack.getItem().delegate.name().hashCode() | ((aForceWildcard ? GregTech_API.ITEM_WILDCARD_DAMAGE : Items.feather.getDamage(aStack)) << 16); + int code = aStack.getItem().delegate.name().hashCode(); + code = 31 * code + (aForceWildcard ? GregTech_API.ITEM_WILDCARD_DAMAGE : Items.feather.getDamage(aStack)); + return code; } public static int stackToInt(ItemStack aStack) { @@ -870,34 +872,6 @@ public class GT_Utility { return Item.getIdFromItem(aStack.getItem()) | (Items.feather.getDamage(aStack) << 16); } - public static int stackArrayToInt(ItemStack[] stacks) { - int result = 0; - for (ItemStack stack : stacks) result += stackToInt(stack); - return result; - } - - public static boolean doesStackArraysSame(ItemStack[] stacks1, ItemStack[] stacks2) { - List l1 = Arrays.stream(stacks1).map(stk -> ItemStackKey.from(stk)).collect(Collectors.toList()); - List l2 = Arrays.stream(stacks2).map(stk -> ItemStackKey.from(stk)).collect(Collectors.toList()); - return l1.size() == l2.size() && l1.containsAll(l2); - } - - public static boolean doesRecipeInputsSame(ItemStack[][] s1, ItemStack[][] s2) { - if (s1.length == s2.length) { - List> l1 = Arrays.stream(s1) - .map(arr -> Arrays.stream(arr).map(stack -> ItemStackKey.from(stack)).sorted().collect(Collectors.toList())) - .sorted() - .collect(Collectors.toList()); - List> l2 = Arrays.stream(s2) - .map(arr -> Arrays.stream(arr).map(stack -> ItemStackKey.from(stack)).sorted().collect(Collectors.toList())) - .sorted() - .collect(Collectors.toList()); - return l1.containsAll(l2); - } - - return false; - } - public static int stackToWildcard(ItemStack aStack) { if (isStackInvalid(aStack)) return 0; return Item.getIdFromItem(aStack.getItem()) | (GregTech_API.ITEM_WILDCARD_DAMAGE << 16); @@ -911,35 +885,8 @@ public class GT_Utility { return code < 0 ? code : -code; } - public static ItemStack intToStack(int aStack) { - int tID = aStack&(~0>>>16), tMeta = aStack>>>16; - Item tItem = (Item) Item.itemRegistry.getObjectById(tID); - if (tID > 0 && tItem != null) return new ItemStack(tItem, 1, tMeta); - return null; - } - - public static Integer[] stacksToIntegerArray(ItemStack... aStacks) { - Integer[] rArray = new Integer[aStacks.length]; - for (int i = 0; i < rArray.length; i++) { - rArray[i] = stackToInt(aStacks[i]); - } - return rArray; - } - - public static int[] stacksToIntArray(ItemStack... aStacks) { - int[] rArray = new int[aStacks.length]; - for (int i = 0; i < rArray.length; i++) { - rArray[i] = stackToInt(aStacks[i]); - } - return rArray; - } - - public static long stacksToLong(ItemStack aStack1, ItemStack aStack2) { - return stackToInt(aStack1) | (((long)stackToInt(aStack2)) << 32); - } - - public static boolean arrayContains(Object aObject, Object... aObjects) { - return Arrays.asList(aObjects).contains(aObject); + public static ItemStack getCoverByID(int aStack) { + return GregTech_API.sCoversItems.get(Integer.valueOf(aStack)); } public static boolean isBlockValid(Object aBlock) { @@ -976,7 +923,7 @@ public class GT_Utility { public static boolean isItemStackInIntList(ItemStack aStack, Collection aList) { if (isStackInvalid(aStack) || aList == null) return false; - return aList.contains(stackToInt(aStack)) || aList.contains(stackToWildcard(aStack)); + return aList.contains(stackToInt(aStack, false)) || aList.contains(stackToInt(aStack, true)); } public static boolean isItemStackInList(ItemStack aStack, Collection aList) { diff --git a/src/main/java/gregtechmod/common/covers/GT_Cover_RedstoneWirelessBase.java b/src/main/java/gregtechmod/common/covers/GT_Cover_RedstoneWirelessBase.java index ead340e..468797f 100644 --- a/src/main/java/gregtechmod/common/covers/GT_Cover_RedstoneWirelessBase.java +++ b/src/main/java/gregtechmod/common/covers/GT_Cover_RedstoneWirelessBase.java @@ -25,7 +25,7 @@ public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { public boolean onCoverRightclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { if (((aX > 0.375 && aX < 0.625) || aSide > 3) && ((aY > 0.375 && aY < 0.625) || aSide < 2) && ((aZ > 0.375 && aZ < 0.625) || aSide == 2 || aSide == 3)) { GregTech_API.sWirelessRedstone.put(aCoverVariable, (byte)0); - aCoverVariable = GT_Utility.stackToInt(aPlayer.inventory.getCurrentItem()); + aCoverVariable = GT_Utility.stackToInt1(aPlayer.inventory.getCurrentItem()); aTileEntity.setCoverDataAtSide(aSide, aCoverVariable); GT_Utility.sendChatToPlayer(aPlayer, new ChatComponentTranslation("metatileentity.GT_Tesseract.message.1", aCoverVariable)); return true; diff --git a/src/main/java/gregtechmod/common/tileentities/redstone/GT_MetaTileEntity_RedstoneCircuitBlock.java b/src/main/java/gregtechmod/common/tileentities/redstone/GT_MetaTileEntity_RedstoneCircuitBlock.java index 7c0221a..103ddc2 100644 --- a/src/main/java/gregtechmod/common/tileentities/redstone/GT_MetaTileEntity_RedstoneCircuitBlock.java +++ b/src/main/java/gregtechmod/common/tileentities/redstone/GT_MetaTileEntity_RedstoneCircuitBlock.java @@ -129,7 +129,7 @@ public class GT_MetaTileEntity_RedstoneCircuitBlock extends MetaTileEntity imple } public void stackGateData(int aIndex, ItemStack aStack) { - mGateData[aIndex] = GT_Utility.stackToInt(aStack); + mGateData[aIndex] = GT_Utility.stackToInt1(aStack); validateGateData(); } @@ -162,10 +162,10 @@ public class GT_MetaTileEntity_RedstoneCircuitBlock extends MetaTileEntity imple GT_CircuitryBehavior tBehaviour = GregTech_API.sCircuitryBehaviors.get(mGate); if (tBehaviour != null) {try{ tBehaviour.onTick(mGateData, this); - if (tBehaviour.displayItemStack(mGateData, this, 0)) mInventory[1] = GT_Utility.intToStack(mGateData[0]); - if (tBehaviour.displayItemStack(mGateData, this, 1)) mInventory[2] = GT_Utility.intToStack(mGateData[1]); - if (tBehaviour.displayItemStack(mGateData, this, 2)) mInventory[3] = GT_Utility.intToStack(mGateData[2]); - if (tBehaviour.displayItemStack(mGateData, this, 3)) mInventory[4] = GT_Utility.intToStack(mGateData[3]); + if (tBehaviour.displayItemStack(mGateData, this, 0)) mInventory[1] = GT_Utility.getCoverByID(mGateData[0]); + if (tBehaviour.displayItemStack(mGateData, this, 1)) mInventory[2] = GT_Utility.getCoverByID(mGateData[1]); + if (tBehaviour.displayItemStack(mGateData, this, 2)) mInventory[3] = GT_Utility.getCoverByID(mGateData[2]); + if (tBehaviour.displayItemStack(mGateData, this, 3)) mInventory[4] = GT_Utility.getCoverByID(mGateData[3]); } catch(Throwable e) {GT_Log.log.catching(e);}} } getBaseMetaTileEntity().setErrorDisplayID(0);