Skip to content

Commit

Permalink
Fix a vanilla Minecraft bug involving clientside passengers
Browse files Browse the repository at this point in the history
Only affects 1.9 and 1.10
  • Loading branch information
Morphan1 committed Sep 28, 2016
1 parent 13557fc commit d0ad1fb
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 29 deletions.
Expand Up @@ -91,16 +91,26 @@ else if (packet instanceof PacketPlayOutNamedEntitySpawn
PacketOutSpawnEntity spawnEntity = new PacketOutSpawnEntity_v1_10_R1(player, packet);
UUID uuid = spawnEntity.getEntityUuid();
if (!NMSHandler.getInstance().getEntityHelper().isHidden(player.getBukkitEntity(), uuid)) {
Entity entity = ((WorldServer) player.getWorld()).getEntity(uuid);
if (entity instanceof EntityFakePlayer_v1_10_R1) {
final EntityFakePlayer_v1_10_R1 fakePlayer = (EntityFakePlayer_v1_10_R1) entity;
sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, fakePlayer));
Bukkit.getScheduler().runTaskLater(NMSHandler.getJavaPlugin(), new Runnable() {
@Override
public void run() {
sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.REMOVE_PLAYER, fakePlayer));
}
}, 5);
final Entity entity = ((WorldServer) player.getWorld()).getEntity(uuid);
if (entity != null) {
if (entity instanceof EntityFakePlayer_v1_10_R1) {
final EntityFakePlayer_v1_10_R1 fakePlayer = (EntityFakePlayer_v1_10_R1) entity;
sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, fakePlayer));
Bukkit.getScheduler().runTaskLater(NMSHandler.getJavaPlugin(), new Runnable() {
@Override
public void run() {
sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.REMOVE_PLAYER, fakePlayer));
}
}, 5);
}
if (entity.isPassenger()) {
Bukkit.getScheduler().runTaskLater(NMSHandler.getJavaPlugin(), new Runnable() {
@Override
public void run() {
sendPacket(new PacketPlayOutMount(entity.getVehicle()));
}
}, 1);
}
}
oldManager.sendPacket(packet);
}
Expand Down
Expand Up @@ -92,15 +92,17 @@ else if (packet instanceof PacketPlayOutNamedEntitySpawn
UUID uuid = spawnEntity.getEntityUuid();
if (!NMSHandler.getInstance().getEntityHelper().isHidden(player.getBukkitEntity(), uuid)) {
Entity entity = ((WorldServer) player.getWorld()).getEntity(uuid);
if (entity instanceof EntityFakePlayer_v1_8_R3) {
final EntityFakePlayer_v1_8_R3 fakePlayer = (EntityFakePlayer_v1_8_R3) entity;
handle(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, fakePlayer));
Bukkit.getScheduler().runTaskLater(NMSHandler.getJavaPlugin(), new Runnable() {
@Override
public void run() {
handle(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.REMOVE_PLAYER, fakePlayer));
}
}, 5);
if (entity != null) {
if (entity instanceof EntityFakePlayer_v1_8_R3) {
final EntityFakePlayer_v1_8_R3 fakePlayer = (EntityFakePlayer_v1_8_R3) entity;
handle(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, fakePlayer));
Bukkit.getScheduler().runTaskLater(NMSHandler.getJavaPlugin(), new Runnable() {
@Override
public void run() {
handle(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.REMOVE_PLAYER, fakePlayer));
}
}, 5);
}
}
oldManager.handle(packet);
}
Expand Down
Expand Up @@ -91,16 +91,26 @@ else if (packet instanceof PacketPlayOutNamedEntitySpawn
PacketOutSpawnEntity spawnEntity = new PacketOutSpawnEntity_v1_9_R2(player, packet);
UUID uuid = spawnEntity.getEntityUuid();
if (!NMSHandler.getInstance().getEntityHelper().isHidden(player.getBukkitEntity(), uuid)) {
Entity entity = ((WorldServer) player.getWorld()).getEntity(uuid);
if (entity instanceof EntityFakePlayer_v1_9_R2) {
final EntityFakePlayer_v1_9_R2 fakePlayer = (EntityFakePlayer_v1_9_R2) entity;
sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, fakePlayer));
Bukkit.getScheduler().runTaskLater(NMSHandler.getJavaPlugin(), new Runnable() {
@Override
public void run() {
sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.REMOVE_PLAYER, fakePlayer));
}
}, 5);
final Entity entity = ((WorldServer) player.getWorld()).getEntity(uuid);
if (entity != null) {
if (entity instanceof EntityFakePlayer_v1_9_R2) {
final EntityFakePlayer_v1_9_R2 fakePlayer = (EntityFakePlayer_v1_9_R2) entity;
sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, fakePlayer));
Bukkit.getScheduler().runTaskLater(NMSHandler.getJavaPlugin(), new Runnable() {
@Override
public void run() {
sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.REMOVE_PLAYER, fakePlayer));
}
}, 5);
}
if (entity.isPassenger()) {
Bukkit.getScheduler().runTaskLater(NMSHandler.getJavaPlugin(), new Runnable() {
@Override
public void run() {
sendPacket(new PacketPlayOutMount(entity.getVehicle()));
}
}, 1);
}
}
oldManager.sendPacket(packet);
}
Expand Down

0 comments on commit d0ad1fb

Please sign in to comment.