[Fix] MixinArmorFeatureRenderer
stability improvements (#36)
This commit is contained in:
parent
9360da1518
commit
03773ccc3f
1 changed files with 26 additions and 24 deletions
|
@ -63,12 +63,12 @@ public abstract class MixinArmorFeatureRenderer extends RenderLayer {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Unique
|
@Unique
|
||||||
private LivingEntity storedEntity;
|
private LivingEntity be_storedEntity;
|
||||||
@Unique
|
@Unique
|
||||||
private EquipmentSlot storedSlot;
|
private EquipmentSlot be_storedSlot;
|
||||||
|
|
||||||
@Inject(method = "render", at = @At("HEAD"))
|
@Inject(method = "render", at = @At("HEAD"))
|
||||||
private void storeEntity(
|
private void be_storeEntity(
|
||||||
PoseStack matrixStack,
|
PoseStack matrixStack,
|
||||||
MultiBufferSource vertexConsumerProvider,
|
MultiBufferSource vertexConsumerProvider,
|
||||||
int i,
|
int i,
|
||||||
|
@ -82,11 +82,11 @@ public abstract class MixinArmorFeatureRenderer extends RenderLayer {
|
||||||
CallbackInfo ci
|
CallbackInfo ci
|
||||||
) {
|
) {
|
||||||
// We store the living entity wearing the armor before we render
|
// We store the living entity wearing the armor before we render
|
||||||
this.storedEntity = livingEntity;
|
this.be_storedEntity = livingEntity;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "renderArmorPiece", at = @At("HEAD"))
|
@Inject(method = "renderArmorPiece", at = @At("HEAD"))
|
||||||
private void storeSlot(
|
private void be_storeSlot(
|
||||||
PoseStack matrices,
|
PoseStack matrices,
|
||||||
MultiBufferSource vertexConsumers,
|
MultiBufferSource vertexConsumers,
|
||||||
LivingEntity livingEntity,
|
LivingEntity livingEntity,
|
||||||
|
@ -96,11 +96,11 @@ public abstract class MixinArmorFeatureRenderer extends RenderLayer {
|
||||||
CallbackInfo ci
|
CallbackInfo ci
|
||||||
) {
|
) {
|
||||||
// We store the current armor slot that is rendering before we render each armor piece
|
// We store the current armor slot that is rendering before we render each armor piece
|
||||||
this.storedSlot = slot;
|
this.be_storedSlot = slot;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "render", at = @At("RETURN"))
|
@Inject(method = "render", at = @At("RETURN"))
|
||||||
private void removeStored(
|
private void be_removeStored(
|
||||||
PoseStack matrixStack,
|
PoseStack matrixStack,
|
||||||
MultiBufferSource vertexConsumerProvider,
|
MultiBufferSource vertexConsumerProvider,
|
||||||
int i,
|
int i,
|
||||||
|
@ -114,29 +114,31 @@ public abstract class MixinArmorFeatureRenderer extends RenderLayer {
|
||||||
CallbackInfo ci
|
CallbackInfo ci
|
||||||
) {
|
) {
|
||||||
// We remove the stored data after we render
|
// We remove the stored data after we render
|
||||||
this.storedEntity = null;
|
this.be_storedEntity = null;
|
||||||
this.storedSlot = null;
|
this.be_storedSlot = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "getArmorModel", at = @At("RETURN"), cancellable = true)
|
@Inject(method = "getArmorModel", at = @At("RETURN"), cancellable = true)
|
||||||
private void selectArmorModel(EquipmentSlot slot, CallbackInfoReturnable<HumanoidModel<LivingEntity>> cir) {
|
private void be_selectArmorModel(EquipmentSlot slot, CallbackInfoReturnable<HumanoidModel<LivingEntity>> cir) {
|
||||||
ItemStack stack = storedEntity.getItemBySlot(slot);
|
if (be_storedEntity != null) {
|
||||||
|
ItemStack stack = be_storedEntity.getItemBySlot(slot);
|
||||||
|
|
||||||
HumanoidModel<LivingEntity> defaultModel = cir.getReturnValue();
|
HumanoidModel<LivingEntity> defaultModel = cir.getReturnValue();
|
||||||
HumanoidModel<LivingEntity> model = ArmorRenderingRegistry.getArmorModel(
|
HumanoidModel<LivingEntity> model = ArmorRenderingRegistry.getArmorModel(
|
||||||
storedEntity,
|
be_storedEntity,
|
||||||
stack,
|
stack,
|
||||||
slot,
|
slot,
|
||||||
defaultModel
|
defaultModel
|
||||||
);
|
);
|
||||||
|
|
||||||
if (model != defaultModel) {
|
if (model != defaultModel) {
|
||||||
cir.setReturnValue(model);
|
cir.setReturnValue(model);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "getArmorLocation", at = @At(value = "INVOKE", target = "Ljava/util/Map;computeIfAbsent(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;"), cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD)
|
@Inject(method = "getArmorLocation", at = @At(value = "INVOKE", target = "Ljava/util/Map;computeIfAbsent(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;"), cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD)
|
||||||
private void getArmorTexture(
|
private void be_getArmorTexture(
|
||||||
ArmorItem armorItem,
|
ArmorItem armorItem,
|
||||||
boolean secondLayer, /* @Nullable */
|
boolean secondLayer, /* @Nullable */
|
||||||
String suffix,
|
String suffix,
|
||||||
|
@ -144,9 +146,9 @@ public abstract class MixinArmorFeatureRenderer extends RenderLayer {
|
||||||
String vanillaIdentifier
|
String vanillaIdentifier
|
||||||
) {
|
) {
|
||||||
String texture = ArmorRenderingRegistry.getArmorTexture(
|
String texture = ArmorRenderingRegistry.getArmorTexture(
|
||||||
storedEntity,
|
be_storedEntity,
|
||||||
storedEntity.getItemBySlot(storedSlot),
|
be_storedEntity.getItemBySlot(be_storedSlot),
|
||||||
storedSlot,
|
be_storedSlot,
|
||||||
secondLayer,
|
secondLayer,
|
||||||
suffix,
|
suffix,
|
||||||
new ResourceLocation(vanillaIdentifier)
|
new ResourceLocation(vanillaIdentifier)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue