From 058b0f3f272b3ca97fc1735b0b6aa1208bdea2b9 Mon Sep 17 00:00:00 2001 From: tartaric_acid Date: Wed, 30 Oct 2024 20:19:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20chair=20Condition=20?= =?UTF-8?q?=E5=8A=A8=E7=94=BB=20-=20=E4=BF=AE=E6=94=B9=E5=9B=BE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../animation/gecko/AnimationManager.java | 14 +++++ .../animation/gecko/AnimationRegister.java | 1 - .../gecko/condition/ConditionManager.java | 11 ++++ .../gecko/condition/ConditionalChair.java | 49 ++++++++++++++++++ .../client/resource/CustomPackLoader.java | 2 + .../textures/gui/maid_gui_side.png | Bin 5059 -> 5067 bytes 6 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/github/tartaricacid/touhoulittlemaid/client/animation/gecko/condition/ConditionalChair.java diff --git a/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/animation/gecko/AnimationManager.java b/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/animation/gecko/AnimationManager.java index f16ca1dd9..8bd4c5083 100644 --- a/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/animation/gecko/AnimationManager.java +++ b/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/animation/gecko/AnimationManager.java @@ -4,6 +4,7 @@ import com.github.tartaricacid.touhoulittlemaid.client.animation.gecko.condition.*; import com.github.tartaricacid.touhoulittlemaid.client.entity.GeckoMaidEntity; import com.github.tartaricacid.touhoulittlemaid.compat.tacz.TacCompat; +import com.github.tartaricacid.touhoulittlemaid.entity.item.EntityChair; import com.github.tartaricacid.touhoulittlemaid.geckolib3.core.PlayState; import com.github.tartaricacid.touhoulittlemaid.geckolib3.core.builder.AnimationBuilder; import com.github.tartaricacid.touhoulittlemaid.geckolib3.core.builder.ILoopType; @@ -281,6 +282,19 @@ public PlayState getVehicleAnimation(AnimationEvent> event) { return null; } ResourceLocation id = event.getAnimatableEntity().getAnimationFileLocation(); + + // 如果是坐垫 + if (vehicle instanceof EntityChair) { + ConditionalChair conditionalChair = ConditionManager.getChair(id); + if (conditionalChair != null) { + String name = conditionalChair.doTest(mob); + if (StringUtils.isNoneBlank(name)) { + return playAnimation(event, name, ILoopType.EDefaultLoopTypes.LOOP); + } + } + } + + // 其他情况 ConditionalVehicle vehicleCondition = ConditionManager.getVehicle(id); if (vehicleCondition != null) { String name = vehicleCondition.doTest(mob); diff --git a/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/animation/gecko/AnimationRegister.java b/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/animation/gecko/AnimationRegister.java index 069f5e0b6..62f2ded8e 100644 --- a/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/animation/gecko/AnimationRegister.java +++ b/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/animation/gecko/AnimationRegister.java @@ -16,7 +16,6 @@ public class AnimationRegister { public static void registerAnimationState() { register("death", ILoopType.EDefaultLoopTypes.PLAY_ONCE, Priority.HIGHEST, (maid, event) -> maid.asEntity().isDeadOrDying()); register("sleep", Priority.HIGHEST, (maid, event) -> maid.asEntity().getPose() == Pose.SLEEPING); - register("swim", Priority.HIGHEST, (maid, event) -> maid.asEntity().isSwimming()); register("gomoku", Priority.HIGH, (maid, event) -> sitInJoy(maid, Type.GOMOKU)); register("bookshelf", Priority.HIGH, (maid, event) -> sitInJoy(maid, Type.BOOKSHELF)); diff --git a/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/animation/gecko/condition/ConditionManager.java b/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/animation/gecko/condition/ConditionManager.java index c7e4e5030..a1ae2874b 100644 --- a/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/animation/gecko/condition/ConditionManager.java +++ b/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/animation/gecko/condition/ConditionManager.java @@ -17,6 +17,7 @@ public class ConditionManager { public static Map ARMOR = Maps.newHashMap(); public static Map VEHICLE = Maps.newHashMap(); public static Map PASSENGER = Maps.newHashMap(); + public static Map CHAIR = Maps.newHashMap(); public static void addTest(ResourceLocation id, String name) { SWING.computeIfAbsent(id, k -> new ConditionalSwing(InteractionHand.MAIN_HAND)).addTest(name); @@ -29,15 +30,21 @@ public static void addTest(ResourceLocation id, String name) { ARMOR.computeIfAbsent(id, k -> new ConditionArmor()).addTest(name); VEHICLE.computeIfAbsent(id, k -> new ConditionalVehicle()).addTest(name); PASSENGER.computeIfAbsent(id, k -> new ConditionalPassenger()).addTest(name); + CHAIR.computeIfAbsent(id, k -> new ConditionalChair()).addTest(name); } public static void clear() { SWING.clear(); + SWING_OFFHAND.clear(); USE_MAINHAND.clear(); USE_OFFHAND.clear(); HOLD_MAINHAND.clear(); HOLD_OFFHAND.clear(); + TAC.clear(); ARMOR.clear(); + VEHICLE.clear(); + PASSENGER.clear(); + CHAIR.clear(); } public static ConditionalSwing getSwingMainhand(ResourceLocation id) { @@ -79,4 +86,8 @@ public static ConditionalVehicle getVehicle(ResourceLocation id) { public static ConditionalPassenger getPassenger(ResourceLocation id) { return PASSENGER.get(id); } + + public static ConditionalChair getChair(ResourceLocation id) { + return CHAIR.get(id); + } } diff --git a/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/animation/gecko/condition/ConditionalChair.java b/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/animation/gecko/condition/ConditionalChair.java new file mode 100644 index 000000000..8c45e5f70 --- /dev/null +++ b/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/animation/gecko/condition/ConditionalChair.java @@ -0,0 +1,49 @@ +package com.github.tartaricacid.touhoulittlemaid.client.animation.gecko.condition; + +import com.github.tartaricacid.touhoulittlemaid.entity.item.EntityChair; +import com.google.common.collect.Lists; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.Mob; + +import java.util.List; + +public class ConditionalChair { + private static final String EMPTY = ""; + private final List idTest = Lists.newArrayList(); + private final String idPre; + + public ConditionalChair() { + this.idPre = "chair$"; + } + + public void addTest(String name) { + int preSize = this.idPre.length(); + if (name.length() <= preSize) { + return; + } + String substring = name.substring(preSize); + if (name.startsWith(idPre) && ResourceLocation.isValidResourceLocation(substring)) { + idTest.add(substring); + } + } + + public String doTest(Mob maid) { + Entity vehicle = maid.getVehicle(); + if (!(vehicle instanceof EntityChair chair)) { + return EMPTY; + } + return doIdTest(chair); + } + + private String doIdTest(EntityChair chair) { + if (idTest.isEmpty()) { + return EMPTY; + } + String modelId = chair.getModelId(); + if (idTest.contains(modelId)) { + return idPre + modelId; + } + return EMPTY; + } +} diff --git a/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/resource/CustomPackLoader.java b/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/resource/CustomPackLoader.java index 383228118..caf239279 100644 --- a/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/resource/CustomPackLoader.java +++ b/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/resource/CustomPackLoader.java @@ -2,6 +2,7 @@ import com.github.tartaricacid.touhoulittlemaid.TouhouLittleMaid; import com.github.tartaricacid.touhoulittlemaid.client.animation.CustomJsAnimationManger; +import com.github.tartaricacid.touhoulittlemaid.client.animation.gecko.condition.ConditionManager; import com.github.tartaricacid.touhoulittlemaid.client.gui.entity.cache.CacheIconManager; import com.github.tartaricacid.touhoulittlemaid.client.model.BedrockVersion; import com.github.tartaricacid.touhoulittlemaid.client.model.bedrock.BedrockModel; @@ -73,6 +74,7 @@ public class CustomPackLoader { public static void reloadPacks() { // 清除 CustomJsAnimationManger.clearAll(); + ConditionManager.clear(); MAID_MODELS.clearAll(); CHAIR_MODELS.clearAll(); TMP_REGISTER_TEXTURE.clear(); diff --git a/src/main/resources/assets/touhou_little_maid/textures/gui/maid_gui_side.png b/src/main/resources/assets/touhou_little_maid/textures/gui/maid_gui_side.png index 369b1b81edba2b179a9346f20d2daf474f2427e2..dc0f3b44d44e99473b215d077560173407111386 100644 GIT binary patch literal 5067 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 Ch>xuR literal 5059 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