2012-01-19 08:38:40 +01:00
|
|
|
package net.citizensnpcs;
|
|
|
|
|
2012-01-22 08:10:25 +01:00
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.Iterator;
|
|
|
|
import java.util.List;
|
2012-01-19 08:38:40 +01:00
|
|
|
|
|
|
|
import net.citizensnpcs.api.npc.NPC;
|
2012-01-22 08:10:25 +01:00
|
|
|
import net.citizensnpcs.api.npc.NPCManager;
|
2012-01-21 17:21:21 +01:00
|
|
|
import net.citizensnpcs.api.npc.trait.trait.SpawnLocation;
|
2012-01-19 08:38:40 +01:00
|
|
|
|
2012-01-19 11:52:58 +01:00
|
|
|
import org.bukkit.Location;
|
2012-01-19 08:38:40 +01:00
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
import org.bukkit.event.EventHandler;
|
|
|
|
import org.bukkit.event.Listener;
|
|
|
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
|
|
|
import org.bukkit.event.entity.EntityDamageEvent;
|
|
|
|
import org.bukkit.event.entity.EntityTargetEvent;
|
|
|
|
import org.bukkit.event.world.ChunkLoadEvent;
|
|
|
|
import org.bukkit.event.world.ChunkUnloadEvent;
|
|
|
|
|
|
|
|
public class EventListen implements Listener {
|
2012-01-22 08:10:25 +01:00
|
|
|
private final List<Integer> toRespawn = new ArrayList<Integer>();
|
|
|
|
private final NPCManager manager;
|
|
|
|
|
|
|
|
public EventListen(NPCManager manager) {
|
|
|
|
this.manager = manager;
|
|
|
|
}
|
2012-01-19 08:38:40 +01:00
|
|
|
|
2012-01-19 12:43:21 +01:00
|
|
|
/*
|
|
|
|
* Entity events
|
|
|
|
*/
|
|
|
|
@EventHandler
|
|
|
|
public void onEntityDamage(EntityDamageEvent event) {
|
2012-01-22 08:10:25 +01:00
|
|
|
if (!manager.isNPC(event.getEntity()))
|
2012-01-19 12:43:21 +01:00
|
|
|
return;
|
2012-01-19 08:38:40 +01:00
|
|
|
|
2012-01-22 08:10:25 +01:00
|
|
|
event.setCancelled(true); // TODO: implement damage handlers
|
2012-01-19 12:43:21 +01:00
|
|
|
if (event instanceof EntityDamageByEntityEvent) {
|
|
|
|
EntityDamageByEntityEvent e = (EntityDamageByEntityEvent) event;
|
|
|
|
if (e.getDamager() instanceof Player) {
|
2012-01-22 08:10:25 +01:00
|
|
|
NPC npc = manager.getNPC(event.getEntity());
|
2012-01-20 08:48:55 +01:00
|
|
|
if (npc.getCharacter() != null) {
|
|
|
|
npc.getCharacter().onLeftClick(npc, (Player) e.getDamager());
|
|
|
|
}
|
2012-01-19 12:43:21 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-01-19 08:38:40 +01:00
|
|
|
|
2012-01-19 12:43:21 +01:00
|
|
|
@EventHandler
|
|
|
|
public void onEntityTarget(EntityTargetEvent event) {
|
2012-01-22 08:10:25 +01:00
|
|
|
if (event.isCancelled() || !manager.isNPC(event.getEntity()) || !(event.getTarget() instanceof Player))
|
2012-01-19 12:43:21 +01:00
|
|
|
return;
|
2012-01-19 08:38:40 +01:00
|
|
|
|
2012-01-22 08:10:25 +01:00
|
|
|
NPC npc = manager.getNPC(event.getEntity());
|
2012-01-19 12:43:21 +01:00
|
|
|
npc.getCharacter().onRightClick(npc, (Player) event.getTarget());
|
|
|
|
}
|
2012-01-19 08:38:40 +01:00
|
|
|
|
2012-01-19 12:43:21 +01:00
|
|
|
/*
|
|
|
|
* World events
|
|
|
|
*/
|
|
|
|
@EventHandler
|
|
|
|
public void onChunkLoad(ChunkLoadEvent event) {
|
2012-01-22 08:10:25 +01:00
|
|
|
for (Iterator<Integer> itr = toRespawn.iterator();; itr.hasNext()) {
|
|
|
|
NPC npc = manager.getNPC(itr.next());
|
2012-01-21 17:21:21 +01:00
|
|
|
npc.spawn(npc.getTrait(SpawnLocation.class).getLocation());
|
2012-01-22 08:10:25 +01:00
|
|
|
itr.remove();
|
2012-01-19 12:43:21 +01:00
|
|
|
}
|
|
|
|
}
|
2012-01-19 08:38:40 +01:00
|
|
|
|
2012-01-19 12:43:21 +01:00
|
|
|
@EventHandler
|
|
|
|
public void onChunkUnload(ChunkUnloadEvent event) {
|
|
|
|
if (event.isCancelled())
|
|
|
|
return;
|
2012-01-19 08:38:40 +01:00
|
|
|
|
2012-01-22 08:10:25 +01:00
|
|
|
for (NPC npc : manager.getSpawnedNPCs()) {
|
2012-01-21 17:21:21 +01:00
|
|
|
Location loc = npc.getBukkitEntity().getLocation();
|
2012-01-19 12:43:21 +01:00
|
|
|
if (event.getWorld().equals(loc.getWorld()) && event.getChunk().getX() == loc.getChunk().getX()
|
|
|
|
&& event.getChunk().getZ() == loc.getChunk().getZ()) {
|
|
|
|
toRespawn.add(npc.getId());
|
2012-01-21 17:21:21 +01:00
|
|
|
npc.getTrait(SpawnLocation.class).setLocation(loc);
|
2012-01-19 12:43:21 +01:00
|
|
|
npc.despawn();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-01-19 08:38:40 +01:00
|
|
|
}
|