ForgeRenderEvents
public
Jul 26, 2024
Never
26
1 package net.hero61.projectspartan.client.renderer; 2 3 import com.mojang.blaze3d.vertex.PoseStack; 4 import com.mojang.blaze3d.vertex.VertexConsumer; 5 import net.hero61.projectspartan.ProjectSpartan; 6 import net.hero61.projectspartan.item.armor.SpartanArmorItem; 7 import net.minecraft.client.Minecraft; 8 import net.minecraft.client.model.HumanoidModel; 9 import net.minecraft.client.model.geom.ModelPart; 10 import net.minecraft.client.renderer.LightTexture; 11 import net.minecraft.client.renderer.MultiBufferSource; 12 import net.minecraft.client.renderer.RenderType; 13 import net.minecraft.client.renderer.entity.LivingEntityRenderer; 14 import net.minecraft.client.resources.DefaultPlayerSkin; 15 import net.minecraft.resources.ResourceLocation; 16 import net.minecraft.world.entity.EquipmentSlot; 17 import net.minecraft.world.entity.player.Player; 18 import net.minecraftforge.api.distmarker.Dist; 19 import net.minecraftforge.client.event.RenderArmEvent; 20 import net.minecraftforge.common.MinecraftForge; 21 import net.minecraftforge.eventbus.api.IEventBus; 22 import net.minecraftforge.eventbus.api.SubscribeEvent; 23 import net.minecraftforge.fml.common.Mod; 24 import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; 25 26 @Mod.EventBusSubscriber(value = Dist.CLIENT, modid = ProjectSpartan.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) 27 public class ForgeRenderEvents { 28 29 @SubscribeEvent 30 public static void onClientSetup(FMLClientSetupEvent event) { 31 IEventBus eventBus = MinecraftForge.EVENT_BUS; // Use the correct event bus for client-side events 32 eventBus.addListener(ForgeRenderEvents::renderPlayerArm); 33 } 34 35 @SubscribeEvent 36 public static void renderPlayerArm(RenderArmEvent event) { 37 Player player = event.getPlayer(); 38 39 if (player != null && player.getItemBySlot(EquipmentSlot.CHEST).getItem() instanceof SpartanArmorItem) { 40 renderSpartanArm(event, player); 41 } 42 } 43 44 private static void renderSpartanArm(RenderArmEvent event, Player player) { 45 PoseStack matrixStack = event.getPoseStack(); 46 MultiBufferSource bufferSource = event.getMultiBufferSource(); 47 48 LivingEntityRenderer<?, ?> renderer = (LivingEntityRenderer<?, ?>) 49 Minecraft.getInstance().getEntityRenderDispatcher().getRenderer(player); 50 51 if (renderer.getModel() instanceof HumanoidModel<?>) { 52 HumanoidModel<?> humanoidModel = (HumanoidModel<?>) renderer.getModel(); 53 54 matrixStack.pushPose(); 55 matrixStack.translate(0.0, 0.0, 0.0); // Adjust translation as needed 56 57 ResourceLocation skinTexture = DefaultPlayerSkin.getDefaultSkin(player.getUUID()); 58 59 VertexConsumer vertexConsumer = bufferSource.getBuffer(RenderType.entityTranslucent(skinTexture)); 60 61 ModelPart rightArm = humanoidModel.rightArm; 62 rightArm.render(matrixStack, vertexConsumer, LightTexture.FULL_BRIGHT, 63 LivingEntityRenderer.getOverlayCoords(player, 0.0F), 64 1.0F, 1.0F, 1.0F, 1.0F); 65 66 matrixStack.popPose(); 67 } 68 } 69 }