Citizens2/src/main/java/net/citizensnpcs/trait/Controllable.java

68 lines
2.1 KiB
Java
Raw Normal View History

2012-04-19 05:52:07 +02:00
package net.citizensnpcs.trait;
import net.citizensnpcs.api.event.NPCRightClickEvent;
import net.citizensnpcs.api.exception.NPCLoadException;
import net.citizensnpcs.api.trait.Trait;
import net.citizensnpcs.api.util.DataKey;
import net.citizensnpcs.npc.CitizensNPC;
2012-04-19 16:57:54 +02:00
import net.minecraft.server.EntityPlayer;
2012-04-19 05:52:07 +02:00
import org.bukkit.craftbukkit.entity.CraftPlayer;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
2012-04-19 16:57:54 +02:00
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
2012-04-19 05:52:07 +02:00
2012-04-19 16:57:54 +02:00
//TODO: reduce reliance on CitizensNPC
2012-04-19 05:52:07 +02:00
public class Controllable extends Trait implements Runnable, Listener {
private final CitizensNPC npc;
public Controllable(CitizensNPC npc) {
this.npc = npc;
}
2012-04-19 16:57:54 +02:00
private void jump() {
if (!npc.getHandle().onGround)
return;
npc.getHandle().motY = JUMP_VELOCITY;
}
@Override
public void load(DataKey key) throws NPCLoadException {
}
@EventHandler
public void onPlayerInteract(PlayerInteractEvent event) {
EntityPlayer handle = ((CraftPlayer) event.getPlayer()).getHandle();
if (event.getAction() == Action.PHYSICAL || !handle.equals(npc.getHandle().passenger))
return;
if (event.getAction() == Action.LEFT_CLICK_AIR || event.getAction() == Action.LEFT_CLICK_BLOCK) {
jump();
} else {
event.getPlayer().leaveVehicle();
}
}
2012-04-19 05:52:07 +02:00
@EventHandler
public void onRightClick(NPCRightClickEvent event) {
2012-04-19 16:57:54 +02:00
if (!event.getNPC().equals(npc) || npc.getHandle().passenger != null)
2012-04-19 05:52:07 +02:00
return;
2012-04-19 16:57:54 +02:00
EntityPlayer handle = ((CraftPlayer) event.getClicker()).getHandle();
handle.setPassengerOf(npc.getHandle());
2012-04-19 05:52:07 +02:00
}
@Override
public void run() {
2012-04-19 16:57:54 +02:00
if (!npc.isSpawned() || npc.getHandle().passenger == null)
2012-04-19 05:52:07 +02:00
return;
npc.getHandle().motX += npc.getHandle().passenger.motX;
npc.getHandle().motZ += npc.getHandle().passenger.motZ;
}
@Override
public void save(DataKey key) {
}
2012-04-19 16:57:54 +02:00
private static final double JUMP_VELOCITY = 0.4;
2012-04-19 05:52:07 +02:00
}