diff --git a/leaves-server/minecraft-patches/features/0140-Fix-endermite-spawn-position.patch b/leaves-server/minecraft-patches/features/0140-Fix-endermite-spawn-position.patch new file mode 100644 index 00000000..deb59d9b --- /dev/null +++ b/leaves-server/minecraft-patches/features/0140-Fix-endermite-spawn-position.patch @@ -0,0 +1,34 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Lumine1909 <133463833Lumine1909@users.noreply.github.com> +Date: Thu, 31 Jul 2025 11:44:14 +0800 +Subject: [PATCH] Fix endermite spawn position + + +diff --git a/net/minecraft/world/entity/projectile/ThrownEnderpearl.java b/net/minecraft/world/entity/projectile/ThrownEnderpearl.java +index 4b04ca7d50d7a85827bd89fff24434e603e99579..8030bd1935cdcf5a2673142bc3a19f7cc7be405b 100644 +--- a/net/minecraft/world/entity/projectile/ThrownEnderpearl.java ++++ b/net/minecraft/world/entity/projectile/ThrownEnderpearl.java +@@ -119,6 +119,9 @@ public class ThrownEnderpearl extends ThrowableItemProjectile { + Vec3 vec3 = this.oldPosition(); + if (owner instanceof ServerPlayer serverPlayer) { + if (serverPlayer.connection.isAcceptingMessages()) { ++ // Leaves start - vanilla endermite spawn ++ double x = serverPlayer.getX(), y = serverPlayer.getY(), z = serverPlayer.getZ(); ++ float yaw = serverPlayer.getYRot(), pitch = serverPlayer.getXRot(); + // CraftBukkit start + ServerPlayer serverPlayer1 = serverPlayer.teleport(new TeleportTransition(serverLevel, vec3, Vec3.ZERO, 0.0F, 0.0F, Relative.union(Relative.ROTATION, Relative.DELTA), TeleportTransition.DO_NOTHING, org.bukkit.event.player.PlayerTeleportEvent.TeleportCause.ENDER_PEARL)); + if (serverPlayer1 == null) { +@@ -129,7 +132,12 @@ public class ThrownEnderpearl extends ThrowableItemProjectile { + if (this.random.nextFloat() < 0.05F && serverLevel.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING)) { + Endermite endermite = EntityType.ENDERMITE.create(serverLevel, EntitySpawnReason.TRIGGERED); + if (endermite != null) { +- endermite.snapTo(owner.getX(), owner.getY(), owner.getZ(), owner.getYRot(), owner.getXRot()); ++ if (org.leavesmc.leaves.LeavesConfig.fix.vanillaEndermiteSpawn) { ++ endermite.snapTo(x, y, z, yaw, pitch); ++ } else { ++ endermite.snapTo(owner.getX(), owner.getY(), owner.getZ(), owner.getYRot(), owner.getXRot()); ++ } ++ // Leaves end - vanilla endermite spawn + serverLevel.addFreshEntity(endermite, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.ENDER_PEARL); + } + } diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/LeavesConfig.java b/leaves-server/src/main/java/org/leavesmc/leaves/LeavesConfig.java index 92027d25..1534cdfa 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/LeavesConfig.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/LeavesConfig.java @@ -1212,6 +1212,9 @@ public final class LeavesConfig { @GlobalConfig("vanilla-fluid-pushing") public boolean vanillaFluidPushing = true; + @GlobalConfig("vanilla-endermite-spawn") + public boolean vanillaEndermiteSpawn = true; + @GlobalConfig(value = "collision-behavior") public CollisionBehavior collisionBehavior = CollisionBehavior.BLOCK_SHAPE_VANILLA;