Implemented blocklist clearing (no more repair-delay!), and added support for right-clicking signs in the lobby!
This commit is contained in:
Binary file not shown.
@@ -1,6 +1,6 @@
|
||||
name: MobArena
|
||||
main: com.garbagemule.MobArena.MobArena
|
||||
version: 0.94.3.17
|
||||
version: 0.94.3.18
|
||||
softdepend: [Spout,Permissions,MultiVerse,XcraftGate,Towny,Heroes,MagicSpells]
|
||||
commands:
|
||||
ma:
|
||||
|
||||
@@ -107,7 +107,7 @@ public class Arena
|
||||
protected boolean allowMonsters, allowAnimals;
|
||||
|
||||
// Other settings
|
||||
protected int repairDelay, minPlayers, maxPlayers, joinDistance;
|
||||
protected int minPlayers, maxPlayers, joinDistance;
|
||||
protected List<String> classes = new LinkedList<String>();
|
||||
protected Map<Player,Location> locations = new HashMap<Player,Location>();
|
||||
protected Map<Player,Integer> healthMap = new HashMap<Player,Integer>();
|
||||
@@ -900,7 +900,6 @@ public class Arena
|
||||
joinDistance = config.getInt(arenaPath + "max-join-distance", 0);
|
||||
minPlayers = config.getInt(arenaPath + "min-players", 0);
|
||||
maxPlayers = config.getInt(arenaPath + "max-players", 0);
|
||||
repairDelay = config.getInt(arenaPath + "repair-delay", 5);
|
||||
waveDelay = config.getInt(arenaPath + "first-wave-delay", 5) * 20;
|
||||
waveInterval = config.getInt(arenaPath + "wave-interval", 20) * 20;
|
||||
specialModulo = config.getInt(arenaPath + "special-modulo", 4);
|
||||
@@ -947,7 +946,7 @@ public class Arena
|
||||
public void serializeConfig()
|
||||
{
|
||||
String coords = "arenas." + configName() + ".coords.";
|
||||
Configuration config = plugin.getConfig();
|
||||
Configuration config = plugin.getMAConfig();
|
||||
|
||||
config.setProperty("arenas." + configName() + ".settings.enabled", enabled);
|
||||
config.setProperty("arenas." + configName() + ".settings.protect", protect);
|
||||
@@ -968,7 +967,7 @@ public class Arena
|
||||
|
||||
public void deserializeConfig()
|
||||
{
|
||||
Configuration config = plugin.getConfig();
|
||||
Configuration config = plugin.getMAConfig();
|
||||
config.load();
|
||||
load(config);
|
||||
}
|
||||
@@ -1112,6 +1111,16 @@ public class Arena
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
public boolean inArena(Player p)
|
||||
{
|
||||
return arenaPlayers.contains(p);
|
||||
}
|
||||
|
||||
public boolean inLobby(Player p)
|
||||
{
|
||||
return lobbyPlayers.contains(p);
|
||||
}
|
||||
|
||||
public boolean isRunning()
|
||||
{
|
||||
return running;
|
||||
|
||||
@@ -22,7 +22,6 @@ public class ArenaMaster //implements Master
|
||||
private MobArena plugin;
|
||||
private Configuration config;
|
||||
protected Arena selectedArena;
|
||||
//protected Lobby masterLobby;
|
||||
|
||||
// Settings
|
||||
protected boolean enabled, updateNotify;
|
||||
@@ -51,7 +50,7 @@ public class ArenaMaster //implements Master
|
||||
public ArenaMaster(MobArena instance)
|
||||
{
|
||||
plugin = instance;
|
||||
config = plugin.getConfig();
|
||||
config = plugin.getMAConfig();
|
||||
arenas = new LinkedList<Arena>();
|
||||
arenaMap = new HashMap<Player,Arena>();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,149 @@
|
||||
package com.garbagemule.MobArena;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
|
||||
public class MAClass
|
||||
{
|
||||
private String name;
|
||||
private List<ItemStack> items, armor;
|
||||
private Map<String,Boolean> perms;
|
||||
|
||||
public MAClass(String name)
|
||||
{
|
||||
this.name = name;
|
||||
this.items = new LinkedList<ItemStack>();
|
||||
this.armor = new LinkedList<ItemStack>();
|
||||
this.perms = new HashMap<String,Boolean>();
|
||||
}
|
||||
|
||||
public MAClass(String name, List<ItemStack> items, List<ItemStack> armor)
|
||||
{
|
||||
this.name = name;
|
||||
this.items = items;
|
||||
this.armor = armor;
|
||||
this.perms = new HashMap<String,Boolean>();
|
||||
sortArmor();
|
||||
immunizeWeapons();
|
||||
}
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
public List<ItemStack> getItems()
|
||||
{
|
||||
return items;
|
||||
}
|
||||
|
||||
public void setItems(List<ItemStack> items)
|
||||
{
|
||||
this.items = items;
|
||||
immunizeWeapons();
|
||||
}
|
||||
|
||||
public void setArmor(List<ItemStack> armor)
|
||||
{
|
||||
this.armor = armor;
|
||||
sortArmor();
|
||||
}
|
||||
|
||||
public void setPerms(Map<String,Boolean> perms)
|
||||
{
|
||||
this.perms = perms;
|
||||
}
|
||||
|
||||
public void giveItems(Player p)
|
||||
{
|
||||
PlayerInventory inv = p.getInventory();
|
||||
|
||||
for (ItemStack stack : items)
|
||||
{
|
||||
|
||||
inv.addItem(stack.clone());
|
||||
}
|
||||
}
|
||||
|
||||
public void giveArmor(Player p)
|
||||
{
|
||||
PlayerInventory inv = p.getInventory();
|
||||
|
||||
inv.setHelmet (armor.get(0));
|
||||
inv.setChestplate(armor.get(1));
|
||||
inv.setLeggings (armor.get(2));
|
||||
inv.setBoots (armor.get(3));
|
||||
}
|
||||
|
||||
private void sortArmor()
|
||||
{
|
||||
ItemStack s0 = null, s1 = null, s2 = null, s3 = null;
|
||||
for (ItemStack stack : armor)
|
||||
{
|
||||
if (isHelmet(stack))
|
||||
s0 = stack;
|
||||
else if (isChestplate(stack))
|
||||
s1 = stack;
|
||||
else if (isLeggings(stack))
|
||||
s2 = stack;
|
||||
else if (isBoots(stack))
|
||||
s3 = stack;
|
||||
}
|
||||
|
||||
armor.set(0, s0);
|
||||
armor.set(1, s1);
|
||||
armor.set(2, s2);
|
||||
armor.set(3, s3);
|
||||
}
|
||||
|
||||
private void immunizeWeapons()
|
||||
{
|
||||
for (ItemStack stack : items)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isHelmet(ItemStack stack)
|
||||
{
|
||||
return (!isChestplate(stack) && !isLeggings(stack) && !isBoots(stack));
|
||||
}
|
||||
|
||||
private boolean isChestplate(ItemStack stack)
|
||||
{
|
||||
return matches(stack, 299, 303, 307, 311, 315);
|
||||
}
|
||||
|
||||
private boolean isLeggings(ItemStack stack)
|
||||
{
|
||||
return matches(stack, 300, 304, 308, 312, 316);
|
||||
}
|
||||
|
||||
private boolean isBoots(ItemStack stack)
|
||||
{
|
||||
return matches(stack, 301, 305, 309, 313, 317);
|
||||
}
|
||||
|
||||
private boolean isWeapon(ItemStack stack)
|
||||
{
|
||||
return matches(stack, 256, 257, 258, 267, 268, 269, 270, 271, 272, 273,
|
||||
274, 275, 276, 277, 278, 279, 283, 284, 285, 286,
|
||||
290, 291, 292, 293, 294, 346);
|
||||
}
|
||||
|
||||
private boolean matches(ItemStack stack, int... ids)
|
||||
{
|
||||
int id = stack.getTypeId();
|
||||
|
||||
for (int i : ids)
|
||||
if (id == i)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -79,7 +79,7 @@ public class MACommands implements CommandExecutor
|
||||
this.am = am;
|
||||
server = Bukkit.getServer();
|
||||
meanAdmins = (server.getPluginManager().getPlugin("Mean Admins") != null);
|
||||
ALLOWED_COMMANDS = MAUtils.getAllowedCommands(plugin.getConfig());
|
||||
ALLOWED_COMMANDS = MAUtils.getAllowedCommands(plugin.getMAConfig());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -809,7 +809,7 @@ public class MACommands implements CommandExecutor
|
||||
return true;
|
||||
}
|
||||
|
||||
MAUtils.setArenaCoord(plugin.getConfig(), am.selectedArena, arg1, p.getLocation());
|
||||
MAUtils.setArenaCoord(plugin.getMAConfig(), am.selectedArena, arg1, p.getLocation());
|
||||
MAUtils.tellPlayer(sender, "Set region point " + arg1 + " for arena '" + am.selectedArena.configName() + "'");
|
||||
return true;
|
||||
}
|
||||
@@ -857,11 +857,11 @@ public class MACommands implements CommandExecutor
|
||||
}
|
||||
|
||||
// In case of a "negative" region, fix it!
|
||||
MAUtils.fixRegion(plugin.getConfig(), am.selectedArena.world, am.selectedArena);
|
||||
MAUtils.fixRegion(plugin.getMAConfig(), am.selectedArena.world, am.selectedArena);
|
||||
|
||||
MAUtils.tellPlayer(sender, "Region for '" + am.selectedArena.configName() + "' expanded " + arg2 + " by " + arg1 + " blocks.");
|
||||
am.selectedArena.serializeConfig();
|
||||
am.selectedArena.load(plugin.getConfig());
|
||||
am.selectedArena.load(plugin.getMAConfig());
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -938,7 +938,7 @@ public class MACommands implements CommandExecutor
|
||||
return true;
|
||||
}
|
||||
|
||||
MAUtils.setArenaCoord(plugin.getConfig(), am.selectedArena, arg1, p.getLocation());
|
||||
MAUtils.setArenaCoord(plugin.getMAConfig(), am.selectedArena, arg1, p.getLocation());
|
||||
MAUtils.tellPlayer(sender, "Set lobby point " + arg1 + " for arena '" + am.selectedArena.configName() + "'");
|
||||
return true;
|
||||
}
|
||||
@@ -984,7 +984,7 @@ public class MACommands implements CommandExecutor
|
||||
|
||||
MAUtils.tellPlayer(sender, "Lobby region for '" + am.selectedArena.configName() + "' expanded " + arg2 + " by " + arg1 + " blocks.");
|
||||
am.selectedArena.serializeConfig();
|
||||
am.selectedArena.load(plugin.getConfig());
|
||||
am.selectedArena.load(plugin.getMAConfig());
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1004,7 +1004,7 @@ public class MACommands implements CommandExecutor
|
||||
return true;
|
||||
}
|
||||
|
||||
MAUtils.setArenaCoord(plugin.getConfig(), am.selectedArena, arg1, p.getLocation());
|
||||
MAUtils.setArenaCoord(plugin.getMAConfig(), am.selectedArena, arg1, p.getLocation());
|
||||
MAUtils.tellPlayer(sender, "Warp point " + arg1 + " was set for arena '" + am.selectedArena.configName() + "'");
|
||||
MAUtils.tellPlayer(sender, "Type /ma checkdata to see if you're missing anything...");
|
||||
return true;
|
||||
@@ -1022,7 +1022,7 @@ public class MACommands implements CommandExecutor
|
||||
}
|
||||
|
||||
StringBuffer buffy = new StringBuffer();
|
||||
List<String> spawnpoints = plugin.getConfig().getKeys("arenas." + am.selectedArena.configName() + ".coords.spawnpoints");
|
||||
List<String> spawnpoints = plugin.getMAConfig().getKeys("arenas." + am.selectedArena.configName() + ".coords.spawnpoints");
|
||||
|
||||
if (spawnpoints != null)
|
||||
{
|
||||
@@ -1057,7 +1057,7 @@ public class MACommands implements CommandExecutor
|
||||
return true;
|
||||
}
|
||||
|
||||
MAUtils.setArenaCoord(plugin.getConfig(), am.selectedArena, "spawnpoints." + arg1, p.getLocation());
|
||||
MAUtils.setArenaCoord(plugin.getMAConfig(), am.selectedArena, "spawnpoints." + arg1, p.getLocation());
|
||||
MAUtils.tellPlayer(sender, "Spawnpoint " + arg1 + " added for arena \"" + am.selectedArena.configName() + "\"");
|
||||
return true;
|
||||
}
|
||||
@@ -1078,7 +1078,7 @@ public class MACommands implements CommandExecutor
|
||||
return true;
|
||||
}
|
||||
|
||||
if (MAUtils.delArenaCoord(plugin.getConfig(), am.selectedArena, "spawnpoints." + arg1))
|
||||
if (MAUtils.delArenaCoord(plugin.getMAConfig(), am.selectedArena, "spawnpoints." + arg1))
|
||||
MAUtils.tellPlayer(sender, "Spawnpoint " + arg1 + " deleted for arena '" + am.selectedArena.configName() + "'");
|
||||
else
|
||||
MAUtils.tellPlayer(sender, "Could not find the spawnpoint " + arg1 + "for the arena '" + am.selectedArena.configName() + "'");
|
||||
@@ -1094,7 +1094,7 @@ public class MACommands implements CommandExecutor
|
||||
}
|
||||
|
||||
StringBuffer buffy = new StringBuffer();
|
||||
List<String> containers = plugin.getConfig().getKeys("arenas." + am.selectedArena.configName() + ".coords.containers");
|
||||
List<String> containers = plugin.getMAConfig().getKeys("arenas." + am.selectedArena.configName() + ".coords.containers");
|
||||
|
||||
if (containers != null)
|
||||
{
|
||||
@@ -1131,7 +1131,7 @@ public class MACommands implements CommandExecutor
|
||||
return true;
|
||||
}
|
||||
|
||||
MAUtils.setArenaCoord(plugin.getConfig(), am.selectedArena, "containers." + arg1, p.getTargetBlock(null, 50).getLocation());
|
||||
MAUtils.setArenaCoord(plugin.getMAConfig(), am.selectedArena, "containers." + arg1, p.getTargetBlock(null, 50).getLocation());
|
||||
MAUtils.tellPlayer(sender, "Container '" + arg1 + "' added for arena \"" + am.selectedArena.configName() + "\"");
|
||||
return true;
|
||||
}
|
||||
@@ -1149,7 +1149,7 @@ public class MACommands implements CommandExecutor
|
||||
return true;
|
||||
}
|
||||
|
||||
if (MAUtils.delArenaCoord(plugin.getConfig(), am.selectedArena, "containers." + arg1))
|
||||
if (MAUtils.delArenaCoord(plugin.getMAConfig(), am.selectedArena, "containers." + arg1))
|
||||
MAUtils.tellPlayer(sender, "Container '" + arg1 + "' deleted for arena '" + am.selectedArena.configName() + "'");
|
||||
else
|
||||
MAUtils.tellPlayer(sender, "Could not find the container '" + arg1 + "' for arena '" + am.selectedArena.configName() + "'");
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
package com.garbagemule.MobArena;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
@@ -117,11 +120,12 @@ public class MAListener implements ArenaListener
|
||||
|
||||
public void onBlockPlace(BlockPlaceEvent event)
|
||||
{
|
||||
if (!arena.inRegion(event.getBlock().getLocation()) || arena.edit)
|
||||
Block b = event.getBlock();
|
||||
|
||||
if (!arena.inRegion(b.getLocation()) || arena.edit)
|
||||
return;
|
||||
|
||||
Block b = event.getBlock();
|
||||
if (arena.running && arena.arenaPlayers.contains(event.getPlayer()))
|
||||
if (arena.running && arena.inArena(event.getPlayer()))
|
||||
{
|
||||
arena.blocks.add(b);
|
||||
Material mat = b.getType();
|
||||
@@ -161,7 +165,7 @@ public class MAListener implements ArenaListener
|
||||
public void onSignChange(SignChangeEvent event)
|
||||
{
|
||||
arena.leaderboard = new Leaderboard(plugin, arena, event.getBlock().getLocation());
|
||||
MAUtils.setArenaCoord(plugin.getConfig(), arena, "leaderboard", event.getBlock().getLocation());
|
||||
MAUtils.setArenaCoord(plugin.getMAConfig(), arena, "leaderboard", event.getBlock().getLocation());
|
||||
MAUtils.tellPlayer(event.getPlayer(), "Leaderboard made. Now set up the stat signs!");
|
||||
}
|
||||
|
||||
@@ -183,11 +187,10 @@ public class MAListener implements ArenaListener
|
||||
if (!arena.monsters.contains(event.getEntity()) && !arena.inRegionRadius(event.getLocation(), 10))
|
||||
return;
|
||||
|
||||
event.setYield(0);
|
||||
arena.monsters.remove(event.getEntity());
|
||||
|
||||
// Cancel if the arena isn't running or if the repair delay is 0
|
||||
if (!arena.running || arena.repairDelay == 0)
|
||||
// Cancel if the arena isn't running
|
||||
if (!arena.running)
|
||||
{
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
@@ -196,6 +199,17 @@ public class MAListener implements ArenaListener
|
||||
// Uncancel, just in case.
|
||||
event.setCancelled(false);
|
||||
|
||||
// If the arena isn't destructible, just clear the blocklist.
|
||||
if (!arena.softRestore && arena.protect)
|
||||
{
|
||||
List<Block> blocks = new LinkedList<Block>(arena.blocks);
|
||||
event.blockList().retainAll(blocks);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!arena.softRestoreDrops)
|
||||
event.setYield(0);
|
||||
|
||||
// Handle all the blocks in the block list.
|
||||
for (Block b : event.blockList())
|
||||
{
|
||||
@@ -232,20 +246,6 @@ public class MAListener implements ArenaListener
|
||||
else
|
||||
arena.queueRepairable(r);
|
||||
}
|
||||
|
||||
// If the arena isn't protected, or soft-restore is on, return.
|
||||
if (!arena.protect || arena.softRestore)
|
||||
return;
|
||||
|
||||
// Otherwise, schedule repairs!
|
||||
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin,
|
||||
new Runnable()
|
||||
{
|
||||
public void run()
|
||||
{
|
||||
arena.repairBlocks();
|
||||
}
|
||||
}, arena.repairDelay);
|
||||
}
|
||||
|
||||
|
||||
@@ -266,7 +266,7 @@ public class MAListener implements ArenaListener
|
||||
|
||||
private void onPlayerDeath(EntityDeathEvent event, Player player)
|
||||
{
|
||||
if (arena.arenaPlayers.contains(player) || arena.lobbyPlayers.contains(player))
|
||||
if (arena.inArena(player) || arena.lobbyPlayers.contains(player))
|
||||
{
|
||||
event.getDrops().clear();
|
||||
arena.playerDeath(player);
|
||||
@@ -328,7 +328,7 @@ public class MAListener implements ArenaListener
|
||||
event.setCancelled(true);
|
||||
|
||||
// If not in the lobby or the arena, return
|
||||
else if (!arena.arenaPlayers.contains(player))
|
||||
else if (!arena.inArena(player))
|
||||
return;
|
||||
|
||||
// Cancel block explosion damage if detonate-damage: false
|
||||
@@ -356,14 +356,15 @@ public class MAListener implements ArenaListener
|
||||
{
|
||||
if (damager instanceof Player)
|
||||
{
|
||||
if (!arena.arenaPlayers.contains(damager))
|
||||
Player p = (Player) damager;
|
||||
if (!arena.inArena(p))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
arena.arenaPlayerMap.get((Player) damager).getStats().dmgDone += event.getDamage();
|
||||
arena.arenaPlayerMap.get((Player) damager).getStats().hits++;
|
||||
arena.arenaPlayerMap.get(p).getStats().dmgDone += event.getDamage();
|
||||
arena.arenaPlayerMap.get(p).getStats().hits++;
|
||||
}
|
||||
else if (damager instanceof Wolf && arena.pets.contains(damager))
|
||||
{
|
||||
@@ -442,7 +443,7 @@ public class MAListener implements ArenaListener
|
||||
event.setCancelled(true);
|
||||
|
||||
else if (event.getReason() == TargetReason.CLOSEST_PLAYER)
|
||||
if (!arena.arenaPlayers.contains(event.getTarget()))
|
||||
if (!arena.inArena((Player) event.getTarget()))
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
@@ -463,7 +464,7 @@ public class MAListener implements ArenaListener
|
||||
{
|
||||
if (!arena.running) return;
|
||||
|
||||
if (!(event.getEntity() instanceof Player) || !arena.arenaPlayers.contains((Player)event.getEntity()))
|
||||
if (!(event.getEntity() instanceof Player) || !arena.inArena((Player)event.getEntity()))
|
||||
return;
|
||||
|
||||
if (event.getRegainReason() == RegainReason.REGEN)
|
||||
@@ -472,7 +473,7 @@ public class MAListener implements ArenaListener
|
||||
|
||||
public void onPlayerAnimation(PlayerAnimationEvent event)
|
||||
{
|
||||
if (!arena.running || !arena.arenaPlayers.contains(event.getPlayer()))
|
||||
if (!arena.running || !arena.inArena(event.getPlayer()))
|
||||
return;
|
||||
|
||||
arena.arenaPlayerMap.get(event.getPlayer()).getStats().swings++;
|
||||
@@ -483,14 +484,14 @@ public class MAListener implements ArenaListener
|
||||
Player p = event.getPlayer();
|
||||
|
||||
// Player is in the lobby
|
||||
if (arena.lobbyPlayers.contains(p))
|
||||
if (arena.inLobby(p))
|
||||
{
|
||||
MAUtils.tellPlayer(p, Msg.LOBBY_DROP_ITEM);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
// Player is in the arena
|
||||
else if (arena.arenaPlayers.contains(p))
|
||||
else if (arena.inArena(p))
|
||||
{
|
||||
if (!arena.shareInArena)
|
||||
{
|
||||
@@ -516,7 +517,7 @@ public class MAListener implements ArenaListener
|
||||
|
||||
public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event)
|
||||
{
|
||||
if (!arena.readyPlayers.contains(event.getPlayer()) && !arena.arenaPlayers.contains(event.getPlayer()))
|
||||
if (!arena.readyPlayers.contains(event.getPlayer()) && !arena.inArena(event.getPlayer()))
|
||||
return;
|
||||
|
||||
if (!arena.running)
|
||||
@@ -532,77 +533,83 @@ public class MAListener implements ArenaListener
|
||||
|
||||
public void onPlayerInteract(PlayerInteractEvent event)
|
||||
{
|
||||
if (!arena.arenaPlayers.contains(event.getPlayer()) && !arena.lobbyPlayers.contains(event.getPlayer()))
|
||||
return;
|
||||
|
||||
if (arena.running)
|
||||
{
|
||||
if (event.hasBlock() && event.getClickedBlock().getType() == Material.SAPLING)
|
||||
arena.addTrunkAndLeaves(event.getClickedBlock());
|
||||
return;
|
||||
}
|
||||
|
||||
Action a = event.getAction();
|
||||
Player p = event.getPlayer();
|
||||
if (arena.inArena(p) || !arena.inLobby(p))
|
||||
return;
|
||||
|
||||
// Player is in the lobby, so disallow using items.
|
||||
Action a = event.getAction();
|
||||
if (a == Action.RIGHT_CLICK_AIR || a == Action.RIGHT_CLICK_BLOCK)
|
||||
{
|
||||
{
|
||||
event.setUseItemInHand(Result.DENY);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
// If there's no block involved, just return.
|
||||
if (!event.hasBlock())
|
||||
return;
|
||||
|
||||
// Iron block
|
||||
if (event.hasBlock() && event.getClickedBlock().getTypeId() == 42)
|
||||
if (event.getClickedBlock().getTypeId() == 42)
|
||||
handleReadyBlock(p);
|
||||
|
||||
// Sign
|
||||
else if (event.getClickedBlock().getState() instanceof Sign)
|
||||
{
|
||||
if (arena.classMap.containsKey(p))
|
||||
{
|
||||
MAUtils.tellPlayer(p, Msg.LOBBY_PLAYER_READY);
|
||||
arena.playerReady(p);
|
||||
}
|
||||
else
|
||||
{
|
||||
MAUtils.tellPlayer(p, Msg.LOBBY_PICK_CLASS);
|
||||
}
|
||||
Sign sign = (Sign) event.getClickedBlock().getState();
|
||||
handleSign(sign, p);
|
||||
}
|
||||
}
|
||||
|
||||
private void handleReadyBlock(Player p)
|
||||
{
|
||||
if (arena.classMap.containsKey(p))
|
||||
{
|
||||
MAUtils.tellPlayer(p, Msg.LOBBY_PLAYER_READY);
|
||||
arena.playerReady(p);
|
||||
}
|
||||
else MAUtils.tellPlayer(p, Msg.LOBBY_PICK_CLASS);
|
||||
}
|
||||
|
||||
private void handleSign(Sign sign, Player p)
|
||||
{
|
||||
// Check if the first line is a class name.
|
||||
String className = ChatColor.stripColor(sign.getLine(0));
|
||||
if (!arena.classes.contains(className) && !className.equalsIgnoreCase("random"))
|
||||
return;
|
||||
|
||||
// Check for permission.
|
||||
if (!plugin.has(p, "mobarena.classes." + className) && !className.equalsIgnoreCase("random"))
|
||||
{
|
||||
MAUtils.tellPlayer(p, Msg.LOBBY_CLASS_PERMISSION);
|
||||
return;
|
||||
}
|
||||
|
||||
// Sign
|
||||
if (event.hasBlock() && event.getClickedBlock().getState() instanceof Sign)
|
||||
{
|
||||
if (a == Action.RIGHT_CLICK_BLOCK)
|
||||
// Delay the inventory stuff to ensure that right-clicking works.
|
||||
delayAssignClass(p, className);
|
||||
}
|
||||
|
||||
private void delayAssignClass(final Player p, final String className)
|
||||
{
|
||||
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin,
|
||||
new Runnable()
|
||||
{
|
||||
MAUtils.tellPlayer(p, Msg.LOBBY_RIGHT_CLICK);
|
||||
return;
|
||||
}
|
||||
|
||||
// Cast the block to a sign to get the text on it.
|
||||
Sign sign = (Sign) event.getClickedBlock().getState();
|
||||
|
||||
// Check if the first line of the sign is a class name.
|
||||
String className = ChatColor.stripColor(sign.getLine(0));
|
||||
if (!arena.classes.contains(className) && !className.equalsIgnoreCase("random"))
|
||||
return;
|
||||
|
||||
if (!plugin.has(p, "mobarena.classes." + className) && !className.equalsIgnoreCase("random"))
|
||||
{
|
||||
MAUtils.tellPlayer(p, Msg.LOBBY_CLASS_PERMISSION);
|
||||
return;
|
||||
}
|
||||
|
||||
// Set the player's class.
|
||||
arena.assignClass(p, className);
|
||||
if (!className.equalsIgnoreCase("random"))
|
||||
MAUtils.tellPlayer(p, Msg.LOBBY_CLASS_PICKED, className, arena.classItems.get(className).get(0).getType());
|
||||
else
|
||||
MAUtils.tellPlayer(p, Msg.LOBBY_CLASS_RANDOM);
|
||||
|
||||
return;
|
||||
}
|
||||
public void run()
|
||||
{
|
||||
arena.assignClass(p, className);
|
||||
|
||||
if (!className.equalsIgnoreCase("random"))
|
||||
MAUtils.tellPlayer(p, Msg.LOBBY_CLASS_PICKED, className, arena.classItems.get(className).get(0).getType());
|
||||
else
|
||||
MAUtils.tellPlayer(p, Msg.LOBBY_CLASS_RANDOM);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void onPlayerQuit(PlayerQuitEvent event)
|
||||
{
|
||||
Player p = event.getPlayer();
|
||||
if (!arena.enabled || (!arena.arenaPlayers.contains(p) && !arena.lobbyPlayers.contains(p)))
|
||||
if (!arena.enabled || (!arena.inArena(p) && !arena.inLobby(p)))
|
||||
return;
|
||||
|
||||
arena.playerLeave(p);
|
||||
@@ -611,7 +618,7 @@ public class MAListener implements ArenaListener
|
||||
public void onPlayerKick(PlayerKickEvent event)
|
||||
{
|
||||
Player p = event.getPlayer();
|
||||
if (!arena.enabled || (!arena.arenaPlayers.contains(p) && !arena.lobbyPlayers.contains(p)))
|
||||
if (!arena.enabled || (!arena.inArena(p) && !arena.inLobby(p)))
|
||||
return;
|
||||
|
||||
arena.playerLeave(p);
|
||||
@@ -621,16 +628,17 @@ public class MAListener implements ArenaListener
|
||||
{
|
||||
if (!arena.running || arena.edit || !arena.enabled || !arena.setup || arena.allowWarp)
|
||||
return;
|
||||
|
||||
if (!arena.inRegion(event.getTo()) && !arena.inRegion(event.getFrom()))
|
||||
return;
|
||||
|
||||
Player p = event.getPlayer();
|
||||
Location old = arena.locations.get(p);
|
||||
Location to = event.getTo();
|
||||
Location from = event.getFrom();
|
||||
|
||||
if (arena.arenaPlayers.contains(p) || arena.lobbyPlayers.contains(p) || arena.specPlayers.contains(p))
|
||||
if (!arena.inRegion(to) && !arena.inRegion(from))
|
||||
return;
|
||||
|
||||
Player p = event.getPlayer();
|
||||
Location old = arena.locations.get(p);
|
||||
|
||||
if (arena.inArena(p) || arena.inLobby(p) || arena.specPlayers.contains(p))
|
||||
{
|
||||
if (arena.inRegion(from))
|
||||
{
|
||||
@@ -666,7 +674,7 @@ public class MAListener implements ArenaListener
|
||||
{
|
||||
Player p = event.getPlayer();
|
||||
|
||||
if (!arena.arenaPlayers.contains(p) && !arena.lobbyPlayers.contains(p))
|
||||
if (!arena.inArena(p) && !arena.inLobby(p))
|
||||
return;
|
||||
|
||||
String[] args = event.getMessage().split(" ");
|
||||
|
||||
@@ -267,7 +267,7 @@ public class MASpawnThread implements Runnable
|
||||
c = (Creature) e;
|
||||
try { target = c.getTarget(); } catch (ClassCastException cce) { continue; }
|
||||
|
||||
if (target instanceof Player && arena.arenaPlayers.contains(target))
|
||||
if (target instanceof Player && arena.inArena((Player) target))
|
||||
continue;
|
||||
|
||||
c.setTarget(MAUtils.getClosestPlayer(e, arena));
|
||||
|
||||
@@ -1590,15 +1590,15 @@ public class MAUtils
|
||||
world.getBlockAt(lx2-2,ly1+1,lz1+2).setType(Material.IRON_BLOCK);
|
||||
|
||||
// Set up the monster points.
|
||||
MAUtils.setArenaCoord(plugin.getConfig(), arena, "p1", new Location(world, x1, ly1, z1));
|
||||
MAUtils.setArenaCoord(plugin.getConfig(), arena, "p2", new Location(world, x2, y2+1, z2));
|
||||
MAUtils.setArenaCoord(plugin.getConfig(), arena, "arena", new Location(world, loc.getX(), y1+1, loc.getZ()));
|
||||
MAUtils.setArenaCoord(plugin.getConfig(), arena, "lobby", new Location(world, x1+2, ly1+1, z1+2));
|
||||
MAUtils.setArenaCoord(plugin.getConfig(), arena, "spectator", new Location(world, loc.getX(), y2+1, loc.getZ()));
|
||||
MAUtils.setArenaCoord(plugin.getConfig(), arena, "spawnpoints.s1", new Location(world, x1+3, y1+2, z1+3));
|
||||
MAUtils.setArenaCoord(plugin.getConfig(), arena, "spawnpoints.s2", new Location(world, x1+3, y1+2, z2-3));
|
||||
MAUtils.setArenaCoord(plugin.getConfig(), arena, "spawnpoints.s3", new Location(world, x2-3, y1+2, z1+3));
|
||||
MAUtils.setArenaCoord(plugin.getConfig(), arena, "spawnpoints.s4", new Location(world, x2-3, y1+2, z2-3));
|
||||
MAUtils.setArenaCoord(plugin.getMAConfig(), arena, "p1", new Location(world, x1, ly1, z1));
|
||||
MAUtils.setArenaCoord(plugin.getMAConfig(), arena, "p2", new Location(world, x2, y2+1, z2));
|
||||
MAUtils.setArenaCoord(plugin.getMAConfig(), arena, "arena", new Location(world, loc.getX(), y1+1, loc.getZ()));
|
||||
MAUtils.setArenaCoord(plugin.getMAConfig(), arena, "lobby", new Location(world, x1+2, ly1+1, z1+2));
|
||||
MAUtils.setArenaCoord(plugin.getMAConfig(), arena, "spectator", new Location(world, loc.getX(), y2+1, loc.getZ()));
|
||||
MAUtils.setArenaCoord(plugin.getMAConfig(), arena, "spawnpoints.s1", new Location(world, x1+3, y1+2, z1+3));
|
||||
MAUtils.setArenaCoord(plugin.getMAConfig(), arena, "spawnpoints.s2", new Location(world, x1+3, y1+2, z2-3));
|
||||
MAUtils.setArenaCoord(plugin.getMAConfig(), arena, "spawnpoints.s3", new Location(world, x2-3, y1+2, z1+3));
|
||||
MAUtils.setArenaCoord(plugin.getMAConfig(), arena, "spawnpoints.s4", new Location(world, x2-3, y1+2, z2-3));
|
||||
|
||||
am.updateAll();
|
||||
return true;
|
||||
@@ -1632,7 +1632,7 @@ public class MAUtils
|
||||
world.getBlockAt(entry.getKey().getLocation(world)).setTypeId(entry.getValue());
|
||||
}
|
||||
|
||||
Configuration config = plugin.getConfig();
|
||||
Configuration config = plugin.getMAConfig();
|
||||
config.removeProperty("arenas." + name);
|
||||
config.save();
|
||||
|
||||
|
||||
@@ -202,9 +202,9 @@ public class MobArena extends JavaPlugin
|
||||
pm.registerEvent(Event.Type.CUSTOM_EVENT, new MagicSpellsListener(this), Priority.Normal, this);
|
||||
}
|
||||
|
||||
public Configuration getConfig() { return config; }
|
||||
public ArenaMaster getAM() { return am; } // More convenient.
|
||||
public ArenaMaster getArenaMaster() { return am; }
|
||||
public Configuration getMAConfig() { return config; }
|
||||
public ArenaMaster getAM() { return am; } // More convenient.
|
||||
public ArenaMaster getArenaMaster() { return am; }
|
||||
|
||||
public HeroManager getHeroManager()
|
||||
{
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
package com.garbagemule.MobArena.util;
|
||||
|
||||
public class Enums
|
||||
{
|
||||
/**
|
||||
* Get the enum value of a string, null if it doesn't exist.
|
||||
*/
|
||||
public static <T extends Enum<T>> T getEnumFromString(Class<T> c, String string)
|
||||
{
|
||||
if(c != null && string != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
return Enum.valueOf(c, string.trim().toUpperCase());
|
||||
}
|
||||
catch(IllegalArgumentException ex) { }
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the enum value of a string, null if it doesn't exist.
|
||||
*/
|
||||
public static <T extends Enum<T>> T getEnumFromStringCaseSensitive(Class<T> c, String string)
|
||||
{
|
||||
if(c != null && string != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
return Enum.valueOf(c, string);
|
||||
}
|
||||
catch(IllegalArgumentException ex) { }
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
package com.garbagemule.MobArena.util;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class ItemParser
|
||||
{
|
||||
public static List<ItemStack> parseItems(String s)
|
||||
{
|
||||
List<ItemStack> result = new LinkedList<ItemStack>();
|
||||
|
||||
String[] items = s.split(",");
|
||||
for (String item : items)
|
||||
{
|
||||
ItemStack stack = parseItem(item.trim());
|
||||
if (stack != null)
|
||||
result.add(stack);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static ItemStack parseItem(String item)
|
||||
{
|
||||
if (item == null || item.equals(""))
|
||||
return null;
|
||||
|
||||
String[] parts = item.split(":");
|
||||
if (parts.length == 1)
|
||||
return singleItem(parts[0]);
|
||||
if (parts.length == 2)
|
||||
return withAmount(parts[0], parts[1]);
|
||||
if (parts.length == 3)
|
||||
return withDataAndAmount(parts[0], parts[1], parts[2]);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static ItemStack singleItem(String item)
|
||||
{
|
||||
Material m = getMaterial(item);
|
||||
return m == null ? null : new ItemStack(m);
|
||||
}
|
||||
|
||||
private static ItemStack withAmount(String item, String amount)
|
||||
{
|
||||
Material m = getMaterial(item);
|
||||
int a = getAmount(amount);
|
||||
return m == null ? null : new ItemStack(m,a);
|
||||
}
|
||||
|
||||
private static ItemStack withDataAndAmount(String item, String data, String amount)
|
||||
{
|
||||
Material m = getMaterial(item.toUpperCase());
|
||||
byte d = getData(data);
|
||||
int a = getAmount(amount);
|
||||
|
||||
if (m == null)
|
||||
return null;
|
||||
|
||||
if (m.getId() == 35)
|
||||
d = (byte) (15-d);
|
||||
|
||||
return new ItemStack(m,a,(short)0,d);
|
||||
}
|
||||
|
||||
private static Material getMaterial(String item)
|
||||
{
|
||||
if (item.matches("[0-9]*"))
|
||||
return Material.getMaterial(Integer.parseInt(item));
|
||||
|
||||
return Material.getMaterial(item.toUpperCase());
|
||||
}
|
||||
|
||||
private static int getAmount(String amount)
|
||||
{
|
||||
if (amount.matches("[1-9][0-9]*"))
|
||||
return Integer.parseInt(amount);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
private static byte getData(String data)
|
||||
{
|
||||
DyeColor dye = null;
|
||||
|
||||
if (data.matches("[0-9]+"))
|
||||
{
|
||||
dye = DyeColor.getByData(Byte.parseByte(data));
|
||||
return dye == null ? 0 : dye.getData();
|
||||
}
|
||||
else
|
||||
{
|
||||
dye = Enums.getEnumFromString(DyeColor.class, data);
|
||||
return dye == null ? 0 : (byte) (15-dye.getData());
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user