Skip to content

Commit

Permalink
reimport MixinHumanoidArmorLayer and convert to java
Browse files Browse the repository at this point in the history
  • Loading branch information
ttttdoy committed Jun 29, 2024
1 parent ca12b90 commit cafdb8c
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 0 deletions.
69 changes: 69 additions & 0 deletions src/main/java/breadmod/mixin/MixinHumanoidArmorLayer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package breadmod.mixin;

import breadmod.item.armor.BreadArmorItem;
import breadmod.util.StackColorKt;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.model.Model;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.entity.RenderLayerParent;
import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer;
import net.minecraft.client.renderer.entity.layers.RenderLayer;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.item.ArmorItem;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Invoker;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(HumanoidArmorLayer.class)
abstract class MixinHumanoidArmorLayer<T extends LivingEntity, M extends HumanoidModel<T>, A extends HumanoidModel<T>> extends RenderLayer<T, M> {
public MixinHumanoidArmorLayer(RenderLayerParent<T, M> pRenderer) {
super(pRenderer);
}

@Invoker("setPartVisibility")
abstract void iSetPartVisibility(A pModel, EquipmentSlot pSlot);
@Invoker("getArmorModelHook")
abstract Model iGetArmorModelHook(T entity, ItemStack itemStack, EquipmentSlot slot, A model);
@Invoker("renderGlint")
abstract void iRenderGlint(PoseStack pPoseStack, MultiBufferSource pBuffer, int pPackedLight, Model pModel);
@Invoker("renderModel")
abstract void iRenderModel(PoseStack pPoseStack, MultiBufferSource pBuffer, int pPackedLight, ArmorItem pArmorItem, Model pModel, boolean pWithGlint, float pRed, float pGreen, float pBlue, ResourceLocation armorResource);
@Invoker("getArmorResource")
abstract ResourceLocation iGetArmorResource(Entity entity, ItemStack stack, EquipmentSlot slot, String type);
@Invoker("usesInnerModel")
abstract boolean iUsesInnerModel(EquipmentSlot pSlot);

@Inject(method = "renderArmorPiece", at = @At("HEAD"), cancellable = true)
private void renderArmorPiece(PoseStack pPoseStack, MultiBufferSource pBuffer, T pLivingEntity, EquipmentSlot pSlot, int pPackedLight, A pModel, CallbackInfo callbackInfo) {
ItemStack itemStack = pLivingEntity.getItemBySlot(pSlot);
Item item = itemStack.getItem();
if(item instanceof BreadArmorItem && ((BreadArmorItem) item).getEquipmentSlot() == pSlot) {
this.getParentModel().copyPropertiesTo(pModel);
this.iSetPartVisibility(pModel, pSlot);
Model model = iGetArmorModelHook(pLivingEntity, itemStack, pSlot, pModel);
boolean flag = this.iUsesInnerModel(pSlot);

float[] components = StackColorKt.getColor(itemStack, BreadArmorItem.Companion.getBREAD_COLOR()).getRGBComponents(null);
this.iRenderModel(
pPoseStack, pBuffer, pPackedLight, (BreadArmorItem) item, model, flag, components[0], components[1], components[2],
this.iGetArmorResource(pLivingEntity, itemStack, pSlot, null)
);
this.iRenderModel(
pPoseStack, pBuffer, pPackedLight, (BreadArmorItem) item, model, flag, 1.0F, 1.0F, 1.0F,
this.iGetArmorResource(pLivingEntity, itemStack, pSlot, "overlay")
);

if(itemStack.hasFoil()) this.iRenderGlint(pPoseStack, pBuffer, pPackedLight, model);

callbackInfo.cancel();
}
}
}
1 change: 1 addition & 0 deletions src/main/resources/breadmod.mixin.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"accessors.IAccessorEntity"
],
"client": [
"MixinHumanoidArmorLayer",
"MixinItemModelShaper",
"accessors.IAccessorItemModelShaper"
],
Expand Down

0 comments on commit cafdb8c

Please sign in to comment.