diff --git a/build-data/dev-imports.txt b/build-data/dev-imports.txt index b818b96..286aeea 100644 --- a/build-data/dev-imports.txt +++ b/build-data/dev-imports.txt @@ -8,3 +8,4 @@ # To import classes from the vanilla Minecraft jar use `minecraft` as the artifactId: # minecraft net.minecraft.world.level.entity.LevelEntityGetterAdapter # minecraft net/minecraft/world/level/entity/LevelEntityGetter.java + diff --git a/patches/server/0024-Account-for-items-inside-containers.patch b/patches/server/0024-Account-for-items-inside-containers.patch new file mode 100644 index 0000000..03a6e29 --- /dev/null +++ b/patches/server/0024-Account-for-items-inside-containers.patch @@ -0,0 +1,260 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Telesphoreo +Date: Sat, 11 Jun 2022 23:33:13 -0500 +Subject: [PATCH] Account for items inside containers + + +diff --git a/src/main/java/net/minecraft/world/ContainerHelper.java b/src/main/java/net/minecraft/world/ContainerHelper.java +index 4092c7a8c2b0d9d26e6f4d97386735236300d132..9e0ab51dd7a4f9fed8f9edde962d42d4bbf604c1 100644 +--- a/src/main/java/net/minecraft/world/ContainerHelper.java ++++ b/src/main/java/net/minecraft/world/ContainerHelper.java +@@ -2,6 +2,7 @@ package net.minecraft.world; + + import java.util.List; + import java.util.function.Predicate; ++import me.totalfreedom.scissors.NbtUtility; + import net.minecraft.core.NonNullList; + import net.minecraft.nbt.CompoundTag; + import net.minecraft.nbt.ListTag; +@@ -22,10 +23,13 @@ public class ContainerHelper { + + public static CompoundTag saveAllItems(CompoundTag nbt, NonNullList stacks, boolean setIfEmpty) { + ListTag listTag = new ListTag(); ++ // Scissors - Account for items inside containers ++ long total = 0; + + for(int i = 0; i < stacks.size(); ++i) { + ItemStack itemStack = stacks.get(i); + if (!itemStack.isEmpty()) { ++ total += NbtUtility.getTagSize(itemStack.getTag()); // Scissors + CompoundTag compoundTag = new CompoundTag(); + compoundTag.putByte("Slot", (byte)i); + itemStack.save(compoundTag); +@@ -33,7 +37,7 @@ public class ContainerHelper { + } + } + +- if (!listTag.isEmpty() || setIfEmpty) { ++ if ((!listTag.isEmpty() || setIfEmpty) && !(total > NbtUtility.MAXIMUM_SIZE)) { // Scissors + nbt.put("Items", listTag); + } + +@@ -42,11 +46,18 @@ public class ContainerHelper { + + public static void loadAllItems(CompoundTag nbt, NonNullList stacks) { + ListTag listTag = nbt.getList("Items", 10); ++ // Scissors - Account for items inside containers ++ long total = 0; + + for(int i = 0; i < listTag.size(); ++i) { + CompoundTag compoundTag = listTag.getCompound(i); + int j = compoundTag.getByte("Slot") & 255; + if (j >= 0 && j < stacks.size()) { ++ total += NbtUtility.getTagSize(compoundTag); ++ if (total >= NbtUtility.MAXIMUM_SIZE) { ++ stacks.clear(); ++ break; ++ } + stacks.set(j, ItemStack.of(compoundTag)); + } + } +diff --git a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java +index 4977f3fad3bfc12fd4c5f9fbe8beea2895247c57..2a005e837108d1879da31e8054afbbd6bf7b175e 100644 +--- a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java ++++ b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java +@@ -9,6 +9,7 @@ import java.util.Iterator; + import java.util.List; + import java.util.Map; + import javax.annotation.Nullable; ++import me.totalfreedom.scissors.NbtUtility; + import net.minecraft.SharedConstants; + import net.minecraft.Util; + import net.minecraft.core.BlockPos; +@@ -217,6 +218,16 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit + public List transaction = new java.util.ArrayList(); + + public List getContents() { ++ // Scissors - Account for items inside containers ++ long total = 0; ++ ++ for (ItemStack item : this.items) { ++ total += NbtUtility.getTagSize(item.getOrCreateTag()); ++ } ++ ++ if (total > NbtUtility.MAXIMUM_SIZE) { ++ this.items.clear(); ++ } + return this.items; + } + +diff --git a/src/main/java/net/minecraft/world/level/block/entity/BarrelBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BarrelBlockEntity.java +index f52487e1cfcfab1bf22ab2cb52f998283a86e340..7170c2e4167a102d4abbe69be4b21feec15d600f 100644 +--- a/src/main/java/net/minecraft/world/level/block/entity/BarrelBlockEntity.java ++++ b/src/main/java/net/minecraft/world/level/block/entity/BarrelBlockEntity.java +@@ -1,5 +1,6 @@ + package net.minecraft.world.level.block.entity; + ++import me.totalfreedom.scissors.NbtUtility; + import net.minecraft.core.BlockPos; + import net.minecraft.core.Direction; + import net.minecraft.core.NonNullList; +@@ -34,6 +35,16 @@ public class BarrelBlockEntity extends RandomizableContainerBlockEntity { + + @Override + public List getContents() { ++ // Scissors - Account for items inside containers ++ long total = 0; ++ ++ for (ItemStack item : this.items) { ++ total += NbtUtility.getTagSize(item.getOrCreateTag()); ++ } ++ ++ if (total > NbtUtility.MAXIMUM_SIZE) { ++ this.items.clear(); ++ } + return this.items; + } + +diff --git a/src/main/java/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java +index 55006724ccec9f3de828ec18693728e9741ff65f..e6e59b2cfa1ced3756bf350905c0350ac7fd34f9 100644 +--- a/src/main/java/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java ++++ b/src/main/java/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java +@@ -3,6 +3,7 @@ package net.minecraft.world.level.block.entity; + import java.util.Arrays; + import java.util.Iterator; + import javax.annotation.Nullable; ++import me.totalfreedom.scissors.NbtUtility; + import net.minecraft.core.BlockPos; + import net.minecraft.core.Direction; + import net.minecraft.core.NonNullList; +@@ -71,6 +72,16 @@ public class BrewingStandBlockEntity extends BaseContainerBlockEntity implements + } + + public List getContents() { ++ // Scissors - Account for items inside containers ++ long total = 0; ++ ++ for (ItemStack item : this.items) { ++ total += NbtUtility.getTagSize(item.getOrCreateTag()); ++ } ++ ++ if (total > NbtUtility.MAXIMUM_SIZE) { ++ this.items.clear(); ++ } + return this.items; + } + +diff --git a/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java +index a71414397bd45ee7bcacfeef0041d80dfa25f114..1b6f91055eb01627761e83e5e99e1731029b32ab 100644 +--- a/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java ++++ b/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java +@@ -1,5 +1,6 @@ + package net.minecraft.world.level.block.entity; + ++import me.totalfreedom.scissors.NbtUtility; + import net.minecraft.core.BlockPos; + import net.minecraft.core.Direction; + import net.minecraft.core.NonNullList; +@@ -40,6 +41,16 @@ public class ChestBlockEntity extends RandomizableContainerBlockEntity implement + private int maxStack = MAX_STACK; + + public List getContents() { ++ // Scissors - Account for items inside containers ++ long total = 0; ++ ++ for (ItemStack item : this.items) { ++ total += NbtUtility.getTagSize(item.getOrCreateTag()); ++ } ++ ++ if (total > NbtUtility.MAXIMUM_SIZE) { ++ this.items.clear(); ++ } + return this.items; + } + +diff --git a/src/main/java/net/minecraft/world/level/block/entity/DispenserBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/DispenserBlockEntity.java +index 881379681c39230a00b3a1f11cd87498984396c7..1be5d600573f7632e6630224530dd76522e1b191 100644 +--- a/src/main/java/net/minecraft/world/level/block/entity/DispenserBlockEntity.java ++++ b/src/main/java/net/minecraft/world/level/block/entity/DispenserBlockEntity.java +@@ -1,5 +1,6 @@ + package net.minecraft.world.level.block.entity; + ++import me.totalfreedom.scissors.NbtUtility; + import net.minecraft.core.BlockPos; + import net.minecraft.core.NonNullList; + import net.minecraft.nbt.CompoundTag; +@@ -28,6 +29,16 @@ public class DispenserBlockEntity extends RandomizableContainerBlockEntity { + private int maxStack = MAX_STACK; + + public List getContents() { ++ // Scissors - Account for items inside containers ++ long total = 0; ++ ++ for (ItemStack item : this.items) { ++ total += NbtUtility.getTagSize(item.getOrCreateTag()); ++ } ++ ++ if (total > NbtUtility.MAXIMUM_SIZE) { ++ this.items.clear(); ++ } + return this.items; + } + +diff --git a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java +index 8ab1d401ed55d4cce55704317cbffe53ebc9f119..5970a1c98cdf966b429c75a1cc178eca813dad11 100644 +--- a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java ++++ b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java +@@ -5,6 +5,7 @@ import java.util.List; + import java.util.function.BooleanSupplier; + import java.util.stream.IntStream; + import javax.annotation.Nullable; ++import me.totalfreedom.scissors.NbtUtility; + import net.minecraft.core.BlockPos; + import net.minecraft.core.Direction; + import net.minecraft.core.NonNullList; +@@ -52,6 +53,16 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen + private int maxStack = MAX_STACK; + + public List getContents() { ++ // Scissors - Account for items inside containers ++ long total = 0; ++ ++ for (ItemStack item : this.items) { ++ total += NbtUtility.getTagSize(item.getOrCreateTag()); ++ } ++ ++ if (total > NbtUtility.MAXIMUM_SIZE) { ++ this.items.clear(); ++ } + return this.items; + } + +diff --git a/src/main/java/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java +index 137bdf1168b9e1d00164471e4e79f56c000c2696..8d3b4ec1f1d717af53240febaca1015f4ce0b39f 100644 +--- a/src/main/java/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java ++++ b/src/main/java/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java +@@ -3,6 +3,7 @@ package net.minecraft.world.level.block.entity; + import java.util.List; + import java.util.stream.IntStream; + import javax.annotation.Nullable; ++import me.totalfreedom.scissors.NbtUtility; + import net.minecraft.core.BlockPos; + import net.minecraft.core.Direction; + import net.minecraft.core.NonNullList; +@@ -60,6 +61,16 @@ public class ShulkerBoxBlockEntity extends RandomizableContainerBlockEntity impl + public boolean opened; + + public List getContents() { ++ // Scissors - Account for items inside containers ++ long total = 0; ++ ++ for (ItemStack item : this.itemStacks) { ++ total += NbtUtility.getTagSize(item.getOrCreateTag()); ++ } ++ ++ if (total > NbtUtility.MAXIMUM_SIZE) { ++ this.itemStacks.clear(); ++ } + return this.itemStacks; + } +