Fix place blocks in entities bug

This commit is contained in:
ayunami2000 2022-08-22 12:07:32 -04:00
parent a74abf3d4b
commit bee66cacae
4 changed files with 11831 additions and 11813 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -90,8 +90,10 @@ public class PlayerManager {
if(player.mcServer.getServerOwner().equals(player.username)) {
cycleAllRenderDistance(player);
}else {
removePlayer(player);
addPlayer(player);
// these 2 are called within recreatePlayerEntity
// removePlayer(player);
player.playerNetServerHandler.playerEntity = player.mcServer.getConfigurationManager().recreatePlayerEntity(player, 0, true, false);
// addPlayer(player.playerNetServerHandler.playerEntity);
}
}
@ -101,8 +103,10 @@ public class PlayerManager {
curList.addAll(players);
for(int i = 0, l = curList.size(); i < l; ++i) {
EntityPlayerMP playerReload = (EntityPlayerMP)curList.get(i);
removePlayer(playerReload);
addPlayer(playerReload);
// these 2 are called within recreatePlayerEntity
// removePlayer(playerReload);
playerReload.playerNetServerHandler.playerEntity = playerReload.mcServer.getConfigurationManager().recreatePlayerEntity(playerReload, 0, true, false);
// addPlayer(playerReload.playerNetServerHandler.playerEntity);
}
}

View File

@ -286,6 +286,9 @@ public class ServerConfigurationManager {
* Called on respawn
*/
public EntityPlayerMP recreatePlayerEntity(EntityPlayerMP par1EntityPlayerMP, int par2, boolean par3) {
return recreatePlayerEntity(par1EntityPlayerMP, par2, par3, false);
}
public EntityPlayerMP recreatePlayerEntity(EntityPlayerMP par1EntityPlayerMP, int par2, boolean par3, boolean teleport) {
par1EntityPlayerMP.getServerForPlayer().getEntityTracker().removePlayerFromTrackers(par1EntityPlayerMP);
par1EntityPlayerMP.getServerForPlayer().getEntityTracker().untrackEntity(par1EntityPlayerMP);
par1EntityPlayerMP.getServerForPlayer().getPlayerManager().removePlayer(par1EntityPlayerMP);
@ -312,14 +315,22 @@ public class ServerConfigurationManager {
this.mcServer.worldServerForDimension(par1EntityPlayerMP.dimension), var4, var5);
if (var9 != null) {
var7.setLocationAndAngles((double) ((float) var9.posX + 0.5F), (double) ((float) var9.posY + 0.1F),
(double) ((float) var9.posZ + 0.5F), 0.0F, 0.0F);
if (teleport) {
var7.setLocationAndAngles((double) ((float) var9.posX + 0.5F), (double) ((float) var9.posY + 0.1F),
(double) ((float) var9.posZ + 0.5F), 0.0F, 0.0F);
}
var7.setSpawnChunk(var4, var5);
} else {
var7.playerNetServerHandler.sendPacket(new Packet70GameEvent(0, 0));
if (teleport) {
var7.playerNetServerHandler.sendPacket(new Packet70GameEvent(0, 0));
}
}
}
if (!teleport) {
var7.setLocationAndAngles(par1EntityPlayerMP.posX, par1EntityPlayerMP.posY, par1EntityPlayerMP.posZ, par1EntityPlayerMP.rotationYaw, par1EntityPlayerMP.rotationPitch);
}
var8.theChunkProviderServer.loadChunk((int) var7.posX >> 4, (int) var7.posZ >> 4);
while (!var8.getCollidingBoundingBoxes(var7, var7.boundingBox).isEmpty()) {
@ -332,7 +343,9 @@ public class ServerConfigurationManager {
var9 = var8.getSpawnPoint();
var7.playerNetServerHandler.setPlayerLocation(var7.posX, var7.posY, var7.posZ, var7.rotationYaw,
var7.rotationPitch);
var7.playerNetServerHandler.sendPacket(new Packet6SpawnPosition(var9.posX, var9.posY, var9.posZ));
if (teleport) {
var7.playerNetServerHandler.sendPacket(new Packet6SpawnPosition(var9.posX, var9.posY, var9.posZ));
}
var7.playerNetServerHandler
.sendPacket(new Packet43Experience(var7.experience, var7.experienceTotal, var7.experienceLevel));
this.updateTimeAndWeatherForPlayer(var7, var8);