mirror of https://github.com/PaperMC/Paper.git
54 lines
2.1 KiB
Diff
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) {
|