public static void removeBlocksInIteration(EntityPlayer player, ItemStack stack, World world, BlockPos centerPos, Vec3i startDelta, Vec3i endDelta, Predicate<IBlockState> filter, boolean dispose) { for (BlockPos iterPos : BlockPos.getAllInBox(centerPos.add(startDelta), centerPos.add(endDelta))) { if (iterPos.equals(centerPos)) // skip original block space to avoid crash, vanilla code in the tool class will handle it continue; removeBlockWithDrops(player, stack, world, iterPos, filter, dispose); } }
private List<BlockPos> getCoordsToPut(BlockPos pos) { List<BlockPos> possibleCoords = new ArrayList<>(); int range = 4; int rangeY = 4; for (BlockPos bPos : BlockPos.getAllInBox(pos.add(-range, -rangeY, -range), pos.add(range, rangeY, range))) { IBlockState state = world.getBlockState(bPos); Block block = state.getBlock(); if(block.isReplaceableOreGen(state, world, bPos, BlockStateMatcher.forBlock(Blocks.STONE))) possibleCoords.add(bPos); } Collections.shuffle(possibleCoords, rand); return possibleCoords.stream().limit(64).collect(Collectors.toList()); }
public static boolean canEnchanterExist(World world, BlockPos pos, EnumFacing.Axis axis) { for(BlockPos obsidian : OBSIDIAN_LOCATIONS) if(world.getBlockState(pos.add(obsidian)).getBlock() != Blocks.OBSIDIAN) return false; for(BlockPos pylon : PYLON_LOCATIONS.get(axis)) if(world.getBlockState(pos.add(pylon)).getBlock() != ModBlocks.pylon || !BotaniaAPI.internalHandler.isBotaniaFlower(world, pos.add(pylon).down())) return false; for(BlockPos flower : FLOWER_LOCATIONS) if(!BotaniaAPI.internalHandler.isBotaniaFlower(world, pos.add(flower))) return false; return true; }
int[][] getCellTable() { int diam = RANGE * 2 + 1; int[][] table = new int[diam][diam]; BlockPos pos = supertile.getPos(); for(int i = 0; i < diam; i++) for(int j = 0; j < diam; j++) { BlockPos pos_ = pos.add(-RANGE + i, 0, -RANGE + j); table[i][j] = getCellGeneration(pos_); } return table; }
List<EntityItem> getItems() { return world.getEntitiesWithinAABB(EntityItem.class, new AxisAlignedBB(pos, pos.add(1, 1, 1))); }
@Override public void update() { if (world.isRemote) return; int range = 6; int entityCount = world.getEntitiesWithinAABB(EntityAnimal.class, new AxisAlignedBB(pos.add(-range, -range, -range), pos.add(range + 1, range + 1, range + 1))).size(); if(entityCount != entities) { entities = entityCount; world.updateComparatorOutputLevel(pos, world.getBlockState(pos).getBlock()); } }
/** * Gets the spark attached to the block in the coords passed in. Note that the coords passed * in are for the block that the spark will be on, not the coords of the spark itself. */ public static ICorporeaSpark getSparkForBlock(World world, BlockPos pos) { List<Entity> sparks = world.getEntitiesWithinAABB(Entity.class, new AxisAlignedBB(pos.up(), pos.add(1, 2, 1)), Predicates.instanceOf(ICorporeaSpark.class)); return sparks.isEmpty() ? null : (ICorporeaSpark) sparks.get(0); }
private BlockPos getCoordsToPut() { List<BlockPos> possibleCoords = new ArrayList<>(); for(BlockPos pos : BlockPos.getAllInBox(getPos().add(-RANGE, -RANGE_Y, -RANGE), getPos().add(RANGE, RANGE_Y, RANGE))) { IBlockState state = supertile.getWorld().getBlockState(pos); if(state.getBlock().isReplaceableOreGen(state, supertile.getWorld(), pos, getReplaceMatcher())) possibleCoords.add(pos); } if(possibleCoords.isEmpty()) return null; return possibleCoords.get(supertile.getWorld().rand.nextInt(possibleCoords.size())); }
public List<ItemStack> getFilter() { List<ItemStack> filter = new ArrayList<>(); for(EnumFacing dir : EnumFacing.HORIZONTALS) { List<EntityItemFrame> frames = world.getEntitiesWithinAABB(EntityItemFrame.class, new AxisAlignedBB(pos.offset(dir), pos.offset(dir).add(1, 1, 1))); for(EntityItemFrame frame : frames) { EnumFacing orientation = frame.facingDirection; if(orientation == dir) filter.add(frame.getDisplayedItem()); } } return filter; }
@Override public ISparkEntity getAttachedSpark() { List sparks = world.getEntitiesWithinAABB(Entity.class, new AxisAlignedBB(pos.up(), pos.up().add(1, 1, 1)), Predicates.instanceOf(ISparkEntity.class)); if(sparks.size() == 1) { Entity e = (Entity) sparks.get(0); return (ISparkEntity) e; } return null; }
@Override public ISparkEntity getAttachedSpark() { List<Entity> sparks = world.getEntitiesWithinAABB(Entity.class, new AxisAlignedBB(pos.up(), pos.up().add(1, 1, 1)), Predicates.instanceOf(ISparkEntity.class)); if(sparks.size() == 1) { Entity e = sparks.get(0); return (ISparkEntity) e; } return null; }
private BlockPos getCoordsToPut() { List<BlockPos> possibleCoords = new ArrayList<>(); int range = getRange(); int rangeY = getRangeY(); BlockStateMatcher matcher = BlockStateMatcher.forBlock(Blocks.STONE); for(BlockPos pos : BlockPos.getAllInBox(getPos().add(-range, -rangeY, -range), getPos().add(range, rangeY, range))) { IBlockState state = supertile.getWorld().getBlockState(pos); if(state.getBlock().isReplaceableOreGen(state, supertile.getWorld(), pos, matcher)) possibleCoords.add(pos); } if(possibleCoords.isEmpty()) return null; return possibleCoords.get(supertile.getWorld().rand.nextInt(possibleCoords.size())); }
/** * Returns the multiblock component for the coordinates, adjusted based on the anchor */ private MultiblockComponent getComponent(BlockPos pos) { return multiblock.getComponentForLocation(pos.add(new BlockPos(-anchorPos.getX(), -anchorPos.getY(), -anchorPos.getZ()))); } }
public static void renderMultiblockOnPage(Multiblock mb) { GlStateManager.translate(-0.5, -0.5, -0.5); blockAccess.update(null, mb, mb.offPos); for(MultiblockComponent comp : mb.getComponents()) { BlockPos pos = comp.getRelativePosition(); doRenderComponent(mb, comp, pos.add(mb.offPos)); } }
@Override public void update() { boolean state = world.getBlockState(getPos()).getValue(BotaniaStateProps.POWERED); boolean expectedState = world.getEntitiesWithinAABB(EntityThrowable.class, new AxisAlignedBB(pos, pos.add(1, 1, 1)), Predicates.instanceOf(IManaBurst.class)).size() != 0; if(state != expectedState && !world.isRemote) world.setBlockState(getPos(), world.getBlockState(getPos()).withProperty(BotaniaStateProps.POWERED, expectedState), 1 | 2); if(expectedState) for(int i = 0; i < 4; i++) Botania.proxy.sparkleFX(pos.getX() + Math.random(), pos.getY() + Math.random(), pos.getZ() + Math.random(), 1F, 0.2F, 0.2F, 0.7F + 0.5F * (float) Math.random(), 5); }
private boolean checkPosition(BlockPos pos, IBlockState state, boolean onlyCheckBlock) { BlockPos pos_ = getPos().add(pos); IBlockState stateat = world.getBlockState(pos_); Block blockat = stateat.getBlock(); if(state.getBlock() == Blocks.AIR ? blockat.isAir(stateat, world, pos_) : blockat == state.getBlock()) return onlyCheckBlock || stateat == state; return false; }
@Override public void onUpdate() { super.onUpdate(); if(supertile.getWorld().isRemote || redstoneSignal > 0) return; final int cost = 20; List<EntityLivingBase> entities = supertile.getWorld().getEntitiesWithinAABB(EntityLivingBase.class, new AxisAlignedBB(supertile.getPos().add(-RANGE, -RANGE, -RANGE), supertile.getPos().add(RANGE + 1, RANGE + 1, RANGE + 1))); for(EntityLivingBase entity : entities) { if(!(entity instanceof EntityPlayer) && entity.getActivePotionEffect(MobEffects.POISON) == null && mana >= cost && !entity.world.isRemote && entity.getCreatureAttribute() != EnumCreatureAttribute.UNDEAD) { entity.addPotionEffect(new PotionEffect(MobEffects.POISON, 60, 0)); mana -= cost; } } }
@Override public boolean matches(World world, BlockPos pos) { return world.getBlockState(pos).getBlock().isBeaconBase(world, pos, pos.add(new BlockPos(-relPos.getX(), -relPos.getY(), -relPos.getZ()))); }
@Override public void updateTick(World world, BlockPos pos, IBlockState state, Random rand) { if(!world.isRemote && state.getBlock() == this && world.getLight(pos.up()) >= 9) { AltGrassVariant variant = state.getValue(BotaniaStateProps.ALTGRASS_VARIANT); for(int l = 0; l < 4; ++l) { BlockPos pos1 = pos.add(rand.nextInt(3) - 1, rand.nextInt(5) - 3, rand.nextInt(3) - 1); world.getBlockState(pos1.up()).getBlock(); if(world.getBlockState(pos1).getBlock() == Blocks.DIRT && world.getBlockState(pos1).getValue(BlockDirt.VARIANT) == BlockDirt.DirtType.DIRT && world.getLight(pos1.up()) >= 4 && world.getBlockLightOpacity(pos1.up()) <= 2) world.setBlockState(pos1, getDefaultState().withProperty(BotaniaStateProps.ALTGRASS_VARIANT, variant), 1 | 2); } } }