Advertisement
Guest User

Json with special renderer

a guest
Jan 20th, 2016
300
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.75 KB | None | 0 0
  1. package com.sixonethree.randomutilities.client.render;
  2.  
  3. import java.util.List;
  4.  
  5. import net.minecraft.client.Minecraft;
  6. import net.minecraft.client.multiplayer.WorldClient;
  7. import net.minecraft.client.renderer.GlStateManager;
  8. import net.minecraft.client.renderer.culling.Frustum;
  9. import net.minecraft.entity.Entity;
  10. import net.minecraft.entity.item.EntityItem;
  11. import net.minecraft.item.ItemStack;
  12. import net.minecraft.tileentity.TileEntity;
  13. import net.minecraft.util.BlockPos;
  14. import net.minecraftforge.client.event.RenderWorldLastEvent;
  15. import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
  16.  
  17. import com.sixonethree.randomutilities.common.block.tile.TileEntityDisplayTable;
  18. import com.sixonethree.randomutilities.common.block.tile.TileEntityMagicChest;
  19. import com.sixonethree.randomutilities.utility.GlManager;
  20. import com.sixonethree.randomutilities.utility.LogHelper;
  21.  
  22. public class TileEntityRenderer {
  23. @SubscribeEvent public void onWorldRender(RenderWorldLastEvent event) {
  24. Minecraft mc = Minecraft.getMinecraft();
  25.  
  26. Entity cameraEntity = mc.getRenderViewEntity();
  27. BlockPos renderingVector = cameraEntity.getPosition();
  28. Frustum frustum = new Frustum();
  29.  
  30. double viewX = cameraEntity.lastTickPosX + (cameraEntity.posX - cameraEntity.lastTickPosX) * event.partialTicks;
  31. double viewY = cameraEntity.lastTickPosY + (cameraEntity.posY - cameraEntity.lastTickPosY) * event.partialTicks;
  32. double viewZ = cameraEntity.lastTickPosZ + (cameraEntity.posZ - cameraEntity.lastTickPosZ) * event.partialTicks;
  33. frustum.setPosition(viewX, viewY, viewZ);
  34.  
  35. WorldClient client = mc.theWorld;
  36. List<TileEntity> tileEntities = client.loadedTileEntityList;
  37.  
  38. for(TileEntity entity : tileEntities) {
  39. if (entity == null) return;
  40. if (entity instanceof TileEntityDisplayTable) {
  41. if (this.isInRangeToRender3d(entity, renderingVector.getX(), renderingVector.getY(), renderingVector.getZ(), 1.0D)) {
  42. renderDisplayTable((TileEntityDisplayTable) entity, event.partialTicks, cameraEntity);
  43. }
  44. }
  45. if (entity instanceof TileEntityMagicChest) {
  46. if (this.isInRangeToRender3d(entity, renderingVector.getX(), renderingVector.getY(), renderingVector.getZ(), 1.0D)) {
  47. renderMagicChest((TileEntityMagicChest) entity, event.partialTicks, cameraEntity);
  48. }
  49. }
  50. }
  51. }
  52.  
  53. private void renderDisplayTable(TileEntityDisplayTable entity, float partialTicks, Entity cameraEntity) {
  54. LogHelper.warn("Rendering display table");
  55. }
  56.  
  57. private void renderMagicChest(TileEntityMagicChest magicChest, float partialTicks, Entity cameraEntity) {
  58. int x = magicChest.getPos().getX();
  59. int y = magicChest.getPos().getY();
  60. int z = magicChest.getPos().getZ();
  61. double x2 = Minecraft.getMinecraft().getRenderManager().viewerPosX;
  62. double y2 = Minecraft.getMinecraft().getRenderManager().viewerPosY;
  63. double z2 = Minecraft.getMinecraft().getRenderManager().viewerPosZ;
  64. GlStateManager.pushMatrix();
  65. GlStateManager.translate(x - x2, y - y2, z - z2);
  66. GlStateManager.color(1, 1, 1, 1);
  67. GlStateManager.scale(0.5, 0.5, 0.5);
  68. GlManager.translateThenRotate(1.5, 0.3, 0.5, 0, 0, 1, 0);
  69. GlManager.translateThenRotate(-0.5, 0, 0.5, 0, 0, 1, 0);
  70. ItemStack stack = magicChest.getStackInSlot(0);
  71. if (stack != null) {
  72. ItemStack renderStack = stack.copy();
  73. EntityItem ghostItem = new EntityItem(magicChest.getWorld(), x, y, z, renderStack);
  74. float rotationAngle = (float) (720.0 * (System.currentTimeMillis() & 0x3FFFL) / 0x3FFFL);
  75. renderStack.stackSize = 1;
  76. ghostItem.hoverStart = 0F;
  77.  
  78. GlStateManager.scale(2, 2, 2);
  79. GlStateManager.rotate(rotationAngle, 0, 1, 0);
  80. Minecraft.getMinecraft().getRenderManager().doRenderEntity(ghostItem, 0, 0, 0, 0, 0, false);
  81. }
  82. GlStateManager.popMatrix();
  83. }
  84.  
  85. /* Copied from Vanilla Entity class */
  86.  
  87. /**
  88. *
  89. * @param entity
  90. * @param renderX
  91. * @param renderY
  92. * @param renderZ
  93. * @param renderDistanceWeight - Most entities have a weight of 1.0D, the exceptions are Arrow, and Players which are 10.0D
  94. * @return Whether the special rendering should be done or not.
  95. */
  96. private boolean isInRangeToRender3d(TileEntity entity, double renderX, double renderY, double renderZ, double renderDistanceWeight) {
  97. double d0 = entity.getPos().getX() - renderX;
  98. double d1 = entity.getPos().getY() - renderY;
  99. double d2 = entity.getPos().getZ() - renderZ;
  100. double d3 = d0 * d0 + d1 * d1 + d2 * d2;
  101. return this.isInRangeToRenderDist(entity, d3, renderDistanceWeight);
  102. }
  103.  
  104. private boolean isInRangeToRenderDist(TileEntity entity, double distance, double renderDistanceWeight) {
  105. double d0 = entity.getRenderBoundingBox().getAverageEdgeLength();
  106. if (Double.isNaN(d0)) {
  107. d0 = 1.0D;
  108. }
  109.  
  110. d0 = d0 * 64.0D * renderDistanceWeight;
  111. return distance < d0 * d0;
  112. }
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement