Multiverse-Core/src/main/java/com/onarandombox/MultiverseCore/listeners/MVEntityListener.java

123 lines
4.7 KiB
Java
Raw Normal View History

/******************************************************************************
* Multiverse 2 Copyright (c) the Multiverse Team 2011. *
* Multiverse 2 is licensed under the BSD License. *
* For more information please check the README.md file included *
* with this project. *
******************************************************************************/
2011-07-30 02:09:48 +02:00
package com.onarandombox.MultiverseCore.listeners;
2011-07-20 16:48:46 +02:00
2020-12-12 03:49:49 +01:00
import com.dumptruckman.minecraft.util.Logging;
2011-09-25 17:14:17 +02:00
import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.api.MVWorldManager;
import com.onarandombox.MultiverseCore.api.MultiverseWorld;
2011-07-20 16:48:46 +02:00
import org.bukkit.World;
2012-03-03 17:07:07 +01:00
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
2012-01-23 05:44:43 +01:00
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.CreatureSpawnEvent;
2011-07-20 16:48:46 +02:00
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
import org.bukkit.event.entity.EntityPortalEvent;
import org.bukkit.event.entity.EntityRegainHealthEvent;
2011-07-20 16:48:46 +02:00
import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason;
import org.bukkit.event.entity.FoodLevelChangeEvent;
2011-07-20 16:48:46 +02:00
/**
2012-01-23 05:44:43 +01:00
* Multiverse's Entity {@link Listener}.
*/
2012-01-23 05:44:43 +01:00
public class MVEntityListener implements Listener {
private MultiverseCore plugin;
private MVWorldManager worldManager;
2011-07-20 16:48:46 +02:00
public MVEntityListener(MultiverseCore plugin) {
this.plugin = plugin;
2011-10-08 18:57:48 +02:00
this.worldManager = plugin.getMVWorldManager();
2011-07-20 16:48:46 +02:00
}
2012-01-23 05:44:43 +01:00
/**
* This method is called when an entity's food level goes higher or lower.
* @param event The Event that was fired.
*/
@EventHandler
public void foodLevelChange(FoodLevelChangeEvent event) {
if (event.isCancelled()) {
return;
}
2011-09-25 17:14:17 +02:00
if (event.getEntity() instanceof Player) {
2011-09-22 06:15:16 +02:00
Player p = (Player) event.getEntity();
MultiverseWorld w = this.plugin.getMVWorldManager().getMVWorld(p.getWorld().getName());
2011-09-25 17:14:17 +02:00
if (w != null && !w.getHunger()) {
// If the world has hunger set to false, do not let the level go down
2011-09-25 17:14:17 +02:00
if (event.getFoodLevel() < ((Player) event.getEntity()).getFoodLevel()) {
event.setCancelled(true);
}
2011-09-22 06:15:16 +02:00
}
}
}
2012-01-23 05:44:43 +01:00
/**
* This method is called when an entity's health goes up or down.
* @param event The Event that was fired.
*/
@EventHandler
public void entityRegainHealth(EntityRegainHealthEvent event) {
2011-07-20 16:48:46 +02:00
if (event.isCancelled()) {
return;
}
RegainReason reason = event.getRegainReason();
2011-10-11 03:37:58 +02:00
MultiverseWorld world = this.worldManager.getMVWorld(event.getEntity().getLocation().getWorld());
if (world != null && reason == RegainReason.REGEN && !world.getAutoHeal()) {
2011-07-20 16:48:46 +02:00
event.setCancelled(true);
}
}
/**
* Handle Animal/Monster Spawn settings, seems like a more concrete method than using CraftBukkit.
* @param event The event.
*/
2012-01-23 05:44:43 +01:00
@EventHandler
public void creatureSpawn(CreatureSpawnEvent event) {
2011-07-20 16:48:46 +02:00
// Check to see if the Creature is spawned by a plugin, we don't want to prevent this behaviour.
// TODO: Allow the egg thing to be a config param. Doubt this will be per world; seems silly.
if (event.getSpawnReason() == SpawnReason.CUSTOM || event.getSpawnReason() == SpawnReason.SPAWNER_EGG
|| event.getSpawnReason() == SpawnReason.BREEDING) {
2011-07-20 16:48:46 +02:00
return;
}
World world = event.getEntity().getWorld();
if (event.isCancelled())
return;
// Check if it's a world which we are meant to be managing.
if (!(this.worldManager.isMVWorld(world.getName())))
2011-07-20 16:48:46 +02:00
return;
2012-03-03 17:07:07 +01:00
EntityType type = event.getEntityType();
/**
* Handle people with non-standard animals: ie a patched craftbukkit.
*/
2012-06-20 15:18:52 +02:00
if (type == null || type.getName() == null) {
2020-12-12 03:49:49 +01:00
Logging.finer("Found a null typed creature.");
return;
}
MultiverseWorld mvworld = this.worldManager.getMVWorld(world.getName());
event.setCancelled(this.plugin.getMVWorldManager().getTheWorldPurger().shouldWeKillThisCreature(mvworld, event.getEntity()));
2011-07-20 16:48:46 +02:00
}
/**
* Handles portal search radius adjustment.
* @param event The Event that was fired.
*/
@EventHandler
public void entityPortal(EntityPortalEvent event) {
if (event.isCancelled() || event.getTo() == null) {
return;
}
if (!this.plugin.getMVConfig().isUsingDefaultPortalSearch()) {
event.setSearchRadius(this.plugin.getMVConfig().getPortalSearchRadius());
}
}
2011-07-20 16:48:46 +02:00
}