diff --git a/src/main/java/net/minecraft/network/NetHandlerPlayServer.java b/src/main/java/net/minecraft/network/NetHandlerPlayServer.java index 10a89a9..9a2cb13 100644 --- a/src/main/java/net/minecraft/network/NetHandlerPlayServer.java +++ b/src/main/java/net/minecraft/network/NetHandlerPlayServer.java @@ -674,6 +674,8 @@ return; } } + else if (p_147359_1_ instanceof net.minecraft.network.play.server.S07PacketRespawn) + playerEntity.getChunkMgr().stopSending(); try { diff --git a/src/main/java/net/minecraft/server/management/ServerConfigurationManager.java b/src/main/java/net/minecraft/server/management/ServerConfigurationManager.java index defaf23..ac7e870 100644 --- a/src/main/java/net/minecraft/server/management/ServerConfigurationManager.java +++ b/src/main/java/net/minecraft/server/management/ServerConfigurationManager.java @@ -572,7 +572,6 @@ if(worldserver1 == null) throw new IllegalArgumentException("World not found for dimension " + p_72356_2_); p_72356_1_.dimension = p_72356_2_; - p_72356_1_.getChunkMgr().stopSending(); //before sending S07PacketRespawn p_72356_1_.playerNetServerHandler.sendPacket(new S07PacketRespawn(p_72356_1_.dimension, p_72356_1_.worldObj.difficultySetting, p_72356_1_.worldObj.getWorldInfo().getTerrainType(), p_72356_1_.theItemInWorldManager.getGameType())); worldserver.removePlayerEntityDangerously(p_72356_1_); p_72356_1_.isDead = false; diff --git a/src/main/java/org/ultramine/server/chunk/ChunkSendManager.java b/src/main/java/org/ultramine/server/chunk/ChunkSendManager.java index e99c1ea..223b2e0 100644 --- a/src/main/java/org/ultramine/server/chunk/ChunkSendManager.java +++ b/src/main/java/org/ultramine/server/chunk/ChunkSendManager.java @@ -200,6 +200,8 @@ public void update() { + if(manager == null) + return; if(!toSend.isEmpty()) { int queueSize = sendingQueueSize.get(); diff --git a/src/main/java/org/ultramine/server/world/MultiWorld.java b/src/main/java/org/ultramine/server/world/MultiWorld.java index 4b2f46c..e901a1b 100644 --- a/src/main/java/org/ultramine/server/world/MultiWorld.java +++ b/src/main/java/org/ultramine/server/world/MultiWorld.java @@ -79,8 +79,12 @@ channel.attr(FMLOutboundHandler.FML_MESSAGETARGETARGS).set(event.manager.channel().attr(NetworkDispatcher.FML_DISPATCHER).get()); for (int dim : DimensionManager.getStaticDimensionIDs()) { - int pid = DimensionManager.getProviderType(dim); - channel.writeAndFlush(new ForgeMessage.DimensionRegisterMessage(dim, provTranslt.containsKey(pid) ? provTranslt.get(pid) : pid)); + WorldDescriptor desc = getDescByID(dim); + if(desc != null && desc.isSendDimToPlayers()) + { + int pid = DimensionManager.getProviderType(dim); + channel.writeAndFlush(new ForgeMessage.DimensionRegisterMessage(dim, provTranslt.containsKey(pid) ? provTranslt.get(pid) : pid)); + } } } @@ -183,6 +187,7 @@ desc = getOrCreateDescriptor(dim); desc.setState(WorldState.AVAILABLE); desc.setConfig(cloneGlobalConfig()); + desc.setSendDimToPlayers(false); } if(desc != null) desc.weakLoadNow(); diff --git a/src/main/java/org/ultramine/server/world/WorldDescriptor.java b/src/main/java/org/ultramine/server/world/WorldDescriptor.java index 9fb058b..66f2399 100644 --- a/src/main/java/org/ultramine/server/world/WorldDescriptor.java +++ b/src/main/java/org/ultramine/server/world/WorldDescriptor.java @@ -53,6 +53,7 @@ private WorldState state = WorldState.UNREGISTERED; private final AtomicBoolean transitState = new AtomicBoolean(); private boolean temp; + private boolean sendDimToPlayers = true; private IWorldLoader worldLoader; private WorldServer world; @@ -122,7 +123,17 @@ { this.temp = temp; } - + + public boolean isSendDimToPlayers() + { + return sendDimToPlayers; + } + + public void setSendDimToPlayers(boolean sendDimToPlayers) + { + this.sendDimToPlayers = sendDimToPlayers; + } + public WorldServer getWorld() { return world;