public static boolean isSoftBlock(int blockID, World world, int x, int y, int z) { Block block = Block.blocksList[blockID]; return blockID == 0 || block == null || BuildCraftAPI.softBlocks[blockID] || block.isAirBlock(world, x, y, z); }
public static List<ItemStack> getItemStackFromBlock(World world, int i, int j, int k) { Block block = Block.blocksList[world.getBlockId(i, j, k)]; if (block == null) return null; if (block.isAirBlock(world, i, j, k)) return null; int meta = world.getBlockMetadata(i, j, k); return block.getBlockDropped(world, i, j, k, meta, 0); }
public static boolean canChangeBlock(int blockID, World world, int x, int y, int z) { Block block = Block.blocksList[blockID]; if (blockID == 0 || block == null || block.isAirBlock(world, x, y, z)) return true; if (block.getBlockHardness(world, x, y, z) < 0) return false; if (blockID == BuildCraftEnergy.oilMoving.blockID || blockID == BuildCraftEnergy.oilStill.blockID) return false; if (blockID == Block.lavaStill.blockID || blockID == Block.lavaMoving.blockID) return false; return true; }
protected RedNetConnectionType getConnectionState(ForgeDirection side, boolean decorative) { byte _mode = cableMode[side.ordinal()]; if (!decorative) _mode = 1; if (cableMode[6] == 1) _mode = 3; BlockPosition bp = new BlockPosition(this); bp.orientation = side; bp.moveForwards(1); int blockId = worldObj.getBlockId(bp.x, bp.y, bp.z); Block b = Block.blocksList[blockId]; if (b == null) // block doesn't exist (air) - never connect { return RedNetConnectionType.None; } else if (blockId == MineFactoryReloadedCore.rednetCableBlock.blockID) // cables - always connect { return RedNetConnectionType.CableAll; } else if (_mode == 3) // cable-only, and not a cable - don't connect { return RedNetConnectionType.None; } else if (b instanceof IConnectableRedNet) // API node - let them figure it out { RedNetConnectionType type = ((IConnectableRedNet) b) .getConnectionType(worldObj, bp.x, bp.y, bp.z, side.getOpposite()); return type.isConnectionForced & !(_mode == 1 | _mode == 2) ? RedNetConnectionType.None : type; } else if (b instanceof IRedNetNoConnection || b.isAirBlock(worldObj, bp.x, bp.y, bp.z)) { return RedNetConnectionType.None; } else if (_mode == 2 && b.isBlockSolidOnSide(worldObj, bp.x, bp.y, bp.z, side.getOpposite())) { return RedNetConnectionType.ForcedCableSingle; } else if (_mode == 1) // mode 1 forces plate mode for weak power { return RedNetConnectionType.ForcedPlateSingle; } else if ((blockId <= _maxVanillaBlockId && !_connectionWhitelist.contains(blockId)) || _connectionBlackList.contains(blockId) || b instanceof IRedNetDecorative) // standard connection logic, then figure out if we shouldn't connect // mode 1 will skip this { return RedNetConnectionType.None; } else if (b.isBlockSolidOnSide(worldObj, bp.x, bp.y, bp.z, side.getOpposite())) { return RedNetConnectionType.CableSingle; } else { return RedNetConnectionType.PlateSingle; } }
@Override public void onUpdate() { Vector3 vec = new Vector3(this.posX, this.posY, this.posZ); vec = vec.translate(new Vector3(0, -1, 0)); final Block blockAt = Block.blocksList[vec.getBlockID(this.worldObj)]; if (blockAt != null) { if (blockAt instanceof BlockFence) { } else if (blockAt.isAirBlock(this.worldObj, vec.intX(), vec.intY(), vec.intZ())) { this.motionY -= 0.02F; } } this.moveEntity(this.motionX, this.motionY, this.motionZ); }
@Override public boolean generate(World world, Random rand, int x, int retries, int z) { for (int c = 0; c < retries; c++) { int y = world.getActualHeight() - 1; Block block = Block.blocksList[world.getBlockId(x, y, z)]; while ((block == null || block.isAirBlock(world, x, y, z)) && y > 0) { y--; } if (!growTree(world, rand, x, y + 1, z)) { retries--; } x += rand.nextInt(16) - 8; z += rand.nextInt(16) - 8; } return true; }
public boolean growTree(World world, Random rand, int x, int y, int z) { int treeHeight = rand.nextInt(3) + 5, worldHeight = world.getHeight(); Block block; if (y >= 1 && y + treeHeight + 1 <= worldHeight) { int blockId; int xOffset; int yOffset; int zOffset; blockId = world.getBlockId(x, y - 1, z); block = Block.blocksList[blockId]; boolean isGrass = blockId == Block.grass.blockID; if ((block != null && ((isGrass | blockId == Block.dirt.blockID) || block.canSustainPlant( world, x, y - 1, z, ForgeDirection.UP, ((BlockSapling) MineFactoryReloadedCore.rubberSaplingBlock)))) && y < worldHeight - treeHeight - 1) { for (yOffset = y; yOffset <= y + 1 + treeHeight; ++yOffset) { byte radius = 1; if (yOffset == y) { radius = 0; } if (yOffset >= y + 1 + treeHeight - 2) { radius = 2; } if (yOffset >= 0 & yOffset < worldHeight) { for (xOffset = x - radius; xOffset <= x + radius; ++xOffset) { for (zOffset = z - radius; zOffset <= z + radius; ++zOffset) { blockId = world.getBlockId(xOffset, yOffset, zOffset); block = Block.blocksList[blockId]; if (block != null && !(block.isLeaves(world, xOffset, yOffset, zOffset) || block.isAirBlock(world, xOffset, yOffset, zOffset) || block.canBeReplacedByLeaves(world, xOffset, yOffset, zOffset))) { return false; } } } } else { return false; } } if (isGrass) { this.setBlock(world, x, y - 1, z, Block.dirt.blockID); } for (yOffset = y - 3 + treeHeight; yOffset <= y + treeHeight; ++yOffset) { int var12 = yOffset - (y + treeHeight), center = 1 - var12 / 2; for (xOffset = x - center; xOffset <= x + center; ++xOffset) { int xPos = xOffset - x, t = xPos >> 31; xPos = (xPos + t) ^ t; for (zOffset = z - center; zOffset <= z + center; ++zOffset) { int zPos = zOffset - z; zPos = (zPos + (t = zPos >> 31)) ^ t; block = Block.blocksList[world.getBlockId(xOffset, yOffset, zOffset)]; if (((xPos != center | zPos != center) || rand.nextInt(2) != 0 && var12 != 0) && (block == null || block.isLeaves(world, xOffset, yOffset, zOffset) || block.isAirBlock(world, xOffset, yOffset, zOffset) || block.canBeReplacedByLeaves(world, xOffset, yOffset, zOffset))) { this.setBlockAndMetadata( world, xOffset, yOffset, zOffset, MineFactoryReloadedCore.rubberLeavesBlock.blockID, 0); } } } } for (yOffset = 0; yOffset < treeHeight; ++yOffset) { xOffset = world.getBlockId(x, y + yOffset, z); block = Block.blocksList[xOffset]; if (block == null || block.isAirBlock(world, x, y + yOffset, z) || block.isLeaves(world, x, y + yOffset, z)) { this.setBlockAndMetadata( world, x, y + yOffset, z, MineFactoryReloadedCore.rubberWoodBlock.blockID, 1); } } return true; } } return false; }