diff --git a/src/main/java/com/moulberry/axiom/event/AxiomManipulateEntityEvent.java b/src/main/java/com/moulberry/axiom/event/AxiomManipulateEntityEvent.java new file mode 100644 index 0000000..b9567a7 --- /dev/null +++ b/src/main/java/com/moulberry/axiom/event/AxiomManipulateEntityEvent.java @@ -0,0 +1,57 @@ +package com.moulberry.axiom.event; + +import net.minecraft.nbt.CompoundTag; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.UUID; + +public class AxiomManipulateEntityEvent extends Event implements Cancellable { + + private static final HandlerList HANDLERS = new HandlerList(); + + private final Player player; + private final Entity entity; + + private boolean cancelled = false; + + public AxiomManipulateEntityEvent(Player player, @NotNull Entity entity) { + this.player = player; + this.entity = entity; + } + + public Player getPlayer() { + return player; + } + + public Entity getEntity() { + return entity; + } + + @Override + public boolean isCancelled() { + return this.cancelled; + } + + @Override + public void setCancelled(boolean cancel) { + this.cancelled = cancel; + } + + public static HandlerList getHandlerList() { + return HANDLERS; + } + + @Override + public @NotNull HandlerList getHandlers() { + return HANDLERS; + } +} diff --git a/src/main/java/com/moulberry/axiom/packet/ManipulateEntityPacketListener.java b/src/main/java/com/moulberry/axiom/packet/ManipulateEntityPacketListener.java index b1d3a2c..e59c372 100644 --- a/src/main/java/com/moulberry/axiom/packet/ManipulateEntityPacketListener.java +++ b/src/main/java/com/moulberry/axiom/packet/ManipulateEntityPacketListener.java @@ -2,6 +2,7 @@ package com.moulberry.axiom.packet; import com.moulberry.axiom.AxiomPaper; import com.moulberry.axiom.NbtSanitization; +import com.moulberry.axiom.event.AxiomManipulateEntityEvent; import com.moulberry.axiom.integration.Integration; import com.moulberry.axiom.integration.plotsquared.PlotSquaredIntegration; import com.moulberry.axiom.viaversion.UnknownVersionHelper; @@ -124,6 +125,9 @@ public class ManipulateEntityPacketListener implements PluginMessageListener { continue; } + AxiomManipulateEntityEvent manipulateEvent = new AxiomManipulateEntityEvent(player, entity.getBukkitEntity()); + if (!manipulateEvent.callEvent()) continue; + if (entry.merge != null && !entry.merge.isEmpty()) { NbtSanitization.sanitizeEntity(entry.merge); @@ -156,7 +160,7 @@ public class ManipulateEntityPacketListener implements PluginMessageListener { if (Integration.canPlaceBlock(player, new Location(player.getWorld(), containing.getX(), containing.getY(), containing.getZ()))) { - entity.teleportTo(serverLevel, newX, newY, newZ, Set.of(), newYaw, newPitch); + entity.teleportTo(serverLevel, newX, newY, newZ, Set.of(), newYaw, newPitch); } entity.setYHeadRot(newYaw);