Cleanup the EntityListener a bit

Save worlds when they are initialized
Add Some test data for the list types since they don't show up
Working on the respawn issue still...
This commit is contained in:
Eric Stokes 2011-06-04 17:01:43 -04:00
parent 1971b8fc4e
commit 7ff5c518f4
4 changed files with 71 additions and 78 deletions

View File

@ -1,21 +1,13 @@
package com.onarandombox.MultiverseCore;
import java.util.List;
import org.bukkit.ChatColor;
import org.bukkit.World;
import org.bukkit.entity.Animals;
import org.bukkit.entity.CreatureType;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Ghast;
import org.bukkit.entity.Monster;
import org.bukkit.entity.PigZombie;
import org.bukkit.entity.Player;
import org.bukkit.entity.Slime;
import org.bukkit.event.entity.CreatureSpawnEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageByProjectileEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.event.entity.EntityListener;
@ -36,48 +28,6 @@ public class MVEntityListener extends EntityListener {
}
// public void onExplosionPrimed(ExplosionPrimedEvent event){
// if(event.getEntity() instanceof Fireball){
// MultiVerseCore.log.info();
// Fireballs on Explode trigger this, sadly we can't get the blocks it would destroy... thats onEntityExplode
// However can't figure out a way to check in onEntityExplode if it was a Fireball which caused it...
// }
// }
@Override
public void onEntityDamage(EntityDamageEvent event) {
if (event.isCancelled())
return;
Entity attacker = null;
Entity defender = event.getEntity();
World w = defender.getWorld();
if (!(plugin.configWorlds.getBoolean("worlds." + w.getName() + ".enablehealth", true))) {
event.setCancelled(true);
return;
}
if (event instanceof EntityDamageByEntityEvent) {
attacker = ((EntityDamageByEntityEvent) event).getDamager();
} else if (event instanceof EntityDamageByProjectileEvent) {
attacker = ((EntityDamageByProjectileEvent) event).getDamager();
}
if (attacker == null || defender == null) {
return;
}
if (defender instanceof Player && attacker instanceof Player) {
Player player = (Player) attacker;
if (!(this.plugin.worlds.get(w.getName()).pvp)) {
this.plugin.getPlayerSession(player).message(ChatColor.RED + "PVP is disabled in this World.");
event.setCancelled(true);
return;
}
}
}
/**
* Handle Animal/Monster Spawn settings, seems like a more concrete method than using CraftBukkit.
*/
@ -143,24 +93,6 @@ public class MVEntityListener extends EntityListener {
}
}
}
/**
* Ghast Handling -- This should only be temporary, noticed a bug where Ghasts would keep spawning and flood the Nether.
* However not sure about it... not sure of the effect on performance... got a few 'server overloaded' warnings through testing but not sure of the cause.
*/
if (event.getEntity() instanceof Ghast) {
List<Entity> entities = world.getEntities();
int count = 0;
for (Entity entity : entities) {
if (entity instanceof Ghast) {
if (count >= plugin.configMV.getInt("ghastlimit", 50)) {
event.setCancelled(true);
return;
}
count++;
}
}
}
}
}

View File

@ -1,5 +1,7 @@
package com.onarandombox.MultiverseCore;
import java.util.logging.Logger;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerChatEvent;
@ -12,7 +14,7 @@ import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.event.player.PlayerTeleportEvent;
public class MVPlayerListener extends PlayerListener {
private final Logger log = Logger.getLogger("Minecraft");
MultiverseCore plugin;
public MVPlayerListener(MultiverseCore plugin) {
@ -55,7 +57,12 @@ public class MVPlayerListener extends PlayerListener {
@Override
public void onPlayerRespawn(PlayerRespawnEvent event) {
// TODO: Handle Global Respawn from config
// TODO: Handle Alternate Respawn from config
Location l = null;
log.warning(event.getPlayer().getWorld().getName());
}
@Override

View File

@ -45,31 +45,80 @@ public class MVWorld {
this.name = world.getName();
this.environment = world.getEnvironment();
this.seed = seed;
initLists();
this.alias = config.getString("worlds." + this.name + ".alias", "");
this.pvp = config.getBoolean("worlds." + this.name + ".pvp", true);
this.compression = config.getDouble("worlds." + this.name + ".compression", 1.0);
this.joinWhitelist = config.getStringList("worlds." + name + ".playerWhitelist", new ArrayList<String>());
this.joinBlacklist = config.getStringList("worlds." + name + ".playerBlacklist", new ArrayList<String>());
this.worldBlacklist = config.getStringList("worlds." + name + ".worldBlacklist", new ArrayList<String>());
this.blockBlacklist = config.getStringList("worlds." + name + ".blockBlacklist", new ArrayList<String>());
this.editWhitelist = config.getStringList("worlds." + name + ".editWhitelist", new ArrayList<String>());
this.editBlacklist = config.getStringList("worlds." + name + ".editBlacklist", new ArrayList<String>());
this.joinWhitelist = config.getStringList("worlds." + name + ".playerWhitelist", joinWhitelist);
this.joinBlacklist = config.getStringList("worlds." + name + ".playerBlacklist", joinBlacklist);
this.worldBlacklist = config.getStringList("worlds." + name + ".worldBlacklist", worldBlacklist);
this.blockBlacklist = config.getStringList("worlds." + name + ".blockBlacklist", blockBlacklist);
this.editWhitelist = config.getStringList("worlds." + name + ".editWhitelist", editWhitelist);
this.editBlacklist = config.getStringList("worlds." + name + ".editBlacklist", editBlacklist);
this.animals = config.getBoolean("worlds." + name + ".animals.spawn", true);
this.monsters = config.getBoolean("worlds." + name + ".monsters.spawn", true);
List<String> temp;
temp = config.getStringList("worlds." + name + ".animals.exceptions", new ArrayList<String>());
temp = config.getStringList("worlds." + name + ".animals.exceptions", animalList);
this.animalList.clear();
for (String s : temp) {
this.animalList.add(s.toUpperCase());
System.out.print(s);
}
temp = config.getStringList("worlds." + name + ".monsters.exceptions", new ArrayList<String>());
temp = config.getStringList("worlds." + name + ".monsters.exceptions", monsterList);
for (String s : temp) {
this.monsterList.add(s.toUpperCase());
System.out.print(s);
}
config.save();
addSampleData();
}
private void initLists() {
blockBlacklist = new ArrayList<String>();
joinWhitelist = new ArrayList<String>();
joinBlacklist = new ArrayList<String>();
editWhitelist = new ArrayList<String>();
editBlacklist = new ArrayList<String>();
worldBlacklist = new ArrayList<String>();
}
public void addSampleData() {
this.monsterList.add("creeper");
this.animalList.add("pig");
this.blockBlacklist.add("49");
this.joinWhitelist.add("fernferret");
this.joinWhitelist.add("g:Admins");
this.joinBlacklist.add("Rigby90");
this.joinBlacklist.add("g:Banned");
this.editWhitelist.add("fernferret");
this.editWhitelist.add("g:Admins");
this.editBlacklist.add("Rigby90");
this.editBlacklist.add("g:Banned");
this.worldBlacklist.add("world5");
this.worldBlacklist.add("A world with spaces");
this.config.setProperty("worlds." + name + ".animals.exceptions", animalList);
this.config.setProperty("worlds." + name + ".monsters.exceptions", monsterList);
this.config.setProperty("worlds." + name + ".blockBlacklist", blockBlacklist);
this.config.setProperty("worlds." + name + ".playerWhitelist", joinWhitelist);
this.config.setProperty("worlds." + name + ".playerBlacklist", joinBlacklist);
this.config.setProperty("worlds." + name + ".editWhitelist", editWhitelist);
this.config.setProperty("worlds." + name + ".editBlacklist", editBlacklist);
this.config.setProperty("worlds." + name + ".worldBlacklist", worldBlacklist);
this.config.save();
}
}

View File

@ -419,12 +419,17 @@ public class MultiverseCore extends JavaPlugin {
if (seed != null) {
World world = getServer().createWorld(name, environment, seed);
worlds.put(name, new MVWorld(world, configWorlds, this, seed)); // Place the World into the HashMap.
// configWorlds.setProperty("worlds." + world.getName() + ".environment", environment.toString());
// configWorlds.save();
System.out.print("Seed - " + getSeed(world));
} else {
World world = getServer().createWorld(name, environment);
worlds.put(name, new MVWorld(world, configWorlds, this, null)); // Place the World into the HashMap.
// configWorlds.setProperty("worlds." + world.getName() + ".environment", environment.toString());
// configWorlds.save();
System.out.print("Seed - " + getSeed(world));
}
}
public void addWorld(String name, Environment environment) {