示例#1
0
  public static Skeleton spawn(Location location) {

    MinecraftServer server = MinecraftServer.getServer();
    WorldServer world = server.getWorldServer(0);
    for (WorldServer ws : server.worlds) {
      if (ws.getWorld().getName().equals(location.getWorld().getName())) {
        world = ws;
        break;
      }
    }
    World mcWorld = (World) ((CraftWorld) location.getWorld()).getHandle();
    final SkeletonNPC customEntity = new SkeletonNPC(world);
    customEntity.setLocation(
        location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch());
    ((CraftLivingEntity) customEntity.getBukkitEntity()).setRemoveWhenFarAway(false);
    mcWorld.addEntity(customEntity, CreatureSpawnEvent.SpawnReason.CUSTOM);
    return (CraftSkeleton) customEntity.getBukkitEntity();
  }
  @Override
  public boolean standsOnEntity(
      final Entity entity,
      final double minX,
      final double minY,
      final double minZ,
      final double maxX,
      final double maxY,
      final double maxZ) {
    try {
      // TODO: Find some simplification!

      final net.minecraft.server.v1_7_R4.Entity mcEntity = ((CraftEntity) entity).getHandle();

      final AxisAlignedBB box = useBox.b(minX, minY, minZ, maxX, maxY, maxZ);
      @SuppressWarnings("rawtypes")
      final List list = world.getEntities(mcEntity, box);
      @SuppressWarnings("rawtypes")
      final Iterator iterator = list.iterator();
      while (iterator.hasNext()) {
        final net.minecraft.server.v1_7_R4.Entity other =
            (net.minecraft.server.v1_7_R4.Entity) iterator.next();
        if (!(other instanceof EntityBoat)) { // && !(other instanceof EntityMinecart)) continue;
          continue;
        }
        if (minY >= other.locY && minY - other.locY <= 0.7) {
          return true;
        }
        // Still check this for some reason.
        final AxisAlignedBB otherBox = other.boundingBox;
        if (box.a > otherBox.d
            || box.d < otherBox.a
            || box.b > otherBox.e
            || box.e < otherBox.b
            || box.c > otherBox.f
            || box.f < otherBox.c) {
          continue;
        } else {
          return true;
        }
      }
    } catch (Throwable t) {
      // Ignore exceptions (Context: DisguiseCraft).
    }
    return false;
  }
 @Override
 public int fetchData(final int x, final int y, final int z) {
   return world.getData(x, y, z);
 }
 @Override
 public int fetchTypeId(final int x, final int y, final int z) {
   return world.getTypeId(x, y, z);
 }
 @Override
 public Block getType(int x, int y, int z) {
   return world.getType(x, y, z);
 }
 @Override
 public int getBlockPower(final int arg0, final int arg1, final int arg2, final int arg3) {
   return world.getBlockPower(arg0, arg1, arg2, arg3);
 }
 @Override
 public TileEntity getTileEntity(final int x, final int y, final int z) {
   return world.getTileEntity(x, y, z);
 }