diff --git a/pom.xml b/pom.xml index 6da78c1..312b12e 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 de.fanta.challenges ChallengesJoinEntities - 1.19 + 1.19.2 UTF-8 UTF-8 @@ -27,7 +27,7 @@ io.papermc.paper paper-api - 1.19-R0.1-SNAPSHOT + 1.19.2-R0.1-SNAPSHOT provided @@ -45,7 +45,7 @@ de.fanta.challenges Challenges - 1.18.2 + 1.19 provided diff --git a/src/main/java/de/fanta/challengesjoinentities/ChallengesJoinEntities.java b/src/main/java/de/fanta/challengesjoinentities/ChallengesJoinEntities.java index 0d310e9..b83624f 100644 --- a/src/main/java/de/fanta/challengesjoinentities/ChallengesJoinEntities.java +++ b/src/main/java/de/fanta/challengesjoinentities/ChallengesJoinEntities.java @@ -126,11 +126,12 @@ adventurerouter.addCommandMapping(new AdventureTestMapCommand(this), "testmap"); adventurerouter.addCommandMapping(new ChallengesRemovePlayerServer(this), "removeplayerfromserver"); adventurerouter.addCommandMapping(new AdventureConvertMapCommand(this), "convertmap"); + + Bukkit.getPluginManager().registerEvents(new EntityListener(this), this); + Bukkit.getPluginManager().registerEvents(new PlayerListener(this), this); + Bukkit.getPluginManager().registerEvents(new AdventureLoadGUI(), this); + Bukkit.getPluginManager().registerEvents(new ChallengeLoadGUI(), this); } - Bukkit.getPluginManager().registerEvents(new EntityListener(this), this); - Bukkit.getPluginManager().registerEvents(new PlayerListener(this), this); - Bukkit.getPluginManager().registerEvents(new AdventureLoadGUI(), this); - Bukkit.getPluginManager().registerEvents(new ChallengeLoadGUI(), this); Bukkit.getPluginManager().registerEvents(globalDataHelper, this); } diff --git a/src/main/java/de/fanta/challengesjoinentities/adventure/CategoriesConfig.java b/src/main/java/de/fanta/challengesjoinentities/adventure/CategoriesConfig.java index e0b1d03..454e0c3 100644 --- a/src/main/java/de/fanta/challengesjoinentities/adventure/CategoriesConfig.java +++ b/src/main/java/de/fanta/challengesjoinentities/adventure/CategoriesConfig.java @@ -7,6 +7,7 @@ import java.io.IOException; import java.util.HashMap; import java.util.Map; +import java.util.Objects; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.YamlConfiguration; @@ -76,4 +77,16 @@ public Category getCategory(String name) { return this.categories.get(name); } + + public Category getCategorybyMap(AdventureMap adventureMap) { + for (Category category : plugin.getCategoriesConfig().getCategories().values()) { + for (AdventureMap adventureMapTemp : category.getMaps()) { + if (Objects.equals(adventureMap.getName(), adventureMapTemp.getName())) { + return category; + } + } + } + return null; + } + } diff --git a/src/main/java/de/fanta/challengesjoinentities/adventure/ui/AdventureMapsUI.java b/src/main/java/de/fanta/challengesjoinentities/adventure/ui/AdventureMapsUI.java index 6e8d824..dd4c2dc 100644 --- a/src/main/java/de/fanta/challengesjoinentities/adventure/ui/AdventureMapsUI.java +++ b/src/main/java/de/fanta/challengesjoinentities/adventure/ui/AdventureMapsUI.java @@ -57,13 +57,13 @@ ItemStack[] content = new ItemStack[WINDOW_SIZE]; // build scroll buttons - ItemStack scrollUpHead = this.scrollAmount <= 0 ? CustomHeads.QUARTZ_BLOCK_BLANK.getHead() : CustomHeads.QUARTZ_ARROW_UP.getHead(); + ItemStack scrollUpHead = this.scrollAmount <= 0 ? CustomHeads.RAINBOW_BLANK.getHead() : CustomHeads.RAINBOW_ARROW_UP.getHead(); ItemMeta scrollUpMeta = scrollUpHead.getItemMeta(); scrollUpMeta.setDisplayName((this.scrollAmount <= 0 ? ChatColor.GRAY : ChatColor.WHITE) + "Nach oben scrollen"); scrollUpHead.setItemMeta(scrollUpMeta); content[NUM_OF_COLUMNS - 1] = scrollUpHead; - ItemStack scrollDownHead = this.scrollAmount >= this.numOfItemRows - NUM_OF_ROWS ? CustomHeads.QUARTZ_BLOCK_BLANK.getHead() : CustomHeads.QUARTZ_ARROW_DOWN.getHead(); + ItemStack scrollDownHead = this.scrollAmount >= this.numOfItemRows - NUM_OF_ROWS ? CustomHeads.RAINBOW_BLANK.getHead() : CustomHeads.RAINBOW_ARROW_DOWN.getHead(); ItemMeta scrollDownMeta = scrollDownHead.getItemMeta(); scrollDownMeta.setDisplayName((this.scrollAmount >= this.numOfItemRows - NUM_OF_ROWS ? ChatColor.GRAY : ChatColor.WHITE) + "Nach unten scrollen"); scrollDownHead.setItemMeta(scrollDownMeta); diff --git a/src/main/java/de/fanta/challengesjoinentities/adventure/ui/AdventureSearchGUI.java b/src/main/java/de/fanta/challengesjoinentities/adventure/ui/AdventureSearchGUI.java index 66a2767..a9877dc 100644 --- a/src/main/java/de/fanta/challengesjoinentities/adventure/ui/AdventureSearchGUI.java +++ b/src/main/java/de/fanta/challengesjoinentities/adventure/ui/AdventureSearchGUI.java @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.TreeMap; import java.util.UUID; public class AdventureSearchGUI extends AbstractWindow { @@ -33,15 +34,17 @@ private static final int END_OF_FIRST_ROW_INDEX = NUM_OF_COLUMNS - 1; private static final int END_OF_LAST_ROW_INDEX = WINDOW_SIZE - 1; - private static final HashMap> mapsByPlayer = new HashMap<>(); + private static final int BACK_INDEX = 0; + + private static final HashMap> mapsByPlayer = new HashMap<>(); private final int numOfItemRows; private int scrollAmount; - public AdventureSearchGUI(ChallengesJoinEntities plugin, HashMap mapList, String seachEntry, Player player) { + public AdventureSearchGUI(ChallengesJoinEntities plugin, TreeMap mapList, String seachEntry, Player player) { super(player, Bukkit.createInventory(player, WINDOW_SIZE, ChatUtil.GREEN + "Suche: " + ChatUtil.BLUE + seachEntry)); this.plugin = plugin; - HashMap maps = new HashMap<>(mapList); + HashMap maps = new HashMap<>(mapList); mapsByPlayer.put(player.getUniqueId(), maps); this.numOfItemRows = (int) (Math.ceil(maps.size() / (double) NUM_OF_ITEM_COLUMNS)); this.scrollAmount = 0; @@ -51,13 +54,13 @@ ItemStack[] content = new ItemStack[WINDOW_SIZE]; // build scroll buttons - ItemStack scrollUpHead = this.scrollAmount <= 0 ? CustomHeads.QUARTZ_BLOCK_BLANK.getHead() : CustomHeads.QUARTZ_ARROW_UP.getHead(); + ItemStack scrollUpHead = this.scrollAmount <= 0 ? CustomHeads.RAINBOW_BLANK.getHead() : CustomHeads.RAINBOW_ARROW_UP.getHead(); ItemMeta scrollUpMeta = scrollUpHead.getItemMeta(); scrollUpMeta.setDisplayName((this.scrollAmount <= 0 ? ChatColor.GRAY : ChatColor.WHITE) + "Nach oben scrollen"); scrollUpHead.setItemMeta(scrollUpMeta); content[NUM_OF_COLUMNS - 1] = scrollUpHead; - ItemStack scrollDownHead = this.scrollAmount >= this.numOfItemRows - NUM_OF_ROWS ? CustomHeads.QUARTZ_BLOCK_BLANK.getHead() : CustomHeads.QUARTZ_ARROW_DOWN.getHead(); + ItemStack scrollDownHead = this.scrollAmount >= this.numOfItemRows - NUM_OF_ROWS ? CustomHeads.RAINBOW_BLANK.getHead() : CustomHeads.RAINBOW_ARROW_DOWN.getHead(); ItemMeta scrollDownMeta = scrollDownHead.getItemMeta(); scrollDownMeta.setDisplayName((this.scrollAmount >= this.numOfItemRows - NUM_OF_ROWS ? ChatColor.GRAY : ChatColor.WHITE) + "Nach unten scrollen"); scrollDownHead.setItemMeta(scrollDownMeta); @@ -74,20 +77,21 @@ // fill in items int index = this.scrollAmount * NUM_OF_ITEM_COLUMNS; - HashMap maps = mapsByPlayer.get(getPlayer().getUniqueId()); - for (int row = 0; row < NUM_OF_ROWS && index < maps.size(); row++) { + HashMap maps = mapsByPlayer.get(getPlayer().getUniqueId()); + for (int row = 1; row < NUM_OF_ROWS && index < maps.size(); row++) { for (int column = 0; column < NUM_OF_ITEM_COLUMNS && index < maps.size(); column++) { - AdventureMap adventureMap = new ArrayList<>(maps.keySet()).get(index++); + AdventureMap adventureMap = new ArrayList<>(maps.values()).get(index++); ItemStack stack = adventureMap.getItem().clone(); ItemMeta meta = stack.getItemMeta(); List lore = meta.getLore(); - lore.add(ChatUtil.GREEN + "Kategorie: " + ChatUtil.BLUE + maps.get(adventureMap).getName()); + lore.add(ChatUtil.GREEN + "Kategorie: " + ChatUtil.BLUE + plugin.getCategoriesConfig().getCategorybyMap(adventureMap).getName()); meta.setLore(lore); stack.setItemMeta(meta); content[row * NUM_OF_COLUMNS + column] = adventureMap == null ? null : stack; } } + content[BACK_INDEX] = CustomHeads.RAINBOW_ARROW_BACKWARD_II.getHead(ChatUtil.GREEN + "Zurück"); getInventory().setContents(content); } @@ -103,6 +107,12 @@ } int slot = event.getSlot(); + + if (slot == BACK_INDEX) { + new CategoryUI(this.plugin, this.plugin.getCategoriesConfig(), getPlayer()).open(); + return; + } + if (slot == END_OF_FIRST_ROW_INDEX) { attempScrollUp(); return; @@ -121,17 +131,17 @@ return; } - int adventureMapIndex = (slot - (slot / NUM_OF_COLUMNS)) + this.scrollAmount * NUM_OF_ITEM_COLUMNS; - HashMap maps = mapsByPlayer.get(getPlayer().getUniqueId()); + int adventureMapIndex = ((slot - (slot / NUM_OF_COLUMNS)) + this.scrollAmount * NUM_OF_ITEM_COLUMNS) - NUM_OF_COLUMNS + 1; + HashMap maps = mapsByPlayer.get(getPlayer().getUniqueId()); if (adventureMapIndex >= maps.size()) { return; } - AdventureMap map = new ArrayList<>(maps.keySet()).get(adventureMapIndex); + AdventureMap map = new ArrayList<>(maps.values()).get(adventureMapIndex); Player p = getPlayer(); if (map != null) { - Category category = maps.get(map); + Category category = plugin.getCategoriesConfig().getCategorybyMap(map); if (event.isRightClick()) { getPlayer().sendMessage(ChallengesJoinEntities.PREFIX_COMPONENT.append(Component.text("MapLink: klick mich :)", TextColor.color(Color.YELLOW.asRGB())).clickEvent(ClickEvent.clickEvent(ClickEvent.Action.OPEN_URL, map.getWebLink())))); } else if (!Server.serverPlayers.containsValue(p.getUniqueId())) { diff --git a/src/main/java/de/fanta/challengesjoinentities/adventure/ui/CategoryUI.java b/src/main/java/de/fanta/challengesjoinentities/adventure/ui/CategoryUI.java index b4c0029..1fcb744 100644 --- a/src/main/java/de/fanta/challengesjoinentities/adventure/ui/CategoryUI.java +++ b/src/main/java/de/fanta/challengesjoinentities/adventure/ui/CategoryUI.java @@ -21,6 +21,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.TreeMap; public class CategoryUI extends AbstractWindow { private final ChallengesJoinEntities plugin; @@ -80,12 +81,12 @@ @Override public void run() { String line1 = signEvent.getLines()[0]; - if (line1 != null && !line1.equals("") && !line1.equals(" ")) { - HashMap maps = new HashMap<>(); + if (line1 != null && !line1.equals("")) { + HashMap maps = new HashMap<>(); for (Category category : plugin.getCategoriesConfig().getCategories().values()) { for (AdventureMap adventureMap : category.getMaps()) { - if (adventureMap.getName().toLowerCase().contains(line1.toLowerCase())) { - maps.put(adventureMap, category); + if (adventureMap.getName().toLowerCase().replace("_" , " ").contains(line1.toLowerCase())) { + maps.put(adventureMap.getName(), adventureMap); } } } @@ -93,7 +94,8 @@ if (maps.isEmpty()) { ChatUtil.sendErrorMessage(signEvent.getPlayer(), "Kein Ergebnis mit deinem Suchbegriff."); } else { - new AdventureSearchGUI(plugin, maps, line1, getPlayer()).open(); + TreeMap sortedMaps = new TreeMap<>(maps); + new AdventureSearchGUI(plugin, sortedMaps, line1, getPlayer()).open(); } } else { diff --git a/src/main/java/de/fanta/challengesjoinentities/commands/AdventureCommand/AdventureAddMapCommand.java b/src/main/java/de/fanta/challengesjoinentities/commands/AdventureCommand/AdventureAddMapCommand.java index 8d44f84..83b6485 100644 --- a/src/main/java/de/fanta/challengesjoinentities/commands/AdventureCommand/AdventureAddMapCommand.java +++ b/src/main/java/de/fanta/challengesjoinentities/commands/AdventureCommand/AdventureAddMapCommand.java @@ -13,9 +13,9 @@ import org.bukkit.entity.Player; public class AdventureAddMapCommand extends SubCommand { - private ChallengesJoinEntities plugin; + private final ChallengesJoinEntities plugin; - private AdventureMapsConfig config; + private final AdventureMapsConfig config; public AdventureAddMapCommand(ChallengesJoinEntities plugin) { this.plugin = plugin; diff --git a/src/main/java/de/fanta/challengesjoinentities/listeners/PlayerListener.java b/src/main/java/de/fanta/challengesjoinentities/listeners/PlayerListener.java index c3ac83b..db6f1ff 100644 --- a/src/main/java/de/fanta/challengesjoinentities/listeners/PlayerListener.java +++ b/src/main/java/de/fanta/challengesjoinentities/listeners/PlayerListener.java @@ -1,11 +1,26 @@ package de.fanta.challengesjoinentities.listeners; import de.fanta.challengesjoinentities.ChallengesJoinEntities; +import de.fanta.challengesjoinentities.ChatUtil; +import de.speedy64.globalport.GlobalApi; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.entity.Entity; 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.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerSwapHandItemsEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataType; import org.bukkit.util.Vector; import java.util.Collection; @@ -13,9 +28,11 @@ public class PlayerListener implements Listener { private final ChallengesJoinEntities plugin; + private final NamespacedKey namespacedKey; public PlayerListener(ChallengesJoinEntities plugin) { this.plugin = plugin; + this.namespacedKey = new NamespacedKey(plugin, "backitem"); } @EventHandler @@ -30,4 +47,73 @@ } } } + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent e) { + ItemStack itemStack = new ItemStack(Material.LIME_BED, 1); + ItemMeta meta = itemStack.getItemMeta(); + meta.setDisplayName(ChatUtil.GREEN + "Zurück zum Spawn"); + meta.getPersistentDataContainer().set(namespacedKey, PersistentDataType.STRING, "backitem"); + itemStack.setItemMeta(meta); + e.getPlayer().getInventory().setItem(8, itemStack); + } + + @EventHandler + public void onItemClick(InventoryClickEvent e) { + ItemStack stack = e.getCurrentItem(); + if (stack != null) { + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(namespacedKey) && e.getWhoClicked().getGameMode() != GameMode.CREATIVE) { + e.setCancelled(true); + } + } + + if (e.getClick() == ClickType.NUMBER_KEY) { + int slot = e.getHotbarButton(); + if (slot >= 0 && slot < 9) { + if (!e.getWhoClicked().getInventory().equals(e.getInventory())) { + ItemStack swap = e.getWhoClicked().getInventory().getItem(slot); + if (swap != null) { + ItemMeta swapItemMeta = swap.getItemMeta(); + if (swapItemMeta != null && swapItemMeta.getPersistentDataContainer().has(namespacedKey) && e.getWhoClicked().getGameMode() != GameMode.CREATIVE) { + e.setCancelled(true); + } + } + } + } + } + } + + @EventHandler + public void onItemDrop(PlayerDropItemEvent e) { + ItemStack stack = e.getItemDrop().getItemStack(); + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(namespacedKey) && e.getPlayer().getGameMode() != GameMode.CREATIVE) { + e.setCancelled(true); + } + } + + @EventHandler + public void onItemSwitchHand(PlayerSwapHandItemsEvent e) { + ItemStack stack = e.getMainHandItem(); + if (stack != null) { + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(namespacedKey) && e.getPlayer().getGameMode() != GameMode.CREATIVE) { + e.setCancelled(true); + } + } + } + + @EventHandler + public void onInteractItem(PlayerInteractEvent e) { + if (e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK) { + ItemStack stack = e.getItem(); + if (stack != null) { + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(namespacedKey)) { + GlobalApi.portOnlinePlayerToLocation(e.getPlayer().getName(), "spawn"); + } + } + } + } }