diff --git a/src/main/java/cpw/mods/fml/common/network/handshake/NetworkDispatcher.java b/src/main/java/cpw/mods/fml/common/network/handshake/NetworkDispatcher.java index 139cbd9..4b9648a 100644 --- a/src/main/java/cpw/mods/fml/common/network/handshake/NetworkDispatcher.java +++ b/src/main/java/cpw/mods/fml/common/network/handshake/NetworkDispatcher.java @@ -155,7 +155,9 @@ // Return the dimension the player is in, so it can be pre-sent to the client in the ServerHello v2 packet // Requires some hackery to the serverconfigmanager and stuff for this to work - //Disabled by UltraMine - no IO operations in main thread + // Disabled by UltraMine - no IO operations in main thread + // Support for more than 256 dimension ids implemented in ServerConfigurationManager.initializeConnectionToPlayer_body + // by sending additional S07PacketRespawn packet. return 0; /* NBTTagCompound playerNBT = scm.getPlayerNBT(player); diff --git a/src/main/java/net/minecraft/server/management/ServerConfigurationManager.java b/src/main/java/net/minecraft/server/management/ServerConfigurationManager.java index a010339..32c6d89 100644 --- a/src/main/java/net/minecraft/server/management/ServerConfigurationManager.java +++ b/src/main/java/net/minecraft/server/management/ServerConfigurationManager.java @@ -157,7 +157,10 @@ ChunkCoordinates chunkcoordinates = worldserver.getSpawnPoint(); this.func_72381_a(p_72355_2_, (EntityPlayerMP)null, worldserver); p_72355_2_.playerNetServerHandler = nethandlerplayserver; - nethandlerplayserver.sendPacket(new S01PacketJoinGame(p_72355_2_.getEntityId(), p_72355_2_.theItemInWorldManager.getGameType(), worldserver.getWorldInfo().isHardcoreModeEnabled(), worldserver.provider.dimensionId, worldserver.difficultySetting, this.getMaxPlayers(), worldserver.getWorldInfo().getTerrainType())); + boolean isLongDimId = p_72355_2_.dimension != (byte)p_72355_2_.dimension; + nethandlerplayserver.sendPacket(new S01PacketJoinGame(p_72355_2_.getEntityId(), p_72355_2_.theItemInWorldManager.getGameType(), worldserver.getWorldInfo().isHardcoreModeEnabled(), isLongDimId ? 0 : worldserver.provider.dimensionId, worldserver.difficultySetting, this.getMaxPlayers(), worldserver.getWorldInfo().getTerrainType())); + if(isLongDimId) + nethandlerplayserver.sendPacket(new S07PacketRespawn(p_72355_2_.dimension, worldserver.difficultySetting, worldserver.getWorldInfo().getTerrainType(), p_72355_2_.theItemInWorldManager.getGameType())); nethandlerplayserver.sendPacket(new S3FPacketCustomPayload("MC|Brand", this.getServerInstance().getServerModName().getBytes(Charsets.UTF_8))); nethandlerplayserver.sendPacket(new S05PacketSpawnPosition(chunkcoordinates.posX, chunkcoordinates.posY, chunkcoordinates.posZ)); nethandlerplayserver.sendPacket(new S39PacketPlayerAbilities(p_72355_2_.capabilities)); diff --git a/src/main/java/org/ultramine/server/world/MultiWorld.java b/src/main/java/org/ultramine/server/world/MultiWorld.java index a0b6a1e..4b2f46c 100644 --- a/src/main/java/org/ultramine/server/world/MultiWorld.java +++ b/src/main/java/org/ultramine/server/world/MultiWorld.java @@ -298,8 +298,6 @@ int dim = -2; while(getDescByID(dim) != null || DimensionManager.isDimensionRegistered(dim)) dim--; - if(dim < -128) - throw new RuntimeException("Not enough free dimension IDs"); return dim; }