From 6a14c7e76849b0ef22ff36e2876fe9c588b8311b Mon Sep 17 00:00:00 2001 From: LostInLinearPast <1283411677@qq.com> Date: Thu, 4 Dec 2025 19:44:07 +0800 Subject: [PATCH] version 0.1.2 --- gradle.properties | 2 +- .../animation/register/AnimationRegistry.java | 22 ++++++-- .../service/RawAnimationService.java | 2 +- .../example/animation/ModAnimation.java | 52 +++++++++---------- 4 files changed, 46 insertions(+), 32 deletions(-) diff --git a/gradle.properties b/gradle.properties index a3090cb..331514d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,7 +12,7 @@ mapping_version=2023.09.03-1.20.1 mod_id=sccore mod_name=SnowyCrescentCore mod_license=GNU AGPL 3.0 -mod_version=1.20.1-0.1.1.4 +mod_version=1.20.1-0.1.2 mod_group_id=com.linearpast mod_authors=LostInLinearPast mod_description=A lib about capability and player animator. diff --git a/src/main/java/com/linearpast/sccore/animation/register/AnimationRegistry.java b/src/main/java/com/linearpast/sccore/animation/register/AnimationRegistry.java index 39d55e8..1d7eb87 100644 --- a/src/main/java/com/linearpast/sccore/animation/register/AnimationRegistry.java +++ b/src/main/java/com/linearpast/sccore/animation/register/AnimationRegistry.java @@ -224,6 +224,7 @@ public class AnimationRegistry { public static boolean isAnimationRegistered = false; private static final Map animationsCache = new HashMap<>(); private static final Map layersCache = new HashMap<>(); + private static final Map modifierLayers = new HashMap<>(); public static void cacheAddAnimation(ResourceLocation location, GenericAnimationData animation) { animationsCache.put(location, animation); @@ -249,10 +250,14 @@ public class AnimationRegistry { } case LAYER_REGISTER -> { registerLayers(layersCache); - layersCache.forEach((key, value) -> - PlayerAnimationFactory.ANIMATION_DATA_FACTORY.registerFactory( - key, value, ClientCache::registerPlayerAnimation - ) + layersCache.forEach((key, value) -> PlayerAnimationFactory.ANIMATION_DATA_FACTORY.registerFactory( + key, value, player -> { + Optional optional = modifierLayers.keySet().stream().filter(key::equals).findFirst(); + if(optional.isPresent()) return modifierLayers.get(optional.get()); + IAnimation iAnimation = ClientCache.registerPlayerAnimation(player); + modifierLayers.put(key, iAnimation); + return iAnimation; + }) ); ClientLevel level = Minecraft.getInstance().level; if(level == null) { @@ -279,8 +284,17 @@ public class AnimationRegistry { ArrayList> oldArrayList = (ArrayList>) layersField.get(oldAnimationStack); ArrayList> newArrayList = (ArrayList>) layersField.get(newAnimationStack); ArrayList> result = new ArrayList<>(); + for (Pair integerIAnimationPair : oldArrayList) { + for (Pair iAnimationPair : List.copyOf(newArrayList)) { + if(Objects.equals(iAnimationPair.getLeft(), integerIAnimationPair.getLeft()) + && Objects.equals(iAnimationPair.getRight(), integerIAnimationPair.getRight())) { + newArrayList.remove(iAnimationPair); + } + } + } result.addAll(oldArrayList); result.addAll(newArrayList); + layersField.set(newAnimationStack, result); animationStackField.set(player, newAnimationStack); Field animationApplierField = playerClass.getDeclaredField("animationApplier"); diff --git a/src/main/java/com/linearpast/sccore/animation/service/RawAnimationService.java b/src/main/java/com/linearpast/sccore/animation/service/RawAnimationService.java index 34b1725..befa8f5 100644 --- a/src/main/java/com/linearpast/sccore/animation/service/RawAnimationService.java +++ b/src/main/java/com/linearpast/sccore/animation/service/RawAnimationService.java @@ -42,7 +42,7 @@ public class RawAnimationService implements IAnimationService