diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/minecraft/MinecraftRenderWrapper.java b/common/src/main/java/com/seibel/lod/common/wrappers/minecraft/MinecraftRenderWrapper.java
index 3a010e936..b5a1ac859 100644
--- a/common/src/main/java/com/seibel/lod/common/wrappers/minecraft/MinecraftRenderWrapper.java
+++ b/common/src/main/java/com/seibel/lod/common/wrappers/minecraft/MinecraftRenderWrapper.java
@@ -8,35 +8,28 @@ import java.util.stream.Collectors;
import com.mojang.blaze3d.platform.NativeImage;
import com.mojang.blaze3d.systems.RenderSystem;
import com.seibel.lod.common.wrappers.misc.LightMapWrapper;
-import com.seibel.lod.core.api.ClientApi;
-import com.seibel.lod.core.handlers.IReflectionHandler;
-import com.seibel.lod.core.handlers.ReflectionHandler;
+import com.seibel.lod.core.api.ModAccessorApi;
import com.seibel.lod.core.util.LodUtil;
-import com.seibel.lod.core.util.SingletonHandler;
import net.minecraft.client.renderer.LightTexture;
-import org.lwjgl.opengl.GL20;
import com.mojang.math.Vector3f;
import com.seibel.lod.core.objects.math.Mat4f;
import com.seibel.lod.core.objects.math.Vec3d;
import com.seibel.lod.core.objects.math.Vec3f;
-import com.seibel.lod.core.wrapperInterfaces.IWrapperFactory;
import com.seibel.lod.core.wrapperInterfaces.block.AbstractBlockPosWrapper;
import com.seibel.lod.core.wrapperInterfaces.chunk.AbstractChunkPosWrapper;
import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper;
-import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftWrapper;
+import com.seibel.lod.core.wrapperInterfaces.modAccessor.ISodiumAccessor;
import com.seibel.lod.common.wrappers.McObjectConverter;
import com.seibel.lod.common.wrappers.WrapperFactory;
import com.seibel.lod.common.wrappers.block.BlockPosWrapper;
-import com.seibel.lod.common.wrappers.chunk.ChunkPosWrapper;
import net.minecraft.client.Camera;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.FogRenderer;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.client.renderer.LevelRenderer;
-import net.minecraft.client.renderer.chunk.ChunkRenderDispatcher.CompiledChunk;
import net.minecraft.core.BlockPos;
import net.minecraft.world.effect.MobEffects;
import net.minecraft.world.level.material.FogType;
@@ -57,7 +50,6 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper
private static final Minecraft MC = Minecraft.getInstance();
private static final GameRenderer GAME_RENDERER = MC.gameRenderer;
- private static final MinecraftWrapper MC_WRAPPER = MinecraftWrapper.INSTANCE;
private static final WrapperFactory FACTORY = WrapperFactory.INSTANCE;
@Override
@@ -148,56 +140,24 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper
* This method returns the ChunkPos of all chunks that Minecraft
* is going to render this frame.
*
- * Note: This isn't perfect. It will return some chunks that are outside
- * the clipping plane. (For example, if you are high above the ground some chunks
- * will be incorrectly added, even though they are outside render range).
*/
-
- //TODO: impl this properly
+
@Override
public HashSet getVanillaRenderedChunks() {
- LevelRenderer levelRenderer = MC.levelRenderer;
- LinkedHashSet chunks = levelRenderer.renderChunkStorage.get().renderChunks;
- //ClientApi.LOGGER.info("getVanillaRenderedChunks: "+chunks.size());
- return (chunks.stream().map((chunk) -> {
- AABB chunkBoundingBox = chunk.chunk.bb;
- return FACTORY.createChunkPos(Math.floorDiv((int) chunkBoundingBox.minX, 16),
- Math.floorDiv((int) chunkBoundingBox.minZ, 16));
- }).collect(Collectors.toCollection(HashSet::new)));
- }
- @Override
- public HashSet getSodiumRenderedChunks() {
- LevelRenderer levelRenderer = MC.levelRenderer;
- LinkedHashSet chunks = levelRenderer.renderChunkStorage.get().renderChunks;
- //ClientApi.LOGGER.info("gettSodiumRenderedChunks: "+chunks.size());
- return (chunks.stream().map((chunk) -> {
- AABB chunkBoundingBox = chunk.chunk.bb;
- return FACTORY.createChunkPos(Math.floorDiv((int) chunkBoundingBox.minX, 16),
- Math.floorDiv((int) chunkBoundingBox.minZ, 16));
- }).collect(Collectors.toCollection(HashSet::new)));
- }
-
-
- @Override
- public HashSet getMaximumRenderedChunks() {
- // For now, use a circle check
- int chunkRenderDist = this.getRenderDistance();
-
- AbstractChunkPosWrapper centerChunkPos = MC_WRAPPER.getPlayerChunkPos();
-
- // add every position within render distance
- HashSet renderedPos = new HashSet();
- for (int chunkDeltaX = -chunkRenderDist; chunkDeltaX <= chunkRenderDist; chunkDeltaX++)
- {
- for(int chunkDeltaZ = -chunkRenderDist; chunkDeltaZ <= chunkRenderDist; chunkDeltaZ++)
- {
- // The circle check using radius+1 because it seems to match the vanilla fog culled circle better
- if (chunkDeltaX*chunkDeltaX+chunkDeltaZ*chunkDeltaZ >= (chunkRenderDist+1)*(chunkRenderDist+1)) continue;
- renderedPos.add(FACTORY.createChunkPos(centerChunkPos.getX() + chunkDeltaX, centerChunkPos.getZ() + chunkDeltaZ));
- }
+ ISodiumAccessor sodium = ModAccessorApi.get(ISodiumAccessor.class);
+ if (sodium != null) {
+ return sodium.getNormalRenderedChunks();
}
- return renderedPos;
- }
+ LevelRenderer levelRenderer = MC.levelRenderer;
+ LinkedHashSet chunks = levelRenderer.renderChunkStorage.get().renderChunks;
+ return (chunks.stream().map((chunk) -> {
+ AABB chunkBoundingBox = chunk.chunk.bb;
+ return FACTORY.createChunkPos(Math.floorDiv((int) chunkBoundingBox.minX, 16),
+ Math.floorDiv((int) chunkBoundingBox.minZ, 16));
+ }).collect(Collectors.toCollection(HashSet::new)));
+ }
+
+
@Override
diff --git a/core b/core
index 943a2d5ca..d1e1970c1 160000
--- a/core
+++ b/core
@@ -1 +1 @@
-Subproject commit 943a2d5cada3235e93ea73eacce412cc887136ed
+Subproject commit d1e1970c180e3b0e82d0800782b2ea9e806eb5fc
diff --git a/fabric/build.gradle b/fabric/build.gradle
index 1cac1e445..b24f8d4ba 100644
--- a/fabric/build.gradle
+++ b/fabric/build.gradle
@@ -1,5 +1,7 @@
plugins {
id "com.github.johnrengelman.shadow" version "7.1.0"
+ id 'fabric-loom' version '0.10-SNAPSHOT'
+ id "com.modrinth.minotaur" version "1.2.1"
}
loom {
@@ -20,10 +22,20 @@ configurations {
repositories {
// Required for ModMenu
maven { url "https://maven.terraformersmc.com/" }
+
+ // Required for Sodium
+ maven {
+ name = "Modrinth"
+ url = "https://api.modrinth.com/maven"
+ content {
+ includeGroup "maven.modrinth"
+ }
+ }
}
dependencies {
+ // Fabric loader
modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}"
// TODO: This is only for LodMain, try to find a way to remove it
@@ -35,12 +47,22 @@ dependencies {
exclude(group: "net.fabricmc.fabric-api")
}
+ // Sodium
+ modImplementation "maven.modrinth:sodium:${project.sodium_version}"
+ implementation "org.joml:joml:1.10.2"
+
+ // Iris
+// modImplementation "maven.modrinth:iris:${project.iris_version}"
+
+
+ // Toml
implementation("com.electronwill.night-config:toml:${rootProject.toml_version}")
shadowMe("com.electronwill.night-config:toml:${rootProject.toml_version}") {}
common(project(path: ":common", configuration: "namedElements")) { transitive false }
shadowMe(project(path: ":common", configuration: "transformProductionFabric")) { transitive false }
+ // Compression
common 'org.tukaani:xz:1.9'
common 'org.apache.commons:commons-compress:1.21'
shadowMe 'org.tukaani:xz:1.9'
diff --git a/fabric/src/main/java/com/seibel/lod/fabric/ClientProxy.java b/fabric/src/main/java/com/seibel/lod/fabric/ClientProxy.java
index 020f3954b..26d946d9d 100644
--- a/fabric/src/main/java/com/seibel/lod/fabric/ClientProxy.java
+++ b/fabric/src/main/java/com/seibel/lod/fabric/ClientProxy.java
@@ -69,6 +69,8 @@ public class ClientProxy
*/
public void registerEvents() {
// TODO: Fix this if it's wrong
+
+ /* Registor the mod accessor*/
/* World Events */
//ServerTickEvents.START_SERVER_TICK.register(this::serverTickEvent);
diff --git a/fabric/src/main/java/com/seibel/lod/fabric/Main.java b/fabric/src/main/java/com/seibel/lod/fabric/Main.java
index bc0765002..882a32bf2 100644
--- a/fabric/src/main/java/com/seibel/lod/fabric/Main.java
+++ b/fabric/src/main/java/com/seibel/lod/fabric/Main.java
@@ -22,9 +22,13 @@ package com.seibel.lod.fabric;
import com.seibel.lod.common.LodCommonMain;
import com.seibel.lod.core.ModInfo;
import com.seibel.lod.core.api.ClientApi;
+import com.seibel.lod.core.api.ModAccessorApi;
+import com.seibel.lod.core.wrapperInterfaces.modAccessor.ISodiumAccessor;
+import com.seibel.lod.fabric.modAccessor.SodiumAccessor;
import com.seibel.lod.fabric.wrappers.DependencySetup;
import net.fabricmc.api.ClientModInitializer;
+import net.fabricmc.loader.api.FabricLoader;
/**
* Initialize and setup the Mod.
@@ -60,6 +64,9 @@ public class Main implements ClientModInitializer
// Check if this works
client_proxy = new ClientProxy();
client_proxy.registerEvents();
+ if (FabricLoader.getInstance().isModLoaded("sodium")) {
+ ModAccessorApi.bind(ISodiumAccessor.class, new SodiumAccessor());
+ }
}
public static void initServer() {
diff --git a/fabric/src/main/java/com/seibel/lod/fabric/modAccessor/SodiumAccessor.java b/fabric/src/main/java/com/seibel/lod/fabric/modAccessor/SodiumAccessor.java
new file mode 100644
index 000000000..689f5977f
--- /dev/null
+++ b/fabric/src/main/java/com/seibel/lod/fabric/modAccessor/SodiumAccessor.java
@@ -0,0 +1,43 @@
+package com.seibel.lod.fabric.modAccessor;
+
+import java.util.HashSet;
+import java.util.stream.Collectors;
+
+import com.seibel.lod.core.util.SingletonHandler;
+import com.seibel.lod.core.wrapperInterfaces.IWrapperFactory;
+import com.seibel.lod.core.wrapperInterfaces.chunk.AbstractChunkPosWrapper;
+import com.seibel.lod.core.wrapperInterfaces.modAccessor.ISodiumAccessor;
+
+import me.jellysquid.mods.sodium.client.render.SodiumWorldRenderer;
+import net.minecraft.client.Minecraft;
+import net.minecraft.core.SectionPos;
+import net.minecraft.world.level.ChunkPos;
+import net.minecraft.world.level.LevelHeightAccessor;
+
+public class SodiumAccessor implements ISodiumAccessor {
+ IWrapperFactory factory = SingletonHandler.get(IWrapperFactory.class);
+
+ @Override
+ public String getModName() {
+ return "Sodium-Fabric-1.18.X";
+ }
+
+ @Override
+ public HashSet getNormalRenderedChunks() {
+ SodiumWorldRenderer renderer = SodiumWorldRenderer.instance();
+ LevelHeightAccessor height = Minecraft.getInstance().level;
+ // 0b11 = Lighted chunk & loaded chunk
+ return renderer.getChunkTracker().getChunks(0b11).filter(
+ (long l) -> {
+ for (int i = height.getMinSection(); i {
+ return (AbstractChunkPosWrapper)factory.createChunkPos(l);
+ }).collect(Collectors.toCollection(HashSet::new));
+ }
+
+}
diff --git a/gradle.properties b/gradle.properties
index 9b79302c3..013ec4dc6 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -7,8 +7,16 @@ mod_version=1.5.4a
maven_group=com.seibel.lod
toml_version=3.6.0
+
+# Fabric loader
fabric_loader_version=0.12.12
fabric_api_version=0.44.0+1.18
-modmenu_version=3.0.0
+ # Fabric mods
+ modmenu_version=3.0.0
+ sodium_version=mc1.18-0.4.0-alpha5
+# iris_version=1.18.x-v1.1.4
-forge_version=39.0.5
\ No newline at end of file
+# Forge loader
+forge_version=39.0.5
+ # Forge mods
+ ## currentlly no mods ##
\ No newline at end of file