From f8e9b2c478906bfb6f495c9d52abd5121b57497a Mon Sep 17 00:00:00 2001 From: pilloewstin <306560024+pilloewstin@users.noreply.github.com> Date: Sat, 29 Aug 2026 01:52:17 -0400 Subject: [PATCH 1/3] feat: add optional leg moving animation for models --- .../simpleskinswapper/gui/SkinRenderer.kt | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/fr/raconteur/simpleskinswapper/gui/SkinRenderer.kt b/src/main/kotlin/fr/raconteur/simpleskinswapper/gui/SkinRenderer.kt index 6e80e19..3ed0508 100644 --- a/src/main/kotlin/fr/raconteur/simpleskinswapper/gui/SkinRenderer.kt +++ b/src/main/kotlin/fr/raconteur/simpleskinswapper/gui/SkinRenderer.kt @@ -4,7 +4,6 @@ import fr.raconteur.simpleskinswapper.SimpleSkinSwapperClient import net.minecraft.client.gui.GuiGraphicsExtractor import net.minecraft.client.renderer.entity.state.AvatarRenderState import net.minecraft.client.renderer.state.gui.pip.GuiEntityRenderState -import net.minecraft.util.Mth import net.minecraft.world.entity.Pose import net.minecraft.world.entity.player.PlayerSkin import org.joml.Quaternionf @@ -103,7 +102,10 @@ object SkinRenderer { context.disableScissor() } - internal fun buildRenderState(skin: PlayerSkin): AvatarRenderState { + internal fun buildRenderState( + skin: PlayerSkin, + enableMovingLegs: Boolean = fr.raconteur.simpleskinswapper.config.SimpleSkinSwapperConfig.get().enableMovingLegs, + totalTickDelta: Float = SimpleSkinSwapperClient.TOTAL_TICK_DELTA): AvatarRenderState { val s = AvatarRenderState() s.boundingBoxWidth = 0.6F @@ -111,7 +113,7 @@ object SkinRenderer { s.eyeHeight = 1.62F s.scale = 1.0F s.ageScale = 1.0F - s.ageInTicks = SimpleSkinSwapperClient.TOTAL_TICK_DELTA + s.ageInTicks = totalTickDelta s.id = 0 s.pose = Pose.STANDING @@ -119,9 +121,13 @@ object SkinRenderer { s.yRot = 0.0F s.xRot = 0.0F - val t = SimpleSkinSwapperClient.TOTAL_TICK_DELTA * 0.067F - s.walkAnimationPos = Mth.sin(t.toDouble()).toFloat() * 0.05F - s.walkAnimationSpeed = 0.1F + // How fast should the legs swing? + val progressFactor = 0.12F + // How far should the legs swing? + val animationSpeed = 0.20F + s.walkAnimationPos = if (enableMovingLegs) totalTickDelta * progressFactor else 0.0F + s.walkAnimationSpeed = if (enableMovingLegs) animationSpeed else 0.0F + //? if <26.3 s.attackTime = 0.0F s.swimAmount = 0.0F From 29f87f7df873d62e7b77896ab1174365a260c44a Mon Sep 17 00:00:00 2001 From: pilloewstin <306560024+pilloewstin@users.noreply.github.com> Date: Sat, 29 Aug 2026 01:52:56 -0400 Subject: [PATCH 2/3] feat: add config option for leg moving animation --- .../config/SimpleSkinSwapperConfig.kt | 3 + .../gui/config/YaclConfigScreen.kt | 62 +++++++++++++------ 2 files changed, 46 insertions(+), 19 deletions(-) diff --git a/src/main/kotlin/fr/raconteur/simpleskinswapper/config/SimpleSkinSwapperConfig.kt b/src/main/kotlin/fr/raconteur/simpleskinswapper/config/SimpleSkinSwapperConfig.kt index 71aeda8..e42e732 100644 --- a/src/main/kotlin/fr/raconteur/simpleskinswapper/config/SimpleSkinSwapperConfig.kt +++ b/src/main/kotlin/fr/raconteur/simpleskinswapper/config/SimpleSkinSwapperConfig.kt @@ -26,6 +26,9 @@ class SimpleSkinSwapperConfig { @JvmField var pauseMenuButtonSide: ButtonSide? = ButtonSide.RIGHT + @JvmField + var enableMovingLegs: Boolean = true + /** Non-null accessor for callers (e.g. Java mixins): defaults to RIGHT. */ fun titleScreenSide(): ButtonSide = titleScreenButtonSide ?: ButtonSide.RIGHT diff --git a/src/main/kotlin/fr/raconteur/simpleskinswapper/gui/config/YaclConfigScreen.kt b/src/main/kotlin/fr/raconteur/simpleskinswapper/gui/config/YaclConfigScreen.kt index 0cc40c0..3e5e318 100644 --- a/src/main/kotlin/fr/raconteur/simpleskinswapper/gui/config/YaclConfigScreen.kt +++ b/src/main/kotlin/fr/raconteur/simpleskinswapper/gui/config/YaclConfigScreen.kt @@ -4,8 +4,10 @@ import dev.isxander.yacl3.api.ConfigCategory import dev.isxander.yacl3.api.ListOption import dev.isxander.yacl3.api.Option import dev.isxander.yacl3.api.OptionDescription +import dev.isxander.yacl3.api.OptionGroup import dev.isxander.yacl3.api.YetAnotherConfigLib import dev.isxander.yacl3.api.controller.EnumControllerBuilder +import dev.isxander.yacl3.api.controller.TickBoxControllerBuilder import fr.raconteur.simpleskinswapper.config.ButtonSide import fr.raconteur.simpleskinswapper.config.ServerCommand import fr.raconteur.simpleskinswapper.config.SimpleSkinSwapperConfig @@ -27,6 +29,47 @@ object YaclConfigScreen { return YetAnotherConfigLib.createBuilder() .title(Component.translatable("simpleskinswapper.config.title")) + .category( + ConfigCategory.createBuilder() + .name(Component.translatable("simpleskinswapper.config.category.options")) + .group( + OptionGroup.createBuilder() + .name(Component.translatable("simpleskinswapper.config.group.menu_buttons")) + .option( + buttonSideOption( + "simpleskinswapper.config.title_screen_button_side", + { config.titleScreenSide() }, + { config.titleScreenButtonSide = it } + ) + ) + .option( + buttonSideOption( + "simpleskinswapper.config.pause_menu_button_side", + { config.pauseMenuSide() }, + { config.pauseMenuButtonSide = it } + ) + ) + .build() + ) + .group( + OptionGroup.createBuilder() + .name(Component.translatable("simpleskinswapper.config.group.player_models")) + .option( + Option.createBuilder() + .name(Component.translatable("simpleskinswapper.config.enable_moving_legs")) + .description(OptionDescription.of(Component.translatable("simpleskinswapper.config.enable_moving_legs.description"))) + .binding( + true, + { config.enableMovingLegs }, + { config.enableMovingLegs = it } + ) + .controller { option -> TickBoxControllerBuilder.create(option) } + .build() + ) + .build() + ) + .build() + ) .category( ConfigCategory.createBuilder() .name(Component.translatable("simpleskinswapper.config.category.servers")) @@ -49,25 +92,6 @@ object YaclConfigScreen { ) .build() ) - .category( - ConfigCategory.createBuilder() - .name(Component.translatable("simpleskinswapper.config.category.menu_buttons")) - .option( - buttonSideOption( - "simpleskinswapper.config.title_screen_button_side", - { config.titleScreenSide() }, - { config.titleScreenButtonSide = it } - ) - ) - .option( - buttonSideOption( - "simpleskinswapper.config.pause_menu_button_side", - { config.pauseMenuSide() }, - { config.pauseMenuButtonSide = it } - ) - ) - .build() - ) .save { config.applyServerCommandList(staged) SimpleSkinSwapperConfig.save() From 7697c3e800f1819aaeda3e5cd48f7634bec66911 Mon Sep 17 00:00:00 2001 From: pilloewstin <306560024+pilloewstin@users.noreply.github.com> Date: Sat, 29 Aug 2026 01:53:13 -0400 Subject: [PATCH 3/3] chore: add new config english translations --- src/main/resources/assets/simpleskinswapper/lang/en_us.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/resources/assets/simpleskinswapper/lang/en_us.json b/src/main/resources/assets/simpleskinswapper/lang/en_us.json index c98618e..e85a3c0 100644 --- a/src/main/resources/assets/simpleskinswapper/lang/en_us.json +++ b/src/main/resources/assets/simpleskinswapper/lang/en_us.json @@ -25,13 +25,17 @@ "simpleskinswapper.config.server_address.hint": "server address", "simpleskinswapper.config.server_command": "Server command", "simpleskinswapper.config.server_command.hint": "/command", - "simpleskinswapper.config.category.menu_buttons": "Menu buttons", + "simpleskinswapper.config.category.options": "Options", + "simpleskinswapper.config.group.menu_buttons": "Menu buttons", "simpleskinswapper.config.title_screen_button_side": "Title screen button side", "simpleskinswapper.config.title_screen_button_side.description": "Side of the Options/Quit row on which the skin preview button appears on the title screen.", "simpleskinswapper.config.pause_menu_button_side": "Pause menu button side", "simpleskinswapper.config.pause_menu_button_side.description": "Side of the Disconnect button on which the skin preview button appears in the pause menu.", "simpleskinswapper.config.button_side.left": "Left", "simpleskinswapper.config.button_side.right": "Right", + "simpleskinswapper.config.group.player_models": "Player models", + "simpleskinswapper.config.enable_moving_legs": "Enable moving legs", + "simpleskinswapper.config.enable_moving_legs.description": "Enables moving legs on the player models in the menus.", "simpleskinswapper.message.applying": "Applying skin...", "simpleskinswapper.message.success": "Skin applied successfully!",