Search in sources :

Example 11 with StructureBoundingBox

use of net.minecraft.world.gen.structure.StructureBoundingBox in project RecurrentComplex by Ivorforce.

the class TransformerSingleBlock method transform.

@Override
public void transform(S instanceData, Phase phase, StructureSpawnContext context, IvWorldData worldData, RunTransformer transformer) {
    if (!generatesInPhase(instanceData, phase))
        return;
    IvBlockCollection blockCollection = worldData.blockCollection;
    StructureBoundingBox relevantSourceArea = context.intersection(BlockAreas.toBoundingBox(blockCollection.area()));
    if (relevantSourceArea == null)
        return;
    BlockPos lowerCoord = StructureBoundingBoxes.min(context.boundingBox);
    int[] areaSize = new int[] { blockCollection.width, blockCollection.height, blockCollection.length };
    BlockPos.MutableBlockPos worldCoord = new BlockPos.MutableBlockPos();
    for (BlockPos sourceCoord : RCStructureBoundingBoxes.mutablePositions(relevantSourceArea)) {
        IvMutableBlockPos.add(context.transform.applyOn(sourceCoord, worldCoord, areaSize), lowerCoord);
        if (!context.includesComplex(worldCoord))
            continue;
        IBlockState state = blockCollection.getBlockState(sourceCoord);
        if (matches(context.environment, instanceData, state))
            transformBlock(instanceData, Phase.BEFORE, context, areaSize, worldCoord, state);
    }
}
Also used : StructureBoundingBox(net.minecraft.world.gen.structure.StructureBoundingBox) IBlockState(net.minecraft.block.state.IBlockState) BlockPos(net.minecraft.util.math.BlockPos) IvMutableBlockPos(ivorius.ivtoolkit.blocks.IvMutableBlockPos) IvMutableBlockPos(ivorius.ivtoolkit.blocks.IvMutableBlockPos) IvBlockCollection(ivorius.ivtoolkit.blocks.IvBlockCollection)

Aggregations

StructureBoundingBox (net.minecraft.world.gen.structure.StructureBoundingBox)11 BlockPos (net.minecraft.util.math.BlockPos)10 WorldServer (net.minecraft.world.WorldServer)7 AxisAlignedTransform2D (ivorius.ivtoolkit.math.AxisAlignedTransform2D)6 IBlockState (net.minecraft.block.state.IBlockState)5 SelectionOwner (ivorius.reccomplex.capability.SelectionOwner)4 RCParameters (ivorius.reccomplex.commands.parameters.RCParameters)4 StructureGenerator (ivorius.reccomplex.world.gen.feature.StructureGenerator)4 OperationGenerateStructure (ivorius.reccomplex.world.gen.feature.structure.OperationGenerateStructure)4 GenericStructure (ivorius.reccomplex.world.gen.feature.structure.generic.GenericStructure)4 NBTTagCompound (net.minecraft.nbt.NBTTagCompound)4 BlockSurfacePos (ivorius.ivtoolkit.blocks.BlockSurfacePos)2 IvBlockCollection (ivorius.ivtoolkit.blocks.IvBlockCollection)2 IvMutableBlockPos (ivorius.ivtoolkit.blocks.IvMutableBlockPos)2 IvWorldData (ivorius.ivtoolkit.tools.IvWorldData)2 Structure (ivorius.reccomplex.world.gen.feature.structure.Structure)2 StructureSpawnContext (ivorius.reccomplex.world.gen.feature.structure.context.StructureSpawnContext)2 GenerationType (ivorius.reccomplex.world.gen.feature.structure.generic.generation.GenerationType)2 ImmutableMultimap (com.google.common.collect.ImmutableMultimap)1 Lists (com.google.common.collect.Lists)1