build: 发布工作流更新
Some checks failed
Build and Release / build (push) Failing after 2h30m21s
Build and Release / release (push) Has been skipped

This commit is contained in:
叁玖领域 2026-03-18 20:55:17 +08:00
parent 9dbeb0732f
commit 04640d2b12
5 changed files with 165 additions and 33 deletions

View File

@ -97,6 +97,53 @@ jobs:
VERSION="${GITHUB_REF_NAME#v}" VERSION="${GITHUB_REF_NAME#v}"
echo "version=$VERSION" >> $GITHUB_OUTPUT echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "minecraft_version=$(grep "^minecraft_version=" gradle.properties | cut -d'=' -f2)" >> $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 - name: Generate CZ-compliant changelog
id: generate_changelog id: generate_changelog
@ -139,6 +186,7 @@ jobs:
["👷 CI"]="^(ci)(\(.*\))?:" ["👷 CI"]="^(ci)(\(.*\))?:"
["📦 依赖"]="^(chore|deps)(\(.*\))?:" ["📦 依赖"]="^(chore|deps)(\(.*\))?:"
["⏪ 回退"]="^(revert)(\(.*\))?:" ["⏪ 回退"]="^(revert)(\(.*\))?:"
["🛠 合并"]="^Merge "
) )
# 获取所有提交 # 获取所有提交
@ -262,59 +310,127 @@ jobs:
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
allowUpdates: true allowUpdates: true
removeArtifacts: true removeArtifacts: true
# 新增:使用 mc-publish 发布到 Modrinth 和 CurseForge # Fabric 发布到 Modrinth 和 CurseForge
- name: Publish to Modrinth & CurseForge - name: Publish Fabric to Modrinth & CurseForge
uses: Kir-Antipov/mc-publish@v3.3 uses: Kir-Antipov/mc-publish@v3.3
if: success() # 只有在之前的步骤都成功时才运行 if: success()
continue-on-error: true # 即使发布失败也不中断整个工作流 continue-on-error: true
with: with:
# 文件路径 - 指向所有构建的jar文件 # 文件匹配规则 - 只匹配 fabric 的文件
files: | 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 }}" 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 }} version: ${{ steps.version_info.outputs.version }}-fabric
# 更新日志 - 使用上面生成的changelog # 更新日志
changelog: ${{ steps.generate_changelog.outputs.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' }} version-type: ${{ contains(github.ref_name, 'alpha') || contains(github.ref_name, 'beta') || contains(github.ref_name, 'rc') && 'beta' || 'release' }}
# 支持的加载器 # 只指定 Fabric 加载器
loaders: | loaders: fabric
forge
fabric
# 支持的Minecraft版本 # 游戏版本
game-versions: | game-versions: |
${{ steps.version_info.outputs.minecraft_version }} ${{ steps.version_info.outputs.minecraft_version }}
# Java版本 # Java版本
java: | java: ${{ fromJSON(steps.version_info.outputs.java_versions) }}
21
17
# Modrinth 配置 # Modrinth 配置
modrinth-id: n65Vs1Vk modrinth-id: ${{ steps.version_info.outputs.modrinth_id }}
modrinth-token: ${{ secrets.MODRINTH_TOKEN }} modrinth-token: ${{ secrets.MODRINTH_TOKEN }}
modrinth-featured: true modrinth-featured: true
modrinth-unfeature-mode: any 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 配置
curseforge-id: 1445917 curseforge-id: ${{ steps.version_info.outputs.curseforge_id }}
curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }} curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }}
curseforge-dependencies: ${{ steps.version_info.outputs.curseforge_dependencies }}
# 依赖关系配置(可选) # 明确指定主文件和附加文件
# dependencies: | files-primary: dist/${{ steps.version_info.outputs.mod_id }}-forge-${{ steps.version_info.outputs.minecraft_version }}-${{ steps.version_info.outputs.version }}.jar
# required | curseforge:123456 | https://www.curseforge.com/minecraft/mc-mods/example files-secondary: |
# optional | modrinth:abcdefg 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: "*" # 主文件 fail-mode: skip
# files-secondary: "*-sources.jar" # 额外文件
# 如果发布失败时的行为 # 发布完成后列出结果
fail-mode: skip # 可以设置为: fail, skip, warn - 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

View File

@ -13,7 +13,7 @@ import java.util.Map;
*/ */
public class EncryptedClassLoader extends ClassLoader { public class EncryptedClassLoader extends ClassLoader {
static { static {
System.loadLibrary("ClassEncrypt"); // System.loadLibrary("ClassEncrypt");
} }
private native byte[] decryptClass(byte[] encryptedData, String key); private native byte[] decryptClass(byte[] encryptedData, String key);

View File

@ -78,7 +78,6 @@ public class AnvilUpdateCallback {
/** /**
* The constant EVENT. * The constant EVENT.
*/ */
// 创建事件实例
public static final Event<AnvilUpdate> EVENT = EventFactory.createArrayBacked( public static final Event<AnvilUpdate> EVENT = EventFactory.createArrayBacked(
AnvilUpdate.class, AnvilUpdate.class,
(listeners) -> (left, right, outputSlot, name, baseCost, player) -> { (listeners) -> (left, right, outputSlot, name, baseCost, player) -> {

View File

@ -37,6 +37,13 @@
}, },
"suggests": { "suggests": {
"another-mod": "*" "another-mod": "*"
},
"custom": {
"mc-publish": {
"dependencies": [
"fabric-api(required)"
]
}
} }
} }

View File

@ -3,7 +3,7 @@
# Every field you add must be added to buildSrc/src/main/groovy/multiloader-common.gradle expandProps map. # Every field you add must be added to buildSrc/src/main/groovy/multiloader-common.gradle expandProps map.
# Project # Project
version=0.5.1 version=0.5.1-beta
group=top.r3944realms.lib39 group=top.r3944realms.lib39
java_version=17 java_version=17
@ -31,3 +31,13 @@ forge_loader_version_range=[47,)
# Gradle # Gradle
org.gradle.jvmargs=-Xmx3G org.gradle.jvmargs=-Xmx3G
org.gradle.daemon=false 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=