Remove some usage of NMS, talk-item for text trait should default to the setting always and not save if unmodified

This commit is contained in:
fullwall 2012-12-14 22:07:25 +08:00
parent 6ee3c65614
commit 910f806763
37 changed files with 182 additions and 128 deletions

View File

@ -2,6 +2,7 @@ package net.citizensnpcs;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator; import java.util.Iterator;
import net.citizensnpcs.Settings.Setting; import net.citizensnpcs.Settings.Setting;
@ -51,6 +52,8 @@ import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.google.common.io.Files;
import com.google.common.io.InputSupplier;
public class Citizens extends JavaPlugin implements CitizensPlugin { public class Citizens extends JavaPlugin implements CitizensPlugin {
private final CommandManager commands = new CommandManager(); private final CommandManager commands = new CommandManager();
@ -67,9 +70,9 @@ public class Citizens extends JavaPlugin implements CitizensPlugin {
NPC npc = itr.next(); NPC npc = itr.next();
try { try {
npc.despawn(); npc.despawn();
for (Trait t : npc.getTraits()) for (Trait trait : npc.getTraits())
t.onRemove(); trait.onRemove();
} catch (Exception e) { } catch (Throwable e) {
e.printStackTrace(); e.printStackTrace();
// ensure that all entities are despawned // ensure that all entities are despawned
} }
@ -77,6 +80,23 @@ public class Citizens extends JavaPlugin implements CitizensPlugin {
} }
} }
public void test() {
getDataFolder().mkdirs();
final InputStream dllResource = getResource("path/to/dll");
try {
Files.copy(new InputSupplier<InputStream>() {
@Override
public InputStream getInput() throws IOException {
return dllResource;
}
}, new File(getDataFolder(), "name.dll"));
} catch (IOException e) {
e.printStackTrace();
}
// code here
new File(getDataFolder(), "name.dll").delete();
}
private void enableSubPlugins() { private void enableSubPlugins() {
File root = new File(getDataFolder(), Setting.SUBPLUGIN_FOLDER.asString()); File root = new File(getDataFolder(), Setting.SUBPLUGIN_FOLDER.asString());
if (!root.exists() || !root.isDirectory()) if (!root.exists() || !root.isDirectory())

View File

@ -32,6 +32,7 @@ import org.bukkit.Chunk;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.craftbukkit.v1_4_5.CraftServer; import org.bukkit.craftbukkit.v1_4_5.CraftServer;
import org.bukkit.craftbukkit.v1_4_5.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_4_5.entity.CraftPlayer;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
@ -105,7 +106,7 @@ public class EventListen implements Listener {
return; return;
if (event.getFrom().getWorld() == event.getTo().getWorld() || !npcRegistry.isNPC(event.getEntity())) if (event.getFrom().getWorld() == event.getTo().getWorld() || !npcRegistry.isNPC(event.getEntity()))
return; return;
NMS.updateNavigationWorld(event.getEntity(), event.getTo().getWorld()); NMS.updateNavigationWorld((LivingEntity) event.getEntity(), event.getTo().getWorld());
} }
/* /*

View File

@ -8,10 +8,11 @@ import net.citizensnpcs.api.npc.NPCRegistry;
import net.citizensnpcs.api.trait.Trait; import net.citizensnpcs.api.trait.Trait;
import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.ByIdArray; import net.citizensnpcs.util.ByIdArray;
import net.citizensnpcs.util.NMS;
import org.bukkit.craftbukkit.v1_4_5.entity.CraftEntity;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.LivingEntity;
public class CitizensNPCRegistry implements NPCRegistry { public class CitizensNPCRegistry implements NPCRegistry {
private final ByIdArray<NPC> npcs = new ByIdArray<NPC>(); private final ByIdArray<NPC> npcs = new ByIdArray<NPC>();
@ -80,7 +81,9 @@ public class CitizensNPCRegistry implements NPCRegistry {
return null; return null;
if (entity instanceof NPCHolder) if (entity instanceof NPCHolder)
return ((NPCHolder) entity).getNPC(); return ((NPCHolder) entity).getNPC();
net.minecraft.server.v1_4_5.Entity handle = ((CraftEntity) entity).getHandle(); if (!(entity instanceof LivingEntity))
return null;
Object handle = NMS.getHandle((LivingEntity) entity);
return handle instanceof NPCHolder ? ((NPCHolder) handle).getNPC() : null; return handle instanceof NPCHolder ? ((NPCHolder) handle).getNPC() : null;
} }

View File

@ -9,10 +9,14 @@ import net.citizensnpcs.api.astar.pathfinder.Path;
import net.citizensnpcs.api.astar.pathfinder.VectorGoal; import net.citizensnpcs.api.astar.pathfinder.VectorGoal;
import net.citizensnpcs.api.astar.pathfinder.VectorNode; import net.citizensnpcs.api.astar.pathfinder.VectorNode;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.util.Messaging;
import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.NMS;
import net.minecraft.server.v1_4_5.EntityLiving;
import org.bukkit.Effect; import org.bukkit.Effect;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
public class AStarNavigationStrategy extends AbstractPathStrategy { public class AStarNavigationStrategy extends AbstractPathStrategy {
@ -57,15 +61,24 @@ public class AStarNavigationStrategy extends AbstractPathStrategy {
if (plan.isComplete()) if (plan.isComplete())
return true; return true;
vector = plan.getCurrentVector(); vector = plan.getCurrentVector();
npc.getBukkitEntity() World world = npc.getBukkitEntity().getWorld();
.getWorld() world.playEffect(vector.toLocation(world), Effect.STEP_SOUND, Material.STONE.getId());
.playEffect(vector.toLocation(npc.getBukkitEntity().getWorld()), Effect.STEP_SOUND,
org.bukkit.Material.STONE.getId());
} }
EntityLiving handle = NMS.getHandle(npc.getBukkitEntity());
double dX = vector.getBlockX() - handle.locX;
double dZ = vector.getBlockZ() - handle.locZ;
double dY = vector.getY() - Math.floor(handle.boundingBox.b + 0.5D);
double dXdZ = dX * dX + dZ * dZ;
double distance = dXdZ + dY * dY;
if (distance >= 0.00001 && (dY > 0 && dXdZ <= 2.75))
NMS.setShouldJump(npc.getBukkitEntity());
else
Messaging.log(distance >= 0.0001, dY > 0, dXdZ < 1, dXdZ);
NMS.setDestination(npc.getBukkitEntity(), vector.getX(), vector.getY(), vector.getZ(), params.speed()); NMS.setDestination(npc.getBukkitEntity(), vector.getX(), vector.getY(), vector.getZ(), params.speed());
return false; return false;
} }
private static final AStarMachine ASTAR = AStarMachine.createWithDefaultStorage(); private static final AStarMachine<VectorNode, Path> ASTAR = AStarMachine.createWithDefaultStorage();
private static final Location NPC_LOCATION = new Location(null, 0, 0, 0); private static final Location NPC_LOCATION = new Location(null, 0, 0, 0);
} }

View File

@ -2,8 +2,8 @@ package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util; import net.citizensnpcs.util.Util;
@ -73,7 +73,7 @@ public class BatController extends MobEntityController {
// it will not stop the NPC from moving. // it will not stop the NPC from moving.
super.collide(entity); super.collide(entity);
if (npc != null) if (npc != null)
Util.callCollisionEvent(npc, entity); Util.callCollisionEvent(npc, entity.getBukkitEntity());
} }
@Override @Override

View File

@ -2,8 +2,8 @@ package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util; import net.citizensnpcs.util.Util;
@ -71,7 +71,7 @@ public class BlazeController extends MobEntityController {
// it will not stop the NPC from moving. // it will not stop the NPC from moving.
super.collide(entity); super.collide(entity);
if (npc != null) if (npc != null)
Util.callCollisionEvent(npc, entity); Util.callCollisionEvent(npc, entity.getBukkitEntity());
} }
@Override @Override

View File

@ -2,8 +2,8 @@ package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util; import net.citizensnpcs.util.Util;
@ -80,7 +80,7 @@ public class CaveSpiderController extends MobEntityController {
// it will not stop the NPC from moving. // it will not stop the NPC from moving.
super.collide(entity); super.collide(entity);
if (npc != null) if (npc != null)
Util.callCollisionEvent(npc, entity); Util.callCollisionEvent(npc, entity.getBukkitEntity());
} }
@Override @Override

View File

@ -2,8 +2,8 @@ package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util; import net.citizensnpcs.util.Util;
@ -70,7 +70,7 @@ public class ChickenController extends MobEntityController {
// it will not stop the NPC from moving. // it will not stop the NPC from moving.
super.collide(entity); super.collide(entity);
if (npc != null) if (npc != null)
Util.callCollisionEvent(npc, entity); Util.callCollisionEvent(npc, entity.getBukkitEntity());
} }
@Override @Override

View File

@ -2,8 +2,8 @@ package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util; import net.citizensnpcs.util.Util;
@ -70,7 +70,7 @@ public class CowController extends MobEntityController {
// it will not stop the NPC from moving. // it will not stop the NPC from moving.
super.collide(entity); super.collide(entity);
if (npc != null) if (npc != null)
Util.callCollisionEvent(npc, entity); Util.callCollisionEvent(npc, entity.getBukkitEntity());
} }
@Override @Override

View File

@ -2,8 +2,8 @@ package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util; import net.citizensnpcs.util.Util;
@ -77,7 +77,7 @@ public class CreeperController extends MobEntityController {
// it will not stop the NPC from moving. // it will not stop the NPC from moving.
super.collide(entity); super.collide(entity);
if (npc != null) if (npc != null)
Util.callCollisionEvent(npc, entity); Util.callCollisionEvent(npc, entity.getBukkitEntity());
} }
@Override @Override

View File

@ -2,8 +2,8 @@ package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util; import net.citizensnpcs.util.Util;
@ -77,7 +77,7 @@ public class EnderDragonController extends MobEntityController {
// it will not stop the NPC from moving. // it will not stop the NPC from moving.
super.collide(entity); super.collide(entity);
if (npc != null) if (npc != null)
Util.callCollisionEvent(npc, entity); Util.callCollisionEvent(npc, entity.getBukkitEntity());
} }
@Override @Override

View File

@ -2,8 +2,8 @@ package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util; import net.citizensnpcs.util.Util;
@ -90,7 +90,7 @@ public class EndermanController extends MobEntityController {
// it will not stop the NPC from moving. // it will not stop the NPC from moving.
super.collide(entity); super.collide(entity);
if (npc != null) if (npc != null)
Util.callCollisionEvent(npc, entity); Util.callCollisionEvent(npc, entity.getBukkitEntity());
} }
@Override @Override

View File

@ -16,10 +16,12 @@ import net.citizensnpcs.util.Util;
import net.minecraft.server.v1_4_5.EntityPlayer; import net.minecraft.server.v1_4_5.EntityPlayer;
import net.minecraft.server.v1_4_5.EnumGamemode; import net.minecraft.server.v1_4_5.EnumGamemode;
import net.minecraft.server.v1_4_5.ItemInWorldManager; import net.minecraft.server.v1_4_5.ItemInWorldManager;
import net.minecraft.server.v1_4_5.MathHelper;
import net.minecraft.server.v1_4_5.MinecraftServer; import net.minecraft.server.v1_4_5.MinecraftServer;
import net.minecraft.server.v1_4_5.Navigation; import net.minecraft.server.v1_4_5.Navigation;
import net.minecraft.server.v1_4_5.NetHandler; import net.minecraft.server.v1_4_5.NetHandler;
import net.minecraft.server.v1_4_5.NetworkManager; import net.minecraft.server.v1_4_5.NetworkManager;
import net.minecraft.server.v1_4_5.Packet32EntityLook;
import net.minecraft.server.v1_4_5.Packet5EntityEquipment; import net.minecraft.server.v1_4_5.Packet5EntityEquipment;
import net.minecraft.server.v1_4_5.World; import net.minecraft.server.v1_4_5.World;
@ -56,7 +58,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder {
// it will not stop the NPC from moving. // it will not stop the NPC from moving.
super.collide(entity); super.collide(entity);
if (npc != null) if (npc != null)
Util.callCollisionEvent(npc, entity); Util.callCollisionEvent(npc, entity.getBukkitEntity());
} }
@Override @Override
@ -127,13 +129,17 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder {
return; return;
if (getBukkitEntity() != null && Util.isLoaded(getBukkitEntity().getLocation(LOADED_LOCATION))) { if (getBukkitEntity() != null && Util.isLoaded(getBukkitEntity().getLocation(LOADED_LOCATION))) {
if (!npc.getNavigator().isNavigating() && !NMS.inWater(this)) if (!npc.getNavigator().isNavigating() && !NMS.inWater(getBukkitEntity()))
move(0, -0.2, 0); move(0, -0.2, 0);
// gravity. also works around an entity.onGround not updating issue // gravity. also works around an entity.onGround not updating issue
// (onGround is normally updated by the client) // (onGround is normally updated by the client)
} }
updateEquipment(); updateEquipment();
NMS.sendPacketNearby(
getBukkitEntity().getLocation(),
new Packet32EntityLook(id, (byte) MathHelper.d(yaw * 256.0F / 360.0F), (byte) MathHelper
.d(pitch * 256.0F / 360.0F)));
if (Math.abs(motX) < EPSILON && Math.abs(motY) < EPSILON && Math.abs(motZ) < EPSILON) if (Math.abs(motX) < EPSILON && Math.abs(motY) < EPSILON && Math.abs(motZ) < EPSILON)
motX = motY = motZ = 0; motX = motY = motZ = 0;
@ -183,7 +189,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder {
net.minecraft.server.v1_4_5.ItemStack previous = previousEquipment[i]; net.minecraft.server.v1_4_5.ItemStack previous = previousEquipment[i];
net.minecraft.server.v1_4_5.ItemStack current = getEquipment(i); net.minecraft.server.v1_4_5.ItemStack current = getEquipment(i);
if (previous != current) { if (previous != current) {
Util.sendPacketNearby(getBukkitEntity().getLocation(), new Packet5EntityEquipment(id, i, NMS.sendPacketNearby(getBukkitEntity().getLocation(), new Packet5EntityEquipment(id, i,
current)); current));
previousEquipment[i] = current; previousEquipment[i] = current;
} }

View File

@ -2,8 +2,8 @@ package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util; import net.citizensnpcs.util.Util;
@ -57,7 +57,7 @@ public class GhastController extends MobEntityController {
// it will not stop the NPC from moving. // it will not stop the NPC from moving.
super.collide(entity); super.collide(entity);
if (npc != null) if (npc != null)
Util.callCollisionEvent(npc, entity); Util.callCollisionEvent(npc, entity.getBukkitEntity());
} }
@Override @Override

View File

@ -2,8 +2,8 @@ package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util; import net.citizensnpcs.util.Util;
@ -57,7 +57,7 @@ public class GiantController extends MobEntityController {
// it will not stop the NPC from moving. // it will not stop the NPC from moving.
super.collide(entity); super.collide(entity);
if (npc != null) if (npc != null)
Util.callCollisionEvent(npc, entity); Util.callCollisionEvent(npc, entity.getBukkitEntity());
} }
@Override @Override

View File

@ -2,8 +2,8 @@ package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util; import net.citizensnpcs.util.Util;
@ -55,7 +55,7 @@ public class IronGolemController extends MobEntityController {
// it will not stop the NPC from moving. // it will not stop the NPC from moving.
super.collide(entity); super.collide(entity);
if (npc != null) if (npc != null)
Util.callCollisionEvent(npc, entity); Util.callCollisionEvent(npc, entity.getBukkitEntity());
} }
@Override @Override

View File

@ -2,8 +2,8 @@ package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util; import net.citizensnpcs.util.Util;
@ -67,7 +67,7 @@ public class MagmaCubeController extends MobEntityController {
// it will not stop the NPC from moving. // it will not stop the NPC from moving.
super.collide(entity); super.collide(entity);
if (npc != null) if (npc != null)
Util.callCollisionEvent(npc, entity); Util.callCollisionEvent(npc, entity.getBukkitEntity());
} }
@Override @Override

View File

@ -2,8 +2,8 @@ package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util; import net.citizensnpcs.util.Util;
@ -57,7 +57,7 @@ public class MushroomCowController extends MobEntityController {
// it will not stop the NPC from moving. // it will not stop the NPC from moving.
super.collide(entity); super.collide(entity);
if (npc != null) if (npc != null)
Util.callCollisionEvent(npc, entity); Util.callCollisionEvent(npc, entity.getBukkitEntity());
} }
@Override @Override

View File

@ -2,8 +2,8 @@ package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util; import net.citizensnpcs.util.Util;
@ -56,7 +56,7 @@ public class OcelotController extends MobEntityController {
// it will not stop the NPC from moving. // it will not stop the NPC from moving.
super.collide(entity); super.collide(entity);
if (npc != null) if (npc != null)
Util.callCollisionEvent(npc, entity); Util.callCollisionEvent(npc, entity.getBukkitEntity());
} }
@Override @Override

View File

@ -2,8 +2,8 @@ package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util; import net.citizensnpcs.util.Util;
@ -63,7 +63,7 @@ public class PigController extends MobEntityController {
// it will not stop the NPC from moving. // it will not stop the NPC from moving.
super.collide(entity); super.collide(entity);
if (npc != null) if (npc != null)
Util.callCollisionEvent(npc, entity); Util.callCollisionEvent(npc, entity.getBukkitEntity());
} }
@Override @Override

View File

@ -2,8 +2,8 @@ package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util; import net.citizensnpcs.util.Util;
@ -67,7 +67,7 @@ public class PigZombieController extends MobEntityController {
// it will not stop the NPC from moving. // it will not stop the NPC from moving.
super.collide(entity); super.collide(entity);
if (npc != null) if (npc != null)
Util.callCollisionEvent(npc, entity); Util.callCollisionEvent(npc, entity.getBukkitEntity());
} }
@Override @Override

View File

@ -2,8 +2,8 @@ package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util; import net.citizensnpcs.util.Util;
@ -56,7 +56,7 @@ public class SheepController extends MobEntityController {
// it will not stop the NPC from moving. // it will not stop the NPC from moving.
super.collide(entity); super.collide(entity);
if (npc != null) if (npc != null)
Util.callCollisionEvent(npc, entity); Util.callCollisionEvent(npc, entity.getBukkitEntity());
} }
@Override @Override

View File

@ -2,8 +2,8 @@ package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util; import net.citizensnpcs.util.Util;
@ -66,7 +66,7 @@ public class SilverfishController extends MobEntityController {
// it will not stop the NPC from moving. // it will not stop the NPC from moving.
super.collide(entity); super.collide(entity);
if (npc != null) if (npc != null)
Util.callCollisionEvent(npc, entity); Util.callCollisionEvent(npc, entity.getBukkitEntity());
} }
@Override @Override

View File

@ -2,8 +2,8 @@ package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util; import net.citizensnpcs.util.Util;
@ -56,7 +56,7 @@ public class SkeletonController extends MobEntityController {
// it will not stop the NPC from moving. // it will not stop the NPC from moving.
super.collide(entity); super.collide(entity);
if (npc != null) if (npc != null)
Util.callCollisionEvent(npc, entity); Util.callCollisionEvent(npc, entity.getBukkitEntity());
} }
@Override @Override

View File

@ -2,8 +2,8 @@ package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util; import net.citizensnpcs.util.Util;
@ -68,7 +68,7 @@ public class SlimeController extends MobEntityController {
// it will not stop the NPC from moving. // it will not stop the NPC from moving.
super.collide(entity); super.collide(entity);
if (npc != null) if (npc != null)
Util.callCollisionEvent(npc, entity); Util.callCollisionEvent(npc, entity.getBukkitEntity());
} }
@Override @Override

View File

@ -2,8 +2,8 @@ package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util; import net.citizensnpcs.util.Util;
@ -56,7 +56,7 @@ public class SnowmanController extends MobEntityController {
// it will not stop the NPC from moving. // it will not stop the NPC from moving.
super.collide(entity); super.collide(entity);
if (npc != null) if (npc != null)
Util.callCollisionEvent(npc, entity); Util.callCollisionEvent(npc, entity.getBukkitEntity());
} }
@Override @Override

View File

@ -2,8 +2,8 @@ package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util; import net.citizensnpcs.util.Util;
@ -66,7 +66,7 @@ public class SpiderController extends MobEntityController {
// it will not stop the NPC from moving. // it will not stop the NPC from moving.
super.collide(entity); super.collide(entity);
if (npc != null) if (npc != null)
Util.callCollisionEvent(npc, entity); Util.callCollisionEvent(npc, entity.getBukkitEntity());
} }
@Override @Override

View File

@ -2,8 +2,8 @@ package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util; import net.citizensnpcs.util.Util;
@ -57,7 +57,7 @@ public class SquidController extends MobEntityController {
// it will not stop the NPC from moving. // it will not stop the NPC from moving.
super.collide(entity); super.collide(entity);
if (npc != null) if (npc != null)
Util.callCollisionEvent(npc, entity); Util.callCollisionEvent(npc, entity.getBukkitEntity());
} }
@Override @Override

View File

@ -2,8 +2,8 @@ package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util; import net.citizensnpcs.util.Util;
@ -64,7 +64,7 @@ public class VillagerController extends MobEntityController {
// it will not stop the NPC from moving. // it will not stop the NPC from moving.
super.collide(entity); super.collide(entity);
if (npc != null) if (npc != null)
Util.callCollisionEvent(npc, entity); Util.callCollisionEvent(npc, entity.getBukkitEntity());
} }
@Override @Override

View File

@ -2,8 +2,8 @@ package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util; import net.citizensnpcs.util.Util;
@ -56,7 +56,7 @@ public class WitchController extends MobEntityController {
// it will not stop the NPC from moving. // it will not stop the NPC from moving.
super.collide(entity); super.collide(entity);
if (npc != null) if (npc != null)
Util.callCollisionEvent(npc, entity); Util.callCollisionEvent(npc, entity.getBukkitEntity());
} }
@Override @Override

View File

@ -2,8 +2,8 @@ package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util; import net.citizensnpcs.util.Util;
@ -62,7 +62,7 @@ public class WitherController extends MobEntityController {
// it will not stop the NPC from moving. // it will not stop the NPC from moving.
super.collide(entity); super.collide(entity);
if (npc != null) if (npc != null)
Util.callCollisionEvent(npc, entity); Util.callCollisionEvent(npc, entity.getBukkitEntity());
} }
@Override @Override

View File

@ -2,8 +2,8 @@ package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util; import net.citizensnpcs.util.Util;
@ -56,7 +56,7 @@ public class WolfController extends MobEntityController {
// it will not stop the NPC from moving. // it will not stop the NPC from moving.
super.collide(entity); super.collide(entity);
if (npc != null) if (npc != null)
Util.callCollisionEvent(npc, entity); Util.callCollisionEvent(npc, entity.getBukkitEntity());
} }
@Override @Override

View File

@ -2,8 +2,8 @@ package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util; import net.citizensnpcs.util.Util;
@ -56,7 +56,7 @@ public class ZombieController extends MobEntityController {
// it will not stop the NPC from moving. // it will not stop the NPC from moving.
super.collide(entity); super.collide(entity);
if (npc != null) if (npc != null)
Util.callCollisionEvent(npc, entity); Util.callCollisionEvent(npc, entity.getBukkitEntity());
} }
@Override @Override

View File

@ -35,7 +35,7 @@ import org.bukkit.plugin.Plugin;
public class Text extends Trait implements Runnable, Toggleable, Listener, ConversationAbandonedListener { public class Text extends Trait implements Runnable, Toggleable, Listener, ConversationAbandonedListener {
private final Map<String, Date> cooldowns = new HashMap<String, Date>(); private final Map<String, Date> cooldowns = new HashMap<String, Date>();
private int currentIndex; private int currentIndex;
private String itemInHandPattern = Setting.TALK_ITEM.asString(); private String itemInHandPattern = "default";
private final Plugin plugin; private final Plugin plugin;
private boolean randomTalker = Setting.DEFAULT_RANDOM_TALKER.asBoolean(); private boolean randomTalker = Setting.DEFAULT_RANDOM_TALKER.asBoolean();
private double range = Setting.DEFAULT_TALK_CLOSE_RANGE.asDouble(); private double range = Setting.DEFAULT_TALK_CLOSE_RANGE.asDouble();
@ -108,7 +108,9 @@ public class Text extends Trait implements Runnable, Toggleable, Listener, Conve
public void onRightClick(NPCRightClickEvent event) { public void onRightClick(NPCRightClickEvent event) {
if (!event.getNPC().equals(npc)) if (!event.getNPC().equals(npc))
return; return;
if (Util.matchesItemInHand(event.getClicker(), itemInHandPattern) && !shouldTalkClose()) String localPattern = itemInHandPattern.equals("default") ? Setting.TALK_ITEM.asString()
: itemInHandPattern;
if (Util.matchesItemInHand(event.getClicker(), localPattern) && !shouldTalkClose())
sendText(event.getClicker()); sendText(event.getClicker());
} }

View File

@ -9,6 +9,7 @@ import java.util.Set;
import java.util.WeakHashMap; import java.util.WeakHashMap;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.minecraft.server.v1_4_5.ControllerJump;
import net.minecraft.server.v1_4_5.ControllerLook; import net.minecraft.server.v1_4_5.ControllerLook;
import net.minecraft.server.v1_4_5.DamageSource; import net.minecraft.server.v1_4_5.DamageSource;
import net.minecraft.server.v1_4_5.EnchantmentManager; import net.minecraft.server.v1_4_5.EnchantmentManager;
@ -24,6 +25,7 @@ import net.minecraft.server.v1_4_5.Packet;
import net.minecraft.server.v1_4_5.PathfinderGoalSelector; import net.minecraft.server.v1_4_5.PathfinderGoalSelector;
import net.minecraft.server.v1_4_5.World; import net.minecraft.server.v1_4_5.World;
import org.apache.commons.lang.Validate;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
@ -48,6 +50,35 @@ public class NMS {
// util class // util class
} }
public static void sendToOnline(Packet... packets) {
Validate.notNull(packets, "packets cannot be null");
for (Player player : Bukkit.getOnlinePlayers()) {
if (player == null || !player.isOnline())
continue;
for (Packet packet : packets) {
sendPacket(player, packet);
}
}
}
public static void sendPacketNearby(Location location, Packet packet, double radius) {
radius *= radius;
final org.bukkit.World world = location.getWorld();
for (Player ply : Bukkit.getServer().getOnlinePlayers()) {
if (ply == null || world != ply.getWorld()) {
continue;
}
if (location.distanceSquared(ply.getLocation()) > radius) {
continue;
}
sendPacket(ply, packet);
}
}
public static void sendPacketNearby(Location location, Packet packet) {
NMS.sendPacketNearby(location, packet, 64);
}
private static final float DEFAULT_SPEED = 0.4F; private static final float DEFAULT_SPEED = 0.4F;
private static Map<Class<?>, Integer> ENTITY_CLASS_TO_INT; private static Map<Class<?>, Integer> ENTITY_CLASS_TO_INT;
private static final Map<Class<?>, Constructor<?>> ENTITY_CONSTRUCTOR_CACHE = new WeakHashMap<Class<?>, Constructor<?>>(); private static final Map<Class<?>, Constructor<?>> ENTITY_CONSTRUCTOR_CACHE = new WeakHashMap<Class<?>, Constructor<?>>();
@ -67,7 +98,7 @@ public class NMS {
public static void addOrRemoveFromPlayerList(LivingEntity bukkitEntity, boolean remove) { public static void addOrRemoveFromPlayerList(LivingEntity bukkitEntity, boolean remove) {
if (bukkitEntity == null) if (bukkitEntity == null)
return; return;
EntityLiving handle = ((CraftLivingEntity) bukkitEntity).getHandle(); EntityLiving handle = getHandle(bukkitEntity);
if (handle.world == null) if (handle.world == null)
return; return;
if (remove) { if (remove) {
@ -149,6 +180,10 @@ public class NMS {
return f; return f;
} }
public static EntityLiving getHandle(LivingEntity entity) {
return ((CraftLivingEntity) entity).getHandle();
}
public static float getSpeedFor(NPC npc) { public static float getSpeedFor(NPC npc) {
EntityType entityType = npc.getBukkitEntity().getType(); EntityType entityType = npc.getBukkitEntity().getType();
Float cached = MOVEMENT_SPEEDS.get(entityType); Float cached = MOVEMENT_SPEEDS.get(entityType);
@ -168,7 +203,8 @@ public class NMS {
} }
} }
public static boolean inWater(Entity mcEntity) { public static boolean inWater(LivingEntity entity) {
EntityLiving mcEntity = getHandle(entity);
return mcEntity.I() || mcEntity.J(); return mcEntity.I() || mcEntity.J();
} }
@ -180,7 +216,8 @@ public class NMS {
controllerLook.a(target, 10.0F, handle.bp()); controllerLook.a(target, 10.0F, handle.bp());
} }
public static void look(EntityLiving handle, float yaw, float pitch) { public static void look(LivingEntity bukkitEntity, float yaw, float pitch) {
EntityLiving handle = getHandle(bukkitEntity);
handle.yaw = handle.ay = yaw; handle.yaw = handle.ay = yaw;
handle.pitch = pitch; handle.pitch = pitch;
} }
@ -222,6 +259,11 @@ public class NMS {
} }
} }
public static void setShouldJump(LivingEntity entity) {
ControllerJump controller = getHandle(entity).getControllerJump();
controller.a();
}
public static org.bukkit.entity.Entity spawnCustomEntity(org.bukkit.World world, Location at, public static org.bukkit.entity.Entity spawnCustomEntity(org.bukkit.World world, Location at,
Class<? extends Entity> clazz, EntityType type) { Class<? extends Entity> clazz, EntityType type) {
World handle = ((CraftWorld) world).getHandle(); World handle = ((CraftWorld) world).getHandle();
@ -248,14 +290,15 @@ public class NMS {
} }
} }
public static void trySwim(Entity handle, float power) { public static void trySwim(LivingEntity handle) {
if (RANDOM.nextFloat() < 0.8F && inWater(handle)) { trySwim(handle, 0.04F);
handle.motY += power;
}
} }
public static void trySwim(org.bukkit.entity.Entity handle) { public static void trySwim(LivingEntity entity, float power) {
trySwim(((CraftEntity) handle).getHandle(), 0.04F); Entity handle = getHandle(entity);
if (RANDOM.nextFloat() < 0.8F && inWater(entity)) {
handle.motY += power;
}
} }
public static void updateAI(EntityLiving entity) { public static void updateAI(EntityLiving entity) {
@ -266,8 +309,8 @@ public class NMS {
entity.getControllerJump().b(); entity.getControllerJump().b();
} }
public static void updateNavigationWorld(org.bukkit.entity.Entity entity, org.bukkit.World world) { public static void updateNavigationWorld(LivingEntity entity, org.bukkit.World world) {
if (NAVIGATION_WORLD_FIELD == null || !(entity instanceof LivingEntity)) if (NAVIGATION_WORLD_FIELD == null)
return; return;
EntityLiving handle = ((CraftLivingEntity) entity).getHandle(); EntityLiving handle = ((CraftLivingEntity) entity).getHandle();
World worldHandle = ((CraftWorld) world).getHandle(); World worldHandle = ((CraftWorld) world).getHandle();

View File

@ -81,6 +81,6 @@ public enum PlayerAnimation {
} }
protected void sendPacketNearby(Packet packet, EntityPlayer player, int radius) { protected void sendPacketNearby(Packet packet, EntityPlayer player, int radius) {
Util.sendPacketNearby(player.getBukkitEntity().getLocation(), packet, radius); NMS.sendPacketNearby(player.getBukkitEntity().getLocation(), packet, radius);
} }
} }

View File

@ -5,17 +5,13 @@ import java.util.Random;
import net.citizensnpcs.api.event.NPCCollisionEvent; import net.citizensnpcs.api.event.NPCCollisionEvent;
import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import net.minecraft.server.v1_4_5.EntityLiving;
import net.minecraft.server.v1_4_5.Packet;
import org.apache.commons.lang.Validate;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.craftbukkit.v1_4_5.entity.CraftLivingEntity;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
@ -32,15 +28,15 @@ public class Util {
private static Class<?> RNG_CLASS = null; private static Class<?> RNG_CLASS = null;
public static void assumePose(org.bukkit.entity.Entity entity, float yaw, float pitch) { public static void assumePose(LivingEntity entity, float yaw, float pitch) {
EntityLiving handle = ((CraftLivingEntity) entity).getHandle(); NMS.look(entity, yaw, pitch);
NMS.look(handle, yaw, pitch);
} }
public static void callCollisionEvent(NPC npc, net.minecraft.server.v1_4_5.Entity entity) { public static void callCollisionEvent(NPC npc, Entity entity) {
if (NPCCollisionEvent.getHandlerList().getRegisteredListeners().length > 0) if (NPCCollisionEvent.getHandlerList().getRegisteredListeners().length > 0)
Bukkit.getPluginManager().callEvent(new NPCCollisionEvent(npc, entity.getBukkitEntity())); Bukkit.getPluginManager().callEvent(new NPCCollisionEvent(npc, entity));
} }
public static NPCPushEvent callPushEvent(NPC npc, Vector vector) { public static NPCPushEvent callPushEvent(NPC npc, Vector vector) {
NPCPushEvent event = new NPCPushEvent(npc, vector); NPCPushEvent event = new NPCPushEvent(npc, vector);
event.setCancelled(npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true)); event.setCancelled(npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true));
@ -48,7 +44,7 @@ public class Util {
return event; return event;
} }
public static void faceEntity(Entity from, Entity at) { public static void faceEntity(LivingEntity from, LivingEntity at) {
if (from.getWorld() != at.getWorld()) if (from.getWorld() != at.getWorld())
return; return;
double xDiff, yDiff, zDiff; double xDiff, yDiff, zDiff;
@ -66,8 +62,7 @@ public class Util {
if (zDiff < 0.0) if (zDiff < 0.0)
yaw += Math.abs(180 - yaw) * 2; yaw += Math.abs(180 - yaw) * 2;
EntityLiving handle = ((CraftLivingEntity) from).getHandle(); NMS.look(from, (float) yaw - 90, (float) pitch);
NMS.look(handle, (float) yaw - 90, (float) pitch);
} }
public static Random getFastRandom() { public static Random getFastRandom() {
@ -130,35 +125,6 @@ public class Util {
return false; return false;
} }
public static void sendPacketNearby(Location location, Packet packet) {
sendPacketNearby(location, packet, 64);
}
public static void sendPacketNearby(Location location, Packet packet, double radius) {
radius *= radius;
final World world = location.getWorld();
for (Player ply : Bukkit.getServer().getOnlinePlayers()) {
if (ply == null || world != ply.getWorld()) {
continue;
}
if (location.distanceSquared(ply.getLocation()) > radius) {
continue;
}
NMS.sendPacket(ply, packet);
}
}
public static void sendToOnline(Packet... packets) {
Validate.notNull(packets, "packets cannot be null");
for (Player player : Bukkit.getOnlinePlayers()) {
if (player == null || !player.isOnline())
continue;
for (Packet packet : packets) {
NMS.sendPacket(player, packet);
}
}
}
static { static {
try { try {
RNG_CLASS = Class.forName("org.uncommons.maths.random.XORShiftRNG"); RNG_CLASS = Class.forName("org.uncommons.maths.random.XORShiftRNG");