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

Binary file not shown.

View File

@ -213,7 +213,11 @@ public class Arena
{
// Sanity-checks.
if (!running || !arenaPlayers.isEmpty())
{
//System.out.println("Arena was not ended, playercount: " + arenaPlayers.size());
return false;
}
//else System.out.println("Arena ending...");
// Set the boolean.
running = false;
@ -423,6 +427,7 @@ public class Arena
sheepTaskId = -1;
spawnThread = null;
}
else System.out.println("--------- THE SPAWNTHREAD IS NULL! ----------");
// Restore spawn flags.
MAUtils.setSpawnFlags(plugin, world, spawnMonsters, allowMonsters, allowAnimals);
@ -639,11 +644,8 @@ public class Arena
public void repairBlocks()
{
//long start = System.nanoTime();
while (!repairQueue.isEmpty())
{
repairQueue.poll().repair();
}
}
public void queueRepairable(Repairable r)
@ -1289,10 +1291,6 @@ public class Arena
MAUtils.tellPlayer(p, Msg.JOIN_EMPTY_INV);
else if (!canAfford(p))// || !takeFee(p))
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;
return false;

View File

@ -11,6 +11,7 @@ import org.bukkit.block.Sign;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.entity.Slime;
import org.bukkit.entity.Wolf;
import org.bukkit.event.Event.Result;
@ -243,34 +244,51 @@ public class MAListener implements ArenaListener
}, arena.repairDelay);
}
/******************************************************
*
* DEATH LISTENERS
*
******************************************************/
public void onEntityDeath(EntityDeathEvent event)
{
{
if (event.getEntity() instanceof Player)
{
Player p = (Player) event.getEntity();
if (!arena.arenaPlayers.contains(p))
return;
event.getDrops().clear();
arena.playerDeath(p);
return;
}
onPlayerDeath(event, (Player) event.getEntity());
if (arena.monsters.remove(event.getEntity()))
else if (arena.monsters.remove(event.getEntity()))
onMonsterDeath(event);
}
private void onPlayerDeath(EntityDeathEvent event, Player player)
{
if (arena.arenaPlayers.contains(player) || arena.lobbyPlayers.contains(player))
{
EntityDamageEvent e1 = event.getEntity().getLastDamageCause();
EntityDamageByEntityEvent e2 = (e1 instanceof EntityDamageByEntityEvent) ? (EntityDamageByEntityEvent) e1 : null;
Entity damager = (e2 != null) ? e2.getDamager() : null;
if (damager instanceof Player)
arena.playerKill((Player) damager);
event.getDrops().clear();
arena.resetIdleTimer();
return;
event.getDrops().clear();
arena.playerDeath(player);
}
}
private void onMonsterDeath(EntityDeathEvent event)
{
EntityDamageEvent e1 = event.getEntity().getLastDamageCause();
EntityDamageByEntityEvent e2 = (e1 instanceof EntityDamageByEntityEvent) ? (EntityDamageByEntityEvent) e1 : null;
Entity damager = (e2 != null) ? e2.getDamager() : null;
if (damager instanceof Player)
arena.playerKill((Player) damager);
event.getDrops().clear();
arena.resetIdleTimer();
return;
}
/******************************************************
*
* DAMAGE LISTENERS
*
******************************************************/
public void onEntityDamage(EntityDamageEvent event)
{
@ -282,91 +300,108 @@ public class MAListener implements ArenaListener
// Pet wolf
if (damagee instanceof Wolf && arena.pets.contains(damagee))
{
if (damager == null)
{
damagee.setFireTicks(32768);
event.setCancelled(true);
return;
}
else if (damager instanceof Player)
event.setCancelled(true);
else
event.setDamage(0);
return;
}
// Arena player
onPetDamage(event, (Wolf) damagee, damager);
// Player
else if (damagee instanceof Player)
{
if (arena.lobbyPlayers.contains(damagee))
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())
arena.log.players.get((Player) damagee).dmgTaken += event.getDamage();
}
// Other LivingEntity
onPlayerDamage(event, (Player) damagee, damager);
// Monster
else if (arena.monsters.contains(damagee))
{
if (damager instanceof Player)
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 (arena.hellhounds)
pet.setFireTicks(32768);
event.setCancelled(true);
}
// Cancel player and projectile damage
else if (damager instanceof Player || damager instanceof Projectile)
event.setCancelled(true);
// Set damage to 0 for knockbacks from monsters
else event.setDamage(0);
}
private void onMonsterDamage(EntityDamageEvent event, Entity monster, Entity damager)
{
if (damager instanceof Player)
{
if (!arena.arenaPlayers.contains(damager))
{
if (!arena.arenaPlayers.contains(damager))
{
event.setCancelled(true);
return;
}
arena.log.players.get((Player) damager).dmgDone += event.getDamage();
arena.log.players.get((Player) damager).hits++;
}
else if (damager instanceof Wolf && arena.pets.contains(damager))
{
event.setDamage(1);
arena.log.players.get((Player) ((Wolf) damager).getOwner()).dmgDone += event.getDamage();
}
else if (damager instanceof LivingEntity)
{
if (!arena.monsterInfight)
event.setCancelled(true);
event.setCancelled(true);
return;
}
// Boss
if (arena.bossWave != null && damagee.equals(arena.bossWave.getEntity()))
arena.log.players.get((Player) damager).dmgDone += event.getDamage();
arena.log.players.get((Player) damager).hits++;
}
else if (damager instanceof Wolf && arena.pets.contains(damager))
{
event.setDamage(1);
arena.log.players.get((Player) ((Wolf) damager).getOwner()).dmgDone += event.getDamage();
}
else if (damager instanceof LivingEntity)
{
if (!arena.monsterInfight)
event.setCancelled(true);
}
// Boss
if (arena.bossWave != null && monster.equals(arena.bossWave.getEntity()))
{
if (event.getCause() == DamageCause.LIGHTNING)
{
if (event.getCause() == DamageCause.LIGHTNING)
{
event.setCancelled(true);
return;
}
// Subtract boss health, and reset actual entity health
arena.bossWave.subtractHealth(event.getDamage());
arena.bossWave.getEntity().setHealth(100);
// Set damage to 1 for knockback and feedback
event.setDamage(1);
// If the boss is dead, remove the entity and create an explosion!
if (arena.bossWave.getHealth() <= 0)
{
arena.bossWave.clear();
arena.bossWave = null;
}
else if (arena.bossWave.getHealth() <= 100 && !arena.bossWave.isLowHealthAnnounced())
{
MAUtils.tellAll(arena, Msg.WAVE_BOSS_LOW_HEALTH);
arena.bossWave.setLowHealthAnnounced(true);
}
event.setCancelled(true);
return;
}
// Subtract boss health, and reset actual entity health
arena.bossWave.subtractHealth(event.getDamage());
arena.bossWave.getEntity().setHealth(100);
// Set damage to 1 for knockback and feedback
event.setDamage(1);
// If the boss is dead, remove the entity and create an explosion!
if (arena.bossWave.getHealth() <= 0)
{
arena.bossWave.clear();
arena.bossWave = null;
}
else if (arena.bossWave.getHealth() <= 100 && !arena.bossWave.isLowHealthAnnounced())
{
MAUtils.tellAll(arena, Msg.WAVE_BOSS_LOW_HEALTH);
arena.bossWave.setLowHealthAnnounced(true);
}
}
}

View File

@ -386,7 +386,7 @@ public class MAUtils
// If the player isn't online, hack the playerName.dat file
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
ItemStack[] items = new ItemStack[stacks.length-4];
@ -1028,6 +1028,16 @@ public class MAUtils
return false;
}
public static int getInt(Configuration config, String path)
{
Object o = config.getProperty(path);
if (o instanceof Integer)
return (Integer) o;
return 0;
}
/* ///////////////////////////////////////////////////////////////////// //

View File

@ -21,14 +21,12 @@ import com.nijikokun.bukkit.Permissions.Permissions;
import com.garbagemule.MobArena.util.FileUtils;
import com.garbagemule.register.payment.Method;
import com.garbagemule.register.payment.Methods;
//import com.garbagemule.ArenaPlugin.ArenaPlugin;
//import com.garbagemule.ArenaPlugin.Master;
/**
* MobArena
* @author garbagemule
*/
public class MobArena extends JavaPlugin// implements ArenaPlugin
public class MobArena extends JavaPlugin
{
private Configuration config;
private ArenaMaster am;
@ -120,7 +118,6 @@ public class MobArena extends JavaPlugin// implements ArenaPlugin
// Register events.
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_PHYSICS, blockListener, Priority.Normal, 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.PLAYER_INTERACT, playerListener, Priority.Normal, this);
@ -145,8 +142,8 @@ public class MobArena extends JavaPlugin// implements ArenaPlugin
public boolean has(Player p, String s)
{
// First check for NijikoPerms
if (permissionHandler != null)
return permissionHandler.has(p, s);
//if (permissionHandler != null)
// return permissionHandler.has(p, s);
// If the permission is set, check if player has permission
if (p.isPermissionSet(s))

View File

@ -12,6 +12,7 @@ import org.bukkit.entity.Player;
import org.bukkit.util.config.Configuration;
import com.garbagemule.MobArena.Arena;
import com.garbagemule.MobArena.MAUtils;
import com.garbagemule.MobArena.MobArena;
import com.garbagemule.MobArena.waves.*;
import com.garbagemule.MobArena.waves.Wave.*;
@ -174,7 +175,8 @@ public class WaveUtils
{
int frequency = config.getInt(path + "frequency", 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)
result = new DefaultWave(arena, name, wave, frequency, priority, config, path);
@ -187,7 +189,8 @@ public class WaveUtils
}
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)
result = new DefaultWave(arena, name, wave, config, path);
@ -244,7 +247,8 @@ public class WaveUtils
wellDefined = false;
}
// 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)
{
MobArena.warning("'wave' must be greater than 0 in " + path);
@ -254,7 +258,8 @@ public class WaveUtils
else if (branch == WaveBranch.SINGLE)
{
// 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)
{
MobArena.warning("Missing 'wave'-node in " + path);

View File

@ -37,6 +37,10 @@ public class SpecialWave extends NormalWave
// Get the valid spawnpoints, and initialize counter
List<Location> validSpawnpoints = WaveUtils.getValidSpawnpoints(getArena(), getArena().getLivingPlayers());
// Strike some lightning!
for (Location loc : validSpawnpoints)
getWorld().strikeLightningEffect(loc);
// Spawn all the monsters
spawnAll(getMonstersToSpawn(getArena().getPlayerCount()), validSpawnpoints);
}