Code cleanup, and projectiles should no longer damage pet wolves.

This commit is contained in:
Garbage Mule
2011-09-09 18:11:15 +02:00
parent cc1ba24ef8
commit ff7329e3c4
7 changed files with 168 additions and 119 deletions
BIN
View File
Binary file not shown.
+5 -7
View File
@@ -213,7 +213,11 @@ public class Arena
{ {
// Sanity-checks. // Sanity-checks.
if (!running || !arenaPlayers.isEmpty()) if (!running || !arenaPlayers.isEmpty())
{
//System.out.println("Arena was not ended, playercount: " + arenaPlayers.size());
return false; return false;
}
//else System.out.println("Arena ending...");
// Set the boolean. // Set the boolean.
running = false; running = false;
@@ -423,6 +427,7 @@ public class Arena
sheepTaskId = -1; sheepTaskId = -1;
spawnThread = null; spawnThread = null;
} }
else System.out.println("--------- THE SPAWNTHREAD IS NULL! ----------");
// Restore spawn flags. // Restore spawn flags.
MAUtils.setSpawnFlags(plugin, world, spawnMonsters, allowMonsters, allowAnimals); MAUtils.setSpawnFlags(plugin, world, spawnMonsters, allowMonsters, allowAnimals);
@@ -639,12 +644,9 @@ public class Arena
public void repairBlocks() public void repairBlocks()
{ {
//long start = System.nanoTime();
while (!repairQueue.isEmpty()) while (!repairQueue.isEmpty())
{
repairQueue.poll().repair(); repairQueue.poll().repair();
} }
}
public void queueRepairable(Repairable r) public void queueRepairable(Repairable r)
{ {
@@ -1289,10 +1291,6 @@ public class Arena
MAUtils.tellPlayer(p, Msg.JOIN_EMPTY_INV); MAUtils.tellPlayer(p, Msg.JOIN_EMPTY_INV);
else if (!canAfford(p))// || !takeFee(p)) else if (!canAfford(p))// || !takeFee(p))
MAUtils.tellPlayer(p, Msg.JOIN_FEE_REQUIRED, MAUtils.listToString(entryFee, plugin)); MAUtils.tellPlayer(p, Msg.JOIN_FEE_REQUIRED, MAUtils.listToString(entryFee, plugin));
/*else if (emptyInvJoin && !MAUtils.hasEmptyInventory(p))
MAUtils.tellPlayer(p, Msg.JOIN_EMPTY_INV);
else if (!emptyInvJoin && !MAUtils.storeInventory(p))
MAUtils.tellPlayer(p, Msg.JOIN_STORE_INV_FAIL);*/
else return true; else return true;
return false; return false;
+74 -39
View File
@@ -11,6 +11,7 @@ import org.bukkit.block.Sign;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.entity.Slime; import org.bukkit.entity.Slime;
import org.bukkit.entity.Wolf; import org.bukkit.entity.Wolf;
import org.bukkit.event.Event.Result; import org.bukkit.event.Event.Result;
@@ -243,21 +244,32 @@ public class MAListener implements ArenaListener
}, arena.repairDelay); }, arena.repairDelay);
} }
/******************************************************
*
* DEATH LISTENERS
*
******************************************************/
public void onEntityDeath(EntityDeathEvent event) public void onEntityDeath(EntityDeathEvent event)
{ {
if (event.getEntity() instanceof Player) if (event.getEntity() instanceof Player)
{ onPlayerDeath(event, (Player) event.getEntity());
Player p = (Player) event.getEntity();
if (!arena.arenaPlayers.contains(p)) else if (arena.monsters.remove(event.getEntity()))
return; onMonsterDeath(event);
event.getDrops().clear();
arena.playerDeath(p);
return;
} }
if (arena.monsters.remove(event.getEntity())) private void onPlayerDeath(EntityDeathEvent event, Player player)
{
if (arena.arenaPlayers.contains(player) || arena.lobbyPlayers.contains(player))
{
event.getDrops().clear();
arena.playerDeath(player);
}
}
private void onMonsterDeath(EntityDeathEvent event)
{ {
EntityDamageEvent e1 = event.getEntity().getLastDamageCause(); EntityDamageEvent e1 = event.getEntity().getLastDamageCause();
EntityDamageByEntityEvent e2 = (e1 instanceof EntityDamageByEntityEvent) ? (EntityDamageByEntityEvent) e1 : null; EntityDamageByEntityEvent e2 = (e1 instanceof EntityDamageByEntityEvent) ? (EntityDamageByEntityEvent) e1 : null;
@@ -270,7 +282,13 @@ public class MAListener implements ArenaListener
arena.resetIdleTimer(); arena.resetIdleTimer();
return; return;
} }
}
/******************************************************
*
* DAMAGE LISTENERS
*
******************************************************/
public void onEntityDamage(EntityDamageEvent event) public void onEntityDamage(EntityDamageEvent event)
{ {
@@ -282,41 +300,59 @@ public class MAListener implements ArenaListener
// Pet wolf // Pet wolf
if (damagee instanceof Wolf && arena.pets.contains(damagee)) if (damagee instanceof Wolf && arena.pets.contains(damagee))
onPetDamage(event, (Wolf) damagee, damager);
// Player
else if (damagee instanceof Player)
onPlayerDamage(event, (Player) damagee, damager);
// Monster
else if (arena.monsters.contains(damagee))
onMonsterDamage(event, damagee, damager);
}
private void onPlayerDamage(EntityDamageEvent event, Player player, Entity damager)
{
// Cancel all damage in the lobby
if (arena.lobbyPlayers.contains(player))
event.setCancelled(true);
// If not in the lobby or the arena, return
else if (!arena.arenaPlayers.contains(player))
return;
// Cancel block explosion damage if detonate-damage: false
else if (!arena.detDamage && event.getCause() == DamageCause.BLOCK_EXPLOSION)
event.setCancelled(true);
// If PvP is disabled and damager is a player, cancel damage
else if (damager instanceof Player && !arena.pvp)
event.setCancelled(true);
// Log damage
if (!event.isCancelled())
arena.log.players.get(player).dmgTaken += event.getDamage();
}
private void onPetDamage(EntityDamageEvent event, Wolf pet, Entity damager)
{ {
if (damager == null) if (damager == null)
{ {
damagee.setFireTicks(32768); if (arena.hellhounds)
event.setCancelled(true); pet.setFireTicks(32768);
return;
}
else if (damager instanceof Player)
event.setCancelled(true);
else
event.setDamage(0);
return;
}
// Arena player
else if (damagee instanceof Player)
{
if (arena.lobbyPlayers.contains(damagee))
event.setCancelled(true); event.setCancelled(true);
else if (!arena.arenaPlayers.contains(damagee))
return;
else if (!arena.detDamage && event.getCause() == DamageCause.BLOCK_EXPLOSION)
event.setCancelled(true);
else if (damager instanceof Player && !arena.pvp)
{
// if 'inLobby' fails, and 'not inArena' fails, 'inArena' is true
event.setCancelled(true);
return;
} }
if (!event.isCancelled()) // Cancel player and projectile damage
arena.log.players.get((Player) damagee).dmgTaken += event.getDamage(); else if (damager instanceof Player || damager instanceof Projectile)
event.setCancelled(true);
// Set damage to 0 for knockbacks from monsters
else event.setDamage(0);
} }
// Other LivingEntity
else if (arena.monsters.contains(damagee)) private void onMonsterDamage(EntityDamageEvent event, Entity monster, Entity damager)
{ {
if (damager instanceof Player) if (damager instanceof Player)
{ {
@@ -341,7 +377,7 @@ public class MAListener implements ArenaListener
} }
// Boss // Boss
if (arena.bossWave != null && damagee.equals(arena.bossWave.getEntity())) if (arena.bossWave != null && monster.equals(arena.bossWave.getEntity()))
{ {
if (event.getCause() == DamageCause.LIGHTNING) if (event.getCause() == DamageCause.LIGHTNING)
{ {
@@ -369,7 +405,6 @@ public class MAListener implements ArenaListener
} }
} }
} }
}
public void onEntityCombust(EntityCombustEvent event) public void onEntityCombust(EntityCombustEvent event)
{ {
+11 -1
View File
@@ -386,7 +386,7 @@ public class MAUtils
// If the player isn't online, hack the playerName.dat file // If the player isn't online, hack the playerName.dat file
if (!p.isOnline()) if (!p.isOnline())
System.out.println("FUCKKKKKKKKKKKKKKKKKKKKKKKKKK!");//return writeInventoryData(p, stacks); System.out.println("THE WORLD IS GOING TO END! SOMETHING IS WRONG!");//return writeInventoryData(p, stacks);
// Otherwise, restore the inventory directly // Otherwise, restore the inventory directly
ItemStack[] items = new ItemStack[stacks.length-4]; ItemStack[] items = new ItemStack[stacks.length-4];
@@ -1028,6 +1028,16 @@ public class MAUtils
return false; return false;
} }
public static int getInt(Configuration config, String path)
{
Object o = config.getProperty(path);
if (o instanceof Integer)
return (Integer) o;
return 0;
}
/* ///////////////////////////////////////////////////////////////////// // /* ///////////////////////////////////////////////////////////////////// //
+3 -6
View File
@@ -21,14 +21,12 @@ import com.nijikokun.bukkit.Permissions.Permissions;
import com.garbagemule.MobArena.util.FileUtils; import com.garbagemule.MobArena.util.FileUtils;
import com.garbagemule.register.payment.Method; import com.garbagemule.register.payment.Method;
import com.garbagemule.register.payment.Methods; import com.garbagemule.register.payment.Methods;
//import com.garbagemule.ArenaPlugin.ArenaPlugin;
//import com.garbagemule.ArenaPlugin.Master;
/** /**
* MobArena * MobArena
* @author garbagemule * @author garbagemule
*/ */
public class MobArena extends JavaPlugin// implements ArenaPlugin public class MobArena extends JavaPlugin
{ {
private Configuration config; private Configuration config;
private ArenaMaster am; private ArenaMaster am;
@@ -120,7 +118,6 @@ public class MobArena extends JavaPlugin// implements ArenaPlugin
// Register events. // Register events.
pm.registerEvent(Event.Type.BLOCK_BREAK, blockListener, Priority.Highest, this); pm.registerEvent(Event.Type.BLOCK_BREAK, blockListener, Priority.Highest, this);
pm.registerEvent(Event.Type.BLOCK_BURN, blockListener, Priority.Highest, this); pm.registerEvent(Event.Type.BLOCK_BURN, blockListener, Priority.Highest, this);
//pm.registerEvent(Event.Type.BLOCK_PHYSICS, blockListener, Priority.Normal, this);
pm.registerEvent(Event.Type.BLOCK_PLACE, blockListener, Priority.Highest, this); pm.registerEvent(Event.Type.BLOCK_PLACE, blockListener, Priority.Highest, this);
pm.registerEvent(Event.Type.BLOCK_IGNITE, blockListener, Priority.Highest, this); pm.registerEvent(Event.Type.BLOCK_IGNITE, blockListener, Priority.Highest, this);
pm.registerEvent(Event.Type.PLAYER_INTERACT, playerListener, Priority.Normal, this); pm.registerEvent(Event.Type.PLAYER_INTERACT, playerListener, Priority.Normal, this);
@@ -145,8 +142,8 @@ public class MobArena extends JavaPlugin// implements ArenaPlugin
public boolean has(Player p, String s) public boolean has(Player p, String s)
{ {
// First check for NijikoPerms // First check for NijikoPerms
if (permissionHandler != null) //if (permissionHandler != null)
return permissionHandler.has(p, s); // return permissionHandler.has(p, s);
// If the permission is set, check if player has permission // If the permission is set, check if player has permission
if (p.isPermissionSet(s)) if (p.isPermissionSet(s))
@@ -12,6 +12,7 @@ import org.bukkit.entity.Player;
import org.bukkit.util.config.Configuration; import org.bukkit.util.config.Configuration;
import com.garbagemule.MobArena.Arena; import com.garbagemule.MobArena.Arena;
import com.garbagemule.MobArena.MAUtils;
import com.garbagemule.MobArena.MobArena; import com.garbagemule.MobArena.MobArena;
import com.garbagemule.MobArena.waves.*; import com.garbagemule.MobArena.waves.*;
import com.garbagemule.MobArena.waves.Wave.*; import com.garbagemule.MobArena.waves.Wave.*;
@@ -174,7 +175,8 @@ public class WaveUtils
{ {
int frequency = config.getInt(path + "frequency", 0); int frequency = config.getInt(path + "frequency", 0);
int priority = config.getInt(path + "priority", 0); int priority = config.getInt(path + "priority", 0);
int wave = config.getInt(path + "wave", frequency); int wave = MAUtils.getInt(config, path + "wave");
//int wave = config.getInt(path + "wave", frequency);
if (type == WaveType.DEFAULT) if (type == WaveType.DEFAULT)
result = new DefaultWave(arena, name, wave, frequency, priority, config, path); result = new DefaultWave(arena, name, wave, frequency, priority, config, path);
@@ -187,7 +189,8 @@ public class WaveUtils
} }
else else
{ {
int wave = config.getInt(path + "wave", 0); int wave = MAUtils.getInt(config, path + "wave");
//int wave = config.getInt(path + "wave", 0);
if (type == WaveType.DEFAULT) if (type == WaveType.DEFAULT)
result = new DefaultWave(arena, name, wave, config, path); result = new DefaultWave(arena, name, wave, config, path);
@@ -244,7 +247,8 @@ public class WaveUtils
wellDefined = false; wellDefined = false;
} }
// OPTIONAL: Wave // OPTIONAL: Wave
int wave = config.getInt(path + "wave", frequency); int wave = MAUtils.getInt(config, path + "wave");
//int wave = config.getInt(path + "wave", frequency);
if (wave < 0) if (wave < 0)
{ {
MobArena.warning("'wave' must be greater than 0 in " + path); MobArena.warning("'wave' must be greater than 0 in " + path);
@@ -254,7 +258,8 @@ public class WaveUtils
else if (branch == WaveBranch.SINGLE) else if (branch == WaveBranch.SINGLE)
{ {
// REQUIRED: Wave number // REQUIRED: Wave number
int wave = config.getInt(path + "wave", 0); int wave = MAUtils.getInt(config, path + "wave");
//int wave = config.getInt(path + "wave", 0);
if (wave == 0) if (wave == 0)
{ {
MobArena.warning("Missing 'wave'-node in " + path); MobArena.warning("Missing 'wave'-node in " + path);
@@ -37,6 +37,10 @@ public class SpecialWave extends NormalWave
// Get the valid spawnpoints, and initialize counter // Get the valid spawnpoints, and initialize counter
List<Location> validSpawnpoints = WaveUtils.getValidSpawnpoints(getArena(), getArena().getLivingPlayers()); List<Location> validSpawnpoints = WaveUtils.getValidSpawnpoints(getArena(), getArena().getLivingPlayers());
// Strike some lightning!
for (Location loc : validSpawnpoints)
getWorld().strikeLightningEffect(loc);
// Spawn all the monsters // Spawn all the monsters
spawnAll(getMonstersToSpawn(getArena().getPlayerCount()), validSpawnpoints); spawnAll(getMonstersToSpawn(getArena().getPlayerCount()), validSpawnpoints);
} }