Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package dev.turtywurty.turtyissinking.client.renderers.blockentity;
- import com.mojang.authlib.GameProfile;
- import com.mojang.authlib.minecraft.MinecraftProfileTexture;
- import com.mojang.authlib.minecraft.MinecraftProfileTexture.Type;
- import com.mojang.blaze3d.vertex.PoseStack;
- import dev.turtywurty.turtyissinking.blockentities.PlayerBoneBlockEntity;
- import dev.turtywurty.turtyissinking.blocks.PlayerBoneBlock;
- import dev.turtywurty.turtyissinking.client.screens.BonesawScreen.PlayerBone;
- import net.minecraft.client.Minecraft;
- import net.minecraft.client.model.PlayerModel;
- import net.minecraft.client.model.geom.ModelPart;
- import net.minecraft.client.player.AbstractClientPlayer;
- import net.minecraft.client.renderer.MultiBufferSource;
- import net.minecraft.client.renderer.RenderType;
- import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
- import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
- import net.minecraft.client.renderer.entity.player.PlayerRenderer;
- import net.minecraft.client.renderer.texture.OverlayTexture;
- import net.minecraft.client.resources.DefaultPlayerSkin;
- import net.minecraft.core.UUIDUtil;
- import net.minecraft.resources.ResourceLocation;
- import org.jetbrains.annotations.NotNull;
- import java.util.Map;
- import java.util.UUID;
- public class PlayerBoneBERenderer implements BlockEntityRenderer<PlayerBoneBlockEntity> {
- public PlayerBoneBERenderer(BlockEntityRendererProvider.Context ignored) {
- }
- @Override
- public void render(PlayerBoneBlockEntity pBlockEntity, float pPartialTick, @NotNull PoseStack pPoseStack,
- @NotNull MultiBufferSource pBufferSource, int pPackedLight, int pPackedOverlay) {
- final var block = (PlayerBoneBlock) pBlockEntity.getBlockState().getBlock();
- final PlayerBone bone = block.getBone();
- if (bone == PlayerBone.HEAD)
- return;
- GameProfile profile = pBlockEntity.getGameProfile();
- if (profile == null) {
- profile = new GameProfile(UUID.randomUUID(), "Steve");
- }
- Map<Type, MinecraftProfileTexture> map = getSkinInformation(profile);
- final ResourceLocation texture = getSkinTexture(map, profile);
- final RenderType renderType = getRenderType(texture);
- String modelType = getModelType(profile, map);
- final PlayerRenderer renderer = getPlayerRenderer(modelType);
- if (renderer == null)
- return;
- final PlayerModel<AbstractClientPlayer> model = renderer.getModel();
- final ModelPart[] parts = bone.getParts(model);
- for (final ModelPart modelPart : parts) {
- pPoseStack.pushPose();
- modelPart.translateAndRotate(pPoseStack);
- pPoseStack.scale(1.0f, -1.0f, -1.0f);
- pPoseStack.translate(0.5, -0.75, -0.5);
- switch (bone) {
- case LEFT_ARM:
- pPoseStack.translate(-0.7, 0.0, 0.0);
- break;
- case RIGHT_ARM:
- pPoseStack.translate(0.7, 0.0, 0.0);
- break;
- case LEFT_LEG:
- pPoseStack.translate(-0.2375, 0.0, 0);
- break;
- case RIGHT_LEG:
- pPoseStack.translate(0.2375, 0.0, 0);
- break;
- }
- modelPart.render(
- pPoseStack,
- pBufferSource.getBuffer(renderType),
- pPackedLight,
- OverlayTexture.NO_OVERLAY);
- pPoseStack.popPose();
- }
- }
- private static Map<Type, MinecraftProfileTexture> getSkinInformation(GameProfile profile) {
- return Minecraft.getInstance()
- .getSkinManager()
- .getInsecureSkinInformation(profile);
- }
- private static ResourceLocation getSkinTexture(Map<Type, MinecraftProfileTexture> map, GameProfile profile) {
- if (map.containsKey(Type.SKIN)) {
- return Minecraft.getInstance()
- .getSkinManager()
- .registerTexture(map.get(Type.SKIN), Type.SKIN);
- } else {
- return DefaultPlayerSkin.getDefaultSkin(UUIDUtil.getOrCreatePlayerUUID(profile));
- }
- }
- private static RenderType getRenderType(ResourceLocation texture) {
- return RenderType.entityCutoutNoCull(texture);
- }
- private static String getModelType(GameProfile profile, Map<Type, MinecraftProfileTexture> map) {
- return profile == null ||
- map == null ||
- !map.containsKey(Type.SKIN) ?
- "default" :
- map.get(Type.SKIN).getMetadata("model");
- }
- private static PlayerRenderer getPlayerRenderer(String modelType) {
- return (PlayerRenderer)
- Minecraft.getInstance()
- .getEntityRenderDispatcher()
- .getSkinMap()
- .get(modelType);
- }
- }
Add Comment
Please, Sign In to add comment