1
0
Fork 0
hoosiertransfer-mod-saigevers/src/main/java/net/minecraft/client/renderer/tileentity/TileEntityRendererDispatche...

187 lines
7.8 KiB
Java

package net.minecraft.client.renderer.tileentity;
import java.util.Map;
import com.google.common.collect.Maps;
import net.hoosiertransfer.CullingMod;
import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager;
import net.lax1dude.eaglercraft.v1_8.opengl.OpenGlHelper;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.crash.CrashReport;
import net.minecraft.crash.CrashReportCategory;
import net.minecraft.entity.Entity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityBanner;
import net.minecraft.tileentity.TileEntityBeacon;
import net.minecraft.tileentity.TileEntityChest;
import net.minecraft.tileentity.TileEntityEnchantmentTable;
import net.minecraft.tileentity.TileEntityEndGateway;
import net.minecraft.tileentity.TileEntityEndPortal;
import net.minecraft.tileentity.TileEntityEnderChest;
import net.minecraft.tileentity.TileEntityMobSpawner;
import net.minecraft.tileentity.TileEntityPiston;
import net.minecraft.tileentity.TileEntitySign;
import net.minecraft.tileentity.TileEntitySkull;
import net.minecraft.util.BlockPos;
import net.minecraft.util.ReportedException;
import net.minecraft.world.World;
/**
* +
* This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source code.
*
* Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!"
* Mod Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team
*
* EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, hoosiertransfer,
* ayunami2000. All Rights Reserved.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED.
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
*/
public class TileEntityRendererDispatcher {
private Map<Class<? extends TileEntity>, TileEntitySpecialRenderer<? extends TileEntity>> mapSpecialRenderers = Maps
.newHashMap();
public static TileEntityRendererDispatcher instance = new TileEntityRendererDispatcher();
private FontRenderer fontRenderer;
public static double staticPlayerX;
public static double staticPlayerY;
public static double staticPlayerZ;
public TextureManager renderEngine;
public World worldObj;
public Entity entity;
public float entityYaw;
public float entityPitch;
public double entityX;
public double entityY;
public double entityZ;
private TileEntityRendererDispatcher() {
this.mapSpecialRenderers.put(TileEntitySign.class, new TileEntitySignRenderer());
this.mapSpecialRenderers.put(TileEntityMobSpawner.class, new TileEntityMobSpawnerRenderer());
this.mapSpecialRenderers.put(TileEntityPiston.class, new TileEntityPistonRenderer());
this.mapSpecialRenderers.put(TileEntityChest.class, new TileEntityChestRenderer());
this.mapSpecialRenderers.put(TileEntityEnderChest.class, new TileEntityEnderChestRenderer());
this.mapSpecialRenderers.put(TileEntityEnchantmentTable.class, new TileEntityEnchantmentTableRenderer());
this.mapSpecialRenderers.put(TileEntityEndPortal.class, new TileEntityEndPortalRenderer());
this.mapSpecialRenderers.put(TileEntityEndGateway.class, new TileEntityEndGatewayRenderer());
this.mapSpecialRenderers.put(TileEntityBeacon.class, new TileEntityBeaconRenderer());
this.mapSpecialRenderers.put(TileEntitySkull.class, new TileEntitySkullRenderer());
this.mapSpecialRenderers.put(TileEntityBanner.class, new TileEntityBannerRenderer());
for (TileEntitySpecialRenderer tileentityspecialrenderer : this.mapSpecialRenderers.values()) {
tileentityspecialrenderer.setRendererDispatcher(this);
}
}
public <T extends TileEntity> TileEntitySpecialRenderer<T> getSpecialRendererByClass(
Class<? extends TileEntity> teClass) {
TileEntitySpecialRenderer tileentityspecialrenderer = (TileEntitySpecialRenderer) this.mapSpecialRenderers
.get(teClass);
if (tileentityspecialrenderer == null && teClass != TileEntity.class) {
tileentityspecialrenderer = this
.getSpecialRendererByClass((Class<? extends TileEntity>) teClass.getSuperclass());
this.mapSpecialRenderers.put(teClass, tileentityspecialrenderer);
}
return tileentityspecialrenderer;
}
public <T extends TileEntity> TileEntitySpecialRenderer<T> getSpecialRenderer(TileEntity tileEntityIn) {
return tileEntityIn == null ? null : this.getSpecialRendererByClass(tileEntityIn.getClass());
}
public void cacheActiveRenderInfo(World worldIn, TextureManager textureManagerIn, FontRenderer fontrendererIn,
Entity entityIn, float partialTicks) {
if (this.worldObj != worldIn) {
this.setWorld(worldIn);
}
this.renderEngine = textureManagerIn;
this.entity = entityIn;
this.fontRenderer = fontrendererIn;
this.entityYaw = entityIn.prevRotationYaw + (entityIn.rotationYaw - entityIn.prevRotationYaw) * partialTicks;
this.entityPitch = entityIn.prevRotationPitch
+ (entityIn.rotationPitch - entityIn.prevRotationPitch) * partialTicks;
this.entityX = entityIn.lastTickPosX + (entityIn.posX - entityIn.lastTickPosX) * (double) partialTicks;
this.entityY = entityIn.lastTickPosY + (entityIn.posY - entityIn.lastTickPosY) * (double) partialTicks;
this.entityZ = entityIn.lastTickPosZ + (entityIn.posZ - entityIn.lastTickPosZ) * (double) partialTicks;
}
public void renderTileEntity(TileEntity tileentityIn, float partialTicks, int destroyStage) {
if (tileentityIn.getDistanceSq(this.entityX, this.entityY, this.entityZ) < tileentityIn
.getMaxRenderDistanceSquared()) {
int i = this.worldObj.getCombinedLight(tileentityIn.getPos(), 0);
int j = i % 65536;
int k = i / 65536;
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) j / 1.0F, (float) k / 1.0F);
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
BlockPos blockpos = tileentityIn.getPos();
this.renderTileEntityAt(tileentityIn, (double) blockpos.getX() - staticPlayerX,
(double) blockpos.getY() - staticPlayerY, (double) blockpos.getZ() - staticPlayerZ, partialTicks,
destroyStage);
}
}
/**
* +
* Render this TileEntity at a given set of coordinates
*/
public void renderTileEntityAt(TileEntity tileEntityIn, double x, double y, double z, float partialTicks) {
this.renderTileEntityAt(tileEntityIn, x, y, z, partialTicks, -1);
}
/**
* +
* Render this TileEntity at a given set of coordinates
*/
public void renderTileEntityAt(TileEntity tileEntityIn, double x, double y, double z, float partialTicks,
int destroyStage) {
if (!tileEntityIn.isForcedVisible() && tileEntityIn.isCulled()) {
CullingMod.skippedBlockEntities++;
return;
}
CullingMod.renderedBlockEntities++;
TileEntitySpecialRenderer tileentityspecialrenderer = this.getSpecialRenderer(tileEntityIn);
if (tileentityspecialrenderer != null) {
try {
tileentityspecialrenderer.renderTileEntityAt(tileEntityIn, x, y, z, partialTicks, destroyStage);
} catch (Throwable throwable) {
CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Rendering Block Entity");
CrashReportCategory crashreportcategory = crashreport.makeCategory("Block Entity Details");
tileEntityIn.addInfoToCrashReport(crashreportcategory);
throw new ReportedException(crashreport);
}
}
}
public void setWorld(World worldIn) {
this.worldObj = worldIn;
}
public FontRenderer getFontRenderer() {
return this.fontRenderer;
}
}