Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[1.16.4] Perform "logic" during jigsaw structure load

Featured Replies

Posted

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!

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...

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.