From fa79378935f615ada73622435898657be92cd271 Mon Sep 17 00:00:00 2001 From: kaenganxt Date: Sat, 25 Oct 2014 15:51:38 +0200 Subject: [PATCH] Rewrite inventory system --- src/de/anura/core/AnuraCore.java | 169 ++++++------------- src/de/anura/core/InvClick.java | 188 +-------------------- src/de/anura/core/Inventories.java | 234 ++++++++++++++++++++++++++ src/de/anura/core/PlayerInteract.java | 47 ------ src/de/anura/core/PlayerJoin.java | 12 -- 5 files changed, 290 insertions(+), 360 deletions(-) create mode 100644 src/de/anura/core/Inventories.java diff --git a/src/de/anura/core/AnuraCore.java b/src/de/anura/core/AnuraCore.java index b2f7154..889cd2e 100644 --- a/src/de/anura/core/AnuraCore.java +++ b/src/de/anura/core/AnuraCore.java @@ -35,9 +35,7 @@ import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.entity.Arrow; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; -import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.map.MapRenderer; import org.bukkit.map.MapView; import org.bukkit.material.MaterialData; @@ -54,13 +52,6 @@ public class AnuraCore extends JavaPlugin implements PluginMessageListener { private static AnuraCore instance; public HashMap sittingPlayer = new HashMap<>(); public HashMap sittingBlocks = new HashMap<>(); - public HashMap warpCompasses = new HashMap<>(); - public static HashMap compassInvs = new HashMap<>(); - public static HashMap minigamesInvs = new HashMap<>(); - public static HashMap lobbyInvs = new HashMap<>(); - public HashMap doors = new HashMap<>(); - public ItemStack selLang = new ItemStack(Material.SIGN); - public Inventory selectLang = Bukkit.createInventory(null, 9, ChatColor.DARK_AQUA + "Choose a language"); public LanguageSupport lang; public HashMap flowerPots = new HashMap<>(); public HashMap flowerPotsWait = new HashMap<>(); @@ -136,108 +127,64 @@ public class AnuraCore extends JavaPlugin implements PluginMessageListener { } }, 5, 5); + Inventories.registerInventory("GAMEMODES", "select_gamemode_inv", ChatColor.DARK_BLUE); + Inventories.putIntoInventory("GAMEMODES", 0, Inventories.buildItems(Material.RED_ROSE, "inv_lobby_tps", ChatColor.DARK_GREEN)); + Inventories.putIntoInventory("GAMEMODES", 2, Inventories.buildItems(Material.CARROT_STICK, "inv_lobby_minigames", ChatColor.BLUE)); + Inventories.putIntoInventory("GAMEMODES", 4, Inventories.buildItems(Material.IRON_PICKAXE, "inv_lobby_freebuild", ChatColor.GOLD)); + + Inventories.registerAction("GAMEMODES", 0, Inventories.Action.OPEN_INV, "LOBBY"); + Inventories.registerAction("GAMEMODES", 2, Inventories.Action.OPEN_INV, "MINIGAMES"); + Inventories.registerAction("GAMEMODES", 4, Inventories.Action.SERVER, "freebuild"); + + Inventories.registerInventory("MINIGAMES", "minigames_inv", ChatColor.DARK_BLUE); + Inventories.putIntoInventory("MINIGAMES", 0, Inventories.buildItems(Material.BOW, "inv_lobby_smash", ChatColor.GREEN, ChatColor.BLUE, "smash_description_1", "smash_description_2", "smash_description_3", "smash_description_4", "smash_description_5", "smash_description_6")); + Inventories.putIntoInventory("MINIGAMES", 2, Inventories.buildItems(Material.WHEAT, "inv_lobby_farmfight", ChatColor.YELLOW)); + Inventories.putIntoInventory("MINIGAMES", 4, Inventories.buildItems(Material.FIREWORK, "inv_lobby_rocketmatch", ChatColor.DARK_AQUA)); + Inventories.putIntoInventory("MINIGAMES", 8, Inventories.buildItems(Material.ENDER_PEARL, "inv_lobby_back", ChatColor.YELLOW)); + + Inventories.registerAction("MINIGAMES", 0, Inventories.Action.SERVER, "smash"); + Inventories.registerAction("MINIGAMES", 2, Inventories.Action.SERVER, "farmfight"); + Inventories.registerAction("MINIGAMES", 4, Inventories.Action.SERVER, "rocketmatch"); + Inventories.registerAction("MINIGAMES", 8, Inventories.Action.OPEN_INV, "GAMEMODES"); + + Inventories.registerInventory("LOBBY", "lobby_inv", ChatColor.DARK_BLUE); + Inventories.putIntoInventory("LOBBY", 0, Inventories.buildItems(Material.SLIME_BALL, "inv_lobby_jump", ChatColor.DARK_GREEN)); + Inventories.putIntoInventory("LOBBY", 3, Inventories.buildItems(Material.WATER_BUCKET, "inv_lobby_swim", ChatColor.DARK_BLUE)); + Inventories.putIntoInventory("LOBBY", 6, Inventories.buildItems(Material.WOOD_DOOR, "tp_to_spawn", ChatColor.GOLD)); + Inventories.putIntoInventory("LOBBY", 8, Inventories.buildItems(Material.ENDER_PEARL, "inv_lobby_back", ChatColor.YELLOW)); + + Inventories.registerAction("LOBBY", 0, Inventories.Action.COMMAND, "jumpinv"); + Inventories.registerAction("LOBBY", 3, Inventories.Action.TELEPORT, new Location(Bukkit.getWorld("lobby"), -288, 32, -1714)); + Inventories.registerAction("LOBBY", 6, Inventories.Action.COMMAND, "spawn"); + Inventories.registerAction("LOBBY", 8, Inventories.Action.OPEN_INV, "GAMEMODES"); + + Inventories.registerInventory("FEATURES", "features_inv", ChatColor.DARK_BLUE); + Inventories.putIntoInventory("FEATURES", 2, Inventories.buildItems(Material.LEATHER_BOOTS, "inv_lobby_double_jump", ChatColor.DARK_AQUA)); + + Inventories.registerInventory("LANGUAGE", "Select language", ChatColor.DARK_BLUE); int i = 0; for(String langu : lang.languages.keySet()) - { - Inventory inv = Bukkit.createInventory(null, 9, ChatColor.DARK_BLUE+lang.get("select_gamemode_inv", langu)); - AnuraCore.compassInvs.put(langu, inv); - ItemStack flower = new ItemStack(Material.RED_ROSE); - flower.setDurability((short)2); - ItemMeta flowerMeta = flower.getItemMeta(); - flowerMeta.setDisplayName(ChatColor.DARK_GREEN + "Lobby-Teleports"); - flower.setItemMeta(flowerMeta); - inv.setItem(0, flower); - ItemStack carrot = new ItemStack(Material.CARROT_STICK); - ItemMeta carrotMeta = carrot.getItemMeta(); - carrotMeta.setDisplayName(ChatColor.BLUE + "Minigames"); - carrot.setItemMeta(carrotMeta); - inv.setItem(2, carrot); - ItemStack pick = new ItemStack(Material.IRON_PICKAXE); - ItemMeta pickMeta = pick.getItemMeta(); - pickMeta.setDisplayName(ChatColor.GOLD + "Freebuild"); - pick.setItemMeta(pickMeta); - inv.setItem(4, pick); - - ItemStack ender = new ItemStack(Material.ENDER_PEARL); - ItemMeta enderMeta = ender.getItemMeta(); - enderMeta.setDisplayName(ChatColor.YELLOW + "Back"); - ender.setItemMeta(enderMeta); - - - Inventory minigames = Bukkit.createInventory(null, 9, ChatColor.DARK_BLUE+lang.get("minigames_inv",langu)); - AnuraCore.minigamesInvs.put(langu, minigames); - ItemStack bow = new ItemStack(Material.BOW); - ItemMeta bowMeta = bow.getItemMeta(); - bowMeta.setDisplayName(""+ChatColor.GREEN + ChatColor.BOLD + "Smash PVP"); - ArrayList bLores = new ArrayList<>(); - bLores.add(ChatColor.BLUE + lang.get("smash_description_1", langu)); - bLores.add(ChatColor.BLUE + lang.get("smash_description_2", langu)); - bLores.add(ChatColor.BLUE + lang.get("smash_description_3", langu)); - bLores.add(ChatColor.BLUE + lang.get("smash_description_4", langu)); - bLores.add(ChatColor.BLUE + lang.get("smash_description_5", langu)); - bLores.add(ChatColor.BLUE + lang.get("smash_description_6", langu)); - bowMeta.setLore(bLores); - bow.setItemMeta(bowMeta); - minigames.setItem(0, bow); - ItemStack wheat = new ItemStack(Material.WHEAT); - ItemMeta wheatMeta = wheat.getItemMeta(); - wheatMeta.setDisplayName(""+ChatColor.RED + "Coming Soon"); - wheat.setItemMeta(wheatMeta); - minigames.setItem(2, wheat); - ItemStack firework = new ItemStack(Material.FIREWORK); - ItemMeta fireworkMeta = firework.getItemMeta(); - fireworkMeta.setDisplayName(""+ChatColor.YELLOW + ChatColor.BOLD + "Rocket Match"); - ArrayList fLores = new ArrayList<>(); - fLores.add(ChatColor.RED + "Coming Soon"); - fireworkMeta.setLore(fLores); - firework.setItemMeta(fireworkMeta); - minigames.setItem(4, firework); - minigames.setItem(8, ender); - - ItemStack door = new ItemStack(Material.WOOD_DOOR); - ItemMeta doorMeta = door.getItemMeta(); - doorMeta.setDisplayName(""+ChatColor.BLUE + "Spawn"); - ArrayList dLores = new ArrayList<>(); - dLores.add(ChatColor.GOLD + lang.get("tp_to_spawn", langu)); - doorMeta.setLore(dLores); - door.setItemMeta(doorMeta); - doors.put(langu, door); - - Inventory lobby = Bukkit.createInventory(null, 9, ChatColor.DARK_BLUE+lang.get("lobby_inv",langu)); - AnuraCore.lobbyInvs.put(langu, lobby); - ItemStack slime = new ItemStack(Material.SLIME_BALL); - ItemMeta slimeMeta = slime.getItemMeta(); - slimeMeta.setDisplayName(ChatColor.DARK_GREEN + "Jump & Run"); - slime.setItemMeta(slimeMeta); - lobby.setItem(0, slime); - lobby.setItem(6, door); - ItemStack waterBucket = new ItemStack(Material.WATER_BUCKET); - ItemMeta waterMeta = waterBucket.getItemMeta(); - waterMeta.setDisplayName(ChatColor.DARK_BLUE + "Schwimmbad"); - waterBucket.setItemMeta(waterMeta); - lobby.setItem(3, waterBucket); - lobby.setItem(8, ender); - - - - ItemStack warpCompass = new ItemStack(Material.COMPASS); - ItemMeta compassMeta = warpCompass.getItemMeta(); - compassMeta.setDisplayName(ChatColor.DARK_AQUA + lang.get("select_game", langu)); - warpCompass.setItemMeta(compassMeta); - warpCompasses.put(langu, warpCompass); - - ItemStack language = new ItemStack(Material.BOOK_AND_QUILL); - ItemMeta lMeta = language.getItemMeta(); - String langName = this.lang.languages.get(langu); - lMeta.setDisplayName(ChatColor.DARK_GREEN + langName); - ArrayList lores = new ArrayList<>(); - lores.add(ChatColor.GOLD + API.getl("set_lang_to", langu) + langName); - lMeta.setLore(lores); - language.setItemMeta(lMeta); - this.selectLang.setItem(i, language); + { + Inventories.putIntoInventory("LANGUAGE", i, Inventories.buildItems(Material.BOOK_AND_QUILL, lang.languages.get(langu), ChatColor.DARK_GREEN, ChatColor.GOLD, "set_lang_to", lang.languages.get(langu))); + Inventories.registerAction("LANGUAGE", i, Inventories.Action.LANGUAGE, langu); i++; + } - } + Inventories.buildInvItem("COMPASS", Material.COMPASS, "select_game", ChatColor.DARK_AQUA); + Inventories.buildInvItem("SIGN", Material.SIGN, "Change language", ChatColor.DARK_GREEN); + Inventories.buildInvItem("PAPER", Material.PAPER, "features_item", ChatColor.BLUE); + Inventories.buildInvItem("DOOR", Material.WOOD_DOOR, "to_spawn", ChatColor.YELLOW); + if (getConfig().getString("server-name").equals("lobby")) { + Inventories.setItemInPlayerInv("COMPASS", 0); + Inventories.setItemInPlayerInv("SIGN", 1); + Inventories.setItemInPlayerInv("PAPER", 2); + Inventories.setItemInPlayerInv("DOOR", 8); + } + Inventories.registerItemAction("COMPASS", Inventories.Action.OPEN_INV, "GAMEMODES"); + Inventories.registerItemAction("SIGN", Inventories.Action.OPEN_INV, "LANGUAGE"); + Inventories.registerItemAction("PAPER", Inventories.Action.OPEN_INV, "FEATURES"); + Inventories.registerItemAction("DOOR", Inventories.Action.COMMAND, "spawn"); + this.pots = new FlowerPots(); ResultSet rs = sql.querySelect("SELECT id, X, Y, Z, world, type, waitTime FROM corePots"); try { @@ -267,9 +214,6 @@ public class AnuraCore extends JavaPlugin implements PluginMessageListener { } catch (SQLException ex) { Logger.getLogger(AnuraCore.class.getName()).log(Level.SEVERE, null, ex); } - ItemMeta sMeta = this.selLang.getItemMeta(); - sMeta.setDisplayName(ChatColor.DARK_GREEN + "Language"); - this.selLang.setItemMeta(sMeta); features = new Features(); features.updateFeaturesAll(); this.getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable() { @@ -1152,6 +1096,7 @@ public class AnuraCore extends JavaPlugin implements PluginMessageListener { new PlayerTeleport(this); new InvClick(this); new BlockSpread(this); + new Inventories(this); this.perms = new Permissions(this); this.tools = new Tools(); } @@ -1258,10 +1203,6 @@ public class AnuraCore extends JavaPlugin implements PluginMessageListener { } } } - public void openGameSelectWindow(Player P) - { - P.openInventory(AnuraCore.compassInvs.get(API.getPlayerLang(P))); - } public boolean isInteger(String s) { return isInteger(s,10); } diff --git a/src/de/anura/core/InvClick.java b/src/de/anura/core/InvClick.java index dbb46a7..d1057fe 100644 --- a/src/de/anura/core/InvClick.java +++ b/src/de/anura/core/InvClick.java @@ -1,18 +1,12 @@ package de.anura.core; -import java.io.ByteArrayOutputStream; -import java.io.DataOutputStream; -import java.io.IOException; import org.bukkit.Bukkit; -import org.bukkit.Location; 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.PlayerInventory; public class InvClick implements Listener { @@ -27,187 +21,7 @@ public class InvClick implements Listener public void onInvClick(InventoryClickEvent event) { Player player = (Player) event.getWhoClicked(); - ItemStack clicked = event.getCurrentItem(); - Inventory inventory = event.getInventory(); - if(inventory.getName().equals(AnuraCore.minigamesInvs.get(API.getPlayerLang(player)).getName()) && clicked != null) - { - if(clicked.getType().equals(Material.BOW)) - { - event.setCancelled(true); - player.setItemOnCursor(new ItemStack(Material.AIR)); - player.updateInventory(); - player.closeInventory(); - try { - ByteArrayOutputStream b = new ByteArrayOutputStream(); - DataOutputStream out = new DataOutputStream(b); - out.writeUTF("Connect"); - out.writeUTF("smash"); - player.sendPluginMessage(plugin, "BungeeCord", b.toByteArray()); - - } catch (IOException ex) { - } - } - else if(clicked.getType().equals(Material.WHEAT)) - { - event.setCancelled(true); - player.setItemOnCursor(new ItemStack(Material.AIR)); - player.updateInventory(); - plugin.tools.sendStatusMsg(player, "Coming Soon", false); - } - else if(clicked.getType().equals(Material.FIREWORK)) - { - event.setCancelled(true); - player.setItemOnCursor(new ItemStack(Material.AIR)); - player.updateInventory(); - plugin.tools.sendStatusMsg(player, "Coming Soon", false); - } - else if(clicked.getType().equals(Material.ENDER_PEARL)) - { - event.setCancelled(true); - player.setItemOnCursor(new ItemStack(Material.AIR)); - player.updateInventory(); - player.closeInventory(); - player.openInventory(AnuraCore.compassInvs.get(API.getPlayerLang(player))); - } - else - { - event.setCancelled(true); - final Player p = player; - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() - { - p.setItemOnCursor(new ItemStack(Material.AIR)); - p.updateInventory(); - } - }, 1); - } - - } - else if(inventory.getName().equals(AnuraCore.compassInvs.get(API.getPlayerLang(player)).getName()) && clicked != null) - { - if(clicked.getType().equals(Material.RED_ROSE)) - { - event.setCancelled(true); - player.setItemOnCursor(new ItemStack(Material.AIR)); - player.updateInventory(); - player.closeInventory(); - player.openInventory(AnuraCore.lobbyInvs.get(API.getPlayerLang(player))); - } - - else if(clicked.getType().equals(Material.CARROT_STICK)) - { - event.setCancelled(true); - player.setItemOnCursor(new ItemStack(Material.AIR)); - player.updateInventory(); - player.closeInventory(); - player.openInventory(AnuraCore.minigamesInvs.get(API.getPlayerLang(player))); - } - else if(clicked.getType().equals(Material.IRON_PICKAXE)) - { - event.setCancelled(true); - player.setItemOnCursor(new ItemStack(Material.AIR)); - player.updateInventory(); - player.closeInventory(); - API.getTools().sendStatusMsg(player, "Coming Soon", false); - } - else - { - event.setCancelled(true); - final Player p = player; - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() - { - p.setItemOnCursor(new ItemStack(Material.AIR)); - p.updateInventory(); - } - }, 1); - } - } - else if(inventory.getName().equals(AnuraCore.lobbyInvs.get(API.getPlayerLang(player)).getName()) && clicked != null) - { - if(clicked.getType().equals(Material.WATER_BUCKET)) - { - event.setCancelled(true); - player.setItemOnCursor(new ItemStack(Material.AIR)); - player.updateInventory(); - player.closeInventory(); - player.teleport(new Location(Bukkit.getWorld("lobby"), -288, 32, -1714)); - } - else if(clicked.getType().equals(Material.SLIME_BALL)) - { - event.setCancelled(true); - player.setItemOnCursor(new ItemStack(Material.AIR)); - player.updateInventory(); - player.closeInventory(); - plugin.getServer().dispatchCommand(player, "jumpinv"); - } - else if(clicked.getType().equals(Material.WOODEN_DOOR)) - { - event.setCancelled(true); - player.setItemOnCursor(new ItemStack(Material.AIR)); - player.updateInventory(); - player.closeInventory(); - player.teleport(player.getWorld().getSpawnLocation()); - } - else if(clicked.getType().equals(Material.ENDER_PEARL)) - { - event.setCancelled(true); - player.setItemOnCursor(new ItemStack(Material.AIR)); - player.updateInventory(); - player.closeInventory(); - player.openInventory(AnuraCore.compassInvs.get(API.getPlayerLang(player))); - } - else - { - event.setCancelled(true); - final Player p = player; - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() - { - p.setItemOnCursor(new ItemStack(Material.AIR)); - p.updateInventory(); - } - }, 1); - } - } - else if(inventory.getName().equals(plugin.selectLang.getName()) && clicked != null) - { - if(clicked.getType().equals(Material.BOOK_AND_QUILL)) - { - String language = API.getKeyByValue(plugin.lang.languages, clicked.getItemMeta().getDisplayName().substring(2)); - event.setCancelled(true); - player.closeInventory(); - API.cachedPlayerLanguage.put(player,language); - AnuraCore.sql.queryUpdate("UPDATE players SET lang = '"+language+"' WHERE uuid = '"+player.getUniqueId().toString()+"'"); - PlayerInventory pi = player.getInventory(); - if(pi.getItem(0) != null) - { - pi.setItem(0, plugin.warpCompasses.get(language)); - } - if(pi.getItem(8) != null) - { - pi.setItem(8, plugin.doors.get(language)); - } - API.statusMsg(player, "lang_changed", true); - } - else - { - event.setCancelled(true); - final Player p = player; - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() - { - p.setItemOnCursor(new ItemStack(Material.AIR)); - p.updateInventory(); - } - }, 1); - } - } - else if(!player.hasPermission("core.inventory.interact") && plugin.getConfig().getBoolean("is-main-lobby")) + if(!player.hasPermission("core.inventory.interact") && plugin.getConfig().getBoolean("is-main-lobby")) { event.setCancelled(true); final Player p = player; diff --git a/src/de/anura/core/Inventories.java b/src/de/anura/core/Inventories.java new file mode 100644 index 0000000..b2d8c46 --- /dev/null +++ b/src/de/anura/core/Inventories.java @@ -0,0 +1,234 @@ +package de.anura.core; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.AbstractMap; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map.Entry; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +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.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; +import org.bukkit.inventory.meta.ItemMeta; + +public class Inventories implements Listener { + + public Inventories(AnuraCore plugin) { + plugin.getServer().getPluginManager().registerEvents(this, plugin); + } + + public enum Action { + OPEN_INV, + TELEPORT, + MESSAGE, + SERVER, + COMMAND, + LANGUAGE + } + + private static final HashMap> invs = new HashMap<>(); + private static final HashMap>> invActions = new HashMap<>(); + private static final HashMap invNames = new HashMap<>(); + private static final HashMap> items = new HashMap<>(); + private static final HashMap> itemActions = new HashMap<>(); + private static final HashMap itemPositions = new HashMap<>(); + + public static void registerInventory(String type, String name, ChatColor nameColor) { + HashMap langInvs = new HashMap<>(); + for (String lang : API.getAvailLangs()) { + Inventory inv = Bukkit.createInventory(null, 9, nameColor + API.getl(name, lang)); + langInvs.put(lang, inv); + invNames.put(nameColor + API.getl(name, lang), type); + } + invs.put(type, langInvs); + invActions.put(type, new HashMap>()); + } + + public static void buildInvItem(String type, Material m, String name, ChatColor nameColor, ChatColor loreColor, String... lores) { + HashMap stacks = new HashMap<>(); + for (String lang : API.getAvailLangs()) { + ItemStack stack = new ItemStack(m); + ItemMeta meta = stack.getItemMeta(); + meta.setDisplayName(nameColor + API.getl(name, lang)); + if (loreColor != null) { + for (int i = 0; i < lores.length; i++) { + lores[i] = loreColor + API.getl(lores[i], lang); + } + meta.setLore(Arrays.asList(lores)); + } + stack.setItemMeta(meta); + stacks.put(lang, stack); + } + items.put(type, stacks); + } + + public static void buildInvItem(String type, Material m, String name, ChatColor nameColor) { + buildInvItem(type, m, name, nameColor, null, "none"); + } + + public static HashMap buildItems(Material m, String name, ChatColor nameColor, ChatColor loreColor, String... lores) { + HashMap stacks = new HashMap<>(); + for (String lang : API.getAvailLangs()) { + ItemStack stack = new ItemStack(m); + ItemMeta meta = stack.getItemMeta(); + meta.setDisplayName(nameColor + API.getl(name, lang)); + if (loreColor != null) { + for (int i = 0; i < lores.length; i++) { + lores[i] = loreColor + API.getl(lores[i], lang); + } + meta.setLore(Arrays.asList(lores)); + } + stack.setItemMeta(meta); + stacks.put(lang, stack); + } + return stacks; + } + + public static HashMap buildItems(Material m, String name, ChatColor nameColor) { + return buildItems(m, name, nameColor, null, "none"); + } + + public static void putIntoInventory(String type, int position, HashMap items) { + for (Entry item : items.entrySet()) { + invs.get(type).get(item.getKey()).setItem(position, item.getValue()); + } + } + + public static void registerAction(String type, int slot, Action action, Object data) { + if (action == Action.MESSAGE && !(data instanceof String)) return; + if (action == Action.OPEN_INV && !(data instanceof String)) return; + if (action == Action.SERVER && !(data instanceof String)) return; + if (action == Action.COMMAND && !(data instanceof String)) return; + if (action == Action.TELEPORT && !(data instanceof Location)) return; + invActions.get(type).put(slot, new AbstractMap.SimpleEntry<>(action, data)); + } + + public static Inventory getInventory(String type, Player P) { + return invs.get(type).get(API.getPlayerLang(P)); + } + + public static ItemStack getItem(String type, Player P) { + return items.get(type).get(API.getPlayerLang(P)); + } + + public static void setItemInPlayerInv(String type, Integer position) { + itemPositions.put(type, position); + } + + public static void registerItemAction(String type, Action action, Object data) { + if ((action == Action.TELEPORT && !(data instanceof Location)) || (action != Action.TELEPORT && !(data instanceof String))) return; + itemActions.put(type, new AbstractMap.SimpleEntry<>(action, data)); + } + + public static void executeAction(Player P, Action action, Object data) { + if (action == Action.SERVER) { + try { + ByteArrayOutputStream b = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(b); + out.writeUTF("Connect"); + out.writeUTF((String)data); + P.sendPluginMessage(AnuraCore.getInstance(), "BungeeCord", b.toByteArray()); + } catch (IOException ex) { + System.err.println("IOException whilst trying to connect to "+data); + } + } else if (action == Action.MESSAGE) { + API.statusMsg(P, (String)data, true); + } else if (action == Action.OPEN_INV) { + P.openInventory(getInventory((String)data, P)); + } else if (action == Action.TELEPORT) { + P.teleport((Location)data); + } else if (action == Action.COMMAND) { + Bukkit.getServer().dispatchCommand(P, (String) data); + } else if (action == Action.LANGUAGE) { + String lang = (String)data; + API.cachedPlayerLanguage.put(P,lang); + AnuraCore.sql.queryUpdate("UPDATE players SET lang = '"+lang+"' WHERE uuid = '"+P.getUniqueId().toString()+"'"); + PlayerInventory pi = P.getInventory(); + for (Entry item : itemPositions.entrySet()) { + pi.setItem(item.getValue(), getItem(item.getKey(), P)); + } + API.statusMsg(P, "lang_changed", true); + } + } + + public static void addInvItems(Player P) { + for (Entry item : itemPositions.entrySet()) { + P.getInventory().setItem(item.getValue(), getItem(item.getKey(), P)); + } + } + + public static void openInventory(String inv, Player P) { + P.openInventory(invs.get(inv).get(API.getPlayerLang(P))); + } + + @EventHandler + public void onInvClick(InventoryClickEvent event) { + final Player player = (Player) event.getWhoClicked(); + Inventory inventory = event.getClickedInventory(); + String invName = inventory.getName(); + if (invNames.containsKey(invName)) { + event.setCancelled(true); + player.setItemOnCursor(new ItemStack(Material.AIR)); + player.updateInventory(); + if (invActions.get(invNames.get(invName)).containsKey(event.getSlot())) { + player.closeInventory(); + Entry action = invActions.get(invNames.get(invName)).get(event.getSlot()); + executeAction(player, action.getKey(), action.getValue()); + } else { + Bukkit.getScheduler().scheduleSyncDelayedTask(AnuraCore.getInstance(), new Runnable() { + @Override + public void run() + { + player.setItemOnCursor(new ItemStack(Material.AIR)); + player.updateInventory(); + } + }, 1); + } + } else if (invNames.containsKey(event.getInventory().getName())) { + event.setCancelled(true); + player.setItemOnCursor(new ItemStack(Material.AIR)); + player.updateInventory(); + } + } + + @EventHandler + public void onPlayerInteract(PlayerInteractEvent event) { + if (event.hasItem()) { + if (event.getAction().equals(org.bukkit.event.block.Action.RIGHT_CLICK_AIR) || event.getAction().equals(org.bukkit.event.block.Action.RIGHT_CLICK_BLOCK)) { + final Player P = event.getPlayer(); + int slot = P.getInventory().getHeldItemSlot(); + if (itemPositions.containsValue(slot)) { + event.setCancelled(true); + String item = API.getKeyByValue(itemPositions, slot); + if (itemActions.containsKey(item)) { + executeAction(P, itemActions.get(item).getKey(), itemActions.get(item).getValue()); + } + Bukkit.getScheduler().scheduleSyncDelayedTask(AnuraCore.getInstance(), new Runnable() { + @Override + public void run() + { + P.updateInventory(); + } + }, 1); + } + } + } + } + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + event.getPlayer().getInventory().clear(); + addInvItems(event.getPlayer()); + } +} diff --git a/src/de/anura/core/PlayerInteract.java b/src/de/anura/core/PlayerInteract.java index c39eba3..ae60e7c 100644 --- a/src/de/anura/core/PlayerInteract.java +++ b/src/de/anura/core/PlayerInteract.java @@ -190,53 +190,6 @@ public class PlayerInteract implements Listener plugin.pots.playerFoundPot(event.getPlayer(), API.getKeyByValue(plugin.flowerPots, block.getLocation())); } } - - if(event.hasItem()) - { - if(event.getAction().equals(Action.RIGHT_CLICK_AIR) || event.getAction().equals(Action.RIGHT_CLICK_BLOCK)) - { - if(event.getItem().equals(plugin.warpCompasses.get(API.getPlayerLang(event.getPlayer())))) - { - plugin.openGameSelectWindow(event.getPlayer()); - event.setCancelled(true); - final Player p = event.getPlayer(); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() - { - p.updateInventory(); - } - }, 1); - } - else if(event.getItem().equals(plugin.doors.get(API.getPlayerLang(event.getPlayer())))) - { - event.setCancelled(true); - Player player = event.getPlayer(); - player.teleport(player.getLocation().getWorld().getSpawnLocation()); - final Player p = event.getPlayer(); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() - { - p.updateInventory(); - } - }, 1); - } - else if(event.getItem().equals(plugin.selLang)) - { - event.getPlayer().openInventory(plugin.selectLang); - event.setCancelled(true); - final Player p = event.getPlayer(); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() - { - p.updateInventory(); - } - }, 1); - } - } - } if(plugin.getConfig().getBoolean("no-change-blocks")) { if(!event.getPlayer().hasPermission("core.rules.blocks.interact")) diff --git a/src/de/anura/core/PlayerJoin.java b/src/de/anura/core/PlayerJoin.java index e924902..acf026d 100644 --- a/src/de/anura/core/PlayerJoin.java +++ b/src/de/anura/core/PlayerJoin.java @@ -40,18 +40,6 @@ public class PlayerJoin implements Listener catch(SQLException e) { } event.setJoinMessage(null); - if(plugin.getConfig().getBoolean("is-main-lobby")) - { - PlayerInventory pi = event.getPlayer().getInventory(); - pi.clear(); - pi.setHeldItemSlot(0); - pi.setItemInHand(plugin.warpCompasses.get(API.getPlayerLang(event.getPlayer()))); - pi.setHeldItemSlot(8); - pi.setItemInHand(plugin.doors.get(API.getPlayerLang(event.getPlayer()))); - pi.setHeldItemSlot(1); - pi.setItemInHand(plugin.selLang); - pi.setHeldItemSlot(0); - } plugin.pots.refreshCache(event.getPlayer()); plugin.pots.refreshPlayer(event.getPlayer()); plugin.getFeatures().updateFeatures(event.getPlayer());