Dynamic Lights

This commit is contained in:
PeytonPlayz595 2023-10-15 10:54:42 -04:00
parent 577e01f0ac
commit 8452864d1e
13 changed files with 37544 additions and 36890 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -418,4 +418,15 @@ public class Config {
}
}
public static boolean isDynamicLights() {
return Minecraft.getMinecraft().gameSettings.ofDynamicLights != 3;
}
public static boolean isDynamicLightsFast() {
return Minecraft.getMinecraft().gameSettings.ofDynamicLights == 1;
}
public static boolean isDynamicHandLight() {
return !isDynamicLights() ? false : true;
}
}

View File

@ -0,0 +1,157 @@
package net.PeytonPlayz585.shadow;
import java.util.HashSet;
import java.util.Set;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.RenderGlobal;
import net.minecraft.client.renderer.chunk.CompiledChunk;
import net.minecraft.client.renderer.chunk.RenderChunk;
import net.minecraft.entity.Entity;
import net.minecraft.init.Blocks;
import net.minecraft.util.BlockPos;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
public class DynamicLight {
private Entity entity = null;
private double offsetY = 0.0D;
private double lastPosX = -2.147483648E9D;
private double lastPosY = -2.147483648E9D;
private double lastPosZ = -2.147483648E9D;
private int lastLightLevel = 0;
private boolean underwater = false;
private long timeCheckMs = 0L;
private Set < BlockPos > setLitChunkPos = new HashSet();
private BlockPos.MutableBlockPos blockPosMutable = new BlockPos.MutableBlockPos();
public DynamicLight(Entity p_i36_1_) {
this.entity = p_i36_1_;
this.offsetY = (double) p_i36_1_.getEyeHeight();
}
public void update(RenderGlobal p_update_1_) {
if (Config.isDynamicLightsFast()) {
long i = System.currentTimeMillis();
if (i < this.timeCheckMs + 500L) {
return;
}
this.timeCheckMs = i;
}
double d6 = this.entity.posX - 0.5D;
double d0 = this.entity.posY - 0.5D + this.offsetY;
double d1 = this.entity.posZ - 0.5D;
int j = DynamicLights.getLightLevel(this.entity);
double d2 = d6 - this.lastPosX;
double d3 = d0 - this.lastPosY;
double d4 = d1 - this.lastPosZ;
double d5 = 0.1D;
if (Math.abs(d2) > d5 || Math.abs(d3) > d5 || Math.abs(d4) > d5 || this.lastLightLevel != j) {
this.lastPosX = d6;
this.lastPosY = d0;
this.lastPosZ = d1;
this.lastLightLevel = j;
this.underwater = false;
World world = p_update_1_.getWorld();
if (world != null) {
this.blockPosMutable.func_181079_c(MathHelper.floor_double(d6), MathHelper.floor_double(d0), MathHelper.floor_double(d1));
IBlockState iblockstate = world.getBlockState(this.blockPosMutable);
Block block = iblockstate.getBlock();
this.underwater = block == Blocks.water;
}
Set < BlockPos > set = new HashSet();
if (j > 0) {
EnumFacing enumfacing2 = (MathHelper.floor_double(d6) & 15) >= 8 ? EnumFacing.EAST : EnumFacing.WEST;
EnumFacing enumfacing = (MathHelper.floor_double(d0) & 15) >= 8 ? EnumFacing.UP : EnumFacing.DOWN;
EnumFacing enumfacing1 = (MathHelper.floor_double(d1) & 15) >= 8 ? EnumFacing.SOUTH : EnumFacing.NORTH;
BlockPos blockpos = new BlockPos(d6, d0, d1);
RenderChunk renderchunk = p_update_1_.viewFrustum.getRenderChunk(blockpos);
RenderChunk renderchunk1 = p_update_1_.viewFrustum.getRenderChunk(renderchunk, enumfacing2);
RenderChunk renderchunk2 = p_update_1_.viewFrustum.getRenderChunk(renderchunk, enumfacing1);
RenderChunk renderchunk3 = p_update_1_.viewFrustum.getRenderChunk(renderchunk1, enumfacing1);
RenderChunk renderchunk4 = p_update_1_.viewFrustum.getRenderChunk(renderchunk, enumfacing);
RenderChunk renderchunk5 = p_update_1_.viewFrustum.getRenderChunk(renderchunk4, enumfacing2);
RenderChunk renderchunk6 = p_update_1_.viewFrustum.getRenderChunk(renderchunk4, enumfacing1);
RenderChunk renderchunk7 = p_update_1_.viewFrustum.getRenderChunk(renderchunk5, enumfacing1);
this.updateChunkLight(renderchunk, this.setLitChunkPos, set);
this.updateChunkLight(renderchunk1, this.setLitChunkPos, set);
this.updateChunkLight(renderchunk2, this.setLitChunkPos, set);
this.updateChunkLight(renderchunk3, this.setLitChunkPos, set);
this.updateChunkLight(renderchunk4, this.setLitChunkPos, set);
this.updateChunkLight(renderchunk5, this.setLitChunkPos, set);
this.updateChunkLight(renderchunk6, this.setLitChunkPos, set);
this.updateChunkLight(renderchunk7, this.setLitChunkPos, set);
}
this.updateLitChunks(p_update_1_);
this.setLitChunkPos = set;
}
}
private void updateChunkLight(RenderChunk p_updateChunkLight_1_, Set < BlockPos > p_updateChunkLight_2_, Set < BlockPos > p_updateChunkLight_3_) {
if (p_updateChunkLight_1_ != null) {
CompiledChunk compiledchunk = p_updateChunkLight_1_.getCompiledChunk();
if (compiledchunk != null && !compiledchunk.isEmpty()) {
p_updateChunkLight_1_.setNeedsUpdate(true);
}
BlockPos blockpos = p_updateChunkLight_1_.getPosition();
if (p_updateChunkLight_2_ != null) {
p_updateChunkLight_2_.remove(blockpos);
}
if (p_updateChunkLight_3_ != null) {
p_updateChunkLight_3_.add(blockpos);
}
}
}
public void updateLitChunks(RenderGlobal p_updateLitChunks_1_) {
for (BlockPos blockpos: this.setLitChunkPos) {
RenderChunk renderchunk = p_updateLitChunks_1_.viewFrustum.getRenderChunk(blockpos);
this.updateChunkLight(renderchunk, (Set < BlockPos > ) null, (Set < BlockPos > ) null);
}
}
public Entity getEntity() {
return this.entity;
}
public double getLastPosX() {
return this.lastPosX;
}
public double getLastPosY() {
return this.lastPosY;
}
public double getLastPosZ() {
return this.lastPosZ;
}
public int getLastLightLevel() {
return this.lastLightLevel;
}
public boolean isUnderwater() {
return this.underwater;
}
public double getOffsetY() {
return this.offsetY;
}
public String toString() {
return "Entity: " + this.entity + ", offsetY: " + this.offsetY;
}
}

View File

@ -0,0 +1,262 @@
package net.PeytonPlayz585.shadow;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import net.PeytonPlayz585.shadow.math.IntegerCache;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.RenderGlobal;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.item.EntityTNTPrimed;
import net.minecraft.entity.monster.EntityBlaze;
import net.minecraft.entity.monster.EntityCreeper;
import net.minecraft.entity.monster.EntityMagmaCube;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntityFireball;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.util.BlockPos;
import net.minecraft.world.World;
public class DynamicLights {
private static Map < Integer, DynamicLight > mapDynamicLights = new HashMap();
private static long timeUpdateMs = 0L;
private static final double MAX_DIST = 7.5D;
private static final double MAX_DIST_SQ = 56.25D;
private static final int LIGHT_LEVEL_MAX = 15;
private static final int LIGHT_LEVEL_FIRE = 15;
private static final int LIGHT_LEVEL_BLAZE = 10;
private static final int LIGHT_LEVEL_MAGMA_CUBE = 8;
private static final int LIGHT_LEVEL_MAGMA_CUBE_CORE = 13;
private static final int LIGHT_LEVEL_GLOWSTONE_DUST = 8;
private static final int LIGHT_LEVEL_PRISMARINE_CRYSTALS = 8;
public static void entityAdded(Entity p_entityAdded_0_, RenderGlobal p_entityAdded_1_) {}
public static void entityRemoved(Entity p_entityRemoved_0_, RenderGlobal p_entityRemoved_1_) {
synchronized(mapDynamicLights) {
DynamicLight dynamiclight = (DynamicLight) mapDynamicLights.remove(IntegerCache.valueOf(p_entityRemoved_0_.getEntityId()));
if (dynamiclight != null) {
dynamiclight.updateLitChunks(p_entityRemoved_1_);
}
}
}
public static void update(RenderGlobal p_update_0_) {
long i = System.currentTimeMillis();
if (i >= timeUpdateMs + 50L) {
timeUpdateMs = i;
synchronized(mapDynamicLights) {
updateMapDynamicLights(p_update_0_);
if (mapDynamicLights.size() > 0) {
for (DynamicLight dynamiclight: mapDynamicLights.values()) {
dynamiclight.update(p_update_0_);
}
}
}
}
}
private static void updateMapDynamicLights(RenderGlobal p_updateMapDynamicLights_0_) {
World world = p_updateMapDynamicLights_0_.getWorld();
if (world != null) {
for (Entity entity: world.getLoadedEntityList()) {
int i = getLightLevel(entity);
if (i > 0) {
Integer integer = IntegerCache.valueOf(entity.getEntityId());
DynamicLight dynamiclight = (DynamicLight) mapDynamicLights.get(integer);
if (dynamiclight == null) {
dynamiclight = new DynamicLight(entity);
mapDynamicLights.put(integer, dynamiclight);
}
} else {
Integer integer1 = IntegerCache.valueOf(entity.getEntityId());
DynamicLight dynamiclight1 = (DynamicLight) mapDynamicLights.remove(integer1);
if (dynamiclight1 != null) {
dynamiclight1.updateLitChunks(p_updateMapDynamicLights_0_);
}
}
}
}
}
public static int getCombinedLight(BlockPos p_getCombinedLight_0_, int p_getCombinedLight_1_) {
double d0 = getLightLevel(p_getCombinedLight_0_);
p_getCombinedLight_1_ = getCombinedLight(d0, p_getCombinedLight_1_);
return p_getCombinedLight_1_;
}
public static int getCombinedLight(Entity p_getCombinedLight_0_, int p_getCombinedLight_1_) {
double d0 = (double) getLightLevel(p_getCombinedLight_0_);
p_getCombinedLight_1_ = getCombinedLight(d0, p_getCombinedLight_1_);
return p_getCombinedLight_1_;
}
public static int getCombinedLight(double p_getCombinedLight_0_, int p_getCombinedLight_2_) {
if (p_getCombinedLight_0_ > 0.0D) {
int i = (int)(p_getCombinedLight_0_ * 16.0D);
int j = p_getCombinedLight_2_ & 255;
if (i > j) {
p_getCombinedLight_2_ = p_getCombinedLight_2_ & -256;
p_getCombinedLight_2_ = p_getCombinedLight_2_ | i;
}
}
return p_getCombinedLight_2_;
}
public static double getLightLevel(BlockPos p_getLightLevel_0_) {
double d0 = 0.0D;
synchronized(mapDynamicLights) {
for (DynamicLight dynamiclight: mapDynamicLights.values()) {
int i = dynamiclight.getLastLightLevel();
if (i > 0) {
double d1 = dynamiclight.getLastPosX();
double d2 = dynamiclight.getLastPosY();
double d3 = dynamiclight.getLastPosZ();
double d4 = (double) p_getLightLevel_0_.getX() - d1;
double d5 = (double) p_getLightLevel_0_.getY() - d2;
double d6 = (double) p_getLightLevel_0_.getZ() - d3;
double d7 = d4 * d4 + d5 * d5 + d6 * d6;
if (dynamiclight.isUnderwater() && !Config.isClearWater()) {
i = Config.limit(i - 2, 0, 15);
d7 *= 2.0D;
}
if (d7 <= 56.25D) {
double d8 = Math.sqrt(d7);
double d9 = 1.0D - d8 / 7.5D;
double d10 = d9 * (double) i;
if (d10 > d0) {
d0 = d10;
}
}
}
}
}
double d11 = Config.limit(d0, 0.0D, 15.0D);
return d11;
}
public static int getLightLevel(ItemStack p_getLightLevel_0_) {
if (p_getLightLevel_0_ == null) {
return 0;
} else {
Item item = p_getLightLevel_0_.getItem();
if (item instanceof ItemBlock) {
ItemBlock itemblock = (ItemBlock) item;
Block block = itemblock.getBlock();
if (block != null) {
return block.getLightValue();
}
}
return item == Items.lava_bucket ? Blocks.lava.getLightValue() : (item != Items.blaze_rod && item != Items.blaze_powder ? (item == Items.glowstone_dust ? 8 : (item == Items.prismarine_crystals ? 8 : (item == Items.magma_cream ? 8 : (item == Items.nether_star ? Blocks.beacon.getLightValue() / 2 : 0)))) : 10);
}
}
public static int getLightLevel(Entity p_getLightLevel_0_) {
if (p_getLightLevel_0_ == Minecraft.getMinecraft().getRenderViewEntity() && !Config.isDynamicHandLight()) {
return 0;
} else {
if (p_getLightLevel_0_ instanceof EntityPlayer) {
EntityPlayer entityplayer = (EntityPlayer) p_getLightLevel_0_;
if (entityplayer.isSpectator()) {
return 0;
}
}
if (p_getLightLevel_0_.isBurning()) {
return 15;
} else if (p_getLightLevel_0_ instanceof EntityFireball) {
return 15;
} else if (p_getLightLevel_0_ instanceof EntityTNTPrimed) {
return 15;
} else if (p_getLightLevel_0_ instanceof EntityBlaze) {
EntityBlaze entityblaze = (EntityBlaze) p_getLightLevel_0_;
return entityblaze.func_70845_n() ? 15 : 10;
} else if (p_getLightLevel_0_ instanceof EntityMagmaCube) {
EntityMagmaCube entitymagmacube = (EntityMagmaCube) p_getLightLevel_0_;
return (double) entitymagmacube.squishFactor > 0.6D ? 13 : 8;
} else {
if (p_getLightLevel_0_ instanceof EntityCreeper) {
EntityCreeper entitycreeper = (EntityCreeper) p_getLightLevel_0_;
if ((double) entitycreeper.getCreeperFlashIntensity(0.0F) > 0.001D) {
return 15;
}
}
if (p_getLightLevel_0_ instanceof EntityLivingBase) {
EntityLivingBase entitylivingbase = (EntityLivingBase) p_getLightLevel_0_;
ItemStack itemstack2 = entitylivingbase.getHeldItem();
int i = getLightLevel(itemstack2);
ItemStack itemstack1 = entitylivingbase.getEquipmentInSlot(4);
int j = getLightLevel(itemstack1);
return Math.max(i, j);
} else if (p_getLightLevel_0_ instanceof EntityItem) {
EntityItem entityitem = (EntityItem) p_getLightLevel_0_;
ItemStack itemstack = getItemStack(entityitem);
return getLightLevel(itemstack);
} else {
return 0;
}
}
}
}
public static void removeLights(RenderGlobal p_removeLights_0_) {
synchronized(mapDynamicLights) {
Collection < DynamicLight > collection = mapDynamicLights.values();
Iterator iterator = collection.iterator();
while (iterator.hasNext()) {
DynamicLight dynamiclight = (DynamicLight) iterator.next();
iterator.remove();
dynamiclight.updateLitChunks(p_removeLights_0_);
}
}
}
public static void clear() {
synchronized(mapDynamicLights) {
mapDynamicLights.clear();
}
}
public static int getCount() {
synchronized(mapDynamicLights) {
return mapDynamicLights.size();
}
}
public static ItemStack getItemStack(EntityItem p_getItemStack_0_) {
ItemStack itemstack = p_getItemStack_0_.getDataWatcher().getWatchableObjectItemStack(10);
return itemstack;
}
}

View File

@ -10,7 +10,7 @@ public class GuiQuality extends GuiScreen {
protected String title;
private GameSettings settings;
//private static GameSettings.Options[] enumOptions = new GameSettings.Options[] {GameSettings.Options.MIPMAP_LEVELS, GameSettings.Options.MIPMAP_TYPE, GameSettings.Options.AF_LEVEL, GameSettings.Options.AA_LEVEL, GameSettings.Options.CLEAR_WATER, GameSettings.Options.RANDOM_MOBS, GameSettings.Options.BETTER_GRASS, GameSettings.Options.BETTER_SNOW, GameSettings.Options.CUSTOM_FONTS, GameSettings.Options.CUSTOM_COLORS, GameSettings.Options.SWAMP_COLORS, GameSettings.Options.SMOOTH_BIOMES, GameSettings.Options.CONNECTED_TEXTURES, GameSettings.Options.NATURAL_TEXTURES, GameSettings.Options.CUSTOM_SKY, GameSettings.Options.CUSTOM_ITEMS, GameSettings.Options.DYNAMIC_LIGHTS};
private static GameSettings.Options[] enumOptions = new GameSettings.Options[] {GameSettings.Options.CLEAR_WATER, GameSettings.Options.BETTER_GRASS, GameSettings.Options.CUSTOM_SKY};
private static GameSettings.Options[] enumOptions = new GameSettings.Options[] {GameSettings.Options.CLEAR_WATER, GameSettings.Options.BETTER_GRASS, GameSettings.Options.CUSTOM_SKY, GameSettings.Options.DYNAMIC_LIGHTS};
public GuiQuality(GuiScreen p_i53_1_) {
this.prevScreen = p_i53_1_;

View File

@ -0,0 +1,20 @@
package net.PeytonPlayz585.shadow.math;
public class IntegerCache {
private static final int CACHE_SIZE = 4096;
private static final Integer[] cache = makeCache(4096);
private static Integer[] makeCache(int p_makeCache_0_) {
Integer[] ainteger = new Integer[p_makeCache_0_];
for (int i = 0; i < p_makeCache_0_; ++i) {
ainteger[i] = new Integer(i);
}
return ainteger;
}
public static Integer valueOf(int p_valueOf_0_) {
return p_valueOf_0_ >= 0 && p_valueOf_0_ < 4096 ? cache[p_valueOf_0_] : new Integer(p_valueOf_0_);
}
}

View File

@ -1,5 +1,7 @@
package net.minecraft.client.multiplayer;
import net.PeytonPlayz585.shadow.Config;
import net.PeytonPlayz585.shadow.DynamicLights;
import net.PeytonPlayz585.shadow.other.PlayerControllerOF;
import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom;
import java.util.Set;
@ -435,6 +437,17 @@ public class WorldClient extends World {
super.setWorldTime(i);
}
@Override
public int getCombinedLight(BlockPos pos, int lightValue) {
int i = super.getCombinedLight(pos, lightValue);
if (Config.isDynamicLights()) {
i = DynamicLights.getCombinedLight(pos, i);
}
return i;
}
/**
* Sets the block state at a given location. Flag 1 will cause a block update. Flag 2 will send the change to
* clients (you almost always want this). Flag 4 prevents the block from being re-rendered, if this is a client

View File

@ -2,6 +2,8 @@ package net.minecraft.client.renderer;
import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.*;
import net.PeytonPlayz585.shadow.Config;
import net.PeytonPlayz585.shadow.DynamicLights;
import net.lax1dude.eaglercraft.v1_8.minecraft.EaglerTextureAtlasSprite;
import net.lax1dude.eaglercraft.v1_8.opengl.EaglercraftGPU;
import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager;
@ -108,11 +110,15 @@ public class ItemRenderer {
}
private void func_178109_a(AbstractClientPlayer clientPlayer) {
int i = this.mc.theWorld.getCombinedLight(new BlockPos(clientPlayer.posX,
clientPlayer.posY + (double) clientPlayer.getEyeHeight(), clientPlayer.posZ), 0);
float f = (float) (i & '\uffff');
float f1 = (float) (i >> 16);
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, f, f1);
int i = this.mc.theWorld.getCombinedLight(new BlockPos(clientPlayer.posX, clientPlayer.posY + (double)clientPlayer.getEyeHeight(), clientPlayer.posZ), 0);
if (Config.isDynamicLights()) {
i = DynamicLights.getCombinedLight(this.mc.getRenderViewEntity(), i);
}
float f = (float)(i & 65535);
float f1 = (float)(i >> 16);
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, f, f1);
}
private void func_178110_a(EntityPlayerSP entityplayerspIn, float partialTicks) {

View File

@ -2,6 +2,8 @@ package net.minecraft.client.renderer;
import java.util.Arrays;
import net.PeytonPlayz585.shadow.Config;
import net.PeytonPlayz585.shadow.DynamicLights;
import net.minecraft.block.state.IBlockState;
import net.minecraft.init.Blocks;
import net.minecraft.tileentity.TileEntity;
@ -50,15 +52,21 @@ public class RegionRenderCache extends ChunkCache {
return this.chunkArray[i][j].getTileEntity(blockpos, Chunk.EnumCreateEntityType.QUEUED);
}
public int getCombinedLight(BlockPos blockpos, int i) {
int j = this.getPositionIndex(blockpos);
int k = this.combinedLights[j];
if (k == -1) {
k = super.getCombinedLight(blockpos, i);
this.combinedLights[j] = k;
}
public int getCombinedLight(BlockPos pos, int lightValue) {
int i = this.getPositionIndex(pos);
int j = this.combinedLights[i];
return k;
if (j == -1) {
j = super.getCombinedLight(pos, lightValue);
if (Config.isDynamicLights() && !this.getBlockState(pos).getBlock().isOpaqueCube()) {
j = DynamicLights.getCombinedLight(pos, j);
}
this.combinedLights[i] = j;
}
return j;
}
public IBlockState getBlockState(BlockPos blockpos) {

View File

@ -12,6 +12,7 @@ import java.util.Map;
import net.PeytonPlayz585.shadow.Config;
import net.PeytonPlayz585.shadow.CustomSky;
import net.PeytonPlayz585.shadow.DynamicLights;
import net.PeytonPlayz585.shadow.opengl.OpenGLManager;
import net.PeytonPlayz585.shadow.other.CloudRenderer;
import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom;
@ -138,7 +139,7 @@ public class RenderGlobal implements IWorldAccess, IResourceManagerReloadListene
*/
private List<RenderGlobal.ContainerLocalRenderInformation> renderInfos = Lists.newArrayListWithCapacity(69696);
private final Set<TileEntity> field_181024_n = Sets.newHashSet();
private ViewFrustum viewFrustum;
public ViewFrustum viewFrustum;
/**+
* The star GL Call list
*/
@ -379,6 +380,11 @@ public class RenderGlobal implements IWorldAccess, IResourceManagerReloadListene
this.frustumUpdatePosChunkZ = Integer.MIN_VALUE;
this.renderManager.set(worldClientIn);
this.theWorld = worldClientIn;
if (Config.isDynamicLights()) {
DynamicLights.clear();
}
if (worldClientIn != null) {
worldClientIn.addWorldAccess(this);
this.loadRenderers();
@ -402,6 +408,11 @@ public class RenderGlobal implements IWorldAccess, IResourceManagerReloadListene
Blocks.leaves.setGraphicsLevel(mc.gameSettings.shaders || mc.gameSettings.fancyGraphics);
Blocks.leaves2.setGraphicsLevel(mc.gameSettings.shaders || mc.gameSettings.fancyGraphics);
BlockModelRenderer.updateAoLightValue();
if (Config.isDynamicLights()) {
DynamicLights.clear();
}
this.renderDistanceChunks = this.mc.gameSettings.renderDistanceChunks;
this.renderDistance = this.renderDistanceChunks * 16;
this.renderDistanceSq = this.renderDistance * this.renderDistance;
@ -847,6 +858,10 @@ public class RenderGlobal implements IWorldAccess, IResourceManagerReloadListene
this.frustumUpdatePosChunkZ = viewEntity.chunkCoordZ;
this.viewFrustum.updateChunkPositions(viewEntity.posX, viewEntity.posZ);
}
if (Config.isDynamicLights()) {
DynamicLights.update(this);
}
this.theWorld.theProfiler.endStartSection("renderlistcamera");
double d3 = viewEntity.lastTickPosX + (viewEntity.posX - viewEntity.lastTickPosX) * partialTicks;
@ -2235,6 +2250,11 @@ public class RenderGlobal implements IWorldAccess, IResourceManagerReloadListene
* tracker.
*/
public void onEntityAdded(Entity var1) {
if (Config.isDynamicLights()) {
DynamicLights.entityAdded(var1, this);
}
}
/**+
@ -2244,6 +2264,11 @@ public class RenderGlobal implements IWorldAccess, IResourceManagerReloadListene
* entity tracker.
*/
public void onEntityRemoved(Entity var1) {
if (Config.isDynamicLights()) {
DynamicLights.entityRemoved(var1, this);
}
}
/**+
@ -2532,4 +2557,8 @@ public class RenderGlobal implements IWorldAccess, IResourceManagerReloadListene
return "" + Minecraft.getDebugFPS() + "fps | C: " + j + "/" + i + ", E: " + this.countEntitiesRendered + "+" + k
+ ", " + renderDispatcher.getDebugInfo();
}
public WorldClient getWorld() {
return this.theWorld;
}
}

View File

@ -3,6 +3,7 @@ package net.minecraft.client.renderer;
import net.minecraft.client.renderer.chunk.IRenderChunkFactory;
import net.minecraft.client.renderer.chunk.RenderChunk;
import net.minecraft.util.BlockPos;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
@ -141,7 +142,7 @@ public class ViewFrustum {
}
protected RenderChunk getRenderChunk(BlockPos pos) {
public RenderChunk getRenderChunk(BlockPos pos) {
int i = MathHelper.bucketInt(pos.getX(), 16);
int j = MathHelper.bucketInt(pos.getY(), 16);
int k = MathHelper.bucketInt(pos.getZ(), 16);
@ -162,4 +163,13 @@ public class ViewFrustum {
return null;
}
}
public RenderChunk getRenderChunk(RenderChunk p_getRenderChunk_1_, EnumFacing p_getRenderChunk_2_) {
if (p_getRenderChunk_1_ == null) {
return null;
} else {
BlockPos blockpos = p_getRenderChunk_1_.func_181701_a(p_getRenderChunk_2_);
return getRenderChunk(blockpos);
}
}
}

View File

@ -18,6 +18,7 @@ import com.google.common.collect.Sets;
import net.PeytonPlayz585.shadow.Config;
import net.PeytonPlayz585.shadow.CustomSky;
import net.PeytonPlayz585.shadow.DynamicLights;
import net.PeytonPlayz585.shadow.shaders.Shaders;
import net.lax1dude.eaglercraft.v1_8.ArrayUtils;
import net.lax1dude.eaglercraft.v1_8.EagRuntime;
@ -195,6 +196,7 @@ public class GameSettings {
public boolean ofCustomSky = true;
public boolean ofClearWater = false;
public int ofBetterGrass = 3;
public int ofDynamicLights = 3;
//Detail Settings
/** Clouds flag */
@ -229,6 +231,11 @@ public class GameSettings {
//Shaders
public int profile = 1;
//Other...
private static final int[] OF_DYNAMIC_LIGHTS = new int[] {3, 1, 2};
private static final String[] KEYS_DYNAMIC_LIGHTS = new String[] {"options.off", "options.graphics.fast", "options.graphics.fancy"};
public GameSettings(Minecraft mcIn) {
this.keyBindings = (KeyBinding[]) ArrayUtils.addAll(new KeyBinding[] { this.keyBindAttack, this.keyBindUseItem,
@ -649,6 +656,11 @@ public class GameSettings {
this.updateRenderClouds();
this.mc.renderGlobal.resetClouds();
}
if (parOptions == GameSettings.Options.DYNAMIC_LIGHTS) {
this.ofDynamicLights = nextValue(this.ofDynamicLights, OF_DYNAMIC_LIGHTS);
DynamicLights.removeLights(this.mc.renderGlobal);
}
this.saveOptions();
}
@ -910,6 +922,9 @@ public class GameSettings {
default:
return s + "Default";
}
} else if (parOptions == GameSettings.Options.DYNAMIC_LIGHTS) {
int k = indexOf(this.ofDynamicLights, OF_DYNAMIC_LIGHTS);
return s + getTranslation(KEYS_DYNAMIC_LIGHTS, k);
} else {
return s;
}
@ -1322,6 +1337,11 @@ public class GameSettings {
this.ofCloudsHeight = Float.valueOf(astring[1]).floatValue();
this.ofCloudsHeight = Config.limit(this.ofCloudsHeight, 0.0F, 1.0F);
}
if (astring[0].equals("ofDynamicLights") && astring.length >= 2) {
this.ofDynamicLights = Integer.valueOf(astring[1]).intValue();
this.ofDynamicLights = limit(this.ofDynamicLights, OF_DYNAMIC_LIGHTS);
}
Keyboard.setFunctionKeyModifier(keyBindFunction.getKeyCode());
@ -1459,6 +1479,7 @@ public class GameSettings {
printwriter.println("ofChunkUpdates:" + this.ofChunkUpdates);
printwriter.println("ofClouds:" + this.ofClouds);
printwriter.println("ofCloudsHeight:" + this.ofCloudsHeight);
printwriter.println("ofDynamicLights:" + this.ofDynamicLights);
for (KeyBinding keybinding : this.keyBindings) {
printwriter.println("key_" + keybinding.getKeyDescription() + ":" + keybinding.getKeyCode());
@ -1625,7 +1646,8 @@ public class GameSettings {
SMOOTH_FPS("Smooth FPS", false, false),
CHUNK_UPDATES("Chunk Updates", false, false),
CLOUDS("Clouds", false, false),
CLOUD_HEIGHT("Cloud Height", true, false);
CLOUD_HEIGHT("Cloud Height", true, false),
DYNAMIC_LIGHTS("Dynamic Lights", false, false);
private final boolean enumFloat;
private final boolean enumBoolean;
@ -1706,6 +1728,37 @@ public class GameSettings {
}
}
private static int limit(int p_limit_0_, int[] p_limit_1_) {
int i = indexOf(p_limit_0_, p_limit_1_);
return i < 0 ? p_limit_1_[0] : p_limit_0_;
}
private static int indexOf(int p_indexOf_0_, int[] p_indexOf_1_) {
for (int i = 0; i < p_indexOf_1_.length; ++i) {
if (p_indexOf_1_[i] == p_indexOf_0_) {
return i;
}
}
return -1;
}
private static int nextValue(int p_nextValue_0_, int[] p_nextValue_1_) {
int i = indexOf(p_nextValue_0_, p_nextValue_1_);
if (i < 0) {
return p_nextValue_1_[0];
} else {
++i;
if (i >= p_nextValue_1_.length) {
i = 0;
}
return p_nextValue_1_[i];
}
}
public void setAllAnimations(boolean p_setAllAnimations_1_) {
int i = p_setAllAnimations_1_ ? 0 : 2;
this.ofAnimatedWater = i;