Search in sources :

Example 1 with OperationClearArea

use of ivorius.reccomplex.world.gen.feature.structure.OperationClearArea in project RecurrentComplex by Ivorforce.

the class CommandSelectMove method execute.

@Override
public void execute(MinecraftServer server, ICommandSender commandSender, String[] args) throws CommandException {
    RCParameters parameters = RCParameters.of(args, "mirror", "noselect");
    SelectionOwner selectionOwner = RCCommands.getSelectionOwner(commandSender, null, true);
    RCCommands.assertSize(commandSender, selectionOwner);
    BlockPos pos = parameters.pos("x", "y", "z", selectionOwner.getSelectedPoint1(), false).require();
    AxisAlignedTransform2D transform = parameters.transform("rotation", "mirror").optional().orElse(AxisAlignedTransform2D.ORIGINAL);
    boolean noselect = parameters.has("noselect");
    BlockArea area = selectionOwner.getSelection();
    IvWorldData worldData = IvWorldData.capture(commandSender.getEntityWorld(), area, true);
    NBTTagCompound worldDataCompound = worldData.createTagCompound();
    GenericStructure structure = GenericStructure.createDefaultStructure();
    structure.worldDataCompound = worldDataCompound;
    OperationRegistry.queueOperation(new OperationMulti(new OperationClearArea(area), new OperationGenerateStructure(structure, null, transform, pos, true).prepare((WorldServer) commandSender.getEntityWorld())), commandSender);
    if (!noselect) {
        StructureGenerator<GenericStructure.InstanceData> generator = new StructureGenerator<>(structure).transform(transform).lowerCoord(pos);
        //noinspection OptionalGetWithoutIsPresent
        StructureBoundingBox boundingBox = generator.boundingBox().get();
        selectionOwner.setSelection(RCBlockAreas.from(boundingBox));
    }
}
Also used : OperationGenerateStructure(ivorius.reccomplex.world.gen.feature.structure.OperationGenerateStructure) SelectionOwner(ivorius.reccomplex.capability.SelectionOwner) StructureBoundingBox(net.minecraft.world.gen.structure.StructureBoundingBox) AxisAlignedTransform2D(ivorius.ivtoolkit.math.AxisAlignedTransform2D) IvWorldData(ivorius.ivtoolkit.tools.IvWorldData) NBTTagCompound(net.minecraft.nbt.NBTTagCompound) OperationClearArea(ivorius.reccomplex.world.gen.feature.structure.OperationClearArea) RCParameters(ivorius.reccomplex.commands.parameters.RCParameters) BlockArea(ivorius.ivtoolkit.blocks.BlockArea) OperationMulti(ivorius.reccomplex.world.gen.feature.structure.OperationMulti) StructureGenerator(ivorius.reccomplex.world.gen.feature.StructureGenerator) BlockPos(net.minecraft.util.math.BlockPos) GenericStructure(ivorius.reccomplex.world.gen.feature.structure.generic.GenericStructure)

Example 2 with OperationClearArea

use of ivorius.reccomplex.world.gen.feature.structure.OperationClearArea in project RecurrentComplex by Ivorforce.

the class OperationRegistry method dummyOperation.

@Nullable
public static NBTTagCompound dummyOperation(@Nonnull Operation operation, int level) {
    if (level == 0)
        return writeOperation(operation);
    if (operation instanceof OperationGenerateStructure) {
        OperationGenerateStructure genStructure = (OperationGenerateStructure) operation;
        if (level == 1 && genStructure.structure != null) {
            IvWorldData dummyWorldData = genStructure.structure.constructWorldData();
            dummyWorldData.entities.clear();
            dummyWorldData.tileEntities.clear();
            for (BlockPos pos : dummyWorldData.blockCollection.area()) dummyWorldData.blockCollection.setBlockState(pos, (dummyWorldData.blockCollection.getBlockState(pos).isNormalCube() ? Blocks.STONE : Blocks.AIR).getDefaultState());
            GenericStructure dummyStructure = new GenericStructure();
            dummyStructure.worldDataCompound = dummyWorldData.createTagCompound();
            return writeOperation(new OperationGenerateStructure(dummyStructure, genStructure.generationInfoID, genStructure.transform, genStructure.lowerCoord, genStructure.generateAsSource));
        } else if (level == 2)
            return writeOperation(new OperationClearArea(genStructure.generationArea()));
    }
    return null;
}
Also used : OperationGenerateStructure(ivorius.reccomplex.world.gen.feature.structure.OperationGenerateStructure) IvWorldData(ivorius.ivtoolkit.tools.IvWorldData) BlockPos(net.minecraft.util.math.BlockPos) OperationClearArea(ivorius.reccomplex.world.gen.feature.structure.OperationClearArea) GenericStructure(ivorius.reccomplex.world.gen.feature.structure.generic.GenericStructure) Nullable(javax.annotation.Nullable)

Aggregations

IvWorldData (ivorius.ivtoolkit.tools.IvWorldData)2 OperationClearArea (ivorius.reccomplex.world.gen.feature.structure.OperationClearArea)2 OperationGenerateStructure (ivorius.reccomplex.world.gen.feature.structure.OperationGenerateStructure)2 GenericStructure (ivorius.reccomplex.world.gen.feature.structure.generic.GenericStructure)2 BlockPos (net.minecraft.util.math.BlockPos)2 BlockArea (ivorius.ivtoolkit.blocks.BlockArea)1 AxisAlignedTransform2D (ivorius.ivtoolkit.math.AxisAlignedTransform2D)1 SelectionOwner (ivorius.reccomplex.capability.SelectionOwner)1 RCParameters (ivorius.reccomplex.commands.parameters.RCParameters)1 StructureGenerator (ivorius.reccomplex.world.gen.feature.StructureGenerator)1 OperationMulti (ivorius.reccomplex.world.gen.feature.structure.OperationMulti)1 Nullable (javax.annotation.Nullable)1 NBTTagCompound (net.minecraft.nbt.NBTTagCompound)1 StructureBoundingBox (net.minecraft.world.gen.structure.StructureBoundingBox)1