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 7e1e61b790
commit abe81c3e16
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.IOException;
import java.io.InputStream;
import java.util.Iterator;
import net.citizensnpcs.Settings.Setting;
@ -51,6 +52,8 @@ import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;
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 {
private final CommandManager commands = new CommandManager();
@ -67,9 +70,9 @@ public class Citizens extends JavaPlugin implements CitizensPlugin {
NPC npc = itr.next();
try {
npc.despawn();
for (Trait t : npc.getTraits())
t.onRemove();
} catch (Exception e) {
for (Trait trait : npc.getTraits())
trait.onRemove();
} catch (Throwable e) {
e.printStackTrace();
// 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() {
File root = new File(getDataFolder(), Setting.SUBPLUGIN_FOLDER.asString());
if (!root.exists() || !root.isDirectory())
@ -137,13 +157,13 @@ public class Citizens extends JavaPlugin implements CitizensPlugin {
if (!commands.hasCommand(command, modifier) && !modifier.isEmpty()) {
return suggestClosestModifier(sender, command.getName(), modifier);
}
NPC npc = selector == null ? null : selector.getSelected(sender);
// TODO: change the args supplied to a context style system for
// flexibility (ie. adding more context in the future without
// changing everything)
Object[] methodArgs = {sender, npc};
Object[] methodArgs = { sender, npc };
return commands.executeSafe(command, args, sender, methodArgs);
}

View File

@ -32,6 +32,7 @@ import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.craftbukkit.v1_4_5.CraftServer;
import org.bukkit.craftbukkit.v1_4_5.entity.CraftPlayer;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@ -105,7 +106,7 @@ public class EventListen implements Listener {
return;
if (event.getFrom().getWorld() == event.getTo().getWorld() || !npcRegistry.isNPC(event.getEntity()))
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.npc.ai.NPCHolder;
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.EntityType;
import org.bukkit.entity.LivingEntity;
public class CitizensNPCRegistry implements NPCRegistry {
private final ByIdArray<NPC> npcs = new ByIdArray<NPC>();
@ -80,7 +81,9 @@ public class CitizensNPCRegistry implements NPCRegistry {
return null;
if (entity instanceof NPCHolder)
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;
}

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.VectorNode;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.util.Messaging;
import net.citizensnpcs.util.NMS;
import net.minecraft.server.v1_4_5.EntityLiving;
import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.util.Vector;
public class AStarNavigationStrategy extends AbstractPathStrategy {
@ -57,15 +61,24 @@ public class AStarNavigationStrategy extends AbstractPathStrategy {
if (plan.isComplete())
return true;
vector = plan.getCurrentVector();
npc.getBukkitEntity()
.getWorld()
.playEffect(vector.toLocation(npc.getBukkitEntity().getWorld()), Effect.STEP_SOUND,
org.bukkit.Material.STONE.getId());
World world = npc.getBukkitEntity().getWorld();
world.playEffect(vector.toLocation(world), Effect.STEP_SOUND, 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());
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);
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -2,8 +2,8 @@ package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util;
@ -90,7 +90,7 @@ public class EndermanController extends MobEntityController {
// it will not stop the NPC from moving.
super.collide(entity);
if (npc != null)
Util.callCollisionEvent(npc, entity);
Util.callCollisionEvent(npc, entity.getBukkitEntity());
}
@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.EnumGamemode;
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.Navigation;
import net.minecraft.server.v1_4_5.NetHandler;
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.World;
@ -56,7 +58,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder {
// it will not stop the NPC from moving.
super.collide(entity);
if (npc != null)
Util.callCollisionEvent(npc, entity);
Util.callCollisionEvent(npc, entity.getBukkitEntity());
}
@Override
@ -127,13 +129,17 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder {
return;
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);
// gravity. also works around an entity.onGround not updating issue
// (onGround is normally updated by the client)
}
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)
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 current = getEquipment(i);
if (previous != current) {
Util.sendPacketNearby(getBukkitEntity().getLocation(), new Packet5EntityEquipment(id, i,
NMS.sendPacketNearby(getBukkitEntity().getLocation(), new Packet5EntityEquipment(id, 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.npc.NPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util;
@ -57,7 +57,7 @@ public class GhastController extends MobEntityController {
// it will not stop the NPC from moving.
super.collide(entity);
if (npc != null)
Util.callCollisionEvent(npc, entity);
Util.callCollisionEvent(npc, entity.getBukkitEntity());
}
@Override

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -35,7 +35,7 @@ import org.bukkit.plugin.Plugin;
public class Text extends Trait implements Runnable, Toggleable, Listener, ConversationAbandonedListener {
private final Map<String, Date> cooldowns = new HashMap<String, Date>();
private int currentIndex;
private String itemInHandPattern = Setting.TALK_ITEM.asString();
private String itemInHandPattern = "default";
private final Plugin plugin;
private boolean randomTalker = Setting.DEFAULT_RANDOM_TALKER.asBoolean();
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) {
if (!event.getNPC().equals(npc))
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());
}

View File

@ -9,6 +9,7 @@ import java.util.Set;
import java.util.WeakHashMap;
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.DamageSource;
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.World;
import org.apache.commons.lang.Validate;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
@ -48,6 +50,35 @@ public class NMS {
// 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 Map<Class<?>, Integer> ENTITY_CLASS_TO_INT;
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) {
if (bukkitEntity == null)
return;
EntityLiving handle = ((CraftLivingEntity) bukkitEntity).getHandle();
EntityLiving handle = getHandle(bukkitEntity);
if (handle.world == null)
return;
if (remove) {
@ -149,6 +180,10 @@ public class NMS {
return f;
}
public static EntityLiving getHandle(LivingEntity entity) {
return ((CraftLivingEntity) entity).getHandle();
}
public static float getSpeedFor(NPC npc) {
EntityType entityType = npc.getBukkitEntity().getType();
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();
}
@ -180,7 +216,8 @@ public class NMS {
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.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,
Class<? extends Entity> clazz, EntityType type) {
World handle = ((CraftWorld) world).getHandle();
@ -248,14 +290,15 @@ public class NMS {
}
}
public static void trySwim(Entity handle, float power) {
if (RANDOM.nextFloat() < 0.8F && inWater(handle)) {
handle.motY += power;
}
public static void trySwim(LivingEntity handle) {
trySwim(handle, 0.04F);
}
public static void trySwim(org.bukkit.entity.Entity handle) {
trySwim(((CraftEntity) handle).getHandle(), 0.04F);
public static void trySwim(LivingEntity entity, float power) {
Entity handle = getHandle(entity);
if (RANDOM.nextFloat() < 0.8F && inWater(entity)) {
handle.motY += power;
}
}
public static void updateAI(EntityLiving entity) {
@ -266,8 +309,8 @@ public class NMS {
entity.getControllerJump().b();
}
public static void updateNavigationWorld(org.bukkit.entity.Entity entity, org.bukkit.World world) {
if (NAVIGATION_WORLD_FIELD == null || !(entity instanceof LivingEntity))
public static void updateNavigationWorld(LivingEntity entity, org.bukkit.World world) {
if (NAVIGATION_WORLD_FIELD == null)
return;
EntityLiving handle = ((CraftLivingEntity) entity).getHandle();
World worldHandle = ((CraftWorld) world).getHandle();

View File

@ -81,6 +81,6 @@ public enum PlayerAnimation {
}
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.NPCPushEvent;
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.Location;
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.EntityType;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
@ -32,15 +28,15 @@ public class Util {
private static Class<?> RNG_CLASS = null;
public static void assumePose(org.bukkit.entity.Entity entity, float yaw, float pitch) {
EntityLiving handle = ((CraftLivingEntity) entity).getHandle();
NMS.look(handle, yaw, pitch);
public static void assumePose(LivingEntity entity, float yaw, float pitch) {
NMS.look(entity, 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)
Bukkit.getPluginManager().callEvent(new NPCCollisionEvent(npc, entity.getBukkitEntity()));
Bukkit.getPluginManager().callEvent(new NPCCollisionEvent(npc, entity));
}
public static NPCPushEvent callPushEvent(NPC npc, Vector vector) {
NPCPushEvent event = new NPCPushEvent(npc, vector);
event.setCancelled(npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true));
@ -48,7 +44,7 @@ public class Util {
return event;
}
public static void faceEntity(Entity from, Entity at) {
public static void faceEntity(LivingEntity from, LivingEntity at) {
if (from.getWorld() != at.getWorld())
return;
double xDiff, yDiff, zDiff;
@ -66,8 +62,7 @@ public class Util {
if (zDiff < 0.0)
yaw += Math.abs(180 - yaw) * 2;
EntityLiving handle = ((CraftLivingEntity) from).getHandle();
NMS.look(handle, (float) yaw - 90, (float) pitch);
NMS.look(from, (float) yaw - 90, (float) pitch);
}
public static Random getFastRandom() {
@ -130,35 +125,6 @@ public class Util {
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 {
try {
RNG_CLASS = Class.forName("org.uncommons.maths.random.XORShiftRNG");