From 10468e762ef7e442afbd1f09a8e042249c42f132 Mon Sep 17 00:00:00 2001 From: Ayutac Date: Sun, 20 Nov 2022 17:31:31 +0100 Subject: [PATCH] Fixed #2580 (#3069) Disabled putting storage units into other storage units. The overflow can still be triggered in other ways, but players must be very deliberate for that... Co-authored-by: ayutac --- .../techreborn/datagen/tags/TRItemTagProvider.groovy | 3 +++ .../storage/item/StorageUnitBaseBlockEntity.java | 9 +++++++-- src/main/java/techreborn/init/TRContent.java | 1 + 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/datagen/groovy/techreborn/datagen/tags/TRItemTagProvider.groovy b/src/datagen/groovy/techreborn/datagen/tags/TRItemTagProvider.groovy index f129b541d..a93d672f0 100644 --- a/src/datagen/groovy/techreborn/datagen/tags/TRItemTagProvider.groovy +++ b/src/datagen/groovy/techreborn/datagen/tags/TRItemTagProvider.groovy @@ -73,6 +73,9 @@ class TRItemTagProvider extends ItemTagProvider { getOrCreateTagBuilder(plate.asTag()).add(plate.asItem()) getOrCreateTagBuilder(TRContent.ItemTags.PLATES).add(plate.asItem()) } + TRContent.StorageUnit.values().each {unit -> + getOrCreateTagBuilder(TRContent.ItemTags.STORAGE_UNITS).add(unit.asItem()) + } getOrCreateTagBuilder(TRContent.ItemTags.RUBBER_LOGS) .add(TRContent.RUBBER_LOG.asItem()) diff --git a/src/main/java/techreborn/blockentity/storage/item/StorageUnitBaseBlockEntity.java b/src/main/java/techreborn/blockentity/storage/item/StorageUnitBaseBlockEntity.java index 284452a3a..d7d7ce26d 100644 --- a/src/main/java/techreborn/blockentity/storage/item/StorageUnitBaseBlockEntity.java +++ b/src/main/java/techreborn/blockentity/storage/item/StorageUnitBaseBlockEntity.java @@ -382,13 +382,18 @@ public class StorageUnitBaseBlockEntity extends MachineBaseBlockEntity implement if (slot != INPUT_SLOT) { return false; } - if (inputStack == ItemStack.EMPTY){ + if (inputStack == ItemStack.EMPTY) { return false; } // Do not allow player heads into storage due to lag. Fix #2888 - if (inputStack.getItem() instanceof SkullItem){ + if (inputStack.getItem() instanceof SkullItem) { return false; } + // do not allow other storage units to avoid NBT overflow. Fix #2580 + if (inputStack.isIn(TRContent.ItemTags.STORAGE_UNITS)) { + return false; + } + if (isLocked()) { return ItemUtils.isItemEqual(lockedItemStack, inputStack, true, true); } diff --git a/src/main/java/techreborn/init/TRContent.java b/src/main/java/techreborn/init/TRContent.java index 81a8b7496..d8ae580d6 100644 --- a/src/main/java/techreborn/init/TRContent.java +++ b/src/main/java/techreborn/init/TRContent.java @@ -286,6 +286,7 @@ public class TRContent { public static final TagKey GEMS = TagKey.of(Registry.ITEM_KEY, new Identifier(TechReborn.MOD_ID, "gems")); public static final TagKey NUGGETS = TagKey.of(Registry.ITEM_KEY, new Identifier(TechReborn.MOD_ID, "nuggets")); public static final TagKey PLATES = TagKey.of(Registry.ITEM_KEY, new Identifier(TechReborn.MOD_ID, "plates")); + public static final TagKey STORAGE_UNITS = TagKey.of(Registry.ITEM_KEY, new Identifier(TechReborn.MOD_ID, "storage_units")); private ItemTags() { }