From 04640d2b1270871a474b6e5feef8ad3a4d47e6d2 Mon Sep 17 00:00:00 2001 From: 3944Realms Date: Wed, 18 Mar 2026 20:55:17 +0800 Subject: [PATCH] =?UTF-8?q?build:=20=E5=8F=91=E5=B8=83=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E6=B5=81=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/buildAndRelease.yml | 176 +++++++++++++++--- .../lib39/core/lang/EncryptedClassLoader.java | 2 +- .../api/callback/AnvilUpdateCallback.java | 1 - fabric/src/main/resources/fabric.mod.json | 7 + gradle.properties | 12 +- 5 files changed, 165 insertions(+), 33 deletions(-) diff --git a/.github/workflows/buildAndRelease.yml b/.github/workflows/buildAndRelease.yml index 7541c18..bdc1eac 100644 --- a/.github/workflows/buildAndRelease.yml +++ b/.github/workflows/buildAndRelease.yml @@ -97,6 +97,53 @@ jobs: VERSION="${GITHUB_REF_NAME#v}" echo "version=$VERSION" >> $GITHUB_OUTPUT echo "minecraft_version=$(grep "^minecraft_version=" gradle.properties | cut -d'=' -f2)" >> $GITHUB_OUTPUT + # 从 gradle.properties 提取 mod_id,如果没有则尝试从文件名推断 + MOD_ID=$(grep "^mod_id=" gradle.properties | cut -d'=' -f2 || echo "") + if [ -z "$MOD_ID" ]; then + # 尝试从现有的 jar 文件名提取 mod_id + SAMPLE_JAR=$(ls dist/ | grep -m 1 -E ".*-(fabric|forge)-.*\.jar" || echo "") + if [ -n "$SAMPLE_JAR" ]; then + MOD_ID=$(echo "$SAMPLE_JAR" | sed -E 's/-(fabric|forge)-.*//') + else + MOD_ID="mymod" # 默认值,请根据实际情况修改 + fi + fi + echo "mod_id=$MOD_ID" >> $GITHUB_OUTPUT + + # 从 gradle.properties 提取 mod_name(用于显示) + MOD_NAME=$(grep "^mod_name=" gradle.properties | cut -d'=' -f2 || echo "My Mod") + echo "mod_name=$MOD_NAME" >> $GITHUB_OUTPUT + # 从 gradle.properties 提取 modrinth_id + MODRINTH_ID=$(grep "^modrinth_id=" gradle.properties | cut -d'=' -f2 || echo "Modrinth ID") + echo "modrinth_id=MODRINTH_ID" >> $GITHUB_OUTPUT + # 从 gradle.properties 提取 curseforge_id + CURSEFORGE_ID=$(grep "^curseforge_id=" gradle.properties | cut -d'=' -f2 || echo "Curseforge ID") + echo "curseforge_id=$CURSEFORGE_ID" >> $GITHUB_OUTPUT # 读取 Java 版本列表 - 方法: 使用 JSON 数组格式 + JAVA_VERSIONS_JSON=$(grep "^java_versions=" gradle.properties | cut -d'=' -f2- || echo 'Java Versions') + # 读取 Java 版本列表 + JAVA_VERSIONS_JSON=$(grep "^java_versions=" gradle.properties | cut -d'=' -f2- || echo '["21","17"]') + JAVA_VERSIONS_JSON=$(echo "$JAVA_VERSIONS_JSON" | sed 's/^"//;s/"$//') + echo "java_versions_json=$JAVA_VERSIONS_JSON" >> $GITHUB_OUTPUT + + # 读取 Fabric 的 Modrinth 依赖配置 + FABRIC_MODRINTH_DEPS_RAW=$(grep "^fabric_modrinth_dependencies=" gradle.properties | cut -d'=' -f2- || echo "[]") + FABRIC_MODRINTH_DEPS_JSON=$(echo "$FABRIC_MODRINTH_DEPS_RAW" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//' | tr -d '\r') + echo "fabric_modrinth_dependencies=$FABRIC_MODRINTH_DEPS_JSON" >> $GITHUB_OUTPUT + + # 读取 Forge 的 Modrinth 依赖配置 + FORGE_MODRINTH_DEPS_RAW=$(grep "^forge_modrinth_dependencies=" gradle.properties | cut -d'=' -f2- || echo "[]") + FORGE_MODRINTH_DEPS_JSON=$(echo "$FORGE_MODRINTH_DEPS_RAW" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//' | tr -d '\r') + echo "forge_modrinth_dependencies=$FORGE_MODRINTH_DEPS_JSON" >> $GITHUB_OUTPUT + + # 读取 Fabric 的 CurseForge 依赖配置 + FABRIC_CURSEFORGE_DEPS_RAW=$(grep "^fabric_curseforge_dependencies=" gradle.properties | cut -d'=' -f2- || echo "[]") + FABRIC_CURSEFORGE_DEPS_JSON=$(echo "$FABRIC_CURSEFORGE_DEPS_RAW" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//' | tr -d '\r') + echo "fabric_curseforge_dependencies=$FABRIC_CURSEFORGE_DEPS_JSON" >> $GITHUB_OUTPUT + + # 读取 Forge 的 CurseForge 依赖配置 + FORGE_CURSEFORGE_DEPS_RAW=$(grep "^forge_curseforge_dependencies=" gradle.properties | cut -d'=' -f2- || echo "[]") + FORGE_CURSEFORGE_DEPS_JSON=$(echo "$FORGE_CURSEFORGE_DEPS_RAW" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//' | tr -d '\r') + echo "forge_curseforge_dependencies=$FORGE_CURSEFORGE_DEPS_JSON" >> $GITHUB_OUTPUT - name: Generate CZ-compliant changelog id: generate_changelog @@ -139,6 +186,7 @@ jobs: ["👷 CI"]="^(ci)(\(.*\))?:" ["📦 依赖"]="^(chore|deps)(\(.*\))?:" ["⏪ 回退"]="^(revert)(\(.*\))?:" + ["🛠 合并"]="^Merge " ) # 获取所有提交 @@ -262,59 +310,127 @@ jobs: token: ${{ secrets.GITHUB_TOKEN }} allowUpdates: true removeArtifacts: true - # 新增:使用 mc-publish 发布到 Modrinth 和 CurseForge - - name: Publish to Modrinth & CurseForge + # Fabric 发布到 Modrinth 和 CurseForge + - name: Publish Fabric to Modrinth & CurseForge uses: Kir-Antipov/mc-publish@v3.3 - if: success() # 只有在之前的步骤都成功时才运行 - continue-on-error: true # 即使发布失败也不中断整个工作流 + if: success() + continue-on-error: true with: - # 文件路径 - 指向所有构建的jar文件 + # 文件匹配规则 - 只匹配 fabric 的文件 files: | - dist/*.jar + dist/${{ steps.version_info.outputs.mod_id }}-fabric-${{ steps.version_info.outputs.minecraft_version }}-${{ steps.version_info.outputs.version }}.jar + dist/${{ steps.version_info.outputs.mod_id }}-fabric-${{ steps.version_info.outputs.minecraft_version }}-${{ steps.version_info.outputs.version }}-javadoc.jar + dist/${{ steps.version_info.outputs.mod_id }}-fabric-${{ steps.version_info.outputs.minecraft_version }}-${{ steps.version_info.outputs.version }}-sources.jar # 版本信息 - name: "${{ steps.version_info.outputs.mod_name }} ${{ steps.version_info.outputs.version }}" - version: ${{ steps.version_info.outputs.version }} + name: "${{ steps.version_info.outputs.mod_name }} ${{ steps.version_info.outputs.version }} (Fabric/${{ steps.version_info.outputs.minecraft_version }})" + version: ${{ steps.version_info.outputs.version }}-fabric - # 更新日志 - 使用上面生成的changelog + # 更新日志 changelog: ${{ steps.generate_changelog.outputs.changelog }} - # 版本类型:根据标签判断是否为预发布版本 - # 如果标签包含 alpha/beta/rc 则视为预发布 + # 版本类型 version-type: ${{ contains(github.ref_name, 'alpha') || contains(github.ref_name, 'beta') || contains(github.ref_name, 'rc') && 'beta' || 'release' }} - # 支持的加载器 - loaders: | - forge - fabric + # 只指定 Fabric 加载器 + loaders: fabric - # 支持的Minecraft版本 + # 游戏版本 game-versions: | ${{ steps.version_info.outputs.minecraft_version }} # Java版本 - java: | - 21 - 17 + java: ${{ fromJSON(steps.version_info.outputs.java_versions) }} # Modrinth 配置 - modrinth-id: n65Vs1Vk + modrinth-id: ${{ steps.version_info.outputs.modrinth_id }} modrinth-token: ${{ secrets.MODRINTH_TOKEN }} modrinth-featured: true modrinth-unfeature-mode: any + modrinth-dependencies: ${{ steps.version_info.outputs.modrinth_dependencies }} + # CurseForge 配置 + curseforge-id: ${{ steps.version_info.outputs.curseforge_id }} + curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }} + curseforge-dependencies: ${{ steps.version_info.outputs.curseforge_dependencies }} + + # 明确指定主文件和附加文件 + files-primary: dist/${{ steps.version_info.outputs.mod_id }}-fabric-${{ steps.version_info.outputs.minecraft_version }}-${{ steps.version_info.outputs.version }}.jar + files-secondary: | + dist/${{ steps.version_info.outputs.mod_id }}-fabric-${{ steps.version_info.outputs.minecraft_version }}-${{ steps.version_info.outputs.version }}-javadoc.jar + dist/${{ steps.version_info.outputs.mod_id }}-fabric-${{ steps.version_info.outputs.minecraft_version }}-${{ steps.version_info.outputs.version }}-sources.jar + + # 失败处理 + fail-mode: skip + + # Forge 发布到 Modrinth 和 CurseForge + - name: Publish Forge to Modrinth & CurseForge + uses: Kir-Antipov/mc-publish@v3.3 + if: success() + continue-on-error: true + with: + # 文件匹配规则 - 只匹配 forge 的文件 + files: | + dist/${{ steps.version_info.outputs.mod_id }}-forge-${{ steps.version_info.outputs.minecraft_version }}-${{ steps.version_info.outputs.version }}.jar + dist/${{ steps.version_info.outputs.mod_id }}-forge-${{ steps.version_info.outputs.minecraft_version }}-${{ steps.version_info.outputs.version }}-javadoc.jar + dist/${{ steps.version_info.outputs.mod_id }}-forge-${{ steps.version_info.outputs.minecraft_version }}-${{ steps.version_info.outputs.version }}-sources.jar + + # 版本信息 + name: "${{ steps.version_info.outputs.mod_name }} ${{ steps.version_info.outputs.version }} (Forge/${{ steps.version_info.outputs.minecraft_version }})" + version: ${{ steps.version_info.outputs.version }}-forge + + # 更新日志 + changelog: ${{ steps.generate_changelog.outputs.changelog }} + + # 版本类型 + version-type: ${{ contains(github.ref_name, 'alpha') || contains(github.ref_name, 'beta') || contains(github.ref_name, 'rc') && 'beta' || 'release' }} + + # 只指定 Forge 加载器 + loaders: forge + + # 游戏版本 + game-versions: | + ${{ steps.version_info.outputs.minecraft_version }} + + # Java版本 + java: ${{ fromJSON(steps.version_info.outputs.java_versions) }} + + # Modrinth 配置 + modrinth-id: ${{ steps.version_info.outputs.modrinth_id }} + modrinth-token: ${{ secrets.MODRINTH_TOKEN }} + modrinth-featured: true + modrinth-unfeature-mode: any + modrinth-dependencies: ${{ steps.version_info.outputs.modrinth_dependencies }} # CurseForge 配置 - curseforge-id: 1445917 + curseforge-id: ${{ steps.version_info.outputs.curseforge_id }} curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }} + curseforge-dependencies: ${{ steps.version_info.outputs.curseforge_dependencies }} - # 依赖关系配置(可选) - # dependencies: | - # required | curseforge:123456 | https://www.curseforge.com/minecraft/mc-mods/example - # optional | modrinth:abcdefg + # 明确指定主文件和附加文件 + files-primary: dist/${{ steps.version_info.outputs.mod_id }}-forge-${{ steps.version_info.outputs.minecraft_version }}-${{ steps.version_info.outputs.version }}.jar + files-secondary: | + dist/${{ steps.version_info.outputs.mod_id }}-forge-${{ steps.version_info.outputs.minecraft_version }}-${{ steps.version_info.outputs.version }}-javadoc.jar + dist/${{ steps.version_info.outputs.mod_id }}-forge-${{ steps.version_info.outputs.minecraft_version }}-${{ steps.version_info.outputs.version }}-sources.jar - # 文件排除模式(可选) - # files-primary: "*" # 主文件 - # files-secondary: "*-sources.jar" # 额外文件 + # 失败处理 + fail-mode: skip - # 如果发布失败时的行为 - fail-mode: skip # 可以设置为: fail, skip, warn \ No newline at end of file + # 发布完成后列出结果 + - name: Summary + if: always() + run: | + echo "## 发布结果摘要" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "### GitHub Release" >> $GITHUB_STEP_SUMMARY + echo "- 标签: ${{ github.ref_name }}" >> $GITHUB_STEP_SUMMARY + echo "- URL: https://github.com/${{ github.repository }}/releases/tag/${{ github.ref_name }}" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "### Modrinth" >> $GITHUB_STEP_SUMMARY + echo "- 项目ID: ${{ steps.version_info.outputs.modrinth_id }}" >> $GITHUB_STEP_SUMMARY + echo "- Fabric版本: ${{ steps.version_info.outputs.version }}-fabric" >> $GITHUB_STEP_SUMMARY + echo "- Forge版本: ${{ steps.version_info.outputs.version }}-forge" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "### CurseForge" >> $GITHUB_STEP_SUMMARY + echo "- 项目ID: ${{ steps.version_info.outputs.curseforge_id }}" >> $GITHUB_STEP_SUMMARY + echo "- Fabric版本: ${{ steps.version_info.outputs.version }}-fabric" >> $GITHUB_STEP_SUMMARY + echo "- Forge版本: ${{ steps.version_info.outputs.version }}-forge" >> $GITHUB_STEP_SUMMARY \ No newline at end of file diff --git a/common/src/main/java/top/r3944realms/lib39/core/lang/EncryptedClassLoader.java b/common/src/main/java/top/r3944realms/lib39/core/lang/EncryptedClassLoader.java index 3a9805b..154c26e 100644 --- a/common/src/main/java/top/r3944realms/lib39/core/lang/EncryptedClassLoader.java +++ b/common/src/main/java/top/r3944realms/lib39/core/lang/EncryptedClassLoader.java @@ -13,7 +13,7 @@ import java.util.Map; */ public class EncryptedClassLoader extends ClassLoader { static { - System.loadLibrary("ClassEncrypt"); +// System.loadLibrary("ClassEncrypt"); } private native byte[] decryptClass(byte[] encryptedData, String key); diff --git a/fabric/src/main/java/top/r3944realms/lib39/api/callback/AnvilUpdateCallback.java b/fabric/src/main/java/top/r3944realms/lib39/api/callback/AnvilUpdateCallback.java index 45a07f3..75b171c 100644 --- a/fabric/src/main/java/top/r3944realms/lib39/api/callback/AnvilUpdateCallback.java +++ b/fabric/src/main/java/top/r3944realms/lib39/api/callback/AnvilUpdateCallback.java @@ -78,7 +78,6 @@ public class AnvilUpdateCallback { /** * The constant EVENT. */ -// 创建事件实例 public static final Event EVENT = EventFactory.createArrayBacked( AnvilUpdate.class, (listeners) -> (left, right, outputSlot, name, baseCost, player) -> { diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 05c5dc7..0803a17 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -37,6 +37,13 @@ }, "suggests": { "another-mod": "*" + }, + "custom": { + "mc-publish": { + "dependencies": [ + "fabric-api(required)" + ] + } } } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 782aa24..fd53cef 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ # Every field you add must be added to buildSrc/src/main/groovy/multiloader-common.gradle expandProps map. # Project -version=0.5.1 +version=0.5.1-beta group=top.r3944realms.lib39 java_version=17 @@ -31,3 +31,13 @@ forge_loader_version_range=[47,) # Gradle org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false + +modrinth_id=n65Vs1Vk +curseforge_id=1445917 + +java_versions=["17","21"] + +fabric_modrinth_dependencies= +forge_modrinth_dependencies= +fabric_curseforge_dependencies= +forge_curseforge_dependencies=