From c92bc0f5a8209cc960056ea88a6101701ef74feb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Elias=20M=C3=BCller?= <elias@elias-mueller.com>
Date: Thu, 26 Dec 2024 21:06:18 +0100
Subject: [PATCH] various changes and updates

---
 .../WorldMuseum/items/ActionItemManager.java  |  1 -
 .../items/actionItems/FlightChanger.java      | 35 -------------------
 .../items/actionItems/SpeedChanger.java       |  4 +--
 .../items/actionItems/WorldSelector.java      | 19 ++++++++--
 .../WorldMuseum/listener/PlayerListener.java  |  5 ++-
 .../viewableWorld/ViewableWorld.java          |  1 +
 6 files changed, 23 insertions(+), 42 deletions(-)
 delete mode 100644 src/main/java/eu/mhsl/minecraft/WorldMuseum/items/actionItems/FlightChanger.java

diff --git a/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/ActionItemManager.java b/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/ActionItemManager.java
index a555963..1503836 100644
--- a/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/ActionItemManager.java
+++ b/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/ActionItemManager.java
@@ -16,7 +16,6 @@ public class ActionItemManager {
         List<IActionItem> actionItems = List.of(
             new WorldSelector(),
             new LeaveItem(),
-            new FlightChanger(),
             new SpawnTeleport(),
             new SpeedChanger()
         );
diff --git a/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/actionItems/FlightChanger.java b/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/actionItems/FlightChanger.java
deleted file mode 100644
index cf9760f..0000000
--- a/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/actionItems/FlightChanger.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package eu.mhsl.minecraft.WorldMuseum.items.actionItems;
-
-import net.kyori.adventure.text.Component;
-import org.bukkit.Material;
-import org.bukkit.entity.Player;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.ItemMeta;
-import org.jetbrains.annotations.NotNull;
-
-public class FlightChanger implements IActionItem {
-    private final ItemStack item = generateItem();
-
-    private ItemStack generateItem() {
-        ItemStack item = new ItemStack(Material.ELYTRA);
-        ItemMeta meta = item.getItemMeta();
-        meta.displayName(Component.text("Aktiviere/Deaktiviere Fliegen"));
-        item.setItemMeta(meta);
-        return item;
-    }
-
-    @Override
-    public void action(@NotNull Player player) {
-        player.setFlying(!player.isFlying());
-    }
-
-    @Override
-    public ItemStack getItem() {
-        return item;
-    }
-
-    @Override
-    public int getItemLocation() {
-        return 1;
-    }
-}
diff --git a/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/actionItems/SpeedChanger.java b/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/actionItems/SpeedChanger.java
index cd0975c..6bc9c93 100644
--- a/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/actionItems/SpeedChanger.java
+++ b/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/actionItems/SpeedChanger.java
@@ -12,7 +12,7 @@ import java.util.List;
 import java.util.stream.IntStream;
 
 public class SpeedChanger implements IActionItem {
-    List<Float> flySpeeds = List.of(0.2f, 0.4f, 0.6f, 0.8f);
+    List<Float> flySpeeds = List.of(0.1f, 0.3f, 0.5f, 0.7f);
 
     @Override
     public void action(@NotNull Player player) {
@@ -42,6 +42,6 @@ public class SpeedChanger implements IActionItem {
 
     @Override
     public int getItemLocation() {
-        return 2;
+        return 1;
     }
 }
diff --git a/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/actionItems/WorldSelector.java b/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/actionItems/WorldSelector.java
index a13677c..1fc5d58 100644
--- a/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/actionItems/WorldSelector.java
+++ b/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/actionItems/WorldSelector.java
@@ -4,6 +4,7 @@ import eu.mhsl.minecraft.WorldMuseum.Main;
 import eu.mhsl.minecraft.WorldMuseum.viewableWorld.ViewableWorld;
 import net.kyori.adventure.text.Component;
 import net.kyori.adventure.text.format.NamedTextColor;
+import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
 import org.bukkit.Bukkit;
 import org.bukkit.Material;
 import org.bukkit.entity.Player;
@@ -15,6 +16,7 @@ import org.bukkit.inventory.meta.ItemMeta;
 import org.jetbrains.annotations.NotNull;
 
 import java.util.List;
+import java.util.Objects;
 
 public class WorldSelector implements IActionItem {
     private Inventory generateWorldSelectorInventory() {
@@ -26,8 +28,13 @@ public class WorldSelector implements IActionItem {
         Inventory inventory = Bukkit.createInventory(null, inventorySize, Component.text("Weltenmuseum"));
 
         worlds.stream()
-                .filter(ViewableWorld::isEnabled)
-                .forEach(viewableWorld -> inventory.addItem(viewableWorld.getItem()));
+            .filter(ViewableWorld::isEnabled)
+            .sorted((o1, o2) -> {
+                String name1 = PlainTextComponentSerializer.plainText().serialize(o1.getItem().displayName());
+                String name2 = PlainTextComponentSerializer.plainText().serialize(o2.getItem().displayName());
+                return name1.compareTo(name2);
+            })
+            .forEach(viewableWorld -> inventory.addItem(viewableWorld.getItem()));
 
         boolean canExit = Main.instance().getConfig().getBoolean("bungee.enabled");
         if(canExit) inventory.setItem(inventorySize - 1, exitItem());
@@ -51,6 +58,12 @@ public class WorldSelector implements IActionItem {
 
     @EventHandler
     public void onInteract(InventoryClickEvent event) {
+        if(Objects.equals(event.getCurrentItem(), exitItem())) {
+            LeaveItem item = new LeaveItem();
+            item.action((Player) event.getWhoClicked());
+            return;
+        }
+
         List<ItemStack> worldItems = Main.instance().getWorlds().stream().map(ViewableWorld::getItem).toList();
         if(!worldItems.contains(event.getCurrentItem())) return;
         event.setCancelled(true);
@@ -63,7 +76,7 @@ public class WorldSelector implements IActionItem {
 
     @Override
     public ItemStack getItem() {
-        ItemStack item = new ItemStack(Material.GRASS_BLOCK);
+        ItemStack item = new ItemStack(Material.COMPASS);
         ItemMeta meta = item.getItemMeta();
         meta.displayName(Component.text("Weltenliste", NamedTextColor.GOLD));
         item.setItemMeta(meta);
diff --git a/src/main/java/eu/mhsl/minecraft/WorldMuseum/listener/PlayerListener.java b/src/main/java/eu/mhsl/minecraft/WorldMuseum/listener/PlayerListener.java
index 513b1b0..d477b89 100644
--- a/src/main/java/eu/mhsl/minecraft/WorldMuseum/listener/PlayerListener.java
+++ b/src/main/java/eu/mhsl/minecraft/WorldMuseum/listener/PlayerListener.java
@@ -28,13 +28,16 @@ public class PlayerListener implements Listener {
     @EventHandler
     public void onJoin(PlayerJoinEvent event) {
         Player player = event.getPlayer();
+        player.getInventory().clear();
+        player.getActivePotionEffects().clear();
+        player.clearTitle();
 
         player.setGameMode(GameMode.SURVIVAL);
-        player.setAllowFlight(true);
         player.setInvulnerable(true);
         player.setFoodLevel(20);
         player.setHealth(20);
         player.setAllowFlight(true);
+        player.setFlying(true);
 
         Main.instance().getWorlds().stream()
                 .filter(ViewableWorld::isDefaultWorld)
diff --git a/src/main/java/eu/mhsl/minecraft/WorldMuseum/viewableWorld/ViewableWorld.java b/src/main/java/eu/mhsl/minecraft/WorldMuseum/viewableWorld/ViewableWorld.java
index f18151a..71e0d41 100644
--- a/src/main/java/eu/mhsl/minecraft/WorldMuseum/viewableWorld/ViewableWorld.java
+++ b/src/main/java/eu/mhsl/minecraft/WorldMuseum/viewableWorld/ViewableWorld.java
@@ -61,6 +61,7 @@ public class ViewableWorld {
         this.world = worldCreator.createWorld();
         Objects.requireNonNull(this.world);
         this.world.setAutoSave(false);
+        this.world.setClearWeatherDuration(Integer.MAX_VALUE);
     }
 
     public void unloadWorld() {