Make endermite spawn at original thrower position

This is how Vanilla does it, and we don't have any reason to change
this other than an oversight in copying the code.
This commit is contained in:
Spottedleaf 2024-02-20 17:21:51 -08:00
parent e22501a8e3
commit 0265fdd4f4

View File

@ -18538,10 +18538,10 @@ index ab777952bda1651796ed41e8a7fc6621f27db9aa..6b9365eba3339578ee2984605240b74d
boolean flag = false;
diff --git a/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java b/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java
index 3be611e7ae35b696ba44cd361042f79b69391815..2a304be5dc10db22de93aad4b9fccf321028c54d 100644
index 3be611e7ae35b696ba44cd361042f79b69391815..f34d9fcf55a40b59a8753de656c128fc8917e5f7 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java
@@ -45,6 +45,62 @@ public class ThrownEnderpearl extends ThrowableItemProjectile {
@@ -45,6 +45,78 @@ public class ThrownEnderpearl extends ThrowableItemProjectile {
entityHitResult.getEntity().hurt(this.damageSources().thrown(this, this.getOwner()), 0.0F);
}
@ -18551,6 +18551,7 @@ index 3be611e7ae35b696ba44cd361042f79b69391815..2a304be5dc10db22de93aad4b9fccf32
+ source.getBukkitEntity().taskScheduler.schedule(
+ (Entity entity) -> {
+ // source is now an invalid reference, do not use it, use the entity parameter
+ net.minecraft.world.phys.Vec3 endermitePos = entity.position();
+
+ if (entity.level() != checkWorld) {
+ // cannot teleport cross-world
@ -18584,8 +18585,23 @@ index 3be611e7ae35b696ba44cd361042f79b69391815..2a304be5dc10db22de93aad4b9fccf32
+ Endermite entityendermite = (Endermite) EntityType.ENDERMITE.create(world);
+
+ if (entityendermite != null) {
+ entityendermite.moveTo(entity.getX(), entity.getY(), entity.getZ(), entity.getYRot(), entity.getXRot());
+ float yRot = teleported.getYRot();
+ float xRot = teleported.getXRot();
+ Runnable spawn = () -> {
+ entityendermite.moveTo(endermitePos.x, endermitePos.y, endermitePos.z, yRot, xRot);
+ world.addFreshEntity(entityendermite, CreatureSpawnEvent.SpawnReason.ENDER_PEARL);
+ };
+
+ if (io.papermc.paper.util.TickThread.isTickThreadFor(world, endermitePos, net.minecraft.world.phys.Vec3.ZERO, 1)) {
+ spawn.run();
+ } else {
+ io.papermc.paper.threadedregions.RegionizedServer.getInstance().taskQueue.queueTickTaskQueue(
+ world,
+ io.papermc.paper.util.CoordinateUtils.getChunkCoordinate(endermitePos.x),
+ io.papermc.paper.util.CoordinateUtils.getChunkCoordinate(endermitePos.z),
+ spawn
+ );
+ }
+ }
+ }
+
@ -18604,7 +18620,7 @@ index 3be611e7ae35b696ba44cd361042f79b69391815..2a304be5dc10db22de93aad4b9fccf32
@Override
protected void onHit(HitResult hitResult) {
super.onHit(hitResult);
@@ -54,6 +110,20 @@ public class ThrownEnderpearl extends ThrowableItemProjectile {
@@ -54,6 +126,20 @@ public class ThrownEnderpearl extends ThrowableItemProjectile {
}
if (!this.level().isClientSide && !this.isRemoved()) {
@ -18625,7 +18641,7 @@ index 3be611e7ae35b696ba44cd361042f79b69391815..2a304be5dc10db22de93aad4b9fccf32
Entity entity = this.getOwner();
if (entity instanceof ServerPlayer) {
@@ -112,6 +182,14 @@ public class ThrownEnderpearl extends ThrowableItemProjectile {
@@ -112,6 +198,14 @@ public class ThrownEnderpearl extends ThrowableItemProjectile {
}