Skip to content

Commit 20c22e6

Browse files
authored
[1.21.4] Fix armor property copying and tintable armor rendering (#1740)
1 parent f64d2c7 commit 20c22e6

File tree

3 files changed

+7
-25
lines changed

3 files changed

+7
-25
lines changed

patches/net/minecraft/client/renderer/entity/layers/EquipmentLayerRenderer.java.patch

+2-16
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44
int p_371309_,
55
@Nullable ResourceLocation p_371639_
66
) {
7-
+ p_371731_ = getArmorModelHook(p_371670_, p_387484_, p_371731_);
7+
+ net.neoforged.neoforge.client.extensions.common.IClientItemExtensions extensions = net.neoforged.neoforge.client.extensions.common.IClientItemExtensions.of(p_371670_);
8+
+ p_371731_ = extensions.getGenericArmorModel(p_371670_, p_387484_, p_371731_);
89
List<EquipmentClientInfo.Layer> list = this.equipmentAssets.get(p_387603_).getLayers(p_387484_);
910
if (!list.isEmpty()) {
1011
- int i = p_371670_.is(ItemTags.DYEABLE) ? DyedItemColor.getOrDefault(p_371670_, 0) : 0;
11-
+ net.neoforged.neoforge.client.extensions.common.IClientItemExtensions extensions = net.neoforged.neoforge.client.extensions.common.IClientItemExtensions.of(p_371670_);
1212
+ int i = extensions.getDefaultDyeColor(p_371670_);
1313
boolean flag = p_371670_.hasFoil();
1414

@@ -29,17 +29,3 @@
2929
}
3030

3131
ArmorTrim armortrim = p_371670_.get(DataComponents.TRIM);
32-
@@ -100,6 +_,13 @@
33-
} else {
34-
return -1;
35-
}
36-
+ }
37-
+
38-
+ /**
39-
+ * Hook to allow item-sensitive armor model. for HumanoidArmorLayer.
40-
+ */
41-
+ protected net.minecraft.client.model.Model getArmorModelHook(ItemStack itemStack, EquipmentClientInfo.LayerType layerType, Model model) {
42-
+ return net.neoforged.neoforge.client.ClientHooks.getArmorModel(itemStack, layerType, model);
43-
}
44-
45-
@OnlyIn(Dist.CLIENT)

src/main/java/net/neoforged/neoforge/client/ClientHooks.java

-5
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@
4949
import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent;
5050
import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipPositioner;
5151
import net.minecraft.client.model.HumanoidModel;
52-
import net.minecraft.client.model.Model;
5352
import net.minecraft.client.model.geom.ModelLayerLocation;
5453
import net.minecraft.client.model.geom.builders.LayerDefinition;
5554
import net.minecraft.client.multiplayer.ClientLevel;
@@ -299,10 +298,6 @@ public static void onBlockColorsInit(BlockColors blockColors) {
299298
ModLoader.postEvent(new RegisterColorHandlersEvent.Block(blockColors));
300299
}
301300

302-
public static Model getArmorModel(ItemStack itemStack, EquipmentClientInfo.LayerType layerType, Model _default) {
303-
return IClientItemExtensions.of(itemStack).getGenericArmorModel(itemStack, layerType, _default);
304-
}
305-
306301
/** Copies humanoid model properties from the original model to another, used for armor models */
307302
@SuppressWarnings("unchecked")
308303
public static <T extends HumanoidRenderState> void copyModelProperties(HumanoidModel<T> original, HumanoidModel<?> replacement) {

src/main/java/net/neoforged/neoforge/client/extensions/common/IClientItemExtensions.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import net.minecraft.core.component.DataComponents;
1616
import net.minecraft.resources.ResourceLocation;
1717
import net.minecraft.tags.ItemTags;
18-
import net.minecraft.util.ARGB;
1918
import net.minecraft.world.InteractionHand;
2019
import net.minecraft.world.entity.EquipmentSlot;
2120
import net.minecraft.world.entity.HumanoidArm;
@@ -25,6 +24,7 @@
2524
import net.minecraft.world.item.ItemStack;
2625
import net.minecraft.world.item.component.DyedItemColor;
2726
import net.neoforged.fml.LogicalSide;
27+
import net.neoforged.neoforge.client.ClientHooks;
2828
import net.neoforged.neoforge.client.IArmPoseTransformer;
2929
import org.jetbrains.annotations.Nullable;
3030

@@ -116,8 +116,9 @@ default Model getHumanoidArmorModel(ItemStack itemStack, EquipmentClientInfo.Lay
116116
default Model getGenericArmorModel(ItemStack itemStack, EquipmentClientInfo.LayerType layerType, Model original) {
117117
Model replacement = getHumanoidArmorModel(itemStack, layerType, original);
118118
if (replacement != original) {
119-
// FIXME: equipment rendering deals with a plain Model now
120-
//ClientHooks.copyModelProperties(original, replacement);
119+
if (original instanceof HumanoidModel<?> originalHumanoid && replacement instanceof HumanoidModel<?> replacementHumanoid) {
120+
ClientHooks.copyModelProperties(originalHumanoid, replacementHumanoid);
121+
}
121122
return replacement;
122123
}
123124
return original;
@@ -203,7 +204,7 @@ default int getArmorLayerTintColor(ItemStack stack, EquipmentClientInfo.Layer la
203204
* @return a default color for the layer, in ARGB format
204205
*/
205206
default int getDefaultDyeColor(ItemStack stack) {
206-
return stack.is(ItemTags.DYEABLE) ? ARGB.opaque(DyedItemColor.getOrDefault(stack, 0)) : 0;
207+
return stack.is(ItemTags.DYEABLE) ? DyedItemColor.getOrDefault(stack, 0) : 0;
207208
}
208209

209210
/**

0 commit comments

Comments
 (0)