Advertisement
Yurim64

RenderUtil

May 20th, 2021
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.51 KB | None | 0 0
  1. public class RenderUtil {
  2.  
  3.     public static IBakedModel getModel(ItemStack stack) {
  4.         return Minecraft.getInstance().getItemRenderer().getItemModelShaper().getItemModel(stack);
  5.     }
  6.  
  7.     public static void renderModel(ItemStack stack, ItemCameraTransforms.TransformType transformType, boolean leftHanded, MatrixStack matrixStack, IRenderTypeBuffer renderTypeBuffer, int lightTexture, int overlayTexture, IBakedModel model) {
  8.         if (!stack.isEmpty()) {
  9.             matrixStack.pushPose();
  10.             boolean isGui = transformType == ItemCameraTransforms.TransformType.GUI;
  11.             boolean tridentFlag = isGui || transformType == ItemCameraTransforms.TransformType.GROUND || transformType == ItemCameraTransforms.TransformType.FIXED;
  12.             if (stack.getItem() == Items.TRIDENT && tridentFlag) {
  13.                 model = Minecraft.getInstance().getModelManager().getModel(new ModelResourceLocation("minecraft:trident#inventory"));
  14.             }
  15.  
  16.             model = ForgeHooksClient.handleCameraTransforms(matrixStack, model, transformType, leftHanded);
  17.             matrixStack.translate(-0.5, -0.5, -0.5);
  18.             if (!model.isCustomRenderer() && (stack.getItem() != Items.TRIDENT || tridentFlag)) {
  19.                 RenderType renderType = RenderTypeLookup.getRenderType(stack, false); //TODO test what this flag does
  20.                 if (isGui && Objects.equals(renderType, Atlases.translucentItemSheet())) {
  21.                     renderType = Atlases.translucentItemSheet();
  22.                 }
  23.                 IVertexBuilder vertexBuilder = ItemRenderer.getFoilBuffer(renderTypeBuffer, renderType, true, stack.hasFoil());
  24.                 renderModel(model, stack, lightTexture, overlayTexture, matrixStack, vertexBuilder);
  25.             } else {
  26.                 stack.getItem().getItemStackTileEntityRenderer().renderByItem(stack, transformType, matrixStack, renderTypeBuffer, lightTexture, overlayTexture);
  27.             }
  28.  
  29.             matrixStack.popPose();
  30.         }
  31.     }
  32.  
  33.     private static void renderModel(IBakedModel model, ItemStack stack, int lightTexture, int overlayTexture, MatrixStack matrixStack, IVertexBuilder vertexBuilder) {
  34.         Random random = new Random();
  35.         for (Direction direction : Direction.values()) {
  36.             random.setSeed(42L);
  37.             renderQuads(matrixStack, vertexBuilder, model.getQuads(null, direction, random), stack, lightTexture, overlayTexture);
  38.         }
  39.         random.setSeed(42L);
  40.         renderQuads(matrixStack, vertexBuilder, model.getQuads(null, null, random), stack, lightTexture, overlayTexture);
  41.     }
  42.  
  43.     private static void renderQuads(MatrixStack matrixStack, IVertexBuilder vertexBuilder, List<BakedQuad> quads, ItemStack stack, int lightTexture, int overlayTexture) {
  44.         boolean useItemColor = !stack.isEmpty();
  45.         MatrixStack.Entry entry = matrixStack.last();
  46.         for (BakedQuad quad : quads) {
  47.             int tintColor = 0xFFFFFF;
  48.             if (quad.isTinted()) {
  49.                 if (useItemColor) {
  50.                     tintColor = Minecraft.getInstance().getItemColors().getColor(stack, quad.getTintIndex());
  51.                 } else {
  52.                     tintColor = -1;
  53.                 }
  54.             }
  55.             float red = (float) (tintColor >> 16 & 255) / 255.0F;
  56.             float green = (float) (tintColor >> 8 & 255) / 255.0F;
  57.             float blue = (float) (tintColor & 255) / 255.0F;
  58.             vertexBuilder.addVertexData(entry, quad, red, green, blue, lightTexture, overlayTexture, true);
  59.         }
  60.     }
  61.  
  62. }
  63.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement