diff --git a/src/main/java/net/fretux/knockedback/client/PlayerAnimationHandler.java b/src/main/java/net/fretux/knockedback/client/PlayerAnimationHandler.java index c7b966b..b25be40 100644 --- a/src/main/java/net/fretux/knockedback/client/PlayerAnimationHandler.java +++ b/src/main/java/net/fretux/knockedback/client/PlayerAnimationHandler.java @@ -2,6 +2,7 @@ package net.fretux.knockedback.client; import dev.kosmx.playerAnim.api.layered.IAnimation; import dev.kosmx.playerAnim.api.layered.ModifierLayer; +import dev.kosmx.playerAnim.core.player.KeyframeAnimationPlayer; import dev.kosmx.playerAnim.minecraftApi.PlayerAnimationAccess; import dev.kosmx.playerAnim.minecraftApi.PlayerAnimationRegistry; import net.fretux.knockedback.KnockedBack; @@ -12,13 +13,15 @@ import net.minecraftforge.event.TickEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; +import java.util.HashMap; +import java.util.Map; import java.util.UUID; @Mod.EventBusSubscriber(modid = KnockedBack.MOD_ID, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.FORGE) public class PlayerAnimationHandler { private static final ResourceLocation GRIP_ANIMATION_ID = new ResourceLocation(KnockedBack.MOD_ID, "animation.model.gripping"); - private static final java.util.Map> layers = new java.util.HashMap<>(); - private static final java.util.Map activeStates = new java.util.HashMap<>(); + private static final Map> layers = new HashMap<>(); + private static final Map activeStates = new HashMap<>(); @SubscribeEvent public static void onPlayerTick(TickEvent.PlayerTickEvent event) { @@ -29,15 +32,16 @@ public class PlayerAnimationHandler { boolean wasGripping = activeStates.getOrDefault(playerId, false); if (shouldGrip == wasGripping) return; activeStates.put(playerId, shouldGrip); - ModifierLayer layer = layers.get(playerId); - if (layer == null) { - layer = new ModifierLayer<>(); - layers.put(playerId, layer); - PlayerAnimationAccess.getPlayerAnimLayer(player).addAnimLayer(0, layer); - } + ModifierLayer layer = layers.computeIfAbsent(playerId, id -> { + ModifierLayer newLayer = new ModifierLayer<>(); + PlayerAnimationAccess.getPlayerAnimLayer(player).addAnimLayer(newLayer); + return newLayer; + }); if (shouldGrip) { - IAnimation animation = PlayerAnimationRegistry.getAnimation(GRIP_ANIMATION_ID); - layer.setAnimation(animation); + var animation = PlayerAnimationRegistry.getAnimation(GRIP_ANIMATION_ID); + if (animation != null) { + layer.setAnimation(new KeyframeAnimationPlayer(animation)); + } } else { layer.setAnimation(null); }