From 81d72886b6207ea95ebdedeb396e962f3a263cf6 Mon Sep 17 00:00:00 2001 From: The-Shortman <78680166+The-Shortman@users.noreply.github.com> Date: Sun, 24 Aug 2025 18:15:51 +0100 Subject: [PATCH 1/7] New ponder tag registry template --- kubejs/client_scripts/ponder.js | 46 --------------- kubejs/client_scripts/ponder_misc.js | 86 ++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+), 46 deletions(-) delete mode 100644 kubejs/client_scripts/ponder.js create mode 100644 kubejs/client_scripts/ponder_misc.js 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..b130928a6 --- /dev/null +++ b/kubejs/client_scripts/ponder_misc.js @@ -0,0 +1,86 @@ +(function ponder() { + onEvent("ponder.tag", (event) => { + // Registers tags as seen in the ponder index homepage + + 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 tricks 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:electrolyser_dummy", "astraladditions:desizer_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", + icon: "yttr:logo", + displayName: "Yttr", + tooltip: "Mechanics that push the boundaries of your 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; + } + }); +})(); From 6fa0affa8aa020cfeeb58206b490eabb7a759331 Mon Sep 17 00:00:00 2001 From: The-Shortman <78680166+The-Shortman@users.noreply.github.com> Date: Tue, 30 Sep 2025 22:48:03 +0100 Subject: [PATCH 2/7] Update ponder types to work with namespaces --- kubejs/custom_types/ponderjs.d.ts | 53 ++++++++++++++++--------------- 1 file changed, 27 insertions(+), 26 deletions(-) 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; From 4b3c213965dbf73bdfb5cfd8b2ec1b388fcf82e3 Mon Sep 17 00:00:00 2001 From: The-Shortman <78680166+The-Shortman@users.noreply.github.com> Date: Tue, 30 Sep 2025 22:49:17 +0100 Subject: [PATCH 3/7] Remove old ponders (dw i have backups for reference) --- kubejs/client_scripts/ponders/desizer.js | 96 -------- .../ponders/desizer_sturdy_cage.js | 49 ---- .../ponders/desizer_ultrapure_carbon.js | 51 ---- kubejs/client_scripts/ponders/distillation.js | 9 - kubejs/client_scripts/ponders/electrolyzer.js | 87 ------- kubejs/client_scripts/ponders/moon_portal.js | 31 --- .../ponders/root_of_continuity.js | 51 ---- .../client_scripts/ponders/seared_melter.js | 50 ---- .../ponders/shimmer_refinery.js | 11 - .../ponders/stone_growth_chamber.js | 232 ------------------ .../ponders/stone_growth_chamber_dummy.js | 97 -------- 11 files changed, 764 deletions(-) delete mode 100644 kubejs/client_scripts/ponders/desizer.js delete mode 100644 kubejs/client_scripts/ponders/desizer_sturdy_cage.js delete mode 100644 kubejs/client_scripts/ponders/desizer_ultrapure_carbon.js delete mode 100644 kubejs/client_scripts/ponders/distillation.js delete mode 100644 kubejs/client_scripts/ponders/electrolyzer.js delete mode 100644 kubejs/client_scripts/ponders/moon_portal.js delete mode 100644 kubejs/client_scripts/ponders/root_of_continuity.js delete mode 100644 kubejs/client_scripts/ponders/seared_melter.js delete mode 100644 kubejs/client_scripts/ponders/shimmer_refinery.js delete mode 100644 kubejs/client_scripts/ponders/stone_growth_chamber.js delete mode 100644 kubejs/client_scripts/ponders/stone_growth_chamber_dummy.js 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); - // }); - }); -})(); From be2d08c0847c1256dd8624629eee646e4e9e0905 Mon Sep 17 00:00:00 2001 From: The-Shortman <78680166+The-Shortman@users.noreply.github.com> Date: Wed, 1 Oct 2025 00:28:30 +0100 Subject: [PATCH 4/7] Implement new desizer ponders --- .../createastral/ponder/building_desizer.nbt | Bin 0 -> 597 bytes .../createastral/ponder/using_desizer.nbt | Bin 0 -> 628 bytes .../ponders/createastral-machines_desizer.js | 155 ++++++++++++++++++ 3 files changed, 155 insertions(+) create mode 100644 kubejs/assets/createastral/ponder/building_desizer.nbt create mode 100644 kubejs/assets/createastral/ponder/using_desizer.nbt create mode 100644 kubejs/client_scripts/ponders/createastral-machines_desizer.js diff --git a/kubejs/assets/createastral/ponder/building_desizer.nbt b/kubejs/assets/createastral/ponder/building_desizer.nbt new file mode 100644 index 0000000000000000000000000000000000000000..d58ae1e52077244798737c06ab3899055f6a0627 GIT binary patch literal 597 zcmb2|=3oGW|7)im%$sc>(eS@P(P7uzRaxzGze(7BxAC=p(8Y@DlFs%=|0TW8q#eq!@ez5@$!w!@U@}WZ(4ozdGk)J`KBIO(n6=^& z13&i%6~=i}KDclf&##`aaF?=kse9Y2KAx+xlB=wZLcX8=>sWy)TrPG2B43`e;@ydW zyA#10{h83UgQPPZP!vH-w{7}3*J5t?lf-4$yTs?M-`QR%aq6&`O=tT;8^ONnLrdhI zUEA|)-rDw=RhwE3&)e>7-)XwO;+dw+nYEQ?ZLRr>S6{#L`9Y%7waQ;Sbwy{kJr0V{ zZhL$4InRyqI-w60Sy6$RbsNqv3$3lZcaTx;@2A2o_GV#Ire-r9s;Y%RV?Y%f9pUM|2lc)%9IsYb3S@J^Af- z-To~bzuj~t+iY+1*zF-H*EHGv%Ufoo98xhpqot(Ydt#!XWu%MWxhE=(8-H6KQ4zFU z-7&{R$=&TqilC+C$Q9i_W-npvWJA&^^_|pY$?=AD2?^9h~a(xH?DXYa+S50>GUEX`w z)L`9LpRM6ykBaj3b}rwRX%%5qQOx=7!G?_ex4oBl+qP#PJHC@=%8Q}t=d z?_VGP-`^rZ`?38Zw#D<5Qu=Eg-ygm_Q6_=O&P;KV|MjBx^G+ugPw#ThW>`Mut@zU` l{03s~UBQ>$huo*J7Vt7K005b1FDC#1 literal 0 HcmV?d00001 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); + }); + }); +})(); From 0743ee7102bcdeb9806a16635dafd7e0c4acbf45 Mon Sep 17 00:00:00 2001 From: The-Shortman <78680166+The-Shortman@users.noreply.github.com> Date: Wed, 1 Oct 2025 00:29:03 +0100 Subject: [PATCH 5/7] Catalogue some blocks into the new ponder tags --- kubejs/client_scripts/ponder_misc.js | 37 +++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/kubejs/client_scripts/ponder_misc.js b/kubejs/client_scripts/ponder_misc.js index b130928a6..f63b07aba 100644 --- a/kubejs/client_scripts/ponder_misc.js +++ b/kubejs/client_scripts/ponder_misc.js @@ -1,7 +1,16 @@ (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 @@ -15,7 +24,29 @@ icon: "createastral:electrolyser_dummy", displayName: "Create: Astral Machines", tooltip: "Guides on the custom machines added by Astral", - assignedPonders: ["createastral:electrolyser_dummy", "astraladditions:desizer_controller"], + 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 @@ -39,10 +70,10 @@ assignedPonders: ["tconstruct:seared_melter", "tconstruct:foundry_controller", "tconstruct:seared_faucet"], }, { - namespace: "kubejs:yttr", + namespace: "kubejs:yttr", // Custom ponder integration for yttr icon: "yttr:logo", displayName: "Yttr", - tooltip: "Mechanics that push the boundaries of your gameplay", + tooltip: "Mechanics that push the boundaries of gameplay", assignedPonders: ["yttr:root_of_continuity"], }, ]; From 0fd45ec6185f25afdc07399e6d1251165ec2901d Mon Sep 17 00:00:00 2001 From: The-Shortman <78680166+The-Shortman@users.noreply.github.com> Date: Wed, 1 Oct 2025 23:35:29 +0100 Subject: [PATCH 6/7] Add shimmer refinery ponder --- .../createastral/ponder/building_refinery.nbt | Bin 0 -> 1349 bytes .../createastral/ponder/using_refinery.nbt | Bin 0 -> 2801 bytes kubejs/client_scripts/ponder_misc.js | 2 +- .../createastral-machines_shimmerrefinery.js | 252 ++++++++++++++++++ 4 files changed, 253 insertions(+), 1 deletion(-) create mode 100644 kubejs/assets/createastral/ponder/building_refinery.nbt create mode 100644 kubejs/assets/createastral/ponder/using_refinery.nbt create mode 100644 kubejs/client_scripts/ponders/createastral-machines_shimmerrefinery.js diff --git a/kubejs/assets/createastral/ponder/building_refinery.nbt b/kubejs/assets/createastral/ponder/building_refinery.nbt new file mode 100644 index 0000000000000000000000000000000000000000..22f3cd0d0fe591c90ad50b0ae3c6df63c271b336 GIT binary patch literal 1349 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 literal 0 HcmV?d00001 diff --git a/kubejs/client_scripts/ponder_misc.js b/kubejs/client_scripts/ponder_misc.js index f63b07aba..6d76c36e4 100644 --- a/kubejs/client_scripts/ponder_misc.js +++ b/kubejs/client_scripts/ponder_misc.js @@ -16,7 +16,7 @@ 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 tricks specific to this modpack", + tooltip: "Tips and hints specific to this modpack", assignedPonders: ["createastral:shimmering_stone"], }, { 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); + }); + }); +})(); From 26d574ef0a87aedb12e98c7476438cbd8b6fa280 Mon Sep 17 00:00:00 2001 From: The-Shortman <78680166+The-Shortman@users.noreply.github.com> Date: Tue, 18 Nov 2025 18:05:11 +0000 Subject: [PATCH 7/7] Rename Void Filter to Shimmer Refinery Dummy Did this so that the ponder index shows 'shimmer refinery' instead of 'void filter' to reduce confusion --- kubejs/assets/yttr/lang/en_us.json | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/kubejs/assets/yttr/lang/en_us.json b/kubejs/assets/yttr/lang/en_us.json index 22b74b4f2..f6b7fe953 100644 --- a/kubejs/assets/yttr/lang/en_us.json +++ b/kubejs/assets/yttr/lang/en_us.json @@ -1,13 +1,14 @@ { - "fluid.astraladditions.sputum": "Sputum", - "item.yttr.raw_gadolinite": "Raw Yttrium", - "item.yttr.ultrapure_wolfram": "Ultrapure Debris", - "block.yttr.gadolinite": "Yttrium", - "block.yttr.raw_gadolinite_block": "Raw Yttrium Block", - "block.yttr.deepslate_gadolinite": "Deepslate Yttrium", - "block.yttr.continuous_platform": "Structured Prismatic Crystals", - "block.yttr.centrifuge": "Yttric Centrifuge", - "advancements.yttr.obtain_xl_iron_ingot.desc": "Obtain Big Iron by smelting Raw Yttrium", - "advancements.yttr.obtain_yttrium_ingot.desc": "Obtain an Yttrium Ingot by blasting Raw Yttrium", - "fluid.yttr.core_lava": "Core Lava" + "fluid.astraladditions.sputum": "Sputum", + "item.yttr.raw_gadolinite": "Raw Yttrium", + "item.yttr.ultrapure_wolfram": "Ultrapure Debris", + "block.yttr.gadolinite": "Yttrium", + "block.yttr.raw_gadolinite_block": "Raw Yttrium Block", + "block.yttr.deepslate_gadolinite": "Deepslate Yttrium", + "block.yttr.continuous_platform": "Structured Prismatic Crystals", + "block.yttr.centrifuge": "Yttric Centrifuge", + "block.yttr.void_filter": "Shimmer Refinery Dummy", + "advancements.yttr.obtain_xl_iron_ingot.desc": "Obtain Big Iron by smelting Raw Yttrium", + "advancements.yttr.obtain_yttrium_ingot.desc": "Obtain an Yttrium Ingot by blasting Raw Yttrium", + "fluid.yttr.core_lava": "Core Lava" }