diff --git a/Spigot-Server-Patches/0750-Add-option-to-fix-items-merging-through-walls.patch b/Spigot-Server-Patches/0750-Add-option-to-fix-items-merging-through-walls.patch new file mode 100644 index 0000000000..6108117dfa --- /dev/null +++ b/Spigot-Server-Patches/0750-Add-option-to-fix-items-merging-through-walls.patch @@ -0,0 +1,39 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: GioSDA +Date: Wed, 10 Mar 2021 10:06:45 -0800 +Subject: [PATCH] Add option to fix items merging through walls + + +diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +index 37f866629b7eed39ced4352c94e56c8de8ccfeb9..795b76379eb698aa0ed83c000ea0679a844792d5 100644 +--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java ++++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +@@ -820,4 +820,9 @@ public class PaperWorldConfig { + private void mapItemFrameCursorLimit() { + mapItemFrameCursorLimit = getInt("map-item-frame-cursor-limit", mapItemFrameCursorLimit); + } ++ ++ public boolean fixItemsMergingThroughWalls; ++ private void fixItemsMergingThroughWalls() { ++ fixItemsMergingThroughWalls = getBoolean("fix-items-merging-through-walls", fixItemsMergingThroughWalls); ++ } + } +diff --git a/src/main/java/net/minecraft/world/entity/item/EntityItem.java b/src/main/java/net/minecraft/world/entity/item/EntityItem.java +index 575833807ff647f30d7c2b7abcd01701c7dec85b..8b79220c27292f9b92d9884bbbe4b16d7762343c 100644 +--- a/src/main/java/net/minecraft/world/entity/item/EntityItem.java ++++ b/src/main/java/net/minecraft/world/entity/item/EntityItem.java +@@ -228,6 +228,14 @@ public class EntityItem extends Entity { + EntityItem entityitem = (EntityItem) iterator.next(); + + if (entityitem.z()) { ++ // Paper Start - Fix items merging through walls ++ if (this.world.paperConfig.fixItemsMergingThroughWalls) { ++ net.minecraft.world.level.RayTrace rayTrace = new net.minecraft.world.level.RayTrace(this.getPositionVector(), entityitem.getPositionVector(), ++ net.minecraft.world.level.RayTrace.BlockCollisionOption.COLLIDER, net.minecraft.world.level.RayTrace.FluidCollisionOption.NONE, this); ++ net.minecraft.world.phys.MovingObjectPositionBlock rayTraceResult = world.rayTrace(rayTrace); ++ if (rayTraceResult.getType() == net.minecraft.world.phys.MovingObjectPosition.EnumMovingObjectType.BLOCK) continue; ++ } ++ // Paper End + this.a(entityitem); + if (this.dead) { + break;