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); }