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
+10 -12
View File
@@ -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);
}
+2 -2
View File
@@ -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));
}
+14 -15
View File
@@ -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." );
}