Paper/patch-remap/mache-spigotflower-stripped/net/minecraft/server/commands/TeleportCommand.java.patch

54 lines
2.1 KiB
Diff

--- a/net/minecraft/server/commands/TeleportCommand.java
+++ b/net/minecraft/server/commands/TeleportCommand.java
@@ -33,6 +32,12 @@
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.Vec2;
import net.minecraft.world.phys.Vec3;
+// CraftBukkit start
+import org.bukkit.Location;
+import org.bukkit.craftbukkit.CraftWorld;
+import org.bukkit.event.entity.EntityTeleportEvent;
+import org.bukkit.event.player.PlayerTeleportEvent;
+// CraftBukkit end
public class TeleportCommand {
@@ -156,11 +161,34 @@
float f2 = Mth.wrapDegrees(f);
float f3 = Mth.wrapDegrees(f1);
- if (entity.teleportTo(serverlevel, d0, d1, d2, set, f2, f3)) {
- if (teleportcommand_lookat != null) {
- teleportcommand_lookat.perform(commandsourcestack, entity);
+ // CraftBukkit start - Teleport event
+ boolean result;
+ if (entity instanceof ServerPlayer player) {
+ result = player.teleportTo(level, x, d1, y, set, f2, f3, PlayerTeleportEvent.TeleportCause.COMMAND);
+ } else {
+ Location to = new Location(level.getWorld(), x, d1, y, f2, f3);
+ EntityTeleportEvent event = new EntityTeleportEvent(entity.getBukkitEntity(), entity.getBukkitEntity().getLocation(), to);
+ level.getCraftServer().getPluginManager().callEvent(event);
+ if (event.isCancelled()) {
+ return;
}
+ x = to.getX();
+ d1 = to.getY();
+ y = to.getZ();
+ f2 = to.getYaw();
+ f3 = to.getPitch();
+ level = ((CraftWorld) to.getWorld()).getHandle();
+
+ result = entity.teleportTo(level, x, d1, y, set, f2, f3);
+ }
+
+ if (result) {
+ // CraftBukkit end
+ if (relativeList != null) {
+ relativeList.perform(source, entity);
+ }
+
label23:
{
if (entity instanceof LivingEntity) {