v0.90.1 - Fixed Creeper instant deaths and other bugs. This is no longer block break.
This commit is contained in:
@@ -3,7 +3,6 @@ package com.garbagemule.MobArena;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
@@ -161,6 +160,9 @@ public class ArenaManager
|
||||
isRunning = true;
|
||||
readySet.clear();
|
||||
|
||||
// Clear the floor for good measure.
|
||||
clearEntities();
|
||||
|
||||
for (Player p : playerSet)
|
||||
{
|
||||
p.teleport(arenaLoc);
|
||||
@@ -293,11 +295,8 @@ public class ArenaManager
|
||||
p.setHealth(20);
|
||||
tellAll(p.getName() + " died!");
|
||||
|
||||
//if (playerSet.contains(p))
|
||||
playerSet.remove(p);
|
||||
|
||||
//if (classMap.keySet().contains(p))
|
||||
classMap.remove(p);
|
||||
playerSet.remove(p);
|
||||
classMap.remove(p);
|
||||
|
||||
if (isRunning && playerSet.isEmpty())
|
||||
endArena();
|
||||
@@ -384,10 +383,9 @@ public class ArenaManager
|
||||
return;
|
||||
}
|
||||
|
||||
Iterator<Player> iterator = ArenaManager.playerSet.iterator();
|
||||
while (iterator.hasNext())
|
||||
Set<Player> set = new HashSet<Player>(playerSet);
|
||||
for (Player player : set)
|
||||
{
|
||||
Player player = iterator.next();
|
||||
if (!ArenaManager.readySet.contains(player))
|
||||
ArenaManager.playerLeave(player);
|
||||
}
|
||||
@@ -407,9 +405,9 @@ public class ArenaManager
|
||||
return;
|
||||
}
|
||||
|
||||
Iterator<Player> iterator = ArenaManager.playerSet.iterator();
|
||||
while (iterator.hasNext())
|
||||
ArenaManager.playerLeave(iterator.next());
|
||||
Set<Player> set = new HashSet<Player>(playerSet);
|
||||
for (Player player : set)
|
||||
ArenaManager.playerLeave(player);
|
||||
|
||||
// Just for good measure.
|
||||
endArena();
|
||||
|
||||
@@ -19,24 +19,6 @@ public class MABlockListener extends BlockListener
|
||||
public MABlockListener(MobArena instance)
|
||||
{
|
||||
}
|
||||
|
||||
/* Removed for testing purposes.
|
||||
public void onBlockDamage(BlockDamageEvent event)
|
||||
{
|
||||
if (!ArenaManager.isSetup || !ArenaManager.isProtected)
|
||||
return;
|
||||
|
||||
Block b = event.getBlock();
|
||||
|
||||
if (ArenaManager.blockSet.contains(b))
|
||||
return;
|
||||
|
||||
System.out.println("This is block damage.");
|
||||
|
||||
if (MAUtils.inRegion(b.getLocation()))
|
||||
event.setCancelled(true);
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
* Prevents blocks from breaking if block protection is on.
|
||||
@@ -51,8 +33,6 @@ public class MABlockListener extends BlockListener
|
||||
if (ArenaManager.blockSet.remove(b) || b.getType() == Material.TNT)
|
||||
return;
|
||||
|
||||
System.out.println("This is block break.");
|
||||
|
||||
if (MAUtils.inRegion(b.getLocation()))
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@@ -223,7 +223,7 @@ public class MACommands implements CommandExecutor
|
||||
}
|
||||
|
||||
// ma setregion [p1|p2]
|
||||
if (cmd.equalsIgnoreCase("setregion"))
|
||||
if (cmd.equals("setregion"))
|
||||
{
|
||||
if (!arg.equals("p1") && !arg.equals("p2"))
|
||||
{
|
||||
@@ -240,7 +240,7 @@ public class MACommands implements CommandExecutor
|
||||
}
|
||||
|
||||
// ma expandregion [up|down|out] <amount>
|
||||
if (cmd.equalsIgnoreCase("expandregion"))
|
||||
if (cmd.equals("expandregion"))
|
||||
{
|
||||
if (ArenaManager.p1 == null || ArenaManager.p2 == null)
|
||||
{
|
||||
|
||||
@@ -4,8 +4,6 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.event.entity.EntityListener;
|
||||
import org.bukkit.event.entity.EntityDeathEvent;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
import org.bukkit.event.entity.CreatureSpawnEvent;
|
||||
|
||||
/**
|
||||
* This listener acts as a type of death-listener.
|
||||
@@ -22,28 +20,9 @@ public class MADamageListener extends EntityListener
|
||||
{
|
||||
}
|
||||
|
||||
public void onEntityDamage(EntityDamageEvent event)
|
||||
{
|
||||
if (!ArenaManager.isRunning)
|
||||
return;
|
||||
|
||||
if (!(event.getEntity() instanceof Player))
|
||||
return;
|
||||
|
||||
Player p = (Player) event.getEntity();
|
||||
|
||||
if (!ArenaManager.playerSet.contains(p))
|
||||
return;
|
||||
|
||||
if (p.getHealth() > event.getDamage())
|
||||
return;
|
||||
|
||||
event.setCancelled(true);
|
||||
ArenaManager.playerDeath(p);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears all player/monster drops on death.
|
||||
* Clears all player/monster drops on death. Also handles
|
||||
* player death events.
|
||||
*/
|
||||
public void onEntityDeath(EntityDeathEvent event)
|
||||
{
|
||||
@@ -71,19 +50,4 @@ public class MADamageListener extends EntityListener
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevents monsters from spawning inside the arena unless
|
||||
* it's running.
|
||||
*/
|
||||
public void onCreatureSpawn(CreatureSpawnEvent event)
|
||||
{
|
||||
if (!MAUtils.inRegion(event.getLocation()))
|
||||
return;
|
||||
|
||||
if (!(event.getEntity() instanceof LivingEntity))
|
||||
return;
|
||||
|
||||
if (!ArenaManager.isRunning)
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,8 @@ import java.util.HashMap;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.event.entity.CreatureSpawnEvent;
|
||||
import org.bukkit.event.entity.EntityListener;
|
||||
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||
import org.bukkit.event.entity.EntityCombustEvent;
|
||||
@@ -24,15 +26,41 @@ public class MAMonsterListener extends EntityListener
|
||||
plugin = instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevents monsters from spawning inside the arena unless
|
||||
* it's running.
|
||||
*/
|
||||
public void onCreatureSpawn(CreatureSpawnEvent event)
|
||||
{
|
||||
if (!MAUtils.inRegion(event.getLocation()))
|
||||
return;
|
||||
|
||||
if (!(event.getEntity() instanceof LivingEntity))
|
||||
return;
|
||||
|
||||
if (!ArenaManager.isRunning)
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles all explosion events, also from TNT.
|
||||
*/
|
||||
public void onEntityExplode(EntityExplodeEvent event)
|
||||
{
|
||||
/* This could be done by simply cancelling the event, but that
|
||||
* also cancels the explosion animation. This is a workaround. */
|
||||
// Check if any of the block "victims" are in the region.
|
||||
if (!MAUtils.inRegion(event.getLocation()))
|
||||
return;
|
||||
{
|
||||
boolean inRegion = false;
|
||||
for (Block b : event.blockList())
|
||||
{
|
||||
if (!MAUtils.inRegion(b.getLocation()))
|
||||
continue;
|
||||
inRegion = true;
|
||||
break;
|
||||
}
|
||||
if (!inRegion)
|
||||
return;
|
||||
}
|
||||
|
||||
// Don't drop any blocks from the explosion.
|
||||
event.setYield(0);
|
||||
|
||||
@@ -5,6 +5,7 @@ import org.bukkit.Location;
|
||||
import org.bukkit.entity.Wolf;
|
||||
import org.bukkit.entity.Ghast;
|
||||
import org.bukkit.entity.Slime;
|
||||
import org.bukkit.entity.Creeper;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Creature;
|
||||
import org.bukkit.entity.Entity;
|
||||
@@ -146,9 +147,10 @@ public class MASpawnThread implements Runnable
|
||||
ran = random.nextInt(dGhasts);
|
||||
|
||||
int count;
|
||||
boolean slime = false;
|
||||
boolean wolf = false;
|
||||
boolean ghast = false;
|
||||
boolean slime = false;
|
||||
boolean wolf = false;
|
||||
boolean ghast = false;
|
||||
boolean creeper = false;
|
||||
|
||||
if (ran < dPoweredCreepers) mob = CreatureType.CREEPER;
|
||||
else if (ran < dPigZombies) mob = CreatureType.PIG_ZOMBIE;
|
||||
@@ -164,6 +166,7 @@ public class MASpawnThread implements Runnable
|
||||
{
|
||||
case CREEPER:
|
||||
count = noOfPlayers * 3;
|
||||
creeper = true;
|
||||
break;
|
||||
case PIG_ZOMBIE:
|
||||
count = noOfPlayers * 2;
|
||||
@@ -202,9 +205,10 @@ public class MASpawnThread implements Runnable
|
||||
else
|
||||
System.out.println("MASpawnThread - monsterSet contains this entity");
|
||||
|
||||
if (slime) ((Slime)e).setSize(2);
|
||||
if (wolf) ((Wolf)e).setAngry(true);
|
||||
if (ghast) ((Ghast)e).setHealth(Math.min(noOfPlayers*25, 200));
|
||||
if (slime) ((Slime)e).setSize(2);
|
||||
if (wolf) ((Wolf)e).setAngry(true);
|
||||
if (ghast) ((Ghast)e).setHealth(Math.min(noOfPlayers*25, 200));
|
||||
if (creeper) ((Creeper)e).setPowered(true);
|
||||
|
||||
// Slimes can't have targets, apparently.
|
||||
if (!(e instanceof Creature))
|
||||
|
||||
@@ -421,6 +421,9 @@ public class MAUtils
|
||||
if (!loc.getWorld().getName().equals(ArenaManager.world.getName()))
|
||||
return false;
|
||||
|
||||
if (!ArenaManager.isSetup)
|
||||
return false;
|
||||
|
||||
Location p1 = ArenaManager.p1;
|
||||
Location p2 = ArenaManager.p2;
|
||||
|
||||
@@ -593,6 +596,7 @@ public class MAUtils
|
||||
(ArenaManager.dSkeletons != -1) &&
|
||||
(ArenaManager.dSpiders != -1) &&
|
||||
(ArenaManager.dCreepers != -1) &&
|
||||
(ArenaManager.dWolves != -1) &&
|
||||
(ArenaManager.classes.size() > 0) &&
|
||||
(ArenaManager.spawnpoints.size() > 0));
|
||||
}
|
||||
|
||||
@@ -55,21 +55,20 @@ public class MobArena extends JavaPlugin
|
||||
|
||||
// Register events.
|
||||
pm.registerEvent(Event.Type.PLAYER_COMMAND_PREPROCESS, commandListener, Priority.Monitor, this);
|
||||
pm.registerEvent(Event.Type.PLAYER_INTERACT, lobbyListener, Priority.Normal, this);
|
||||
pm.registerEvent(Event.Type.PLAYER_DROP_ITEM, lobbyListener, Priority.Normal, this);
|
||||
pm.registerEvent(Event.Type.PLAYER_BUCKET_EMPTY, lobbyListener, Priority.Normal, this);
|
||||
pm.registerEvent(Event.Type.PLAYER_TELEPORT, teleportListener, Priority.Normal, this);
|
||||
pm.registerEvent(Event.Type.PLAYER_QUIT, discListener, Priority.Normal, this);
|
||||
pm.registerEvent(Event.Type.PLAYER_KICK, discListener, Priority.Normal, this);
|
||||
pm.registerEvent(Event.Type.PLAYER_JOIN, discListener, Priority.Normal, this);
|
||||
pm.registerEvent(Event.Type.BLOCK_BREAK, blockListener, Priority.Normal, this);
|
||||
//pm.registerEvent(Event.Type.BLOCK_DAMAGE, blockListener, Priority.Normal, this);
|
||||
pm.registerEvent(Event.Type.BLOCK_PLACE, blockListener, Priority.Normal, this);
|
||||
pm.registerEvent(Event.Type.ENTITY_DAMAGE, damageListener, Priority.Normal, this);
|
||||
pm.registerEvent(Event.Type.ENTITY_DEATH, damageListener, Priority.Normal, this);
|
||||
pm.registerEvent(Event.Type.ENTITY_EXPLODE, monsterListener, Priority.Normal, this);
|
||||
pm.registerEvent(Event.Type.ENTITY_COMBUST, monsterListener, Priority.Normal, this);
|
||||
pm.registerEvent(Event.Type.ENTITY_TARGET, monsterListener, Priority.Normal, this);
|
||||
pm.registerEvent(Event.Type.PLAYER_INTERACT, lobbyListener, Priority.Normal, this);
|
||||
pm.registerEvent(Event.Type.PLAYER_DROP_ITEM, lobbyListener, Priority.Normal, this);
|
||||
pm.registerEvent(Event.Type.PLAYER_BUCKET_EMPTY, lobbyListener, Priority.Normal, this);
|
||||
pm.registerEvent(Event.Type.PLAYER_TELEPORT, teleportListener, Priority.Normal, this);
|
||||
pm.registerEvent(Event.Type.PLAYER_QUIT, discListener, Priority.Normal, this);
|
||||
pm.registerEvent(Event.Type.PLAYER_KICK, discListener, Priority.Normal, this);
|
||||
pm.registerEvent(Event.Type.PLAYER_JOIN, discListener, Priority.Normal, this);
|
||||
pm.registerEvent(Event.Type.BLOCK_BREAK, blockListener, Priority.Normal, this);
|
||||
pm.registerEvent(Event.Type.BLOCK_PLACE, blockListener, Priority.Normal, this);
|
||||
pm.registerEvent(Event.Type.ENTITY_DEATH, damageListener, Priority.Normal, this);
|
||||
pm.registerEvent(Event.Type.ENTITY_EXPLODE, monsterListener, Priority.Normal, this);
|
||||
pm.registerEvent(Event.Type.ENTITY_COMBUST, monsterListener, Priority.Normal, this);
|
||||
pm.registerEvent(Event.Type.ENTITY_TARGET, monsterListener, Priority.Normal, this);
|
||||
pm.registerEvent(Event.Type.CREATURE_SPAWN, monsterListener, Priority.Normal, this);
|
||||
|
||||
System.out.println(pdfFile.getName() + " v" + pdfFile.getVersion() + " enabled." );
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user