diff --git a/kubejs/assets/createastral/ponder/building_desizer.nbt b/kubejs/assets/createastral/ponder/building_desizer.nbt new file mode 100644 index 000000000..d58ae1e52 Binary files /dev/null and b/kubejs/assets/createastral/ponder/building_desizer.nbt differ diff --git a/kubejs/assets/createastral/ponder/building_refinery.nbt b/kubejs/assets/createastral/ponder/building_refinery.nbt new file mode 100644 index 000000000..22f3cd0d0 Binary files /dev/null and b/kubejs/assets/createastral/ponder/building_refinery.nbt differ diff --git a/kubejs/assets/createastral/ponder/using_desizer.nbt b/kubejs/assets/createastral/ponder/using_desizer.nbt new file mode 100644 index 000000000..8c36bfa9b Binary files /dev/null and b/kubejs/assets/createastral/ponder/using_desizer.nbt differ diff --git a/kubejs/assets/createastral/ponder/using_refinery.nbt b/kubejs/assets/createastral/ponder/using_refinery.nbt new file mode 100644 index 000000000..5fe100182 Binary files /dev/null and b/kubejs/assets/createastral/ponder/using_refinery.nbt differ diff --git a/kubejs/client_scripts/ponder.js b/kubejs/client_scripts/ponder.js deleted file mode 100644 index 91ab810cc..000000000 --- a/kubejs/client_scripts/ponder.js +++ /dev/null @@ -1,46 +0,0 @@ -(function ponder() { - onEvent("ponder.tag", (event) => { - event.createTag( - "kubejs:createastral", - "createastral:astral_singularity", - "Create: Astral", - "Tips and Tricks specific to this modpack", - ["createastral:electrolyser_dummy", "createastral:shimmering_stone", "astraladditions:desizer_controller"] - ); - event.createTag("kubejs:tconstruct", "tconstruct:seared_table", "Tinkers Construct", "Tinkers Construct Basics", [ - "tconstruct:seared_melter", - "tconstruct:foundry_controller", - "tconstruct:seared_faucet", - ]); - }); - onEvent("ponder.registry", (event) => { - // Registers a ponder to the custom machine block, so create offers to ponder - // This should never actually be played, as the ponder should be overwritten - // using Ponder Overrides in the event handlers in the `ponders` directory - event - .create("custommachinery:custom_machine_item") - .scene( - "custom_machine_item", - "You shouldn't see this ponder, it's a debug thing.", - "kubejs:electrolyser", - (scene, util) => {} - ); - }); - // Registers overrides to show correct ponders - onEvent("ponder.override", (event) => { - const item = event.getItem(); - if (!("machine" in item.nbt && typeof item.nbt.machine === "string")) return; - // Custom machines are based on _dummy blocks, where the actual ponders are registered - const machineId = item.nbt.machine; - switch (machineId) { - case undefined: - break; - case "createastral:shimmer_refinery": - event.override("yttr:void_filter"); - break; - default: - event.override(`${machineId}_dummy`); - break; - } - }); -})(); diff --git a/kubejs/client_scripts/ponder_misc.js b/kubejs/client_scripts/ponder_misc.js new file mode 100644 index 000000000..6d76c36e4 --- /dev/null +++ b/kubejs/client_scripts/ponder_misc.js @@ -0,0 +1,117 @@ +(function ponder() { + onEvent("ponder.tag", (event) => { + // Registers tags as seen in the ponder index homepage + /** + * @typedef PonderTags + * @property {Namespace} namespace + * @property {Special.Item} icon + * @property {string} displayName + * @property {string} [tooltip] + * @property {Namespace[]} assignedPonders + */ + + /** @type {PonderTags[]} */ + const ponderTags = [ + { + namespace: "kubejs:createastral_tips", // Anything unique to astral that isn't a machine or part of a kubejs addon e.g. astralsignals + icon: "createastral:astral_singularity", + displayName: "Create: Astral Tips", + tooltip: "Tips and hints specific to this modpack", + assignedPonders: ["createastral:shimmering_stone"], + }, + { + namespace: "kubejs:createastral_machines", // Anything machinery that isnt astral signals or astral gens + icon: "createastral:electrolyser_dummy", + displayName: "Create: Astral Machines", + tooltip: "Guides on the custom machines added by Astral", + assignedPonders: [ + "createastral:stone_growth_chamber_dummy", + "createastral:electrolyser_dummy", + "createastral:slime_furnace_dummy", + "createastral:channeling_transformer_dummy", + "createastral:distillery_dummy", + "createastral:gas_mixer_dummy", + "yttr:void_filter", + "astraladditions:desizer_controller", + ], + }, + { + namespace: "kubejs:astralgen_machines", // Astral gen machines + icon: "astralgenerators:engine_intake_casing", + displayName: "Astral Generators machines", + tooltip: "Guides on some methods of power generation", + assignedPonders: [ + "astralgenerators:assembler", + "astralgenerators:steam_turbine", + "astralgenerators:solid_boiler", + "astralgenerators:fluid_boiler", + "astralgenerators:amalgamation_matrix_controller", + ], + }, + { + namespace: "kubejs:astralsignals", // Everything under the category of Astral Signals including machines and items + icon: "astralsignals:data_drive_blank", + displayName: "Astral Signals", + tooltip: "Guide to Astral Signals", + assignedPonders: [ + "astralsignals:signal_coordinator_dummy", + "astralsignals:radio_telescope_dummy", + "astralsignals:analog_decryptor_dummy", + "astralsignals:pp_decryptor_dummy", + "astralsignals:mp_decryptor_dummy", + "astralsignals:drive_eraser_dummy", + ], + }, + { + namespace: "kubejs:tconstruct", // Tips for how tconstruct works + icon: "tconstruct:seared_table", + displayName: "Tinker's Construct", + tooltip: "Tinker's Construct basics", + assignedPonders: ["tconstruct:seared_melter", "tconstruct:foundry_controller", "tconstruct:seared_faucet"], + }, + { + namespace: "kubejs:yttr", // Custom ponder integration for yttr + icon: "yttr:logo", + displayName: "Yttr", + tooltip: "Mechanics that push the boundaries of gameplay", + assignedPonders: ["yttr:root_of_continuity"], + }, + ]; + + ponderTags.forEach((tag) => { + event.createTag(tag.namespace, tag.icon, tag.displayName, tag.tooltip, tag.assignedPonders); + }); + }); + + onEvent("ponder.registry", (event) => { + // Registers a ponder to the custom machine block, so create offers to ponder + // This should never actually be played, as the ponder should be overwritten + // using Ponder Overrides in the event handlers in the `ponders` directory + event + .create("custommachinery:custom_machine_item") + .scene( + "custom_machine_item", + "You shouldn't see this ponder, it's a debug thing.", + "kubejs:electrolyser", + (scene, util) => {} + ); + }); + + // Registers overrides to show correct ponders + onEvent("ponder.override", (event) => { + const item = event.getItem(); + if (!("machine" in item.nbt && typeof item.nbt.machine === "string")) return; + // Custom machines are based on _dummy blocks, where the actual ponders are registered + const machineId = item.nbt.machine; + switch (machineId) { + case undefined: + break; + case "createastral:shimmer_refinery": + event.override("yttr:void_filter"); + break; + default: + event.override(`${machineId}_dummy`); + break; + } + }); +})(); diff --git a/kubejs/client_scripts/ponders/createastral-machines_desizer.js b/kubejs/client_scripts/ponders/createastral-machines_desizer.js new file mode 100644 index 000000000..65cdd44ee --- /dev/null +++ b/kubejs/client_scripts/ponders/createastral-machines_desizer.js @@ -0,0 +1,155 @@ +(function desizerPonder() { + onEvent("ponder.registry", (event) => { + //! Building the desizer + event + .create("astraladditions:desizer_controller") + .scene("desizer_structure", "Building the Desizer", "createastral:building_desizer", (scene, util) => { + scene.showBasePlate(); + scene.idle(10); // brief pause after showing baseplate + + //? Place frame of desizer + for (let y = 1; y < 4; y++) { + for (let x = 2; x < 5; x++) { + if (y == 2 && x == 3) { + scene.idle(1); // skip hole for controller + } else { + scene.world.showSection([x, y, 5], Facing.DOWN); + } + scene.idle(3); // pause between placments for nice animation + } // places blocks along x axis + } // then moves up one y level and repeats */ + + scene.idle(10); + + scene.text(60, "Place Desizer Casings like this.", [3.5, 2.5, 5.5]).colored(PonderPalette.INPUT); + scene.idle(80); + + scene + .text(80, "The Controller block now goes in the middle.", [3.5, 2.5, 5]) + .colored(PonderPalette.INPUT) + .attachKeyFrame(); + scene.idle(100); + + //? Placing the desizer controller + scene.world.showSection([3, 2, 5], Facing.SOUTH); + scene.idle(10); + + //? Visual update of the casing + scene.world.modifyBlock([2, 1, 5], (curState) => curState.with("type", "bottomright"), true); + scene.world.modifyBlock([3, 1, 5], (curState) => curState.with("type", "bottommiddle"), true); + scene.world.modifyBlock([4, 1, 5], (curState) => curState.with("type", "bottomleft"), true); + scene.world.modifyBlock([2, 2, 5], (curState) => curState.with("type", "middleright"), true); + scene.world.modifyBlock([4, 2, 5], (curState) => curState.with("type", "middleleft"), true); + scene.world.modifyBlock([2, 3, 5], (curState) => curState.with("type", "topright"), true); + scene.world.modifyBlock([3, 3, 5], (curState) => curState.with("type", "topmiddle"), true); + scene.world.modifyBlock([4, 3, 5], (curState) => curState.with("type", "topleft"), true); + + scene + .text(120, "The Casing will visually update once the Controller is placed.", [2, 2.5, 6]) + .colored(PonderPalette.MEDIUM); + scene.idle(140); + + //? Demonstrate redstone power + scene.world.hideSection([2, 1, 5, 4, 3, 5], Facing.UP); + scene.idle(15); + scene.world.showSection([2, 1, 1, 4, 4, 1], Facing.DOWN); + scene.idle(10); + scene.world.showSection([3, 2, 0], Facing.SOUTH); + scene.idle(20); + + scene + .text(120, "The Desizer requires a Redstone input in order to craft things.", [3.5, 2.5, 0.8]) + .colored(PonderPalette.INPUT) + .attachKeyFrame(); + scene.idle(140); + + scene.world.hideSection([2, 1, 0, 4, 4, 1], Facing.UP); + scene.idle(15); + scene.world.showSection([2, 1, 5, 4, 3, 5], Facing.DOWN); + }); + + //! Using the desizer + event + .create("astraladditions:desizer_controller") + .scene("desizer_usage", "Using the Desizer", "createastral:using_desizer", (scene, util) => { + scene.showBasePlate(); + scene.idle(10); + + //? Place desizer + for (let y = 1; y < 4; y++) { + for (let x = 2; x < 5; x++) { + scene.world.showSection([x, y, 5], Facing.DOWN); + scene.idle(3); + } + } + scene.world.showSection([1, 1, 6, 3, 2, 6], Facing.NORTH); + scene.idle(20); + + //? Show working volume + scene.world.setBlocks([2, 1, 2, 4, 4, 4], "chipped:glass_1", false); + scene.idle(1); + for (let y = 1; y < 4; y++) { + scene.world.showSection([2, y, 2, 4, y, 4], Facing.DOWN); + scene.idle(3); + } + + scene + .text(80, "This region is where the Desizer works.", [3.5, 2.5, 3.5]) + .colored(PonderPalette.OUTPUT) + .attachKeyFrame(); + scene.idle(100); + + //? Hide working volume + for (let y = 3; y > 0; y--) { + scene.world.hideSection([2, y, 2, 4, y, 4], Facing.UP); + scene.idle(3); + } + scene.idle(20); + scene.world.setBlocks([2, 1, 2, 4, 4, 4], "minecraft:air", false); + + //? Demonstration with compressed ultrapure carbon + scene.world.setBlocks([3, 1, 3, 3, 3, 3], "yttr:ultrapure_carbon_block", false); + scene.world.setBlocks([2, 2, 3, 4, 2, 3], "yttr:ultrapure_carbon_block", false); + scene.world.setBlocks([3, 2, 2, 3, 2, 4], "yttr:ultrapure_carbon_block", false); + scene.idle(20); + for (let y = 1; y < 4; y++) { + scene.world.showSection([2, y, 2, 4, y, 4], Facing.DOWN); + scene.idle(3); + } + + scene.text(40, "Here is an example.").colored(PonderPalette.MEDIUM).attachKeyFrame(); + scene.idle(60); + scene + .text(120, "Provide the Desizer with a redstone signal while the recipe is assembled.", [1.5, 2.2, 6.5]) + .colored(PonderPalette.INPUT) + .placeNearTarget(); + scene.idle(100); + scene.showControls(60, [1.5, 2.2, 6.5], "down").rightClick(); + scene.idle(40); + + scene.world.modifyBlock([1, 2, 6], (curState) => curState.with("powered", "true").with("face", "floor"), false); // turn button on + scene.world.modifyBlock([2, 2, 6], (curState) => curState.with("power", "15"), false); // light up redstone dust + scene.idle(1); + + scene.world.setBlocks([2, 1, 2, 4, 3, 4], "minecraft:air", true); + scene.world.createItemEntity( + [3.5, 2.5, 3.5], + util.vector.of(0, 0.4, 0), + "yttr:compressed_ultrapure_carbon_block" + ); // drop output + + scene.idle(19); + scene.world.modifyBlock( + [1, 2, 6], + (curState) => curState.with("powered", "false").with("face", "floor"), + false + ); // unpress button + scene.world.modifyBlock([2, 2, 6], (curState) => curState.with("power", "0"), false); // turn off redstone dust + scene.idle(10); + scene + .text(140, "If an invalid recipe is present, the Desizer will drop the blocks in the region as items.") + .colored(PonderPalette.OUTPUT); + scene.idle(100); + }); + }); +})(); diff --git a/kubejs/client_scripts/ponders/createastral-machines_shimmerrefinery.js b/kubejs/client_scripts/ponders/createastral-machines_shimmerrefinery.js new file mode 100644 index 000000000..a02515311 --- /dev/null +++ b/kubejs/client_scripts/ponders/createastral-machines_shimmerrefinery.js @@ -0,0 +1,252 @@ +(function shimmerRefineryPonder() { + onEvent("ponder.registry", (event) => { + //! Building the shimmer refinery + event + .create("yttr:void_filter") + .scene("refinery_structure", "Building the Shimmer Refinery", "createastral:building_refinery", (scene, util) => { + scene.showBasePlate(); + scene.idle(10); + + scene.text(60, "This is quite a complex structure, so please bear with.").colored(PonderPalette.SLOW); + scene.idle(80); + + //? Place blaze burners + // p and q are arbitrary numbers only used for the animation because of the blaze burner spacing and copypasting the same line of code 16 times looks stupid + for (let p = 0; p < 4; p = p + 3) { + for (let q = 0; q < 4; q = q + 3) { + for (let z = 1; z < 3; z++) { + for (let x = 1; x < 3; x++) { + scene.world.showSection([x + p, 1, z + q], Facing.DOWN); + scene.idle(2); + } + } + } + } + + scene.idle(10); + + scene.text(60, "Place Blaze Burners in this pattern.").colored(PonderPalette.INPUT); + scene.idle(80); + + //? Place scaffold + scene.addKeyframe(); + scene.world.showSection([3, 2, 3, 3, 3, 3], Facing.DOWN); + scene.idle(10); + + scene + .text( + 120, + "Place Andesite Iron Frames like this (use a temporary block underneath if necessary).", + [3, 2.5, 3] + ) + .colored(PonderPalette.INPUT); + scene.idle(140); + + scene.addKeyframe(); + scene.world.showSection([3, 4, 2, 3, 4, 4], Facing.DOWN); + scene.world.showSection([2, 4, 3, 4, 4, 3], Facing.DOWN); + scene.idle(10); + + scene.text(60, "Advanced Machine Casing.", [3.5, 5, 3.5]).colored(PonderPalette.INPUT).placeNearTarget(); + scene.idle(80); + + scene.addKeyframe(); + scene.world.showSection([3, 4, 1], Facing.SOUTH); + scene.world.showSection([1, 4, 3], Facing.EAST); + scene.world.showSection([3, 4, 5], Facing.NORTH); + scene.world.showSection([5, 4, 3], Facing.WEST); + scene.idle(10); + + scene.text(60, "Andesite Iron Frame.").colored(PonderPalette.INPUT); + scene.idle(80); + + scene.addKeyframe(); + scene.world.showSection([3, 5, 3], Facing.DOWN); + scene.idle(10); + + scene.text(60, "Industrial Machine Frame.").colored(PonderPalette.INPUT); + scene.idle(80); + + scene.addKeyframe(); + scene.world.showSection([3, 5, 2], Facing.DOWN); + scene.world.showSection([2, 5, 3], Facing.DOWN); + scene.world.showSection([3, 5, 4], Facing.DOWN); + scene.world.showSection([4, 5, 3], Facing.DOWN); + scene.idle(10); + + scene.text(60, "Andesite Iron Frame.").colored(PonderPalette.INPUT); + scene.idle(80); + + //? Place magtanks + scene.addKeyframe(); + for (let x = 1; x < 5; x = x + 3) { + for (let z = 1; z < 5; z = z + 3) { + scene.world.showSection([x, 2, z, x + 1, 4, z + 1], Facing.DOWN); + scene.idle(2); + } + } + + scene.idle(10); + + scene.text(80, "Now place Magtanks on top of the Blaze Burners.").colored(PonderPalette.INPUT); + scene.idle(100); + + //? Place refinery at last + scene.addKeyframe(); + scene.world.hideSection([1, 2, 1, 5, 5, 5], Facing.UP); + scene.idle(10); + + scene + .text(100, "Finally, place the Shimmer Refinery in the centre.", [3.5, 1.5, 3.5]) + .colored(PonderPalette.INPUT); + scene.idle(120); + + scene.world.showSection([3, 1, 3], Facing.DOWN); + scene.idle(20); + scene.world.showSection([1, 2, 1, 5, 5, 5], Facing.DOWN); + }); + + //! Using the shimmer refinery + event + .create("yttr:void_filter") + .scene("refinery_usage", "Using the Shimmer Refinery", "createastral:using_refinery", (scene, util) => { + scene.showBasePlate(); + scene.idle(10); + // fix a weird pipe that misbehaves for some reason + scene.world.modifyBlock([3, 2, 4], (curState) => curState.with("north", "true").with("up", "false"), false); + + //? Place refinery + // yes this is a lot of for loops. trust me, its better this way + // blaze burners: + for (let y = 1; y < 3; y++) { + for (let p = 0; p < 4; p = p + 3) { + for (let q = 0; q < 4; q = q + 3) { + for (let z = 1; z < 3; z++) { + for (let x = 1; x < 3; x++) { + scene.world.showSection([x + p, y, z + q], Facing.DOWN); + scene.idle(3); + } + } + } + } + } + // refinery controller: + for (let y = 1; y < 3; y++) { + scene.world.showSection([3, y, 3], Facing.DOWN); + scene.idle(3); + } + // scaffolding: + for (let y = 3; y < 5; y++) { + scene.world.showSection([3, y, 3], Facing.DOWN); + scene.idle(3); + } + // magtanks: + for (let x = 1; x < 5; x = x + 3) { + for (let z = 1; z < 5; z = z + 3) { + scene.world.showSection([x, 3, z, x + 1, 5, z + 1], Facing.DOWN); + scene.idle(3); + } + } + // scaffolding again: + for (let y = 5; y < 7; y++) { + scene.world.showSection([3, y, 1, 3, y, 5], Facing.DOWN); + scene.world.showSection([1, y, 3, 5, y, 3], Facing.DOWN); + scene.idle(3); + } + + scene.idle(10); + + scene.text(60, "This is the Shimmer Refinery.").colored(PonderPalette.MEDIUM); + scene.idle(80); + + //? Hide the top so you can see the controller + scene.world.hideSection([1, 3, 1, 5, 6, 5], Facing.UP); + scene.idle(10); + + scene.text(80, "And now you will learn how to use it.").colored(PonderPalette.MEDIUM); + scene.idle(100); + + //? Show power input + scene.addKeyframe(); + scene.world.showSection([3, 1, 0, 3, 2, 2], Facing.SOUTH); + scene.idle(10); + + scene + .text(120, "The Shimmer Refinery requires at least 160 E/t to keep running indefinitely.", [3, 2, 0]) + .colored(PonderPalette.INPUT) + .placeNearTarget(); + scene.idle(130); + + scene + .text(100, "Alternatively, it requires 20 000 E per crafting cycle.", [3, 2, 0]) + .colored(PonderPalette.INPUT) + .placeNearTarget(); + scene.idle(120); + + //? Show fluid input + scene.addKeyframe(); + scene.world.showSection([3, 1, 4, 3, 2, 6], Facing.NORTH); + scene.idle(10); + + scene + .text(100, "The machine consumes one bucket of Shimmer every 125 ticks.", [3, 2, 6]) + .colored(PonderPalette.INPUT) + .placeNearTarget(); + scene.idle(120); + + //? Show item input + scene.addKeyframe(); + scene.world.showSection([4, 1, 3, 6, 2, 3], Facing.WEST); + scene.world.showSection([6, 1, 4, 6, 1, 6], Facing.WEST); + scene.idle(10); + + scene + .text(80, "One Refining Agent is used per craft.", [4.2, 3, 3.5]) + .colored(PonderPalette.INPUT) + .placeNearTarget(); + scene.idle(100); + + //? Show item output + scene.addKeyframe(); + scene.world.showSection([0, 1, 3, 2, 2, 3], Facing.EAST); + scene.world.showSection([0, 1, 4, 0, 1, 6], Facing.EAST); + scene.idle(10); + + scene + .text(100, "The Refined Shimmer can be extracted from the machine.", [2.8, 3, 3.5]) + .colored(PonderPalette.OUTPUT) + .placeNearTarget(); + scene.idle(120); + + //? Superheat blaze burners + scene.addKeyframe(); + scene.text(80, "The blazes also need to be superheated.").colored(PonderPalette.FAST); + scene.idle(60); + scene.showControls(40, [1.5, 3, 1.5], "down").rightClick().withItem("create:blaze_cake"); + scene.idle(20); + + for (let p = 0; p < 4; p = p + 3) { + for (let q = 0; q < 4; q = q + 3) { + for (let z = 1; z < 3; z++) { + for (let x = 1; x < 3; x++) { + scene.world.modifyBlock([x + p, 2, z + q], (curState) => curState.with("blaze", "seething"), false); + scene.particles + .simple(10, "soul_fire_flame", [x + p, 2, z + q]) + .density(5) + .area([1 + (x + p), 3, 1 + (z + q)]) + .motion([0, 0.1, 0]) + .lifetime(5) + .withinBlockSpace(); + scene.idle(1); + } + } + } + } + + scene.idle(40); + + //? Unhide structure + scene.world.showSection([1, 3, 1, 5, 6, 5], Facing.DOWN); + }); + }); +})(); diff --git a/kubejs/client_scripts/ponders/desizer.js b/kubejs/client_scripts/ponders/desizer.js deleted file mode 100644 index d5f8a8542..000000000 --- a/kubejs/client_scripts/ponders/desizer.js +++ /dev/null @@ -1,96 +0,0 @@ -(function desizerPonder() { - onEvent("ponder.registry", (event) => { - event - .create("astraladditions:desizer_controller") - .scene("set_replace_modify_tutorial", "The Desizer", (scene, util) => { - scene.showBasePlate(); - scene.world.setBlocks([1, 1, 4], "astraladditions:desizer_9", true); - scene.world.setBlocks([2, 1, 4], "astraladditions:desizer_8", true); - scene.world.setBlocks([3, 1, 4], "astraladditions:desizer_7", true); - scene.world.setBlocks([1, 2, 4], "astraladditions:desizer_6", true); - scene.world.setBlocks([2, 2, 4], "astraladditions:desizer_controller", true); - scene.world.setBlocks([3, 2, 4], "astraladditions:desizer_4", true); - scene.world.setBlocks([1, 3, 4], "astraladditions:desizer_3", true); - scene.world.setBlocks([2, 3, 4], "astraladditions:desizer_2", true); - scene.world.setBlocks([3, 3, 4], "astraladditions:desizer_1", true); - scene.idle(20); - scene.world.showSection([0, 1, 0, 4, 3, 4], Facing.DOWN); - scene.idle(10); - scene.text(30, "This is the Desizer", [1, 2.5, 4]); - scene.idle(80); - scene.world.setBlocks([1, 1, 4], "astraladditions:desizer_8", true); - scene.world.setBlocks([2, 1, 4], "astraladditions:desizer_8", true); - scene.world.setBlocks([3, 1, 4], "astraladditions:desizer_8", true); - scene.world.setBlocks([1, 2, 4], "astraladditions:desizer_8", true); - scene.world.setBlocks([2, 2, 4], "astraladditions:desizer_controller", true); - scene.world.setBlocks([3, 2, 4], "astraladditions:desizer_8", true); - scene.world.setBlocks([1, 3, 4], "astraladditions:desizer_8", true); - scene.world.setBlocks([2, 3, 4], "astraladditions:desizer_8", true); - scene.world.setBlocks([3, 3, 4], "astraladditions:desizer_8", true); - scene.idle(10); - scene.text(60, "The casings don't have to be accurate. This also works", [1, 2.5, 4]); - scene.idle(80); - scene.world.setBlocks([1, 1, 3], "minecraft:dirt", true); - scene.world.setBlocks([2, 1, 3], "minecraft:dirt", true); - scene.world.setBlocks([3, 1, 3], "minecraft:dirt", true); - scene.world.setBlocks([1, 2, 3], "minecraft:dirt", true); - scene.world.setBlocks([2, 2, 3], "minecraft:dirt", true); - scene.world.setBlocks([3, 2, 3], "minecraft:dirt", true); - scene.world.setBlocks([1, 3, 3], "minecraft:dirt", true); - scene.world.setBlocks([2, 3, 3], "minecraft:dirt", true); - scene.world.setBlocks([3, 3, 3], "minecraft:dirt", true); - scene.world.setBlocks([1, 1, 2], "minecraft:dirt", true); - scene.world.setBlocks([2, 1, 2], "minecraft:dirt", true); - scene.world.setBlocks([3, 1, 2], "minecraft:dirt", true); - scene.world.setBlocks([1, 2, 2], "minecraft:dirt", true); - scene.world.setBlocks([2, 2, 2], "minecraft:dirt", true); - scene.world.setBlocks([3, 2, 2], "minecraft:dirt", true); - scene.world.setBlocks([1, 3, 2], "minecraft:dirt", true); - scene.world.setBlocks([2, 3, 2], "minecraft:dirt", true); - scene.world.setBlocks([3, 3, 2], "minecraft:dirt", true); - scene.world.setBlocks([1, 1, 1], "minecraft:dirt", true); - scene.world.setBlocks([2, 1, 1], "minecraft:dirt", true); - scene.world.setBlocks([3, 1, 1], "minecraft:dirt", true); - scene.world.setBlocks([1, 2, 1], "minecraft:dirt", true); - scene.world.setBlocks([2, 2, 1], "minecraft:dirt", true); - scene.world.setBlocks([3, 2, 1], "minecraft:dirt", true); - scene.world.setBlocks([1, 3, 1], "minecraft:dirt", true); - scene.world.setBlocks([2, 3, 1], "minecraft:dirt", true); - scene.world.setBlocks([3, 3, 1], "minecraft:dirt", true); - scene.idle(10); - scene.text(70, "The Desizer will shrink a 3x3x3 cube of blocks down into a single item", [1, 2.5, 2]); - scene.idle(90); - scene.text(70, "It's powered by Redstone. Place a button on the back of the Desizer Controller", [1, 2.5, 4]); - scene.world.setBlocks([1, 1, 3], "minecraft:air", true); - scene.world.setBlocks([2, 1, 3], "minecraft:air", true); - scene.world.setBlocks([3, 1, 3], "minecraft:air", true); - scene.world.setBlocks([1, 2, 3], "minecraft:air", true); - scene.world.setBlocks([2, 2, 3], "minecraft:air", true); - scene.world.setBlocks([3, 2, 3], "minecraft:air", true); - scene.world.setBlocks([1, 3, 3], "minecraft:air", true); - scene.world.setBlocks([2, 3, 3], "minecraft:air", true); - scene.world.setBlocks([3, 3, 3], "minecraft:air", true); - scene.world.setBlocks([1, 1, 2], "minecraft:air", true); - scene.world.setBlocks([2, 1, 2], "minecraft:air", true); - scene.world.setBlocks([3, 1, 2], "minecraft:air", true); - scene.world.setBlocks([1, 2, 2], "minecraft:air", true); - scene.world.setBlocks([2, 2, 2], "minecraft:air", true); - scene.world.setBlocks([3, 2, 2], "minecraft:air", true); - scene.world.setBlocks([1, 3, 2], "minecraft:air", true); - scene.world.setBlocks([2, 3, 2], "minecraft:air", true); - scene.world.setBlocks([3, 3, 2], "minecraft:air", true); - scene.world.setBlocks([1, 1, 1], "minecraft:air", true); - scene.world.setBlocks([2, 1, 1], "minecraft:air", true); - scene.world.setBlocks([3, 1, 1], "minecraft:air", true); - scene.world.setBlocks([1, 2, 1], "minecraft:air", true); - scene.world.setBlocks([2, 2, 1], "minecraft:air", true); - scene.world.setBlocks([3, 2, 1], "minecraft:air", true); - scene.world.setBlocks([1, 3, 1], "minecraft:air", true); - scene.world.setBlocks([2, 3, 1], "minecraft:air", true); - scene.world.setBlocks([3, 3, 1], "minecraft:air", true); - scene.idle(90); - scene.text(60, "If it doesn't detect a valid recipe, it will just break the blocks", [1, 2.5, 4]); - scene.idle(70); - }); - }); -})(); diff --git a/kubejs/client_scripts/ponders/desizer_sturdy_cage.js b/kubejs/client_scripts/ponders/desizer_sturdy_cage.js deleted file mode 100644 index 1cf95e800..000000000 --- a/kubejs/client_scripts/ponders/desizer_sturdy_cage.js +++ /dev/null @@ -1,49 +0,0 @@ -(function sturdyCageDesizerPonder() { - onEvent("ponder.registry", (event) => { - event.create("createastral:sturdy_cage").scene("set_replace_modify_tutorial", "Sturdy Cage", (scene, util) => { - scene.showBasePlate(); - scene.world.setBlocks([1, 1, 4], "astraladditions:desizer_9", true); - scene.world.setBlocks([2, 1, 4], "astraladditions:desizer_8", true); - scene.world.setBlocks([3, 1, 4], "astraladditions:desizer_7", true); - scene.world.setBlocks([1, 2, 4], "astraladditions:desizer_6", true); - scene.world.setBlocks([2, 2, 4], "astraladditions:desizer_controller", true); - scene.world.setBlocks([3, 2, 4], "astraladditions:desizer_4", true); - scene.world.setBlocks([1, 3, 4], "astraladditions:desizer_3", true); - scene.world.setBlocks([2, 3, 4], "astraladditions:desizer_2", true); - scene.world.setBlocks([3, 3, 4], "astraladditions:desizer_1", true); - scene.idle(20); - scene.world.showSection([0, 1, 0, 4, 3, 4], Facing.DOWN); - scene.idle(10); - scene.world.setBlocks([1, 1, 3], "createastral:sturdy_sheet_block", true); - scene.world.setBlocks([2, 1, 3], "createastral:sturdy_sheet_block", true); - scene.world.setBlocks([3, 1, 3], "createastral:sturdy_sheet_block", true); - scene.world.setBlocks([1, 2, 3], "createastral:sturdy_sheet_block", true); - scene.world.setBlocks([2, 2, 3], "yttr:glassy_void", true); - scene.world.setBlocks([3, 2, 3], "createastral:sturdy_sheet_block", true); - scene.world.setBlocks([1, 3, 3], "createastral:sturdy_sheet_block", true); - scene.world.setBlocks([2, 3, 3], "createastral:sturdy_sheet_block", true); - scene.world.setBlocks([3, 3, 3], "createastral:sturdy_sheet_block", true); - scene.idle(20); - scene.world.setBlocks([1, 1, 2], "createastral:sturdy_sheet_block", true); - scene.world.setBlocks([2, 1, 2], "yttr:glassy_void", true); - scene.world.setBlocks([3, 1, 2], "createastral:sturdy_sheet_block", true); - scene.world.setBlocks([1, 2, 2], "yttr:glassy_void", true); - //scene.world.setBlocks([2, 2, 2,], "yttr:ultrapure_carbon_block", true); - scene.world.setBlocks([3, 2, 2], "yttr:glassy_void", true); - scene.world.setBlocks([1, 3, 2], "createastral:sturdy_sheet_block", true); - scene.world.setBlocks([2, 3, 2], "yttr:glassy_void", true); - scene.world.setBlocks([3, 3, 2], "createastral:sturdy_sheet_block", true); - scene.idle(20); - scene.world.setBlocks([1, 1, 1], "createastral:sturdy_sheet_block", true); - scene.world.setBlocks([2, 1, 1], "createastral:sturdy_sheet_block", true); - scene.world.setBlocks([3, 1, 1], "createastral:sturdy_sheet_block", true); - scene.world.setBlocks([1, 2, 1], "createastral:sturdy_sheet_block", true); - scene.world.setBlocks([2, 2, 1], "yttr:glassy_void", true); - scene.world.setBlocks([3, 2, 1], "createastral:sturdy_sheet_block", true); - scene.world.setBlocks([1, 3, 1], "createastral:sturdy_sheet_block", true); - scene.world.setBlocks([2, 3, 1], "createastral:sturdy_sheet_block", true); - scene.world.setBlocks([3, 3, 1], "createastral:sturdy_sheet_block", true); - scene.idle(10); - }); - }); -})(); diff --git a/kubejs/client_scripts/ponders/desizer_ultrapure_carbon.js b/kubejs/client_scripts/ponders/desizer_ultrapure_carbon.js deleted file mode 100644 index 884796fb5..000000000 --- a/kubejs/client_scripts/ponders/desizer_ultrapure_carbon.js +++ /dev/null @@ -1,51 +0,0 @@ -(function ultrapureCarbonDesizerPonder() { - onEvent("ponder.registry", (event) => { - event - .create("yttr:compressed_ultrapure_carbon_block") - .scene("set_replace_modify_tutorial", "Ultrapure Carbon", (scene, util) => { - scene.showBasePlate(); - scene.world.setBlocks([1, 1, 4], "astraladditions:desizer_9", true); - scene.world.setBlocks([2, 1, 4], "astraladditions:desizer_8", true); - scene.world.setBlocks([3, 1, 4], "astraladditions:desizer_7", true); - scene.world.setBlocks([1, 2, 4], "astraladditions:desizer_6", true); - scene.world.setBlocks([2, 2, 4], "astraladditions:desizer_controller", true); - scene.world.setBlocks([3, 2, 4], "astraladditions:desizer_4", true); - scene.world.setBlocks([1, 3, 4], "astraladditions:desizer_3", true); - scene.world.setBlocks([2, 3, 4], "astraladditions:desizer_2", true); - scene.world.setBlocks([3, 3, 4], "astraladditions:desizer_1", true); - scene.idle(20); - scene.world.showSection([0, 1, 0, 4, 3, 4], Facing.DOWN); - scene.idle(10); - //scene.world.setBlocks([1, 1, 3,], "yttr:ultrapure_carbon_block", true); - //scene.world.setBlocks([2, 1, 3,], "yttr:ultrapure_carbon_block", true); - //scene.world.setBlocks([3, 1, 3,], "yttr:ultrapure_carbon_block", true); - //scene.world.setBlocks([1, 2, 3,], "yttr:ultrapure_carbon_block", true); - scene.world.setBlocks([2, 2, 3], "yttr:ultrapure_carbon_block", true); - //scene.world.setBlocks([3, 2, 3,], "yttr:ultrapure_carbon_block", true); - //scene.world.setBlocks([1, 3, 3,], "yttr:ultrapure_carbon_block", true); - //scene.world.setBlocks([2, 3, 3,], "yttr:ultrapure_carbon_block", true); - //scene.world.setBlocks([3, 3, 3,], "yttr:ultrapure_carbon_block", true); - scene.idle(20); - //scene.world.setBlocks([1, 1, 2,], "yttr:ultrapure_carbon_block", true); - scene.world.setBlocks([2, 1, 2], "yttr:ultrapure_carbon_block", true); - //scene.world.setBlocks([3, 1, 2,], "yttr:ultrapure_carbon_block", true); - scene.world.setBlocks([1, 2, 2], "yttr:ultrapure_carbon_block", true); - scene.world.setBlocks([2, 2, 2], "yttr:ultrapure_carbon_block", true); - scene.world.setBlocks([3, 2, 2], "yttr:ultrapure_carbon_block", true); - //scene.world.setBlocks([1, 3, 2,], "yttr:ultrapure_carbon_block", true); - scene.world.setBlocks([2, 3, 2], "yttr:ultrapure_carbon_block", true); - //scene.world.setBlocks([3, 3, 2,], "yttr:ultrapure_carbon_block", true); - scene.idle(20); - //scene.world.setBlocks([1, 1, 1,], "yttr:ultrapure_carbon_block", true); - //scene.world.setBlocks([2, 1, 1,], "yttr:ultrapure_carbon_block", true); - //scene.world.setBlocks([3, 1, 1,], "yttr:ultrapure_carbon_block", true); - //scene.world.setBlocks([1, 2, 1,], "yttr:ultrapure_carbon_block", true); - scene.world.setBlocks([2, 2, 1], "yttr:ultrapure_carbon_block", true); - //scene.world.setBlocks([3, 2, 1,], "yttr:ultrapure_carbon_block", true); - //scene.world.setBlocks([1, 3, 1,], "yttr:ultrapure_carbon_block", true); - //scene.world.setBlocks([2, 3, 1,], "yttr:ultrapure_carbon_block", true); - //scene.world.setBlocks([3, 3, 1,], "yttr:ultrapure_carbon_block", true); - scene.idle(10); - }); - }); -})(); diff --git a/kubejs/client_scripts/ponders/distillation.js b/kubejs/client_scripts/ponders/distillation.js deleted file mode 100644 index 0e682e61a..000000000 --- a/kubejs/client_scripts/ponders/distillation.js +++ /dev/null @@ -1,9 +0,0 @@ -(function distilleryPonder() { - onEvent("ponder.registry", (event) => { - event - .create("createastral:distillery_dummy") - .scene("distillery", "The Distillery", "kubejs:distillation", (scene, util) => { - scene.showStructure(); - }); - }); -})(); diff --git a/kubejs/client_scripts/ponders/electrolyzer.js b/kubejs/client_scripts/ponders/electrolyzer.js deleted file mode 100644 index c0137c4d5..000000000 --- a/kubejs/client_scripts/ponders/electrolyzer.js +++ /dev/null @@ -1,87 +0,0 @@ -(function electrolyzerPonder() { - onEvent("ponder.registry", (event) => { - event - .create("createastral:electrolyser_dummy") - .scene("electrolyzer", "The Electrolyzer multiblock", "kubejs:electrolyser", (scene, util) => { - /** @type {[x: number, y: number, z: number]} */ - const electrolyzerPos = [2, 2, 1]; - /** @type {[x: number, y: number, z: number]} */ - const electrolyzerPos2 = [2, 3, 1]; - /** @type {[[x: number, y: number, z: number], [x: number, y: number, z: number]]} */ - const multiblockRange = [ - [1, 2, 1], - [3, 4, 3], - ]; - scene.world.setBlock([3, 4, 0], "ad_astra:oxygen_loader", false); - scene.world.modifyBlock( - [2, 2, 0], - () => - Block.id("create:fluid_pipe") - .with("south", "true") - .with("north", "false") - .with("west", "false") - .with("up", "false") - .with("down", "false"), - false - ); - scene.world.modifyBlock( - [2, 1, 1], - () => - Block.id("create:fluid_pipe") - .with("south", "false") - .with("north", "false") - .with("east", "false") - .with("west", "true") - .with("up", "true") - .with("down", "false"), - false - ); - scene.showBasePlate(); - for (let y = multiblockRange[0][1]; y <= multiblockRange[1][1]; y++) { - for (let x = multiblockRange[0][0]; x <= multiblockRange[1][0]; x++) { - for (let z = multiblockRange[0][2]; z <= multiblockRange[1][2]; z++) { - scene.world.showSection([x, y, z], Facing.DOWN); - } - } - scene.idle(30); - if (y == 3) { - scene.overlay.showOutline(PonderPalette.GREEN, "test", util.select.position(2, 3, 2), 30); - scene.text(30, "Leave a gap in the center", [2, 4, 2]).placeNearTarget().attachKeyFrame(); - scene.idle(30); - } - } - scene - .text(40, "Pump Water into the bottom of the Electrolyzer", electrolyzerPos) - .placeNearTarget() - .attachKeyFrame(); - for (let x = 0; x <= 4; x++) { - for (let z = 0; z <= 2; z++) { - scene.world.showSection([x, 1, z], Facing.EAST); - } - } - for (let z = 0; z <= 4; z++) { - scene.world.showSection([0, 2, z], Facing.EAST); - } - scene.idle(40); - scene.text(30, "Pump Oxygen out of the side of the Electrolyzer", electrolyzerPos2).attachKeyFrame(); - for (let y = 2; y <= 3; y++) { - for (let x = 0; x <= 4; x++) { - scene.world.showSection([x, y, 0], Facing.SOUTH); - } - scene.world.showSection([4, y, 1], Facing.WEST); - } - scene.idle(10); - scene.particles.simple(60, "ad_astra:oxygen_bubble", [2.7, 5, -0.5]).gravity(-0.1); - scene.idle(120); - scene.world.showSection([3, 4, 0], Facing.DOWN); - scene.idle(10); - scene - .text( - 100, - "Oxygen pumped into the Oxygen Loader can be used to fill up your spacesuits and tanks", - [3, 4.5, 0] - ) - .placeNearTarget(); - }); - }); -})(); diff --git a/kubejs/client_scripts/ponders/moon_portal.js b/kubejs/client_scripts/ponders/moon_portal.js deleted file mode 100644 index a7ef5ac26..000000000 --- a/kubejs/client_scripts/ponders/moon_portal.js +++ /dev/null @@ -1,31 +0,0 @@ -(function moonPortalPonder() { - onEvent("ponder.registry", (event) => { - event - .create("createastral:shimmering_stone") - .scene("shimmering_stone", "The Moon Portal", "kubejs:portal", (scene, util) => { - scene.world.replaceBlocks(util.select.fromTo(2, 1, 2, 3, 1, 2), "minecraft:obsidian", false); - scene.showStructure(); - scene.text( - 60, - "In this pack, the Nether is disabled. Instead, items are spread throughout the different planets.", - [3, 2, 3] - ); - scene.idle(40); - scene.showControls(30, [2, 2, 2], "up").rightClick().withItem("minecraft:flint_and_steel"); - scene.world.setBlock([2, 2, 2], Block.getBlock("minecraft:fire").defaultBlockState(), false); - scene.idle(60); - [ - util.select.fromTo(1, 1, 2, 4, 1, 2), - util.select.fromTo(1, 2, 2, 1, 5, 2), - util.select.fromTo(4, 2, 2, 4, 5, 2), - util.select.fromTo(2, 5, 2, 3, 5, 2), - ].forEach((selection) => { - scene.world.replaceBlocks(selection, "createastral:shimmering_stone", true); - }); - scene.world.setBlock([2, 2, 2], "minecraft:air", false); - scene.text(40, "There is a new portal added, which takes you to the Moon!", [3, 2, 3]).attachKeyFrame(); - scene.showControls(30, [2, 2, 2], "up").rightClick().withItem("createastral:astral_conduit"); - scene.world.setBlocks(util.select.fromTo(2, 2, 2, 3, 4, 2), "customportalapi:customportalblock", true); - }); - }); -})(); diff --git a/kubejs/client_scripts/ponders/root_of_continuity.js b/kubejs/client_scripts/ponders/root_of_continuity.js deleted file mode 100644 index 3c6ab12af..000000000 --- a/kubejs/client_scripts/ponders/root_of_continuity.js +++ /dev/null @@ -1,51 +0,0 @@ -(function rootOfContinuityPonder() { - onEvent("ponder.registry", (event) => { - event - .create("yttr:root_of_continuity") - .scene("set_replace_modify_tutorial", "Root of Continuity", (scene, util) => { - scene.showBasePlate(); - scene.world.setBlocks([1, 1, 4], "astraladditions:desizer_9", true); - scene.world.setBlocks([2, 1, 4], "astraladditions:desizer_8", true); - scene.world.setBlocks([3, 1, 4], "astraladditions:desizer_7", true); - scene.world.setBlocks([1, 2, 4], "astraladditions:desizer_6", true); - scene.world.setBlocks([2, 2, 4], "astraladditions:desizer_controller", true); - scene.world.setBlocks([3, 2, 4], "astraladditions:desizer_4", true); - scene.world.setBlocks([1, 3, 4], "astraladditions:desizer_3", true); - scene.world.setBlocks([2, 3, 4], "astraladditions:desizer_2", true); - scene.world.setBlocks([3, 3, 4], "astraladditions:desizer_1", true); - scene.idle(20); - scene.world.showSection([0, 1, 0, 4, 3, 4], Facing.DOWN); - scene.idle(10); - scene.world.setBlocks([1, 1, 3], "createastral:ultramatter", true); - scene.world.setBlocks([2, 1, 3], "createastral:ultramatter", true); - scene.world.setBlocks([3, 1, 3], "createastral:ultramatter", true); - scene.world.setBlocks([1, 2, 3], "createastral:ultramatter", true); - //scene.world.setBlocks([2, 2, 3,], "yttr:ultrapure_carbon_block", true); - scene.world.setBlocks([3, 2, 3], "createastral:ultramatter", true); - scene.world.setBlocks([1, 3, 3], "createastral:ultramatter", true); - scene.world.setBlocks([2, 3, 3], "createastral:ultramatter", true); - scene.world.setBlocks([3, 3, 3], "createastral:ultramatter", true); - scene.idle(20); - scene.world.setBlocks([1, 1, 2], "createastral:ultramatter", true); - //scene.world.setBlocks([2, 1, 2,], "yttr:ultrapure_carbon_block", true); - scene.world.setBlocks([3, 1, 2], "createastral:ultramatter", true); - //scene.world.setBlocks([1, 2, 2,], "yttr:ultrapure_carbon_block", true); - scene.world.setBlocks([2, 2, 2], "createastral:contained_end", true); - //scene.world.setBlocks([3, 2, 2,], "yttr:ultrapure_carbon_block", true); - scene.world.setBlocks([1, 3, 2], "createastral:ultramatter", true); - //scene.world.setBlocks([2, 3, 2,], "createastral:ultramatter", true); - scene.world.setBlocks([3, 3, 2], "createastral:ultramatter", true); - scene.idle(20); - scene.world.setBlocks([1, 1, 1], "createastral:ultramatter", true); - scene.world.setBlocks([2, 1, 1], "createastral:ultramatter", true); - scene.world.setBlocks([3, 1, 1], "createastral:ultramatter", true); - scene.world.setBlocks([1, 2, 1], "createastral:ultramatter", true); - //scene.world.setBlocks([2, 2, 1,], "createastral:ultramatter", true); - scene.world.setBlocks([3, 2, 1], "createastral:ultramatter", true); - scene.world.setBlocks([1, 3, 1], "createastral:ultramatter", true); - scene.world.setBlocks([2, 3, 1], "createastral:ultramatter", true); - scene.world.setBlocks([3, 3, 1], "createastral:ultramatter", true); - scene.idle(10); - }); - }); -})(); diff --git a/kubejs/client_scripts/ponders/seared_melter.js b/kubejs/client_scripts/ponders/seared_melter.js deleted file mode 100644 index a10a1835c..000000000 --- a/kubejs/client_scripts/ponders/seared_melter.js +++ /dev/null @@ -1,50 +0,0 @@ -(function searedMelterPonder() { - onEvent("ponder.registry", (event) => { - event - .create("tconstruct:seared_melter") - .scene("melter", "How to use the seared melter", "kubejs:melter", (scene, util) => { - scene.showStructure(); - scene.text(60, "This is an example of a basic Seared Melter setup", [2, 2, 2]); - scene.idle(60); - scene.overlay.showOutline(PonderPalette.GREEN, "test", [2, 1, 2], 60); - scene.text(50, "First, a Seared Heater is placed, which can be filled with fuel", [2, 1, 2]).attachKeyFrame(); - scene.idle(60); - scene.overlay.showOutline(PonderPalette.GREEN, "test", [2, 2, 2], 60); - scene - .text( - 80, - "Then, a Melter is placed on top, and when the Heater below is fueled, it can melt ores into liquid", - [2, 2, 2] - ) - .attachKeyFrame(); - scene.idle(85); - let faucet1 = util.select.position(1, 2, 2); - let faucet2 = util.select.position(3, 2, 2); - scene.overlay.showOutline(PonderPalette.GREEN, "test", faucet1, 60); - scene - .text( - 80, - "Finally, Faucets are placed on the sides, which can be used to pour the liquid into a Casting Basin or Casting Table", - [1.5, 2.5, 2] - ) - .attachKeyFrame(); - scene.idle(85); - scene.world.setBlock([2, 3, 2], "create:fluid_pipe", true); - scene.world.modifyBlock( - [2, 3, 2], - () => - Block.id("create:fluid_pipe") - .with("south", "false") - .with("north", "false") - .with("east", "false") - .with("west", "false") - .with("up", "true") - .with("down", "true"), - false - ); - scene - .text(60, "Create Fluid Pipes can be used to transfer the liquid to something like a Spout", [2, 3.5, 2]) - .attachKeyFrame(); - }); - }); -})(); diff --git a/kubejs/client_scripts/ponders/shimmer_refinery.js b/kubejs/client_scripts/ponders/shimmer_refinery.js deleted file mode 100644 index c92ab6c93..000000000 --- a/kubejs/client_scripts/ponders/shimmer_refinery.js +++ /dev/null @@ -1,11 +0,0 @@ -(function shimmerRefineryPonder() { - onEvent("ponder.registry", (event) => { - // Ponder is registered on the void filter, which does not have a recipe - // and is not available in REI. - event - .create("yttr:void_filter") - .scene("shimmer_refinery", "How to create a Shimmer Refinery", "kubejs:shimmerrefinery", (scene, util) => { - scene.showStructure(); - }); - }); -})(); diff --git a/kubejs/client_scripts/ponders/stone_growth_chamber.js b/kubejs/client_scripts/ponders/stone_growth_chamber.js deleted file mode 100644 index 79a717479..000000000 --- a/kubejs/client_scripts/ponders/stone_growth_chamber.js +++ /dev/null @@ -1,232 +0,0 @@ -(function stoneGrowthChamberPonder() { - onEvent("ponder.registry", (event) => { - event - .create("createastral:stone_growth_chamber_dummy") - .scene("stone_growth_chamber", "Stone Growth Chamber", (scene, util) => { - scene.showBasePlate(); - scene.world.showSection([0, 1, 0, 4, 3, 4], Facing.DOWN); - scene.idle(10); - scene.world.setBlocks([2, 1, 1], "createastral:stone_growth_chamber_dummy", true); - scene.text(30, "Stone Growth Chamber", [2.5, 2, 1.5]); - scene.idle(40); - scene.world.setBlocks([1, 1, 3], "create:cut_andesite_bricks", true); - scene.idle(1); - scene.world.setBlocks([2, 1, 3], "chipped:andesite_1", true); - scene.idle(1); - scene.world.setBlocks([3, 1, 3], "create:polished_cut_andesite", true); - scene.idle(1); - scene.world.setBlocks([3, 1, 2], "chipped:andesite_1", true); - scene.idle(1); - scene.world.setBlocks([2, 1, 2], "create:polished_cut_andesite", true); - scene.idle(1); - scene.world.setBlocks([1, 1, 2], "create:cut_andesite", true); - scene.idle(1); - scene.world.setBlocks([1, 1, 1], "create:cut_andesite_bricks", true); - scene.idle(1); - scene.world.setBlocks([3, 1, 1], "create:small_andesite_bricks", true); - scene.idle(1); - scene.text(30, "Polished Andesite", [3, 1, 5]); - scene.idle(40); - scene.world.setBlocks([1, 2, 3], "minecraft:glass", true); - scene.idle(1); - scene.world.setBlocks([2, 2, 3], "minecraft:glass", true); - scene.idle(1); - scene.world.setBlocks([3, 2, 3], "minecraft:glass", true); - scene.idle(1); - scene.world.setBlocks([3, 2, 2], "minecraft:glass", true); - scene.idle(1); - scene.world.setBlocks([3, 2, 1], "minecraft:glass", true); - scene.idle(1); - scene.world.setBlocks([2, 2, 1], "minecraft:glass", true); - scene.idle(1); - scene.world.setBlocks([1, 2, 1], "minecraft:glass", true); - scene.idle(1); - scene.world.setBlocks([1, 2, 2], "minecraft:glass", true); - scene.idle(1); - scene.text(30, "Glass", [1.5, 3, 2.5]); - scene.idle(40); - scene.world.setBlocks([2, 2, 2], "minecraft:lava", true); - scene.text(30, "Lava in the middle", [2.5, 3, 2.5]); - scene.idle(40); - scene.world.setBlocks([1, 3, 3], "create:cut_andesite", true); - scene.idle(1); - scene.world.setBlocks([2, 3, 3], "create:small_andesite_bricks", true); - scene.idle(1); - scene.world.setBlocks([3, 3, 3], "create:cut_andesite_bricks", true); - scene.idle(1); - scene.world.setBlocks([3, 3, 2], "create:cut_andesite_bricks", true); - scene.idle(1); - scene.world.setBlocks([2, 3, 2], "create:cut_andesite", true); - scene.idle(1); - scene.world.setBlocks([1, 3, 2], "create:small_andesite_bricks", true); - scene.idle(1); - scene.world.setBlocks([1, 3, 1], "chipped:andesite_1", true); - scene.idle(1); - scene.world.setBlocks([2, 3, 1], "create:polished_cut_andesite", true); - scene.idle(1); - scene.world.setBlocks([3, 3, 1], "create:polished_cut_andesite", true); - scene.idle(10); - scene.text(60, "This is a completed Stone Growth Chamber", [3, 2.5, 3]).attachKeyFrame(); - scene.idle(70); - scene.text(80, "Use an Andesite Funnel on the front or a Hopper on the bottom to output Andesite", [2, 1, 1]); - scene.idle(90); - scene - .text( - 80, - "When built using different Stones, the Stone Growth Chamber will generate different types of cobblestone", - [3, 2.5, 3] - ) - .attachKeyFrame(); - scene.idle(10); - //scene.world.setBlocks([2, 1, 1,], "createastral:stone_growth_chamber_dummy", true); - scene.world.setBlocks([1, 1, 2, 3, 1, 3], "ad_astra:polished_moon_stone", true); - scene.world.setBlock([1, 1, 1], "ad_astra:polished_moon_stone", true); - scene.world.setBlock([3, 1, 1], "ad_astra:polished_moon_stone", true); - scene.idle(10); - scene.world.setBlocks([1, 3, 1, 3, 3, 3], "ad_astra:polished_moon_stone", true); - scene.idle(10); - scene.world.setBlocks([1, 3, 2], "ad_astra:cracked_moon_stone_bricks", true); - scene.idle(1); - scene.world.setBlocks([3, 3, 1], "ad_astra:moon_stone_bricks", true); - scene.idle(1); - scene.world.setBlocks([2, 3, 3], "ad_astra:moon_stone_bricks", true); - scene.idle(1); - scene.world.setBlocks([3, 1, 3], "ad_astra:moon_stone_bricks", true); - scene.idle(1); - scene.world.setBlocks([3, 1, 1], "ad_astra:cracked_moon_stone_bricks", true); - scene.idle(1); - scene.world.setBlocks([3, 3, 3], "ad_astra:moon_stone_bricks", true); - scene.idle(1); - scene.world.setBlocks([3, 3, 2], "ad_astra:moon_stone_bricks", true); - scene.idle(1); - scene.world.setBlocks([2, 1, 3], "ad_astra:cracked_moon_stone_bricks", true); - scene.idle(1); - scene.world.setBlocks([1, 1, 3], "ad_astra:moon_stone_bricks", true); - scene.idle(1); - scene.world.setBlocks([1, 1, 1], "ad_astra:moon_stone_bricks", true); - scene.idle(1); - scene.idle(70); - scene.text( - 90, - "This currently works with Stone, Andesite and any default stone from each planet, like Moon Stone and Mars Stone", - [3, 2.5, 3] - ); - scene.idle(100); - scene.world.setBlocks([1, 1, 3], "chipped:mossy_stone_bricks_1", true); - scene.world.setBlocks([2, 1, 3], "minecraft:stone_bricks", true); - scene.world.setBlocks([3, 1, 3], "chipped:mossy_stone_bricks_1", true); - scene.world.setBlocks([1, 1, 2], "chipped:stone_1", true); - scene.world.setBlocks([2, 1, 2], "minecraft:cracked_stone_bricks", true); - scene.world.setBlocks([3, 1, 2], "minecraft:cracked_stone_bricks", true); - scene.world.setBlocks([1, 1, 1], "minecraft:cracked_stone_bricks", true); - scene.world.setBlocks([3, 1, 1], "minecraft:mossy_stone_bricks", true); - scene.world.setBlocks([1, 3, 3], "minecraft:mossy_stone_bricks", true); - scene.world.setBlocks([2, 3, 3], "chipped:stone_1", true); - scene.world.setBlocks([3, 3, 3], "minecraft:mossy_stone_bricks", true); - scene.world.setBlocks([1, 3, 2], "chipped:stone_1", true); - scene.world.setBlocks([2, 3, 2], "minecraft:stone_bricks", true); - scene.world.setBlocks([3, 3, 2], "minecraft:cracked_stone_bricks", true); - scene.world.setBlocks([1, 3, 1], "minecraft:cracked_stone_bricks", true); - scene.world.setBlocks([2, 3, 1], "minecraft:stone_bricks", true); - scene.world.setBlocks([3, 3, 1], "minecraft:mossy_stone_bricks", true); - scene.idle(25); - scene.world.setBlocks([1, 1, 2, 3, 1, 3], "ad_astra:polished_mars_stone", true); - scene.world.setBlock([1, 1, 1], "ad_astra:polished_mars_stone", true); - scene.world.setBlock([3, 1, 1], "ad_astra:polished_mars_stone", true); - scene.world.setBlocks([1, 3, 1, 3, 3, 3], "ad_astra:polished_mars_stone", true); - scene.world.setBlocks([1, 3, 2], "ad_astra:cracked_mars_stone_bricks", false); - scene.world.setBlocks([3, 3, 1], "ad_astra:mars_stone_bricks", false); - scene.world.setBlocks([2, 3, 3], "ad_astra:mars_stone_bricks", false); - scene.world.setBlocks([3, 1, 3], "ad_astra:mars_stone_bricks", false); - scene.world.setBlocks([3, 1, 1], "ad_astra:cracked_mars_stone_bricks", false); - scene.world.setBlocks([3, 3, 3], "ad_astra:mars_stone_bricks", false); - scene.world.setBlocks([3, 3, 2], "ad_astra:mars_stone_bricks", false); - scene.world.setBlocks([2, 1, 3], "ad_astra:cracked_mars_stone_bricks", false); - scene.world.setBlocks([1, 1, 3], "ad_astra:mars_stone_bricks", false); - scene.world.setBlocks([1, 1, 1], "ad_astra:mars_stone_bricks", false); - scene.idle(25); - scene.world.setBlocks([1, 1, 2, 3, 1, 3], "ad_astra:polished_glacio_stone", true); - scene.world.setBlock([1, 1, 1], "ad_astra:polished_glacio_stone", true); - scene.world.setBlock([3, 1, 1], "ad_astra:polished_glacio_stone", true); - scene.world.setBlocks([1, 3, 1, 3, 3, 3], "ad_astra:polished_glacio_stone", true); - scene.world.setBlocks([1, 3, 2], "ad_astra:cracked_glacio_stone_bricks", false); - scene.world.setBlocks([3, 3, 1], "ad_astra:glacio_stone_bricks", false); - scene.world.setBlocks([2, 3, 3], "ad_astra:glacio_stone_bricks", false); - scene.world.setBlocks([3, 1, 3], "ad_astra:glacio_stone_bricks", false); - scene.world.setBlocks([3, 1, 1], "ad_astra:cracked_glacio_stone_bricks", false); - scene.world.setBlocks([3, 3, 3], "ad_astra:glacio_stone_bricks", false); - scene.world.setBlocks([3, 3, 2], "ad_astra:glacio_stone_bricks", false); - scene.world.setBlocks([2, 1, 3], "ad_astra:cracked_glacio_stone_bricks", false); - scene.world.setBlocks([1, 1, 3], "ad_astra:glacio_stone_bricks", false); - scene.world.setBlocks([1, 1, 1], "ad_astra:glacio_stone_bricks", false); - scene.idle(25); - scene.world.setBlocks([1, 1, 2, 3, 1, 3], "ad_astra:polished_mercury_stone", true); - scene.world.setBlock([1, 1, 1], "ad_astra:polished_mercury_stone", true); - scene.world.setBlock([3, 1, 1], "ad_astra:polished_mercury_stone", true); - scene.world.setBlocks([1, 3, 1, 3, 3, 3], "ad_astra:polished_mercury_stone", true); - scene.world.setBlocks([1, 3, 2], "ad_astra:cracked_mercury_stone_bricks", false); - scene.world.setBlocks([3, 3, 1], "ad_astra:mercury_stone_bricks", false); - scene.world.setBlocks([2, 3, 3], "ad_astra:mercury_stone_bricks", false); - scene.world.setBlocks([3, 1, 3], "ad_astra:mercury_stone_bricks", false); - scene.world.setBlocks([3, 1, 1], "ad_astra:cracked_mercury_stone_bricks", false); - scene.world.setBlocks([3, 3, 3], "ad_astra:mercury_stone_bricks", false); - scene.world.setBlocks([3, 3, 2], "ad_astra:mercury_stone_bricks", false); - scene.world.setBlocks([2, 1, 3], "ad_astra:cracked_mercury_stone_bricks", false); - scene.world.setBlocks([1, 1, 3], "ad_astra:mercury_stone_bricks", false); - scene.world.setBlocks([1, 1, 1], "ad_astra:mercury_stone_bricks", false); - scene.idle(75); - scene - .text( - 150, - "A list of valid stone blocks can be found by searching '$createastral:stone_growth_chamber/building_blocks' in REI", - [3, 2.5, 3] - ) - .attachKeyFrame(); - scene.idle(20); - scene.world.setBlocks([1, 1, 2, 3, 1, 3], "minecraft:polished_andesite", true); - scene.world.setBlock([1, 1, 1], "minecraft:polished_andesite", true); - scene.world.setBlock([3, 1, 1], "minecraft:polished_andesite", true); - scene.world.setBlocks([1, 3, 1, 3, 3, 3], "minecraft:polished_andesite", true); - scene.idle(30); - scene.world.setBlocks([1, 1, 2, 3, 1, 3], "chipped:andesite_1", true); - scene.world.setBlock([1, 1, 1], "chipped:andesite_1", true); - scene.world.setBlock([3, 1, 1], "chipped:andesite_1", true); - scene.world.setBlocks([1, 3, 1, 3, 3, 3], "chipped:andesite_1", true); - scene.idle(30); - scene.world.setBlocks([1, 1, 2, 3, 1, 3], "create:cut_andesite", true); - scene.world.setBlock([1, 1, 1], "create:cut_andesite", true); - scene.world.setBlock([3, 1, 1], "create:cut_andesite", true); - scene.world.setBlocks([1, 3, 1, 3, 3, 3], "create:cut_andesite", true); - scene.idle(30); - scene.world.setBlocks([1, 1, 2, 3, 1, 3], "create:cut_andesite_bricks", true); - scene.world.setBlock([1, 1, 1], "create:cut_andesite_bricks", true); - scene.world.setBlock([3, 1, 1], "create:cut_andesite_bricks", true); - scene.world.setBlocks([1, 3, 1, 3, 3, 3], "create:cut_andesite_bricks", true); - scene.idle(30); - scene.world.setBlocks([1, 1, 2, 3, 1, 3], "create:small_andesite_bricks", true); - scene.world.setBlock([1, 1, 1], "create:small_andesite_bricks", true); - scene.world.setBlock([3, 1, 1], "create:small_andesite_bricks", true); - scene.world.setBlocks([1, 3, 1, 3, 3, 3], "create:small_andesite_bricks", true); - scene.idle(40); - scene - .text( - 120, - "Similarly, valid glass blocks can be found by searching '$createastral:stone_growth_chamber/glass_blocks'", - [1.5, 3, 2.5] - ) - .attachKeyFrame(); - scene.world.setBlocks([1, 3, 1, 3, 3, 3], "minecraft:air", false); - scene.idle(30); - scene.world.setBlocks([1, 2, 1, 3, 2, 3], "minecraft:tinted_glass", true); - scene.world.setBlock([2, 2, 2], "minecraft:lava", false); - scene.idle(30); - scene.world.setBlocks([1, 2, 1, 3, 2, 3], "tconstruct:gray_clear_stained_glass", true); - scene.world.setBlock([2, 2, 2], "minecraft:lava", false); - scene.idle(30); - scene.world.setBlocks([1, 2, 1, 3, 2, 3], "chipped:glass_48", true); - scene.world.setBlock([2, 2, 2], "minecraft:lava", false); - scene.idle(30); - scene.world.setBlocks([1, 3, 1, 3, 3, 3], "create:small_andesite_bricks", true); - }); - }); -})(); diff --git a/kubejs/client_scripts/ponders/stone_growth_chamber_dummy.js b/kubejs/client_scripts/ponders/stone_growth_chamber_dummy.js deleted file mode 100644 index ac1221f45..000000000 --- a/kubejs/client_scripts/ponders/stone_growth_chamber_dummy.js +++ /dev/null @@ -1,97 +0,0 @@ -(function stoneGrowthChamberDummyPonder() { - onEvent("ponder.registry", (event) => { - // ? Seems currently unused. - // event - // .create("astraladditions:stone_growth_chamber_dummy") - // .scene("set_replace_modify_tutorial", "The Desizer", (scene, util) => { - // scene.showBasePlate(); - // scene.world.setBlocks([1, 1, 4], "astraladditions:desizer_9", true); - // scene.world.setBlocks([2, 1, 4], "astraladditions:desizer_8", true); - // scene.world.setBlocks([3, 1, 4], "astraladditions:desizer_7", true); - // scene.world.setBlocks([1, 2, 4], "astraladditions:desizer_6", true); - // scene.world.setBlocks([2, 2, 4], "astraladditions:desizer_controller", true); - // scene.world.setBlocks([3, 2, 4], "astraladditions:desizer_4", true); - // scene.world.setBlocks([1, 3, 4], "astraladditions:desizer_3", true); - // scene.world.setBlocks([2, 3, 4], "astraladditions:desizer_2", true); - // scene.world.setBlocks([3, 3, 4], "astraladditions:desizer_1", true); - // scene.idle(20); - // scene.world.showSection([0, 1, 0, 4, 3, 4], Facing.DOWN); - // scene.idle(10); - // scene.text(30, "This is the Desizer", [1, 2.5, 4]); - // scene.idle(80); - // scene.world.setBlocks([1, 1, 4], "astraladditions:desizer_8", true); - // scene.world.setBlocks([2, 1, 4], "astraladditions:desizer_8", true); - // scene.world.setBlocks([3, 1, 4], "astraladditions:desizer_8", true); - // scene.world.setBlocks([1, 2, 4], "astraladditions:desizer_8", true); - // scene.world.setBlocks([2, 2, 4], "astraladditions:desizer_controller", true); - // scene.world.setBlocks([3, 2, 4], "astraladditions:desizer_8", true); - // scene.world.setBlocks([1, 3, 4], "astraladditions:desizer_8", true); - // scene.world.setBlocks([2, 3, 4], "astraladditions:desizer_8", true); - // scene.world.setBlocks([3, 3, 4], "astraladditions:desizer_8", true); - // scene.idle(10); - // scene.text(60, "The casings don't have to be accurate. This also works", [1, 2.5, 4]); - // scene.idle(80); - // scene.world.setBlocks([1, 1, 3], "minecraft:dirt", true); - // scene.world.setBlocks([2, 1, 3], "minecraft:dirt", true); - // scene.world.setBlocks([3, 1, 3], "minecraft:dirt", true); - // scene.world.setBlocks([1, 2, 3], "minecraft:dirt", true); - // scene.world.setBlocks([2, 2, 3], "minecraft:dirt", true); - // scene.world.setBlocks([3, 2, 3], "minecraft:dirt", true); - // scene.world.setBlocks([1, 3, 3], "minecraft:dirt", true); - // scene.world.setBlocks([2, 3, 3], "minecraft:dirt", true); - // scene.world.setBlocks([3, 3, 3], "minecraft:dirt", true); - // scene.world.setBlocks([1, 1, 2], "minecraft:dirt", true); - // scene.world.setBlocks([2, 1, 2], "minecraft:dirt", true); - // scene.world.setBlocks([3, 1, 2], "minecraft:dirt", true); - // scene.world.setBlocks([1, 2, 2], "minecraft:dirt", true); - // scene.world.setBlocks([2, 2, 2], "minecraft:dirt", true); - // scene.world.setBlocks([3, 2, 2], "minecraft:dirt", true); - // scene.world.setBlocks([1, 3, 2], "minecraft:dirt", true); - // scene.world.setBlocks([2, 3, 2], "minecraft:dirt", true); - // scene.world.setBlocks([3, 3, 2], "minecraft:dirt", true); - // scene.world.setBlocks([1, 1, 1], "minecraft:dirt", true); - // scene.world.setBlocks([2, 1, 1], "minecraft:dirt", true); - // scene.world.setBlocks([3, 1, 1], "minecraft:dirt", true); - // scene.world.setBlocks([1, 2, 1], "minecraft:dirt", true); - // scene.world.setBlocks([2, 2, 1], "minecraft:dirt", true); - // scene.world.setBlocks([3, 2, 1], "minecraft:dirt", true); - // scene.world.setBlocks([1, 3, 1], "minecraft:dirt", true); - // scene.world.setBlocks([2, 3, 1], "minecraft:dirt", true); - // scene.world.setBlocks([3, 3, 1], "minecraft:dirt", true); - // scene.idle(10); - // scene.text(70, "The Desizer will shrink a 3x3x3 cube of blocks down into a single item", [1, 2.5, 2]); - // scene.idle(90); - // scene.text(70, "It's powered by Redstone. Place a button on the back of the Desizer Controller", [1, 2.5, 4]); - // scene.world.setBlocks([1, 1, 3], "minecraft:air", true); - // scene.world.setBlocks([2, 1, 3], "minecraft:air", true); - // scene.world.setBlocks([3, 1, 3], "minecraft:air", true); - // scene.world.setBlocks([1, 2, 3], "minecraft:air", true); - // scene.world.setBlocks([2, 2, 3], "minecraft:air", true); - // scene.world.setBlocks([3, 2, 3], "minecraft:air", true); - // scene.world.setBlocks([1, 3, 3], "minecraft:air", true); - // scene.world.setBlocks([2, 3, 3], "minecraft:air", true); - // scene.world.setBlocks([3, 3, 3], "minecraft:air", true); - // scene.world.setBlocks([1, 1, 2], "minecraft:air", true); - // scene.world.setBlocks([2, 1, 2], "minecraft:air", true); - // scene.world.setBlocks([3, 1, 2], "minecraft:air", true); - // scene.world.setBlocks([1, 2, 2], "minecraft:air", true); - // scene.world.setBlocks([2, 2, 2], "minecraft:air", true); - // scene.world.setBlocks([3, 2, 2], "minecraft:air", true); - // scene.world.setBlocks([1, 3, 2], "minecraft:air", true); - // scene.world.setBlocks([2, 3, 2], "minecraft:air", true); - // scene.world.setBlocks([3, 3, 2], "minecraft:air", true); - // scene.world.setBlocks([1, 1, 1], "minecraft:air", true); - // scene.world.setBlocks([2, 1, 1], "minecraft:air", true); - // scene.world.setBlocks([3, 1, 1], "minecraft:air", true); - // scene.world.setBlocks([1, 2, 1], "minecraft:air", true); - // scene.world.setBlocks([2, 2, 1], "minecraft:air", true); - // scene.world.setBlocks([3, 2, 1], "minecraft:air", true); - // scene.world.setBlocks([1, 3, 1], "minecraft:air", true); - // scene.world.setBlocks([2, 3, 1], "minecraft:air", true); - // scene.world.setBlocks([3, 3, 1], "minecraft:air", true); - // scene.idle(90); - // scene.text(60, "If it doesn't detect a valid recipe, it will just break the blocks", [1, 2.5, 4]); - // scene.idle(70); - // }); - }); -})(); diff --git a/kubejs/custom_types/ponderjs.d.ts b/kubejs/custom_types/ponderjs.d.ts index 93795b65f..e27020d34 100644 --- a/kubejs/custom_types/ponderjs.d.ts +++ b/kubejs/custom_types/ponderjs.d.ts @@ -1,27 +1,28 @@ +type Namespace = `${string}:${string}`; + type TagEvent = { - createTag: ( - tagName: `${string}:${string}`, - tagIcon: `${string}:${string}`, - tagTitle: string, - tagDescription: string, - defaultItems: Array<`${string}:${string}`> - ) => void; - }; - - declare class PonderPalette { - static readonly "BLACK": Internal.PonderPalette; - static readonly "GREEN": Internal.PonderPalette; - static readonly "INPUT": Internal.PonderPalette; - static readonly "BLUE": Internal.PonderPalette; - static readonly "FAST": Internal.PonderPalette; - static readonly "OUTPUT": Internal.PonderPalette; - static readonly "MEDIUM": Internal.PonderPalette; - static readonly "WHITE": Internal.PonderPalette; - static readonly "RED": Internal.PonderPalette; - static readonly "SLOW": Internal.PonderPalette; - } - - declare function onEvent(eventName: "ponder.tag", handler: (event: TagEvent) => void): any; - // What's the type for the event? - declare function onEvent(eventName: "ponder.override", handler: (event: any) => void): any; - \ No newline at end of file + createTag: ( + tagName: Namespace, + tagIcon: Special.Item, + tagTitle: string, + tagDescription: string, + defaultItems: Namespace[] + ) => void; +}; + +declare class PonderPalette { + static readonly "BLACK": Internal.PonderPalette; + static readonly "GREEN": Internal.PonderPalette; + static readonly "INPUT": Internal.PonderPalette; + static readonly "BLUE": Internal.PonderPalette; + static readonly "FAST": Internal.PonderPalette; + static readonly "OUTPUT": Internal.PonderPalette; + static readonly "MEDIUM": Internal.PonderPalette; + static readonly "WHITE": Internal.PonderPalette; + static readonly "RED": Internal.PonderPalette; + static readonly "SLOW": Internal.PonderPalette; +} + +declare function onEvent(eventName: "ponder.tag", handler: (event: TagEvent) => void): any; +// What's the type for the event? +declare function onEvent(eventName: "ponder.override", handler: (event: any) => void): any;