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 eu.mhsl.craftattack.worldmuseum.worlds.WorldManager;
|
||||||
import net.minestom.server.entity.Player;
|
import net.minestom.server.entity.Player;
|
||||||
import net.minestom.server.event.inventory.InventoryPreClickEvent;
|
import net.minestom.server.event.inventory.InventoryPreClickEvent;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
public class InventoryClickListener implements Consumer<InventoryPreClickEvent> {
|
public class InventoryClickListener implements Consumer<InventoryPreClickEvent> {
|
||||||
@ -14,18 +13,16 @@ public class InventoryClickListener implements Consumer<InventoryPreClickEvent>
|
|||||||
Player p = inventoryPreClickEvent.getPlayer();
|
Player p = inventoryPreClickEvent.getPlayer();
|
||||||
inventoryPreClickEvent.setCancelled(true);
|
inventoryPreClickEvent.setCancelled(true);
|
||||||
WorldManager worldManager = WorldManager.getInstance();
|
WorldManager worldManager = WorldManager.getInstance();
|
||||||
Iterator iterator = worldManager.getWorlds().iterator();
|
for (World w : worldManager.getWorlds()) {
|
||||||
while (iterator.hasNext()) {
|
|
||||||
World w = (World) iterator.next();
|
|
||||||
if (!w.getItem().equals(inventoryPreClickEvent.getClickedItem())) continue;
|
if (!w.getItem().equals(inventoryPreClickEvent.getClickedItem())) continue;
|
||||||
if (p.getInstance().equals(w)) {
|
if (Objects.equals(p.getInstance(), w)) {
|
||||||
p.closeInventory();
|
p.closeInventory();
|
||||||
p.teleport(w.getSpawn());
|
p.teleport(w.getSpawn());
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
p.closeInventory();
|
p.closeInventory();
|
||||||
p.setInstance(w);
|
ChangeWorld.change_world(p, w);
|
||||||
p.teleport(w.getSpawn());
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user