Files
Purpur/patches/server/0185-ShulkerBox-allow-oversized-stacks.patch
BillyGalbreath cfe8efe1f0 Updated Upstream (Paper & Pufferfish)
Upstream has released updates that appear to apply and compile correctly

Paper Changes:
PaperMC/Paper@26734e8 Updated Upstream (Bukkit/CraftBukkit/Spigot) (#7454)
PaperMC/Paper@4a745f9 Optimize Util#sequence (#7115)
PaperMC/Paper@2c8d48c Make Panda implement Sittable (#7414)
PaperMC/Paper@2c4a589 Fix issues with LimitedRegion (#7343)
PaperMC/Paper@3d91eca Fix cancelled snow bucket placement (#6751)
PaperMC/Paper@9567753 Don't load plugins prefixed with a dot (#7392)
PaperMC/Paper@92c777d Fix PlayerProfile BukkitObject serialization, deprecate setName and setId for removal (#7471)
PaperMC/Paper@e6898ff Fix IllegalArgumentException for /paper mobcaps command (#7472)
PaperMC/Paper@a8f2d67 - properly fix IllegalArgumentException in `/paper mobcaps` command

Pufferfish Changes:
pufferfish-gg/Pufferfish@22f20b2 Fix sentry bug
2022-02-13 20:37:07 -06:00

53 lines
3.3 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
Date: Thu, 27 May 2021 04:04:23 -0500
Subject: [PATCH] ShulkerBox allow oversized stacks
This fixes PaperMC/Paper#4748 where breaking a shulkerbox in survival mode
with oversized itemstacks would cause a "chunk ban". This fixes it by always
creating an itemstack using the TileEntity's NBT data (how it handles it for
creative players) instead of routing it through the LootableBuilder.
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
index 0d1a833a6568128e542bde425b0ce77b4534d144..5524d85aaf3fc8c0bc561fa4a88e82d416fab83d 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
@@ -449,7 +449,7 @@ public class ServerPlayerGameMode {
block.destroy(this.level, pos, iblockdata);
}
- if (this.isCreative()) {
+ if (this.isCreative() || (this.level.purpurConfig.shulkerBoxAllowOversizedStacks && block instanceof net.minecraft.world.level.block.ShulkerBoxBlock)) { // Purpur
// return true; // CraftBukkit
} else {
ItemStack itemstack = this.player.getMainHandItem();
diff --git a/src/main/java/net/minecraft/world/level/block/ShulkerBoxBlock.java b/src/main/java/net/minecraft/world/level/block/ShulkerBoxBlock.java
index 7f1230d915c98b6f30b13a06c2788bc2f7b7e912..9439119a70a411b1a7d9cd6a0090e4133ac744a3 100644
--- a/src/main/java/net/minecraft/world/level/block/ShulkerBoxBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/ShulkerBoxBlock.java
@@ -123,7 +123,7 @@ public class ShulkerBoxBlock extends BaseEntityBlock {
BlockEntity blockEntity = world.getBlockEntity(pos);
if (blockEntity instanceof ShulkerBoxBlockEntity) {
ShulkerBoxBlockEntity shulkerBoxBlockEntity = (ShulkerBoxBlockEntity)blockEntity;
- if (!world.isClientSide && player.isCreative() && !shulkerBoxBlockEntity.isEmpty()) {
+ if (world.purpurConfig.shulkerBoxAllowOversizedStacks || (player.isCreative() && !shulkerBoxBlockEntity.isEmpty())) { // Purpur
ItemStack itemStack = getColoredItemStack(this.getColor());
blockEntity.saveToItem(itemStack);
if (shulkerBoxBlockEntity.hasCustomName()) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index 6ccfbcf813fb2262f4cdf33513cf9d208a7d2a00..476b6018dc378599902d895f05e3e5babcec1a9d 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -653,6 +653,11 @@ public class PurpurWorldConfig {
}
}
+ public boolean shulkerBoxAllowOversizedStacks = false;
+ private void shulkerBoxSettings() {
+ shulkerBoxAllowOversizedStacks = getBoolean("blocks.shulker_box.allow-oversized-stacks", shulkerBoxAllowOversizedStacks);
+ }
+
public boolean signRightClickEdit = false;
private void signSettings() {
signRightClickEdit = getBoolean("blocks.sign.right-click-edit", signRightClickEdit);