From 8118c4fca363787f3da1ef4e7c8627e1de0d4761 Mon Sep 17 00:00:00 2001 From: PeytonPlayz595 <106421860+PeytonPlayz595@users.noreply.github.com> Date: Sun, 14 Apr 2024 20:36:32 -0400 Subject: [PATCH] Custom colors, swamp colors, smooth biomes --- .../PeytonPlayz585/shadow/CustomColors.java | 86 ++++++++++++++++ .../net/PeytonPlayz585/shadow/RenderEnv.java | 4 +- .../PeytonPlayz585/shadow/TextureUtils.java | 1 + .../v1_8/opengl/WorldRenderer.java | 15 +++ .../minecraft/client/gui/FontRenderer.java | 22 ++++- .../net/minecraft/client/gui/GuiIngame.java | 6 ++ .../client/renderer/BlockFluidRenderer.java | 5 +- .../client/renderer/BlockModelRenderer.java | 66 ++++++------- .../client/renderer/EntityRenderer.java | 25 +++++ .../client/renderer/RenderGlobal.java | 55 +++++++++-- .../client/renderer/entity/RenderItem.java | 27 ++++- .../client/renderer/entity/RenderXPOrb.java | 98 +++++++++++-------- .../entity/layers/LayerSheepWool.java | 13 +++ .../entity/layers/LayerWolfCollar.java | 7 ++ .../tileentity/TileEntitySignRenderer.java | 12 ++- .../net/minecraft/potion/PotionHelper.java | 8 +- 16 files changed, 354 insertions(+), 96 deletions(-) diff --git a/src/main/java/net/PeytonPlayz585/shadow/CustomColors.java b/src/main/java/net/PeytonPlayz585/shadow/CustomColors.java index ac9825c..f2dcb9e 100644 --- a/src/main/java/net/PeytonPlayz585/shadow/CustomColors.java +++ b/src/main/java/net/PeytonPlayz585/shadow/CustomColors.java @@ -1458,4 +1458,90 @@ public class CustomColors { boolean isColorConstant(); } + + public static int getColorMultiplier(BakedQuad p_getColorMultiplier_0_, Block p_getColorMultiplier_1_, IBlockAccess p_getColorMultiplier_2_, BlockPos p_getColorMultiplier_3_, RenderEnv p_getColorMultiplier_4_) { + if (blockColormaps != null) { + IBlockState iblockstate = p_getColorMultiplier_4_.getBlockState(); + + if (!p_getColorMultiplier_0_.hasTintIndex()) { + if (p_getColorMultiplier_1_ == Blocks.grass) { + iblockstate = BLOCK_STATE_DIRT; + } + + if (p_getColorMultiplier_1_ == Blocks.redstone_wire) { + return -1; + } + } + + if (p_getColorMultiplier_1_ == Blocks.double_plant && p_getColorMultiplier_4_.getMetadata() >= 8) { + p_getColorMultiplier_3_ = p_getColorMultiplier_3_.down(); + iblockstate = p_getColorMultiplier_2_.getBlockState(p_getColorMultiplier_3_); + } + + CustomColormap customcolormap = getBlockColormap(iblockstate); + + if (customcolormap != null) { + if (Config.isSmoothBiomes() && !customcolormap.isColorConstant()) { + return getSmoothColorMultiplier(iblockstate, p_getColorMultiplier_2_, p_getColorMultiplier_3_, customcolormap, p_getColorMultiplier_4_.getColorizerBlockPosM()); + } + + return customcolormap.getColor(p_getColorMultiplier_2_, p_getColorMultiplier_3_); + } + } + + if (!p_getColorMultiplier_0_.hasTintIndex()) { + return -1; + } else if (p_getColorMultiplier_1_ == Blocks.waterlily) { + return getLilypadColorMultiplier(p_getColorMultiplier_2_, p_getColorMultiplier_3_); + } else if (p_getColorMultiplier_1_ == Blocks.redstone_wire) { + return getRedstoneColor(p_getColorMultiplier_4_.getBlockState()); + } else if (p_getColorMultiplier_1_ instanceof BlockStem) { + return getStemColorMultiplier(p_getColorMultiplier_1_, p_getColorMultiplier_2_, p_getColorMultiplier_3_, p_getColorMultiplier_4_); + } else if (useDefaultGrassFoliageColors) { + return -1; + } else { + int i = p_getColorMultiplier_4_.getMetadata(); + CustomColors.IColorizer customcolors$icolorizer; + IBlockState iblockstate = p_getColorMultiplier_4_.getBlockState(); + + if (p_getColorMultiplier_1_ != Blocks.grass && p_getColorMultiplier_1_ != Blocks.tallgrass && p_getColorMultiplier_1_ != Blocks.double_plant) { + if (p_getColorMultiplier_1_ == Blocks.double_plant) { + customcolors$icolorizer = COLORIZER_GRASS; + + if (i >= 8) { + p_getColorMultiplier_3_ = p_getColorMultiplier_3_.down(); + } + } else if (p_getColorMultiplier_1_ == Blocks.leaves) { + switch (i & 3) { + case 0: + customcolors$icolorizer = COLORIZER_FOLIAGE; + break; + + case 1: + customcolors$icolorizer = COLORIZER_FOLIAGE_PINE; + break; + + case 2: + customcolors$icolorizer = COLORIZER_FOLIAGE_BIRCH; + break; + + default: + customcolors$icolorizer = COLORIZER_FOLIAGE; + } + } else if (p_getColorMultiplier_1_ == Blocks.leaves2) { + customcolors$icolorizer = COLORIZER_FOLIAGE; + } else { + if (p_getColorMultiplier_1_ != Blocks.vine) { + return -1; + } + + customcolors$icolorizer = COLORIZER_FOLIAGE; + } + } else { + customcolors$icolorizer = COLORIZER_GRASS; + } + + return Config.isSmoothBiomes() && !customcolors$icolorizer.isColorConstant() ? getSmoothColorMultiplier(iblockstate, p_getColorMultiplier_2_, p_getColorMultiplier_3_, customcolors$icolorizer, p_getColorMultiplier_4_.getColorizerBlockPosM()) : customcolors$icolorizer.getColor(iblockstate, p_getColorMultiplier_2_, p_getColorMultiplier_3_); + } + } } \ No newline at end of file diff --git a/src/main/java/net/PeytonPlayz585/shadow/RenderEnv.java b/src/main/java/net/PeytonPlayz585/shadow/RenderEnv.java index bf6e2ae..1a606cf 100644 --- a/src/main/java/net/PeytonPlayz585/shadow/RenderEnv.java +++ b/src/main/java/net/PeytonPlayz585/shadow/RenderEnv.java @@ -27,7 +27,7 @@ public class RenderEnv { private boolean[] borderFlags = null; private static ThreadLocal threadLocalInstance = new ThreadLocal(); - private RenderEnv(IBlockAccess p_i94_1_, IBlockState p_i94_2_, BlockPos p_i94_3_) { + public RenderEnv(IBlockState p_i94_2_, BlockPos p_i94_3_) { this.blockState = p_i94_2_; this.blockPos = p_i94_3_; this.gameSettings = Config.getGameSettings(); @@ -37,7 +37,7 @@ public class RenderEnv { RenderEnv renderenv = (RenderEnv)threadLocalInstance.get(); if (renderenv == null) { - renderenv = new RenderEnv(p_getInstance_0_, p_getInstance_1_, p_getInstance_2_); + renderenv = new RenderEnv(p_getInstance_1_, p_getInstance_2_); threadLocalInstance.set(renderenv); return renderenv; } else { diff --git a/src/main/java/net/PeytonPlayz585/shadow/TextureUtils.java b/src/main/java/net/PeytonPlayz585/shadow/TextureUtils.java index 6f07239..55f9829 100644 --- a/src/main/java/net/PeytonPlayz585/shadow/TextureUtils.java +++ b/src/main/java/net/PeytonPlayz585/shadow/TextureUtils.java @@ -97,6 +97,7 @@ public class TextureUtils { update(); BetterGrass.update(); BetterSnow.update(); + CustomColors.update(); CustomSky.update(); CustomItems.updateModels(); //SmartLeaves.updateLeavesModels(); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/WorldRenderer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/WorldRenderer.java index 00ca615..91062c9 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/WorldRenderer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/WorldRenderer.java @@ -7,12 +7,15 @@ import java.util.Arrays; import java.util.BitSet; import java.util.Comparator; +import net.PeytonPlayz585.shadow.RenderEnv; import net.lax1dude.eaglercraft.v1_8.EagRuntime; import net.lax1dude.eaglercraft.v1_8.internal.PlatformBufferFunctions; import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; import net.lax1dude.eaglercraft.v1_8.vector.Vector3f; +import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.util.BlockPos; import net.minecraft.util.MathHelper; /** @@ -47,6 +50,8 @@ public class WorldRenderer { private FloatBuffer floatBuffer; private boolean hasBeenFreed = false; + + public RenderEnv renderEnv = null; public WorldRenderer(int bufferSizeIn) { this.byteBuffer = GLAllocation.createDirectByteBuffer(bufferSizeIn << 2); @@ -556,4 +561,14 @@ public class WorldRenderer { return this.stateVertexFormat; } } + + public RenderEnv getRenderEnv(IBlockState p_getRenderEnv_1_, BlockPos p_getRenderEnv_2_) { + if (this.renderEnv == null) { + this.renderEnv = new RenderEnv(p_getRenderEnv_1_, p_getRenderEnv_2_); + return this.renderEnv; + } else { + this.renderEnv.reset(p_getRenderEnv_1_, p_getRenderEnv_2_); + return this.renderEnv; + } + } } \ No newline at end of file diff --git a/src/main/java/net/minecraft/client/gui/FontRenderer.java b/src/main/java/net/minecraft/client/gui/FontRenderer.java index d403197..6cbe867 100644 --- a/src/main/java/net/minecraft/client/gui/FontRenderer.java +++ b/src/main/java/net/minecraft/client/gui/FontRenderer.java @@ -7,6 +7,7 @@ import java.util.List; import java.util.Properties; import net.PeytonPlayz585.shadow.Config; +import net.PeytonPlayz585.shadow.CustomColors; import net.PeytonPlayz585.shadow.FontUtils; import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom; @@ -395,6 +396,11 @@ public class FontRenderer implements IResourceManagerReloadListener { } int j1 = this.colorCode[i1]; + + if (Config.isCustomColors()) { + j1 = CustomColors.getTextColor(i1, j1); + } + this.textColor = j1; GlStateManager.color((float) (j1 >> 16) / 255.0F, (float) (j1 >> 8 & 255) / 255.0F, (float) (j1 & 255) / 255.0F, this.alpha); @@ -882,6 +888,18 @@ public class FontRenderer implements IResourceManagerReloadListener { } public int getColorCode(char character) { - return this.colorCode["0123456789abcdef".indexOf(character)]; - } + int i = "0123456789abcdef".indexOf(character); + + if (i >= 0 && i < this.colorCode.length) { + int j = this.colorCode[i]; + + if (Config.isCustomColors()) { + j = CustomColors.getTextColor(i, j); + } + + return j; + } else { + return 16777215; + } + } } \ No newline at end of file diff --git a/src/main/java/net/minecraft/client/gui/GuiIngame.java b/src/main/java/net/minecraft/client/gui/GuiIngame.java index 2e11497..81c51e7 100644 --- a/src/main/java/net/minecraft/client/gui/GuiIngame.java +++ b/src/main/java/net/minecraft/client/gui/GuiIngame.java @@ -6,6 +6,7 @@ import java.util.ArrayList; import java.util.Collection; import net.PeytonPlayz585.shadow.Config; +import net.PeytonPlayz585.shadow.CustomColors; import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom; import net.lax1dude.eaglercraft.v1_8.minecraft.EaglerTextureAtlasSprite; @@ -386,6 +387,11 @@ public class GuiIngame extends Gui { if (this.mc.thePlayer.experienceLevel > 0) { this.mc.mcProfiler.startSection("expLevel"); int i1 = 8453920; + + if (Config.isCustomColors()) { + i1 = CustomColors.getExpBarTextColor(i1); + } + String s = "" + this.mc.thePlayer.experienceLevel; int j1 = (parScaledResolution.getScaledWidth() - this.getFontRenderer().getStringWidth(s)) / 2; int l = parScaledResolution.getScaledHeight() - 31 - 4; diff --git a/src/main/java/net/minecraft/client/renderer/BlockFluidRenderer.java b/src/main/java/net/minecraft/client/renderer/BlockFluidRenderer.java index 6b4c069..27d531c 100644 --- a/src/main/java/net/minecraft/client/renderer/BlockFluidRenderer.java +++ b/src/main/java/net/minecraft/client/renderer/BlockFluidRenderer.java @@ -1,5 +1,7 @@ package net.minecraft.client.renderer; +import net.PeytonPlayz585.shadow.CustomColors; +import net.PeytonPlayz585.shadow.RenderEnv; import net.lax1dude.eaglercraft.v1_8.minecraft.EaglerTextureAtlasSprite; import net.lax1dude.eaglercraft.v1_8.opengl.WorldRenderer; import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.BlockVertexIDs; @@ -60,7 +62,8 @@ public class BlockFluidRenderer { boolean realistic = !lava && DeferredStateManager.isRenderingRealisticWater(); blockliquid.setBlockBoundsBasedOnState(blockAccess, blockPosIn); EaglerTextureAtlasSprite[] atextureatlassprite = lava ? this.atlasSpritesLava : this.atlasSpritesWater; - int i = blockliquid.colorMultiplier(blockAccess, blockPosIn); + RenderEnv renderenv = worldRendererIn.getRenderEnv(blockStateIn, blockPosIn); + int i = CustomColors.getFluidColor(blockAccess, blockStateIn, blockPosIn, renderenv); float f = (float) (i >> 16 & 255) / 255.0F; float f1 = (float) (i >> 8 & 255) / 255.0F; float f2 = (float) (i & 255) / 255.0F; diff --git a/src/main/java/net/minecraft/client/renderer/BlockModelRenderer.java b/src/main/java/net/minecraft/client/renderer/BlockModelRenderer.java index 9064e4c..b4e491c 100644 --- a/src/main/java/net/minecraft/client/renderer/BlockModelRenderer.java +++ b/src/main/java/net/minecraft/client/renderer/BlockModelRenderer.java @@ -6,6 +6,7 @@ import java.util.List; import net.PeytonPlayz585.shadow.BetterGrass; import net.PeytonPlayz585.shadow.BetterSnow; import net.PeytonPlayz585.shadow.Config; +import net.PeytonPlayz585.shadow.CustomColors; import net.PeytonPlayz585.shadow.RenderEnv; import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; import net.lax1dude.eaglercraft.v1_8.opengl.WorldRenderer; @@ -105,7 +106,7 @@ public class BlockModelRenderer { list = BetterGrass.getFaceQuads(blockAccessIn, blockIn, blockPosIn, enumfacing, list); } - this.renderModelAmbientOcclusionQuads(blockAccessIn, blockIn, blockPosIn, worldRendererIn, list, afloat, bitset, blockmodelrenderer$ambientocclusionface); + this.renderModelAmbientOcclusionQuads(blockAccessIn, blockIn, blockPosIn, worldRendererIn, list, afloat, bitset, blockmodelrenderer$ambientocclusionface, RenderEnv.getInstance(blockAccessIn, blockAccessIn.getBlockState(blockPosIn), blockPosIn)); flag = true; } } @@ -114,7 +115,7 @@ public class BlockModelRenderer { List list1 = modelIn.getGeneralQuads(); if (list1.size() > 0) { this.renderModelAmbientOcclusionQuads(blockAccessIn, blockIn, blockPosIn, worldRendererIn, list1, afloat, - bitset, blockmodelrenderer$ambientocclusionface); + bitset, blockmodelrenderer$ambientocclusionface, RenderEnv.getInstance(blockAccessIn, blockAccessIn.getBlockState(blockPosIn), blockPosIn)); flag = true; } @@ -176,7 +177,7 @@ public class BlockModelRenderer { private void renderModelAmbientOcclusionQuads(IBlockAccess blockAccessIn, Block blockIn, BlockPos blockPosIn, WorldRenderer worldRendererIn, List listQuadsIn, float[] quadBounds, BitSet boundsFlags, - BlockModelRenderer.AmbientOcclusionFace aoFaceIn) { + BlockModelRenderer.AmbientOcclusionFace aoFaceIn, RenderEnv renderenv) { boolean isDeferred = DeferredStateManager.isDeferredRenderer(); double d0 = (double) blockPosIn.getX(); double d1 = (double) blockPosIn.getY(); @@ -191,42 +192,41 @@ public class BlockModelRenderer { } } - for (int i = 0, l = listQuadsIn.size(); i < l; ++i) { - BakedQuad bakedquad = listQuadsIn.get(i); + for (BakedQuad bakedquad : listQuadsIn) { int[] vertData = isDeferred ? bakedquad.getVertexDataWithNormals() : bakedquad.getVertexData(); this.fillQuadBounds(blockIn, vertData, bakedquad.getFace(), quadBounds, boundsFlags, isDeferred ? 8 : 7); aoFaceIn.updateVertexBrightness(blockAccessIn, blockIn, blockPosIn, bakedquad.getFace(), quadBounds, boundsFlags); worldRendererIn.addVertexData(vertData); - worldRendererIn.putBrightness4(aoFaceIn.vertexBrightness[0], aoFaceIn.vertexBrightness[1], - aoFaceIn.vertexBrightness[2], aoFaceIn.vertexBrightness[3]); - if (bakedquad.hasTintIndex()) { - int j = blockIn.colorMultiplier(blockAccessIn, blockPosIn, bakedquad.getTintIndex()); - if (EntityRenderer.anaglyphEnable) { - j = TextureUtil.anaglyphColor(j); - } + worldRendererIn.putBrightness4(aoFaceIn.vertexBrightness[0], aoFaceIn.vertexBrightness[1], aoFaceIn.vertexBrightness[2], aoFaceIn.vertexBrightness[3]); + int k = CustomColors.getColorMultiplier(bakedquad, blockIn, blockAccessIn, blockPosIn, renderenv); + + if (!bakedquad.hasTintIndex() && k == -1) { + worldRendererIn.putColorMultiplier(aoFaceIn.vertexColorMultiplier[0], aoFaceIn.vertexColorMultiplier[0], aoFaceIn.vertexColorMultiplier[0], 4); + worldRendererIn.putColorMultiplier(aoFaceIn.vertexColorMultiplier[1], aoFaceIn.vertexColorMultiplier[1], aoFaceIn.vertexColorMultiplier[1], 3); + worldRendererIn.putColorMultiplier(aoFaceIn.vertexColorMultiplier[2], aoFaceIn.vertexColorMultiplier[2], aoFaceIn.vertexColorMultiplier[2], 2); + worldRendererIn.putColorMultiplier(aoFaceIn.vertexColorMultiplier[3], aoFaceIn.vertexColorMultiplier[3], aoFaceIn.vertexColorMultiplier[3], 1); + } else { + int j; - float f = (float) (j >> 16 & 255) / 255.0F; - float f1 = (float) (j >> 8 & 255) / 255.0F; - float f2 = (float) (j & 255) / 255.0F; - worldRendererIn.putColorMultiplier(aoFaceIn.vertexColorMultiplier[0] * f, - aoFaceIn.vertexColorMultiplier[0] * f1, aoFaceIn.vertexColorMultiplier[0] * f2, 4); - worldRendererIn.putColorMultiplier(aoFaceIn.vertexColorMultiplier[1] * f, - aoFaceIn.vertexColorMultiplier[1] * f1, aoFaceIn.vertexColorMultiplier[1] * f2, 3); - worldRendererIn.putColorMultiplier(aoFaceIn.vertexColorMultiplier[2] * f, - aoFaceIn.vertexColorMultiplier[2] * f1, aoFaceIn.vertexColorMultiplier[2] * f2, 2); - worldRendererIn.putColorMultiplier(aoFaceIn.vertexColorMultiplier[3] * f, - aoFaceIn.vertexColorMultiplier[3] * f1, aoFaceIn.vertexColorMultiplier[3] * f2, 1); - } else { - worldRendererIn.putColorMultiplier(aoFaceIn.vertexColorMultiplier[0], aoFaceIn.vertexColorMultiplier[0], - aoFaceIn.vertexColorMultiplier[0], 4); - worldRendererIn.putColorMultiplier(aoFaceIn.vertexColorMultiplier[1], aoFaceIn.vertexColorMultiplier[1], - aoFaceIn.vertexColorMultiplier[1], 3); - worldRendererIn.putColorMultiplier(aoFaceIn.vertexColorMultiplier[2], aoFaceIn.vertexColorMultiplier[2], - aoFaceIn.vertexColorMultiplier[2], 2); - worldRendererIn.putColorMultiplier(aoFaceIn.vertexColorMultiplier[3], aoFaceIn.vertexColorMultiplier[3], - aoFaceIn.vertexColorMultiplier[3], 1); - } + if (k != -1) { + j = k; + } else { + j = blockIn.colorMultiplier(blockAccessIn, blockPosIn, bakedquad.getTintIndex()); + } + + if (EntityRenderer.anaglyphEnable) { + j = TextureUtil.anaglyphColor(j); + } + + float f = (float)(j >> 16 & 255) / 255.0F; + float f1 = (float)(j >> 8 & 255) / 255.0F; + float f2 = (float)(j & 255) / 255.0F; + worldRendererIn.putColorMultiplier(aoFaceIn.vertexColorMultiplier[0] * f, aoFaceIn.vertexColorMultiplier[0] * f1, aoFaceIn.vertexColorMultiplier[0] * f2, 4); + worldRendererIn.putColorMultiplier(aoFaceIn.vertexColorMultiplier[1] * f, aoFaceIn.vertexColorMultiplier[1] * f1, aoFaceIn.vertexColorMultiplier[1] * f2, 3); + worldRendererIn.putColorMultiplier(aoFaceIn.vertexColorMultiplier[2] * f, aoFaceIn.vertexColorMultiplier[2] * f1, aoFaceIn.vertexColorMultiplier[2] * f2, 2); + worldRendererIn.putColorMultiplier(aoFaceIn.vertexColorMultiplier[3] * f, aoFaceIn.vertexColorMultiplier[3] * f1, aoFaceIn.vertexColorMultiplier[3] * f2, 1); + } worldRendererIn.putPosition(d0, d1, d2); } diff --git a/src/main/java/net/minecraft/client/renderer/EntityRenderer.java b/src/main/java/net/minecraft/client/renderer/EntityRenderer.java index 5bd8f97..03e5d95 100644 --- a/src/main/java/net/minecraft/client/renderer/EntityRenderer.java +++ b/src/main/java/net/minecraft/client/renderer/EntityRenderer.java @@ -14,6 +14,7 @@ import com.google.common.base.Predicate; import com.google.common.base.Predicates; import net.PeytonPlayz585.shadow.Config; +import net.PeytonPlayz585.shadow.CustomColors; import net.PeytonPlayz585.shadow.DebugChunkRenderer; import net.PeytonPlayz585.shadow.Lagometer; import net.PeytonPlayz585.shadow.TextureUtils; @@ -788,6 +789,14 @@ public class EntityRenderer implements IResourceManagerReloadListener { this.mc.mcProfiler.startSection("lightTex"); WorldClient worldclient = this.mc.theWorld; if (worldclient != null) { + + if (Config.isCustomColors() && CustomColors.updateLightmap(worldclient, this.torchFlickerX, this.lightmapColors, this.mc.thePlayer.isPotionActive(Potion.nightVision), partialTicks)) { + this.lightmapTexture.updateDynamicTexture(); + this.lightmapUpdateNeeded = false; + this.mc.mcProfiler.endSection(); + return; + } + float f = worldclient.getSunBrightness(1.0F); float f1 = f * 0.95F + 0.05F; @@ -1671,10 +1680,12 @@ public class EntityRenderer implements IResourceManagerReloadListener { float f = 0.25F + 0.75F * (float) this.mc.gameSettings.renderDistanceChunks / 32.0F; f = 1.0F - (float) Math.pow((double) f, 0.25D); Vec3 vec3 = worldclient.getSkyColor(this.mc.getRenderViewEntity(), partialTicks); + vec3 = CustomColors.getWorldSkyColor(vec3, worldclient, this.mc.getRenderViewEntity(), partialTicks); float f1 = (float) vec3.xCoord; float f2 = (float) vec3.yCoord; float f3 = (float) vec3.zCoord; Vec3 vec31 = worldclient.getFogColor(partialTicks); + vec31 = CustomColors.getWorldFogColor(vec31, worldclient, this.mc.getRenderViewEntity(), partialTicks); this.fogColorRed = (float) vec31.xCoord; this.fogColorGreen = (float) vec31.yCoord; this.fogColorBlue = (float) vec31.zCoord; @@ -1736,10 +1747,24 @@ public class EntityRenderer implements IResourceManagerReloadListener { this.fogColorRed = 0.02F + f12; this.fogColorGreen = 0.02F + f12; this.fogColorBlue = 0.2F + f12; + Vec3 vec35 = CustomColors.getUnderwaterColor(this.mc.theWorld, this.mc.getRenderViewEntity().posX, this.mc.getRenderViewEntity().posY + 1.0D, this.mc.getRenderViewEntity().posZ); + + if (vec35 != null) { + this.fogColorRed = (float)vec35.xCoord; + this.fogColorGreen = (float)vec35.yCoord; + this.fogColorBlue = (float)vec35.zCoord; + } } else if (block.getMaterial() == Material.lava) { this.fogColorRed = 0.6F; this.fogColorGreen = 0.1F; this.fogColorBlue = 0.0F; + Vec3 vec34 = CustomColors.getUnderlavaColor(this.mc.theWorld, this.mc.getRenderViewEntity().posX, this.mc.getRenderViewEntity().posY + 1.0D, this.mc.getRenderViewEntity().posZ); + + if (vec34 != null) { + this.fogColorRed = (float)vec34.xCoord; + this.fogColorGreen = (float)vec34.yCoord; + this.fogColorBlue = (float)vec34.zCoord; + } } float f13 = this.fogColor2 + (this.fogColor1 - this.fogColor2) * partialTicks; diff --git a/src/main/java/net/minecraft/client/renderer/RenderGlobal.java b/src/main/java/net/minecraft/client/renderer/RenderGlobal.java index 9a9ec7e..d754332 100644 --- a/src/main/java/net/minecraft/client/renderer/RenderGlobal.java +++ b/src/main/java/net/minecraft/client/renderer/RenderGlobal.java @@ -10,9 +10,11 @@ import java.util.List; import java.util.Map; import net.PeytonPlayz585.shadow.Config; +import net.PeytonPlayz585.shadow.CustomColors; import net.PeytonPlayz585.shadow.CustomSky; import net.PeytonPlayz585.shadow.DynamicLights; import net.PeytonPlayz585.shadow.Lagometer; +import net.PeytonPlayz585.shadow.RenderEnv; import net.PeytonPlayz585.shadow.experimental.VisGraphExperimental; import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom; import net.lax1dude.eaglercraft.v1_8.HString; @@ -187,6 +189,7 @@ public class RenderGlobal implements IWorldAccess, IResourceManagerReloadListene private double prevRenderSortY; private double prevRenderSortZ; boolean displayListEntitiesDirty = true; + private RenderEnv renderEnv = new RenderEnv(Blocks.air.getDefaultState(), new BlockPos(0, 0, 0)); public RenderGlobal(Minecraft mcIn) { this.mc = mcIn; @@ -377,6 +380,8 @@ public class RenderGlobal implements IWorldAccess, IResourceManagerReloadListene DynamicLights.clear(); } + this.renderEnv.reset((IBlockState)null, (BlockPos)null); + if (worldClientIn != null) { worldClientIn.addWorldAccess(this); this.loadRenderers(); @@ -1333,12 +1338,24 @@ public class RenderGlobal implements IWorldAccess, IResourceManagerReloadListene } 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(); + int j = 40; + int k = 40; + int l = 40; + + if (Config.isCustomColors()) { + Vec3 vec3 = new Vec3((double)j / 255.0D, (double)k / 255.0D, (double)l / 255.0D); + vec3 = CustomColors.getWorldSkyColor(vec3, this.theWorld, this.mc.getRenderViewEntity(), 0.0F); + j = (int)(vec3.xCoord * 255.0D); + k = (int)(vec3.yCoord * 255.0D); + l = (int)(vec3.zCoord * 255.0D); + } + + worldrenderer.pos(-100.0D, -100.0D, -100.0D).tex(0.0D, 0.0D).color(j, k, l, 255).endVertex(); + worldrenderer.pos(-100.0D, -100.0D, 100.0D).tex(0.0D, 16.0D).color(j, k, l, 255).endVertex(); + worldrenderer.pos(100.0D, -100.0D, 100.0D).tex(16.0D, 16.0D).color(j, k, l, 255).endVertex(); + worldrenderer.pos(100.0D, -100.0D, -100.0D).tex(16.0D, 0.0D).color(j, k, l, 255).endVertex(); + tessellator.draw(); + GlStateManager.popMatrix(); } GlStateManager.depthMask(true); @@ -1353,6 +1370,7 @@ public class RenderGlobal implements IWorldAccess, IResourceManagerReloadListene } else if (this.mc.theWorld.provider.isSurfaceWorld()) { GlStateManager.disableTexture2D(); Vec3 vec3 = this.theWorld.getSkyColor(this.mc.getRenderViewEntity(), partialTicks); + vec3 = CustomColors.getSkyColor(vec3, this.mc.theWorld, this.mc.getRenderViewEntity().posX, this.mc.getRenderViewEntity().posY + 1.0D, this.mc.getRenderViewEntity().posZ); float f = (float) vec3.xCoord; float f1 = (float) vec3.yCoord; float f2 = (float) vec3.zCoord; @@ -2337,6 +2355,31 @@ public class RenderGlobal implements IWorldAccess, IResourceManagerReloadListene return null; } else { EntityFX entityfx = this.mc.effectRenderer.spawnEffectParticle(p_174974_1_, p_174974_3_, p_174974_5_, p_174974_7_, p_174974_9_, p_174974_11_, p_174974_13_, p_174974_15_); + + if (p_174974_1_ == EnumParticleTypes.WATER_BUBBLE.getParticleID()) { + CustomColors.updateWaterFX(entityfx, this.theWorld, p_174974_3_, p_174974_5_, p_174974_7_, this.renderEnv); + } + + if (p_174974_1_ == EnumParticleTypes.WATER_SPLASH.getParticleID()) { + CustomColors.updateWaterFX(entityfx, this.theWorld, p_174974_3_, p_174974_5_, p_174974_7_, this.renderEnv); + } + + if (p_174974_1_ == EnumParticleTypes.WATER_DROP.getParticleID()) { + CustomColors.updateWaterFX(entityfx, this.theWorld, p_174974_3_, p_174974_5_, p_174974_7_, this.renderEnv); + } + + if (p_174974_1_ == EnumParticleTypes.TOWN_AURA.getParticleID()) { + CustomColors.updateMyceliumFX(entityfx); + } + + if (p_174974_1_ == EnumParticleTypes.PORTAL.getParticleID()) { + CustomColors.updatePortalFX(entityfx); + } + + if (p_174974_1_ == EnumParticleTypes.REDSTONE.getParticleID()) { + CustomColors.updateReddustFX(entityfx, this.theWorld, p_174974_3_, p_174974_5_, p_174974_7_); + } + return entityfx; } } diff --git a/src/main/java/net/minecraft/client/renderer/entity/RenderItem.java b/src/main/java/net/minecraft/client/renderer/entity/RenderItem.java index 0ab8eca..01b2a3b 100644 --- a/src/main/java/net/minecraft/client/renderer/entity/RenderItem.java +++ b/src/main/java/net/minecraft/client/renderer/entity/RenderItem.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.concurrent.Callable; import net.PeytonPlayz585.shadow.Config; +import net.PeytonPlayz585.shadow.CustomColors; import net.PeytonPlayz585.shadow.CustomItems; import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; import net.lax1dude.eaglercraft.v1_8.opengl.WorldRenderer; @@ -309,6 +310,11 @@ public class RenderItem implements IResourceManagerReloadListener { int k = color; if (flag && bakedquad.hasTintIndex()) { k = stack.getItem().getColorFromItemStack(stack, bakedquad.getTintIndex()); + + if (Config.isCustomColors()) { + k = CustomColors.getColorFromItemStack(stack, bakedquad.getTintIndex(), k); + } + if (EntityRenderer.anaglyphEnable) { k = TextureUtil.anaglyphColor(k); } @@ -512,10 +518,8 @@ public class RenderItem implements IResourceManagerReloadListener { } if (stack.isItemDamaged()) { - int j = (int) Math - .round(13.0D - (double) stack.getItemDamage() * 13.0D / (double) stack.getMaxDamage()); - int i = (int) Math - .round(255.0D - (double) stack.getItemDamage() * 255.0D / (double) stack.getMaxDamage()); + int j1 = (int)Math.round(13.0D - (double)stack.getItemDamage() * 13.0D / (double)stack.getMaxDamage()); + int i = (int)Math.round(255.0D - (double)stack.getItemDamage() * 255.0D / (double)stack.getMaxDamage()); GlStateManager.disableLighting(); GlStateManager.disableDepth(); GlStateManager.disableTexture2D(); @@ -525,7 +529,20 @@ public class RenderItem implements IResourceManagerReloadListener { WorldRenderer worldrenderer = tessellator.getWorldRenderer(); this.func_181565_a(worldrenderer, xPosition + 2, yPosition + 13, 13, 2, 0, 0, 0, 255); this.func_181565_a(worldrenderer, xPosition + 2, yPosition + 13, 12, 1, (255 - i) / 4, 64, 0, 255); - this.func_181565_a(worldrenderer, xPosition + 2, yPosition + 13, j, 1, 255 - i, i, 0, 255); + int j = 255 - i; + int k = i; + int l = 0; + if (Config.isCustomColors()) { + int i1 = CustomColors.getDurabilityColor(i); + + if (i1 >= 0) { + j = i1 >> 16 & 255; + k = i1 >> 8 & 255; + l = i1 >> 0 & 255; + } + } + + this.func_181565_a(worldrenderer, xPosition + 2, yPosition + 13, j1, 1, j, k, l, 255); GlStateManager.enableBlend(); GlStateManager.enableAlpha(); GlStateManager.enableTexture2D(); diff --git a/src/main/java/net/minecraft/client/renderer/entity/RenderXPOrb.java b/src/main/java/net/minecraft/client/renderer/entity/RenderXPOrb.java index 5544452..ee278fb 100644 --- a/src/main/java/net/minecraft/client/renderer/entity/RenderXPOrb.java +++ b/src/main/java/net/minecraft/client/renderer/entity/RenderXPOrb.java @@ -1,5 +1,7 @@ package net.minecraft.client.renderer.entity; +import net.PeytonPlayz585.shadow.Config; +import net.PeytonPlayz585.shadow.CustomColors; import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; import net.lax1dude.eaglercraft.v1_8.opengl.OpenGlHelper; import net.lax1dude.eaglercraft.v1_8.opengl.WorldRenderer; @@ -48,49 +50,59 @@ public class RenderXPOrb extends Render { * public void func_76986_a(T entity, double d, double d1, * double d2, float f, float f1). But JAD is pre 1.5 so doe */ - public void doRender(EntityXPOrb entityxporb, double d0, double d1, double d2, float f, float f1) { - GlStateManager.pushMatrix(); - GlStateManager.translate((float) d0, (float) d1, (float) d2); - this.bindEntityTexture(entityxporb); - int i = entityxporb.getTextureByXP(); - float f2 = (float) (i % 4 * 16 + 0) / 64.0F; - float f3 = (float) (i % 4 * 16 + 16) / 64.0F; - float f4 = (float) (i / 4 * 16 + 0) / 64.0F; - float f5 = (float) (i / 4 * 16 + 16) / 64.0F; - float f6 = 1.0F; - float f7 = 0.5F; - float f8 = 0.25F; - int j = entityxporb.getBrightnessForRender(f1); - int k = j % 65536; - int l = j / 65536; - OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) k / 1.0F, (float) l / 1.0F); - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - float f10 = 255.0F; - float f11 = ((float) entityxporb.xpColor + f1) / 2.0F; - l = (int) ((MathHelper.sin(f11 + 0.0F) + 1.0F) * 0.5F * 255.0F); - boolean flag = true; - int i1 = (int) ((MathHelper.sin(f11 + 4.1887903F) + 1.0F) * 0.1F * 255.0F); - GlStateManager.rotate(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); - GlStateManager.rotate(-this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); - float f9 = 0.3F; - GlStateManager.scale(0.3F, 0.3F, 0.3F); - Tessellator tessellator = Tessellator.getInstance(); - WorldRenderer worldrenderer = tessellator.getWorldRenderer(); - worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR_NORMAL); - worldrenderer.pos((double) (0.0F - f7), (double) (0.0F - f8), 0.0D).tex((double) f2, (double) f5) - .color(l, 255, i1, 128).normal(0.0F, 1.0F, 0.0F).endVertex(); - worldrenderer.pos((double) (f6 - f7), (double) (0.0F - f8), 0.0D).tex((double) f3, (double) f5) - .color(l, 255, i1, 128).normal(0.0F, 1.0F, 0.0F).endVertex(); - worldrenderer.pos((double) (f6 - f7), (double) (1.0F - f8), 0.0D).tex((double) f3, (double) f4) - .color(l, 255, i1, 128).normal(0.0F, 1.0F, 0.0F).endVertex(); - worldrenderer.pos((double) (0.0F - f7), (double) (1.0F - f8), 0.0D).tex((double) f2, (double) f4) - .color(l, 255, i1, 128).normal(0.0F, 1.0F, 0.0F).endVertex(); - tessellator.draw(); - GlStateManager.disableBlend(); - GlStateManager.disableRescaleNormal(); - GlStateManager.popMatrix(); - super.doRender(entityxporb, d0, d1, d2, f, f1); - } + public void doRender(EntityXPOrb entity, double x, double y, double z, float entityYaw, float partialTicks) { + GlStateManager.pushMatrix(); + GlStateManager.translate((float)x, (float)y, (float)z); + this.bindEntityTexture(entity); + int i = entity.getTextureByXP(); + float f = (float)(i % 4 * 16 + 0) / 64.0F; + float f1 = (float)(i % 4 * 16 + 16) / 64.0F; + float f2 = (float)(i / 4 * 16 + 0) / 64.0F; + float f3 = (float)(i / 4 * 16 + 16) / 64.0F; + float f4 = 1.0F; + float f5 = 0.5F; + float f6 = 0.25F; + int j = entity.getBrightnessForRender(partialTicks); + int k = j % 65536; + int l = j / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)k / 1.0F, (float)l / 1.0F); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + float f7 = 255.0F; + float f8 = ((float)entity.xpColor + partialTicks) / 2.0F; + l = (int)((MathHelper.sin(f8 + 0.0F) + 1.0F) * 0.5F * 255.0F); + int i1 = 255; + int j1 = (int)((MathHelper.sin(f8 + 4.1887903F) + 1.0F) * 0.1F * 255.0F); + GlStateManager.rotate(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(-this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); + float f9 = 0.3F; + GlStateManager.scale(0.3F, 0.3F, 0.3F); + Tessellator tessellator = Tessellator.getInstance(); + WorldRenderer worldrenderer = tessellator.getWorldRenderer(); + worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR_NORMAL); + int k1 = l; + int l1 = 255; + int i2 = j1; + + if (Config.isCustomColors()) { + int j2 = CustomColors.getXpOrbColor(f8); + + if (j2 >= 0) { + k1 = j2 >> 16 & 255; + l1 = j2 >> 8 & 255; + i2 = j2 >> 0 & 255; + } + } + + worldrenderer.pos((double)(0.0F - f5), (double)(0.0F - f6), 0.0D).tex((double)f, (double)f3).color(k1, l1, i2, 128).normal(0.0F, 1.0F, 0.0F).endVertex(); + worldrenderer.pos((double)(f4 - f5), (double)(0.0F - f6), 0.0D).tex((double)f1, (double)f3).color(k1, l1, i2, 128).normal(0.0F, 1.0F, 0.0F).endVertex(); + worldrenderer.pos((double)(f4 - f5), (double)(1.0F - f6), 0.0D).tex((double)f1, (double)f2).color(k1, l1, i2, 128).normal(0.0F, 1.0F, 0.0F).endVertex(); + worldrenderer.pos((double)(0.0F - f5), (double)(1.0F - f6), 0.0D).tex((double)f, (double)f2).color(k1, l1, i2, 128).normal(0.0F, 1.0F, 0.0F).endVertex(); + tessellator.draw(); + GlStateManager.disableBlend(); + GlStateManager.disableRescaleNormal(); + GlStateManager.popMatrix(); + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } /**+ * Returns the location of an entity's texture. Doesn't seem to diff --git a/src/main/java/net/minecraft/client/renderer/entity/layers/LayerSheepWool.java b/src/main/java/net/minecraft/client/renderer/entity/layers/LayerSheepWool.java index 825c189..34be34f 100644 --- a/src/main/java/net/minecraft/client/renderer/entity/layers/LayerSheepWool.java +++ b/src/main/java/net/minecraft/client/renderer/entity/layers/LayerSheepWool.java @@ -1,5 +1,7 @@ package net.minecraft.client.renderer.entity.layers; +import net.PeytonPlayz585.shadow.Config; +import net.PeytonPlayz585.shadow.CustomColors; import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; import net.minecraft.client.model.ModelSheep1; import net.minecraft.client.renderer.entity.RenderSheep; @@ -49,10 +51,21 @@ public class LayerSheepWool implements LayerRenderer { float f7 = ((float) (entitysheep.ticksExisted % 25) + f2) / 25.0F; float[] afloat1 = EntitySheep.func_175513_a(EnumDyeColor.byMetadata(k)); float[] afloat2 = EntitySheep.func_175513_a(EnumDyeColor.byMetadata(l)); + + if (Config.isCustomColors()) { + afloat1 = CustomColors.getSheepColors(EnumDyeColor.byMetadata(k), afloat1); + afloat2 = CustomColors.getSheepColors(EnumDyeColor.byMetadata(l), afloat2); + } + GlStateManager.color(afloat1[0] * (1.0F - f7) + afloat2[0] * f7, afloat1[1] * (1.0F - f7) + afloat2[1] * f7, afloat1[2] * (1.0F - f7) + afloat2[2] * f7); } else { float[] afloat = EntitySheep.func_175513_a(entitysheep.getFleeceColor()); + + if (Config.isCustomColors()) { + afloat = CustomColors.getSheepColors(entitysheep.getFleeceColor(), afloat); + } + GlStateManager.color(afloat[0], afloat[1], afloat[2]); } diff --git a/src/main/java/net/minecraft/client/renderer/entity/layers/LayerWolfCollar.java b/src/main/java/net/minecraft/client/renderer/entity/layers/LayerWolfCollar.java index 0ee0cdf..68052af 100644 --- a/src/main/java/net/minecraft/client/renderer/entity/layers/LayerWolfCollar.java +++ b/src/main/java/net/minecraft/client/renderer/entity/layers/LayerWolfCollar.java @@ -1,5 +1,7 @@ package net.minecraft.client.renderer.entity.layers; +import net.PeytonPlayz585.shadow.Config; +import net.PeytonPlayz585.shadow.CustomColors; import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; import net.minecraft.client.renderer.entity.RenderWolf; import net.minecraft.entity.passive.EntitySheep; @@ -41,6 +43,11 @@ public class LayerWolfCollar implements LayerRenderer { this.wolfRenderer.bindTexture(WOLF_COLLAR); EnumDyeColor enumdyecolor = EnumDyeColor.byMetadata(entitywolf.getCollarColor().getMetadata()); float[] afloat = EntitySheep.func_175513_a(enumdyecolor); + + if (Config.isCustomColors()) { + afloat = CustomColors.getWolfCollarColors(enumdyecolor, afloat); + } + GlStateManager.color(afloat[0], afloat[1], afloat[2]); this.wolfRenderer.getMainModel().render(entitywolf, f, f1, f2, f3, f4, f5); } diff --git a/src/main/java/net/minecraft/client/renderer/tileentity/TileEntitySignRenderer.java b/src/main/java/net/minecraft/client/renderer/tileentity/TileEntitySignRenderer.java index e990559..51b4953 100644 --- a/src/main/java/net/minecraft/client/renderer/tileentity/TileEntitySignRenderer.java +++ b/src/main/java/net/minecraft/client/renderer/tileentity/TileEntitySignRenderer.java @@ -7,6 +7,8 @@ import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL.*; import java.util.List; +import net.PeytonPlayz585.shadow.Config; +import net.PeytonPlayz585.shadow.CustomColors; import net.lax1dude.eaglercraft.v1_8.opengl.EaglercraftGPU; import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.DeferredStateManager; @@ -99,7 +101,11 @@ public class TileEntitySignRenderer extends TileEntitySpecialRenderer> 16 & 255) / 255.0F; @@ -129,7 +135,7 @@ public class PotionHelper { return (int) f << 16 | (int) f1 << 8 | (int) f2; } } else { - return i; + return Config.isCustomColors() ? CustomColors.getPotionColor(0, i) : i; } }