From ef2b5e03bc2232f08bfc2ef4e9e1f40a4abb293e Mon Sep 17 00:00:00 2001 From: mworzala Date: Tue, 19 Dec 2023 01:18:01 -0500 Subject: [PATCH] fix: send LEVEL_CHUNKS_LOAD_START state on all instance changes, not just first join (cherry picked from commit 1813cdb1a825a8c884d40cfa5fb019e2ff55cc10) --- .../main/java/net/minestom/demo/PlayerInit.java | 15 +++++++++++++++ .../java/net/minestom/server/entity/Player.java | 6 +++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/demo/src/main/java/net/minestom/demo/PlayerInit.java b/demo/src/main/java/net/minestom/demo/PlayerInit.java index b3846abd3..52763250f 100644 --- a/demo/src/main/java/net/minestom/demo/PlayerInit.java +++ b/demo/src/main/java/net/minestom/demo/PlayerInit.java @@ -28,6 +28,7 @@ import net.minestom.server.item.metadata.BundleMeta; import net.minestom.server.monitoring.BenchmarkManager; import net.minestom.server.monitoring.TickMonitor; import net.minestom.server.utils.MathUtils; +import net.minestom.server.utils.NamespaceID; import net.minestom.server.utils.time.TimeUnit; import net.minestom.server.world.DimensionType; @@ -147,6 +148,20 @@ public class PlayerInit { instanceContainer.setGenerator(unit -> unit.modifier().fillHeight(0, 40, Block.STONE)); instanceContainer.setChunkSupplier(LightingChunk::new); + var i2 = new InstanceContainer(UUID.randomUUID(), DimensionType.OVERWORLD, null, NamespaceID.from("minestom:demo")); + instanceManager.registerInstance(i2); + i2.setGenerator(unit -> unit.modifier().fillHeight(0, 40, Block.GRASS_BLOCK)); + i2.setChunkSupplier(LightingChunk::new); + + // System.out.println("start"); + // var chunks = new ArrayList>(); + // ChunkUtils.forChunksInRange(0, 0, 32, (x, z) -> chunks.add(instanceContainer.loadChunk(x, z))); + + // CompletableFuture.runAsync(() -> { + // CompletableFuture.allOf(chunks.toArray(CompletableFuture[]::new)).join(); + // System.out.println("load end"); + // }); + inventory = new Inventory(InventoryType.CHEST_1_ROW, Component.text("Test inventory")); inventory.setItemStack(3, ItemStack.of(Material.DIAMOND, 34)); } diff --git a/src/main/java/net/minestom/server/entity/Player.java b/src/main/java/net/minestom/server/entity/Player.java index dc3118e5a..c7dcb123b 100644 --- a/src/main/java/net/minestom/server/entity/Player.java +++ b/src/main/java/net/minestom/server/entity/Player.java @@ -348,9 +348,6 @@ public class Player extends LivingEntity implements CommandSender, Localizable, refreshHealth(); // Heal and send health packet refreshAbilities(); // Send abilities packet - // Start chunk load - sendPacket(new ChangeGameStatePacket(ChangeGameStatePacket.Reason.LEVEL_CHUNKS_LOAD_START, 0)); - return setInstance(spawnInstance); } @@ -761,6 +758,9 @@ public class Player extends LivingEntity implements CommandSender, Localizable, if (dimensionChange || firstSpawn) { this.inventory.update(); sendPacket(new HeldItemChangePacket(heldSlot)); + + // Tell the client to leave the loading terrain screen + sendPacket(new ChangeGameStatePacket(ChangeGameStatePacket.Reason.LEVEL_CHUNKS_LOAD_START, 0)); } EventDispatcher.call(new PlayerSpawnEvent(this, instance, firstSpawn));