Search in sources :

Example 1 with PreloadedBooleanExpression

use of ivorius.reccomplex.utils.expression.PreloadedBooleanExpression in project RecurrentComplex by Ivorforce.

the class CommandSelectFlood method execute.

@Override
public void execute(MockWorld world, ICommandSender commandSender, String[] args) throws CommandException {
    RCParameters parameters = RCParameters.of(args);
    SelectionOwner selectionOwner = RCCommands.getSelectionOwner(commandSender, null, true);
    RCCommands.assertSize(commandSender, selectionOwner);
    PreloadedBooleanExpression<EnumFacing> facingExpression = PreloadedBooleanExpression.with(exp -> {
        exp.addConstants(EnumFacing.values());
        exp.addEvaluators(axis -> facing -> facing.getAxis() == axis, EnumFacing.Axis.values());
        exp.addEvaluator("horizontal", f -> f.getHorizontalIndex() >= 0);
        exp.addEvaluator("vertical", f -> f.getHorizontalIndex() < 0);
    });
    facingExpression.setExpression(parameters.get().move(2).text().optional().orElse(""));
    List<EnumFacing> available = Arrays.stream(EnumFacing.values()).filter(facingExpression).collect(Collectors.toList());
    List<BlockPos> dirty = Lists.newArrayList(selectionOwner.getSelection());
    Set<BlockPos> visited = Sets.newHashSet(dirty);
    Block dstBlock = parameters.mc().block(commandSender).require();
    int[] dstMeta = parameters.rc().move(1).metadatas().optional().orElse(new int[1]);
    List<IBlockState> dst = IntStream.of(dstMeta).mapToObj(m -> BlockStates.fromMetadata(dstBlock, m)).collect(Collectors.toList());
    while (!dirty.isEmpty()) {
        BlockPos pos = dirty.remove(dirty.size() - 1);
        for (EnumFacing facing : available) {
            BlockPos offset = pos.offset(facing);
            if (RCBlockLogic.isAir(world, offset) && visited.add(offset))
                dirty.add(offset);
        }
        if (visited.size() > MAX_FLOOD)
            throw new CommandException("Area too big to flood!");
    }
    for (BlockPos pos : visited) {
        IBlockState state = dst.get(world.rand().nextInt(dst.size()));
        world.setBlockState(pos, state, 2);
    }
}
Also used : SelectionOwner(ivorius.reccomplex.capability.SelectionOwner) PreloadedBooleanExpression(ivorius.reccomplex.utils.expression.PreloadedBooleanExpression) IntStream(java.util.stream.IntStream) java.util(java.util) RCCommands(ivorius.reccomplex.commands.RCCommands) EnumFacing(net.minecraft.util.EnumFacing) BlockStates(ivorius.ivtoolkit.blocks.BlockStates) ServerTranslations(ivorius.reccomplex.utils.ServerTranslations) BlockPos(net.minecraft.util.math.BlockPos) MockWorld(ivorius.ivtoolkit.world.MockWorld) CommandVirtual(ivorius.reccomplex.commands.CommandVirtual) RCConfig(ivorius.reccomplex.RCConfig) Collectors(java.util.stream.Collectors) Sets(com.google.common.collect.Sets) RCExpect(ivorius.reccomplex.commands.parameters.RCExpect) IBlockState(net.minecraft.block.state.IBlockState) CommandException(net.minecraft.command.CommandException) MinecraftServer(net.minecraft.server.MinecraftServer) Lists(com.google.common.collect.Lists) Block(net.minecraft.block.Block) RCBlockLogic(ivorius.reccomplex.utils.RCBlockLogic) ICommandSender(net.minecraft.command.ICommandSender) RCParameters(ivorius.reccomplex.commands.parameters.RCParameters) Nullable(javax.annotation.Nullable) SelectionOwner(ivorius.reccomplex.capability.SelectionOwner) IBlockState(net.minecraft.block.state.IBlockState) EnumFacing(net.minecraft.util.EnumFacing) CommandException(net.minecraft.command.CommandException) RCParameters(ivorius.reccomplex.commands.parameters.RCParameters) Block(net.minecraft.block.Block) BlockPos(net.minecraft.util.math.BlockPos)

Aggregations

Lists (com.google.common.collect.Lists)1 Sets (com.google.common.collect.Sets)1 BlockStates (ivorius.ivtoolkit.blocks.BlockStates)1 MockWorld (ivorius.ivtoolkit.world.MockWorld)1 RCConfig (ivorius.reccomplex.RCConfig)1 SelectionOwner (ivorius.reccomplex.capability.SelectionOwner)1 CommandVirtual (ivorius.reccomplex.commands.CommandVirtual)1 RCCommands (ivorius.reccomplex.commands.RCCommands)1 RCExpect (ivorius.reccomplex.commands.parameters.RCExpect)1 RCParameters (ivorius.reccomplex.commands.parameters.RCParameters)1 RCBlockLogic (ivorius.reccomplex.utils.RCBlockLogic)1 ServerTranslations (ivorius.reccomplex.utils.ServerTranslations)1 PreloadedBooleanExpression (ivorius.reccomplex.utils.expression.PreloadedBooleanExpression)1 java.util (java.util)1 Collectors (java.util.stream.Collectors)1 IntStream (java.util.stream.IntStream)1 Nullable (javax.annotation.Nullable)1 Block (net.minecraft.block.Block)1 IBlockState (net.minecraft.block.state.IBlockState)1 CommandException (net.minecraft.command.CommandException)1