v0.90.1 - Fixed Creeper instant deaths and other bugs. This is no longer block break.

This commit is contained in:
Garbage Mule
2011-06-14 03:35:24 +02:00
parent 6e72e4e83a
commit 7805843713
25 changed files with 74 additions and 97 deletions
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
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.90 version: 0.90.1
commands: commands:
ma: ma:
description: Base command for MobArena description: Base command for MobArena
+10 -12
View File
@@ -3,7 +3,6 @@ package com.garbagemule.MobArena;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@@ -161,6 +160,9 @@ public class ArenaManager
isRunning = true; isRunning = true;
readySet.clear(); readySet.clear();
// Clear the floor for good measure.
clearEntities();
for (Player p : playerSet) for (Player p : playerSet)
{ {
p.teleport(arenaLoc); p.teleport(arenaLoc);
@@ -293,11 +295,8 @@ public class ArenaManager
p.setHealth(20); p.setHealth(20);
tellAll(p.getName() + " died!"); tellAll(p.getName() + " died!");
//if (playerSet.contains(p)) playerSet.remove(p);
playerSet.remove(p); classMap.remove(p);
//if (classMap.keySet().contains(p))
classMap.remove(p);
if (isRunning && playerSet.isEmpty()) if (isRunning && playerSet.isEmpty())
endArena(); endArena();
@@ -384,10 +383,9 @@ public class ArenaManager
return; return;
} }
Iterator<Player> iterator = ArenaManager.playerSet.iterator(); Set<Player> set = new HashSet<Player>(playerSet);
while (iterator.hasNext()) for (Player player : set)
{ {
Player player = iterator.next();
if (!ArenaManager.readySet.contains(player)) if (!ArenaManager.readySet.contains(player))
ArenaManager.playerLeave(player); ArenaManager.playerLeave(player);
} }
@@ -407,9 +405,9 @@ public class ArenaManager
return; return;
} }
Iterator<Player> iterator = ArenaManager.playerSet.iterator(); Set<Player> set = new HashSet<Player>(playerSet);
while (iterator.hasNext()) for (Player player : set)
ArenaManager.playerLeave(iterator.next()); ArenaManager.playerLeave(player);
// Just for good measure. // Just for good measure.
endArena(); endArena();
@@ -19,24 +19,6 @@ public class MABlockListener extends BlockListener
public MABlockListener(MobArena instance) 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. * 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) if (ArenaManager.blockSet.remove(b) || b.getType() == Material.TNT)
return; return;
System.out.println("This is block break.");
if (MAUtils.inRegion(b.getLocation())) if (MAUtils.inRegion(b.getLocation()))
event.setCancelled(true); event.setCancelled(true);
} }
+2 -2
View File
@@ -223,7 +223,7 @@ public class MACommands implements CommandExecutor
} }
// ma setregion [p1|p2] // ma setregion [p1|p2]
if (cmd.equalsIgnoreCase("setregion")) if (cmd.equals("setregion"))
{ {
if (!arg.equals("p1") && !arg.equals("p2")) if (!arg.equals("p1") && !arg.equals("p2"))
{ {
@@ -240,7 +240,7 @@ public class MACommands implements CommandExecutor
} }
// ma expandregion [up|down|out] <amount> // ma expandregion [up|down|out] <amount>
if (cmd.equalsIgnoreCase("expandregion")) if (cmd.equals("expandregion"))
{ {
if (ArenaManager.p1 == null || ArenaManager.p2 == null) if (ArenaManager.p1 == null || ArenaManager.p2 == null)
{ {
@@ -4,8 +4,6 @@ import org.bukkit.entity.Player;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
import org.bukkit.event.entity.EntityListener; import org.bukkit.event.entity.EntityListener;
import org.bukkit.event.entity.EntityDeathEvent; 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. * 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) 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.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.inventory.ItemStack; 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.EntityListener;
import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.event.entity.EntityCombustEvent; import org.bukkit.event.entity.EntityCombustEvent;
@@ -24,15 +26,41 @@ public class MAMonsterListener extends EntityListener
plugin = instance; 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. * Handles all explosion events, also from TNT.
*/ */
public void onEntityExplode(EntityExplodeEvent event) public void onEntityExplode(EntityExplodeEvent event)
{ {
/* This could be done by simply cancelling the event, but that // Check if any of the block "victims" are in the region.
* also cancels the explosion animation. This is a workaround. */
if (!MAUtils.inRegion(event.getLocation())) 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. // Don't drop any blocks from the explosion.
event.setYield(0); event.setYield(0);
@@ -5,6 +5,7 @@ import org.bukkit.Location;
import org.bukkit.entity.Wolf; import org.bukkit.entity.Wolf;
import org.bukkit.entity.Ghast; import org.bukkit.entity.Ghast;
import org.bukkit.entity.Slime; import org.bukkit.entity.Slime;
import org.bukkit.entity.Creeper;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Creature; import org.bukkit.entity.Creature;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
@@ -146,9 +147,10 @@ public class MASpawnThread implements Runnable
ran = random.nextInt(dGhasts); ran = random.nextInt(dGhasts);
int count; int count;
boolean slime = false; boolean slime = false;
boolean wolf = false; boolean wolf = false;
boolean ghast = false; boolean ghast = false;
boolean creeper = false;
if (ran < dPoweredCreepers) mob = CreatureType.CREEPER; if (ran < dPoweredCreepers) mob = CreatureType.CREEPER;
else if (ran < dPigZombies) mob = CreatureType.PIG_ZOMBIE; else if (ran < dPigZombies) mob = CreatureType.PIG_ZOMBIE;
@@ -164,6 +166,7 @@ public class MASpawnThread implements Runnable
{ {
case CREEPER: case CREEPER:
count = noOfPlayers * 3; count = noOfPlayers * 3;
creeper = true;
break; break;
case PIG_ZOMBIE: case PIG_ZOMBIE:
count = noOfPlayers * 2; count = noOfPlayers * 2;
@@ -202,9 +205,10 @@ public class MASpawnThread implements Runnable
else else
System.out.println("MASpawnThread - monsterSet contains this entity"); System.out.println("MASpawnThread - monsterSet contains this entity");
if (slime) ((Slime)e).setSize(2); if (slime) ((Slime)e).setSize(2);
if (wolf) ((Wolf)e).setAngry(true); if (wolf) ((Wolf)e).setAngry(true);
if (ghast) ((Ghast)e).setHealth(Math.min(noOfPlayers*25, 200)); if (ghast) ((Ghast)e).setHealth(Math.min(noOfPlayers*25, 200));
if (creeper) ((Creeper)e).setPowered(true);
// Slimes can't have targets, apparently. // Slimes can't have targets, apparently.
if (!(e instanceof Creature)) if (!(e instanceof Creature))
@@ -421,6 +421,9 @@ public class MAUtils
if (!loc.getWorld().getName().equals(ArenaManager.world.getName())) if (!loc.getWorld().getName().equals(ArenaManager.world.getName()))
return false; return false;
if (!ArenaManager.isSetup)
return false;
Location p1 = ArenaManager.p1; Location p1 = ArenaManager.p1;
Location p2 = ArenaManager.p2; Location p2 = ArenaManager.p2;
@@ -593,6 +596,7 @@ public class MAUtils
(ArenaManager.dSkeletons != -1) && (ArenaManager.dSkeletons != -1) &&
(ArenaManager.dSpiders != -1) && (ArenaManager.dSpiders != -1) &&
(ArenaManager.dCreepers != -1) && (ArenaManager.dCreepers != -1) &&
(ArenaManager.dWolves != -1) &&
(ArenaManager.classes.size() > 0) && (ArenaManager.classes.size() > 0) &&
(ArenaManager.spawnpoints.size() > 0)); (ArenaManager.spawnpoints.size() > 0));
} }
+14 -15
View File
@@ -55,21 +55,20 @@ public class MobArena extends JavaPlugin
// Register events. // Register events.
pm.registerEvent(Event.Type.PLAYER_COMMAND_PREPROCESS, commandListener, Priority.Monitor, this); 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_INTERACT, lobbyListener, Priority.Normal, this);
pm.registerEvent(Event.Type.PLAYER_DROP_ITEM, 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_BUCKET_EMPTY, lobbyListener, Priority.Normal, this);
pm.registerEvent(Event.Type.PLAYER_TELEPORT, teleportListener, 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_QUIT, discListener, Priority.Normal, this);
pm.registerEvent(Event.Type.PLAYER_KICK, 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.PLAYER_JOIN, discListener, Priority.Normal, this);
pm.registerEvent(Event.Type.BLOCK_BREAK, blockListener, 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.BLOCK_PLACE, blockListener, Priority.Normal, this); pm.registerEvent(Event.Type.ENTITY_DEATH, damageListener, Priority.Normal, this);
pm.registerEvent(Event.Type.ENTITY_DAMAGE, damageListener, Priority.Normal, this); pm.registerEvent(Event.Type.ENTITY_EXPLODE, monsterListener, Priority.Normal, this);
pm.registerEvent(Event.Type.ENTITY_DEATH, damageListener, Priority.Normal, this); pm.registerEvent(Event.Type.ENTITY_COMBUST, monsterListener, Priority.Normal, this);
pm.registerEvent(Event.Type.ENTITY_EXPLODE, monsterListener, Priority.Normal, this); pm.registerEvent(Event.Type.ENTITY_TARGET, monsterListener, Priority.Normal, this);
pm.registerEvent(Event.Type.ENTITY_COMBUST, monsterListener, Priority.Normal, this); pm.registerEvent(Event.Type.CREATURE_SPAWN, monsterListener, Priority.Normal, this);
pm.registerEvent(Event.Type.ENTITY_TARGET, monsterListener, Priority.Normal, this);
System.out.println(pdfFile.getName() + " v" + pdfFile.getVersion() + " enabled." ); System.out.println(pdfFile.getName() + " v" + pdfFile.getVersion() + " enabled." );
} }