G

ForgeRenderEvents

public
Guest Jul 26, 2024 Never 26
Clone
Java ForgeRenderEvents 69 lines (56 loc) | 3.06 KB
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
}