Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-12-23 14:50:08 +01:00
b547153ec6
Along with restoring authorship to the original writer
97 Zeilen
4.1 KiB
Diff
97 Zeilen
4.1 KiB
Diff
From d5d998345385422fa5f96941068f849fbaa69558 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Fri, 28 Nov 2014 00:24:18 -0600
|
|
Subject: [PATCH] Teleport passenger/vehicle with player
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
|
index b0a90d7..1e5f057 100644
|
|
--- a/src/main/java/net/minecraft/server/Entity.java
|
|
+++ b/src/main/java/net/minecraft/server/Entity.java
|
|
@@ -40,6 +40,13 @@ public abstract class Entity implements ICommandListener {
|
|
return tag.hasKey("Bukkit.updateLevel") && tag.getInt("Bukkit.updateLevel") >= level;
|
|
}
|
|
// CraftBukikt end
|
|
+ // PaperSpigot start - Teleport passenger vehicle with player
|
|
+ public void retrack() {
|
|
+ final EntityTracker entityTracker = ((WorldServer) world).getTracker();
|
|
+ entityTracker.untrackEntity(this);
|
|
+ entityTracker.track(this);
|
|
+ }
|
|
+ // PaperSpigot end
|
|
|
|
private static final AxisAlignedBB a = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D);
|
|
private static int entityCount;
|
|
@@ -1949,7 +1956,7 @@ public abstract class Entity implements ICommandListener {
|
|
// minecraftserver.getPlayerList().changeWorld(this, j, worldserver, worldserver1);
|
|
boolean before = worldserver1.chunkProviderServer.forceChunkLoad;
|
|
worldserver1.chunkProviderServer.forceChunkLoad = true;
|
|
- worldserver1.getMinecraftServer().getPlayerList().repositionEntity(this, exit, portal);
|
|
+ //worldserver1.getMinecraftServer().getPlayerList().repositionEntity(this, exit, portal); // PaperSpigot - no... this entity is dead
|
|
worldserver1.chunkProviderServer.forceChunkLoad = before;
|
|
// CraftBukkit end
|
|
this.world.methodProfiler.c("reloading");
|
|
@@ -1957,6 +1964,10 @@ public abstract class Entity implements ICommandListener {
|
|
|
|
if (entity != null) {
|
|
entity.n(this);
|
|
+ // PaperSpigot start - move entity to new location
|
|
+ exit.getBlock(); // force load
|
|
+ entity.setLocation(exit.getX(), exit.getY(), exit.getZ(), exit.getYaw(), exit.getPitch());
|
|
+ // PaperSpigot end
|
|
/* CraftBukkit start - We need to do this...
|
|
if (j == 1 && i == 1) {
|
|
BlockPosition blockposition = this.world.r(worldserver1.getSpawn());
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
index 5864a51..2d4398e 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
@@ -453,6 +453,26 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
|
// If this player is riding another entity, we must dismount before teleporting.
|
|
entity.mount(null);
|
|
|
|
+ // PaperSpigot start
|
|
+ Entity vehicle = entity.vehicle;
|
|
+ Entity passenger = entity.passenger;
|
|
+ if (vehicle != null) {
|
|
+ vehicle.passenger = null;
|
|
+ vehicle.teleportTo(location, false);
|
|
+ vehicle = vehicle.getBukkitEntity().getHandle();
|
|
+ entity.vehicle = vehicle;
|
|
+ vehicle.passenger = entity;
|
|
+ }
|
|
+
|
|
+ if (passenger != null) {
|
|
+ passenger.vehicle = null;
|
|
+ passenger.teleportTo(location, false);
|
|
+ passenger = passenger.getBukkitEntity().getHandle();
|
|
+ entity.passenger = passenger;
|
|
+ entity.vehicle = entity;
|
|
+ }
|
|
+ // PaperSpigot end
|
|
+
|
|
// Update the From Location
|
|
from = event.getFrom();
|
|
// Grab the new To Location dependent on whether the event was cancelled.
|
|
@@ -472,6 +492,17 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
|
} else {
|
|
server.getHandle().moveToWorld(entity, toWorld.dimension, true, to, true);
|
|
}
|
|
+
|
|
+ // PaperSpigot start
|
|
+ if (vehicle != null) {
|
|
+ vehicle.retrack();
|
|
+ }
|
|
+
|
|
+ if (passenger != null) {
|
|
+ passenger.retrack();
|
|
+ }
|
|
+ // PaperSpigot end
|
|
+
|
|
return true;
|
|
}
|
|
|
|
--
|
|
1.9.1
|
|
|