95 lines
4.6 KiB
Diff
95 lines
4.6 KiB
Diff
--- a/net/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher.java
|
|
+++ b/net/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher.java
|
|
@@ -88,7 +88,7 @@
|
|
|
|
@Nullable
|
|
public <T extends TileEntity> TileEntityRenderer<T> func_147547_b(@Nullable TileEntity p_147547_1_) {
|
|
- return p_147547_1_ == null ? null : this.func_147546_a(p_147547_1_.getClass());
|
|
+ return p_147547_1_ == null || p_147547_1_.func_145837_r() ? null : this.func_147546_a(p_147547_1_.getClass());
|
|
}
|
|
|
|
public void func_190056_a(World p_190056_1_, TextureManager p_190056_2_, FontRenderer p_190056_3_, Entity p_190056_4_, RayTraceResult p_190056_5_, float p_190056_6_) {
|
|
@@ -109,12 +109,15 @@
|
|
|
|
public void func_180546_a(TileEntity p_180546_1_, float p_180546_2_, int p_180546_3_) {
|
|
if (p_180546_1_.func_145835_a(this.field_147560_j, this.field_147561_k, this.field_147558_l) < p_180546_1_.func_145833_n()) {
|
|
+ if(!drawingBatch || !p_180546_1_.hasFastRenderer())
|
|
+ {
|
|
RenderHelper.func_74519_b();
|
|
int i = this.field_147550_f.func_175626_b(p_180546_1_.func_174877_v(), 0);
|
|
int j = i % 65536;
|
|
int k = i / 65536;
|
|
OpenGlHelper.func_77475_a(OpenGlHelper.field_77476_b, (float)j, (float)k);
|
|
GlStateManager.func_179131_c(1.0F, 1.0F, 1.0F, 1.0F);
|
|
+ }
|
|
BlockPos blockpos = p_180546_1_.func_174877_v();
|
|
this.func_203602_a(p_180546_1_, (double)blockpos.func_177958_n() - field_147554_b, (double)blockpos.func_177956_o() - field_147555_c, (double)blockpos.func_177952_p() - field_147552_d, p_180546_2_, p_180546_3_, false);
|
|
}
|
|
@@ -133,10 +136,13 @@
|
|
TileEntityRenderer<TileEntity> tileentityrenderer = this.func_147547_b(p_203602_1_);
|
|
if (tileentityrenderer != null) {
|
|
try {
|
|
- if (!p_203602_10_ && (!p_203602_1_.func_145830_o() || !p_203602_1_.func_195044_w().func_177230_c().func_149716_u())) {
|
|
+ if (!p_203602_10_ && (!p_203602_1_.func_145830_o() || !p_203602_1_.func_195044_w().hasTileEntity())) {
|
|
return;
|
|
}
|
|
|
|
+ if(drawingBatch && p_203602_1_.hasFastRenderer())
|
|
+ tileentityrenderer.renderTileEntityFast(p_203602_1_, p_203602_2_, p_203602_4_, p_203602_6_, p_203602_8_, p_203602_9_, batchBuffer.func_178180_c());
|
|
+ else
|
|
tileentityrenderer.func_199341_a(p_203602_1_, p_203602_2_, p_203602_4_, p_203602_6_, p_203602_8_, p_203602_9_);
|
|
} catch (Throwable throwable) {
|
|
CrashReport crashreport = CrashReport.func_85055_a(throwable, "Rendering Block Entity");
|
|
@@ -159,4 +165,51 @@
|
|
public FontRenderer func_147548_a() {
|
|
return this.field_147557_n;
|
|
}
|
|
+
|
|
+ /**
|
|
+ * Buffer used for batched TESRs
|
|
+ */
|
|
+ private net.minecraft.client.renderer.Tessellator batchBuffer = new net.minecraft.client.renderer.Tessellator(0x200000);
|
|
+ private boolean drawingBatch = false;
|
|
+
|
|
+ /**
|
|
+ * Prepare for a batched TESR rendering.
|
|
+ * You probably shouldn't call this manually.
|
|
+ */
|
|
+ public void preDrawBatch() {
|
|
+ batchBuffer.func_178180_c().func_181668_a(org.lwjgl.opengl.GL11.GL_QUADS, net.minecraft.client.renderer.vertex.DefaultVertexFormats.field_176600_a);
|
|
+ drawingBatch = true;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Render all TESRs batched so far.
|
|
+ * You probably shouldn't call this manually.
|
|
+ */
|
|
+ public void drawBatch(int pass) {
|
|
+ field_147553_e.func_110577_a(net.minecraft.client.renderer.texture.TextureMap.field_110575_b);
|
|
+ net.minecraft.client.renderer.RenderHelper.func_74518_a();
|
|
+ GlStateManager.func_179112_b(org.lwjgl.opengl.GL11.GL_SRC_ALPHA, org.lwjgl.opengl.GL11.GL_ONE_MINUS_SRC_ALPHA);
|
|
+ GlStateManager.func_179147_l();
|
|
+ GlStateManager.func_179129_p();
|
|
+
|
|
+ if (net.minecraft.client.Minecraft.func_71379_u()) {
|
|
+ GlStateManager.func_179103_j(org.lwjgl.opengl.GL11.GL_SMOOTH);
|
|
+ } else {
|
|
+ GlStateManager.func_179103_j(org.lwjgl.opengl.GL11.GL_FLAT);
|
|
+ }
|
|
+
|
|
+ if(pass > 0) {
|
|
+ net.minecraft.util.math.Vec3d cameraPos = net.minecraft.client.renderer.ActiveRenderInfo.getCameraPosition();
|
|
+ batchBuffer.func_178180_c().func_181674_a((float)cameraPos.field_72450_a, (float)cameraPos.field_72448_b, (float)cameraPos.field_72449_c);
|
|
+ }
|
|
+ batchBuffer.func_78381_a();
|
|
+
|
|
+ net.minecraft.client.renderer.RenderHelper.func_74519_b();
|
|
+ drawingBatch = false;
|
|
+ }
|
|
+
|
|
+ //Internal, Do not call Use ClientRegistry.
|
|
+ public synchronized <T extends TileEntity> void setSpecialRenderer(Class<T> tileEntityClass, TileEntityRenderer<? super T> specialRenderer) {
|
|
+ this.field_147559_m.put(tileEntityClass, specialRenderer);
|
|
+ }
|
|
}
|