Fire correct event for teleporting

This commit is contained in:
IzzelAliz 2020-10-31 10:50:08 +08:00
parent ef8723e283
commit 102af6c339

View File

@ -246,17 +246,20 @@ public abstract class PlayerListMixin implements PlayerListBridge {
playerIn.stopRiding(); playerIn.stopRiding();
this.removePlayer(playerIn); this.removePlayer(playerIn);
playerIn.getServerWorld().removePlayer(playerIn, true); playerIn.getServerWorld().removePlayer(playerIn, true);
playerIn.revive();
BlockPos pos = playerIn.func_241140_K_(); BlockPos pos = playerIn.func_241140_K_();
float f = playerIn.func_242109_L(); float f = playerIn.func_242109_L();
boolean flag2 = playerIn.func_241142_M_(); boolean flag2 = playerIn.func_241142_M_();
org.bukkit.World fromWorld = ((ServerPlayerEntityBridge) playerIn).bridge$getBukkitEntity().getWorld(); org.bukkit.World fromWorld = ((ServerPlayerEntityBridge) playerIn).bridge$getBukkitEntity().getWorld();
playerIn.queuedEndExit = false; playerIn.queuedEndExit = false;
/*
playerIn.copyFrom(playerIn, flag); playerIn.copyFrom(playerIn, flag);
playerIn.setEntityId(playerIn.getEntityId()); playerIn.setEntityId(playerIn.getEntityId());
playerIn.setPrimaryHand(playerIn.getPrimaryHand()); playerIn.setPrimaryHand(playerIn.getPrimaryHand());
for (String s : playerIn.getTags()) { for (String s : playerIn.getTags()) {
playerIn.addTag(s); playerIn.addTag(s);
} }
*/
boolean flag3 = false; boolean flag3 = false;
if (location == null) { if (location == null) {
boolean isBedSpawn = false; boolean isBedSpawn = false;
@ -316,7 +319,6 @@ public abstract class PlayerListMixin implements PlayerListBridge {
playerIn.connection.sendPacket(new SRespawnPacket(serverWorld.getDimensionType(), serverWorld.getDimensionKey(), BiomeManager.getHashedSeed(serverWorld.getSeed()), playerIn.interactionManager.getGameType(), playerIn.interactionManager.func_241815_c_(), serverWorld.isDebug(), serverWorld.func_241109_A_(), flag)); playerIn.connection.sendPacket(new SRespawnPacket(serverWorld.getDimensionType(), serverWorld.getDimensionKey(), BiomeManager.getHashedSeed(serverWorld.getSeed()), playerIn.interactionManager.getGameType(), playerIn.interactionManager.func_241815_c_(), serverWorld.isDebug(), serverWorld.func_241109_A_(), flag));
playerIn.connection.sendPacket(new SUpdateViewDistancePacket(((WorldBridge) serverWorld).bridge$spigotConfig().viewDistance)); playerIn.connection.sendPacket(new SUpdateViewDistancePacket(((WorldBridge) serverWorld).bridge$spigotConfig().viewDistance));
playerIn.setWorld(serverWorld); playerIn.setWorld(serverWorld);
playerIn.revive();
((ServerPlayNetHandlerBridge) playerIn.connection).bridge$teleport(new Location(((WorldBridge) serverWorld).bridge$getWorld(), playerIn.getPosX(), playerIn.getPosY(), playerIn.getPosZ(), playerIn.rotationYaw, playerIn.rotationPitch)); ((ServerPlayNetHandlerBridge) playerIn.connection).bridge$teleport(new Location(((WorldBridge) serverWorld).bridge$getWorld(), playerIn.getPosX(), playerIn.getPosY(), playerIn.getPosZ(), playerIn.rotationYaw, playerIn.rotationPitch));
playerIn.setSneaking(false); playerIn.setSneaking(false);
playerIn.connection.sendPacket(new SWorldSpawnChangedPacket(serverWorld.getSpawnPoint(), serverWorld.func_242107_v())); playerIn.connection.sendPacket(new SWorldSpawnChangedPacket(serverWorld.getSpawnPoint(), serverWorld.func_242107_v()));
@ -325,12 +327,12 @@ public abstract class PlayerListMixin implements PlayerListBridge {
this.sendWorldInfo(playerIn, serverWorld); this.sendWorldInfo(playerIn, serverWorld);
this.updatePermissionLevel(playerIn); this.updatePermissionLevel(playerIn);
if (!((ServerPlayNetHandlerBridge) playerIn.connection).bridge$isDisconnected()) { if (!((ServerPlayNetHandlerBridge) playerIn.connection).bridge$isDisconnected()) {
serverWorld.addRespawnedPlayer(playerIn); serverWorld.addDuringCommandTeleport(playerIn);
this.addPlayer(playerIn); this.addPlayer(playerIn);
this.uuidToPlayerMap.put(playerIn.getUniqueID(), playerIn); this.uuidToPlayerMap.put(playerIn.getUniqueID(), playerIn);
} }
playerIn.setHealth(playerIn.getHealth()); playerIn.setHealth(playerIn.getHealth());
net.minecraftforge.fml.hooks.BasicEventHooks.firePlayerRespawnEvent(playerIn, flag); net.minecraftforge.fml.hooks.BasicEventHooks.firePlayerChangedDimensionEvent(playerIn, ((CraftWorld) fromWorld).getHandle().dimension, serverWorld.dimension);
if (flag3) { if (flag3) {
playerIn.connection.sendPacket(new SPlaySoundEffectPacket(SoundEvents.BLOCK_RESPAWN_ANCHOR_DEPLETE, SoundCategory.BLOCKS, pos.getX(), pos.getY(), pos.getZ(), 1.0f, 1.0f)); playerIn.connection.sendPacket(new SPlaySoundEffectPacket(SoundEvents.BLOCK_RESPAWN_ANCHOR_DEPLETE, SoundCategory.BLOCKS, pos.getX(), pos.getY(), pos.getZ(), 1.0f, 1.0f));
} }