Citizens2/src/net/citizensnpcs/EventListen.java

113 lines
3.8 KiB
Java
Raw Normal View History

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
2012-01-23 15:30:15 +01:00
import net.citizensnpcs.Settings.Setting;
2012-01-19 08:38:40 +01:00
import net.citizensnpcs.api.npc.NPC;
2012-01-21 17:21:21 +01:00
import net.citizensnpcs.api.npc.trait.trait.SpawnLocation;
2012-01-23 15:30:15 +01:00
import net.citizensnpcs.npc.CitizensNPCManager;
import net.citizensnpcs.util.Messaging;
2012-01-19 08:38:40 +01:00
2012-01-23 15:30:15 +01:00
import org.bukkit.Bukkit;
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;
2012-01-23 15:30:15 +01:00
import org.bukkit.event.entity.EntityTargetEvent.TargetReason;
import org.bukkit.event.player.PlayerInteractEntityEvent;
2012-01-19 08:38:40 +01:00
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>();
2012-01-23 15:30:15 +01:00
private final CitizensNPCManager manager;
2012-01-22 08:10:25 +01:00
2012-01-23 15:30:15 +01:00
public EventListen(CitizensNPCManager manager) {
2012-01-22 08:10:25 +01:00
this.manager = manager;
}
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 15:07:35 +01:00
Iterator<Integer> itr = toRespawn.iterator();
while (itr.hasNext()) {
2012-01-22 08:10:25 +01:00
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-23 09:45:34 +01:00
/*
* Entity events
*/
@EventHandler
public void onEntityDamage(EntityDamageEvent event) {
if (!manager.isNPC(event.getEntity()))
return;
2012-01-23 15:30:15 +01:00
event.setCancelled(true); // TODO implement damage handlers
2012-01-23 09:45:34 +01:00
if (event instanceof EntityDamageByEntityEvent) {
EntityDamageByEntityEvent e = (EntityDamageByEntityEvent) event;
if (e.getDamager() instanceof Player) {
NPC npc = manager.getNPC(event.getEntity());
if (npc.getCharacter() != null)
npc.getCharacter().onLeftClick(npc, (Player) e.getDamager());
}
}
}
@EventHandler
public void onEntityTarget(EntityTargetEvent event) {
2012-01-23 15:30:15 +01:00
if (manager.isNPC(event.getTarget()))
if (event.isCancelled() || !manager.isNPC(event.getEntity()) || !(event.getTarget() instanceof Player))
return;
2012-01-23 09:45:34 +01:00
NPC npc = manager.getNPC(event.getEntity());
2012-01-23 15:30:15 +01:00
Player player = (Player) event.getTarget();
if (!manager.hasSelected(player, npc)) {
if (manager.canSelect(player, npc)) {
manager.selectNPC(player, npc);
Messaging.sendWithNPC(player, Setting.SELECTION_MESSAGE.getString(), npc);
if (!Setting.QUICK_SELECT.getBoolean())
return;
}
2012-01-23 15:30:15 +01:00
}
if (npc.getCharacter() != null)
npc.getCharacter().onRightClick(npc, player);
2012-01-23 15:30:15 +01:00
}
/*
* Player events
*/
2012-01-23 15:30:15 +01:00
@EventHandler
public void onPlayerInteractEntity(PlayerInteractEntityEvent event) {
if (!manager.isNPC(event.getRightClicked()))
return;
Bukkit.getPluginManager().callEvent(
new EntityTargetEvent(event.getRightClicked(), event.getPlayer(), TargetReason.CUSTOM));
2012-01-23 09:45:34 +01:00
}
2012-01-19 08:38:40 +01:00
}