chunks load before entering the world
This commit is contained in:
parent
447ecf2a93
commit
c4095ff8ee
@ -0,0 +1,24 @@
|
||||
package eu.mhsl.craftattack.worldmuseum.listener;
|
||||
|
||||
import eu.mhsl.craftattack.worldmuseum.worlds.World;
|
||||
import net.minestom.server.MinecraftServer;
|
||||
import net.minestom.server.entity.Player;
|
||||
import net.minestom.server.utils.chunk.ChunkUtils;
|
||||
import java.awt.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.Future;
|
||||
|
||||
public class ChangeWorld {
|
||||
public static void change_world(Player player, World targetWorld) {
|
||||
ArrayList<Future> futures = new ArrayList<>();
|
||||
ChunkUtils.forChunksInRange(targetWorld.getSpawn(), MinecraftServer.getChunkViewDistance(),(v1, v2) -> {
|
||||
futures.add(targetWorld.loadChunk(v1, v2));
|
||||
});
|
||||
CompletableFuture.allOf(futures.toArray(CompletableFuture[]::new)).thenRun(()-> {
|
||||
player.setRespawnPoint(targetWorld.getSpawn());
|
||||
player.setInstance(targetWorld);
|
||||
player.teleport(targetWorld.getSpawn());
|
||||
});
|
||||
}
|
||||
}
|
@ -4,8 +4,7 @@ import eu.mhsl.craftattack.worldmuseum.worlds.World;
|
||||
import eu.mhsl.craftattack.worldmuseum.worlds.WorldManager;
|
||||
import net.minestom.server.entity.Player;
|
||||
import net.minestom.server.event.inventory.InventoryPreClickEvent;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.Objects;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class InventoryClickListener implements Consumer<InventoryPreClickEvent> {
|
||||
@ -14,18 +13,16 @@ public class InventoryClickListener implements Consumer<InventoryPreClickEvent>
|
||||
Player p = inventoryPreClickEvent.getPlayer();
|
||||
inventoryPreClickEvent.setCancelled(true);
|
||||
WorldManager worldManager = WorldManager.getInstance();
|
||||
Iterator iterator = worldManager.getWorlds().iterator();
|
||||
while (iterator.hasNext()) {
|
||||
World w = (World) iterator.next();
|
||||
for (World w : worldManager.getWorlds()) {
|
||||
if (!w.getItem().equals(inventoryPreClickEvent.getClickedItem())) continue;
|
||||
if (p.getInstance().equals(w)) {
|
||||
if (Objects.equals(p.getInstance(), w)) {
|
||||
p.closeInventory();
|
||||
p.teleport(w.getSpawn());
|
||||
return;
|
||||
} else {
|
||||
p.closeInventory();
|
||||
p.setInstance(w);
|
||||
p.teleport(w.getSpawn());
|
||||
ChangeWorld.change_world(p, w);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user