Compare commits

..

9 Commits

Author SHA1 Message Date
67bbef432b feat: 支持自定义姿势 2026-05-17 10:51:49 +08:00
5fb2c614db build: 版本号更为正式版
Some checks failed
Build and Release / build (push) Failing after 34s
Build and Release / release (push) Has been skipped
2026-03-18 23:24:26 +08:00
c05c0bdfc4 build: 修改导致curseforge推送失败的json写法
Some checks failed
Build and Release / build (push) Failing after 34s
Build and Release / release (push) Has been skipped
2026-03-18 23:03:54 +08:00
5a1c2fdbc5 build: 修正CurseForge发布 2026-03-18 22:51:35 +08:00
c9b9e0eefe build: 工作流修正
Some checks failed
Build and Release / build (push) Failing after 1m33s
Build and Release / release (push) Has been skipped
2026-03-18 22:30:37 +08:00
f589cf27a2 build: 修复错误发布问题
Some checks failed
Build and Release / build (push) Failing after 33s
Build and Release / release (push) Has been skipped
2026-03-18 22:02:08 +08:00
35ceb69f0b build: 工作流脚本修复 2026-03-18 21:35:36 +08:00
dbae05691d build: 工作流
Some checks failed
Build and Release / build (push) Failing after 33s
Build and Release / release (push) Has been skipped
2026-03-18 21:19:01 +08:00
a435c3b272 build: 工作流修正 2026-03-18 21:15:24 +08:00
5 changed files with 377 additions and 65 deletions

View File

@ -83,7 +83,18 @@ jobs:
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Determine version type
id: version_type
run: |
if [[ "${{ github.ref_name }}" == *"alpha"* ]]; then
echo "type=alpha" >> $GITHUB_OUTPUT
elif [[ "${{ github.ref_name }}" == *"beta"* ]]; then
echo "type=beta" >> $GITHUB_OUTPUT
elif [[ "${{ github.ref_name }}" == *"rc"* ]]; then
echo "type=beta" >> $GITHUB_OUTPUT
else
echo "type=release" >> $GITHUB_OUTPUT
fi
- name: Download artifacts
uses: actions/download-artifact@v4
with:
@ -114,36 +125,52 @@ jobs:
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
MODRINTH_ID=$(grep "^modrinth_id=" gradle.properties | cut -d'=' -f2 || echo "")
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
CURSEFORGE_ID=$(grep "^curseforge_id=" gradle.properties | cut -d'=' -f2 || echo "")
echo "curseforge_id=$CURSEFORGE_ID" >> $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
# Java版本 - 使用简单格式不用JSON
JAVA_VERSIONS=$(grep "^java_versions=" gradle.properties | cut -d'=' -f2- || echo "21,17")
# 清理格式,移除无效字符
JAVA_VERSIONS=$(echo "$JAVA_VERSIONS" | sed 's/\[//g; s/\]//g; s/"//g; s/ //g; s/21a/21/g' | tr -d '\r')
echo "java_versions=$JAVA_VERSIONS" >> $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
# 读取发布控制布尔值(默认都为 true
PUBLISH_GITHUB=$(grep "^publish_github=" gradle.properties | cut -d'=' -f2 | tr '[:upper:]' '[:lower:]' | tr -d ' ' || echo "true")
if [ "$PUBLISH_GITHUB" = "true" ] || [ "$PUBLISH_GITHUB" = "1" ] || [ "$PUBLISH_GITHUB" = "yes" ]; then
echo "publish_github=true" >> $GITHUB_OUTPUT
else
echo "publish_github=false" >> $GITHUB_OUTPUT
fi
# 读取 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
PUBLISH_MODRINTH=$(grep "^publish_modrinth=" gradle.properties | cut -d'=' -f2 | tr '[:upper:]' '[:lower:]' | tr -d ' ' || echo "true")
if [ "$PUBLISH_MODRINTH" = "true" ] || [ "$PUBLISH_MODRINTH" = "1" ] || [ "$PUBLISH_MODRINTH" = "yes" ]; then
echo "publish_modrinth=true" >> $GITHUB_OUTPUT
else
echo "publish_modrinth=false" >> $GITHUB_OUTPUT
fi
# 读取 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
PUBLISH_CURSEFORGE=$(grep "^publish_curseforge=" gradle.properties | cut -d'=' -f2 | tr '[:upper:]' '[:lower:]' | tr -d ' ' || echo "true")
if [ "$PUBLISH_CURSEFORGE" = "true" ] || [ "$PUBLISH_CURSEFORGE" = "1" ] || [ "$PUBLISH_CURSEFORGE" = "yes" ]; then
echo "publish_curseforge=true" >> $GITHUB_OUTPUT
else
echo "publish_curseforge=false" >> $GITHUB_OUTPUT
fi
# 读取依赖配置 - 使用简单字符串不用JSON
FABRIC_MODRINTH_DEPS=$(grep "^fabric_modrinth_dependencies=" gradle.properties | cut -d'=' -f2- || echo "")
echo "fabric_modrinth_dependencies=$FABRIC_MODRINTH_DEPS" >> $GITHUB_OUTPUT
FORGE_MODRINTH_DEPS=$(grep "^forge_modrinth_dependencies=" gradle.properties | cut -d'=' -f2- || echo "")
echo "forge_modrinth_dependencies=$FORGE_MODRINTH_DEPS" >> $GITHUB_OUTPUT
FABRIC_CURSEFORGE_DEPS=$(grep "^fabric_curseforge_dependencies=" gradle.properties | cut -d'=' -f2- || echo "")
echo "fabric_curseforge_dependencies=$FABRIC_CURSEFORGE_DEPS" >> $GITHUB_OUTPUT
FORGE_CURSEFORGE_DEPS=$(grep "^forge_curseforge_dependencies=" gradle.properties | cut -d'=' -f2- || echo "")
echo "forge_curseforge_dependencies=$FORGE_CURSEFORGE_DEPS" >> $GITHUB_OUTPUT
- name: Generate CZ-compliant changelog
id: generate_changelog
@ -298,6 +325,7 @@ jobs:
echo "EOF" >> $GITHUB_OUTPUT
- name: Create Release
if: steps.version_info.outputs.publish_github == 'true'
uses: ncipollo/release-action@v1
with:
artifacts: |
@ -306,14 +334,14 @@ jobs:
name: "${{ steps.version_info.outputs.minecraft_version }} - ${{ github.ref_name }}"
body: ${{ steps.generate_changelog.outputs.changelog }}
draft: false
prerelease: false
prerelease: ${{ contains(github.ref_name, 'rc') || contains(github.ref_name, 'beta') || contains(github.ref_name, 'alpha') }}
token: ${{ secrets.GITHUB_TOKEN }}
allowUpdates: true
removeArtifacts: true
# Fabric 发布到 Modrinth 和 CurseForge
- name: Publish Fabric to Modrinth & CurseForge
uses: Kir-Antipov/mc-publish@v3.3
if: success()
if: success() && (steps.version_info.outputs.publish_modrinth == 'true' || steps.version_info.outputs.publish_curseforge == 'true')
continue-on-error: true
with:
# 文件匹配规则 - 只匹配 fabric 的文件
@ -323,14 +351,14 @@ jobs:
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 }} (Fabric/${{ steps.version_info.outputs.minecraft_version }})"
version: ${{ steps.version_info.outputs.version }}-fabric
name: ${{ steps.version_info.outputs.mod_name }} ${{ steps.version_info.outputs.version }} (Fabric/${{ steps.version_info.outputs.minecraft_version }})
version: "${{ steps.version_info.outputs.minecraft_version }}-fabric-${{ steps.version_info.outputs.version }}"
# 更新日志
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' }}
version-type: ${{ steps.version_type.outputs.type }}
# 只指定 Fabric 加载器
loaders: fabric
@ -340,24 +368,19 @@ jobs:
${{ steps.version_info.outputs.minecraft_version }}
# Java版本
java: ${{ fromJSON(steps.version_info.outputs.java_versions) }}
java: |
${{ 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 }}
modrinth-dependencies: ${{ steps.version_info.outputs.fabric_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
curseforge-dependencies: ${{ steps.version_info.outputs.fabric_curseforge_dependencies }}
# 失败处理
fail-mode: skip
@ -365,7 +388,7 @@ jobs:
# Forge 发布到 Modrinth 和 CurseForge
- name: Publish Forge to Modrinth & CurseForge
uses: Kir-Antipov/mc-publish@v3.3
if: success()
if: success() && (steps.version_info.outputs.publish_modrinth == 'true' || steps.version_info.outputs.publish_curseforge == 'true')
continue-on-error: true
with:
# 文件匹配规则 - 只匹配 forge 的文件
@ -375,14 +398,14 @@ jobs:
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
name: ${{ steps.version_info.outputs.mod_name }} ${{ steps.version_info.outputs.version }} (Forge/${{ steps.version_info.outputs.minecraft_version }})
version: "${{ steps.version_info.outputs.minecraft_version }}-forge-${{ steps.version_info.outputs.version }}"
# 更新日志
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' }}
version-type: ${{ steps.version_type.outputs.type }}
# 只指定 Forge 加载器
loaders: forge
@ -392,25 +415,20 @@ jobs:
${{ steps.version_info.outputs.minecraft_version }}
# Java版本
java: ${{ fromJSON(steps.version_info.outputs.java_versions) }}
java: |
${{ 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 }}
modrinth-dependencies: ${{ steps.version_info.outputs.forge_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 }}-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
curseforge-dependencies: ${{ steps.version_info.outputs.forge_curseforge_dependencies }}
# 失败处理
fail-mode: skip

View File

@ -9,6 +9,7 @@ import net.minecraft.client.model.geom.PartPose;
import net.minecraft.client.model.geom.builders.*;
import net.minecraft.client.renderer.RenderType;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import top.r3944realms.lib39.Lib39;
/**
@ -31,13 +32,56 @@ public class DollModel extends Model {
private final ModelPart rightArmSlim;
private final ModelPart leftArmSlim;
private final ModelPart leftLeg;
@Nullable
private IDollPose currentPose;
/**
* Gets current pose.
*
* @return the current pose
*/
@Nullable
public IDollPose getCurrentPose() {
return currentPose;
}
/**
* Sets doll pose.
*
* @param dollPose the doll pose
*/
public void setDollPose(@NotNull IDollPose dollPose) {
this.currentPose = dollPose;
this.head.loadPose(dollPose.getHeadPose());
this.body.loadPose(dollPose.getBodyPose());
this.rightArm.loadPose(dollPose.getRightArmPose());
this.leftArm.loadPose(dollPose.getLeftArmPose());
this.rightArmSlim.loadPose(dollPose.getRightArmPose());
this.leftArmSlim.loadPose(dollPose.getLeftArmPose());
this.rightLeg.loadPose(dollPose.getRightLegPose());
this.leftLeg.loadPose(dollPose.getLeftLegPose());
}
/**
* Reset pose.
*/
public void resetPose() {
this.currentPose = DollPoses.DEFAULT;
this.head.resetPose();
this.body.resetPose();
this.rightArm.resetPose();
this.leftArm.resetPose();
this.rightArmSlim.resetPose();
this.leftArmSlim.resetPose();
this.rightLeg.resetPose();
this.leftLeg.resetPose();
}
/**
* Instantiates a new Doll model.
*
* @param root the root
*/
public DollModel(ModelPart root) {
public DollModel(@NotNull ModelPart root) {
super(RenderType::entityTranslucent);
this.head = root.getChild("head");
this.body = root.getChild("body");
@ -54,21 +98,104 @@ public class DollModel extends Model {
*
* @return the layer definition
*/
public static LayerDefinition createBodyLayer() {
public static @NotNull LayerDefinition createBodyLayer() {
return createBodyLayer(DollPoses.DEFAULT);
}
private static @NotNull LayerDefinition createBodyLayer(@NotNull IDollPose dollPoses) {
MeshDefinition meshdefinition = new MeshDefinition();
PartDefinition partdefinition = meshdefinition.getRoot();
partdefinition.addOrReplaceChild("head", CubeListBuilder.create().texOffs(0, 0).addBox(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.0F)).texOffs(32, 0).addBox(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.5F)), PartPose.offset(0.0F, 9.0F, 0.0F));
partdefinition.addOrReplaceChild("body", CubeListBuilder.create().texOffs(16, 16).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.0F)).texOffs(16, 32).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.25F)), PartPose.offset(0.0F, 9.0F, 0.0F));
partdefinition.addOrReplaceChild("right_arm", CubeListBuilder.create().texOffs(40, 16).addBox(-3.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.0F)).texOffs(40, 32).addBox(-3.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(-5.0F, 11.0F, 0.0F, 0.0F, 0.0F, 0.3927F));
partdefinition.addOrReplaceChild("right_arm_slim", CubeListBuilder.create().texOffs(40, 16).addBox(-2.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, new CubeDeformation(0.0F)).texOffs(40, 32).addBox(-2.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(-5.0F, 11.0F, 0.0F, 0.0F, 0.0F, 0.3927F));
partdefinition.addOrReplaceChild("left_arm_slim", CubeListBuilder.create().texOffs(32, 48).addBox(-1.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, new CubeDeformation(0.0F)).texOffs(48, 48).addBox(-1.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(5.0F, 11.0F, 0.0F, 0.0F, 0.0F, -0.3927F));
partdefinition.addOrReplaceChild("left_arm", CubeListBuilder.create().texOffs(32, 48).addBox(-1.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.0F)).texOffs(48, 48).addBox(-1.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(5.0F, 11.0F, 0.0F, 0.0F, 0.0F, -0.3927F));
partdefinition.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(0, 16).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.0F)).texOffs(0, 32).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(-2.0F, 19.0F, -2.0F, -1.5708F, 0.3927F, 0.0F));
partdefinition.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(16, 48).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.0F)).texOffs(0, 48).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(2.0F, 19.0F, -2.0F, -1.5708F, -0.3927F, 0.0F));
partdefinition.addOrReplaceChild(
"head",
CubeListBuilder.create()
.texOffs(0, 0)
.addBox(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.0F))
.texOffs(32, 0)
.addBox(
-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F,
new CubeDeformation(0.5F)
), dollPoses.getHeadPose()
);
partdefinition.addOrReplaceChild(
"body",
CubeListBuilder.create()
.texOffs(16, 16)
.addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.0F))
.texOffs(16, 32)
.addBox(
-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F,
new CubeDeformation(0.25F)
), dollPoses.getBodyPose()
);
partdefinition.addOrReplaceChild(
"right_arm",
CubeListBuilder.create()
.texOffs(40, 16)
.addBox(-3.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.0F))
.texOffs(40, 32)
.addBox(
-3.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F,
new CubeDeformation(0.25F)
), dollPoses.getRightArmPose()
);
partdefinition.addOrReplaceChild(
"right_arm_slim",
CubeListBuilder.create()
.texOffs(40, 16)
.addBox(-2.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, new CubeDeformation(0.0F))
.texOffs(40, 32)
.addBox(-2.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F,
new CubeDeformation(0.25F)
), dollPoses.getRightArmPose()
);
partdefinition.addOrReplaceChild(
"left_arm_slim",
CubeListBuilder.create()
.texOffs(32, 48)
.addBox(-1.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, new CubeDeformation(0.0F))
.texOffs(48, 48)
.addBox(
-1.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F,
new CubeDeformation(0.25F)
), dollPoses.getLeftArmPose()
);
partdefinition.addOrReplaceChild(
"left_arm",
CubeListBuilder.create()
.texOffs(32, 48)
.addBox(-1.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.0F))
.texOffs(48, 48)
.addBox(
-1.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F,
new CubeDeformation(0.25F)
), dollPoses.getLeftArmPose()
);
partdefinition.addOrReplaceChild(
"right_leg",
CubeListBuilder.create()
.texOffs(0, 16)
.addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.0F))
.texOffs(0, 32)
.addBox(
-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.25F)
), dollPoses.getRightLegPose()
);
partdefinition.addOrReplaceChild(
"left_leg",
CubeListBuilder.create()
.texOffs(16, 48)
.addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.0F))
.texOffs(0, 48)
.addBox(
-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F,
new CubeDeformation(0.25F)
), dollPoses.getLeftLegPose()
);
return LayerDefinition.create(meshdefinition, 64, 64);
}
@Override
public void renderToBuffer(PoseStack poseStack, @NotNull VertexConsumer vertexConsumer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) {
poseStack.pushPose();

View File

@ -0,0 +1,93 @@
package top.r3944realms.lib39.client.model;
import net.minecraft.client.model.geom.PartPose;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.phys.Vec3;
import org.jetbrains.annotations.NotNull;
import top.r3944realms.lib39.Lib39;
/**
* The enum Doll poses.
*/
public enum DollPoses implements IDollPose{
/**
* Default doll poses.
*/
DEFAULT(
"default",
PartPose.offset(0.0F, 9.0F, 0.0F),
PartPose.offset(0.0F, 9.0F, 0.0F),
PartPose.offsetAndRotation(-5.0F, 11.0F, 0.0F, 0.0F, 0.0F, 0.3927F),
PartPose.offsetAndRotation(5.0F, 11.0F, 0.0F, 0.0F, 0.0F, -0.3927F),
PartPose.offsetAndRotation(-2.0F, 19.0F, -2.0F, -1.5708F, 0.3927F, 0.0F),
PartPose.offsetAndRotation(2.0F, 19.0F, -2.0F, -1.5708F, -0.3927F, 0.0F)
);
// 注册全局
private final ResourceLocation id;
private final Vec3 offset;
private final PartPose headPose;
private final PartPose bodyPose;
private final PartPose rightArmPose;
private final PartPose leftArmPose;
private final PartPose rightLegPose;
private final PartPose leftLegPose;
DollPoses(String name, PartPose headPose, PartPose bodyPose,
PartPose rightArmPose, PartPose leftArmPose,
PartPose rightLegPose, PartPose leftLegPose) {
this(name, Vec3.ZERO, headPose, bodyPose, rightArmPose, leftArmPose, rightLegPose, leftLegPose);
}
DollPoses(String name, Vec3 offset, PartPose headPose, PartPose bodyPose,
PartPose rightArmPose, PartPose leftArmPose,
PartPose rightLegPose, PartPose leftLegPose) {
this.id = Lib39.rl(name);
this.offset = offset;
this.headPose = headPose;
this.bodyPose = bodyPose;
this.rightArmPose = rightArmPose;
this.leftArmPose = leftArmPose;
this.rightLegPose = rightLegPose;
this.leftLegPose = leftLegPose;
}
@Override
public @NotNull ResourceLocation getId() {
return id;
}
@Override
public PartPose getHeadPose() {
return headPose;
}
@Override
public PartPose getBodyPose() {
return bodyPose;
}
@Override
public PartPose getRightArmPose() {
return rightArmPose;
}
@Override
public PartPose getLeftArmPose() {
return leftArmPose;
}
@Override
public PartPose getRightLegPose() {
return rightLegPose;
}
@Override
public PartPose getLeftLegPose() {
return leftLegPose;
}
@Override
public @NotNull Vec3 getTotalOffset() {
return offset;
}
}

View File

@ -0,0 +1,69 @@
package top.r3944realms.lib39.client.model;
import net.minecraft.client.model.geom.PartPose;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.phys.Vec3;
import org.jetbrains.annotations.NotNull;
/**
* The interface Doll pose.
*/
public interface IDollPose {
/**
* Gets id.
*
* @return the id
*/
@NotNull ResourceLocation getId();
/**
* Gets total offset.
*
* @return the total offset
*/
@NotNull default Vec3 getTotalOffset() {
return Vec3.ZERO;
}
/**
* Gets head pose.
*
* @return the head pose
*/
@NotNull PartPose getHeadPose();
/**
* Gets body pose.
*
* @return the body pose
*/
@NotNull PartPose getBodyPose();
/**
* Gets right arm pose.
*
* @return the right arm pose
*/
@NotNull PartPose getRightArmPose();
/**
* Gets left arm pose.
*
* @return the left arm pose
*/
@NotNull PartPose getLeftArmPose();
/**
* Gets right leg pose.
*
* @return the right leg pose
*/
@NotNull PartPose getRightLegPose();
/**
* Gets left leg pose.
*
* @return the left leg pose
*/
@NotNull PartPose getLeftLegPose();
}

View File

@ -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-beta
version=0.5.5
group=top.r3944realms.lib39
java_version=17
@ -32,10 +32,15 @@ forge_loader_version_range=[47,)
org.gradle.jvmargs=-Xmx3G
org.gradle.daemon=false
# Release
publish_github=true
publish_modrinth=true
publish_curseforge=true
modrinth_id=n65Vs1Vk
curseforge_id=1445917
java_versions=["17","21"]
java_versions=21 17
fabric_modrinth_dependencies=
forge_modrinth_dependencies=