hoosiertransfer-mod/src/game/java/net/minecraft/client/renderer/RenderGlobal.java

2620 lines
106 KiB
Java

package net.minecraft.client.renderer;
import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.*;
import java.util.Collection;
import java.util.EnumSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import net.hoosiertransfer.Alfheim.ILightUpdatesProcessor;
import net.lax1dude.eaglercraft.v1_8.EagRuntime;
import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom;
import net.lax1dude.eaglercraft.v1_8.HString;
import net.lax1dude.eaglercraft.v1_8.Keyboard;
import java.util.Set;
import java.util.concurrent.Callable;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import net.lax1dude.eaglercraft.v1_8.log4j.LogManager;
import net.lax1dude.eaglercraft.v1_8.log4j.Logger;
import net.lax1dude.eaglercraft.v1_8.minecraft.ChunkUpdateManager;
import net.lax1dude.eaglercraft.v1_8.minecraft.EaglerTextureAtlasSprite;
import net.lax1dude.eaglercraft.v1_8.opengl.EaglercraftGPU;
import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager;
import net.lax1dude.eaglercraft.v1_8.opengl.VertexFormat;
import net.lax1dude.eaglercraft.v1_8.opengl.WorldRenderer;
import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.DeferredStateManager;
import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.DynamicLightManager;
import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.EaglerDeferredConfig;
import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.EaglerDeferredPipeline;
import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.program.SharedPipelineShaders;
import net.lax1dude.eaglercraft.v1_8.opengl.ext.dynamiclights.DynamicLightsStateManager;
import net.lax1dude.eaglercraft.v1_8.vector.Vector3f;
import net.lax1dude.eaglercraft.v1_8.vector.Vector4f;
import net.minecraft.block.Block;
import net.minecraft.block.BlockChest;
import net.minecraft.block.BlockEnderChest;
import net.minecraft.block.BlockSign;
import net.minecraft.block.BlockSkull;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.audio.ISound;
import net.minecraft.client.audio.PositionedSoundRecord;
import net.minecraft.client.audio.SoundCategory;
import net.minecraft.client.multiplayer.WorldClient;
import net.minecraft.client.particle.EntityFX;
import net.minecraft.client.renderer.chunk.CompiledChunk;
import net.minecraft.client.renderer.chunk.IRenderChunkFactory;
import net.minecraft.client.renderer.chunk.ListChunkFactory;
import net.minecraft.client.renderer.chunk.RenderChunk;
import net.minecraft.client.renderer.chunk.VisGraph;
import net.minecraft.client.renderer.culling.ClippingHelper;
import net.minecraft.client.renderer.culling.ClippingHelperImpl;
import net.minecraft.client.renderer.culling.Frustum;
import net.minecraft.client.renderer.culling.ICamera;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.client.resources.IResourceManager;
import net.minecraft.client.resources.IResourceManagerReloadListener;
import net.minecraft.crash.CrashReport;
import net.minecraft.crash.CrashReportCategory;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntityWitherSkull;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemDye;
import net.minecraft.item.ItemRecord;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityChest;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.BlockPos;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.ChatComponentTranslation;
import net.minecraft.util.ClassInheritanceMultiMap;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumParticleTypes;
import net.minecraft.util.EnumWorldBlockLayer;
import net.minecraft.util.MathHelper;
import net.minecraft.util.Matrix4f;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.ReportedException;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.Vec3;
import net.minecraft.util.Vector3d;
import net.minecraft.world.IWorldAccess;
import net.minecraft.world.border.WorldBorder;
import net.minecraft.world.chunk.Chunk;
/**
* +
* 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 RenderGlobal implements IWorldAccess, IResourceManagerReloadListener, ILightUpdatesProcessor {
private static final Logger logger = LogManager.getLogger();
private static final ResourceLocation locationMoonPhasesPng = new ResourceLocation(
"textures/environment/moon_phases.png");
private static final ResourceLocation locationSunPng = new ResourceLocation("textures/environment/sun.png");
private static final ResourceLocation locationCloudsPng = new ResourceLocation("textures/environment/clouds.png");
private static final ResourceLocation locationEndSkyPng = new ResourceLocation("textures/environment/end_sky.png");
private static final ResourceLocation locationForcefieldPng = new ResourceLocation("textures/misc/forcefield.png");
private final Minecraft mc;
private final TextureManager renderEngine;
private final RenderManager renderManager;
private WorldClient theWorld;
private Set<RenderChunk> chunksToUpdate = Sets.newLinkedHashSet();
/**
* +
* List of OpenGL lists for the current render pass
*/
private List<RenderGlobal.ContainerLocalRenderInformation> renderInfos = Lists.newArrayListWithCapacity(69696);
private final Set<TileEntity> field_181024_n = Sets.newHashSet();
private ViewFrustum viewFrustum;
/**
* +
* The star GL Call list
*/
private int starGLCallList = -1;
/**
* +
* OpenGL sky list
*/
private int glSkyList = -1;
/**
* +
* OpenGL sky list 2
*/
private int glSkyList2 = -1;
public int cloudTickCounter;
private final Map<Integer, DestroyBlockProgress> damagedBlocks = Maps.newHashMap();
private final Map<BlockPos, ISound> mapSoundPositions = Maps.newHashMap();
private final EaglerTextureAtlasSprite[] destroyBlockIcons = new EaglerTextureAtlasSprite[10];
private double frustumUpdatePosX = Double.MIN_VALUE;
private double frustumUpdatePosY = Double.MIN_VALUE;
private double frustumUpdatePosZ = Double.MIN_VALUE;
private int frustumUpdatePosChunkX = Integer.MIN_VALUE;
private int frustumUpdatePosChunkY = Integer.MIN_VALUE;
private int frustumUpdatePosChunkZ = Integer.MIN_VALUE;
private double lastViewEntityX = Double.MIN_VALUE;
private double lastViewEntityY = Double.MIN_VALUE;
private double lastViewEntityZ = Double.MIN_VALUE;
private float lastViewProjMatrixFOV = Float.MIN_VALUE;
private double lastViewEntityPitch = Double.MIN_VALUE;
private double lastViewEntityYaw = Double.MIN_VALUE;
private final ChunkUpdateManager renderDispatcher = new ChunkUpdateManager();
private ChunkRenderContainer renderContainer;
private int renderDistanceChunks = -1;
/**
* +
* Render entities startup counter (init value=2)
*/
private int renderEntitiesStartupCounter = 2;
private int countEntitiesTotal;
private int countEntitiesRendered;
private int countEntitiesHidden;
private boolean debugFixTerrainFrustum = false;
private ClippingHelper debugFixedClippingHelper;
private final Vector4f[] debugTerrainMatrix = new Vector4f[8];
private final Vector3d debugTerrainFrustumPosition = new Vector3d();
private boolean vboEnabled = false;
IRenderChunkFactory renderChunkFactory;
private double prevRenderSortX;
private double prevRenderSortY;
private double prevRenderSortZ;
private boolean displayListEntitiesDirty = true;
private final Set<BlockPos> setLightUpdates = Sets.<BlockPos>newHashSet();
public RenderGlobal(Minecraft mcIn) {
this.mc = mcIn;
this.renderManager = mcIn.getRenderManager();
this.renderEngine = mcIn.getTextureManager();
this.renderEngine.bindTexture(locationForcefieldPng);
EaglercraftGPU.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
EaglercraftGPU.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
GlStateManager.bindTexture(0);
this.updateDestroyBlockIcons();
this.vboEnabled = false;
this.renderContainer = new RenderList();
this.renderChunkFactory = new ListChunkFactory();
this.generateStars();
this.generateSky();
this.generateSky2();
}
public void onResourceManagerReload(IResourceManager var1) {
this.updateDestroyBlockIcons();
}
private void updateDestroyBlockIcons() {
TextureMap texturemap = this.mc.getTextureMapBlocks();
for (int i = 0; i < this.destroyBlockIcons.length; ++i) {
this.destroyBlockIcons[i] = texturemap.getAtlasSprite("minecraft:blocks/destroy_stage_" + i);
}
}
/**
* +
* Creates the entity outline shader to be stored in
* RenderGlobal.entityOutlineShader
*/
public void makeEntityOutlineShader() {
}
public void renderEntityOutlineFramebuffer() {
}
protected boolean isRenderEntityOutlines() {
return false;
}
private void generateSky2() {
Tessellator tessellator = Tessellator.getInstance();
WorldRenderer worldrenderer = tessellator.getWorldRenderer();
if (this.glSkyList2 >= 0) {
GLAllocation.deleteDisplayLists(this.glSkyList2);
this.glSkyList2 = -1;
}
this.glSkyList2 = GLAllocation.generateDisplayLists();
EaglercraftGPU.glNewList(this.glSkyList2, GL_COMPILE);
this.renderSky(worldrenderer, -16.0F, true);
tessellator.draw();
EaglercraftGPU.glEndList();
}
private void generateSky() {
Tessellator tessellator = Tessellator.getInstance();
WorldRenderer worldrenderer = tessellator.getWorldRenderer();
if (this.glSkyList >= 0) {
GLAllocation.deleteDisplayLists(this.glSkyList);
this.glSkyList = -1;
}
this.glSkyList = GLAllocation.generateDisplayLists();
EaglercraftGPU.glNewList(this.glSkyList, GL_COMPILE);
this.renderSky(worldrenderer, 16.0F, false);
tessellator.draw();
EaglercraftGPU.glEndList();
}
private void renderSky(WorldRenderer worldRendererIn, float parFloat1, boolean parFlag) {
boolean flag = true;
boolean flag1 = true;
worldRendererIn.begin(7, DefaultVertexFormats.POSITION);
for (int i = -384; i <= 384; i += 64) {
for (int j = -384; j <= 384; j += 64) {
float f = (float) i;
float f1 = (float) (i + 64);
if (parFlag) {
f1 = (float) i;
f = (float) (i + 64);
}
worldRendererIn.pos((double) f, (double) parFloat1, (double) j).endVertex();
worldRendererIn.pos((double) f1, (double) parFloat1, (double) j).endVertex();
worldRendererIn.pos((double) f1, (double) parFloat1, (double) (j + 64)).endVertex();
worldRendererIn.pos((double) f, (double) parFloat1, (double) (j + 64)).endVertex();
}
}
}
private void generateStars() {
Tessellator tessellator = Tessellator.getInstance();
WorldRenderer worldrenderer = tessellator.getWorldRenderer();
if (this.starGLCallList >= 0) {
GLAllocation.deleteDisplayLists(this.starGLCallList);
this.starGLCallList = -1;
}
this.starGLCallList = GLAllocation.generateDisplayLists();
GlStateManager.pushMatrix();
EaglercraftGPU.glNewList(this.starGLCallList, GL_COMPILE);
this.renderStars(worldrenderer);
tessellator.draw();
EaglercraftGPU.glEndList();
GlStateManager.popMatrix();
}
private void renderStars(WorldRenderer worldRendererIn) {
EaglercraftRandom random = new EaglercraftRandom(10842L);
worldRendererIn.begin(7, DefaultVertexFormats.POSITION);
for (int i = 0; i < 1500; ++i) {
double d0 = (double) (random.nextFloat() * 2.0F - 1.0F);
double d1 = (double) (random.nextFloat() * 2.0F - 1.0F);
double d2 = (double) (random.nextFloat() * 2.0F - 1.0F);
double d3 = (double) (0.15F + random.nextFloat() * 0.1F);
double d4 = d0 * d0 + d1 * d1 + d2 * d2;
if (d4 < 1.0D && d4 > 0.01D) {
d4 = 1.0D / Math.sqrt(d4);
d0 = d0 * d4;
d1 = d1 * d4;
d2 = d2 * d4;
double d5 = d0 * 100.0D;
double d6 = d1 * 100.0D;
double d7 = d2 * 100.0D;
double d8 = Math.atan2(d0, d2);
double d9 = Math.sin(d8);
double d10 = Math.cos(d8);
double d11 = Math.atan2(Math.sqrt(d0 * d0 + d2 * d2), d1);
double d12 = Math.sin(d11);
double d13 = Math.cos(d11);
double d14 = random.nextDouble() * 3.141592653589793D * 2.0D;
double d15 = Math.sin(d14);
double d16 = Math.cos(d14);
for (int j = 0; j < 4; ++j) {
double d17 = 0.0D;
double d18 = (double) ((j & 2) - 1) * d3;
double d19 = (double) ((j + 1 & 2) - 1) * d3;
double d20 = 0.0D;
double d21 = d18 * d16 - d19 * d15;
double d22 = d19 * d16 + d18 * d15;
double d23 = d21 * d12 + 0.0D * d13;
double d24 = 0.0D * d12 - d21 * d13;
double d25 = d24 * d9 - d22 * d10;
double d26 = d22 * d9 + d24 * d10;
worldRendererIn.pos(d5 + d25, d6 + d23, d7 + d26).endVertex();
}
}
}
}
/**
* +
* set null to clear
*/
public void setWorldAndLoadRenderers(WorldClient worldClientIn) {
if (this.theWorld != null) {
this.theWorld.removeWorldAccess(this);
}
this.frustumUpdatePosX = Double.MIN_VALUE;
this.frustumUpdatePosY = Double.MIN_VALUE;
this.frustumUpdatePosZ = Double.MIN_VALUE;
this.frustumUpdatePosChunkX = Integer.MIN_VALUE;
this.frustumUpdatePosChunkY = Integer.MIN_VALUE;
this.frustumUpdatePosChunkZ = Integer.MIN_VALUE;
this.renderManager.set(worldClientIn);
this.theWorld = worldClientIn;
if (worldClientIn != null) {
worldClientIn.addWorldAccess(this);
this.loadRenderers();
}
}
/**
* +
* Loads all the renderers and sets up the basic settings usage
*/
public void loadRenderers() {
if (this.theWorld != null) {
this.displayListEntitiesDirty = true;
if (mc.gameSettings.shaders) {
if (!EaglerDeferredPipeline.isSupported()) {
mc.gameSettings.shaders = false;
}
}
Blocks.leaves.setGraphicsLevel(mc.gameSettings.shaders || mc.gameSettings.fancyGraphics);
Blocks.leaves2.setGraphicsLevel(mc.gameSettings.shaders || mc.gameSettings.fancyGraphics);
this.renderDistanceChunks = this.mc.gameSettings.renderDistanceChunks;
if (this.viewFrustum != null) {
this.viewFrustum.deleteGlResources();
}
this.stopChunkUpdates();
synchronized (this.field_181024_n) {
this.field_181024_n.clear();
}
this.viewFrustum = new ViewFrustum(this.theWorld, this.mc.gameSettings.renderDistanceChunks, this,
this.renderChunkFactory);
if (this.theWorld != null) {
Entity entity = this.mc.getRenderViewEntity();
if (entity != null) {
this.viewFrustum.updateChunkPositions(entity.posX, entity.posZ);
}
}
this.renderEntitiesStartupCounter = 2;
if (mc.gameSettings.shaders) {
EaglerDeferredConfig dfc = mc.gameSettings.deferredShaderConf;
dfc.updateConfig();
if (theWorld.provider.getHasNoSky()) {
dfc.is_rendering_shadowsSun_clamped = 0;
dfc.is_rendering_lightShafts = false;
} else {
int maxDist = renderDistanceChunks << 4;
int ss = dfc.is_rendering_shadowsSun;
while (ss > 1 && (1 << (ss + 3)) > maxDist) {
--ss;
}
dfc.is_rendering_shadowsSun_clamped = ss;
dfc.is_rendering_lightShafts = dfc.lightShafts;
}
boolean flag = false;
if (EaglerDeferredPipeline.instance == null) {
EaglerDeferredPipeline.instance = new EaglerDeferredPipeline(mc);
flag = true;
}
try {
SharedPipelineShaders.init();
EaglerDeferredPipeline.instance.rebuild(dfc);
EaglerDeferredPipeline.isSuspended = false;
} catch (Throwable ex) {
logger.error("Could not enable shaders!");
logger.error(ex);
EaglerDeferredPipeline.isSuspended = true;
}
if (flag && !EaglerDeferredPipeline.isSuspended) {
ChatComponentText shaderF4Msg = new ChatComponentText("[EaglercraftX] ");
shaderF4Msg.getChatStyle().setColor(EnumChatFormatting.GOLD);
ChatComponentTranslation shaderF4Msg2 = new ChatComponentTranslation("shaders.debugMenuTip",
Keyboard.getKeyName(mc.gameSettings.keyBindFunction.getKeyCode()));
shaderF4Msg2.getChatStyle().setColor(EnumChatFormatting.AQUA);
shaderF4Msg.appendSibling(shaderF4Msg2);
mc.ingameGUI.getChatGUI().printChatMessage(shaderF4Msg);
}
}
mc.gameSettings.shadersAODisable = mc.gameSettings.shaders
&& mc.gameSettings.deferredShaderConf.is_rendering_ssao;
if (!mc.gameSettings.shaders || EaglerDeferredPipeline.isSuspended) {
try {
if (EaglerDeferredPipeline.instance != null) {
EaglerDeferredPipeline.instance.destroy();
EaglerDeferredPipeline.instance = null;
}
} catch (Throwable ex) {
logger.error("Could not safely disable shaders!");
logger.error(ex);
}
SharedPipelineShaders.free();
}
if (DeferredStateManager.isDeferredRenderer()) {
DynamicLightsStateManager.disableDynamicLightsRender(false);
} else {
if (mc.gameSettings.enableDynamicLights) {
DynamicLightsStateManager.enableDynamicLightsRender();
} else {
DynamicLightsStateManager.disableDynamicLightsRender(true);
}
}
}
}
protected void stopChunkUpdates() {
this.chunksToUpdate.clear();
this.renderDispatcher.stopChunkUpdates();
}
public void createBindEntityOutlineFbs(int parInt1, int parInt2) {
}
public void renderEntities(Entity renderViewEntity, ICamera camera, float partialTicks) {
if (this.renderEntitiesStartupCounter > 0) {
--this.renderEntitiesStartupCounter;
} else {
boolean light = DynamicLightManager.isRenderingLights();
double d0 = renderViewEntity.prevPosX
+ (renderViewEntity.posX - renderViewEntity.prevPosX) * (double) partialTicks;
double d1 = renderViewEntity.prevPosY
+ (renderViewEntity.posY - renderViewEntity.prevPosY) * (double) partialTicks;
double d2 = renderViewEntity.prevPosZ
+ (renderViewEntity.posZ - renderViewEntity.prevPosZ) * (double) partialTicks;
TileEntityRendererDispatcher.instance.cacheActiveRenderInfo(this.theWorld, this.mc.getTextureManager(),
this.mc.fontRendererObj, this.mc.getRenderViewEntity(), partialTicks);
this.renderManager.cacheActiveRenderInfo(this.theWorld, this.mc.fontRendererObj,
this.mc.getRenderViewEntity(), this.mc.pointedEntity, this.mc.gameSettings, partialTicks);
this.countEntitiesTotal = 0;
this.countEntitiesRendered = 0;
this.countEntitiesHidden = 0;
Entity entity = this.mc.getRenderViewEntity();
double d3 = entity.lastTickPosX + (entity.posX - entity.lastTickPosX) * (double) partialTicks;
double d4 = entity.lastTickPosY + (entity.posY - entity.lastTickPosY) * (double) partialTicks;
double d5 = entity.lastTickPosZ + (entity.posZ - entity.lastTickPosZ) * (double) partialTicks;
TileEntityRendererDispatcher.staticPlayerX = d3;
TileEntityRendererDispatcher.staticPlayerY = d4;
TileEntityRendererDispatcher.staticPlayerZ = d5;
this.renderManager.setRenderPosition(d3, d4, d5);
this.mc.entityRenderer.enableLightmap();
List list = this.theWorld.getLoadedEntityList();
this.countEntitiesTotal = list.size();
if (!DeferredStateManager.isDeferredRenderer()) {
for (int i = 0; i < this.theWorld.weatherEffects.size(); ++i) {
Entity entity1 = (Entity) this.theWorld.weatherEffects.get(i);
++this.countEntitiesRendered;
if (entity1.isInRangeToRender3d(d0, d1, d2)) {
if (light) {
entity1.renderDynamicLightsEagler(partialTicks, true);
}
this.renderManager.renderEntitySimple(entity1, partialTicks);
}
}
}
label738: for (int ii = 0, ll = this.renderInfos.size(); ii < ll; ++ii) {
RenderGlobal.ContainerLocalRenderInformation renderglobal$containerlocalrenderinformation = this.renderInfos
.get(ii);
Chunk chunk = this.theWorld.getChunkFromBlockCoords(
renderglobal$containerlocalrenderinformation.renderChunk.getPosition());
ClassInheritanceMultiMap classinheritancemultimap = chunk
.getEntityLists()[renderglobal$containerlocalrenderinformation.renderChunk.getPosition().getY()
/ 16];
if (!classinheritancemultimap.isEmpty()) {
Iterator iterator = classinheritancemultimap.iterator();
while (true) {
Entity entity2;
boolean flag2;
while (true) {
if (!iterator.hasNext()) {
continue label738;
}
entity2 = (Entity) iterator.next();
flag2 = this.renderManager.shouldRender(entity2, camera, d0, d1, d2)
|| entity2.riddenByEntity == this.mc.thePlayer;
if (light) {
entity2.renderDynamicLightsEagler(partialTicks, flag2);
}
if (!flag2) {
break;
}
boolean flag3 = this.mc.getRenderViewEntity() instanceof EntityLivingBase
? ((EntityLivingBase) this.mc.getRenderViewEntity()).isPlayerSleeping()
: false;
if ((entity2 != this.mc.getRenderViewEntity() || this.mc.gameSettings.thirdPersonView != 0
|| flag3)
&& (entity2.posY < 0.0D || entity2.posY >= 256.0D
|| this.theWorld.isBlockLoaded(new BlockPos(entity2)))) {
++this.countEntitiesRendered;
this.renderManager.renderEntitySimple(entity2, partialTicks);
break;
}
}
if (!flag2 && entity2 instanceof EntityWitherSkull) {
this.mc.getRenderManager().renderWitherSkull(entity2, partialTicks);
}
}
}
}
RenderHelper.enableStandardItemLighting();
for (int ii = 0, ll = this.renderInfos.size(); ii < ll; ++ii) {
RenderGlobal.ContainerLocalRenderInformation renderglobal$containerlocalrenderinformation1 = this.renderInfos
.get(ii);
List list1 = renderglobal$containerlocalrenderinformation1.renderChunk.getCompiledChunk()
.getTileEntities();
if (!list1.isEmpty()) {
for (int m = 0, n = list1.size(); m < n; ++m) {
TileEntityRendererDispatcher.instance.renderTileEntity((TileEntity) list1.get(m), partialTicks,
-1);
}
}
}
synchronized (this.field_181024_n) {
for (TileEntity tileentity : this.field_181024_n) {
TileEntityRendererDispatcher.instance.renderTileEntity(tileentity, partialTicks, -1);
}
}
this.preRenderDamagedBlocks();
for (DestroyBlockProgress destroyblockprogress : this.damagedBlocks.values()) {
BlockPos blockpos = destroyblockprogress.getPosition();
TileEntity tileentity1 = this.theWorld.getTileEntity(blockpos);
if (tileentity1 instanceof TileEntityChest) {
TileEntityChest tileentitychest = (TileEntityChest) tileentity1;
if (tileentitychest.adjacentChestXNeg != null) {
blockpos = blockpos.offset(EnumFacing.WEST);
tileentity1 = this.theWorld.getTileEntity(blockpos);
} else if (tileentitychest.adjacentChestZNeg != null) {
blockpos = blockpos.offset(EnumFacing.NORTH);
tileentity1 = this.theWorld.getTileEntity(blockpos);
}
}
Block block = this.theWorld.getBlockState(blockpos).getBlock();
if (tileentity1 != null && (block instanceof BlockChest || block instanceof BlockEnderChest
|| block instanceof BlockSign || block instanceof BlockSkull)) {
TileEntityRendererDispatcher.instance.renderTileEntity(tileentity1, partialTicks,
destroyblockprogress.getPartialBlockDamage());
}
}
this.postRenderDamagedBlocks();
this.mc.entityRenderer.disableLightmap();
}
}
public static interface EntityChunkCullAdapter {
boolean shouldCull(RenderChunk renderChunk);
}
public static interface EntityObjectCullAdapter {
boolean shouldCull(RenderChunk renderChunk, RenderManager renderManager, Entity entity);
}
public void renderShadowLODEntities(Entity renderViewEntity, float partialTicks,
EntityChunkCullAdapter entityChunkCull, EntityObjectCullAdapter entityObjectCull) { // TODO
if (renderEntitiesStartupCounter <= 0) {
TileEntityRendererDispatcher.instance.cacheActiveRenderInfo(theWorld, mc.getTextureManager(),
mc.fontRendererObj, renderViewEntity, partialTicks);
renderManager.cacheActiveRenderInfo(theWorld, mc.fontRendererObj, renderViewEntity, mc.pointedEntity,
mc.gameSettings, partialTicks);
double d3 = renderViewEntity.lastTickPosX
+ (renderViewEntity.posX - renderViewEntity.lastTickPosX) * (double) partialTicks;
double d4 = renderViewEntity.lastTickPosY
+ (renderViewEntity.posY - renderViewEntity.lastTickPosY) * (double) partialTicks;
double d5 = renderViewEntity.lastTickPosZ
+ (renderViewEntity.posZ - renderViewEntity.lastTickPosZ) * (double) partialTicks;
TileEntityRendererDispatcher.staticPlayerX = d3;
TileEntityRendererDispatcher.staticPlayerY = d4;
TileEntityRendererDispatcher.staticPlayerZ = d5;
renderManager.setRenderPosition(d3, d4, d5);
for (RenderGlobal.ContainerLocalRenderInformation containerlocalrenderinformation : this.renderInfos) {
RenderChunk currentRenderChunk = containerlocalrenderinformation.renderChunk;
if (!entityChunkCull.shouldCull(currentRenderChunk)) {
Chunk chunk = this.theWorld
.getChunkFromBlockCoords(containerlocalrenderinformation.renderChunk.getPosition());
ClassInheritanceMultiMap<Entity> classinheritancemultimap = chunk
.getEntityLists()[containerlocalrenderinformation.renderChunk.getPosition().getY() / 16];
if (!classinheritancemultimap.isEmpty()) {
Iterator<Entity> iterator = classinheritancemultimap.iterator();
while (iterator.hasNext()) {
Entity entity2 = iterator.next();
if (!entityObjectCull.shouldCull(currentRenderChunk, renderManager, entity2)
|| entity2.riddenByEntity == this.mc.thePlayer) {
if (entity2.posY < 0.0D || entity2.posY >= 256.0D
|| this.theWorld.isBlockLoaded(new BlockPos(entity2))) {
++this.countEntitiesRendered;
this.renderManager.renderEntitySimple(entity2, partialTicks);
mc.entityRenderer.disableLightmap();
GlStateManager.disableShaderBlendAdd();
GlStateManager.disableBlend();
GlStateManager.depthMask(true);
}
}
}
// TODO: why?
// if (!flag2 && entity2 instanceof EntityWitherSkull) {
// this.mc.getRenderManager().renderWitherSkull(entity2, partialTicks);
// }
}
List<TileEntity> tileEntities = currentRenderChunk.compiledChunk.getTileEntities();
for (int i = 0, l = tileEntities.size(); i < l; ++i) {
TileEntityRendererDispatcher.instance.renderTileEntity(tileEntities.get(i), partialTicks, -1);
mc.entityRenderer.disableLightmap();
GlStateManager.disableShaderBlendAdd();
GlStateManager.disableBlend();
GlStateManager.depthMask(true);
}
}
}
synchronized (this.field_181024_n) {
for (TileEntity tileentity : this.field_181024_n) {
TileEntityRendererDispatcher.instance.renderTileEntity(tileentity, partialTicks, -1);
mc.entityRenderer.disableLightmap();
GlStateManager.disableShaderBlendAdd();
GlStateManager.disableBlend();
GlStateManager.depthMask(true);
}
}
}
}
public void renderParaboloidTileEntities(Entity renderViewEntity, float partialTicks, int up) {
if (renderEntitiesStartupCounter <= 0) {
TileEntityRendererDispatcher.instance.cacheActiveRenderInfo(theWorld, mc.getTextureManager(),
mc.fontRendererObj, renderViewEntity, partialTicks);
renderManager.cacheActiveRenderInfo(theWorld, mc.fontRendererObj, renderViewEntity, mc.pointedEntity,
mc.gameSettings, partialTicks);
double d3 = renderViewEntity.lastTickPosX
+ (renderViewEntity.posX - renderViewEntity.lastTickPosX) * (double) partialTicks;
double d4 = renderViewEntity.lastTickPosY
+ (renderViewEntity.posY - renderViewEntity.lastTickPosY) * (double) partialTicks;
double d5 = renderViewEntity.lastTickPosZ
+ (renderViewEntity.posZ - renderViewEntity.lastTickPosZ) * (double) partialTicks;
TileEntityRendererDispatcher.staticPlayerX = d3;
TileEntityRendererDispatcher.staticPlayerY = d4;
TileEntityRendererDispatcher.staticPlayerZ = d5;
renderManager.setRenderPosition(d3, d4, d5);
double rad = 8.0;
int minX = (int) (d3 - rad);
int minY = (int) d4;
if (up == -1) {
minY -= rad;
}
int minZ = (int) (d5 - rad);
int maxX = (int) (d3 + rad);
int maxY = (int) d4;
if (up == 1) {
maxY += rad;
}
int maxZ = (int) (d5 + rad);
BlockPos tmp = new BlockPos(0, 0, 0);
minX = MathHelper.floor_double(minX / 16.0) * 16;
minY = MathHelper.floor_double(minY / 16.0) * 16;
minZ = MathHelper.floor_double(minZ / 16.0) * 16;
maxX = MathHelper.floor_double(maxX / 16.0) * 16;
maxY = MathHelper.floor_double(maxY / 16.0) * 16;
maxZ = MathHelper.floor_double(maxZ / 16.0) * 16;
for (int cx = minX; cx <= maxX; cx += 16) {
for (int cz = minZ; cz <= maxZ; cz += 16) {
for (int cy = minY; cy <= maxY; cy += 16) {
tmp.x = cx;
tmp.y = cy;
tmp.z = cz;
RenderChunk ch = viewFrustum.getRenderChunk(tmp);
CompiledChunk cch;
if (ch != null && (cch = ch.compiledChunk) != null) {
List<TileEntity> tileEntities = cch.getTileEntities();
for (int i = 0, l = tileEntities.size(); i < l; ++i) {
mc.entityRenderer.enableLightmap();
TileEntityRendererDispatcher.instance.renderTileEntity(tileEntities.get(i),
partialTicks, -1);
GlStateManager.disableShaderBlendAdd();
GlStateManager.disableBlend();
GlStateManager.depthMask(true);
}
}
}
}
}
mc.entityRenderer.disableLightmap();
}
}
private boolean isOutlineActive(Entity p_184383_1_, Entity p_184383_2_, ICamera p_184383_3_) {
boolean flag = p_184383_2_ instanceof EntityLivingBase && ((EntityLivingBase) p_184383_2_).isPlayerSleeping();
return p_184383_1_ == p_184383_2_ && this.mc.gameSettings.thirdPersonView == 0 && !flag ? false
: (p_184383_1_.isGlowing() ? true
: (this.mc.thePlayer.isSpectator() && false
// : (this.mc.thePlayer.isSpectator() &&
// this.mc.gameSettings.keyBindSpectatorOutlines.isKeyDown() // TODO: add this
&& p_184383_1_ instanceof EntityPlayer
? p_184383_1_.ignoreFrustumCheck
|| p_184383_3_
.isBoundingBoxInFrustum(p_184383_1_.getEntityBoundingBox())
|| p_184383_1_.riddenByEntity == this.mc.thePlayer
: false));
}
/**
* +
* Gets the render info for use on the Debug screen
*/
public String getDebugInfoRenders() {
int i = this.viewFrustum.renderChunks.length;
int j = 0;
for (int ii = 0, ll = this.renderInfos.size(); ii < ll; ++ii) {
RenderGlobal.ContainerLocalRenderInformation renderglobal$containerlocalrenderinformation = this.renderInfos
.get(ii);
CompiledChunk compiledchunk = renderglobal$containerlocalrenderinformation.renderChunk.compiledChunk;
if (compiledchunk != CompiledChunk.DUMMY && !compiledchunk.isEmpty()) {
++j;
}
}
return HString.format("C: %d/%d %sD: %d, %s",
new Object[] { Integer.valueOf(j), Integer.valueOf(i), this.mc.renderChunksMany ? "(s) " : "",
Integer.valueOf(this.renderDistanceChunks), this.renderDispatcher.getDebugInfo() });
}
/**
* +
* Gets the entities info for use on the Debug screen
*/
public String getDebugInfoEntities() {
return "E: " + this.countEntitiesRendered + "/" + this.countEntitiesTotal + ", B: " + this.countEntitiesHidden
+ ", I: " + (this.countEntitiesTotal - this.countEntitiesHidden - this.countEntitiesRendered);
}
public void setupTerrain(Entity viewEntity, double partialTicks, ICamera camera, int frameCount,
boolean playerSpectator) {
if (this.mc.gameSettings.renderDistanceChunks != this.renderDistanceChunks) {
this.loadRenderers();
}
double d0 = viewEntity.posX - this.frustumUpdatePosX;
double d1 = viewEntity.posY - this.frustumUpdatePosY;
double d2 = viewEntity.posZ - this.frustumUpdatePosZ;
if (this.frustumUpdatePosChunkX != viewEntity.chunkCoordX
|| this.frustumUpdatePosChunkY != viewEntity.chunkCoordY
|| this.frustumUpdatePosChunkZ != viewEntity.chunkCoordZ || d0 * d0 + d1 * d1 + d2 * d2 > 16.0D) {
this.frustumUpdatePosX = viewEntity.posX;
this.frustumUpdatePosY = viewEntity.posY;
this.frustumUpdatePosZ = viewEntity.posZ;
this.frustumUpdatePosChunkX = viewEntity.chunkCoordX;
this.frustumUpdatePosChunkY = viewEntity.chunkCoordY;
this.frustumUpdatePosChunkZ = viewEntity.chunkCoordZ;
this.viewFrustum.updateChunkPositions(viewEntity.posX, viewEntity.posZ);
}
double d3 = viewEntity.lastTickPosX + (viewEntity.posX - viewEntity.lastTickPosX) * partialTicks;
double d4 = viewEntity.lastTickPosY + (viewEntity.posY - viewEntity.lastTickPosY) * partialTicks;
double d5 = viewEntity.lastTickPosZ + (viewEntity.posZ - viewEntity.lastTickPosZ) * partialTicks;
this.renderContainer.initialize(d3, d4, d5);
if (this.debugFixedClippingHelper != null) {
Frustum frustum = new Frustum(this.debugFixedClippingHelper);
frustum.setPosition(this.debugTerrainFrustumPosition.field_181059_a,
this.debugTerrainFrustumPosition.field_181060_b, this.debugTerrainFrustumPosition.field_181061_c);
camera = frustum;
}
BlockPos blockpos1 = new BlockPos(d3, d4 + (double) viewEntity.getEyeHeight(), d5);
RenderChunk renderchunk = this.viewFrustum.getRenderChunk(blockpos1);
BlockPos blockpos = new BlockPos(MathHelper.floor_double(d3 / 16.0D) * 16,
MathHelper.floor_double(d4 / 16.0D) * 16, MathHelper.floor_double(d5 / 16.0D) * 16);
this.displayListEntitiesDirty = this.displayListEntitiesDirty || !this.chunksToUpdate.isEmpty()
|| viewEntity.posX != this.lastViewEntityX || viewEntity.posY != this.lastViewEntityY
|| viewEntity.posZ != this.lastViewEntityZ
|| (double) viewEntity.rotationPitch != this.lastViewEntityPitch
|| (double) viewEntity.rotationYaw != this.lastViewEntityYaw
|| this.mc.entityRenderer.currentProjMatrixFOV != this.lastViewProjMatrixFOV;
this.lastViewEntityX = viewEntity.posX;
this.lastViewEntityY = viewEntity.posY;
this.lastViewEntityZ = viewEntity.posZ;
this.lastViewEntityPitch = (double) viewEntity.rotationPitch;
this.lastViewEntityYaw = (double) viewEntity.rotationYaw;
this.lastViewProjMatrixFOV = this.mc.entityRenderer.currentProjMatrixFOV;
boolean flag = this.debugFixedClippingHelper != null;
if (!flag && this.displayListEntitiesDirty) {
this.displayListEntitiesDirty = false;
this.renderInfos = Lists.newArrayList();
LinkedList linkedlist = Lists.newLinkedList();
boolean flag1 = this.mc.renderChunksMany;
if (renderchunk != null) {
boolean flag2 = false;
RenderGlobal.ContainerLocalRenderInformation renderglobal$containerlocalrenderinformation3 = new RenderGlobal.ContainerLocalRenderInformation(
renderchunk, (EnumFacing) null, 0);
Set set1 = this.getVisibleFacings(blockpos1);
// if (set1.size() == 1) {
// Vector3f vector3f = this.getViewVector(viewEntity, partialTicks);
// EnumFacing enumfacing = EnumFacing.getFacingFromVector(vector3f.x,
// vector3f.y, vector3f.z)
// .getOpposite();
// set1.remove(enumfacing);
// }
if (set1.isEmpty()) {
flag2 = true;
}
if (flag2 && !playerSpectator) {
this.renderInfos.add(renderglobal$containerlocalrenderinformation3);
} else {
if (playerSpectator && this.theWorld.getBlockState(blockpos1).getBlock().isOpaqueCube()) {
flag1 = false;
}
renderchunk.setFrameIndex(frameCount);
linkedlist.add(renderglobal$containerlocalrenderinformation3);
}
} else {
int i = blockpos1.getY() > 0 ? 248 : 8;
for (int j = -this.renderDistanceChunks; j <= this.renderDistanceChunks; ++j) {
for (int k = -this.renderDistanceChunks; k <= this.renderDistanceChunks; ++k) {
RenderChunk renderchunk1 = this.viewFrustum
.getRenderChunk(new BlockPos((j << 4) + 8, i, (k << 4) + 8));
if (renderchunk1 != null
&& ((ICamera) camera).isBoundingBoxInFrustum(renderchunk1.boundingBox)) {
renderchunk1.setFrameIndex(frameCount);
linkedlist.add(new RenderGlobal.ContainerLocalRenderInformation(renderchunk1,
(EnumFacing) null, 0));
}
}
}
}
while (!linkedlist.isEmpty()) {
RenderGlobal.ContainerLocalRenderInformation renderglobal$containerlocalrenderinformation1 = (RenderGlobal.ContainerLocalRenderInformation) linkedlist
.poll();
RenderChunk renderchunk3 = renderglobal$containerlocalrenderinformation1.renderChunk;
EnumFacing enumfacing2 = renderglobal$containerlocalrenderinformation1.facing;
BlockPos blockpos2 = renderchunk3.getPosition();
this.renderInfos.add(renderglobal$containerlocalrenderinformation1);
EnumFacing[] facings = EnumFacing._VALUES;
for (int i = 0; i < facings.length; ++i) {
EnumFacing enumfacing1 = facings[i];
RenderChunk renderchunk2 = this.func_181562_a(blockpos, renderchunk3, enumfacing1);
if ((!flag1 || !renderglobal$containerlocalrenderinformation1.setFacing // TODO:
.contains(enumfacing1.getOpposite()))
&& (!flag1 || enumfacing2 == null
|| renderchunk3.getCompiledChunk().isVisible(enumfacing2.getOpposite(),
enumfacing1))
&& renderchunk2 != null && renderchunk2.setFrameIndex(frameCount)
&& ((ICamera) camera).isBoundingBoxInFrustum(renderchunk2.boundingBox)) {
RenderGlobal.ContainerLocalRenderInformation renderglobal$containerlocalrenderinformation = new RenderGlobal.ContainerLocalRenderInformation(
renderchunk2, enumfacing1, renderglobal$containerlocalrenderinformation1.counter + 1);
renderglobal$containerlocalrenderinformation.setFacing
.addAll(renderglobal$containerlocalrenderinformation1.setFacing);
renderglobal$containerlocalrenderinformation.setFacing.add(enumfacing1);
linkedlist.add(renderglobal$containerlocalrenderinformation);
}
}
}
}
if (this.debugFixTerrainFrustum) {
this.fixTerrainFrustum(d3, d4, d5);
this.debugFixTerrainFrustum = false;
}
Set set = this.chunksToUpdate;
this.chunksToUpdate = Sets.newLinkedHashSet();
for (int ii = 0, ll = this.renderInfos.size(); ii < ll; ++ii) {
RenderGlobal.ContainerLocalRenderInformation renderglobal$containerlocalrenderinformation2 = this.renderInfos
.get(ii);
RenderChunk renderchunk4 = renderglobal$containerlocalrenderinformation2.renderChunk;
if (renderchunk4.isNeedsUpdate() || set.contains(renderchunk4)) {
this.displayListEntitiesDirty = true;
if (this.mc.gameSettings.chunkFix ? this.isPositionInRenderChunkHack(blockpos1, renderchunk4)
: this.isPositionInRenderChunk(blockpos, renderchunk4)) {
this.renderDispatcher.updateChunkNow(renderchunk4);
renderchunk4.setNeedsUpdate(false);
} else {
this.chunksToUpdate.add(renderchunk4);
}
}
}
this.chunksToUpdate.addAll(set);
}
private boolean isPositionInRenderChunk(BlockPos pos, RenderChunk renderChunkIn) {
BlockPos blockpos = renderChunkIn.getPosition();
return MathHelper.abs_int(pos.getX() - blockpos.getX()) > 16 ? false
: (MathHelper.abs_int(pos.getY() - blockpos.getY()) > 16 ? false
: MathHelper.abs_int(pos.getZ() - blockpos.getZ()) <= 16);
}
/**
* WARNING: use only in the above "build near" logic
*/
private boolean isPositionInRenderChunkHack(BlockPos pos, RenderChunk renderChunkIn) {
BlockPos blockpos = renderChunkIn.getPosition();
return MathHelper.abs_int(pos.getX() - blockpos.getX() - 8) > 11 ? false
: (MathHelper.abs_int(pos.getY() - blockpos.getY() - 8) > 11 ? false
: MathHelper.abs_int(pos.getZ() - blockpos.getZ() - 8) <= 11);
}
private Set<EnumFacing> getVisibleFacings(BlockPos pos) {
VisGraph visgraph = new VisGraph();
visgraph.setLimitScan(true);
BlockPos blockpos = new BlockPos(pos.getX() >> 4 << 4, pos.getY() >> 4 << 4, pos.getZ() >> 4 << 4);
Chunk chunk = this.theWorld.getChunkFromBlockCoords(blockpos);
for (BlockPos.MutableBlockPos blockpos$mutableblockpos : BlockPos.getAllInBoxMutable(blockpos,
blockpos.add(15, 15, 15))) {
if (chunk.getBlock(blockpos$mutableblockpos).isOpaqueCube()) {
visgraph.func_178606_a(blockpos$mutableblockpos);
}
}
return visgraph.func_178609_b(pos);
}
private RenderChunk func_181562_a(BlockPos parBlockPos, RenderChunk parRenderChunk, EnumFacing parEnumFacing) {
BlockPos blockpos = parRenderChunk.func_181701_a(parEnumFacing);
return MathHelper
.abs_int(parBlockPos.getX() - blockpos.getX()) > this.renderDistanceChunks * 16
? null
: (blockpos.getY() >= 0 && blockpos.getY() < 256
? (MathHelper.abs_int(parBlockPos.getZ() - blockpos.getZ()) > this.renderDistanceChunks
* 16 ? null : this.viewFrustum.getRenderChunk(blockpos))
: null);
}
private void fixTerrainFrustum(double x, double y, double z) {
this.debugFixedClippingHelper = new ClippingHelperImpl();
((ClippingHelperImpl) this.debugFixedClippingHelper).init();
((ClippingHelperImpl) this.debugFixedClippingHelper).destroy();
Matrix4f matrix4f = new Matrix4f(this.debugFixedClippingHelper.modelviewMatrix);
matrix4f.transpose();
Matrix4f matrix4f1 = new Matrix4f(this.debugFixedClippingHelper.projectionMatrix);
matrix4f1.transpose();
Matrix4f matrix4f2 = new Matrix4f();
Matrix4f.mul(matrix4f1, matrix4f, matrix4f2);
matrix4f2.invert();
this.debugTerrainFrustumPosition.field_181059_a = x;
this.debugTerrainFrustumPosition.field_181060_b = y;
this.debugTerrainFrustumPosition.field_181061_c = z;
this.debugTerrainMatrix[0] = new Vector4f(-1.0F, -1.0F, -1.0F, 1.0F);
this.debugTerrainMatrix[1] = new Vector4f(1.0F, -1.0F, -1.0F, 1.0F);
this.debugTerrainMatrix[2] = new Vector4f(1.0F, 1.0F, -1.0F, 1.0F);
this.debugTerrainMatrix[3] = new Vector4f(-1.0F, 1.0F, -1.0F, 1.0F);
this.debugTerrainMatrix[4] = new Vector4f(-1.0F, -1.0F, 1.0F, 1.0F);
this.debugTerrainMatrix[5] = new Vector4f(1.0F, -1.0F, 1.0F, 1.0F);
this.debugTerrainMatrix[6] = new Vector4f(1.0F, 1.0F, 1.0F, 1.0F);
this.debugTerrainMatrix[7] = new Vector4f(-1.0F, 1.0F, 1.0F, 1.0F);
for (int i = 0; i < 8; ++i) {
Matrix4f.transform(matrix4f2, this.debugTerrainMatrix[i], this.debugTerrainMatrix[i]);
this.debugTerrainMatrix[i].x /= this.debugTerrainMatrix[i].w;
this.debugTerrainMatrix[i].y /= this.debugTerrainMatrix[i].w;
this.debugTerrainMatrix[i].z /= this.debugTerrainMatrix[i].w;
this.debugTerrainMatrix[i].w = 1.0F;
}
}
protected Vector3f getViewVector(Entity entityIn, double partialTicks) {
float f = (float) ((double) entityIn.prevRotationPitch
+ (double) (entityIn.rotationPitch - entityIn.prevRotationPitch) * partialTicks);
float f1 = (float) ((double) entityIn.prevRotationYaw
+ (double) (entityIn.rotationYaw - entityIn.prevRotationYaw) * partialTicks);
if (Minecraft.getMinecraft().gameSettings.thirdPersonView == 2) {
f += 180.0F;
}
float f2 = MathHelper.cos(-f1 * 0.017453292F - 3.1415927F);
float f3 = MathHelper.sin(-f1 * 0.017453292F - 3.1415927F);
float f4 = -MathHelper.cos(-f * 0.017453292F);
float f5 = MathHelper.sin(-f * 0.017453292F);
return new Vector3f(f3 * f4, f5, f2 * f4);
}
public int renderBlockLayer(EnumWorldBlockLayer blockLayerIn, double partialTicks, int pass, Entity entityIn) {
RenderHelper.disableStandardItemLighting();
if (blockLayerIn == EnumWorldBlockLayer.TRANSLUCENT) {
double d0 = entityIn.posX - this.prevRenderSortX;
double d1 = entityIn.posY - this.prevRenderSortY;
double d2 = entityIn.posZ - this.prevRenderSortZ;
if (d0 * d0 + d1 * d1 + d2 * d2 > 1.0D) {
this.prevRenderSortX = entityIn.posX;
this.prevRenderSortY = entityIn.posY;
this.prevRenderSortZ = entityIn.posZ;
int k = 0;
for (int ii = 0, ll = this.renderInfos.size(); ii < ll; ++ii) {
RenderGlobal.ContainerLocalRenderInformation renderglobal$containerlocalrenderinformation = this.renderInfos
.get(ii);
if (renderglobal$containerlocalrenderinformation.renderChunk.compiledChunk
.isLayerStarted(blockLayerIn) && k++ < 15) {
this.renderDispatcher
.updateTransparencyLater(renderglobal$containerlocalrenderinformation.renderChunk);
}
}
}
}
int l = 0;
boolean flag = blockLayerIn == EnumWorldBlockLayer.TRANSLUCENT;
int i1 = flag ? this.renderInfos.size() - 1 : 0;
int i = flag ? -1 : this.renderInfos.size();
int j1 = flag ? -1 : 1;
for (int j = i1; j != i; j += j1) {
RenderChunk renderchunk = ((RenderGlobal.ContainerLocalRenderInformation) this.renderInfos
.get(j)).renderChunk;
if (!renderchunk.getCompiledChunk().isLayerEmpty(blockLayerIn)) {
++l;
this.renderContainer.addRenderChunk(renderchunk, blockLayerIn);
}
}
this.renderBlockLayer(blockLayerIn);
return l;
}
public static interface ChunkCullAdapter {
boolean shouldCull(RenderChunk chunk);
}
public int renderBlockLayerShadow(EnumWorldBlockLayer blockLayerIn, AxisAlignedBB boundingBox,
ChunkCullAdapter cullAdapter) {
int i = 0;
BlockPos tmp = new BlockPos(0, 0, 0);
int minXChunk = MathHelper.floor_double(boundingBox.minX / 16.0) * 16;
int minYChunk = MathHelper.floor_double(boundingBox.minY / 16.0) * 16;
int minZChunk = MathHelper.floor_double(boundingBox.minZ / 16.0) * 16;
int maxXChunk = MathHelper.floor_double(boundingBox.maxX / 16.0) * 16;
int maxYChunk = MathHelper.floor_double(boundingBox.maxY / 16.0) * 16;
int maxZChunk = MathHelper.floor_double(boundingBox.maxZ / 16.0) * 16;
for (int cx = minXChunk; cx <= maxXChunk; cx += 16) {
for (int cz = minZChunk; cz <= maxZChunk; cz += 16) {
for (int cy = minYChunk; cy <= maxYChunk; cy += 16) {
tmp.x = cx;
tmp.y = cy;
tmp.z = cz;
RenderChunk ch = viewFrustum.getRenderChunk(tmp);
CompiledChunk cch;
if (ch != null && (cch = ch.getCompiledChunk()) != null && !cch.isLayerEmpty(blockLayerIn)
&& !cullAdapter.shouldCull(ch)) {
this.renderContainer.addRenderChunk(ch, blockLayerIn);
++i;
}
}
}
}
if (i > 0) {
this.renderContainer.renderChunkLayer(blockLayerIn);
}
return i;
}
private void renderBlockLayer(EnumWorldBlockLayer blockLayerIn) {
this.mc.entityRenderer.enableLightmap();
this.renderContainer.renderChunkLayer(blockLayerIn);
this.mc.entityRenderer.disableLightmap();
}
public int renderParaboloidBlockLayer(EnumWorldBlockLayer blockLayerIn, double partialTicks, int up,
Entity entityIn) {
double rad = 8.0;
int minX = (int) (entityIn.posX - rad);
int minY = (int) entityIn.posY;
if (up == -1) {
minY -= rad * 0.75;
} else {
minY += 1.0;
}
int minZ = (int) (entityIn.posZ - rad);
int maxX = (int) (entityIn.posX + rad);
int maxY = (int) entityIn.posY;
if (up == 1) {
maxY += rad;
} else {
maxY += 2.0;
}
int maxZ = (int) (entityIn.posZ + rad);
BlockPos tmp = new BlockPos(0, 0, 0);
minX = MathHelper.floor_double(minX / 16.0) * 16;
minY = MathHelper.floor_double(minY / 16.0) * 16;
minZ = MathHelper.floor_double(minZ / 16.0) * 16;
maxX = MathHelper.floor_double(maxX / 16.0) * 16;
maxY = MathHelper.floor_double(maxY / 16.0) * 16;
maxZ = MathHelper.floor_double(maxZ / 16.0) * 16;
int i = 0;
for (int cx = minX; cx <= maxX; cx += 16) {
for (int cz = minZ; cz <= maxZ; cz += 16) {
for (int cy = minY; cy <= maxY; cy += 16) {
tmp.x = cx;
tmp.y = cy;
tmp.z = cz;
RenderChunk ch = viewFrustum.getRenderChunk(tmp);
CompiledChunk cch;
if (ch != null && (cch = ch.getCompiledChunk()) != null && !cch.isLayerEmpty(blockLayerIn)) {
this.renderContainer.addRenderChunk(ch, blockLayerIn);
++i;
}
}
}
}
if (i > 0) {
this.mc.entityRenderer.enableLightmap();
this.renderContainer.renderChunkLayer(blockLayerIn);
this.mc.entityRenderer.disableLightmap();
}
return i;
}
private void cleanupDamagedBlocks(Iterator<DestroyBlockProgress> iteratorIn) {
while (iteratorIn.hasNext()) {
DestroyBlockProgress destroyblockprogress = (DestroyBlockProgress) iteratorIn.next();
int i = destroyblockprogress.getCreationCloudUpdateTick();
if (this.cloudTickCounter - i > 400) {
iteratorIn.remove();
}
}
}
public void updateClouds() {
++this.cloudTickCounter;
if (this.cloudTickCounter % 20 == 0) {
this.cleanupDamagedBlocks(this.damagedBlocks.values().iterator());
}
}
private void renderSkyEnd() {
GlStateManager.disableFog();
GlStateManager.disableAlpha();
GlStateManager.enableBlend();
GlStateManager.tryBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, 1, 0);
RenderHelper.disableStandardItemLighting();
GlStateManager.depthMask(false);
this.renderEngine.bindTexture(locationEndSkyPng);
Tessellator tessellator = Tessellator.getInstance();
WorldRenderer worldrenderer = tessellator.getWorldRenderer();
for (int i = 0; i < 6; ++i) {
GlStateManager.pushMatrix();
if (i == 1) {
GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F);
}
if (i == 2) {
GlStateManager.rotate(-90.0F, 1.0F, 0.0F, 0.0F);
}
if (i == 3) {
GlStateManager.rotate(180.0F, 1.0F, 0.0F, 0.0F);
}
if (i == 4) {
GlStateManager.rotate(90.0F, 0.0F, 0.0F, 1.0F);
}
if (i == 5) {
GlStateManager.rotate(-90.0F, 0.0F, 0.0F, 1.0F);
}
worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR);
worldrenderer.pos(-100.0D, -100.0D, -100.0D).tex(0.0D, 0.0D).color(40, 40, 40, 255).endVertex();
worldrenderer.pos(-100.0D, -100.0D, 100.0D).tex(0.0D, 16.0D).color(40, 40, 40, 255).endVertex();
worldrenderer.pos(100.0D, -100.0D, 100.0D).tex(16.0D, 16.0D).color(40, 40, 40, 255).endVertex();
worldrenderer.pos(100.0D, -100.0D, -100.0D).tex(16.0D, 0.0D).color(40, 40, 40, 255).endVertex();
tessellator.draw();
GlStateManager.popMatrix();
}
GlStateManager.depthMask(true);
GlStateManager.enableTexture2D();
GlStateManager.enableAlpha();
}
public void renderSky(float partialTicks, int pass) {
if (this.mc.theWorld.provider.getDimensionId() == 1) {
this.renderSkyEnd();
} else if (this.mc.theWorld.provider.isSurfaceWorld()) {
GlStateManager.disableTexture2D();
Vec3 vec3 = this.theWorld.getSkyColor(this.mc.getRenderViewEntity(), partialTicks);
float f = (float) vec3.xCoord;
float f1 = (float) vec3.yCoord;
float f2 = (float) vec3.zCoord;
if (pass != 2) {
float f3 = (f * 30.0F + f1 * 59.0F + f2 * 11.0F) / 100.0F;
float f4 = (f * 30.0F + f1 * 70.0F) / 100.0F;
float f5 = (f * 30.0F + f2 * 70.0F) / 100.0F;
f = f3;
f1 = f4;
f2 = f5;
}
GlStateManager.color(f, f1, f2);
Tessellator tessellator = Tessellator.getInstance();
WorldRenderer worldrenderer = tessellator.getWorldRenderer();
GlStateManager.depthMask(false);
GlStateManager.enableFog();
GlStateManager.color(f, f1, f2);
GlStateManager.callList(this.glSkyList);
GlStateManager.disableFog();
GlStateManager.disableAlpha();
GlStateManager.enableBlend();
GlStateManager.tryBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, 1, 0);
RenderHelper.disableStandardItemLighting();
float[] afloat = this.theWorld.provider
.calcSunriseSunsetColors(this.theWorld.getCelestialAngle(partialTicks), partialTicks);
if (afloat != null) {
GlStateManager.disableTexture2D();
GlStateManager.shadeModel(GL_SMOOTH);
GlStateManager.pushMatrix();
GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F);
GlStateManager.rotate(
MathHelper.sin(this.theWorld.getCelestialAngleRadians(partialTicks)) < 0.0F ? 180.0F : 0.0F,
0.0F, 0.0F, 1.0F);
GlStateManager.rotate(90.0F, 0.0F, 0.0F, 1.0F);
float f6 = afloat[0];
float f7 = afloat[1];
float f8 = afloat[2];
if (pass != 2) {
float f9 = (f6 * 30.0F + f7 * 59.0F + f8 * 11.0F) / 100.0F;
float f10 = (f6 * 30.0F + f7 * 70.0F) / 100.0F;
float f11 = (f6 * 30.0F + f8 * 70.0F) / 100.0F;
f6 = f9;
f7 = f10;
f8 = f11;
}
worldrenderer.begin(6, DefaultVertexFormats.POSITION_COLOR);
worldrenderer.pos(0.0D, 100.0D, 0.0D).color(f6, f7, f8, afloat[3]).endVertex();
boolean flag = true;
for (int k = 0; k <= 16; ++k) {
float f21 = (float) k * 3.1415927F * 2.0F / 16.0F;
float f12 = MathHelper.sin(f21);
float f13 = MathHelper.cos(f21);
worldrenderer
.pos((double) (f12 * 120.0F), (double) (f13 * 120.0F), (double) (f13 * 40.0F * afloat[3]))
.color(afloat[0], afloat[1], afloat[2], 0.0F).endVertex();
}
tessellator.draw();
GlStateManager.popMatrix();
GlStateManager.shadeModel(GL_FLAT);
}
GlStateManager.enableTexture2D();
GlStateManager.tryBlendFuncSeparate(GL_SRC_ALPHA, 1, 1, 0);
GlStateManager.pushMatrix();
float f16 = 1.0F - this.theWorld.getRainStrength(partialTicks);
GlStateManager.color(1.0F, 1.0F, 1.0F, f16);
GlStateManager.rotate(-90.0F, 0.0F, 1.0F, 0.0F);
GlStateManager.rotate(this.theWorld.getCelestialAngle(partialTicks) * 360.0F, 1.0F, 0.0F, 0.0F);
float f17 = 30.0F;
this.renderEngine.bindTexture(locationSunPng);
worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX);
worldrenderer.pos((double) (-f17), 100.0D, (double) (-f17)).tex(0.0D, 0.0D).endVertex();
worldrenderer.pos((double) f17, 100.0D, (double) (-f17)).tex(1.0D, 0.0D).endVertex();
worldrenderer.pos((double) f17, 100.0D, (double) f17).tex(1.0D, 1.0D).endVertex();
worldrenderer.pos((double) (-f17), 100.0D, (double) f17).tex(0.0D, 1.0D).endVertex();
tessellator.draw();
f17 = 20.0F;
this.renderEngine.bindTexture(locationMoonPhasesPng);
int i = this.theWorld.getMoonPhase();
int j = i % 4;
int l = i / 4 % 2;
float f22 = (float) (j + 0) / 4.0F;
float f23 = (float) (l + 0) / 2.0F;
float f24 = (float) (j + 1) / 4.0F;
float f14 = (float) (l + 1) / 2.0F;
worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX);
worldrenderer.pos((double) (-f17), -100.0D, (double) f17).tex((double) f24, (double) f14).endVertex();
worldrenderer.pos((double) f17, -100.0D, (double) f17).tex((double) f22, (double) f14).endVertex();
worldrenderer.pos((double) f17, -100.0D, (double) (-f17)).tex((double) f22, (double) f23).endVertex();
worldrenderer.pos((double) (-f17), -100.0D, (double) (-f17)).tex((double) f24, (double) f23).endVertex();
tessellator.draw();
GlStateManager.disableTexture2D();
float f15 = this.theWorld.getStarBrightness(partialTicks) * f16;
if (f15 > 0.0F) {
GlStateManager.color(f15, f15, f15, f15);
GlStateManager.callList(this.starGLCallList);
}
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
GlStateManager.disableBlend();
GlStateManager.enableAlpha();
GlStateManager.enableFog();
GlStateManager.popMatrix();
GlStateManager.disableTexture2D();
GlStateManager.color(0.0F, 0.0F, 0.0F);
double d0 = this.mc.thePlayer.getPositionEyes(partialTicks).yCoord - this.theWorld.getHorizon();
if (d0 < 0.0D) {
GlStateManager.pushMatrix();
GlStateManager.translate(0.0F, 12.0F, 0.0F);
GlStateManager.callList(this.glSkyList2);
GlStateManager.popMatrix();
float f18 = 1.0F;
float f19 = -((float) (d0 + 65.0D));
float f20 = -1.0F;
worldrenderer.begin(7, DefaultVertexFormats.POSITION_COLOR);
worldrenderer.pos(-1.0D, (double) f19, 1.0D).color(0, 0, 0, 255).endVertex();
worldrenderer.pos(1.0D, (double) f19, 1.0D).color(0, 0, 0, 255).endVertex();
worldrenderer.pos(1.0D, -1.0D, 1.0D).color(0, 0, 0, 255).endVertex();
worldrenderer.pos(-1.0D, -1.0D, 1.0D).color(0, 0, 0, 255).endVertex();
worldrenderer.pos(-1.0D, -1.0D, -1.0D).color(0, 0, 0, 255).endVertex();
worldrenderer.pos(1.0D, -1.0D, -1.0D).color(0, 0, 0, 255).endVertex();
worldrenderer.pos(1.0D, (double) f19, -1.0D).color(0, 0, 0, 255).endVertex();
worldrenderer.pos(-1.0D, (double) f19, -1.0D).color(0, 0, 0, 255).endVertex();
worldrenderer.pos(1.0D, -1.0D, -1.0D).color(0, 0, 0, 255).endVertex();
worldrenderer.pos(1.0D, -1.0D, 1.0D).color(0, 0, 0, 255).endVertex();
worldrenderer.pos(1.0D, (double) f19, 1.0D).color(0, 0, 0, 255).endVertex();
worldrenderer.pos(1.0D, (double) f19, -1.0D).color(0, 0, 0, 255).endVertex();
worldrenderer.pos(-1.0D, (double) f19, -1.0D).color(0, 0, 0, 255).endVertex();
worldrenderer.pos(-1.0D, (double) f19, 1.0D).color(0, 0, 0, 255).endVertex();
worldrenderer.pos(-1.0D, -1.0D, 1.0D).color(0, 0, 0, 255).endVertex();
worldrenderer.pos(-1.0D, -1.0D, -1.0D).color(0, 0, 0, 255).endVertex();
worldrenderer.pos(-1.0D, -1.0D, -1.0D).color(0, 0, 0, 255).endVertex();
worldrenderer.pos(-1.0D, -1.0D, 1.0D).color(0, 0, 0, 255).endVertex();
worldrenderer.pos(1.0D, -1.0D, 1.0D).color(0, 0, 0, 255).endVertex();
worldrenderer.pos(1.0D, -1.0D, -1.0D).color(0, 0, 0, 255).endVertex();
tessellator.draw();
}
if (this.theWorld.provider.isSkyColored()) {
GlStateManager.color(f * 0.2F + 0.04F, f1 * 0.2F + 0.04F, f2 * 0.6F + 0.1F);
} else {
GlStateManager.color(f, f1, f2);
}
GlStateManager.pushMatrix();
GlStateManager.translate(0.0F, -((float) (d0 - 16.0D)), 0.0F);
GlStateManager.callList(this.glSkyList2);
GlStateManager.popMatrix();
GlStateManager.enableTexture2D();
GlStateManager.depthMask(true);
}
}
public void renderClouds(float partialTicks, int pass) {
if (this.mc.theWorld.provider.isSurfaceWorld()) {
if (this.mc.gameSettings.func_181147_e() == 2) {
this.renderCloudsFancy(partialTicks, pass);
} else {
GlStateManager.disableCull();
float f = (float) (this.mc.getRenderViewEntity().lastTickPosY
+ (this.mc.getRenderViewEntity().posY - this.mc.getRenderViewEntity().lastTickPosY)
* (double) partialTicks);
boolean flag = true;
boolean flag1 = true;
Tessellator tessellator = Tessellator.getInstance();
WorldRenderer worldrenderer = tessellator.getWorldRenderer();
this.renderEngine.bindTexture(locationCloudsPng);
GlStateManager.enableBlend();
GlStateManager.tryBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, 1, 0);
Vec3 vec3 = this.theWorld.getCloudColour(partialTicks);
float f1 = (float) vec3.xCoord;
float f2 = (float) vec3.yCoord;
float f3 = (float) vec3.zCoord;
if (pass != 2) {
float f4 = (f1 * 30.0F + f2 * 59.0F + f3 * 11.0F) / 100.0F;
float f5 = (f1 * 30.0F + f2 * 70.0F) / 100.0F;
float f6 = (f1 * 30.0F + f3 * 70.0F) / 100.0F;
f1 = f4;
f2 = f5;
f3 = f6;
}
float f10 = 4.8828125E-4F;
double d2 = (double) ((float) this.cloudTickCounter + partialTicks);
double d0 = this.mc.getRenderViewEntity().prevPosX
+ (this.mc.getRenderViewEntity().posX - this.mc.getRenderViewEntity().prevPosX)
* (double) partialTicks
+ d2 * 0.029999999329447746D;
double d1 = this.mc.getRenderViewEntity().prevPosZ
+ (this.mc.getRenderViewEntity().posZ - this.mc.getRenderViewEntity().prevPosZ)
* (double) partialTicks;
int i = MathHelper.floor_double(d0 / 2048.0D);
int j = MathHelper.floor_double(d1 / 2048.0D);
d0 = d0 - (double) (i * 2048);
d1 = d1 - (double) (j * 2048);
float f7 = this.theWorld.provider.getCloudHeight() - f + 0.33F;
float f8 = (float) (d0 * 4.8828125E-4D);
float f9 = (float) (d1 * 4.8828125E-4D);
worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR);
for (int k = -256; k < 256; k += 32) {
for (int l = -256; l < 256; l += 32) {
worldrenderer.pos((double) (k + 0), (double) f7, (double) (l + 32))
.tex((double) ((float) (k + 0) * 4.8828125E-4F + f8),
(double) ((float) (l + 32) * 4.8828125E-4F + f9))
.color(f1, f2, f3, 0.8F).endVertex();
worldrenderer.pos((double) (k + 32), (double) f7, (double) (l + 32))
.tex((double) ((float) (k + 32) * 4.8828125E-4F + f8),
(double) ((float) (l + 32) * 4.8828125E-4F + f9))
.color(f1, f2, f3, 0.8F).endVertex();
worldrenderer.pos((double) (k + 32), (double) f7, (double) (l + 0))
.tex((double) ((float) (k + 32) * 4.8828125E-4F + f8),
(double) ((float) (l + 0) * 4.8828125E-4F + f9))
.color(f1, f2, f3, 0.8F).endVertex();
worldrenderer.pos((double) (k + 0), (double) f7, (double) (l + 0))
.tex((double) ((float) (k + 0) * 4.8828125E-4F + f8),
(double) ((float) (l + 0) * 4.8828125E-4F + f9))
.color(f1, f2, f3, 0.8F).endVertex();
}
}
tessellator.draw();
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
GlStateManager.disableBlend();
GlStateManager.enableCull();
}
}
}
/**
* +
* Checks if the given position is to be rendered with cloud fog
*/
public boolean hasCloudFog(double x, double y, double z, float partialTicks) {
return false;
}
private void renderCloudsFancy(float partialTicks, int pass) {
GlStateManager.disableCull();
float f = (float) (this.mc.getRenderViewEntity().lastTickPosY
+ (this.mc.getRenderViewEntity().posY - this.mc.getRenderViewEntity().lastTickPosY)
* (double) partialTicks);
Tessellator tessellator = Tessellator.getInstance();
WorldRenderer worldrenderer = tessellator.getWorldRenderer();
float f1 = 12.0F;
float f2 = 4.0F;
double d0 = (double) ((float) this.cloudTickCounter + partialTicks);
double d1 = (this.mc.getRenderViewEntity().prevPosX
+ (this.mc.getRenderViewEntity().posX - this.mc.getRenderViewEntity().prevPosX) * (double) partialTicks
+ d0 * 0.029999999329447746D) / 12.0D;
double d2 = (this.mc.getRenderViewEntity().prevPosZ
+ (this.mc.getRenderViewEntity().posZ - this.mc.getRenderViewEntity().prevPosZ) * (double) partialTicks)
/ 12.0D + 0.33000001311302185D;
float f3 = this.theWorld.provider.getCloudHeight() - f + 0.33F;
int i = MathHelper.floor_double(d1 / 2048.0D);
int j = MathHelper.floor_double(d2 / 2048.0D);
d1 = d1 - (double) (i * 2048);
d2 = d2 - (double) (j * 2048);
this.renderEngine.bindTexture(locationCloudsPng);
GlStateManager.enableBlend();
GlStateManager.tryBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, 1, 0);
Vec3 vec3 = this.theWorld.getCloudColour(partialTicks);
float f4 = (float) vec3.xCoord;
float f5 = (float) vec3.yCoord;
float f6 = (float) vec3.zCoord;
if (pass != 2) {
float f7 = (f4 * 30.0F + f5 * 59.0F + f6 * 11.0F) / 100.0F;
float f8 = (f4 * 30.0F + f5 * 70.0F) / 100.0F;
float f9 = (f4 * 30.0F + f6 * 70.0F) / 100.0F;
f4 = f7;
f5 = f8;
f6 = f9;
}
float f26 = f4 * 0.9F;
float f27 = f5 * 0.9F;
float f28 = f6 * 0.9F;
float f10 = f4 * 0.7F;
float f11 = f5 * 0.7F;
float f12 = f6 * 0.7F;
float f13 = f4 * 0.8F;
float f14 = f5 * 0.8F;
float f15 = f6 * 0.8F;
float f16 = 0.00390625F;
float f17 = (float) MathHelper.floor_double(d1) * 0.00390625F;
float f18 = (float) MathHelper.floor_double(d2) * 0.00390625F;
float f19 = (float) (d1 - (double) MathHelper.floor_double(d1));
float f20 = (float) (d2 - (double) MathHelper.floor_double(d2));
boolean flag = true;
boolean flag1 = true;
float f21 = 9.765625E-4F;
GlStateManager.scale(12.0F, 1.0F, 12.0F);
for (int k = 0; k < 2; ++k) {
if (k == 0) {
GlStateManager.colorMask(false, false, false, false);
} else {
switch (pass) {
case 0:
GlStateManager.colorMask(false, true, true, true);
break;
case 1:
GlStateManager.colorMask(true, false, false, true);
break;
case 2:
GlStateManager.colorMask(true, true, true, true);
}
}
for (int l = -3; l <= 4; ++l) {
for (int i1 = -3; i1 <= 4; ++i1) {
worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR_NORMAL);
float f22 = (float) (l * 8);
float f23 = (float) (i1 * 8);
float f24 = f22 - f19;
float f25 = f23 - f20;
if (f3 > -5.0F) {
worldrenderer.pos((double) (f24 + 0.0F), (double) (f3 + 0.0F), (double) (f25 + 8.0F))
.tex((double) ((f22 + 0.0F) * 0.00390625F + f17),
(double) ((f23 + 8.0F) * 0.00390625F + f18))
.color(f10, f11, f12, 0.8F).normal(0.0F, -1.0F, 0.0F).endVertex();
worldrenderer.pos((double) (f24 + 8.0F), (double) (f3 + 0.0F), (double) (f25 + 8.0F))
.tex((double) ((f22 + 8.0F) * 0.00390625F + f17),
(double) ((f23 + 8.0F) * 0.00390625F + f18))
.color(f10, f11, f12, 0.8F).normal(0.0F, -1.0F, 0.0F).endVertex();
worldrenderer.pos((double) (f24 + 8.0F), (double) (f3 + 0.0F), (double) (f25 + 0.0F))
.tex((double) ((f22 + 8.0F) * 0.00390625F + f17),
(double) ((f23 + 0.0F) * 0.00390625F + f18))
.color(f10, f11, f12, 0.8F).normal(0.0F, -1.0F, 0.0F).endVertex();
worldrenderer.pos((double) (f24 + 0.0F), (double) (f3 + 0.0F), (double) (f25 + 0.0F))
.tex((double) ((f22 + 0.0F) * 0.00390625F + f17),
(double) ((f23 + 0.0F) * 0.00390625F + f18))
.color(f10, f11, f12, 0.8F).normal(0.0F, -1.0F, 0.0F).endVertex();
}
if (f3 <= 5.0F) {
worldrenderer
.pos((double) (f24 + 0.0F), (double) (f3 + 4.0F - 9.765625E-4F), (double) (f25 + 8.0F))
.tex((double) ((f22 + 0.0F) * 0.00390625F + f17),
(double) ((f23 + 8.0F) * 0.00390625F + f18))
.color(f4, f5, f6, 0.8F).normal(0.0F, 1.0F, 0.0F).endVertex();
worldrenderer
.pos((double) (f24 + 8.0F), (double) (f3 + 4.0F - 9.765625E-4F), (double) (f25 + 8.0F))
.tex((double) ((f22 + 8.0F) * 0.00390625F + f17),
(double) ((f23 + 8.0F) * 0.00390625F + f18))
.color(f4, f5, f6, 0.8F).normal(0.0F, 1.0F, 0.0F).endVertex();
worldrenderer
.pos((double) (f24 + 8.0F), (double) (f3 + 4.0F - 9.765625E-4F), (double) (f25 + 0.0F))
.tex((double) ((f22 + 8.0F) * 0.00390625F + f17),
(double) ((f23 + 0.0F) * 0.00390625F + f18))
.color(f4, f5, f6, 0.8F).normal(0.0F, 1.0F, 0.0F).endVertex();
worldrenderer
.pos((double) (f24 + 0.0F), (double) (f3 + 4.0F - 9.765625E-4F), (double) (f25 + 0.0F))
.tex((double) ((f22 + 0.0F) * 0.00390625F + f17),
(double) ((f23 + 0.0F) * 0.00390625F + f18))
.color(f4, f5, f6, 0.8F).normal(0.0F, 1.0F, 0.0F).endVertex();
}
if (l > -1) {
for (int j1 = 0; j1 < 8; ++j1) {
worldrenderer
.pos((double) (f24 + (float) j1 + 0.0F), (double) (f3 + 0.0F),
(double) (f25 + 8.0F))
.tex((double) ((f22 + (float) j1 + 0.5F) * 0.00390625F + f17),
(double) ((f23 + 8.0F) * 0.00390625F + f18))
.color(f26, f27, f28, 0.8F).normal(-1.0F, 0.0F, 0.0F).endVertex();
worldrenderer
.pos((double) (f24 + (float) j1 + 0.0F), (double) (f3 + 4.0F),
(double) (f25 + 8.0F))
.tex((double) ((f22 + (float) j1 + 0.5F) * 0.00390625F + f17),
(double) ((f23 + 8.0F) * 0.00390625F + f18))
.color(f26, f27, f28, 0.8F).normal(-1.0F, 0.0F, 0.0F).endVertex();
worldrenderer
.pos((double) (f24 + (float) j1 + 0.0F), (double) (f3 + 4.0F),
(double) (f25 + 0.0F))
.tex((double) ((f22 + (float) j1 + 0.5F) * 0.00390625F + f17),
(double) ((f23 + 0.0F) * 0.00390625F + f18))
.color(f26, f27, f28, 0.8F).normal(-1.0F, 0.0F, 0.0F).endVertex();
worldrenderer
.pos((double) (f24 + (float) j1 + 0.0F), (double) (f3 + 0.0F),
(double) (f25 + 0.0F))
.tex((double) ((f22 + (float) j1 + 0.5F) * 0.00390625F + f17),
(double) ((f23 + 0.0F) * 0.00390625F + f18))
.color(f26, f27, f28, 0.8F).normal(-1.0F, 0.0F, 0.0F).endVertex();
}
}
if (l <= 1) {
for (int k1 = 0; k1 < 8; ++k1) {
worldrenderer
.pos((double) (f24 + (float) k1 + 1.0F - 9.765625E-4F), (double) (f3 + 0.0F),
(double) (f25 + 8.0F))
.tex((double) ((f22 + (float) k1 + 0.5F) * 0.00390625F + f17),
(double) ((f23 + 8.0F) * 0.00390625F + f18))
.color(f26, f27, f28, 0.8F).normal(1.0F, 0.0F, 0.0F).endVertex();
worldrenderer
.pos((double) (f24 + (float) k1 + 1.0F - 9.765625E-4F), (double) (f3 + 4.0F),
(double) (f25 + 8.0F))
.tex((double) ((f22 + (float) k1 + 0.5F) * 0.00390625F + f17),
(double) ((f23 + 8.0F) * 0.00390625F + f18))
.color(f26, f27, f28, 0.8F).normal(1.0F, 0.0F, 0.0F).endVertex();
worldrenderer
.pos((double) (f24 + (float) k1 + 1.0F - 9.765625E-4F), (double) (f3 + 4.0F),
(double) (f25 + 0.0F))
.tex((double) ((f22 + (float) k1 + 0.5F) * 0.00390625F + f17),
(double) ((f23 + 0.0F) * 0.00390625F + f18))
.color(f26, f27, f28, 0.8F).normal(1.0F, 0.0F, 0.0F).endVertex();
worldrenderer
.pos((double) (f24 + (float) k1 + 1.0F - 9.765625E-4F), (double) (f3 + 0.0F),
(double) (f25 + 0.0F))
.tex((double) ((f22 + (float) k1 + 0.5F) * 0.00390625F + f17),
(double) ((f23 + 0.0F) * 0.00390625F + f18))
.color(f26, f27, f28, 0.8F).normal(1.0F, 0.0F, 0.0F).endVertex();
}
}
if (i1 > -1) {
for (int l1 = 0; l1 < 8; ++l1) {
worldrenderer
.pos((double) (f24 + 0.0F), (double) (f3 + 4.0F),
(double) (f25 + (float) l1 + 0.0F))
.tex((double) ((f22 + 0.0F) * 0.00390625F + f17),
(double) ((f23 + (float) l1 + 0.5F) * 0.00390625F + f18))
.color(f13, f14, f15, 0.8F).normal(0.0F, 0.0F, -1.0F).endVertex();
worldrenderer
.pos((double) (f24 + 8.0F), (double) (f3 + 4.0F),
(double) (f25 + (float) l1 + 0.0F))
.tex((double) ((f22 + 8.0F) * 0.00390625F + f17),
(double) ((f23 + (float) l1 + 0.5F) * 0.00390625F + f18))
.color(f13, f14, f15, 0.8F).normal(0.0F, 0.0F, -1.0F).endVertex();
worldrenderer
.pos((double) (f24 + 8.0F), (double) (f3 + 0.0F),
(double) (f25 + (float) l1 + 0.0F))
.tex((double) ((f22 + 8.0F) * 0.00390625F + f17),
(double) ((f23 + (float) l1 + 0.5F) * 0.00390625F + f18))
.color(f13, f14, f15, 0.8F).normal(0.0F, 0.0F, -1.0F).endVertex();
worldrenderer
.pos((double) (f24 + 0.0F), (double) (f3 + 0.0F),
(double) (f25 + (float) l1 + 0.0F))
.tex((double) ((f22 + 0.0F) * 0.00390625F + f17),
(double) ((f23 + (float) l1 + 0.5F) * 0.00390625F + f18))
.color(f13, f14, f15, 0.8F).normal(0.0F, 0.0F, -1.0F).endVertex();
}
}
if (i1 <= 1) {
for (int i2 = 0; i2 < 8; ++i2) {
worldrenderer
.pos((double) (f24 + 0.0F), (double) (f3 + 4.0F),
(double) (f25 + (float) i2 + 1.0F - 9.765625E-4F))
.tex((double) ((f22 + 0.0F) * 0.00390625F + f17),
(double) ((f23 + (float) i2 + 0.5F) * 0.00390625F + f18))
.color(f13, f14, f15, 0.8F).normal(0.0F, 0.0F, 1.0F).endVertex();
worldrenderer
.pos((double) (f24 + 8.0F), (double) (f3 + 4.0F),
(double) (f25 + (float) i2 + 1.0F - 9.765625E-4F))
.tex((double) ((f22 + 8.0F) * 0.00390625F + f17),
(double) ((f23 + (float) i2 + 0.5F) * 0.00390625F + f18))
.color(f13, f14, f15, 0.8F).normal(0.0F, 0.0F, 1.0F).endVertex();
worldrenderer
.pos((double) (f24 + 8.0F), (double) (f3 + 0.0F),
(double) (f25 + (float) i2 + 1.0F - 9.765625E-4F))
.tex((double) ((f22 + 8.0F) * 0.00390625F + f17),
(double) ((f23 + (float) i2 + 0.5F) * 0.00390625F + f18))
.color(f13, f14, f15, 0.8F).normal(0.0F, 0.0F, 1.0F).endVertex();
worldrenderer
.pos((double) (f24 + 0.0F), (double) (f3 + 0.0F),
(double) (f25 + (float) i2 + 1.0F - 9.765625E-4F))
.tex((double) ((f22 + 0.0F) * 0.00390625F + f17),
(double) ((f23 + (float) i2 + 0.5F) * 0.00390625F + f18))
.color(f13, f14, f15, 0.8F).normal(0.0F, 0.0F, 1.0F).endVertex();
}
}
tessellator.draw();
}
}
}
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
GlStateManager.disableBlend();
GlStateManager.enableCull();
}
public void updateChunks(long finishTimeNano) {
this.displayListEntitiesDirty |= this.renderDispatcher.updateChunks(finishTimeNano);
if (!this.chunksToUpdate.isEmpty()) {
Iterator iterator = this.chunksToUpdate.iterator();
while (iterator.hasNext()) {
RenderChunk renderchunk = (RenderChunk) iterator.next();
if (!this.renderDispatcher.updateChunkLater(renderchunk)) {
break;
}
renderchunk.setNeedsUpdate(false);
iterator.remove();
long i = finishTimeNano - EagRuntime.nanoTime();
if (i < 0L) {
break;
}
}
}
}
public void renderWorldBorder(Entity partialTicks, float parFloat1) {
Tessellator tessellator = Tessellator.getInstance();
WorldRenderer worldrenderer = tessellator.getWorldRenderer();
WorldBorder worldborder = this.theWorld.getWorldBorder();
double d0 = (double) (this.mc.gameSettings.renderDistanceChunks * 16);
if (partialTicks.posX >= worldborder.maxX() - d0 || partialTicks.posX <= worldborder.minX() + d0
|| partialTicks.posZ >= worldborder.maxZ() - d0 || partialTicks.posZ <= worldborder.minZ() + d0) {
double d1 = 1.0D - worldborder.getClosestDistance(partialTicks) / d0;
d1 = Math.pow(d1, 4.0D);
double d2 = partialTicks.lastTickPosX
+ (partialTicks.posX - partialTicks.lastTickPosX) * (double) parFloat1;
double d3 = partialTicks.lastTickPosY
+ (partialTicks.posY - partialTicks.lastTickPosY) * (double) parFloat1;
double d4 = partialTicks.lastTickPosZ
+ (partialTicks.posZ - partialTicks.lastTickPosZ) * (double) parFloat1;
GlStateManager.enableBlend();
GlStateManager.tryBlendFuncSeparate(GL_SRC_ALPHA, 1, 1, 0);
this.renderEngine.bindTexture(locationForcefieldPng);
GlStateManager.depthMask(false);
GlStateManager.pushMatrix();
int i = worldborder.getStatus().getID();
float f = (float) (i >> 16 & 255) / 255.0F;
float f1 = (float) (i >> 8 & 255) / 255.0F;
float f2 = (float) (i & 255) / 255.0F;
GlStateManager.color(f, f1, f2, (float) d1);
GlStateManager.doPolygonOffset(-3.0F, -3.0F);
GlStateManager.enablePolygonOffset();
GlStateManager.alphaFunc(GL_GREATER, 0.1F);
GlStateManager.enableAlpha();
GlStateManager.disableCull();
float f3 = (float) (Minecraft.getSystemTime() % 3000L) / 3000.0F;
float f4 = 0.0F;
float f5 = 0.0F;
float f6 = 128.0F;
worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX);
worldrenderer.setTranslation(-d2, -d3, -d4);
double d5 = Math.max((double) MathHelper.floor_double(d4 - d0), worldborder.minZ());
double d6 = Math.min((double) MathHelper.ceiling_double_int(d4 + d0), worldborder.maxZ());
if (d2 > worldborder.maxX() - d0) {
float f7 = 0.0F;
for (double d7 = d5; d7 < d6; f7 += 0.5F) {
double d8 = Math.min(1.0D, d6 - d7);
float f8 = (float) d8 * 0.5F;
worldrenderer.pos(worldborder.maxX(), 256.0D, d7).tex((double) (f3 + f7), (double) (f3 + 0.0F))
.endVertex();
worldrenderer.pos(worldborder.maxX(), 256.0D, d7 + d8)
.tex((double) (f3 + f8 + f7), (double) (f3 + 0.0F)).endVertex();
worldrenderer.pos(worldborder.maxX(), 0.0D, d7 + d8)
.tex((double) (f3 + f8 + f7), (double) (f3 + 128.0F)).endVertex();
worldrenderer.pos(worldborder.maxX(), 0.0D, d7).tex((double) (f3 + f7), (double) (f3 + 128.0F))
.endVertex();
++d7;
}
}
if (d2 < worldborder.minX() + d0) {
float f9 = 0.0F;
for (double d9 = d5; d9 < d6; f9 += 0.5F) {
double d12 = Math.min(1.0D, d6 - d9);
float f12 = (float) d12 * 0.5F;
worldrenderer.pos(worldborder.minX(), 256.0D, d9).tex((double) (f3 + f9), (double) (f3 + 0.0F))
.endVertex();
worldrenderer.pos(worldborder.minX(), 256.0D, d9 + d12)
.tex((double) (f3 + f12 + f9), (double) (f3 + 0.0F)).endVertex();
worldrenderer.pos(worldborder.minX(), 0.0D, d9 + d12)
.tex((double) (f3 + f12 + f9), (double) (f3 + 128.0F)).endVertex();
worldrenderer.pos(worldborder.minX(), 0.0D, d9).tex((double) (f3 + f9), (double) (f3 + 128.0F))
.endVertex();
++d9;
}
}
d5 = Math.max((double) MathHelper.floor_double(d2 - d0), worldborder.minX());
d6 = Math.min((double) MathHelper.ceiling_double_int(d2 + d0), worldborder.maxX());
if (d4 > worldborder.maxZ() - d0) {
float f10 = 0.0F;
for (double d10 = d5; d10 < d6; f10 += 0.5F) {
double d13 = Math.min(1.0D, d6 - d10);
float f13 = (float) d13 * 0.5F;
worldrenderer.pos(d10, 256.0D, worldborder.maxZ()).tex((double) (f3 + f10), (double) (f3 + 0.0F))
.endVertex();
worldrenderer.pos(d10 + d13, 256.0D, worldborder.maxZ())
.tex((double) (f3 + f13 + f10), (double) (f3 + 0.0F)).endVertex();
worldrenderer.pos(d10 + d13, 0.0D, worldborder.maxZ())
.tex((double) (f3 + f13 + f10), (double) (f3 + 128.0F)).endVertex();
worldrenderer.pos(d10, 0.0D, worldborder.maxZ()).tex((double) (f3 + f10), (double) (f3 + 128.0F))
.endVertex();
++d10;
}
}
if (d4 < worldborder.minZ() + d0) {
float f11 = 0.0F;
for (double d11 = d5; d11 < d6; f11 += 0.5F) {
double d14 = Math.min(1.0D, d6 - d11);
float f14 = (float) d14 * 0.5F;
worldrenderer.pos(d11, 256.0D, worldborder.minZ()).tex((double) (f3 + f11), (double) (f3 + 0.0F))
.endVertex();
worldrenderer.pos(d11 + d14, 256.0D, worldborder.minZ())
.tex((double) (f3 + f14 + f11), (double) (f3 + 0.0F)).endVertex();
worldrenderer.pos(d11 + d14, 0.0D, worldborder.minZ())
.tex((double) (f3 + f14 + f11), (double) (f3 + 128.0F)).endVertex();
worldrenderer.pos(d11, 0.0D, worldborder.minZ()).tex((double) (f3 + f11), (double) (f3 + 128.0F))
.endVertex();
++d11;
}
}
tessellator.draw();
worldrenderer.setTranslation(0.0D, 0.0D, 0.0D);
GlStateManager.enableCull();
GlStateManager.disableAlpha();
GlStateManager.doPolygonOffset(0.0F, 0.0F);
GlStateManager.disablePolygonOffset();
GlStateManager.enableAlpha();
GlStateManager.disableBlend();
GlStateManager.popMatrix();
GlStateManager.depthMask(true);
}
}
private void preRenderDamagedBlocks() {
GlStateManager.tryBlendFuncSeparate(GL_DST_COLOR, GL_SRC_COLOR, 1, 0);
GlStateManager.enableBlend();
GlStateManager.color(1.0F, 1.0F, 1.0F, 0.5F);
GlStateManager.doPolygonOffset(-3.0F, -3.0F);
GlStateManager.enablePolygonOffset();
GlStateManager.alphaFunc(GL_GREATER, 0.1F);
GlStateManager.enableAlpha();
GlStateManager.pushMatrix();
}
private void postRenderDamagedBlocks() {
GlStateManager.disableAlpha();
GlStateManager.doPolygonOffset(0.0F, 0.0F);
GlStateManager.disablePolygonOffset();
GlStateManager.enableAlpha();
GlStateManager.depthMask(true);
GlStateManager.popMatrix();
}
public void drawBlockDamageTexture(Tessellator tessellatorIn, WorldRenderer worldRendererIn, Entity entityIn,
float partialTicks) {
double d0 = entityIn.lastTickPosX + (entityIn.posX - entityIn.lastTickPosX) * (double) partialTicks;
double d1 = entityIn.lastTickPosY + (entityIn.posY - entityIn.lastTickPosY) * (double) partialTicks;
double d2 = entityIn.lastTickPosZ + (entityIn.posZ - entityIn.lastTickPosZ) * (double) partialTicks;
if (!this.damagedBlocks.isEmpty()) {
this.renderEngine.bindTexture(TextureMap.locationBlocksTexture);
this.preRenderDamagedBlocks();
worldRendererIn.begin(7,
(DeferredStateManager.isDeferredRenderer() || DynamicLightsStateManager.isDynamicLightsRender())
? VertexFormat.BLOCK_SHADERS
: DefaultVertexFormats.BLOCK);
worldRendererIn.setTranslation(-d0, -d1, -d2);
worldRendererIn.markDirty();
Iterator iterator = this.damagedBlocks.values().iterator();
while (iterator.hasNext()) {
DestroyBlockProgress destroyblockprogress = (DestroyBlockProgress) iterator.next();
BlockPos blockpos = destroyblockprogress.getPosition();
double d3 = (double) blockpos.getX() - d0;
double d4 = (double) blockpos.getY() - d1;
double d5 = (double) blockpos.getZ() - d2;
Block block = this.theWorld.getBlockState(blockpos).getBlock();
if (!(block instanceof BlockChest) && !(block instanceof BlockEnderChest)
&& !(block instanceof BlockSign) && !(block instanceof BlockSkull)) {
if (d3 * d3 + d4 * d4 + d5 * d5 > 1024.0D) {
iterator.remove();
} else {
IBlockState iblockstate = this.theWorld.getBlockState(blockpos);
if (iblockstate.getBlock().getMaterial() != Material.air) {
int i = destroyblockprogress.getPartialBlockDamage();
EaglerTextureAtlasSprite textureatlassprite = this.destroyBlockIcons[i];
BlockRendererDispatcher blockrendererdispatcher = this.mc.getBlockRendererDispatcher();
if (DynamicLightsStateManager.isInDynamicLightsPass()) {
DynamicLightsStateManager.reportForwardRenderObjectPosition2(blockpos.x, blockpos.y,
blockpos.z);
}
blockrendererdispatcher.renderBlockDamage(iblockstate, blockpos, textureatlassprite,
this.theWorld);
}
}
}
}
tessellatorIn.draw();
worldRendererIn.setTranslation(0.0D, 0.0D, 0.0D);
this.postRenderDamagedBlocks();
}
}
/**
* +
* Draws the selection box for the player. Args: entityPlayer,
* rayTraceHit, i, itemStack, partialTickTime
*/
public void drawSelectionBox(EntityPlayer player, MovingObjectPosition movingObjectPositionIn, int partialTicks,
float parFloat1) {
if (partialTicks == 0 && movingObjectPositionIn != null
&& movingObjectPositionIn.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) {
GlStateManager.enableBlend();
GlStateManager.tryBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, 1, 0);
GlStateManager.color(0.0F, 0.0F, 0.0F, 0.4F);
EaglercraftGPU.glLineWidth(2.0F);
GlStateManager.disableTexture2D();
GlStateManager.depthMask(false);
float f = 0.002F;
BlockPos blockpos = movingObjectPositionIn.getBlockPos();
Block block = this.theWorld.getBlockState(blockpos).getBlock();
if (block.getMaterial() != Material.air && this.theWorld.getWorldBorder().contains(blockpos)) {
block.setBlockBoundsBasedOnState(this.theWorld, blockpos);
double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double) parFloat1;
double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) parFloat1;
double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double) parFloat1;
func_181561_a(block.getSelectedBoundingBox(this.theWorld, blockpos)
.expand(0.0020000000949949026D, 0.0020000000949949026D, 0.0020000000949949026D)
.offset(-d0, -d1, -d2));
}
GlStateManager.depthMask(true);
GlStateManager.enableTexture2D();
GlStateManager.disableBlend();
}
}
public static void func_181561_a(AxisAlignedBB parAxisAlignedBB) {
Tessellator tessellator = Tessellator.getInstance();
WorldRenderer worldrenderer = tessellator.getWorldRenderer();
worldrenderer.begin(3, DefaultVertexFormats.POSITION);
worldrenderer.pos(parAxisAlignedBB.minX, parAxisAlignedBB.minY, parAxisAlignedBB.minZ).endVertex();
worldrenderer.pos(parAxisAlignedBB.maxX, parAxisAlignedBB.minY, parAxisAlignedBB.minZ).endVertex();
worldrenderer.pos(parAxisAlignedBB.maxX, parAxisAlignedBB.minY, parAxisAlignedBB.maxZ).endVertex();
worldrenderer.pos(parAxisAlignedBB.minX, parAxisAlignedBB.minY, parAxisAlignedBB.maxZ).endVertex();
worldrenderer.pos(parAxisAlignedBB.minX, parAxisAlignedBB.minY, parAxisAlignedBB.minZ).endVertex();
tessellator.draw();
worldrenderer.begin(3, DefaultVertexFormats.POSITION);
worldrenderer.pos(parAxisAlignedBB.minX, parAxisAlignedBB.maxY, parAxisAlignedBB.minZ).endVertex();
worldrenderer.pos(parAxisAlignedBB.maxX, parAxisAlignedBB.maxY, parAxisAlignedBB.minZ).endVertex();
worldrenderer.pos(parAxisAlignedBB.maxX, parAxisAlignedBB.maxY, parAxisAlignedBB.maxZ).endVertex();
worldrenderer.pos(parAxisAlignedBB.minX, parAxisAlignedBB.maxY, parAxisAlignedBB.maxZ).endVertex();
worldrenderer.pos(parAxisAlignedBB.minX, parAxisAlignedBB.maxY, parAxisAlignedBB.minZ).endVertex();
tessellator.draw();
worldrenderer.begin(1, DefaultVertexFormats.POSITION);
worldrenderer.pos(parAxisAlignedBB.minX, parAxisAlignedBB.minY, parAxisAlignedBB.minZ).endVertex();
worldrenderer.pos(parAxisAlignedBB.minX, parAxisAlignedBB.maxY, parAxisAlignedBB.minZ).endVertex();
worldrenderer.pos(parAxisAlignedBB.maxX, parAxisAlignedBB.minY, parAxisAlignedBB.minZ).endVertex();
worldrenderer.pos(parAxisAlignedBB.maxX, parAxisAlignedBB.maxY, parAxisAlignedBB.minZ).endVertex();
worldrenderer.pos(parAxisAlignedBB.maxX, parAxisAlignedBB.minY, parAxisAlignedBB.maxZ).endVertex();
worldrenderer.pos(parAxisAlignedBB.maxX, parAxisAlignedBB.maxY, parAxisAlignedBB.maxZ).endVertex();
worldrenderer.pos(parAxisAlignedBB.minX, parAxisAlignedBB.minY, parAxisAlignedBB.maxZ).endVertex();
worldrenderer.pos(parAxisAlignedBB.minX, parAxisAlignedBB.maxY, parAxisAlignedBB.maxZ).endVertex();
tessellator.draw();
}
public static void func_181563_a(AxisAlignedBB parAxisAlignedBB, int parInt1, int parInt2, int parInt3,
int parInt4) {
Tessellator tessellator = Tessellator.getInstance();
WorldRenderer worldrenderer = tessellator.getWorldRenderer();
worldrenderer.begin(3, DefaultVertexFormats.POSITION_COLOR);
worldrenderer.pos(parAxisAlignedBB.minX, parAxisAlignedBB.minY, parAxisAlignedBB.minZ)
.color(parInt1, parInt2, parInt3, parInt4).endVertex();
worldrenderer.pos(parAxisAlignedBB.maxX, parAxisAlignedBB.minY, parAxisAlignedBB.minZ)
.color(parInt1, parInt2, parInt3, parInt4).endVertex();
worldrenderer.pos(parAxisAlignedBB.maxX, parAxisAlignedBB.minY, parAxisAlignedBB.maxZ)
.color(parInt1, parInt2, parInt3, parInt4).endVertex();
worldrenderer.pos(parAxisAlignedBB.minX, parAxisAlignedBB.minY, parAxisAlignedBB.maxZ)
.color(parInt1, parInt2, parInt3, parInt4).endVertex();
worldrenderer.pos(parAxisAlignedBB.minX, parAxisAlignedBB.minY, parAxisAlignedBB.minZ)
.color(parInt1, parInt2, parInt3, parInt4).endVertex();
tessellator.draw();
worldrenderer.begin(3, DefaultVertexFormats.POSITION_COLOR);
worldrenderer.pos(parAxisAlignedBB.minX, parAxisAlignedBB.maxY, parAxisAlignedBB.minZ)
.color(parInt1, parInt2, parInt3, parInt4).endVertex();
worldrenderer.pos(parAxisAlignedBB.maxX, parAxisAlignedBB.maxY, parAxisAlignedBB.minZ)
.color(parInt1, parInt2, parInt3, parInt4).endVertex();
worldrenderer.pos(parAxisAlignedBB.maxX, parAxisAlignedBB.maxY, parAxisAlignedBB.maxZ)
.color(parInt1, parInt2, parInt3, parInt4).endVertex();
worldrenderer.pos(parAxisAlignedBB.minX, parAxisAlignedBB.maxY, parAxisAlignedBB.maxZ)
.color(parInt1, parInt2, parInt3, parInt4).endVertex();
worldrenderer.pos(parAxisAlignedBB.minX, parAxisAlignedBB.maxY, parAxisAlignedBB.minZ)
.color(parInt1, parInt2, parInt3, parInt4).endVertex();
tessellator.draw();
worldrenderer.begin(1, DefaultVertexFormats.POSITION_COLOR);
worldrenderer.pos(parAxisAlignedBB.minX, parAxisAlignedBB.minY, parAxisAlignedBB.minZ)
.color(parInt1, parInt2, parInt3, parInt4).endVertex();
worldrenderer.pos(parAxisAlignedBB.minX, parAxisAlignedBB.maxY, parAxisAlignedBB.minZ)
.color(parInt1, parInt2, parInt3, parInt4).endVertex();
worldrenderer.pos(parAxisAlignedBB.maxX, parAxisAlignedBB.minY, parAxisAlignedBB.minZ)
.color(parInt1, parInt2, parInt3, parInt4).endVertex();
worldrenderer.pos(parAxisAlignedBB.maxX, parAxisAlignedBB.maxY, parAxisAlignedBB.minZ)
.color(parInt1, parInt2, parInt3, parInt4).endVertex();
worldrenderer.pos(parAxisAlignedBB.maxX, parAxisAlignedBB.minY, parAxisAlignedBB.maxZ)
.color(parInt1, parInt2, parInt3, parInt4).endVertex();
worldrenderer.pos(parAxisAlignedBB.maxX, parAxisAlignedBB.maxY, parAxisAlignedBB.maxZ)
.color(parInt1, parInt2, parInt3, parInt4).endVertex();
worldrenderer.pos(parAxisAlignedBB.minX, parAxisAlignedBB.minY, parAxisAlignedBB.maxZ)
.color(parInt1, parInt2, parInt3, parInt4).endVertex();
worldrenderer.pos(parAxisAlignedBB.minX, parAxisAlignedBB.maxY, parAxisAlignedBB.maxZ)
.color(parInt1, parInt2, parInt3, parInt4).endVertex();
tessellator.draw();
}
/**
* +
* Marks the blocks in the given range for update
*/
private void markBlocksForUpdate(int x1, int y1, int z1, int x2, int y2, int z2) {
this.viewFrustum.markBlocksForUpdate(x1, y1, z1, x2, y2, z2);
}
public void markBlockForUpdate(BlockPos blockpos) {
int i = blockpos.getX();
int j = blockpos.getY();
int k = blockpos.getZ();
this.markBlocksForUpdate(i - 1, j - 1, k - 1, i + 1, j + 1, k + 1);
}
public void notifyLightSet(BlockPos blockpos) {
this.setLightUpdates.add(blockpos.toImmutable());
int i = blockpos.getX();
int j = blockpos.getY();
int k = blockpos.getZ();
this.markBlocksForUpdate(i - 1, j - 1, k - 1, i + 1, j + 1, k + 1);
}
/**
* +
* On the client, re-renders all blocks in this range,
* inclusive. On the server, does nothing. Args: min x, min y,
* min z, max x, max y, max z
*/
public void markBlockRangeForRenderUpdate(int i, int j, int k, int l, int i1, int j1) {
this.markBlocksForUpdate(i - 1, j - 1, k - 1, l + 1, i1 + 1, j1 + 1);
}
public void playRecord(String s, BlockPos blockpos) {
ISound isound = (ISound) this.mapSoundPositions.get(blockpos);
if (isound != null) {
this.mc.getSoundHandler().stopSound(isound);
this.mapSoundPositions.remove(blockpos);
}
if (s != null) {
ItemRecord itemrecord = ItemRecord.getRecord(s);
if (itemrecord != null) {
this.mc.ingameGUI.setRecordPlayingMessage(itemrecord.getRecordNameLocal());
}
PositionedSoundRecord positionedsoundrecord = PositionedSoundRecord.create(new ResourceLocation(s),
(float) blockpos.getX(), (float) blockpos.getY(), (float) blockpos.getZ());
this.mapSoundPositions.put(blockpos, positionedsoundrecord);
this.mc.getSoundHandler().playSound(positionedsoundrecord);
}
}
/**
* +
* Plays the specified sound. Arg: soundName, x, y, z, volume,
* pitch
*/
public void playSound(String var1, double var2, double var4, double var6, float var8, float var9) {
}
/**
* +
* Plays sound to all near players except the player reference
* given
*/
public void playSoundToNearExcept(EntityPlayer var1, String var2, double var3, double var5, double var7, float var9,
float var10) {
}
public void spawnParticle(int i, boolean flag, final double d0, final double d1, final double d2, double d3,
double d4, double d5, int... aint) {
try {
this.spawnEntityFX(i, flag, d0, d1, d2, d3, d4, d5, aint);
} catch (Throwable throwable) {
CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Exception while adding particle");
CrashReportCategory crashreportcategory = crashreport.makeCategory("Particle being added");
crashreportcategory.addCrashSection("ID", Integer.valueOf(i));
if (aint != null) {
crashreportcategory.addCrashSection("Parameters", aint);
}
crashreportcategory.addCrashSectionCallable("Position", new Callable<String>() {
public String call() throws Exception {
return CrashReportCategory.getCoordinateInfo(d0, d1, d2);
}
});
throw new ReportedException(crashreport);
}
}
private void spawnParticle(EnumParticleTypes particleIn, double parDouble1, double parDouble2, double parDouble3,
double parDouble4, double parDouble5, double parDouble6, int... parArrayOfInt) {
this.spawnParticle(particleIn.getParticleID(), particleIn.getShouldIgnoreRange(), parDouble1, parDouble2,
parDouble3, parDouble4, parDouble5, parDouble6, parArrayOfInt);
}
private EntityFX spawnEntityFX(int ignoreRange, boolean parFlag, double parDouble1, double parDouble2,
double parDouble3, double parDouble4, double parDouble5, double parDouble6, int... parArrayOfInt) {
if (this.mc != null && this.mc.getRenderViewEntity() != null && this.mc.effectRenderer != null) {
int i = this.mc.gameSettings.particleSetting;
if (i == 1 && this.theWorld.rand.nextInt(3) == 0) {
i = 2;
}
double d0 = this.mc.getRenderViewEntity().posX - parDouble1;
double d1 = this.mc.getRenderViewEntity().posY - parDouble2;
double d2 = this.mc.getRenderViewEntity().posZ - parDouble3;
if (parFlag) {
return this.mc.effectRenderer.spawnEffectParticle(ignoreRange, parDouble1, parDouble2, parDouble3,
parDouble4, parDouble5, parDouble6, parArrayOfInt);
} else {
double d3 = 16.0D;
return d0 * d0 + d1 * d1 + d2 * d2 > 256.0D ? null
: (i > 1 ? null
: this.mc.effectRenderer.spawnEffectParticle(ignoreRange, parDouble1, parDouble2,
parDouble3, parDouble4, parDouble5, parDouble6, parArrayOfInt));
}
} else {
return null;
}
}
/**
* +
* Called on all IWorldAccesses when an entity is created or
* loaded. On client worlds, starts downloading any necessary
* textures. On server worlds, adds the entity to the entity
* tracker.
*/
public void onEntityAdded(Entity var1) {
}
/**
* +
* Called on all IWorldAccesses when an entity is unloaded or
* destroyed. On client worlds, releases any downloaded
* textures. On server worlds, removes the entity from the
* entity tracker.
*/
public void onEntityRemoved(Entity var1) {
}
/**
* +
* Deletes all display lists
*/
public void deleteAllDisplayLists() {
}
public void broadcastSound(int i, BlockPos blockpos, int var3) {
switch (i) {
case 1013:
case 1018:
if (this.mc.getRenderViewEntity() != null) {
double d0 = (double) blockpos.getX() - this.mc.getRenderViewEntity().posX;
double d1 = (double) blockpos.getY() - this.mc.getRenderViewEntity().posY;
double d2 = (double) blockpos.getZ() - this.mc.getRenderViewEntity().posZ;
double d3 = Math.sqrt(d0 * d0 + d1 * d1 + d2 * d2);
double d4 = this.mc.getRenderViewEntity().posX;
double d5 = this.mc.getRenderViewEntity().posY;
double d6 = this.mc.getRenderViewEntity().posZ;
if (d3 > 0.0D) {
d4 += d0 / d3 * 2.0D;
d5 += d1 / d3 * 2.0D;
d6 += d2 / d3 * 2.0D;
}
if (i == 1013) {
this.theWorld.playSound(d4, d5, d6, "mob.wither.spawn", 1.0F, 1.0F, false);
} else {
this.theWorld.playSound(d4, d5, d6, "mob.enderdragon.end", 5.0F, 1.0F, false);
}
}
default:
}
}
public void playAuxSFX(EntityPlayer var1, int i, BlockPos blockpos, int j) {
EaglercraftRandom random = this.theWorld.rand;
switch (i) {
case 1000:
this.theWorld.playSoundAtPos(blockpos, "random.click", 1.0F, 1.0F, false);
break;
case 1001:
this.theWorld.playSoundAtPos(blockpos, "random.click", 1.0F, 1.2F, false);
break;
case 1002:
this.theWorld.playSoundAtPos(blockpos, "random.bow", 1.0F, 1.2F, false);
break;
case 1003:
this.theWorld.playSoundAtPos(blockpos, "random.door_open", 1.0F,
this.theWorld.rand.nextFloat() * 0.1F + 0.9F, false);
break;
case 1004:
this.theWorld.playSoundAtPos(blockpos, "random.fizz", 0.5F,
2.6F + (random.nextFloat() - random.nextFloat()) * 0.8F, false);
break;
case 1005:
if (Item.getItemById(j) instanceof ItemRecord) {
this.theWorld.playRecord(blockpos, "records." + ((ItemRecord) Item.getItemById(j)).recordName);
} else {
this.theWorld.playRecord(blockpos, (String) null);
}
break;
case 1006:
this.theWorld.playSoundAtPos(blockpos, "random.door_close", 1.0F,
this.theWorld.rand.nextFloat() * 0.1F + 0.9F, false);
break;
case 1007:
this.theWorld.playSoundAtPos(blockpos, "mob.ghast.charge", 10.0F,
(random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F, false);
break;
case 1008:
this.theWorld.playSoundAtPos(blockpos, "mob.ghast.fireball", 10.0F,
(random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F, false);
break;
case 1009:
this.theWorld.playSoundAtPos(blockpos, "mob.ghast.fireball", 2.0F,
(random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F, false);
break;
case 1010:
this.theWorld.playSoundAtPos(blockpos, "mob.zombie.wood", 2.0F,
(random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F, false);
break;
case 1011:
this.theWorld.playSoundAtPos(blockpos, "mob.zombie.metal", 2.0F,
(random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F, false);
break;
case 1012:
this.theWorld.playSoundAtPos(blockpos, "mob.zombie.woodbreak", 2.0F,
(random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F, false);
break;
case 1014:
this.theWorld.playSoundAtPos(blockpos, "mob.wither.shoot", 2.0F,
(random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F, false);
break;
case 1015:
this.theWorld.playSoundAtPos(blockpos, "mob.bat.takeoff", 0.05F,
(random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F, false);
break;
case 1016:
this.theWorld.playSoundAtPos(blockpos, "mob.zombie.infect", 2.0F,
(random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F, false);
break;
case 1017:
this.theWorld.playSoundAtPos(blockpos, "mob.zombie.unfect", 2.0F,
(random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F, false);
break;
case 1020:
this.theWorld.playSoundAtPos(blockpos, "random.anvil_break", 1.0F,
this.theWorld.rand.nextFloat() * 0.1F + 0.9F, false);
break;
case 1021:
this.theWorld.playSoundAtPos(blockpos, "random.anvil_use", 1.0F,
this.theWorld.rand.nextFloat() * 0.1F + 0.9F, false);
break;
case 1022:
this.theWorld.playSoundAtPos(blockpos, "random.anvil_land", 0.3F,
this.theWorld.rand.nextFloat() * 0.1F + 0.9F, false);
break;
case 1033:
this.theWorld.playSoundAtPos(blockpos, "block.chorus_flower.grow", 1.0F, 1.0F, false);
break;
case 1034:
this.theWorld.playSoundAtPos(blockpos, "block.chorus_flower.death", 1.0F, 1.0F, false);
break;
case 2000:
int j1 = j % 3 - 1;
int k = j / 3 % 3 - 1;
double d15 = (double) blockpos.getX() + (double) j1 * 0.6D + 0.5D;
double d17 = (double) blockpos.getY() + 0.5D;
double d19 = (double) blockpos.getZ() + (double) k * 0.6D + 0.5D;
for (int i2 = 0; i2 < 10; ++i2) {
double d20 = random.nextDouble() * 0.2D + 0.01D;
double d21 = d15 + (double) j1 * 0.01D + (random.nextDouble() - 0.5D) * (double) k * 0.5D;
double d4 = d17 + (random.nextDouble() - 0.5D) * 0.5D;
double d6 = d19 + (double) k * 0.01D + (random.nextDouble() - 0.5D) * (double) j1 * 0.5D;
double d8 = (double) j1 * d20 + random.nextGaussian() * 0.01D;
double d10 = -0.03D + random.nextGaussian() * 0.01D;
double d12 = (double) k * d20 + random.nextGaussian() * 0.01D;
this.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, d21, d4, d6, d8, d10, d12, new int[0]);
}
return;
case 2001:
Block block = Block.getBlockById(j & 4095);
if (block.getMaterial() != Material.air) {
this.mc.getSoundHandler()
.playSound(new PositionedSoundRecord(new ResourceLocation(block.stepSound.getBreakSound()),
(block.stepSound.getVolume() + 1.0F) / 2.0F, block.stepSound.getFrequency() * 0.8F,
(float) blockpos.getX() + 0.5F, (float) blockpos.getY() + 0.5F,
(float) blockpos.getZ() + 0.5F));
}
this.mc.effectRenderer.addBlockDestroyEffects(blockpos, block.getStateFromMeta(j >> 12 & 255));
break;
case 2002:
double d13 = (double) blockpos.getX();
double d14 = (double) blockpos.getY();
double d16 = (double) blockpos.getZ();
for (int k1 = 0; k1 < 8; ++k1) {
this.spawnParticle(EnumParticleTypes.ITEM_CRACK, d13, d14, d16, random.nextGaussian() * 0.15D,
random.nextDouble() * 0.2D, random.nextGaussian() * 0.15D,
new int[] { Item.getIdFromItem(Items.potionitem), j });
}
int l1 = Items.potionitem.getColorFromDamage(j);
float f = (float) (l1 >> 16 & 255) / 255.0F;
float f1 = (float) (l1 >> 8 & 255) / 255.0F;
float f2 = (float) (l1 >> 0 & 255) / 255.0F;
EnumParticleTypes enumparticletypes = EnumParticleTypes.SPELL;
if (Items.potionitem.isEffectInstant(j)) {
enumparticletypes = EnumParticleTypes.SPELL_INSTANT;
}
for (int j2 = 0; j2 < 100; ++j2) {
double d22 = random.nextDouble() * 4.0D;
double d23 = random.nextDouble() * 3.141592653589793D * 2.0D;
double d24 = Math.cos(d23) * d22;
double d9 = 0.01D + random.nextDouble() * 0.5D;
double d11 = Math.sin(d23) * d22;
EntityFX entityfx = this.spawnEntityFX(enumparticletypes.getParticleID(),
enumparticletypes.getShouldIgnoreRange(), d13 + d24 * 0.1D, d14 + 0.3D, d16 + d11 * 0.1D,
d24,
d9, d11, new int[0]);
if (entityfx != null) {
float f3 = 0.75F + random.nextFloat() * 0.25F;
entityfx.setRBGColorF(f * f3, f1 * f3, f2 * f3);
entityfx.multiplyVelocity((float) d22);
}
}
this.theWorld.playSoundAtPos(blockpos, "game.potion.smash", 1.0F,
this.theWorld.rand.nextFloat() * 0.1F + 0.9F, false);
break;
case 2003:
double d0 = (double) blockpos.getX() + 0.5D;
double d1 = (double) blockpos.getY();
double d2 = (double) blockpos.getZ() + 0.5D;
for (int l = 0; l < 8; ++l) {
this.spawnParticle(EnumParticleTypes.ITEM_CRACK, d0, d1, d2, random.nextGaussian() * 0.15D,
random.nextDouble() * 0.2D, random.nextGaussian() * 0.15D,
new int[] { Item.getIdFromItem(Items.ender_eye) });
}
for (double d18 = 0.0D; d18 < 6.283185307179586D; d18 += 0.15707963267948966D) {
this.spawnParticle(EnumParticleTypes.PORTAL, d0 + Math.cos(d18) * 5.0D, d1 - 0.4D,
d2 + Math.sin(d18) * 5.0D, Math.cos(d18) * -5.0D, 0.0D, Math.sin(d18) * -5.0D, new int[0]);
this.spawnParticle(EnumParticleTypes.PORTAL, d0 + Math.cos(d18) * 5.0D, d1 - 0.4D,
d2 + Math.sin(d18) * 5.0D, Math.cos(d18) * -7.0D, 0.0D, Math.sin(d18) * -7.0D, new int[0]);
}
return;
case 2004:
for (int i1 = 0; i1 < 20; ++i1) {
double d3 = (double) blockpos.getX() + 0.5D
+ ((double) this.theWorld.rand.nextFloat() - 0.5D) * 2.0D;
double d5 = (double) blockpos.getY() + 0.5D
+ ((double) this.theWorld.rand.nextFloat() - 0.5D) * 2.0D;
double d7 = (double) blockpos.getZ() + 0.5D
+ ((double) this.theWorld.rand.nextFloat() - 0.5D) * 2.0D;
this.theWorld.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, d3, d5, d7, 0.0D, 0.0D, 0.0D,
new int[0]);
this.theWorld.spawnParticle(EnumParticleTypes.FLAME, d3, d5, d7, 0.0D, 0.0D, 0.0D, new int[0]);
}
return;
case 2005:
ItemDye.spawnBonemealParticles(this.theWorld, blockpos, j);
}
}
public void sendBlockBreakProgress(int i, BlockPos blockpos, int j) {
if (j >= 0 && j < 10) {
DestroyBlockProgress destroyblockprogress = (DestroyBlockProgress) this.damagedBlocks
.get(Integer.valueOf(i));
if (destroyblockprogress == null || destroyblockprogress.getPosition().getX() != blockpos.getX()
|| destroyblockprogress.getPosition().getY() != blockpos.getY()
|| destroyblockprogress.getPosition().getZ() != blockpos.getZ()) {
destroyblockprogress = new DestroyBlockProgress(i, blockpos);
this.damagedBlocks.put(Integer.valueOf(i), destroyblockprogress);
}
destroyblockprogress.setPartialBlockDamage(j);
destroyblockprogress.setCloudUpdateTick(this.cloudTickCounter);
} else {
this.damagedBlocks.remove(Integer.valueOf(i));
}
}
public void setDisplayListEntitiesDirty() {
this.displayListEntitiesDirty = true;
}
public void func_181023_a(Collection<TileEntity> parCollection, Collection<TileEntity> parCollection2) {
synchronized (this.field_181024_n) {
this.field_181024_n.removeAll(parCollection);
this.field_181024_n.addAll(parCollection2);
}
}
class ContainerLocalRenderInformation {
final RenderChunk renderChunk;
final EnumFacing facing;
final Set<EnumFacing> setFacing;
final int counter;
private ContainerLocalRenderInformation(RenderChunk renderChunkIn, EnumFacing facingIn, int counterIn) {
this.setFacing = EnumSet.noneOf(EnumFacing.class);
this.renderChunk = renderChunkIn;
this.facing = facingIn;
this.counter = counterIn;
}
}
public String getDebugInfoShort() {
int i = this.viewFrustum.renderChunks.length;
int j = 0;
int k = 0;
for (int ii = 0, ll = this.renderInfos.size(); ii < ll; ++ii) {
RenderGlobal.ContainerLocalRenderInformation renderglobal$containerlocalrenderinformation = this.renderInfos
.get(ii);
CompiledChunk compiledchunk = renderglobal$containerlocalrenderinformation.renderChunk.compiledChunk;
if (compiledchunk != CompiledChunk.DUMMY && !compiledchunk.isEmpty()) {
++j;
k += compiledchunk.getTileEntities().size();
}
}
return "" + Minecraft.getDebugFPS() + "fps | C: " + j + "/" + i + ", E: " + this.countEntitiesRendered + "+" + k
+ ", " + renderDispatcher.getDebugInfo();
}
public void alfheim$processLightUpdates() {
if (setLightUpdates.isEmpty())
return;
final Iterator<BlockPos> iterator = setLightUpdates.iterator();
final float lightUpdateLimit = 2048 + ((float) setLightUpdates.size() / 4); // Todo: Rework this once again,
// this is currently pretty dumb.
// It fixed the issue where the FPS
// on lower end hardware would
// plummet for a few seconds.
// But it also reduced how smooth
// the frame rate was on higher end
// hardware.
// Updating blocks is costly and
// will take a long time, this is
// why lower end hardware plummets
// for a few seconds.
// Higher end hardware instead has
// somewhat of a FPS "buffer" which
// can handle it fine over multiple
// frames thus reducing frame-time
// spikes.
// The technically the best way to
// do this (that I hadn't though of
// before) was to add current "FPS"
// to the equation.
// If the FPS is low more updates
// would be done in one frame if it
// is high we can afford spreading
// light updates over multiple
// frames.
short lightUpdatesProcessed = 0;
while (iterator.hasNext() && lightUpdatesProcessed < lightUpdateLimit) {
final BlockPos blockpos = iterator.next();
iterator.remove();
final int x = blockpos.getX();
final int y = blockpos.getY();
final int z = blockpos.getZ();
markBlocksForUpdate(x, y, z, x, y, z);
lightUpdatesProcessed++;
}
}
}