Implemented blocklist clearing (no more repair-delay!), and added support for right-clicking signs in the lobby!

This commit is contained in:
Garbage Mule
2011-10-14 02:26:53 +02:00
parent b4c8ad1d25
commit 5165eda6df
12 changed files with 431 additions and 128 deletions
BIN
View File
Binary file not shown.
+1 -1
View File
@@ -1,6 +1,6 @@
name: MobArena name: MobArena
main: com.garbagemule.MobArena.MobArena main: com.garbagemule.MobArena.MobArena
version: 0.94.3.17 version: 0.94.3.18
softdepend: [Spout,Permissions,MultiVerse,XcraftGate,Towny,Heroes,MagicSpells] softdepend: [Spout,Permissions,MultiVerse,XcraftGate,Towny,Heroes,MagicSpells]
commands: commands:
ma: ma:
+13 -4
View File
@@ -107,7 +107,7 @@ public class Arena
protected boolean allowMonsters, allowAnimals; protected boolean allowMonsters, allowAnimals;
// Other settings // Other settings
protected int repairDelay, minPlayers, maxPlayers, joinDistance; protected int minPlayers, maxPlayers, joinDistance;
protected List<String> classes = new LinkedList<String>(); protected List<String> classes = new LinkedList<String>();
protected Map<Player,Location> locations = new HashMap<Player,Location>(); protected Map<Player,Location> locations = new HashMap<Player,Location>();
protected Map<Player,Integer> healthMap = new HashMap<Player,Integer>(); protected Map<Player,Integer> healthMap = new HashMap<Player,Integer>();
@@ -900,7 +900,6 @@ public class Arena
joinDistance = config.getInt(arenaPath + "max-join-distance", 0); joinDistance = config.getInt(arenaPath + "max-join-distance", 0);
minPlayers = config.getInt(arenaPath + "min-players", 0); minPlayers = config.getInt(arenaPath + "min-players", 0);
maxPlayers = config.getInt(arenaPath + "max-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; waveDelay = config.getInt(arenaPath + "first-wave-delay", 5) * 20;
waveInterval = config.getInt(arenaPath + "wave-interval", 20) * 20; waveInterval = config.getInt(arenaPath + "wave-interval", 20) * 20;
specialModulo = config.getInt(arenaPath + "special-modulo", 4); specialModulo = config.getInt(arenaPath + "special-modulo", 4);
@@ -947,7 +946,7 @@ public class Arena
public void serializeConfig() public void serializeConfig()
{ {
String coords = "arenas." + configName() + ".coords."; 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.enabled", enabled);
config.setProperty("arenas." + configName() + ".settings.protect", protect); config.setProperty("arenas." + configName() + ".settings.protect", protect);
@@ -968,7 +967,7 @@ public class Arena
public void deserializeConfig() public void deserializeConfig()
{ {
Configuration config = plugin.getConfig(); Configuration config = plugin.getMAConfig();
config.load(); config.load();
load(config); 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() public boolean isRunning()
{ {
return running; return running;
@@ -22,7 +22,6 @@ public class ArenaMaster //implements Master
private MobArena plugin; private MobArena plugin;
private Configuration config; private Configuration config;
protected Arena selectedArena; protected Arena selectedArena;
//protected Lobby masterLobby;
// Settings // Settings
protected boolean enabled, updateNotify; protected boolean enabled, updateNotify;
@@ -51,7 +50,7 @@ public class ArenaMaster //implements Master
public ArenaMaster(MobArena instance) public ArenaMaster(MobArena instance)
{ {
plugin = instance; plugin = instance;
config = plugin.getConfig(); config = plugin.getMAConfig();
arenas = new LinkedList<Arena>(); arenas = new LinkedList<Arena>();
arenaMap = new HashMap<Player,Arena>(); arenaMap = new HashMap<Player,Arena>();
} }
+149
View File
@@ -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;
}
}
+13 -13
View File
@@ -79,7 +79,7 @@ public class MACommands implements CommandExecutor
this.am = am; this.am = am;
server = Bukkit.getServer(); server = Bukkit.getServer();
meanAdmins = (server.getPluginManager().getPlugin("Mean Admins") != null); 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; 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() + "'"); MAUtils.tellPlayer(sender, "Set region point " + arg1 + " for arena '" + am.selectedArena.configName() + "'");
return true; return true;
} }
@@ -857,11 +857,11 @@ public class MACommands implements CommandExecutor
} }
// In case of a "negative" region, fix it! // 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."); MAUtils.tellPlayer(sender, "Region for '" + am.selectedArena.configName() + "' expanded " + arg2 + " by " + arg1 + " blocks.");
am.selectedArena.serializeConfig(); am.selectedArena.serializeConfig();
am.selectedArena.load(plugin.getConfig()); am.selectedArena.load(plugin.getMAConfig());
return true; return true;
} }
@@ -938,7 +938,7 @@ public class MACommands implements CommandExecutor
return true; 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() + "'"); MAUtils.tellPlayer(sender, "Set lobby point " + arg1 + " for arena '" + am.selectedArena.configName() + "'");
return true; 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."); MAUtils.tellPlayer(sender, "Lobby region for '" + am.selectedArena.configName() + "' expanded " + arg2 + " by " + arg1 + " blocks.");
am.selectedArena.serializeConfig(); am.selectedArena.serializeConfig();
am.selectedArena.load(plugin.getConfig()); am.selectedArena.load(plugin.getMAConfig());
return true; return true;
} }
@@ -1004,7 +1004,7 @@ public class MACommands implements CommandExecutor
return true; 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, "Warp point " + arg1 + " was set for arena '" + am.selectedArena.configName() + "'");
MAUtils.tellPlayer(sender, "Type /ma checkdata to see if you're missing anything..."); MAUtils.tellPlayer(sender, "Type /ma checkdata to see if you're missing anything...");
return true; return true;
@@ -1022,7 +1022,7 @@ public class MACommands implements CommandExecutor
} }
StringBuffer buffy = new StringBuffer(); 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) if (spawnpoints != null)
{ {
@@ -1057,7 +1057,7 @@ public class MACommands implements CommandExecutor
return true; 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() + "\""); MAUtils.tellPlayer(sender, "Spawnpoint " + arg1 + " added for arena \"" + am.selectedArena.configName() + "\"");
return true; return true;
} }
@@ -1078,7 +1078,7 @@ public class MACommands implements CommandExecutor
return true; 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() + "'"); MAUtils.tellPlayer(sender, "Spawnpoint " + arg1 + " deleted for arena '" + am.selectedArena.configName() + "'");
else else
MAUtils.tellPlayer(sender, "Could not find the spawnpoint " + arg1 + "for the arena '" + am.selectedArena.configName() + "'"); 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(); 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) if (containers != null)
{ {
@@ -1131,7 +1131,7 @@ public class MACommands implements CommandExecutor
return true; 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() + "\""); MAUtils.tellPlayer(sender, "Container '" + arg1 + "' added for arena \"" + am.selectedArena.configName() + "\"");
return true; return true;
} }
@@ -1149,7 +1149,7 @@ public class MACommands implements CommandExecutor
return true; 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() + "'"); MAUtils.tellPlayer(sender, "Container '" + arg1 + "' deleted for arena '" + am.selectedArena.configName() + "'");
else else
MAUtils.tellPlayer(sender, "Could not find the container '" + arg1 + "' for arena '" + am.selectedArena.configName() + "'"); MAUtils.tellPlayer(sender, "Could not find the container '" + arg1 + "' for arena '" + am.selectedArena.configName() + "'");
+102 -94
View File
@@ -1,5 +1,8 @@
package com.garbagemule.MobArena; package com.garbagemule.MobArena;
import java.util.LinkedList;
import java.util.List;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Location; import org.bukkit.Location;
@@ -117,11 +120,12 @@ public class MAListener implements ArenaListener
public void onBlockPlace(BlockPlaceEvent event) 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; return;
Block b = event.getBlock(); if (arena.running && arena.inArena(event.getPlayer()))
if (arena.running && arena.arenaPlayers.contains(event.getPlayer()))
{ {
arena.blocks.add(b); arena.blocks.add(b);
Material mat = b.getType(); Material mat = b.getType();
@@ -161,7 +165,7 @@ public class MAListener implements ArenaListener
public void onSignChange(SignChangeEvent event) public void onSignChange(SignChangeEvent event)
{ {
arena.leaderboard = new Leaderboard(plugin, arena, event.getBlock().getLocation()); 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!"); 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)) if (!arena.monsters.contains(event.getEntity()) && !arena.inRegionRadius(event.getLocation(), 10))
return; return;
event.setYield(0);
arena.monsters.remove(event.getEntity()); arena.monsters.remove(event.getEntity());
// Cancel if the arena isn't running or if the repair delay is 0 // Cancel if the arena isn't running
if (!arena.running || arena.repairDelay == 0) if (!arena.running)
{ {
event.setCancelled(true); event.setCancelled(true);
return; return;
@@ -196,6 +199,17 @@ public class MAListener implements ArenaListener
// Uncancel, just in case. // Uncancel, just in case.
event.setCancelled(false); 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. // Handle all the blocks in the block list.
for (Block b : event.blockList()) for (Block b : event.blockList())
{ {
@@ -232,20 +246,6 @@ public class MAListener implements ArenaListener
else else
arena.queueRepairable(r); 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) 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(); event.getDrops().clear();
arena.playerDeath(player); arena.playerDeath(player);
@@ -328,7 +328,7 @@ public class MAListener implements ArenaListener
event.setCancelled(true); event.setCancelled(true);
// If not in the lobby or the arena, return // If not in the lobby or the arena, return
else if (!arena.arenaPlayers.contains(player)) else if (!arena.inArena(player))
return; return;
// Cancel block explosion damage if detonate-damage: false // Cancel block explosion damage if detonate-damage: false
@@ -356,14 +356,15 @@ public class MAListener implements ArenaListener
{ {
if (damager instanceof Player) if (damager instanceof Player)
{ {
if (!arena.arenaPlayers.contains(damager)) Player p = (Player) damager;
if (!arena.inArena(p))
{ {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
arena.arenaPlayerMap.get((Player) damager).getStats().dmgDone += event.getDamage(); arena.arenaPlayerMap.get(p).getStats().dmgDone += event.getDamage();
arena.arenaPlayerMap.get((Player) damager).getStats().hits++; arena.arenaPlayerMap.get(p).getStats().hits++;
} }
else if (damager instanceof Wolf && arena.pets.contains(damager)) else if (damager instanceof Wolf && arena.pets.contains(damager))
{ {
@@ -442,7 +443,7 @@ public class MAListener implements ArenaListener
event.setCancelled(true); event.setCancelled(true);
else if (event.getReason() == TargetReason.CLOSEST_PLAYER) else if (event.getReason() == TargetReason.CLOSEST_PLAYER)
if (!arena.arenaPlayers.contains(event.getTarget())) if (!arena.inArena((Player) event.getTarget()))
event.setCancelled(true); event.setCancelled(true);
} }
} }
@@ -463,7 +464,7 @@ public class MAListener implements ArenaListener
{ {
if (!arena.running) return; 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; return;
if (event.getRegainReason() == RegainReason.REGEN) if (event.getRegainReason() == RegainReason.REGEN)
@@ -472,7 +473,7 @@ public class MAListener implements ArenaListener
public void onPlayerAnimation(PlayerAnimationEvent event) public void onPlayerAnimation(PlayerAnimationEvent event)
{ {
if (!arena.running || !arena.arenaPlayers.contains(event.getPlayer())) if (!arena.running || !arena.inArena(event.getPlayer()))
return; return;
arena.arenaPlayerMap.get(event.getPlayer()).getStats().swings++; arena.arenaPlayerMap.get(event.getPlayer()).getStats().swings++;
@@ -483,14 +484,14 @@ public class MAListener implements ArenaListener
Player p = event.getPlayer(); Player p = event.getPlayer();
// Player is in the lobby // Player is in the lobby
if (arena.lobbyPlayers.contains(p)) if (arena.inLobby(p))
{ {
MAUtils.tellPlayer(p, Msg.LOBBY_DROP_ITEM); MAUtils.tellPlayer(p, Msg.LOBBY_DROP_ITEM);
event.setCancelled(true); event.setCancelled(true);
} }
// Player is in the arena // Player is in the arena
else if (arena.arenaPlayers.contains(p)) else if (arena.inArena(p))
{ {
if (!arena.shareInArena) if (!arena.shareInArena)
{ {
@@ -516,7 +517,7 @@ public class MAListener implements ArenaListener
public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) 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; return;
if (!arena.running) if (!arena.running)
@@ -532,77 +533,83 @@ public class MAListener implements ArenaListener
public void onPlayerInteract(PlayerInteractEvent event) 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(); 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) if (a == Action.RIGHT_CLICK_AIR || a == Action.RIGHT_CLICK_BLOCK)
{ {
event.setUseItemInHand(Result.DENY); event.setUseItemInHand(Result.DENY);
event.setCancelled(true); event.setCancelled(true);
} }
// If there's no block involved, just return.
if (!event.hasBlock())
return;
// Iron block // 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)) Sign sign = (Sign) event.getClickedBlock().getState();
{ handleSign(sign, p);
MAUtils.tellPlayer(p, Msg.LOBBY_PLAYER_READY); }
arena.playerReady(p); }
}
else private void handleReadyBlock(Player p)
{ {
MAUtils.tellPlayer(p, Msg.LOBBY_PICK_CLASS); 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; return;
} }
// Sign // Delay the inventory stuff to ensure that right-clicking works.
if (event.hasBlock() && event.getClickedBlock().getState() instanceof Sign) delayAssignClass(p, className);
{ }
if (a == Action.RIGHT_CLICK_BLOCK)
private void delayAssignClass(final Player p, final String className)
{
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin,
new Runnable()
{ {
MAUtils.tellPlayer(p, Msg.LOBBY_RIGHT_CLICK); public void run()
return; {
} arena.assignClass(p, className);
// Cast the block to a sign to get the text on it. if (!className.equalsIgnoreCase("random"))
Sign sign = (Sign) event.getClickedBlock().getState(); MAUtils.tellPlayer(p, Msg.LOBBY_CLASS_PICKED, className, arena.classItems.get(className).get(0).getType());
else
// Check if the first line of the sign is a class name. MAUtils.tellPlayer(p, Msg.LOBBY_CLASS_RANDOM);
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 onPlayerQuit(PlayerQuitEvent event) public void onPlayerQuit(PlayerQuitEvent event)
{ {
Player p = event.getPlayer(); 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; return;
arena.playerLeave(p); arena.playerLeave(p);
@@ -611,7 +618,7 @@ public class MAListener implements ArenaListener
public void onPlayerKick(PlayerKickEvent event) public void onPlayerKick(PlayerKickEvent event)
{ {
Player p = event.getPlayer(); 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; return;
arena.playerLeave(p); arena.playerLeave(p);
@@ -621,16 +628,17 @@ public class MAListener implements ArenaListener
{ {
if (!arena.running || arena.edit || !arena.enabled || !arena.setup || arena.allowWarp) if (!arena.running || arena.edit || !arena.enabled || !arena.setup || arena.allowWarp)
return; 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 to = event.getTo();
Location from = event.getFrom(); 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)) if (arena.inRegion(from))
{ {
@@ -666,7 +674,7 @@ public class MAListener implements ArenaListener
{ {
Player p = event.getPlayer(); Player p = event.getPlayer();
if (!arena.arenaPlayers.contains(p) && !arena.lobbyPlayers.contains(p)) if (!arena.inArena(p) && !arena.inLobby(p))
return; return;
String[] args = event.getMessage().split(" "); String[] args = event.getMessage().split(" ");
@@ -267,7 +267,7 @@ public class MASpawnThread implements Runnable
c = (Creature) e; c = (Creature) e;
try { target = c.getTarget(); } catch (ClassCastException cce) { continue; } 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; continue;
c.setTarget(MAUtils.getClosestPlayer(e, arena)); c.setTarget(MAUtils.getClosestPlayer(e, arena));
+10 -10
View File
@@ -1590,15 +1590,15 @@ public class MAUtils
world.getBlockAt(lx2-2,ly1+1,lz1+2).setType(Material.IRON_BLOCK); world.getBlockAt(lx2-2,ly1+1,lz1+2).setType(Material.IRON_BLOCK);
// Set up the monster points. // Set up the monster points.
MAUtils.setArenaCoord(plugin.getConfig(), arena, "p1", new Location(world, x1, ly1, z1)); MAUtils.setArenaCoord(plugin.getMAConfig(), arena, "p1", new Location(world, x1, ly1, z1));
MAUtils.setArenaCoord(plugin.getConfig(), arena, "p2", new Location(world, x2, y2+1, z2)); MAUtils.setArenaCoord(plugin.getMAConfig(), 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.getMAConfig(), 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.getMAConfig(), 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.getMAConfig(), 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.getMAConfig(), 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.getMAConfig(), 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.getMAConfig(), 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, "spawnpoints.s4", new Location(world, x2-3, y1+2, z2-3));
am.updateAll(); am.updateAll();
return true; return true;
@@ -1632,7 +1632,7 @@ public class MAUtils
world.getBlockAt(entry.getKey().getLocation(world)).setTypeId(entry.getValue()); world.getBlockAt(entry.getKey().getLocation(world)).setTypeId(entry.getValue());
} }
Configuration config = plugin.getConfig(); Configuration config = plugin.getMAConfig();
config.removeProperty("arenas." + name); config.removeProperty("arenas." + name);
config.save(); config.save();
+3 -3
View File
@@ -202,9 +202,9 @@ public class MobArena extends JavaPlugin
pm.registerEvent(Event.Type.CUSTOM_EVENT, new MagicSpellsListener(this), Priority.Normal, this); pm.registerEvent(Event.Type.CUSTOM_EVENT, new MagicSpellsListener(this), Priority.Normal, this);
} }
public Configuration getConfig() { return config; } public Configuration getMAConfig() { return config; }
public ArenaMaster getAM() { return am; } // More convenient. public ArenaMaster getAM() { return am; } // More convenient.
public ArenaMaster getArenaMaster() { return am; } public ArenaMaster getArenaMaster() { return am; }
public HeroManager getHeroManager() 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());
}
}
}