diff --git a/src/main/java/com/seibel/lod/proxy/ClientProxy.java b/src/main/java/com/seibel/lod/proxy/ClientProxy.java
index 63c3d6e26..fa48acaeb 100644
--- a/src/main/java/com/seibel/lod/proxy/ClientProxy.java
+++ b/src/main/java/com/seibel/lod/proxy/ClientProxy.java
@@ -49,7 +49,7 @@ import net.minecraftforge.eventbus.api.SubscribeEvent;
* and is the starting point for most of the mod.
*
* @author James_Seibel
- * @version 9-14-2021
+ * @version 9-16-2021
*/
public class ClientProxy
{
@@ -100,6 +100,9 @@ public class ClientProxy
*/
public void renderLods(float partialTicks)
{
+ // clear any out of date objects
+ mc.clearFrameObjectCache();
+
try
{
// only run the first time setup once
diff --git a/src/main/java/com/seibel/lod/wrappers/MinecraftWrapper.java b/src/main/java/com/seibel/lod/wrappers/MinecraftWrapper.java
index 4d597da84..dd31dda9b 100644
--- a/src/main/java/com/seibel/lod/wrappers/MinecraftWrapper.java
+++ b/src/main/java/com/seibel/lod/wrappers/MinecraftWrapper.java
@@ -1,5 +1,6 @@
package com.seibel.lod.wrappers;
+import java.awt.Color;
import java.io.File;
import com.seibel.lod.util.LodUtil;
@@ -11,7 +12,9 @@ import net.minecraft.client.entity.player.ClientPlayerEntity;
import net.minecraft.client.multiplayer.ServerData;
import net.minecraft.client.network.play.ClientPlayNetHandler;
import net.minecraft.client.renderer.GameRenderer;
+import net.minecraft.client.renderer.LightTexture;
import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.texture.NativeImage;
import net.minecraft.entity.Entity;
import net.minecraft.profiler.IProfiler;
import net.minecraft.server.integrated.IntegratedServer;
@@ -23,7 +26,7 @@ import net.minecraft.world.DimensionType;
* to allow for easier movement between Minecraft versions.
*
* @author James Seibel
- * @version 9-6-2021
+ * @version 9-16-2021
*/
public class MinecraftWrapper
{
@@ -31,6 +34,10 @@ public class MinecraftWrapper
private Minecraft mc = Minecraft.getInstance();
+ /** The lightmap for the current:
+ * Time, dimension, brightness setting, etc. */
+ private NativeImage lightMap = null;
+
private MinecraftWrapper()
{
@@ -38,6 +45,25 @@ public class MinecraftWrapper
+ //=======================//
+ // non-minecraft methods //
+ //=======================//
+
+ /**
+ * This should be called at the beginning of every frame to
+ * clear any Minecraft data that becomes out of date after a frame.
+ *
+ * Lightmaps and other time sensitive objects fall in this category.
+ *
+ * This doesn't effect OpenGL objects in any way.
+ */
+ public void clearFrameObjectCache()
+ {
+ lightMap = null;
+ }
+
+
+
//=================//
// method wrappers //
//=================//
@@ -62,6 +88,67 @@ public class MinecraftWrapper
return LodUtil.getDimensionIDFromWorld(mc.level);
}
+ /**
+ * This texture changes every frame
+ */
+ public NativeImage getCurrentLightMap()
+ {
+ // get the current lightMap if the cache is empty
+ if (lightMap == null)
+ {
+ LightTexture tex = mc.gameRenderer.lightTexture();
+ NativeImage lightPixels = tex.lightPixels;
+ lightMap = lightPixels;
+ }
+
+// // hotswap this to true, then back to false to write a file
+// // (and not write a file every frame)
+// if (false)
+// {
+// try
+// {
+// // obviously change the filepath to somewhere on your PC
+// lightPixels.writeToFile(new File("C:\\Users\\James Seibel\\Desktop\\image.png"));
+// }
+// catch(Exception e)
+// {
+// e.printStackTrace();
+// }
+// }
+
+ return lightMap;
+ }
+
+ /**
+ * Returns the color int at the given pixel coordinates
+ * from the current lightmap.
+ *
+ * @param u x location in texture space
+ * @param v z location in texture space
+ */
+ public int getColorIntFromLightMap(int u, int v)
+ {
+ if (lightMap == null)
+ {
+ // make sure the lightMap is up to date
+ getCurrentLightMap();
+ }
+
+ return lightMap.getPixelRGBA(u, v);
+ }
+
+ /**
+ * Returns the Color at the given pixel coordinates
+ * from the current lightmap.
+ *
+ * @param u x location in texture space
+ * @param v z location in texture space
+ */
+ public Color getColorFromLightMap(int u, int v)
+ {
+ return LodUtil.intToColor(lightMap.getPixelRGBA(u, v));
+ }
+
diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg
index 6b4d67bbc..81ffcb0c0 100644
--- a/src/main/resources/META-INF/accesstransformer.cfg
+++ b/src/main/resources/META-INF/accesstransformer.cfg
@@ -49,6 +49,9 @@ public net.minecraft.client.renderer.vertex.VertexBuffer field_177365_a # id
public net.minecraft.client.renderer.vertex.VertexBuffer field_177363_b # format
public net.minecraft.client.renderer.vertex.VertexBuffer field_177364_c # vertexCount
+# used for accessing the lightmap
+public net.minecraft.client.renderer.LightTexture field_205111_b # lightPixels
+
#=====================#
# Examples from Forge #