SPIGOT-4900: Rearchitect multiworld support for better compat with new villager AI

By: md_5 <git@md-5.net>
This commit is contained in:
CraftBukkit/Spigot
2019-05-12 11:15:48 +10:00
parent 8b207fdf78
commit b407bebd8d
22 changed files with 208 additions and 227 deletions

View File

@@ -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() {