Search in sources :

Example 11 with GenericStructure

use of ivorius.reccomplex.world.gen.feature.structure.generic.GenericStructure 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(genStructure.dummy(dummyStructure));
        } else if (level == 2)
            return writeOperation(new OperationClearArea(genStructure.generationArea()));
    }
    return null;
}
Also used : IvWorldData(ivorius.ivtoolkit.tools.IvWorldData) BlockPos(net.minecraft.util.math.BlockPos) GenericStructure(ivorius.reccomplex.world.gen.feature.structure.generic.GenericStructure) Nullable(javax.annotation.Nullable)

Example 12 with GenericStructure

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

the class RCParameter method genericStructure.

public Result<GenericStructure> genericStructure() {
    return first().map(id -> {
        Structure structure = StructureRegistry.INSTANCE.get(id);
        if (structure == null)
            throw ServerTranslations.commandException("commands.structure.notRegistered", id);
        GenericStructure genericStructureInfo = structure.copyAsGenericStructure();
        if (genericStructureInfo == null)
            throw ServerTranslations.commandException("commands.structure.notGeneric", id);
        return genericStructureInfo;
    });
}
Also used : GenericStructure(ivorius.reccomplex.world.gen.feature.structure.generic.GenericStructure) Structure(ivorius.reccomplex.world.gen.feature.structure.Structure) GenericStructure(ivorius.reccomplex.world.gen.feature.structure.generic.GenericStructure)

Example 13 with GenericStructure

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

the class PacketEditStructureHandler method openEditStructure.

public static void openEditStructure(GenericStructure structureInfo, String structureID, EntityPlayerMP player) {
    if (structureID == null)
        structureID = "NewStructure";
    RCEntityInfo entityInfo = RCEntityInfo.get(player, null);
    if (entityInfo != null)
        entityInfo.setCachedExportStructureBlockDataNBT(structureInfo.worldDataCompound);
    SimpleLeveledRegistry<Structure<?>>.Status<Structure<?>> status = StructureRegistry.INSTANCE.status(structureID);
    RecurrentComplex.network.sendTo(new PacketEditStructure(structureInfo, structureID, SaveDirectoryData.defaultData(structureID, status != null && status.isActive(), RecurrentComplex.loader.tryFindIDs(ResourceDirectory.ACTIVE.toPath(), RCFileSuffix.STRUCTURE), RecurrentComplex.loader.tryFindIDs(ResourceDirectory.INACTIVE.toPath(), RCFileSuffix.STRUCTURE))), player);
}
Also used : RCEntityInfo(ivorius.reccomplex.capability.RCEntityInfo) GenericStructure(ivorius.reccomplex.world.gen.feature.structure.generic.GenericStructure) Structure(ivorius.reccomplex.world.gen.feature.structure.Structure) GuiEditGenericStructure(ivorius.reccomplex.gui.editstructure.GuiEditGenericStructure) SimpleLeveledRegistry(ivorius.reccomplex.files.SimpleLeveledRegistry)

Example 14 with GenericStructure

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

the class PacketSaveStructureHandler method processServer.

@Override
public void processServer(PacketSaveStructure message, MessageContext ctx, WorldServer server) {
    NetHandlerPlayServer netHandlerPlayServer = ctx.getServerHandler();
    EntityPlayerMP player = netHandlerPlayServer.player;
    if (RecurrentComplex.checkPerms(player))
        return;
    RCEntityInfo entityInfo = RCEntityInfo.get(player, null);
    GenericStructure genericStructureInfo = message.getStructureInfo();
    if (entityInfo != null)
        genericStructureInfo.worldDataCompound = entityInfo.getCachedExportStructureBlockDataNBT();
    SaveDirectoryData.Result saveDirectoryDataResult = message.getSaveDirectoryDataResult();
    String id = message.getStructureID();
    ResourceDirectory saveDir = saveDirectoryDataResult.directory;
    write(player, genericStructureInfo, id, saveDir, saveDirectoryDataResult.deleteOther, true);
}
Also used : ResourceDirectory(ivorius.reccomplex.files.loading.ResourceDirectory) SaveDirectoryData(ivorius.reccomplex.utils.SaveDirectoryData) EntityPlayerMP(net.minecraft.entity.player.EntityPlayerMP) RCEntityInfo(ivorius.reccomplex.capability.RCEntityInfo) NetHandlerPlayServer(net.minecraft.network.NetHandlerPlayServer) GenericStructure(ivorius.reccomplex.world.gen.feature.structure.generic.GenericStructure)

Example 15 with GenericStructure

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

the class PacketWorldDataHandler method processServer.

@Override
public void processServer(PacketWorldData message, MessageContext ctx, WorldServer world) {
    BlockPos origin = message.source;
    BlockArea area = new BlockArea(message.capturePoint1.add(origin), message.capturePoint2.add(origin));
    // Send captured back
    IvWorldData worldData = IvWorldData.capture(world, area, true);
    // Unsupported because of recursion and TE scripts not working anyway
    worldData.tileEntities.removeIf(te -> TileEntity.create(world, te) instanceof TileEntityBlockScript);
    PacketWorldData packet = new PacketWorldData(worldData.createTagCompound(), origin, message.capturePoint1, message.capturePoint2);
    RecurrentComplex.network.sendTo(packet, ctx.getServerHandler().player);
    if (message.worldData != null) {
        GenericStructure structure = new GenericStructure();
        structure.worldDataCompound = message.worldData;
        new StructureGenerator<>(structure).world(world).lowerCoord(message.capturePoint1.add(origin)).generationPredicate(p -> !p.equals(origin)).generate();
    }
}
Also used : BlockArea(ivorius.ivtoolkit.blocks.BlockArea) IvWorldData(ivorius.ivtoolkit.tools.IvWorldData) WorldScriptHolder(ivorius.reccomplex.world.gen.script.WorldScriptHolder) GenericStructure(ivorius.reccomplex.world.gen.feature.structure.generic.GenericStructure) Structures(ivorius.reccomplex.world.gen.feature.structure.Structures) IMessage(net.minecraftforge.fml.common.network.simpleimpl.IMessage) SchedulingMessageHandler(ivorius.ivtoolkit.network.SchedulingMessageHandler) BlockPositions(ivorius.ivtoolkit.blocks.BlockPositions) TileEntityBlockScript(ivorius.reccomplex.block.TileEntityBlockScript) TableDataSource(ivorius.reccomplex.gui.table.datasource.TableDataSource) TableDataSourceWorldScriptHolder(ivorius.reccomplex.gui.worldscripts.TableDataSourceWorldScriptHolder) StructureGenerator(ivorius.reccomplex.world.gen.feature.StructureGenerator) BlockPos(net.minecraft.util.math.BlockPos) TableNavigator(ivorius.reccomplex.gui.table.TableNavigator) BlockArea(ivorius.ivtoolkit.blocks.BlockArea) GuiScreen(net.minecraft.client.gui.GuiScreen) MessageContext(net.minecraftforge.fml.common.network.simpleimpl.MessageContext) Minecraft(net.minecraft.client.Minecraft) Side(net.minecraftforge.fml.relauncher.Side) TileEntity(net.minecraft.tileentity.TileEntity) RecurrentComplex(ivorius.reccomplex.RecurrentComplex) TableDelegate(ivorius.reccomplex.gui.table.TableDelegate) SideOnly(net.minecraftforge.fml.relauncher.SideOnly) WorldServer(net.minecraft.world.WorldServer) StructureGenerator(ivorius.reccomplex.world.gen.feature.StructureGenerator) IvWorldData(ivorius.ivtoolkit.tools.IvWorldData) BlockPos(net.minecraft.util.math.BlockPos) GenericStructure(ivorius.reccomplex.world.gen.feature.structure.generic.GenericStructure) TileEntityBlockScript(ivorius.reccomplex.block.TileEntityBlockScript)

Aggregations

GenericStructure (ivorius.reccomplex.world.gen.feature.structure.generic.GenericStructure)19 BlockPos (net.minecraft.util.math.BlockPos)7 IvWorldData (ivorius.ivtoolkit.tools.IvWorldData)6 StructureGenerator (ivorius.reccomplex.world.gen.feature.StructureGenerator)6 WorldServer (net.minecraft.world.WorldServer)6 AxisAlignedTransform2D (ivorius.ivtoolkit.math.AxisAlignedTransform2D)5 Parameters (ivorius.mcopts.commands.parameters.Parameters)5 RCP (ivorius.reccomplex.commands.parameters.RCP)5 ResourceDirectory (ivorius.reccomplex.files.loading.ResourceDirectory)5 EntityPlayerMP (net.minecraft.entity.player.EntityPlayerMP)5 OperationGenerateStructure (ivorius.reccomplex.operation.OperationGenerateStructure)4 BlockArea (ivorius.ivtoolkit.blocks.BlockArea)3 RecurrentComplex (ivorius.reccomplex.RecurrentComplex)3 RCEntityInfo (ivorius.reccomplex.capability.RCEntityInfo)3 SelectionOwner (ivorius.reccomplex.capability.SelectionOwner)3 NBTTagCompound (net.minecraft.nbt.NBTTagCompound)3 BlockPositions (ivorius.ivtoolkit.blocks.BlockPositions)2 MockWorld (ivorius.ivtoolkit.world.MockWorld)2 CommandExpecting (ivorius.mcopts.commands.CommandExpecting)2 ivorius.mcopts.commands.parameters (ivorius.mcopts.commands.parameters)2