mirror of
https://github.com/garbagemule/MobArena.git
synced 2025-02-02 21:51:21 +01:00
Code cleanup, and projectiles should no longer damage pet wolves.
This commit is contained in:
parent
cc1ba24ef8
commit
ff7329e3c4
BIN
MobArena.jar
BIN
MobArena.jar
Binary file not shown.
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ///////////////////////////////////////////////////////////////////// //
|
||||
|
@ -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))
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user