From 1f32651f1c06613f93a2c6e93d2650c5c5f8ab7b Mon Sep 17 00:00:00 2001 From: Pilzinsel64 Date: Sat, 11 Jan 2025 00:08:29 +0100 Subject: [PATCH] remove ItemGroup & fixup proxy port - use ItemStack directly instead of an ItemGroup - continue read/write the stack size separately, but as integer instead of long - overhaul proxy port inventory management to finally work with hoppers & ender io conduits (not tested yet with other mods) - remove early mixins --- gradle.properties | 2 +- .../zerofall/ezstorage/EarlyMixinPlugin.java | 52 ------------------ .../ezstorage/gui/GuiStorageCore.java | 30 +++++------ .../mixins/early/MixinTileEntityHopper.java | 32 ----------- .../tileentity/TileEntityInventoryProxy.java | 38 +++++++------ .../tileentity/TileEntityStorageCore.java | 21 ++++---- .../zerofall/ezstorage/util/EZInventory.java | 54 ++++++++++--------- .../zerofall/ezstorage/util/ItemGroup.java | 37 ------------- .../util/ItemStackCountComparator.java | 15 ++++++ .../resources/mixins.ezstorage.early.json | 11 ---- 10 files changed, 90 insertions(+), 202 deletions(-) delete mode 100644 src/main/java/com/zerofall/ezstorage/EarlyMixinPlugin.java delete mode 100644 src/main/java/com/zerofall/ezstorage/mixins/early/MixinTileEntityHopper.java delete mode 100644 src/main/java/com/zerofall/ezstorage/util/ItemGroup.java create mode 100644 src/main/java/com/zerofall/ezstorage/util/ItemStackCountComparator.java delete mode 100644 src/main/resources/mixins.ezstorage.early.json diff --git a/gradle.properties b/gradle.properties index 22c0368..87bf934 100644 --- a/gradle.properties +++ b/gradle.properties @@ -93,7 +93,7 @@ mixinsPackage = mixins # Specify the core mod entry class if you use a core mod. This class must implement IFMLLoadingPlugin! # This parameter is for legacy compatibility only # Example value: (coreModClass = asm.FMLPlugin) + (modGroup = com.myname.mymodid) -> com.myname.mymodid.asm.FMLPlugin -coreModClass = EarlyMixinPlugin +coreModClass = # If your project is only a consolidation of mixins or a core mod and does NOT contain a 'normal' mod ( = some class # that is annotated with @Mod) you want this to be true. When in doubt: leave it on false! diff --git a/src/main/java/com/zerofall/ezstorage/EarlyMixinPlugin.java b/src/main/java/com/zerofall/ezstorage/EarlyMixinPlugin.java deleted file mode 100644 index b44e40b..0000000 --- a/src/main/java/com/zerofall/ezstorage/EarlyMixinPlugin.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.zerofall.ezstorage; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import com.gtnewhorizon.gtnhmixins.IEarlyMixinLoader; - -import cpw.mods.fml.relauncher.IFMLLoadingPlugin; - -@IFMLLoadingPlugin.Name("EarlyMixinPlugin") -@IFMLLoadingPlugin.MCVersion("1.7.10") -public class EarlyMixinPlugin implements IFMLLoadingPlugin, IEarlyMixinLoader { - - @Override - public String getMixinConfig() { - return "mixins.ezstorage.early.json"; - } - - @Override - public List getMixins(Set loadedMods) { - List list = new ArrayList(); - - list.add("MixinTileEntityHopper"); - - return list; - } - - @Override - public String[] getASMTransformerClass() { - return null; - } - - @Override - public String getModContainerClass() { - return null; - } - - @Override - public String getSetupClass() { - return null; - } - - @Override - public void injectData(Map data) {} - - @Override - public String getAccessTransformerClass() { - return null; - } -} diff --git a/src/main/java/com/zerofall/ezstorage/gui/GuiStorageCore.java b/src/main/java/com/zerofall/ezstorage/gui/GuiStorageCore.java index 60b2f8b..4cbc7b0 100644 --- a/src/main/java/com/zerofall/ezstorage/gui/GuiStorageCore.java +++ b/src/main/java/com/zerofall/ezstorage/gui/GuiStorageCore.java @@ -28,7 +28,7 @@ import com.zerofall.ezstorage.network.MyMessage; import com.zerofall.ezstorage.tileentity.TileEntityStorageCore; import com.zerofall.ezstorage.util.EZItemRenderer; -import com.zerofall.ezstorage.util.ItemGroup; +import com.zerofall.ezstorage.util.ItemStackCountComparator; import codechicken.nei.SearchField; import codechicken.nei.api.ItemFilter; @@ -46,7 +46,7 @@ public class GuiStorageCore extends GuiContainer { "textures/gui/container/creative_inventory/tab_item_search.png"); private float currentScroll; private GuiTextField searchField; - private List filteredList; + private List filteredList; private ItemStack mouseOverItem; protected List extraButtons; @@ -65,7 +65,7 @@ public void initGui() { this.searchField.setCanLoseFocus(true); this.searchField.setFocused(true); this.searchField.setText(""); - filteredList = new ArrayList(this.tileEntity.inventory.inventory); + filteredList = new ArrayList(this.tileEntity.inventory.inventory); extraButtons = new ArrayList(); } @@ -139,15 +139,14 @@ protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { break; } - ItemGroup group = this.filteredList.get(index); - ItemStack stack = group.itemStack; + ItemStack stack = this.filteredList.get(index); FontRenderer font = null; if (stack != null) font = stack.getItem() .getFontRenderer(stack); if (font == null) font = fontRendererObj; RenderHelper.enableGUIStandardItemLighting(); itemRender.renderItemAndEffectIntoGUI(font, this.mc.getTextureManager(), stack, x, y); - ezRenderer.renderItemOverlayIntoGUI(font, stack, x, y, "" + group.count); + ezRenderer.renderItemOverlayIntoGUI(font, stack, x, y, "" + stack.stackSize); x += 18; } if (finished) { @@ -177,10 +176,10 @@ protected void cacheMouseOverItem(int mouseX, int mouseY) { if (slot != null) { if (slot < this.filteredList.size()) { - ItemGroup group = this.filteredList.get(slot); + ItemStack group = this.filteredList.get(slot); if (group != null) { - mouseOverItem = group.itemStack; + mouseOverItem = group; return; } } @@ -205,7 +204,7 @@ private void updateFilteredItems() { .trim(); if (filteredList == null) { - filteredList = new ArrayList(); + filteredList = new ArrayList(); } filteredList.clear(); @@ -217,13 +216,12 @@ private void updateFilteredItems() { filterItems(searchText.toLowerCase()); } - Collections.sort(filteredList, new ItemGroup.CountComparator()); + Collections.sort(filteredList, new ItemStackCountComparator()); } private void filterItems(String searchText) { - for (ItemGroup group : this.tileEntity.inventory.inventory) { - List infos = group.itemStack - .getTooltip(this.mc.thePlayer, this.mc.gameSettings.advancedItemTooltips); + for (ItemStack group : this.tileEntity.inventory.inventory) { + List infos = group.getTooltip(this.mc.thePlayer, this.mc.gameSettings.advancedItemTooltips); for (String info : infos) { if (EnumChatFormatting.getTextWithoutFormattingCodes(info) .toLowerCase() @@ -239,8 +237,8 @@ private void filterItemsViaNei(String searchText) { ItemFilter filter = SearchField.getFilter(searchText); boolean matches; - for (ItemGroup group : this.tileEntity.inventory.inventory) { - matches = filter.matches(group.itemStack); + for (ItemStack group : this.tileEntity.inventory.inventory) { + matches = filter.matches(group); if (matches) { filteredList.add(group); @@ -286,7 +284,7 @@ protected void mouseClicked(int mouseX, int mouseY, int mouseButton) { } int index = this.tileEntity.inventory.slotCount(); if (slot < this.filteredList.size()) { - ItemGroup group = this.filteredList.get(slot); + ItemStack group = this.filteredList.get(slot); if (group != null) { index = this.tileEntity.inventory.inventory.indexOf(group); if (index < 0) { diff --git a/src/main/java/com/zerofall/ezstorage/mixins/early/MixinTileEntityHopper.java b/src/main/java/com/zerofall/ezstorage/mixins/early/MixinTileEntityHopper.java deleted file mode 100644 index 2e83892..0000000 --- a/src/main/java/com/zerofall/ezstorage/mixins/early/MixinTileEntityHopper.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.zerofall.ezstorage.mixins.early; - -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntityHopper; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import com.zerofall.ezstorage.tileentity.TileEntityInventoryProxy; - -@Mixin(TileEntityHopper.class) -public abstract class MixinTileEntityHopper { - - @WrapOperation( - method = "func_145899_c", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/inventory/IInventory;getStackInSlot(I)Lnet/minecraft/item/ItemStack;"), - remap = false) - private static ItemStack ezstorage$TileEntityHopper$fixInputToTileEntityInputPort(IInventory inventory, int slot, - Operation original) { - if (inventory instanceof TileEntityInventoryProxy) { - // Force calling setInventorySlotContents() as we can't support directly editing stack size of ItemStack (it - // can only be handled handled via ItemGroup.count)! - return null; - } - return original.call(inventory, slot); - } -} diff --git a/src/main/java/com/zerofall/ezstorage/tileentity/TileEntityInventoryProxy.java b/src/main/java/com/zerofall/ezstorage/tileentity/TileEntityInventoryProxy.java index a43f726..94469fe 100644 --- a/src/main/java/com/zerofall/ezstorage/tileentity/TileEntityInventoryProxy.java +++ b/src/main/java/com/zerofall/ezstorage/tileentity/TileEntityInventoryProxy.java @@ -9,7 +9,6 @@ import com.zerofall.ezstorage.configuration.EZConfiguration; import com.zerofall.ezstorage.util.EZInventory; -import com.zerofall.ezstorage.util.ItemGroup; public class TileEntityInventoryProxy extends TileEntity implements ISidedInventory { @@ -18,7 +17,7 @@ public class TileEntityInventoryProxy extends TileEntity implements ISidedInvent @Override public int getSizeInventory() { if (core == null) { - return 0; + return 1; } int size = core.inventory.inventory.size(); if (core.inventory.getTotalCount() < core.inventory.maxItems @@ -30,11 +29,8 @@ public int getSizeInventory() { @Override public ItemStack getStackInSlot(int index) { - if (index < core.inventory.inventory.size()) { - ItemGroup group = core.inventory.inventory.get(index); - ItemStack copy = group.itemStack.copy(); - copy.stackSize = (int) group.count; - return copy; + if (core != null && index < core.inventory.inventory.size()) { + return core.inventory.inventory.get(index); } return null; } @@ -48,10 +44,18 @@ public ItemStack decrStackSize(int index, int count) { @Override public void setInventorySlotContents(int index, ItemStack stack) { - if (stack != null && stack.stackSize != 0 && isItemValidForSlot(index, stack)) { + if (core == null) { + return; + } else if (stack == null || stack.stackSize == 0) { + core.inventory.inventory.remove(index); + } else if (index >= core.inventory.inventory.size()) { core.inventory.input(stack); - core.updateTileEntity(); + } else if (isItemValidForSlot(index, stack)) { + core.inventory.inventory.set(index, stack); + } else { + return; } + core.updateTileEntity(); } @Override @@ -85,15 +89,15 @@ public boolean isItemValidForSlot(int index, ItemStack stack) { // Search for existing group of the given item type for (int i = 0; i < itemsCount; i++) { - ItemGroup group = core.inventory.inventory.get(i); - if (EZInventory.stacksEqual(group.itemStack, stack)) { + ItemStack group = core.inventory.inventory.get(i); + if (EZInventory.stacksEqual(group, stack)) { foundIndex = i; } } // Permit if the destination is a new slot and the item doesn't exist if (index >= core.inventory.inventory.size()) { - return foundIndex == -1; + return true; // return foundIndex == -1; } // Permit if the item eixsts and is in the destination slot @@ -103,13 +107,13 @@ public boolean isItemValidForSlot(int index, ItemStack stack) { // If the item doesn't exist, permit if the destination slot is empty if (index == -1) { - ItemGroup group = core.inventory.inventory.get(index); - if (group == null || group.count == 0 || group.itemStack == null) { + ItemStack group = core.inventory.inventory.get(index); + if (group == null || group.stackSize == 0) { return true; } } - // Deny if the item exists but in another slot + // Permit if the item exists but in another slot return false; } @@ -130,8 +134,8 @@ public boolean canExtractItem(int index, ItemStack stack, int direction) { } // The item in the slot needs to be the same as the given item - ItemGroup theGroup = core.inventory.inventory.get(index); - return theGroup != null && theGroup.itemStack != null && EZInventory.stacksEqual(theGroup.itemStack, stack); + ItemStack theGroup = core.inventory.inventory.get(index); + return theGroup != null && EZInventory.stacksEqual(theGroup, stack); } @Override diff --git a/src/main/java/com/zerofall/ezstorage/tileentity/TileEntityStorageCore.java b/src/main/java/com/zerofall/ezstorage/tileentity/TileEntityStorageCore.java index 50f0018..941dd47 100644 --- a/src/main/java/com/zerofall/ezstorage/tileentity/TileEntityStorageCore.java +++ b/src/main/java/com/zerofall/ezstorage/tileentity/TileEntityStorageCore.java @@ -26,7 +26,6 @@ import com.zerofall.ezstorage.util.BlockRef; import com.zerofall.ezstorage.util.EZInventory; import com.zerofall.ezstorage.util.EZStorageUtils; -import com.zerofall.ezstorage.util.ItemGroup; public class TileEntityStorageCore extends TileEntity { @@ -82,12 +81,11 @@ public void writeToNBT(NBTTagCompound paramNBTTagCompound) { super.writeToNBT(paramNBTTagCompound); NBTTagList nbttaglist = new NBTTagList(); for (int i = 0; i < this.inventory.slotCount(); ++i) { - ItemGroup group = this.inventory.inventory.get(i); - if (group != null && group.itemStack != null && group.count > 0) { + ItemStack group = this.inventory.inventory.get(i); + if (group != null && group.stackSize > 0) { NBTTagCompound nbttagcompound1 = new NBTTagCompound(); - nbttagcompound1.setByte("Index", (byte) i); - group.itemStack.writeToNBT(nbttagcompound1); - nbttagcompound1.setLong("InternalCount", group.count); + group.writeToNBT(nbttagcompound1); + nbttagcompound1.setInteger("InternalCount", group.stackSize); nbttaglist.appendTag(nbttagcompound1); } } @@ -102,13 +100,16 @@ public void readFromNBT(NBTTagCompound paramNBTTagCompound) { NBTTagList nbttaglist = paramNBTTagCompound.getTagList("Internal", 10); if (nbttaglist != null) { - inventory.inventory = new ArrayList(); + inventory.inventory = new ArrayList(); for (int i = 0; i < nbttaglist.tagCount(); ++i) { NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(i); ItemStack stack = ItemStack.loadItemStackFromNBT(nbttagcompound1); - long count = nbttagcompound1.getLong("InternalCount"); - ItemGroup group = new ItemGroup(stack, count); - this.inventory.inventory.add(group); + if (nbttagcompound1.hasKey("InternalCount", 3)) { + stack.stackSize = (int) nbttagcompound1.getInteger("InternalCount"); + } else if (nbttagcompound1.hasKey("InternalCount", 4)) { + stack.stackSize = (int) nbttagcompound1.getLong("InternalCount"); + } + this.inventory.inventory.add(stack); } } long maxItems = paramNBTTagCompound.getLong("InternalMax"); diff --git a/src/main/java/com/zerofall/ezstorage/util/EZInventory.java b/src/main/java/com/zerofall/ezstorage/util/EZInventory.java index c2730b5..3ae1688 100644 --- a/src/main/java/com/zerofall/ezstorage/util/EZInventory.java +++ b/src/main/java/com/zerofall/ezstorage/util/EZInventory.java @@ -12,11 +12,11 @@ public class EZInventory { - public List inventory; + public List inventory; public long maxItems = 0; public EZInventory() { - inventory = new ArrayList(); + inventory = new ArrayList(); } public ItemStack input(ItemStack itemStack) { @@ -31,14 +31,14 @@ public ItemStack input(ItemStack itemStack) { } public void sort() { - Collections.sort(this.inventory, new ItemGroup.CountComparator()); + Collections.sort(this.inventory, new ItemStackCountComparator()); } private ItemStack mergeStack(ItemStack itemStack, int amount) { boolean found = false; - for (ItemGroup group : inventory) { - if (stacksEqual(group.itemStack, itemStack)) { - group.count += amount; + for (ItemStack group : inventory) { + if (stacksEqual(group, itemStack)) { + group.stackSize += amount; found = true; break; } @@ -49,7 +49,9 @@ private ItemStack mergeStack(ItemStack itemStack, int amount) { if (slotCount() > EZConfiguration.maxItemTypes) { return null; } - inventory.add(new ItemGroup(itemStack, amount)); + ItemStack copy = itemStack.copy(); + copy.stackSize = amount; + inventory.add(copy); } // Adjust input/return stack @@ -66,9 +68,9 @@ public ItemStack getItemsAt(int index, int type) { if (index >= inventory.size()) { return null; } - ItemGroup group = inventory.get(index); - ItemStack stack = group.itemStack.copy(); - int size = (int) Math.min((long) stack.getMaxStackSize(), group.count); + ItemStack group = inventory.get(index); + ItemStack stack = group.copy(); + int size = Math.min(stack.getMaxStackSize(), group.stackSize); if (size > 1) { if (type == 1) { size = size / 2; @@ -77,8 +79,8 @@ public ItemStack getItemsAt(int index, int type) { } } stack.stackSize = size; - group.count -= size; - if (group.count <= 0) { + group.stackSize -= size; + if (group.stackSize <= 0) { inventory.remove(index); } return stack; @@ -88,28 +90,28 @@ public ItemStack getItemStackAt(int index, int size) { if (index >= inventory.size()) { return null; } - ItemGroup group = inventory.get(index); - ItemStack stack = group.itemStack.copy(); - if (size > group.count) { - size = (int) Math.min(group.count, Integer.MAX_VALUE); + ItemStack group = inventory.get(index); + ItemStack stack = group.copy(); + if (size > group.stackSize) { + size = group.stackSize; } stack.stackSize = size; - group.count -= size; - if (group.count <= 0) { + group.stackSize -= size; + if (group.stackSize <= 0) { inventory.remove(index); } return stack; } public ItemStack getItems(ItemStack[] itemStacks) { - for (ItemGroup group : inventory) { + for (ItemStack group : inventory) { for (ItemStack itemStack : itemStacks) { - if (stacksEqual(group.itemStack, itemStack)) { - if (group.count >= itemStack.stackSize) { - ItemStack stack = group.itemStack.copy(); + if (stacksEqual(group, itemStack)) { + if (group.stackSize >= itemStack.stackSize) { + ItemStack stack = group.copy(); stack.stackSize = itemStack.stackSize; - group.count -= itemStack.stackSize; - if (group.count <= 0) { + group.stackSize -= itemStack.stackSize; + if (group.stackSize <= 0) { inventory.remove(group); } return stack; @@ -144,8 +146,8 @@ public static boolean stacksEqual(ItemStack stack1, ItemStack stack2) { public long getTotalCount() { long count = 0; - for (ItemGroup group : inventory) { - count += group.count; + for (ItemStack group : inventory) { + count += group.stackSize; } return count; } diff --git a/src/main/java/com/zerofall/ezstorage/util/ItemGroup.java b/src/main/java/com/zerofall/ezstorage/util/ItemGroup.java deleted file mode 100644 index 3826201..0000000 --- a/src/main/java/com/zerofall/ezstorage/util/ItemGroup.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.zerofall.ezstorage.util; - -import java.util.Comparator; - -import net.minecraft.item.ItemStack; - -public class ItemGroup { - - public ItemStack itemStack; - public long count; - - public ItemGroup(ItemStack itemStack) { - this.itemStack = itemStack; - this.count = itemStack.stackSize; - } - - public ItemGroup(ItemStack itemStack, long count) { - this.itemStack = itemStack; - this.count = count; - } - - @Override - public String toString() { - return itemStack.getDisplayName() + ":" + count; - } - - public static class CountComparator implements Comparator { - - @Override - public int compare(ItemGroup o1, ItemGroup o2) { - Long l1 = (Long) o1.count; - Long l2 = (Long) o2.count; - return l2.compareTo(l1); - } - - } -} diff --git a/src/main/java/com/zerofall/ezstorage/util/ItemStackCountComparator.java b/src/main/java/com/zerofall/ezstorage/util/ItemStackCountComparator.java new file mode 100644 index 0000000..a1a5851 --- /dev/null +++ b/src/main/java/com/zerofall/ezstorage/util/ItemStackCountComparator.java @@ -0,0 +1,15 @@ +package com.zerofall.ezstorage.util; + +import java.util.Comparator; + +import net.minecraft.item.ItemStack; + +public class ItemStackCountComparator implements Comparator { + + @Override + public int compare(ItemStack o1, ItemStack o2) { + Integer l1 = o1.stackSize; + Integer l2 = o2.stackSize; + return l2.compareTo(l1); + } +} diff --git a/src/main/resources/mixins.ezstorage.early.json b/src/main/resources/mixins.ezstorage.early.json deleted file mode 100644 index c3dddcc..0000000 --- a/src/main/resources/mixins.ezstorage.early.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "required": true, - "minVersion": "0.7.11", - "package": "com.zerofall.ezstorage.mixins.early", - "refmap": "mixins.ezstorage.refmap.json", - "target": "@env(DEFAULT)", - "compatibilityLevel": "JAVA_8", - "overwrites": { - "conformVisibility": true - } -}