Yurim64

ChestRendered

May 3rd, 2021 (edited)
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.99 KB | None | 0 0
  1. package com.ike.tenchest.chest.rendered;
  2.  
  3. import com.mojang.blaze3d.matrix.MatrixStack;
  4. import com.mojang.blaze3d.vertex.IVertexBuilder;
  5. import it.unimi.dsi.fastutil.floats.Float2FloatFunction;
  6. import it.unimi.dsi.fastutil.ints.Int2IntFunction;
  7. import net.minecraft.block.*;
  8. import net.minecraft.client.renderer.Atlases;
  9. import net.minecraft.client.renderer.IRenderTypeBuffer;
  10. import net.minecraft.client.renderer.RenderType;
  11. import net.minecraft.client.renderer.model.ModelRenderer;
  12. import net.minecraft.client.renderer.model.RenderMaterial;
  13. import net.minecraft.client.renderer.tileentity.DualBrightnessCallback;
  14. import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
  15. import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
  16. import net.minecraft.tileentity.ChestTileEntity;
  17. import net.minecraft.tileentity.IChestLid;
  18. import net.minecraft.tileentity.TileEntity;
  19. import net.minecraft.tileentity.TileEntityMerger;
  20. import net.minecraft.util.Direction;
  21. import net.minecraft.util.math.vector.Vector3f;
  22. import net.minecraft.world.World;
  23.  
  24. import java.util.Calendar;
  25.  
  26. /**
  27.  * @author Ike
  28.  * @version 1.0A
  29.  **/
  30. public class ChestRendered<T extends TileEntity & IChestLid> extends TileEntityRenderer<T> {
  31.     private final ModelRenderer lid;
  32.     private final ModelRenderer bottom;
  33.     private final ModelRenderer lock;
  34.     private final ModelRenderer doubleLeftLid;
  35.     private final ModelRenderer doubleLeftBottom;
  36.     private final ModelRenderer doubleLeftLock;
  37.     private final ModelRenderer doubleRightLid;
  38.     private final ModelRenderer doubleRightBottom;
  39.     private final ModelRenderer doubleRightLock;
  40.     private boolean xmasTextures;
  41.  
  42.     public ChestRendered(TileEntityRendererDispatcher p_i226008_1_) {
  43.         super(p_i226008_1_);
  44.         Calendar calendar = Calendar.getInstance();
  45.         if (calendar.get(2) + 1 == 12 && calendar.get(5) >= 24 && calendar.get(5) <= 26) {
  46.             this.xmasTextures = true;
  47.         }
  48.  
  49.         this.bottom = new ModelRenderer(64, 64, 0, 19);
  50.         this.bottom.addBox(1.0F, 0.0F, 1.0F, 14.0F, 10.0F, 14.0F, 0.0F);
  51.         this.lid = new ModelRenderer(64, 64, 0, 0);
  52.         this.lid.addBox(1.0F, 0.0F, 0.0F, 14.0F, 5.0F, 14.0F, 0.0F);
  53.         this.lid.y = 9.0F;
  54.         this.lid.z = 1.0F;
  55.         this.lock = new ModelRenderer(64, 64, 0, 0);
  56.         this.lock.addBox(7.0F, -1.0F, 15.0F, 2.0F, 4.0F, 1.0F, 0.0F);
  57.         this.lock.y = 8.0F;
  58.         this.doubleLeftBottom = new ModelRenderer(64, 64, 0, 19);
  59.         this.doubleLeftBottom.addBox(1.0F, 0.0F, 1.0F, 15.0F, 10.0F, 14.0F, 0.0F);
  60.         this.doubleLeftLid = new ModelRenderer(64, 64, 0, 0);
  61.         this.doubleLeftLid.addBox(1.0F, 0.0F, 0.0F, 15.0F, 5.0F, 14.0F, 0.0F);
  62.         this.doubleLeftLid.y = 9.0F;
  63.         this.doubleLeftLid.z = 1.0F;
  64.         this.doubleLeftLock = new ModelRenderer(64, 64, 0, 0);
  65.         this.doubleLeftLock.addBox(15.0F, -1.0F, 15.0F, 1.0F, 4.0F, 1.0F, 0.0F);
  66.         this.doubleLeftLock.y = 8.0F;
  67.         this.doubleRightBottom = new ModelRenderer(64, 64, 0, 19);
  68.         this.doubleRightBottom.addBox(0.0F, 0.0F, 1.0F, 15.0F, 10.0F, 14.0F, 0.0F);
  69.         this.doubleRightLid = new ModelRenderer(64, 64, 0, 0);
  70.         this.doubleRightLid.addBox(0.0F, 0.0F, 0.0F, 15.0F, 5.0F, 14.0F, 0.0F);
  71.         this.doubleRightLid.y = 9.0F;
  72.         this.doubleRightLid.z = 1.0F;
  73.         this.doubleRightLock = new ModelRenderer(64, 64, 0, 0);
  74.         this.doubleRightLock.addBox(0.0F, -1.0F, 15.0F, 1.0F, 4.0F, 1.0F, 0.0F);
  75.         this.doubleRightLock.y = 8.0F;
  76.     }
  77.  
  78.     public void render(T p_225616_1_, float p_225616_2_, MatrixStack p_225616_3_, IRenderTypeBuffer p_225616_4_, int p_225616_5_, int p_225616_6_) {
  79.         World world = p_225616_1_.getLevel();
  80.         boolean flag = world != null;
  81.         BlockState blockstate = flag ? p_225616_1_.getBlockState() : Blocks.CHEST.defaultBlockState().setValue(ChestBlock.FACING, Direction.SOUTH);
  82.         Block block = blockstate.getBlock();
  83.         if (block instanceof AbstractChestBlock) {
  84.             AbstractChestBlock<?> abstractchestblock = (AbstractChestBlock) block;
  85.             p_225616_3_.pushPose();
  86.             float f = blockstate.getValue(ChestBlock.FACING).toYRot();
  87.             p_225616_3_.translate(0.5D, 0.5D, 0.5D);
  88.             p_225616_3_.mulPose(Vector3f.YP.rotationDegrees(-f));
  89.             p_225616_3_.translate(-0.5D, -0.5D, -0.5D);
  90.             TileEntityMerger.ICallbackWrapper<? extends ChestTileEntity> icallbackwrapper;
  91.             if (flag) {
  92.                 icallbackwrapper = abstractchestblock.combine(blockstate, world, p_225616_1_.getBlockPos(), true);
  93.             } else {
  94.                 icallbackwrapper = TileEntityMerger.ICallback::acceptNone;
  95.             }
  96.  
  97.             float f1 = icallbackwrapper.<Float2FloatFunction>apply(ChestBlock.opennessCombiner(p_225616_1_)).get(p_225616_2_);
  98.             f1 = 1.0F - f1;
  99.             f1 = 1.0F - f1 * f1 * f1;
  100.             int i = icallbackwrapper.<Int2IntFunction>apply(new DualBrightnessCallback<>()).applyAsInt(p_225616_5_);
  101.             RenderMaterial rendermaterial = this.getMaterial();
  102.             IVertexBuilder ivertexbuilder = rendermaterial.buffer(p_225616_4_, RenderType::entityCutout);
  103.             this.render(p_225616_3_, ivertexbuilder, this.lid, this.lock, this.bottom, f1, i, p_225616_6_);
  104.  
  105.             p_225616_3_.popPose();
  106.         }
  107.     }
  108.  
  109.     private void render(MatrixStack p_228871_1_, IVertexBuilder p_228871_2_, ModelRenderer p_228871_3_, ModelRenderer p_228871_4_, ModelRenderer p_228871_5_, float p_228871_6_, int p_228871_7_, int p_228871_8_) {
  110.         p_228871_3_.xRot = -(p_228871_6_ * ((float) Math.PI / 2F));
  111.         p_228871_4_.xRot = p_228871_3_.xRot;
  112.         p_228871_3_.render(p_228871_1_, p_228871_2_, p_228871_7_, p_228871_8_);
  113.         p_228871_4_.render(p_228871_1_, p_228871_2_, p_228871_7_, p_228871_8_);
  114.         p_228871_5_.render(p_228871_1_, p_228871_2_, p_228871_7_, p_228871_8_);
  115.     }
  116.  
  117.     protected RenderMaterial getMaterial() {
  118.         return Atlases.ENDER_CHEST_LOCATION;
  119.     }
  120. }
Add Comment
Please, Sign In to add comment