SPIGOT-4900: Rearchitect multiworld support for better compat with new villager AI
By: md_5 <git@md-5.net>
This commit is contained in:
@@ -87,7 +87,7 @@
|
||||
|
||||
entityplayer.spawnIn(worldserver);
|
||||
entityplayer.playerInteractManager.a((WorldServer) entityplayer.world);
|
||||
@@ -75,13 +114,15 @@
|
||||
@@ -75,13 +114,16 @@
|
||||
s1 = networkmanager.getSocketAddress().toString();
|
||||
}
|
||||
|
||||
@@ -99,12 +99,14 @@
|
||||
this.a(entityplayer, (EntityPlayer) null, worldserver);
|
||||
PlayerConnection playerconnection = new PlayerConnection(this.server, networkmanager, entityplayer);
|
||||
|
||||
playerconnection.sendPacket(new PacketPlayOutLogin(entityplayer.getId(), entityplayer.playerInteractManager.getGameMode(), worlddata.isHardcore(), worldserver.worldProvider.getDimensionManager(), this.getMaxPlayers(), worlddata.getType(), this.s, worldserver.getGameRules().getBoolean("reducedDebugInfo")));
|
||||
- playerconnection.sendPacket(new PacketPlayOutLogin(entityplayer.getId(), entityplayer.playerInteractManager.getGameMode(), worlddata.isHardcore(), worldserver.worldProvider.getDimensionManager(), this.getMaxPlayers(), worlddata.getType(), this.s, worldserver.getGameRules().getBoolean("reducedDebugInfo")));
|
||||
+ // CraftBukkit - getType()
|
||||
+ playerconnection.sendPacket(new PacketPlayOutLogin(entityplayer.getId(), entityplayer.playerInteractManager.getGameMode(), worlddata.isHardcore(), worldserver.worldProvider.getDimensionManager().getType(), this.getMaxPlayers(), worlddata.getType(), this.s, worldserver.getGameRules().getBoolean("reducedDebugInfo")));
|
||||
+ entityplayer.getBukkitEntity().sendSupportedChannels(); // CraftBukkit
|
||||
playerconnection.sendPacket(new PacketPlayOutCustomPayload(PacketPlayOutCustomPayload.a, (new PacketDataSerializer(Unpooled.buffer())).a(this.getServer().getServerModName())));
|
||||
playerconnection.sendPacket(new PacketPlayOutServerDifficulty(worlddata.getDifficulty(), worlddata.isDifficultyLocked()));
|
||||
playerconnection.sendPacket(new PacketPlayOutAbilities(entityplayer.abilities));
|
||||
@@ -100,19 +141,61 @@
|
||||
@@ -100,19 +142,61 @@
|
||||
} else {
|
||||
chatmessage = new ChatMessage("multiplayer.player.joined.renamed", new Object[] { entityplayer.getScoreboardDisplayName(), s});
|
||||
}
|
||||
@@ -171,7 +173,7 @@
|
||||
this.a(entityplayer, worldserver);
|
||||
if (!this.server.getResourcePack().isEmpty()) {
|
||||
entityplayer.setResourcePack(this.server.getResourcePack(), this.server.getResourcePackHash());
|
||||
@@ -128,8 +211,11 @@
|
||||
@@ -128,8 +212,11 @@
|
||||
|
||||
if (nbttagcompound != null && nbttagcompound.hasKeyOfType("RootVehicle", 10)) {
|
||||
NBTTagCompound nbttagcompound1 = nbttagcompound.getCompound("RootVehicle");
|
||||
@@ -185,7 +187,7 @@
|
||||
});
|
||||
|
||||
if (entity != null) {
|
||||
@@ -165,6 +251,8 @@
|
||||
@@ -165,6 +252,8 @@
|
||||
}
|
||||
|
||||
entityplayer.syncInventory();
|
||||
@@ -194,7 +196,7 @@
|
||||
}
|
||||
|
||||
public void sendScoreboard(ScoreboardServer scoreboardserver, EntityPlayer entityplayer) {
|
||||
@@ -197,31 +285,32 @@
|
||||
@@ -197,31 +286,32 @@
|
||||
}
|
||||
|
||||
public void setPlayerFileData(WorldServer worldserver) {
|
||||
@@ -232,7 +234,7 @@
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -249,14 +338,15 @@
|
||||
@@ -249,14 +339,15 @@
|
||||
}
|
||||
|
||||
protected void savePlayerFile(EntityPlayer entityplayer) {
|
||||
@@ -250,7 +252,7 @@
|
||||
|
||||
if (advancementdataplayer != null) {
|
||||
advancementdataplayer.c();
|
||||
@@ -264,10 +354,21 @@
|
||||
@@ -264,10 +355,21 @@
|
||||
|
||||
}
|
||||
|
||||
@@ -273,7 +275,7 @@
|
||||
this.savePlayerFile(entityplayer);
|
||||
if (entityplayer.isPassenger()) {
|
||||
Entity entity = entityplayer.getRootVehicle();
|
||||
@@ -298,18 +399,66 @@
|
||||
@@ -298,18 +400,66 @@
|
||||
|
||||
if (entityplayer1 == entityplayer) {
|
||||
this.j.remove(uuid);
|
||||
@@ -346,7 +348,7 @@
|
||||
GameProfileBanEntry gameprofilebanentry = (GameProfileBanEntry) this.k.get(gameprofile);
|
||||
|
||||
chatmessage = new ChatMessage("multiplayer.disconnect.banned.reason", new Object[] { gameprofilebanentry.getReason()});
|
||||
@@ -317,10 +466,12 @@
|
||||
@@ -317,10 +467,12 @@
|
||||
chatmessage.addSibling(new ChatMessage("multiplayer.disconnect.banned.expiration", new Object[] { PlayerList.g.format(gameprofilebanentry.getExpires())}));
|
||||
}
|
||||
|
||||
@@ -362,7 +364,7 @@
|
||||
IpBanEntry ipbanentry = this.l.get(socketaddress);
|
||||
|
||||
chatmessage = new ChatMessage("multiplayer.disconnect.banned_ip.reason", new Object[] { ipbanentry.getReason()});
|
||||
@@ -328,13 +479,25 @@
|
||||
@@ -328,13 +480,25 @@
|
||||
chatmessage.addSibling(new ChatMessage("multiplayer.disconnect.banned_ip.expiration", new Object[] { PlayerList.g.format(ipbanentry.getExpires())}));
|
||||
}
|
||||
|
||||
@@ -391,7 +393,7 @@
|
||||
UUID uuid = EntityHuman.a(gameprofile);
|
||||
List<EntityPlayer> list = Lists.newArrayList();
|
||||
|
||||
@@ -369,14 +532,24 @@
|
||||
@@ -369,14 +533,24 @@
|
||||
}
|
||||
|
||||
return new EntityPlayer(this.server, this.server.getWorldServer(DimensionManager.OVERWORLD), gameprofile, (PlayerInteractManager) object);
|
||||
@@ -416,7 +418,7 @@
|
||||
entityplayer.dimension = dimensionmanager;
|
||||
Object object;
|
||||
|
||||
@@ -387,6 +560,11 @@
|
||||
@@ -387,6 +561,11 @@
|
||||
}
|
||||
|
||||
EntityPlayer entityplayer1 = new EntityPlayer(this.server, this.server.getWorldServer(entityplayer.dimension), entityplayer.getProfile(), (PlayerInteractManager) object);
|
||||
@@ -428,7 +430,7 @@
|
||||
|
||||
entityplayer1.playerConnection = entityplayer.playerConnection;
|
||||
entityplayer1.copyFrom(entityplayer, flag);
|
||||
@@ -400,42 +578,100 @@
|
||||
@@ -400,42 +579,100 @@
|
||||
entityplayer1.addScoreboardTag(s);
|
||||
}
|
||||
|
||||
@@ -497,7 +499,7 @@
|
||||
+ WorldData worlddata = worldserver.getWorldData();
|
||||
|
||||
- entityplayer1.playerConnection.sendPacket(new PacketPlayOutRespawn(entityplayer1.dimension, worlddata.getType(), entityplayer1.playerInteractManager.getGameMode()));
|
||||
+ entityplayer1.playerConnection.sendPacket(new PacketPlayOutRespawn(worldserver.worldProvider.getDimensionManager(), worldserver.getWorldData().getType(), entityplayer1.playerInteractManager.getGameMode()));
|
||||
+ entityplayer1.playerConnection.sendPacket(new PacketPlayOutRespawn(worldserver.worldProvider.getDimensionManager().getType(), worldserver.getWorldData().getType(), entityplayer1.playerInteractManager.getGameMode()));
|
||||
+ entityplayer1.spawnIn(worldserver);
|
||||
+ entityplayer1.dead = false;
|
||||
+ entityplayer1.playerConnection.teleport(new Location(worldserver.getWorld(), entityplayer1.locX, entityplayer1.locY, entityplayer1.locZ, entityplayer1.yaw, entityplayer1.pitch));
|
||||
@@ -547,7 +549,7 @@
|
||||
return entityplayer1;
|
||||
}
|
||||
|
||||
@@ -448,7 +684,18 @@
|
||||
@@ -448,7 +685,18 @@
|
||||
|
||||
public void tick() {
|
||||
if (++this.v > 600) {
|
||||
@@ -567,7 +569,7 @@
|
||||
this.v = 0;
|
||||
}
|
||||
|
||||
@@ -461,6 +708,25 @@
|
||||
@@ -461,6 +709,25 @@
|
||||
|
||||
}
|
||||
|
||||
@@ -593,7 +595,7 @@
|
||||
public void a(Packet<?> packet, DimensionManager dimensionmanager) {
|
||||
for (int i = 0; i < this.players.size(); ++i) {
|
||||
EntityPlayer entityplayer = (EntityPlayer) this.players.get(i);
|
||||
@@ -561,6 +827,7 @@
|
||||
@@ -561,6 +828,7 @@
|
||||
entityplayer.playerConnection.sendPacket(new PacketPlayOutEntityStatus(entityplayer, b0));
|
||||
}
|
||||
|
||||
@@ -601,7 +603,7 @@
|
||||
this.server.getCommandDispatcher().a(entityplayer);
|
||||
}
|
||||
|
||||
@@ -593,6 +860,12 @@
|
||||
@@ -593,6 +861,12 @@
|
||||
for (int i = 0; i < this.players.size(); ++i) {
|
||||
EntityPlayer entityplayer = (EntityPlayer) this.players.get(i);
|
||||
|
||||
@@ -614,7 +616,7 @@
|
||||
if (entityplayer != entityhuman && entityplayer.dimension == dimensionmanager) {
|
||||
double d4 = d0 - entityplayer.locX;
|
||||
double d5 = d1 - entityplayer.locY;
|
||||
@@ -632,7 +905,7 @@
|
||||
@@ -632,7 +906,7 @@
|
||||
public void reloadWhitelist() {}
|
||||
|
||||
public void a(EntityPlayer entityplayer, WorldServer worldserver) {
|
||||
@@ -623,7 +625,7 @@
|
||||
|
||||
entityplayer.playerConnection.sendPacket(new PacketPlayOutWorldBorder(worldborder, PacketPlayOutWorldBorder.EnumWorldBorderAction.INITIALIZE));
|
||||
entityplayer.playerConnection.sendPacket(new PacketPlayOutUpdateTime(worldserver.getTime(), worldserver.getDayTime(), worldserver.getGameRules().getBoolean("doDaylightCycle")));
|
||||
@@ -640,17 +913,26 @@
|
||||
@@ -640,17 +914,26 @@
|
||||
|
||||
entityplayer.playerConnection.sendPacket(new PacketPlayOutSpawnPosition(blockposition));
|
||||
if (worldserver.isRaining()) {
|
||||
@@ -654,7 +656,7 @@
|
||||
}
|
||||
|
||||
public int getPlayerCount() {
|
||||
@@ -707,26 +989,39 @@
|
||||
@@ -707,26 +990,39 @@
|
||||
}
|
||||
|
||||
public void shutdown() {
|
||||
@@ -699,7 +701,7 @@
|
||||
|
||||
if (serverstatisticmanager == null) {
|
||||
File file = new File(this.server.getWorldServer(DimensionManager.OVERWORLD).getDataManager().getDirectory(), "stats");
|
||||
@@ -741,7 +1036,7 @@
|
||||
@@ -741,7 +1037,7 @@
|
||||
}
|
||||
|
||||
serverstatisticmanager = new ServerStatisticManager(this.server, file1);
|
||||
@@ -708,7 +710,7 @@
|
||||
}
|
||||
|
||||
return serverstatisticmanager;
|
||||
@@ -749,14 +1044,14 @@
|
||||
@@ -749,14 +1045,14 @@
|
||||
|
||||
public AdvancementDataPlayer f(EntityPlayer entityplayer) {
|
||||
UUID uuid = entityplayer.getUniqueID();
|
||||
@@ -725,7 +727,7 @@
|
||||
}
|
||||
|
||||
advancementdataplayer.a(entityplayer);
|
||||
@@ -792,13 +1087,20 @@
|
||||
@@ -792,13 +1088,20 @@
|
||||
}
|
||||
|
||||
public void reload() {
|
||||
|
||||
Reference in New Issue
Block a user