diff --git a/src/main/java/eu/mhsl/minecraft/WorldMuseum/Main.java b/src/main/java/eu/mhsl/minecraft/WorldMuseum/Main.java index 585d60d..bb19d2a 100644 --- a/src/main/java/eu/mhsl/minecraft/WorldMuseum/Main.java +++ b/src/main/java/eu/mhsl/minecraft/WorldMuseum/Main.java @@ -4,7 +4,6 @@ import eu.mhsl.minecraft.WorldMuseum.listener.ChatListener; import eu.mhsl.minecraft.WorldMuseum.listener.PlayerListener; import eu.mhsl.minecraft.WorldMuseum.viewableWorld.ViewableWorld; import eu.mhsl.minecraft.WorldMuseum.viewableWorld.ViewableWorldListener; -import eu.mhsl.minecraft.WorldMuseum.worldSelector.WorldSelectListener; import org.bukkit.Bukkit; import org.bukkit.event.Listener; import org.bukkit.plugin.java.JavaPlugin; @@ -32,7 +31,7 @@ public class Main extends JavaPlugin { List listeners = List.of( new PlayerListener(), new ChatListener(), - new WorldSelectListener(), +// new WorldSelectListener(), new ViewableWorldListener() ); listeners.forEach(listener -> Bukkit.getPluginManager().registerEvents(listener, this)); diff --git a/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/ActionItemManager.java b/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/ActionItemManager.java new file mode 100644 index 0000000..50f0d4b --- /dev/null +++ b/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/ActionItemManager.java @@ -0,0 +1,33 @@ +package eu.mhsl.minecraft.WorldMuseum.items; + +import eu.mhsl.minecraft.WorldMuseum.items.actionItems.WorldSelector; +import org.bukkit.entity.Player; + +public class ActionItemManager { + private static ActionItemManager INSTANCE; + private WorldSelector worldSelector; + + + public ActionItemManager() { + initItems(); + + } + + private void initItems() { + worldSelector = new WorldSelector(); + } + + + public static ActionItemManager getInstance() { + if (INSTANCE == null) INSTANCE = new ActionItemManager(); + return INSTANCE; + } + public void givePlayerItems(Player p) { + p.getInventory().setItem(0, worldSelector.getITEM()); + } + + + public WorldSelector getWorldSelector() { + return worldSelector; + } +} 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 new file mode 100644 index 0000000..dc5f34e --- /dev/null +++ b/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/actionItems/WorldSelector.java @@ -0,0 +1,62 @@ +package eu.mhsl.minecraft.WorldMuseum.items.actionItems; + +import eu.mhsl.minecraft.WorldMuseum.Main; +import eu.mhsl.minecraft.WorldMuseum.viewableWorld.ViewableWorld; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public class WorldSelector { + private final ItemStack ITEM = generateWorldSelectorItem(); + private final Inventory INVENTORY = generateWorldSelectorInventory(); + + private ItemStack generateWorldSelectorItem() { + ItemStack item = new ItemStack(Material.GRASS_BLOCK); + ItemMeta meta = item.getItemMeta(); + meta.displayName(Component.text("Worldselector")); + item.setItemMeta(meta); + return item; + } + + private Inventory generateWorldSelectorInventory() { + List worlds = Main.instance().getWorlds(); + + int itemCount = worlds.size() + 1; + int inventoryRows = Math.max(itemCount / 9, 1); + int inventorySize = inventoryRows * 9; + Inventory inventory = Bukkit.createInventory(null, inventorySize, Component.text("Weltenmuseum")); + + worlds.stream() + .filter(ViewableWorld::isEnabled) + .forEach(viewableWorld -> inventory.addItem(viewableWorld.getItem())); + + boolean canExit = Main.instance().getConfig().getBoolean("bungee.enabled"); + if(canExit) inventory.setItem(inventorySize - 1, exitItem()); + + return inventory; + } + + public static ItemStack exitItem() { + ItemStack stack = ItemStack.of(Material.OAK_DOOR); + ItemMeta meta = stack.getItemMeta(); + meta.displayName(Component.text("Zurück zum Server")); + meta.setEnchantmentGlintOverride(true); + stack.setItemMeta(meta); + return stack; + } + + public ItemStack getITEM() { + return ITEM; + } + + public void action(@NotNull Player player) { + player.openInventory(INVENTORY); + } +} diff --git a/src/main/java/eu/mhsl/minecraft/WorldMuseum/worldSelector/WorldSelectInventory.java b/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/worldSelector/WorldSelectInventory.java similarity index 96% rename from src/main/java/eu/mhsl/minecraft/WorldMuseum/worldSelector/WorldSelectInventory.java rename to src/main/java/eu/mhsl/minecraft/WorldMuseum/items/worldSelector/WorldSelectInventory.java index d391a37..84bea4c 100644 --- a/src/main/java/eu/mhsl/minecraft/WorldMuseum/worldSelector/WorldSelectInventory.java +++ b/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/worldSelector/WorldSelectInventory.java @@ -1,4 +1,4 @@ -package eu.mhsl.minecraft.WorldMuseum.worldSelector; +package eu.mhsl.minecraft.WorldMuseum.items.worldSelector; import eu.mhsl.minecraft.WorldMuseum.Main; import eu.mhsl.minecraft.WorldMuseum.viewableWorld.ViewableWorld; diff --git a/src/main/java/eu/mhsl/minecraft/WorldMuseum/worldSelector/WorldSelectListener.java b/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/worldSelector/WorldSelectListener.java similarity index 97% rename from src/main/java/eu/mhsl/minecraft/WorldMuseum/worldSelector/WorldSelectListener.java rename to src/main/java/eu/mhsl/minecraft/WorldMuseum/items/worldSelector/WorldSelectListener.java index 8007505..b8d3f4c 100644 --- a/src/main/java/eu/mhsl/minecraft/WorldMuseum/worldSelector/WorldSelectListener.java +++ b/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/worldSelector/WorldSelectListener.java @@ -1,4 +1,4 @@ -package eu.mhsl.minecraft.WorldMuseum.worldSelector; +package eu.mhsl.minecraft.WorldMuseum.items.worldSelector; import eu.mhsl.minecraft.WorldMuseum.Main; import eu.mhsl.minecraft.WorldMuseum.util.BungeeCord; 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 17af1e5..aea0cea 100644 --- a/src/main/java/eu/mhsl/minecraft/WorldMuseum/listener/PlayerListener.java +++ b/src/main/java/eu/mhsl/minecraft/WorldMuseum/listener/PlayerListener.java @@ -1,14 +1,19 @@ package eu.mhsl.minecraft.WorldMuseum.listener; import eu.mhsl.minecraft.WorldMuseum.Main; +import eu.mhsl.minecraft.WorldMuseum.items.ActionItemManager; import net.kyori.adventure.util.Ticks; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Material; +import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; @@ -25,10 +30,12 @@ public class PlayerListener implements Listener { event.getPlayer().addPotionEffect( new PotionEffect(PotionEffectType.HASTE, PotionEffect.INFINITE_DURATION, 15, false, false, false) ); + ActionItemManager.getInstance().givePlayerItems(event.getPlayer()); } @EventHandler public void onBreak(BlockBreakEvent event) { + event.setDropItems(false); Material material = event.getBlock().getType(); Bukkit.getScheduler().scheduleSyncDelayedTask( Main.instance(), @@ -40,4 +47,20 @@ public class PlayerListener implements Listener { public void onPlace(BlockPlaceEvent event) { event.setCancelled(true); } + + @EventHandler + public void onDrop(PlayerDropItemEvent event) { + event.setCancelled(true); + } + + @EventHandler + public void onInteract(PlayerInteractEvent event) { + ActionItemManager actionItems = ActionItemManager.getInstance(); + + event.setCancelled(true); + Player p = event.getPlayer(); + Action a = event.getAction(); + if ((a != Action.RIGHT_CLICK_AIR) || (event.getItem() == null)) return; + if (event.getItem().equals(actionItems.getWorldSelector().getITEM())) actionItems.getWorldSelector().action(p); + } } 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 eb4964f..3580896 100644 --- a/src/main/java/eu/mhsl/minecraft/WorldMuseum/viewableWorld/ViewableWorld.java +++ b/src/main/java/eu/mhsl/minecraft/WorldMuseum/viewableWorld/ViewableWorld.java @@ -57,7 +57,6 @@ public class ViewableWorld { this.world = worldCreator.createWorld(); Objects.requireNonNull(this.world); this.world.setAutoSave(false); -// Bukkit.unloadWorld(this.world, false); } public void unloadWorld() { diff --git a/src/main/java/eu/mhsl/minecraft/WorldMuseum/viewableWorld/ViewableWorldListener.java b/src/main/java/eu/mhsl/minecraft/WorldMuseum/viewableWorld/ViewableWorldListener.java index 2cb83d1..cdd9687 100644 --- a/src/main/java/eu/mhsl/minecraft/WorldMuseum/viewableWorld/ViewableWorldListener.java +++ b/src/main/java/eu/mhsl/minecraft/WorldMuseum/viewableWorld/ViewableWorldListener.java @@ -7,6 +7,7 @@ import org.bukkit.event.block.BlockFromToEvent; import org.bukkit.event.block.BlockGrowEvent; import org.bukkit.event.block.BlockRedstoneEvent; import org.bukkit.event.entity.EntitySpawnEvent; +import org.bukkit.event.world.ChunkUnloadEvent; public class ViewableWorldListener implements Listener { @EventHandler @@ -29,4 +30,8 @@ public class ViewableWorldListener implements Listener { public void preventGrowth(BlockGrowEvent event) { event.setCancelled(true); } + @EventHandler + public void onChunkUnload(ChunkUnloadEvent event) { + event.setSaveChunk(false); + } }