Jump to content

[1.16.4] Perform "logic" during jigsaw structure load


tomatosauce

Recommended Posts

I've successful manage to make a jigsaw structure work using the JigsawManager.addPieces() class. It seems to be working fine on worldgen:

public class BridgeStructure extends Structure<NoFeatureConfig> {
    public BridgeStructure() {
        super(NoFeatureConfig.field_236558_a_);
    }

    @Override
    public IStartFactory<NoFeatureConfig> getStartFactory() {
        return BridgeStructure.Start::new;
    }

    @Override
    public GenerationStage.Decoration getDecorationStage() {
        return GenerationStage.Decoration.SURFACE_STRUCTURES;
    }

    @Override // can be generated?
    protected boolean func_230363_a_(ChunkGenerator chunkGenerator, BiomeProvider biomeProvider, long seed, SharedSeedRandom sharedSeedRandom, int chunkX, int chunkZ, Biome biome, ChunkPos chunkPos, NoFeatureConfig noFeatureConfig) {
        return true;
    }

    public static class Start extends StructureStart<NoFeatureConfig> {
        // structureIn     chunkX         chunkZ         mutableBoundingBox     referenceIn    seedIn
        // p_i225876_1_    p_i225876_2_   p_i225876_3_   p_i225876_4_           p_i225876_5_   p_i225876_6_

        public Start(Structure<NoFeatureConfig> structureIn, int chunkX, int chunkZ, MutableBoundingBox mutableBoundingBox, int referenceIn, long seedIn) {
            super(structureIn, chunkX, chunkZ, mutableBoundingBox, referenceIn, seedIn);
        }

        @Override // generatePieces
        public void func_230364_a_(DynamicRegistries dynamicRegistries, ChunkGenerator chunkGenerator, TemplateManager templateManager, int chunkX, int chunkZ, Biome biome, NoFeatureConfig noFeatureConfig) {
            int x = chunkX * 16;
            int z = chunkZ * 16;
            BlockPos centerPos = new BlockPos(x, 0, z);

            // addPieces
            JigsawManager.func_242837_a(
                    dynamicRegistries,
                    new VillageConfig(() -> dynamicRegistries.getRegistry(Registry.JIGSAW_POOL_KEY).getOrDefault(new ResourceLocation(ModFiddle.MOD_ID, "bridge/bridge_start")), 10),
                    AbstractVillagePiece::new,
                    chunkGenerator,
                    templateManager,
                    centerPos,
                    this.components,
                    this.rand,
                    false,
                    true);

            int submergedBaseOffset = -6;
            this.components.forEach(piece -> piece.offset(0, submergedBaseOffset, 0));
            this.recalculateStructureSize();
        }
     }
  }

I'm interested in adding some sort of logic when jigsaw pieces are added to the structure, something that I cannot do without somehow overriding (or copying) the class. For example, continuously adding jigsaw pieces so long as there are jigsaw blocks present or generating three consecutive pieces... 

I'm afraid of doing something horribly stupid here. Should I not be looking into the jigsaw manager at all even? Thank for the help!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.