From 5524f8c7f17245e886d5a297db082bfc2b4e992a Mon Sep 17 00:00:00 2001 From: Sollace Date: Mon, 6 May 2024 21:09:35 +0100 Subject: [PATCH] Tools and weapons now keep their orientation when being held by a unicorn --- .../java/com/minelittlepony/api/config/PonyConfig.java | 10 +++++++++- .../client/model/entity/race/UnicornModel.java | 7 ++++++- .../client/render/LevitatingItemRenderer.java | 9 ++++++--- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/minelittlepony/api/config/PonyConfig.java b/src/main/java/com/minelittlepony/api/config/PonyConfig.java index 848d0406..e70ed9a0 100644 --- a/src/main/java/com/minelittlepony/api/config/PonyConfig.java +++ b/src/main/java/com/minelittlepony/api/config/PonyConfig.java @@ -1,13 +1,16 @@ package com.minelittlepony.api.config; +import net.minecraft.util.Identifier; import net.minecraft.util.math.MathHelper; +import com.google.gson.GsonBuilder; import com.minelittlepony.api.pony.meta.*; import com.minelittlepony.common.client.gui.VisibilityMode; import com.minelittlepony.common.util.GamePaths; import com.minelittlepony.common.util.settings.*; import java.nio.file.Path; +import java.util.HashSet; /** * Storage container for MineLP client settings. @@ -85,8 +88,13 @@ public class PonyConfig extends Config { .addComment("ON - always show") .addComment("OFF - never show"); + public final Setting> forwardHoldingItems = value("customisation", "forwardHoldingItems", HashSet::new, Identifier.class) + .addComment("Contains a list of item ids that should preserve orientation") + .addComment("when held in a unicorn's magical aura in first person"); + public PonyConfig(Path path) { - super(HEIRARCHICAL_JSON_ADAPTER, path); + super(new HeirarchicalJsonConfigAdapter(new GsonBuilder() + .registerTypeAdapter(Identifier.class, new ToStringAdapter<>(Identifier::toString, Identifier::new))), path); instance = this; } diff --git a/src/main/java/com/minelittlepony/client/model/entity/race/UnicornModel.java b/src/main/java/com/minelittlepony/client/model/entity/race/UnicornModel.java index f67cfe83..29bc4a21 100644 --- a/src/main/java/com/minelittlepony/client/model/entity/race/UnicornModel.java +++ b/src/main/java/com/minelittlepony/client/model/entity/race/UnicornModel.java @@ -4,6 +4,7 @@ import com.minelittlepony.api.config.PonyConfig; import com.minelittlepony.api.model.*; import com.minelittlepony.api.pony.meta.Size; import com.minelittlepony.api.pony.meta.SizePreset; +import com.minelittlepony.client.MineLittlePony; import com.minelittlepony.client.model.part.UnicornHorn; import com.minelittlepony.client.util.render.RenderList; import com.minelittlepony.mson.api.ModelView; @@ -11,6 +12,7 @@ import com.minelittlepony.mson.api.ModelView; import net.minecraft.client.model.ModelPart; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.LivingEntity; +import net.minecraft.registry.Registries; import net.minecraft.util.*; /** @@ -89,8 +91,11 @@ public class UnicornModel extends EarthPonyModel impl matrices.translate(0.4F - (0.3F * left), -0.675F, -0.3F); UseAction action = getAttributes().heldStack.getUseAction(); + boolean shouldAimItem = + (action == UseAction.SPYGLASS || action == UseAction.BOW) && getAttributes().itemUseTime > 0 + || PonyConfig.getInstance().forwardHoldingItems.get().contains(Registries.ITEM.getId(getAttributes().heldStack.getItem())); - if ((action == UseAction.SPYGLASS || action == UseAction.BOW) && getAttributes().itemUseTime > 0) { + if (shouldAimItem) { Arm main = getAttributes().mainArm; if (getAttributes().activeHand == Hand.OFF_HAND) { main = main.getOpposite(); diff --git a/src/main/java/com/minelittlepony/client/render/LevitatingItemRenderer.java b/src/main/java/com/minelittlepony/client/render/LevitatingItemRenderer.java index 7cb611e3..0fa8204f 100644 --- a/src/main/java/com/minelittlepony/client/render/LevitatingItemRenderer.java +++ b/src/main/java/com/minelittlepony/client/render/LevitatingItemRenderer.java @@ -14,8 +14,8 @@ import net.minecraft.client.render.model.json.ModelTransformationMode; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.component.DataComponentTypes; import net.minecraft.entity.LivingEntity; -import net.minecraft.item.CrossbowItem; -import net.minecraft.item.ItemStack; +import net.minecraft.item.*; +import net.minecraft.registry.Registries; import net.minecraft.screen.PlayerScreenHandler; import net.minecraft.util.UseAction; import net.minecraft.util.math.RotationAxis; @@ -98,7 +98,10 @@ public class LevitatingItemRenderer { boolean handHeldTool = action == UseAction.BOW || action == UseAction.CROSSBOW - || action == UseAction.BLOCK; + || action == UseAction.BLOCK + || item.getItem() instanceof ToolItem + || item.getItem() instanceof RangedWeaponItem + || PonyConfig.getInstance().forwardHoldingItems.get().contains(Registries.ITEM.getId(item.getItem())); float distanceChange = handHeldTool ? -0.3F : -0.6F;