diff --git a/BetterRTPAddons/pom.xml b/BetterRTPAddons/pom.xml index 15d04cd..9d4df6a 100644 --- a/BetterRTPAddons/pom.xml +++ b/BetterRTPAddons/pom.xml @@ -7,7 +7,7 @@ me.SuperRonanCraft BetterRTPAddons jar - 1.8.1 + 1.8.2 1.8 diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/rtpmenu/AddonRTPMenu.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/rtpmenu/AddonRTPMenu.java index c1bd9e5..02f6a8e 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/rtpmenu/AddonRTPMenu.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/rtpmenu/AddonRTPMenu.java @@ -1,5 +1,6 @@ package me.SuperRonanCraft.BetterRTPAddons.addons.rtpmenu; +import lombok.Getter; import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommand; import me.SuperRonanCraft.BetterRTP.player.commands.types.CmdTeleport; import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_CommandEvent; @@ -8,19 +9,21 @@ import me.SuperRonanCraft.BetterRTPAddons.Main; import me.SuperRonanCraft.BetterRTPAddons.util.Files; import org.bukkit.Bukkit; import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; import org.bukkit.event.inventory.InventoryClickEvent; -import java.util.HashMap; -import java.util.Objects; +import javax.security.auth.login.Configuration; +import java.util.*; public class AddonRTPMenu implements Addon, Listener { public static String name = "RTPMenu"; private final HashMap playerData = new HashMap<>(); + @Getter private HashMap worlds = new HashMap<>(); public MenuData getData(Player p) { if (!playerData.containsKey(p)) @@ -38,12 +41,44 @@ public class AddonRTPMenu implements Addon, Listener { for (Player p : playerData.keySet()) p.closeInventory(); playerData.clear(); + ConfigurationSection config = getFile(Files.FILETYPE.CONFIG).getConfigurationSection("RTPMenu"); + List> map = config.getMapList("WorldList"); + for (Map m : map) { + for (Map.Entry entry : m.entrySet()) { + String world = entry.getKey().toString(); + Map test = ((Map) m.get(world)); + if (test == null) + continue; + String item = "MAP"; + String name = world; + List lore = new ArrayList<>(); + if (test.get("Item") != null) { + if (test.get("Item").getClass() == String.class) + item = String.valueOf(test.get("Item").toString()); + } + if (test.get("Name") != null) { + if (test.get("Name").getClass() == String.class) + name = String.valueOf(test.get("Name").toString()); + } + if (test.get("Lore") != null) { + if (test.get("Lore").getClass() == ArrayList.class) + lore = new ArrayList((ArrayList) test.get("Lore")); + } + try { + worlds.put(world, new RTPMenuWorldInfo(name, Material.valueOf(item.toUpperCase()), lore)); + } catch (IllegalArgumentException | NullPointerException e) { + Main.getInstance().getLogger().warning("The item " + item + " is an unknown item id! Set to a map!"); + } + } + } Bukkit.getServer().getPluginManager().registerEvents(this, Main.getInstance()); } @Override public void unload() { HandlerList.unregisterAll(this); + for (Player p : playerData.keySet()) + p.closeInventory(); } @Override diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/rtpmenu/RTPMenuWorldInfo.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/rtpmenu/RTPMenuWorldInfo.java new file mode 100644 index 0000000..06a51bb --- /dev/null +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/rtpmenu/RTPMenuWorldInfo.java @@ -0,0 +1,18 @@ +package me.SuperRonanCraft.BetterRTPAddons.addons.rtpmenu; + +import org.bukkit.Material; + +import java.util.List; + +public class RTPMenuWorldInfo { + + public final String name; + public final Material item; + public final List lore; + + RTPMenuWorldInfo(String name, Material item, List lore) { + this.name = name; + this.item = item; + this.lore = lore; + } +} diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/rtpmenu/RTPMenu_SelectWorld.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/rtpmenu/RTPMenu_SelectWorld.java index 12de333..ec58222 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/rtpmenu/RTPMenu_SelectWorld.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/rtpmenu/RTPMenu_SelectWorld.java @@ -21,31 +21,30 @@ public class RTPMenu_SelectWorld { public static void createInv(AddonRTPMenu pl, Player p) { List bukkit_worlds = Bukkit.getWorlds(); - List display_worlds = Files.FILETYPE.CONFIG.getStringList(AddonRTPMenu.name + ".Worlds"); List actual_worlds = new ArrayList<>(); for (World world : bukkit_worlds) { - if (display_worlds.contains(world.getName()) && BetterRTP.getInstance().getPerms().getAWorld(p, world.getName())) + if (pl.getWorlds().containsKey(world.getName()) && BetterRTP.getInstance().getPerms().getAWorld(p, world.getName())) actual_worlds.add(world); } - if (actual_worlds.size() <= 1) { + if (actual_worlds.isEmpty() || (actual_worlds.size() <= 1 && !BetterRTP.getInstance().getSettings().isDebug())) { CmdTeleport.teleport(p, "rtp", null, null); return; } int size = Math.floorDiv(actual_worlds.size(), 9) * 9; if (size < actual_worlds.size()) size += 9; - Inventory inv = createInventory(color(Files.FILETYPE.CONFIG.getString(AddonRTPMenu.name + ".Menu.Title")), size); + Inventory inv = createInventory(color(Files.FILETYPE.CONFIG.getString(AddonRTPMenu.name + ".Title")), size); HashMap world_slots = centerWorlds(new ArrayList<>(actual_worlds)); - String item_name = Files.FILETYPE.CONFIG.getString(AddonRTPMenu.name + ".Menu.Items.Name"); - List item_lore = Files.FILETYPE.CONFIG.getStringList(AddonRTPMenu.name + ".Menu.Items.Lore"); for (Map.Entry world : world_slots.entrySet()) { + String worldName = world.getValue().getName(); + RTPMenuWorldInfo worldInfo = pl.getWorlds().getOrDefault(worldName, new RTPMenuWorldInfo(worldName, Material.MAP, null)); int slot = world.getKey(); - ItemStack item = new ItemStack(Material.MAP, 1); + ItemStack item = new ItemStack(worldInfo.item, 1); ItemMeta meta = item.getItemMeta(); assert meta != null; - meta.setDisplayName(color(item_name.replace("%world%", world.getValue().getName()))); - List lore = new ArrayList<>(item_lore); + meta.setDisplayName(color(worldInfo.name)); + List lore = new ArrayList<>(worldInfo.lore); lore.forEach(s -> lore.set(lore.indexOf(s), color(s).replace("%world%", world.getValue().getName()))); meta.setLore(lore); item.setItemMeta(meta); diff --git a/BetterRTPAddons/src/main/resources/config.yml b/BetterRTPAddons/src/main/resources/config.yml index 28d3ef5..10a13f5 100644 --- a/BetterRTPAddons/src/main/resources/config.yml +++ b/BetterRTPAddons/src/main/resources/config.yml @@ -64,13 +64,17 @@ Parties: #Addon RTPMenu (Enable `/rtp` world select menu) RTPMenu: Enabled: false - Menu: - Title: "Choose World" - Items: - Name: '&7%world%' - Lore: - - '' - - '&8Click to rtp into this world!' - Worlds: - - world - - world_nether \ No newline at end of file + Title: "Choose World" + WorldList: + - world: + Name: '&7World' + Item: 'map' + Lore: + - '' + - '&8Click to rtp in world!' + - world_nether: + Name: '&cNether' + Item: 'netherrack' + Lore: + - '' + - '&8Click to rtp in world!' \ No newline at end of file