package net.diamonddominion.esaych.global;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.diamonddominion.esaych.CustomPlugin;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import org.bukkit.inventory.meta.ItemMeta;
public class WorldBlocks {
private CustomPlugin plugin;
private Map<String, ItemStack[]> invs = new HashMap<String, ItemStack[]>();
private ArrayList<Player> selecting = new ArrayList<Player>();
public WorldBlocks(CustomPlugin plugin) {
this.plugin = plugin;
}
public void enable() {
log("Enabled");
}
public void disable() {
if (selecting.size() > 0) {
for (Player p : selecting) {
try {
restoreInvent(p);
} catch (Exception e) {
log(p + " didn't get their inv back");
}
}
}
}
@SuppressWarnings("deprecation")
public boolean onWorldCommand(CommandSender sender) {
Player p = (Player) sender;
if (selecting.contains(p)) {
restoreInvent(p);
}
PlayerInventory inv = p.getInventory();
saveInvent(p);
ItemStack i = new ItemStack(Material.IRON_DOOR);
ItemMeta im = i.getItemMeta();
im.setDisplayName(ChatColor.YELLOW + "Exit");
List<String> l = new ArrayList<String>();
l.add("Exit this Menu");
im.setLore(l);
i.setItemMeta(im);
inv.addItem(i);
i = new ItemStack(Material.FEATHER);
im = i.getItemMeta();
im.setDisplayName(ChatColor.DARK_RED + "Survival");
l = new ArrayList<String>();
l.add("Factions Survival World");
l.add("Griefing and Raiding ALLOWED");
im.setLore(l);
i.setItemMeta(im);
inv.addItem(i);
i = new ItemStack(Material.DIAMOND);
im = i.getItemMeta();
im.setDisplayName(ChatColor.AQUA + "Build");
l = new ArrayList<String>();
l.add("Plots Creative World");
l.add("Claim and build what you want");
im.setLore(l);
i.setItemMeta(im);
inv.addItem(i);
i = new ItemStack(Material.YELLOW_FLOWER);
im = i.getItemMeta();
im.setDisplayName(ChatColor.GOLD + "TownsWorld");
l = new ArrayList<String>();
l.add("Towny Peaceful Survival world");
l.add("Griefing and Raiding DENIED");
im.setLore(l);
i.setItemMeta(im);
inv.addItem(i);
i = new ItemStack(Material.DIAMOND_SWORD);
im = i.getItemMeta();
im.setDisplayName(ChatColor.AQUA + "EventWorld");
l = new ArrayList<String>();
l.add("Minigames, and fun world");
l.add("MobArena, Parkour, PvP, HorseRaces...");
im.setLore(l);
i.setItemMeta(im);
inv.addItem(i);
i = new ItemStack(Material.SAPLING);
im = i.getItemMeta();
im.setDisplayName(ChatColor.DARK_GREEN + "SkyBlock");
l = new ArrayList<String>();
l.add("Skyblock world");
l.add("Floating island survival");
im.setLore(l);
i.setItemMeta(im);
inv.addItem(i);
i = new ItemStack(Material.BOW);
im = i.getItemMeta();
im.setDisplayName(ChatColor.DARK_BLUE + "SurvivalGames");
l = new ArrayList<String>();
l.add("Survival Games world");
l.add("Survive and fight to the death in the games");
im.setLore(l);
i.setItemMeta(im);
inv.addItem(i);
i = new ItemStack(Material.SULPHUR);
im = i.getItemMeta();
im.setDisplayName(ChatColor.DARK_RED + "Destruction");
l = new ArrayList<String>();
l.add("TNT and Destruction Creative world");
l.add("Destroy everyone elses stuff, for FUN!");
im.setLore(l);
i.setItemMeta(im);
inv.addItem(i);
i = new ItemStack(Material.REDSTONE);
im = i.getItemMeta();
im.setDisplayName(ChatColor.RED + "Redstone");
l = new ArrayList<String>();
l.add("Redstone Creative Development");
l.add("Meant for creative machines alone");
im.setLore(l);
i.setItemMeta(im);
inv.addItem(i);
p.updateInventory();
p.sendMessage(ChatColor.GOLD + "[" + ChatColor.GREEN + "WorldBlocks" + ChatColor.GOLD + "] " + ChatColor.YELLOW + "Select a world and punch to warp there");
return true;
}
@SuppressWarnings("deprecation")
private void saveInvent(Player p) {
Inventory inv = p.getInventory();
ItemStack[] itemarray = new ItemStack[inv.getSize()];
int iter = 0;
for(ItemStack item : inv.getContents()){
itemarray[iter] = item;
iter++;
}
invs.put(p.getName(), itemarray);
selecting.add(p);
p.getInventory().clear();
p.updateInventory();
}
@SuppressWarnings("deprecation")
private void restoreInvent(Player p) {
if(invs.containsKey(p.getName())){
p.getInventory().clear();
ItemStack[] oldinv = invs.get(p.getName());
for(ItemStack i : oldinv){
if(i==null){
continue;
}
p.getInventory().addItem(i);
}
p.updateInventory();
invs.remove(p);
selecting.remove(p);
}
}
public void onPlayerInteract(PlayerInteractEvent event) {
Player p = event.getPlayer();
if (selecting.contains(p)) {
Material i = p.getItemInHand().getType();
restoreInvent(p);
if (i.equals(Material.FEATHER)) {
Bukkit.dispatchCommand(p, "spawn");
} else if (i.equals(Material.DIAMOND)) {
Bukkit.dispatchCommand(p, "warp Build");
} else if (i.equals(Material.YELLOW_FLOWER)) {
Bukkit.dispatchCommand(p, "warp TownWorld");
} else if (i.equals(Material.DIAMOND_SWORD)) {
Bukkit.dispatchCommand(p, "warp EventWorld");
} else if (i.equals(Material.SAPLING)) {
Bukkit.dispatchCommand(p, "warp SkyBlock");
} else if (i.equals(Material.BOW)) {
Bukkit.dispatchCommand(p, "warp SurvivalGames");
} else if (i.equals(Material.SULPHUR)) {
Bukkit.dispatchCommand(p, "warp Destruction");
} else if (i.equals(Material.REDSTONE)) {
Bukkit.dispatchCommand(p, "warp Redstone");
}
event.setCancelled(true);
}
}
public void onPlayerMove(PlayerMoveEvent event) {
if (selecting.contains(event.getPlayer())) {
Location from = event.getFrom();
Location to = event.getTo();
if (from.getX() != to.getX() && from.getZ() != to.getZ()) {
event.getPlayer().sendMessage(ChatColor.GOLD + "[" + ChatColor.GREEN + "WorldBlocks" + ChatColor.GOLD + "] " + ChatColor.YELLOW + "Don't move when you select worlds");
restoreInvent(event.getPlayer());
}
}
}
public void onPlayerTeleport(PlayerTeleportEvent event) {
if (selecting.contains(event.getPlayer())) {
restoreInvent(event.getPlayer());
}
}
public void onPlayerTakeDamage(EntityDamageEvent event) {
if (event.getEntity() instanceof Player) {
if (selecting.contains((Player) event.getEntity())) {
restoreInvent((Player) event.getEntity());
}
}
}
public void onPlayerQuit(PlayerQuitEvent event) {
if (selecting.contains(event.getPlayer())) {
restoreInvent(event.getPlayer());
}
}
public void onPlayerDropItem(PlayerDropItemEvent event) {
if (selecting.contains(event.getPlayer())) {
restoreInvent(event.getPlayer());
event.getItemDrop().remove();
}
}
public void log(String info) {
plugin.getLogger().info("<WorldBlocks> " + info);
}
}