From 1be7ee68494095f604080a3edc977ee2f5951026 Mon Sep 17 00:00:00 2001 From: Tschipcraft <78470530+Tschipcraft@users.noreply.github.com> Date: Tue, 31 Mar 2026 22:11:57 +0200 Subject: [PATCH 1/4] build(26.1): bump pack format and protocol version Ref: Minecraft 26.1 support --- CHANGES.md | 4 +--- .../function/internal/version_checker/start.mcfunction | 2 +- pack.mcmeta | 4 ++-- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 687fe8e..4e9b1d1 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,4 +1,2 @@ -- **Added support for Minecraft 1.21.11** šŸŽ - - Updated to work with the new gamerule names - - Removed broken hide feedback code for 1.21+ +- **Added support for Minecraft 26.1** 🐤 - Bumped pack format and protocol version diff --git a/data/spawnanimations/function/internal/version_checker/start.mcfunction b/data/spawnanimations/function/internal/version_checker/start.mcfunction index e5ec035..1469e16 100644 --- a/data/spawnanimations/function/internal/version_checker/start.mcfunction +++ b/data/spawnanimations/function/internal/version_checker/start.mcfunction @@ -1,7 +1,7 @@ ##by Tschipcraft execute store result score $version ts.sa.settings run data get entity @r DataVersion -execute unless score $global tvc_ignore matches 1 if score $version ts.sa.settings matches 4700.. run tellraw @a [{"text":"[Spawn Animations] ","color":"gray"},{"text":"?","bold":true,"color":"gold"},{"text":" Future unknown Minecraft version above 1.21.11 detected! This data pack/mod may not work correctly anymore! Please make sure to check for updates in the menu! (","color":"gold"},{"text":"/trigger tschipcraft.menu","underlined":true,"color":"gold","click_event":{"action":"run_command","command":"trigger tschipcraft.menu"},"hover_event":{"action":"show_text","value":"Click here","text":"Click here"}},{"text":")","color":"gold"}] +execute unless score $global tvc_ignore matches 1 if score $version ts.sa.settings matches 4800.. run tellraw @a [{"text":"[Spawn Animations] ","color":"gray"},{"text":"?","bold":true,"color":"gold"},{"text":" Future unknown Minecraft version above 26.1 detected! This data pack/mod may not work correctly anymore! Please make sure to check for updates in the menu! (","color":"gold"},{"text":"/trigger tschipcraft.menu","underlined":true,"color":"gold","click_event":{"action":"run_command","command":"trigger tschipcraft.menu"},"hover_event":{"action":"show_text","value":"Click here","text":"Click here"}},{"text":")","color":"gold"}] # Note: 1.17x-1.20x uses the old folder names (function -> functions) # Announce escape sequence handling changes diff --git a/pack.mcmeta b/pack.mcmeta index 8c9c051..0678d69 100644 --- a/pack.mcmeta +++ b/pack.mcmeta @@ -2,9 +2,9 @@ "id": "spawnanimations", "pack": { "pack_format": 15, - "supported_formats": [7, 94], + "supported_formats": [7, 101], "min_format": 7, - "max_format": 94, + "max_format": 101, "description": "Tschipcraft's Spawn Animations\nā”” v${version} ā— mc${mc_human_version_range}" }, "overlays": { From 229594842ecc4aa65297089672d7da4a0aa6eb65 Mon Sep 17 00:00:00 2001 From: Tschipcraft <78470530+Tschipcraft@users.noreply.github.com> Date: Tue, 31 Mar 2026 22:17:27 +0200 Subject: [PATCH 2/4] feat(26.1/tags): migrate to `#supports_vegetation` - Replace legacy `#minecraft:bamboo_plantable_on` with `#spawnanimations:dirt` that includes both legacy and new `#minecraft:supports_vegetation` - Update particle/sound functions to use new tag and add explicit gravel sound - Reorder nether bricks playsound entry Ref: Minecraft 26.1 support --- CHANGES.md | 1 + .../animation/dig_up/particles/giant_particles.mcfunction | 2 +- .../animation/dig_up/particles/particles.mcfunction | 2 +- .../internal/animation/dig_up/sound/play_sound.mcfunction | 3 ++- .../internal/animation/dig_up/sound/play_sound2.mcfunction | 5 +++-- data/spawnanimations/tags/block/dirt.json | 7 +++++++ data/spawnanimations/tags/block/supported.json | 2 +- 7 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 data/spawnanimations/tags/block/dirt.json diff --git a/CHANGES.md b/CHANGES.md index 4e9b1d1..35ebb50 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,2 +1,3 @@ - **Added support for Minecraft 26.1** 🐤 + - Migrated `#bamboo_plantable_on` references to `#supports_vegetation` - Bumped pack format and protocol version diff --git a/data/spawnanimations/function/internal/animation/dig_up/particles/giant_particles.mcfunction b/data/spawnanimations/function/internal/animation/dig_up/particles/giant_particles.mcfunction index 2cf4190..963dd15 100644 --- a/data/spawnanimations/function/internal/animation/dig_up/particles/giant_particles.mcfunction +++ b/data/spawnanimations/function/internal/animation/dig_up/particles/giant_particles.mcfunction @@ -3,7 +3,7 @@ # Sand execute if block ~ ~ ~ #minecraft:sand run particle block{block_state:"minecraft:sand"} ~ ~1 ~ 1.5 0 1.5 1 30 normal # Dirt -execute if block ~ ~ ~ #minecraft:bamboo_plantable_on unless block ~ ~ ~ #minecraft:sand run particle block{block_state:"minecraft:dirt"} ~ ~1 ~ 1.5 0 1.5 1 30 normal +execute if block ~ ~ ~ #spawnanimations:dirt unless block ~ ~ ~ #minecraft:sand run particle block{block_state:"minecraft:dirt"} ~ ~1 ~ 1.5 0 1.5 1 30 normal # Wood execute if block ~ ~ ~ #minecraft:planks run particle block{block_state:"minecraft:oak_planks"} ~ ~1 ~ 1.5 0 1.5 1 30 normal execute if block ~ ~ ~ #minecraft:logs run particle block{block_state:"minecraft:oak_log"} ~ ~1 ~ 1.5 0 1.5 1 30 normal diff --git a/data/spawnanimations/function/internal/animation/dig_up/particles/particles.mcfunction b/data/spawnanimations/function/internal/animation/dig_up/particles/particles.mcfunction index cd4e0ba..e780ab1 100644 --- a/data/spawnanimations/function/internal/animation/dig_up/particles/particles.mcfunction +++ b/data/spawnanimations/function/internal/animation/dig_up/particles/particles.mcfunction @@ -6,7 +6,7 @@ execute if block ~ ~ ~ #minecraft:sand unless block ~ ~ ~ minecraft:red_sand run execute if block ~ ~ ~ minecraft:red_sand run particle block{block_state:"minecraft:red_sand"} ~ ~0.2 ~ 0.1 0 0.1 1 9 normal execute if block ~ ~ ~ minecraft:sandstone run particle block{block_state:"minecraft:sandstone"} ~ ~0.2 ~ 0.1 0 0.1 1 9 normal # Dirt -execute if block ~ ~ ~ #minecraft:bamboo_plantable_on unless block ~ ~ ~ #minecraft:sand unless block ~ ~0.2 ~ minecraft:gravel run particle block{block_state:"minecraft:dirt"} ~ ~ ~ 0.1 0 0.1 1 9 normal +execute if block ~ ~ ~ #spawnanimations:dirt unless block ~ ~ ~ #minecraft:sand unless block ~ ~0.2 ~ minecraft:gravel run particle block{block_state:"minecraft:dirt"} ~ ~ ~ 0.1 0 0.1 1 9 normal # Wood execute if block ~ ~ ~ #minecraft:planks run particle block{block_state:"minecraft:oak_planks"} ~ ~0.2 ~ 0.1 0 0.1 1 9 normal execute if block ~ ~ ~ #minecraft:logs run particle block{block_state:"minecraft:oak_log"} ~ ~0.2 ~ 0.1 0 0.1 1 9 normal diff --git a/data/spawnanimations/function/internal/animation/dig_up/sound/play_sound.mcfunction b/data/spawnanimations/function/internal/animation/dig_up/sound/play_sound.mcfunction index e796a1f..49dca11 100644 --- a/data/spawnanimations/function/internal/animation/dig_up/sound/play_sound.mcfunction +++ b/data/spawnanimations/function/internal/animation/dig_up/sound/play_sound.mcfunction @@ -4,7 +4,8 @@ execute if block ~ ~ ~ #minecraft:sand run playsound minecraft:block.sand.break hostile @a ~ ~ ~ 0.85 0.6 execute if block ~ ~ ~ sandstone run playsound minecraft:block.stone.break hostile @a ~ ~ ~ 0.85 0.6 # Dirt -execute if block ~ ~ ~ #minecraft:bamboo_plantable_on unless block ~ ~ ~ #minecraft:sand unless block ~ ~0.2 ~ minecraft:snow run playsound minecraft:block.gravel.break hostile @a ~ ~ ~ 0.85 0.6 +execute if block ~ ~ ~ #spawnanimations:dirt unless block ~ ~ ~ #minecraft:sand unless block ~ ~0.2 ~ minecraft:snow run playsound minecraft:block.gravel.break hostile @a ~ ~ ~ 0.85 0.6 +execute if block ~ ~ ~ minecraft:gravel unless block ~ ~ ~ #spawnanimations:dirt unless block ~ ~0.2 ~ minecraft:snow run playsound minecraft:block.gravel.break hostile @a ~ ~ ~ 0.85 0.6 # Wood execute if block ~ ~ ~ #minecraft:planks run playsound minecraft:block.wood.break hostile @a ~ ~ ~ 0.85 0.6 execute if block ~ ~ ~ #minecraft:logs run playsound minecraft:block.wood.break hostile @a ~ ~ ~ 0.85 0.6 diff --git a/data/spawnanimations/function/internal/animation/dig_up/sound/play_sound2.mcfunction b/data/spawnanimations/function/internal/animation/dig_up/sound/play_sound2.mcfunction index da1e264..d3c47f9 100644 --- a/data/spawnanimations/function/internal/animation/dig_up/sound/play_sound2.mcfunction +++ b/data/spawnanimations/function/internal/animation/dig_up/sound/play_sound2.mcfunction @@ -4,7 +4,8 @@ execute if block ~ ~ ~ #minecraft:sand run playsound minecraft:block.sand.break hostile @a ~ ~ ~ 0.85 0.9 execute if block ~ ~ ~ sandstone run playsound minecraft:block.stone.break hostile @a ~ ~ ~ 0.85 0.9 # Dirt -execute if block ~ ~ ~ #minecraft:bamboo_plantable_on unless block ~ ~ ~ #minecraft:sand run playsound minecraft:block.gravel.break hostile @a ~ ~ ~ 0.85 0.9 +execute if block ~ ~ ~ #spawnanimations:dirt unless block ~ ~ ~ #minecraft:sand run playsound minecraft:block.gravel.break hostile @a ~ ~ ~ 0.85 0.9 +execute if block ~ ~ ~ minecraft:gravel unless block ~ ~ ~ #spawnanimations:dirt run playsound minecraft:block.gravel.break hostile @a ~ ~ ~ 0.85 0.9 # Wood execute if block ~ ~ ~ #minecraft:planks run playsound minecraft:block.wood.break hostile @a ~ ~ ~ 0.85 0.9 execute if block ~ ~ ~ #minecraft:logs run playsound minecraft:block.wood.break hostile @a ~ ~ ~ 0.85 0.9 @@ -28,8 +29,8 @@ execute if block ~ ~ ~ minecraft:end_stone run playsound minecraft:block.stone.b # Nether execute if block ~ ~ ~ #minecraft:base_stone_nether run playsound minecraft:block.netherrack.break hostile @a ~ ~ ~ 0.85 0.9 -execute if block ~ ~ ~ minecraft:nether_bricks run playsound minecraft:block.nether_bricks.break hostile @a ~ ~ ~ 0.85 0.9 execute if block ~ ~ ~ #minecraft:nylium run playsound minecraft:block.wart_block.break hostile @a ~ ~ ~ 0.85 0.9 +execute if block ~ ~ ~ minecraft:nether_bricks run playsound minecraft:block.nether_bricks.break hostile @a ~ ~ ~ 0.85 0.9 execute if block ~ ~ ~ #minecraft:soul_fire_base_blocks run playsound minecraft:block.soul_sand.break hostile @a ~ ~ ~ 0.85 0.9 execute if block ~ ~ ~ minecraft:lava run playsound minecraft:block.lava.pop hostile @a ~ ~ ~ 0.85 0.9 diff --git a/data/spawnanimations/tags/block/dirt.json b/data/spawnanimations/tags/block/dirt.json new file mode 100644 index 0000000..f292e0d --- /dev/null +++ b/data/spawnanimations/tags/block/dirt.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + {"id": "#minecraft:bamboo_plantable_on", "required": false}, + {"id": "#minecraft:supports_vegetation", "required": false} + ] +} diff --git a/data/spawnanimations/tags/block/supported.json b/data/spawnanimations/tags/block/supported.json index a458d49..041bd68 100644 --- a/data/spawnanimations/tags/block/supported.json +++ b/data/spawnanimations/tags/block/supported.json @@ -3,7 +3,7 @@ "values": [ "#minecraft:sand", "minecraft:sandstone", - "#minecraft:bamboo_plantable_on", + "#spawnanimations:dirt", "#minecraft:planks", "#minecraft:logs", "#minecraft:leaves", From a56b90c4bdf17f23da63255db40513ad4529c41a Mon Sep 17 00:00:00 2001 From: Tschipcraft <78470530+Tschipcraft@users.noreply.github.com> Date: Tue, 31 Mar 2026 22:29:26 +0200 Subject: [PATCH 3/4] feat(26.1/fabric): introduce router to handle unobfuscated code - Add obfuscated class detection in `Init` to select appropriate sender - Migrate `sendConfig` to use unobfuscated names - Retain `sendConfigObf` for pre-26.1 compatibility - Remove explicit `fabric` dependency in `fabric.mod.json` Ref: Minecraft 26.1 support --- CHANGES.md | 1 + fabric.mod.json | 1 - .../spawnanimations/fabric/Init.class | Bin 2696 -> 3001 bytes .../spawnanimations/fabric/sendConfig.class | Bin 5817 -> 6054 bytes .../fabric/sendConfigObf.class | Bin 0 -> 5826 bytes .../spawnanimations/fabric/Init.java | 8 +- .../spawnanimations/fabric/sendConfig.java | 7 +- .../spawnanimations/fabric/sendConfigObf.java | 86 ++++++++++++++++++ 8 files changed, 98 insertions(+), 5 deletions(-) create mode 100644 net/tschipcraft/spawnanimations/fabric/sendConfigObf.class create mode 100644 src/main/java/net/tschipcraft/spawnanimations/fabric/sendConfigObf.java diff --git a/CHANGES.md b/CHANGES.md index 35ebb50..b0a9219 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,4 @@ - **Added support for Minecraft 26.1** 🐤 - Migrated `#bamboo_plantable_on` references to `#supports_vegetation` + - Added router to handle [unobfuscated code](https://www.minecraft.net/en-us/article/removing-obfuscation-in-java-edition) - Bumped pack format and protocol version diff --git a/fabric.mod.json b/fabric.mod.json index cca9111..793e1d0 100644 --- a/fabric.mod.json +++ b/fabric.mod.json @@ -22,7 +22,6 @@ }, "depends": { "minecraft": "${mc_version_range_fabric}", - "fabric": ">=0.34.0", "java": ">=8" }, "recommends": { diff --git a/net/tschipcraft/spawnanimations/fabric/Init.class b/net/tschipcraft/spawnanimations/fabric/Init.class index 390b78ceb1bde67028ac4c1a4cb6d1bc8fc4ec90..df34b160702c04824e8d354e0ddb9834dec14e36 100644 GIT binary patch delta 683 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 NV;k>(qPzi{{|8$O9@PK< literal 0 HcmV?d00001 diff --git a/src/main/java/net/tschipcraft/spawnanimations/fabric/Init.java b/src/main/java/net/tschipcraft/spawnanimations/fabric/Init.java index 0836079..68cbea0 100644 --- a/src/main/java/net/tschipcraft/spawnanimations/fabric/Init.java +++ b/src/main/java/net/tschipcraft/spawnanimations/fabric/Init.java @@ -31,7 +31,13 @@ public void onInitialize() { if (FabricLoader.getInstance().isModLoaded("midnightlib")) { // Use MidnightLib features LOGGER.info("[Spawn Animations] Sending global config to world ..."); - sendConfig.sendConfig(server); + try { + // Check for obfuscated class name to determine if we're running a pre 26.1 version + Class.forName("net.minecraft.class_2168"); + sendConfigObf.sendConfig(server); + } catch (ClassNotFoundException e) { + sendConfig.sendConfig(server); + } } }); } diff --git a/src/main/java/net/tschipcraft/spawnanimations/fabric/sendConfig.java b/src/main/java/net/tschipcraft/spawnanimations/fabric/sendConfig.java index d88ef86..ae0cc6d 100644 --- a/src/main/java/net/tschipcraft/spawnanimations/fabric/sendConfig.java +++ b/src/main/java/net/tschipcraft/spawnanimations/fabric/sendConfig.java @@ -1,8 +1,8 @@ package net.tschipcraft.spawnanimations.fabric; import com.mojang.brigadier.exceptions.CommandSyntaxException; +import net.minecraft.commands.CommandSourceStack; import net.minecraft.server.MinecraftServer; -import net.minecraft.server.command.ServerCommandSource; public class sendConfig { @@ -39,6 +39,7 @@ public static void sendConfig(MinecraftServer server) { } else { sendCommand("execute if score $play_sounds ts.sa.settings matches -1 run scoreboard players set $play_sounds ts.sa.settings 0", server); sendCommand("execute if score $play_sounds ts.sa.settings matches 2 run scoreboard players set $play_sounds ts.sa.settings 1", server); + } if (Config.hide_worn_armor_and_tools == Config.bool.YES) { sendCommand("scoreboard players set $hide_armor ts.sa.settings 2", server); @@ -75,9 +76,9 @@ public static void sendConfig(MinecraftServer server) { } public static void sendCommand(String command, MinecraftServer server) { - ServerCommandSource commandSource = server.getCommandSource(); + CommandSourceStack commandSource = server.createCommandSourceStack(); try { - server.getCommandManager().getDispatcher().execute(command, commandSource); + server.getCommands().getDispatcher().execute(command, commandSource); } catch (CommandSyntaxException ignored) { } } diff --git a/src/main/java/net/tschipcraft/spawnanimations/fabric/sendConfigObf.java b/src/main/java/net/tschipcraft/spawnanimations/fabric/sendConfigObf.java new file mode 100644 index 0000000..c45f2f8 --- /dev/null +++ b/src/main/java/net/tschipcraft/spawnanimations/fabric/sendConfigObf.java @@ -0,0 +1,86 @@ +package net.tschipcraft.spawnanimations.fabric; + +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.command.ServerCommandSource; + +public class sendConfigObf { + + public static void sendConfig(MinecraftServer server) { + sendCommand("scoreboard objectives add ts.sa.settings dummy", server); + + if (Config.activation_distance == 0) { + sendCommand("execute unless score $activation_dist ts.sa.settings matches 1..100 run scoreboard players set $activation_dist ts.sa.settings 20", server); + sendCommand("execute if score #lock_distance ts.sa.settings matches 1 run scoreboard players set #lock_distance ts.sa.settings 0", server); + } else { + sendCommand("scoreboard players set $activation_dist ts.sa.settings " + Config.activation_distance, server); + sendCommand("scoreboard players set #lock_distance ts.sa.settings 1", server); + } + if (Config.activation_mode == Config.mode.CLASSIC) { + sendCommand("scoreboard players set $activation_mode ts.sa.settings 2", server); + } else if (Config.activation_mode == Config.mode.VANILLA) { + sendCommand("scoreboard players set $activation_mode ts.sa.settings -1", server); + } else { + sendCommand("execute if score $activation_mode ts.sa.settings matches -1 run scoreboard players set $activation_mode ts.sa.settings 0", server); + sendCommand("execute if score $activation_mode ts.sa.settings matches 2 run scoreboard players set $activation_mode ts.sa.settings 1", server); + } + if (Config.enable_poof_animation == Config.bool.YES) { + sendCommand("scoreboard players set $enable_poof_anim ts.sa.settings 2", server); + } else if (Config.enable_poof_animation == Config.bool.NO) { + sendCommand("scoreboard players set $enable_poof_anim ts.sa.settings -1", server); + } else { + sendCommand("execute if score $enable_poof_anim ts.sa.settings matches -1 run scoreboard players set $enable_poof_anim ts.sa.settings 0", server); + sendCommand("execute if score $enable_poof_anim ts.sa.settings matches 2 run scoreboard players set $enable_poof_anim ts.sa.settings 1", server); + } + if (Config.play_animation_sounds == Config.bool.YES) { + sendCommand("scoreboard players set $play_sounds ts.sa.settings 2", server); + } else if (Config.play_animation_sounds == Config.bool.NO) { + sendCommand("scoreboard players set $play_sounds ts.sa.settings -1", server); + } else { + sendCommand("execute if score $play_sounds ts.sa.settings matches -1 run scoreboard players set $play_sounds ts.sa.settings 0", server); + sendCommand("execute if score $play_sounds ts.sa.settings matches 2 run scoreboard players set $play_sounds ts.sa.settings 1", server); + } + + if (Config.hide_worn_armor_and_tools == Config.bool.YES) { + sendCommand("scoreboard players set $hide_armor ts.sa.settings 2", server); + } else if (Config.hide_worn_armor_and_tools == Config.bool.NO) { + sendCommand("scoreboard players set $hide_armor ts.sa.settings -1", server); + } else { + sendCommand("execute if score $hide_armor ts.sa.settings matches -1 run scoreboard players set $hide_armor ts.sa.settings 0", server); + sendCommand("execute if score $hide_armor ts.sa.settings matches 2 run scoreboard players set $hide_armor ts.sa.settings 1", server); + } + if (Config.hide_emissive_mob_layers == Config.bool.YES) { + sendCommand("scoreboard players set $hide_emissive ts.sa.settings 2", server); + } else if (Config.hide_emissive_mob_layers == Config.bool.NO) { + sendCommand("scoreboard players set $hide_emissive ts.sa.settings -1", server); + } else { + sendCommand("execute if score $hide_emissive ts.sa.settings matches -1 run scoreboard players set $hide_emissive ts.sa.settings 0", server); + sendCommand("execute if score $hide_emissive ts.sa.settings matches 2 run scoreboard players set $hide_emissive ts.sa.settings 1", server); + } + if (Config.reduce_enderman_particles == Config.bool.YES) { + sendCommand("scoreboard players set $enderman_hack ts.sa.settings 2", server); + } else if (Config.reduce_enderman_particles == Config.bool.NO) { + sendCommand("scoreboard players set $enderman_hack ts.sa.settings -1", server); + } else { + sendCommand("execute if score $enderman_hack ts.sa.settings matches -1 run scoreboard players set $enderman_hack ts.sa.settings 0", server); + sendCommand("execute if score $enderman_hack ts.sa.settings matches 2 run scoreboard players set $enderman_hack ts.sa.settings 1", server); + } + if (Config.play_animation_on_unsupported_blocks == Config.bool.YES) { + sendCommand("scoreboard players set $play_unsupport ts.sa.settings 2", server); + } else if (Config.play_animation_on_unsupported_blocks == Config.bool.NO) { + sendCommand("scoreboard players set $play_unsupport ts.sa.settings -1", server); + } else { + sendCommand("execute if score $play_unsupport ts.sa.settings matches -1 run scoreboard players set $play_unsupport ts.sa.settings 0", server); + sendCommand("execute if score $play_unsupport ts.sa.settings matches 2 run scoreboard players set $play_unsupport ts.sa.settings 1", server); + } + } + + public static void sendCommand(String command, MinecraftServer server) { + ServerCommandSource commandSource = server.getCommandSource(); + try { + server.getCommandManager().getDispatcher().execute(command, commandSource); + } catch (CommandSyntaxException ignored) { + } + } + +} From b7c9b674ca4f987a430169943551dd8e875acacc Mon Sep 17 00:00:00 2001 From: Tschipcraft <78470530+Tschipcraft@users.noreply.github.com> Date: Fri, 3 Apr 2026 20:57:06 +0200 Subject: [PATCH 4/4] feat(cd): add `separate_forge` input for conditional Forge mod uploads Introduce a new workflow input parameter `separate_forge` to control whether the separate Forge mod version is uploaded to Modrinth --- .github/workflows/cd.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 0f1c635..1999315 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -19,6 +19,11 @@ on: required: false default: false type: boolean + separate_forge: + description: 'If false, separate Modrinth Forge mod version will not be uploaded' + required: false + default: true + type: boolean jobs: deploy: @@ -257,7 +262,7 @@ jobs: - name: Upload Forge mod version to Modrinth # Forge mod version is uploaded separately atm due to it not being compatible with Minecraft 1.21.6 or above id: upload_forge_modrinth_mod uses: Kir-Antipov/mc-publish@v3.3 - if: steps.check_mod_folder.outputs.files_exists == 'true' && github.event.inputs.dry_run == 'false' + if: steps.check_mod_folder.outputs.files_exists == 'true' && github.event.inputs.dry_run == 'false' && github.event.inputs.separate_forge == 'true' with: modrinth-id: zrzYrlm0 modrinth-token: ${{ secrets.MODRINTH_TOKEN }}