From cae78fadd894f68269ca387b5fec7c6a9691ade8 Mon Sep 17 00:00:00 2001 From: CraftBukkit/Spigot Date: Sun, 11 Jul 2021 09:34:35 +1000 Subject: [PATCH] SPIGOT-6579: DragonFireBall movement with setDirection jumps around a lot By: DerFrZocker --- .../bukkit/craftbukkit/entity/CraftEntity.java | 18 ++++++++++++++++++ .../craftbukkit/entity/CraftFireball.java | 1 + .../craftbukkit/entity/CraftHanging.java | 18 ------------------ 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java index 1f990cbfa6..7c1a22d632 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -12,6 +12,8 @@ import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.chat.IChatBaseComponent; import net.minecraft.server.level.EntityPlayer; +import net.minecraft.server.level.PlayerChunkMap; +import net.minecraft.server.level.WorldServer; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityAreaEffectCloud; @@ -1035,6 +1037,22 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { return nbttagcompound; } + // re-sends the spawn entity packet to updated values which cannot be updated otherwise + protected void update() { + if (!getHandle().isAlive()) { + return; + } + + WorldServer world = ((CraftWorld) getWorld()).getHandle(); + PlayerChunkMap.EntityTracker entityTracker = world.getChunkProvider().chunkMap.entityMap.get(getEntityId()); + + if (entityTracker == null) { + return; + } + + entityTracker.broadcast(getHandle().getPacket()); + } + private static PermissibleBase getPermissibleBase() { if (perm == null) { perm = new PermissibleBase(new ServerOperator() { diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java index 53514e5134..54ca19fd05 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java @@ -57,6 +57,7 @@ public class CraftFireball extends AbstractProjectile implements Fireball { public void setDirection(Vector direction) { Validate.notNull(direction, "Direction can not be null"); getHandle().setDirection(direction.getX(), direction.getY(), direction.getZ()); + update(); // SPIGOT-6579 } @Override diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java index f90f8855ec..b597f268f1 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java @@ -1,12 +1,9 @@ package org.bukkit.craftbukkit.entity; import net.minecraft.core.EnumDirection; -import net.minecraft.server.level.PlayerChunkMap; -import net.minecraft.server.level.WorldServer; import net.minecraft.world.entity.decoration.EntityHanging; import org.bukkit.block.BlockFace; import org.bukkit.craftbukkit.CraftServer; -import org.bukkit.craftbukkit.CraftWorld; import org.bukkit.craftbukkit.block.CraftBlock; import org.bukkit.entity.EntityType; import org.bukkit.entity.Hanging; @@ -74,19 +71,4 @@ public class CraftHanging extends CraftEntity implements Hanging { public EntityType getType() { return EntityType.UNKNOWN; } - - protected void update() { - if (!getHandle().isAlive()) { - return; - } - - WorldServer world = ((CraftWorld) getWorld()).getHandle(); - PlayerChunkMap.EntityTracker entityTracker = world.getChunkProvider().chunkMap.entityMap.get(getEntityId()); - - if (entityTracker == null) { - return; - } - - entityTracker.broadcast(getHandle().getPacket()); - } }