Rewrite inventory system
This commit is contained in:
@@ -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<Player, Arrow> sittingPlayer = 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 HashMap<Integer, Location> flowerPots = new HashMap<>();
|
||||
public HashMap<Integer, Integer> 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<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);
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
234
src/de/anura/core/Inventories.java
Normal file
234
src/de/anura/core/Inventories.java
Normal 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());
|
||||
}
|
||||
}
|
||||
@@ -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"))
|
||||
|
||||
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user