diff --git a/src/main/java/eu/mhsl/minecraft/WorldMuseum/Main.java b/src/main/java/eu/mhsl/minecraft/WorldMuseum/Main.java index bb19d2a..08d64e0 100644 --- a/src/main/java/eu/mhsl/minecraft/WorldMuseum/Main.java +++ b/src/main/java/eu/mhsl/minecraft/WorldMuseum/Main.java @@ -1,5 +1,6 @@ package eu.mhsl.minecraft.WorldMuseum; +import eu.mhsl.minecraft.WorldMuseum.items.actionItems.WorldSelector; import eu.mhsl.minecraft.WorldMuseum.listener.ChatListener; import eu.mhsl.minecraft.WorldMuseum.listener.PlayerListener; import eu.mhsl.minecraft.WorldMuseum.viewableWorld.ViewableWorld; @@ -32,7 +33,8 @@ public class Main extends JavaPlugin { new PlayerListener(), new ChatListener(), // new WorldSelectListener(), - new ViewableWorldListener() + new ViewableWorldListener(), + new WorldSelector() ); 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 index 50f0d4b..c419580 100644 --- a/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/ActionItemManager.java +++ b/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/ActionItemManager.java @@ -1,33 +1,35 @@ package eu.mhsl.minecraft.WorldMuseum.items; +import eu.mhsl.minecraft.WorldMuseum.items.actionItems.IActionItem; +import eu.mhsl.minecraft.WorldMuseum.items.actionItems.LeaveItem; import eu.mhsl.minecraft.WorldMuseum.items.actionItems.WorldSelector; import org.bukkit.entity.Player; +import java.util.ArrayList; +import java.util.List; + public class ActionItemManager { private static ActionItemManager INSTANCE; - private WorldSelector worldSelector; - + private final List actionObjects = new ArrayList<>(); public ActionItemManager() { initItems(); - } private void initItems() { - worldSelector = new WorldSelector(); + actionObjects.add(new WorldSelector()); + actionObjects.add(new LeaveItem()); } - public static ActionItemManager getInstance() { if (INSTANCE == null) INSTANCE = new ActionItemManager(); return INSTANCE; } public void givePlayerItems(Player p) { - p.getInventory().setItem(0, worldSelector.getITEM()); + actionObjects.forEach(actionObject -> p.getInventory().setItem(actionObject.getItemLocation(), actionObject.getItem())); } - - public WorldSelector getWorldSelector() { - return worldSelector; + public List getActionObjects() { + return actionObjects; } } diff --git a/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/actionItems/IActionItem.java b/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/actionItems/IActionItem.java new file mode 100644 index 0000000..057ab39 --- /dev/null +++ b/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/actionItems/IActionItem.java @@ -0,0 +1,11 @@ +package eu.mhsl.minecraft.WorldMuseum.items.actionItems; + +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; + +public interface IActionItem { + void action(@NotNull Player player); + ItemStack getItem(); + int getItemLocation(); +} diff --git a/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/actionItems/LeaveItem.java b/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/actionItems/LeaveItem.java new file mode 100644 index 0000000..bde867e --- /dev/null +++ b/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/actionItems/LeaveItem.java @@ -0,0 +1,53 @@ +package eu.mhsl.minecraft.WorldMuseum.items.actionItems; + +import eu.mhsl.minecraft.WorldMuseum.Main; +import eu.mhsl.minecraft.WorldMuseum.util.BungeeCord; +import net.kyori.adventure.text.Component; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.Player; +import org.bukkit.event.Listener; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.jetbrains.annotations.NotNull; + +import java.util.Objects; + +public class LeaveItem implements Listener, IActionItem { + private final ItemStack item = generateItem(); + + private ItemStack generateItem() { + ItemStack item = new ItemStack(Material.RED_BED); + ItemMeta meta = item.getItemMeta(); + meta.displayName(Component.text("Leave World Museum")); + item.setItemMeta(meta); + return item; + } + + @Override + public void action(@NotNull Player player) { + ConfigurationSection bungeeSettings = Main.instance().getConfig().getConfigurationSection("bungee"); + Objects.requireNonNull(bungeeSettings); + + if(!(bungeeSettings.getBoolean("enabled", false))) { + player.sendMessage(Component.text("Bungeecord is not enabled. You can't be transpered ")); + } + if(!bungeeSettings.getBoolean("returnOnSelectExit")) return; + sendPlayerToExit(player); + } + + private void sendPlayerToExit(Player player) { + BungeeCord.connect(player, Main.instance().getConfig().getString("bungee.returnToServer")); + } + + @Override + public ItemStack getItem() { + return item; + } + + @Override + public int getItemLocation() { + int itemLocation = 8; //Item will be placed in the last hotbar slot + return itemLocation; + } +} 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 dc5f34e..e23d33a 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 @@ -6,6 +6,9 @@ import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; @@ -13,7 +16,7 @@ import org.jetbrains.annotations.NotNull; import java.util.List; -public class WorldSelector { +public class WorldSelector implements Listener, IActionItem { private final ItemStack ITEM = generateWorldSelectorItem(); private final Inventory INVENTORY = generateWorldSelectorInventory(); @@ -52,11 +55,30 @@ public class WorldSelector { return stack; } - public ItemStack getITEM() { - return ITEM; - } - + @Override public void action(@NotNull Player player) { player.openInventory(INVENTORY); } + + @EventHandler + public void onInteract(InventoryClickEvent event) { + event.setCancelled(true); + + Main.instance().getWorlds().stream() + .filter(viewableWorld -> viewableWorld.getItem().equals(event.getCurrentItem())) + .findFirst() + .ifPresent(viewableWorld -> viewableWorld.addViewer((Player) event.getWhoClicked())); + } + + @Override + public ItemStack getItem() { + return ITEM; + } + + @Override + public int getItemLocation() { + int itemLocation = 0; // Item will be placed into the first hotbar slot + return itemLocation; + } + } diff --git a/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/worldSelector/WorldSelectListener.java b/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/worldSelector/WorldSelectListener.java deleted file mode 100644 index b8d3f4c..0000000 --- a/src/main/java/eu/mhsl/minecraft/WorldMuseum/items/worldSelector/WorldSelectListener.java +++ /dev/null @@ -1,62 +0,0 @@ -package eu.mhsl.minecraft.WorldMuseum.items.worldSelector; - -import eu.mhsl.minecraft.WorldMuseum.Main; -import eu.mhsl.minecraft.WorldMuseum.util.BungeeCord; -import org.bukkit.Bukkit; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryCloseEvent; -import org.bukkit.event.player.PlayerJoinEvent; - -import java.util.Objects; - -public class WorldSelectListener implements Listener { - private void sendPlayerToExit(Player player) { - BungeeCord.connect(player, Main.instance().getConfig().getString("bungee.returnToServer")); - } - - @EventHandler - public void onExit(InventoryCloseEvent event) { - if(event.getReason().equals(InventoryCloseEvent.Reason.TELEPORT)) return; - - Bukkit.getScheduler().scheduleSyncDelayedTask( - Main.instance(), - () -> event.getPlayer().openInventory(WorldSelectInventory.generateInventory()), - 1 - ); - - ConfigurationSection bungeeSettings = Main.instance().getConfig().getConfigurationSection("bungee"); - Objects.requireNonNull(bungeeSettings); - - if(!event.getReason().equals(InventoryCloseEvent.Reason.PLAYER)) return; - if(!(bungeeSettings.getBoolean("enabled", false))) return; - if(!bungeeSettings.getBoolean("returnOnSelectExit")) return; - sendPlayerToExit((Player) event.getPlayer()); - } - - @EventHandler - public void onInteract(InventoryClickEvent event) { - event.setCancelled(true); - - if(Objects.equals(event.getCurrentItem(), WorldSelectInventory.exitItem())) - sendPlayerToExit((Player) event.getWhoClicked()); - - Main.instance().getWorlds().stream() - .filter(viewableWorld -> viewableWorld.getItem().equals(event.getCurrentItem())) - .findFirst() - .ifPresent(viewableWorld -> viewableWorld.addViewer((Player) event.getWhoClicked())); - } - - @EventHandler - public void onJoin(PlayerJoinEvent event) { - Bukkit.getScheduler().scheduleSyncDelayedTask( - Main.instance(), - () -> event.getPlayer().openInventory( - WorldSelectInventory.generateInventory() - ) - ); - } -} 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 aea0cea..c29fca1 100644 --- a/src/main/java/eu/mhsl/minecraft/WorldMuseum/listener/PlayerListener.java +++ b/src/main/java/eu/mhsl/minecraft/WorldMuseum/listener/PlayerListener.java @@ -15,6 +15,7 @@ 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.inventory.ItemStack; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; @@ -23,7 +24,10 @@ import java.util.Objects; public class PlayerListener implements Listener { @EventHandler public void onJoin(PlayerJoinEvent event) { - event.getPlayer().setGameMode(GameMode.SURVIVAL); + Player player = event.getPlayer(); + player.setGameMode(GameMode.SURVIVAL); + player.setAllowFlight(true); + player.setInvulnerable(true); Main.instance().getWorlds().forEach(world -> { if (world.isDefaultWorld()) world.addViewer(event.getPlayer()); }); @@ -55,12 +59,16 @@ public class PlayerListener implements Listener { @EventHandler public void onInteract(PlayerInteractEvent event) { - ActionItemManager actionItems = ActionItemManager.getInstance(); + ActionItemManager actionItemManager = ActionItemManager.getInstance(); event.setCancelled(true); Player p = event.getPlayer(); Action a = event.getAction(); + ItemStack item = event.getItem(); if ((a != Action.RIGHT_CLICK_AIR) || (event.getItem() == null)) return; - if (event.getItem().equals(actionItems.getWorldSelector().getITEM())) actionItems.getWorldSelector().action(p); + actionItemManager.getActionObjects().forEach(object -> { + assert item != null; + if (item.equals(object.getItem())) object.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 3580896..bb847c4 100644 --- a/src/main/java/eu/mhsl/minecraft/WorldMuseum/viewableWorld/ViewableWorld.java +++ b/src/main/java/eu/mhsl/minecraft/WorldMuseum/viewableWorld/ViewableWorld.java @@ -64,8 +64,8 @@ public class ViewableWorld { } public void addViewer(Player player) { - player.setAllowFlight(true); player.teleport(world.getSpawnLocation()); + player.setAllowFlight(true); } public ItemStack getItem() {