Пример #1
0
  public static Boolean canSpawn(Location loc, float width, float height, float length) {
    net.minecraft.server.v1_7_R1.World mcWorld = ((CraftWorld) loc.getWorld()).getHandle();
    float halfEntityWidth = width / 2;
    AxisAlignedBB bb =
        AxisAlignedBB.a(
            loc.getX() - halfEntityWidth,
            loc.getY() - height,
            loc.getZ() - halfEntityWidth,
            loc.getX() + halfEntityWidth,
            loc.getY() - height + length,
            loc.getZ() + halfEntityWidth);

    return getBlockBBsInBB(loc.getWorld(), bb).isEmpty() && !mcWorld.containsLiquid(bb);
  }
Пример #2
0
  @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: Probably check other ids too before doing this ?

      final net.minecraft.server.v1_7_R1.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_R1.Entity other =
            (net.minecraft.server.v1_7_R1.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;
  }
Пример #3
0
public class BlockCacheCBDev extends BlockCache implements IBlockAccess {

  /** Box for one time use, no nesting, no extra storing this(!). */
  protected static final AxisAlignedBB useBox = AxisAlignedBB.a(0, 0, 0, 0, 0, 0);

  protected net.minecraft.server.v1_7_R1.WorldServer world;

  public BlockCacheCBDev(World world) {
    setAccess(world);
  }

  @Override
  public void setAccess(World world) {
    this.world = world == null ? null : ((CraftWorld) world).getHandle();
  }

  @Override
  public int fetchTypeId(final int x, final int y, final int z) {
    return world.getTypeId(x, y, z);
  }

  @Override
  public int fetchData(final int x, final int y, final int z) {
    return world.getData(x, y, z);
  }

  @Override
  public double[] fetchBounds(final int x, final int y, final int z) {

    // TODO: change api for this / use nodes (!)
    final int id = getTypeId(x, y, z);
    final net.minecraft.server.v1_7_R1.Block block = net.minecraft.server.v1_7_R1.Block.e(id);
    if (block == null) return null;
    block.updateShape(this, x, y, z); // TODO: use THIS instead of world.

    // minX, minY, minZ, maxX, maxY, maxZ
    return new double[] {block.x(), block.z(), block.B(), block.y(), block.A(), block.C()};
  }

  @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: Probably check other ids too before doing this ?

      final net.minecraft.server.v1_7_R1.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_R1.Entity other =
            (net.minecraft.server.v1_7_R1.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;
  }

  /* (non-Javadoc)
   * @see fr.neatmonster.nocheatplus.utilities.BlockCache#cleanup()
   */
  @Override
  public void cleanup() {
    super.cleanup();
    world = null;
  }

  @Override
  public TileEntity getTileEntity(final int x, final int y, final int z) {
    return world.getTileEntity(x, y, z);
  }

  @Override
  public Vec3DPool getVec3DPool() {
    return world.getVec3DPool();
  }

  @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 Block getType(int x, int y, int z) {
    return world.getType(x, y, z);
  }
}