From 447ecf2a939d9b38b58b15ed330ebe9bfb3a557b Mon Sep 17 00:00:00 2001 From: Martin Date: Sun, 16 Apr 2023 23:14:08 +0200 Subject: [PATCH] added Compass to swich worlds --- .../eu/mhsl/craftattack/worldmuseum/Main.java | 37 +++++++++---------- .../worldmuseum/listener/ClickListener.java | 33 ----------------- .../listener/CompassUseListener.java | 20 ++++++++++ .../listener/InventoryClickListener.java | 33 +++++++++++++++++ .../craftattack/worldmuseum/worlds/World.java | 7 ++-- .../worldswiching/CompassManager.java | 35 ++++++++++++++++++ 6 files changed, 108 insertions(+), 57 deletions(-) delete mode 100755 src/main/java/eu/mhsl/craftattack/worldmuseum/listener/ClickListener.java create mode 100755 src/main/java/eu/mhsl/craftattack/worldmuseum/listener/CompassUseListener.java create mode 100644 src/main/java/eu/mhsl/craftattack/worldmuseum/listener/InventoryClickListener.java create mode 100644 src/main/java/eu/mhsl/craftattack/worldmuseum/worldswiching/CompassManager.java diff --git a/src/main/java/eu/mhsl/craftattack/worldmuseum/Main.java b/src/main/java/eu/mhsl/craftattack/worldmuseum/Main.java index 0f3cd47..b593623 100755 --- a/src/main/java/eu/mhsl/craftattack/worldmuseum/Main.java +++ b/src/main/java/eu/mhsl/craftattack/worldmuseum/Main.java @@ -4,27 +4,23 @@ import eu.mhsl.craftattack.worldmuseum.commands.GamemodeCommand; import eu.mhsl.craftattack.worldmuseum.commands.GcCommand; import eu.mhsl.craftattack.worldmuseum.commands.TeleportCommand; import eu.mhsl.craftattack.worldmuseum.listener.ChunkUnloading; -import eu.mhsl.craftattack.worldmuseum.listener.ClickListener; +import eu.mhsl.craftattack.worldmuseum.listener.CompassUseListener; +import eu.mhsl.craftattack.worldmuseum.listener.InventoryClickListener; import eu.mhsl.craftattack.worldmuseum.util.Config; import eu.mhsl.craftattack.worldmuseum.worlds.World; import eu.mhsl.craftattack.worldmuseum.worlds.WorldManager; +import eu.mhsl.craftattack.worldmuseum.worldswiching.CompassManager; import net.minestom.server.MinecraftServer; -import net.minestom.server.coordinate.Pos; import net.minestom.server.entity.GameMode; import net.minestom.server.entity.Player; import net.minestom.server.event.GlobalEventHandler; +import net.minestom.server.event.inventory.InventoryPreClickEvent; import net.minestom.server.event.player.PlayerChunkUnloadEvent; import net.minestom.server.event.player.PlayerLoginEvent; import net.minestom.server.event.player.PlayerUseItemEvent; -import net.minestom.server.instance.InstanceContainer; import net.minestom.server.instance.InstanceManager; -import net.minestom.server.instance.block.Block; import net.minestom.server.timer.TaskSchedule; - -import java.util.ArrayList; -import java.util.List; - public class Main { static int PORT = 25565; static String IP = "0.0.0.0"; @@ -36,6 +32,8 @@ public class Main { InstanceManager instanceManager = MinecraftServer.getInstanceManager(); //temp +// MinecraftServer.getConnectionManager().setPlayerProvider(ExploringPlayer::new); + MinecraftServer.setChunkViewDistance(8); MinecraftServer.getSchedulerManager().scheduleTask(new TablistUpdateTask(), TaskSchedule.tick(20), TaskSchedule.tick(20)); //load eu.mhsl.craftattack.worldmuseum.worlds / configExample file @@ -47,12 +45,17 @@ public class Main { config.loadConfig(); World startworld = config.getStart_world(); + //CompassManager + CompassManager compassManager = CompassManager.getInstance(); + compassManager.loadCommpassManager(); + // Add an event callback to specify the spawning instance (and the spawn position) GlobalEventHandler globalEventHandler = MinecraftServer.getGlobalEventHandler(); //listeners - globalEventHandler.addListener(PlayerUseItemEvent.class, new ClickListener()); + globalEventHandler.addListener(PlayerUseItemEvent.class, new CompassUseListener()); globalEventHandler.addListener(PlayerChunkUnloadEvent.class, new ChunkUnloading()); + globalEventHandler.addListener(InventoryPreClickEvent.class, new InventoryClickListener()); //commands MinecraftServer.getCommandManager().register(new TeleportCommand()); @@ -62,21 +65,15 @@ public class Main { globalEventHandler.addListener(PlayerLoginEvent.class, event -> { final Player player = event.getPlayer(); event.setSpawningInstance(startworld); + player.setRespawnPoint(startworld.getSpawn()); player.setGameMode(GameMode.CREATIVE); - - - - -// for (int i = 0; i< WorldManager.getInstance().getWorlds().size(); i++) { -// if (WorldManager.getInstance().getWorlds().get(i).isEnabled()) { -// player.getInventory().setItemStack(i, WorldManager.getInstance().getWorlds().get(i).getItem()); -// } else { -// System.out.println("Es gibt nicht aktivierte Welten!"); -// } -// } + player.getInventory().setItemStack(0, compassManager.getCompass()); }); + + + try { PORT = Integer.parseInt(args[0]); } catch (Exception e) { diff --git a/src/main/java/eu/mhsl/craftattack/worldmuseum/listener/ClickListener.java b/src/main/java/eu/mhsl/craftattack/worldmuseum/listener/ClickListener.java deleted file mode 100755 index d4464b7..0000000 --- a/src/main/java/eu/mhsl/craftattack/worldmuseum/listener/ClickListener.java +++ /dev/null @@ -1,33 +0,0 @@ -package eu.mhsl.craftattack.worldmuseum.listener; - -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.player.PlayerUseItemEvent; -import net.minestom.server.item.ItemStack; -import java.util.function.Consumer; - -public class ClickListener implements Consumer { - - @Override - public void accept(PlayerUseItemEvent playerUseItemEvent) { - Player p = playerUseItemEvent.getPlayer(); - ItemStack usedItem = playerUseItemEvent.getItemStack(); - - for (int i = 0; i < WorldManager.getInstance().getWorlds().size(); i++) { - World world = WorldManager.getInstance().getWorlds().get(i); - - if (world.getItem().equals(usedItem)) { - if (p.getInstance().equals(world)) { - tpToSpawn(p, world); - return; - }; - p.setInstance(world, world.getSpawn()); - } - } - - } - private void tpToSpawn(Player player, World world) { - player.teleport(world.getSpawn()); - } -} diff --git a/src/main/java/eu/mhsl/craftattack/worldmuseum/listener/CompassUseListener.java b/src/main/java/eu/mhsl/craftattack/worldmuseum/listener/CompassUseListener.java new file mode 100755 index 0000000..faa2e7c --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/worldmuseum/listener/CompassUseListener.java @@ -0,0 +1,20 @@ +package eu.mhsl.craftattack.worldmuseum.listener; + +import eu.mhsl.craftattack.worldmuseum.worldswiching.CompassManager; +import net.minestom.server.entity.Player; +import net.minestom.server.event.player.PlayerUseItemEvent; +import net.minestom.server.item.ItemStack; +import java.util.function.Consumer; + +public class CompassUseListener implements Consumer { + + @Override + public void accept(PlayerUseItemEvent playerUseItemEvent) { + Player p = playerUseItemEvent.getPlayer(); + ItemStack usedItem = playerUseItemEvent.getItemStack(); + CompassManager compassManager = CompassManager.getInstance(); + + if (!usedItem.equals(compassManager.getCompass())) return; + p.openInventory(compassManager.getInventory()); + } +} diff --git a/src/main/java/eu/mhsl/craftattack/worldmuseum/listener/InventoryClickListener.java b/src/main/java/eu/mhsl/craftattack/worldmuseum/listener/InventoryClickListener.java new file mode 100644 index 0000000..a5e65f8 --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/worldmuseum/listener/InventoryClickListener.java @@ -0,0 +1,33 @@ +package eu.mhsl.craftattack.worldmuseum.listener; + +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.function.Consumer; + +public class InventoryClickListener implements Consumer { + @Override + public void accept(InventoryPreClickEvent 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(); + if (!w.getItem().equals(inventoryPreClickEvent.getClickedItem())) continue; + if (p.getInstance().equals(w)) { + p.closeInventory(); + p.teleport(w.getSpawn()); + return; + } else { + p.closeInventory(); + p.setInstance(w); + p.teleport(w.getSpawn()); + return; + } + } + } +} diff --git a/src/main/java/eu/mhsl/craftattack/worldmuseum/worlds/World.java b/src/main/java/eu/mhsl/craftattack/worldmuseum/worlds/World.java index bdf7414..cf0fdab 100755 --- a/src/main/java/eu/mhsl/craftattack/worldmuseum/worlds/World.java +++ b/src/main/java/eu/mhsl/craftattack/worldmuseum/worlds/World.java @@ -11,19 +11,18 @@ import net.minestom.server.item.ItemStack; import net.minestom.server.item.Material; import net.minestom.server.utils.NamespaceID; import net.minestom.server.world.DimensionType; - import java.io.*; import java.util.UUID; public class World extends InstanceContainer { - private static DimensionType dimension = DimensionType.builder(NamespaceID.from("mhsl:worldview_by_olischma")).height(400).ambientLight(2.0f).build(); - private File file; + private final static DimensionType dimension = DimensionType.builder(NamespaceID.from("mhsl:worldview_by_olischma")).height(400).ambientLight(2.0f).build(); + private final File file; private ItemStack item; private String name = "default"; private Pos spawn = new Pos(0,0,0); private Material material = Material.GRASS_BLOCK; private boolean enabled = false; - private String defaultConfig = "{\n" + + private final String defaultConfig = "{\n" + " \"enabled\": false,\n" + " \"name\": \"DEFAULT_NAME\",\n" + " \"material\": \"GRASS_BLOCK\",\n" + diff --git a/src/main/java/eu/mhsl/craftattack/worldmuseum/worldswiching/CompassManager.java b/src/main/java/eu/mhsl/craftattack/worldmuseum/worldswiching/CompassManager.java new file mode 100644 index 0000000..442d2f0 --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/worldmuseum/worldswiching/CompassManager.java @@ -0,0 +1,35 @@ +package eu.mhsl.craftattack.worldmuseum.worldswiching; + +import eu.mhsl.craftattack.worldmuseum.worlds.World; +import eu.mhsl.craftattack.worldmuseum.worlds.WorldManager; +import net.kyori.adventure.text.Component; +import net.minestom.server.inventory.Inventory; +import net.minestom.server.inventory.InventoryType; +import net.minestom.server.item.ItemStack; +import net.minestom.server.item.Material; +public class CompassManager { + static CompassManager instance; + + ItemStack compass; + Inventory inventory; + public static CompassManager getInstance() { + if (instance == null) instance = new CompassManager(); + return instance; + } + public void loadCommpassManager() { + compass = ItemStack.builder(Material.COMPASS).displayName(Component.text("World-changer")).build(); + inventory = new Inventory(InventoryType.CHEST_1_ROW, Component.text("World-changer")); + + for (World w : WorldManager.getInstance().getWorlds()) { + inventory.addItemStack(w.getItem()); + } + } + + public ItemStack getCompass() { + return compass; + } + + public Inventory getInventory() { + return inventory; + } +}