Advertisement
avraal

Untitled

May 26th, 2024
590
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.50 KB | None | 0 0
  1. public class WizardChestRenderer implements BlockEntityRenderer<WizardChestBlockEntity> {
  2.  
  3.     public static final ModelLayerLocation LAYER_LOCATION = new ModelLayerLocation(new ResourceLocation(WizardsMod.MODID, "wizard_chest"), "main");
  4.     public static final ResourceLocation WIZARD_CHEST_RENDERER_ATLAS_TEXTURE = new ResourceLocation(WizardsMod.MODID, "entity/chest/wizard_chest");
  5.  
  6.     private final ModelPart lid;
  7.     private final ModelPart base;
  8.     private final ModelPart lock;
  9.     private final ModelPart decor;
  10.     private Material material;
  11.  
  12.  
  13.     public WizardChestRenderer(BlockEntityRendererProvider.Context pContext) {
  14.         material = new Material(Sheets.CHEST_SHEET, WIZARD_CHEST_RENDERER_ATLAS_TEXTURE);
  15.         ModelPart modelPart = pContext.bakeLayer(LAYER_LOCATION);
  16.         this.base = modelPart.getChild("base");
  17.         this.lid = modelPart.getChild("lid");
  18.         this.lock = modelPart.getChild("lock");
  19.         this.decor = modelPart.getChild("decor");
  20.     }
  21.  
  22.     @Override
  23.     public void render(WizardChestBlockEntity pBlockEntity, float pPartialTick, PoseStack pPoseStack, MultiBufferSource pBuffer, int pPackedLight, int pPackedOverlay) {
  24.         Level world = pBlockEntity.getLevel();
  25.         boolean hasWorld = (world != null);
  26.         BlockState state = pBlockEntity.getBlockState();
  27.         Direction facing = Direction.NORTH;
  28.         if (hasWorld) {
  29.             facing = state.getValue(WizardChestBlock.FACING);
  30.         }
  31.  
  32.         float angle = facing.toYRot();
  33.  
  34.         pPoseStack.pushPose();
  35.         pPoseStack.translate(0.5f, 0.5f, 0.5f);
  36.         pPoseStack.mulPose(Axis.YP.rotationDegrees(-angle));
  37.         pPoseStack.translate(-0.5f, -0.5f, -0.5f);
  38.  
  39.         float f1 = pBlockEntity.getOpenNess(pPartialTick);
  40.         f1 = 1.0f - f1;
  41.         f1 = 1.0f - f1 * f1 * f1;
  42.  
  43.         VertexConsumer vertexConsumer = material.buffer(pBuffer, RenderType::entitySolid);
  44.         render(pPoseStack, vertexConsumer, pPackedLight, pPackedOverlay, f1);
  45.         pPoseStack.popPose();
  46.     }
  47.  
  48.     private void render(PoseStack pPoseStack, VertexConsumer pConsumer, int pPackedLight, int pPackedOverlay, float pLidAngle) {
  49.         lid.xRot = -(pLidAngle * (float) (Math.PI / 2));
  50.         lock.xRot = lid.xRot;
  51.         lock.render(pPoseStack, pConsumer, pPackedLight, pPackedOverlay);
  52.         lid.render(pPoseStack, pConsumer, pPackedLight, pPackedOverlay);
  53.         base.render(pPoseStack, pConsumer, pPackedLight, pPackedOverlay);
  54.         decor.render(pPoseStack, pConsumer, pPackedLight, pPackedOverlay);
  55.     }
  56.  
  57.     public static LayerDefinition createBody() {
  58.         MeshDefinition meshdefinition = new MeshDefinition();
  59.         PartDefinition partdefinition = meshdefinition.getRoot();
  60.         partdefinition.addOrReplaceChild("base", CubeListBuilder.create().texOffs(0, 0).addBox(1.0F, 0.0F, 1.0F, 14.0F, 10.0F, 14.0F), PartPose.ZERO);
  61.         partdefinition.addOrReplaceChild(
  62.                 "lid", CubeListBuilder.create().texOffs(0, 0).addBox(1.0F, 0.0F, 0.0F, 14.0F, 5.0F, 14.0F), PartPose.offset(0.0F, 9.0F, 1.0F)
  63.         );
  64.         partdefinition.addOrReplaceChild(
  65.                 "lock", CubeListBuilder.create().texOffs(0, 0).addBox(7.0F, -2.0F, 14.0F, 2.0F, 4.0F, 1.0F), PartPose.offset(0.0F, 9.0F, 1.0F)
  66.         );
  67.         PartDefinition decor = partdefinition.addOrReplaceChild("decor", CubeListBuilder.create().texOffs(0, 0).addBox(0.0f, 2.0f, 0.0f, 12, 1, 1), PartPose.offset(1.0f, 0, 1.0f));
  68.  
  69.         return LayerDefinition.create(meshdefinition, 64, 64);
  70.     }
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement