Rewrite inventory system

This commit is contained in:
kaenganxt
2014-10-25 15:51:38 +02:00
parent 10e5f9f3fa
commit fa79378935
5 changed files with 290 additions and 360 deletions

View File

@@ -35,9 +35,7 @@ import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.entity.Arrow; import org.bukkit.entity.Arrow;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.map.MapRenderer; import org.bukkit.map.MapRenderer;
import org.bukkit.map.MapView; import org.bukkit.map.MapView;
import org.bukkit.material.MaterialData; import org.bukkit.material.MaterialData;
@@ -54,13 +52,6 @@ public class AnuraCore extends JavaPlugin implements PluginMessageListener {
private static AnuraCore instance; private static AnuraCore instance;
public HashMap<Player, Arrow> sittingPlayer = new HashMap<>(); public HashMap<Player, Arrow> sittingPlayer = new HashMap<>();
public HashMap<Player, Block> sittingBlocks = new HashMap<>(); public HashMap<Player, Block> sittingBlocks = new HashMap<>();
public HashMap<String, ItemStack> warpCompasses = new HashMap<>();
public static HashMap<String, Inventory> compassInvs = new HashMap<>();
public static HashMap<String, Inventory> minigamesInvs = new HashMap<>();
public static HashMap<String, Inventory> lobbyInvs = new HashMap<>();
public HashMap<String, ItemStack> 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 LanguageSupport lang;
public HashMap<Integer, Location> flowerPots = new HashMap<>(); public HashMap<Integer, Location> flowerPots = new HashMap<>();
public HashMap<Integer, Integer> flowerPotsWait = new HashMap<>(); public HashMap<Integer, Integer> flowerPotsWait = new HashMap<>();
@@ -136,108 +127,64 @@ public class AnuraCore extends JavaPlugin implements PluginMessageListener {
} }
}, 5, 5); }, 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; int i = 0;
for(String langu : lang.languages.keySet()) for(String langu : lang.languages.keySet())
{ {
Inventory inv = Bukkit.createInventory(null, 9, ChatColor.DARK_BLUE+lang.get("select_gamemode_inv", langu)); 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)));
AnuraCore.compassInvs.put(langu, inv); Inventories.registerAction("LANGUAGE", i, Inventories.Action.LANGUAGE, langu);
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<String> 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<String> 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<String> 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<String> 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);
i++; 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(); this.pots = new FlowerPots();
ResultSet rs = sql.querySelect("SELECT id, X, Y, Z, world, type, waitTime FROM corePots"); ResultSet rs = sql.querySelect("SELECT id, X, Y, Z, world, type, waitTime FROM corePots");
try { try {
@@ -267,9 +214,6 @@ public class AnuraCore extends JavaPlugin implements PluginMessageListener {
} catch (SQLException ex) { } catch (SQLException ex) {
Logger.getLogger(AnuraCore.class.getName()).log(Level.SEVERE, null, 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 = new Features();
features.updateFeaturesAll(); features.updateFeaturesAll();
this.getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable() { this.getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
@@ -1152,6 +1096,7 @@ public class AnuraCore extends JavaPlugin implements PluginMessageListener {
new PlayerTeleport(this); new PlayerTeleport(this);
new InvClick(this); new InvClick(this);
new BlockSpread(this); new BlockSpread(this);
new Inventories(this);
this.perms = new Permissions(this); this.perms = new Permissions(this);
this.tools = new Tools(); 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) { public boolean isInteger(String s) {
return isInteger(s,10); return isInteger(s,10);
} }

View File

@@ -1,18 +1,12 @@
package de.anura.core; package de.anura.core;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
public class InvClick implements Listener public class InvClick implements Listener
{ {
@@ -27,187 +21,7 @@ public class InvClick implements Listener
public void onInvClick(InventoryClickEvent event) public void onInvClick(InventoryClickEvent event)
{ {
Player player = (Player) event.getWhoClicked(); Player player = (Player) event.getWhoClicked();
ItemStack clicked = event.getCurrentItem(); if(!player.hasPermission("core.inventory.interact") && plugin.getConfig().getBoolean("is-main-lobby"))
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"))
{ {
event.setCancelled(true); event.setCancelled(true);
final Player p = player; final Player p = player;

View File

@@ -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<String, HashMap<String, Inventory>> invs = new HashMap<>();
private static final HashMap<String, HashMap<Integer, Entry<Action, Object>>> invActions = new HashMap<>();
private static final HashMap<String, String> invNames = new HashMap<>();
private static final HashMap<String, HashMap<String, ItemStack>> items = new HashMap<>();
private static final HashMap<String, Entry<Action, Object>> itemActions = new HashMap<>();
private static final HashMap<String, Integer> itemPositions = new HashMap<>();
public static void registerInventory(String type, String name, ChatColor nameColor) {
HashMap<String, Inventory> 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<Integer, Entry<Action, Object>>());
}
public static void buildInvItem(String type, Material m, String name, ChatColor nameColor, ChatColor loreColor, String... lores) {
HashMap<String, ItemStack> 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<String, ItemStack> buildItems(Material m, String name, ChatColor nameColor, ChatColor loreColor, String... lores) {
HashMap<String, ItemStack> 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<String, ItemStack> buildItems(Material m, String name, ChatColor nameColor) {
return buildItems(m, name, nameColor, null, "none");
}
public static void putIntoInventory(String type, int position, HashMap<String, ItemStack> items) {
for (Entry<String, ItemStack> 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<String, Integer> 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<String, Integer> 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, Object> 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());
}
}

View File

@@ -190,53 +190,6 @@ public class PlayerInteract implements Listener
plugin.pots.playerFoundPot(event.getPlayer(), API.getKeyByValue(plugin.flowerPots, block.getLocation())); 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(plugin.getConfig().getBoolean("no-change-blocks"))
{ {
if(!event.getPlayer().hasPermission("core.rules.blocks.interact")) if(!event.getPlayer().hasPermission("core.rules.blocks.interact"))

View File

@@ -40,18 +40,6 @@ public class PlayerJoin implements Listener
catch(SQLException e) { catch(SQLException e) {
} }
event.setJoinMessage(null); 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.refreshCache(event.getPlayer());
plugin.pots.refreshPlayer(event.getPlayer()); plugin.pots.refreshPlayer(event.getPlayer());
plugin.getFeatures().updateFeatures(event.getPlayer()); plugin.getFeatures().updateFeatures(event.getPlayer());