Skip to content

Full example

JoniCraftHD edited this page Jul 31, 2026 · 3 revisions

Full Example

const BulkBuilder = Java.loadClass('com.joni.kjs_bc.BulkBuilderLogic') //required
const JsonAssetGenerator = Java.loadClass('com.joni.kjs_bc.JsonAssetGenerator') // required

// 1. Adding Presets
BulkBuilder.create_preset('RAW_ITEM') //doesnt have to be uppercase
    .presetType('item')
    .texture('kubejs:item/raw_overlay')
    .namePrefix('Raw ')           
    .idSuffix('_raw')                
    .tagBoth('c:raw_materials')
    .build();

BulkBuilder.create_preset('ORE_BLOCK')
    .presetType('block')
    .texture('minecraft:block/stone')
    .overlay('kubejs:block/ore_overlay')
    .nameSuffix(' Ore')              
    .idSuffix('_ore')                
    .dropsPreset('RAW_ITEM')
    .soundType('stone')
    .hardness(4.0)
    .requiresTool(true)
    .tagBlock('minecraft:mineable/pickaxe')
    .tagBlock('minecraft:needs_iron_tool')
    .tagBoth('c:ores')
    .build();

// 2. Bulk Creation definition
BulkBuilder.bulkCreate('sapphire')
    .displayName('Sapphire')
    .tooltip(Text.gray('Al₂O₃ ').append(Text.green(' Tier 5 Gem')))
    .presets('RAW_ITEM', 'ORE_BLOCK') //what presets you want to generate
    .tintOverlay('#667DEA')
    .build();

// 3. Asset Generation
JsonAssetGenerator.generateAssetsForCreations(); // required to the textures to generate

// 4. Registry Item
//important Items HAVE to be registered first if .dropPreset is used !!!
StartupEvents.registry('item', event => {
    BulkBuilder.getCreations().forEach(creation => {
        creation.presetIds().forEach(presetId => {
            let preset = BulkBuilder.getPresets().get(presetId);

            if (preset && preset.type() === 'item') {
                let itemId = `${creation.id()}${preset.idSuffix()}`;
                let finalName = `${preset.namePrefix()}${creation.displayName()}${preset.nameSuffix()}`;

                let item = event.create(itemId)
                    .displayName(finalName)
                    .color(0, creation.tintColor()) // item registry requires colour 0
                    .maxStackSize(preset.maxStackSize())
                    .rarity(preset.rarity());

                if (preset.baseTexture()) item.texture(preset.baseTexture());

               
               if (creation.tooltip()) {
                   item.tooltip(creation.tooltip());
               }

                preset.itemTags().forEach(tag => item.tag(tag));
                preset.bothTags().forEach(tag => item.tag(tag));
            }
        });
    });
});

// Block registry
StartupEvents.registry('block', event => {
    BulkBuilder.getCreations().forEach(creation => {
        creation.presetIds().forEach(presetId => {
            let preset = BulkBuilder.getPresets().get(presetId);

            if (preset && preset.type() === 'block') {
                let currentBlockId = `${creation.id()}${preset.idSuffix()}`;
                let finalName = `${preset.namePrefix()}${creation.displayName()}${preset.nameSuffix()}`;

                let block = preset.hasGravity()
                    ? event.create(currentBlockId, 'falling')
                    : event.create(currentBlockId);

                block.displayName(finalName)
                    .soundType(preset.soundType())
                    .hardness(preset.hardness())
                    .resistance(preset.resistance())
                    .lightLevel(preset.lightLevel())
                    .opaque(preset.opaque())
                    .fullBlock(preset.fullBlock())
                    .requiresTool(preset.requiresTool())
                    .renderType("cutout")
                    .color(1, creation.tintColor());

                preset.blockTags().forEach(tag => block.tagBlock(tag));
                preset.bothTags().forEach(tag => block.tagBlock(tag));

                if (preset.noItem()) {
                    block.noItem();
                } else {
                    block.item(itemBuilder => {
                        itemBuilder.color(1, creation.tintColor()); //needs colour 1
                        itemBuilder.rarity(preset.rarity());

                        preset.bothTags().forEach(tag => itemBuilder.tag(tag));
                    });
                }
            }
        });
    });
});

Clone this wiki locally