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 59808d7b8..f6ae89ca5 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 @@ -10,6 +10,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import com.seibel.lod.common.wrappers.misc.LightMapWrapper; 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; @@ -17,9 +18,12 @@ 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.IOptifineAccessor; import com.seibel.lod.core.wrapperInterfaces.modAccessor.ISodiumAccessor; import com.seibel.lod.common.wrappers.McObjectConverter; import com.seibel.lod.common.wrappers.WrapperFactory; @@ -148,6 +152,13 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper if (sodium != null) { return sodium.getNormalRenderedChunks(); } + IOptifineAccessor optifine = ModAccessorApi.get(IOptifineAccessor.class); + if (optifine != null) { + HashSet pos = optifine.getNormalRenderedChunks(); + if (pos==null) pos = getMaximumRenderedChunks(); + return pos; + } + LevelRenderer levelRenderer = MC.levelRenderer; LinkedHashSet chunks = levelRenderer.renderChunkStorage.get().renderChunks; return (chunks.stream().map((chunk) -> { @@ -157,7 +168,32 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper }).collect(Collectors.toCollection(HashSet::new))); } - + @Override + public HashSet getMaximumRenderedChunks() + { + //TODO: Make this a circle + IMinecraftWrapper mcWrapper = SingletonHandler.get(IMinecraftWrapper.class); + IWrapperFactory factory = SingletonHandler.get(IWrapperFactory.class); + + int chunkRenderDist = this.getRenderDistance(); + + AbstractChunkPosWrapper centerChunkPos = mcWrapper.getPlayerChunkPos(); + int startChunkX = centerChunkPos.getX() - chunkRenderDist; + int startChunkZ = centerChunkPos.getZ() - chunkRenderDist; + + // add every position within render distance + HashSet renderedPos = new HashSet(); + for (int chunkX = 0; chunkX < (chunkRenderDist * 2+1); chunkX++) + { + for(int chunkZ = 0; chunkZ < (chunkRenderDist * 2+1); chunkZ++) + { + renderedPos.add(factory.createChunkPos(startChunkX + chunkX, startChunkZ + chunkZ)); + } + } + + return renderedPos; + } + @Override diff --git a/core b/core index 6c77164a6..930113a6f 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit 6c77164a65e41d3112a177a3c8bfcae5d6ce75af +Subproject commit 930113a6f990163acf30bf74cf6793a0d0d5e36d 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 d3024f5b2..4eb35265d 100644 --- a/fabric/src/main/java/com/seibel/lod/fabric/Main.java +++ b/fabric/src/main/java/com/seibel/lod/fabric/Main.java @@ -25,9 +25,11 @@ import com.seibel.lod.core.api.ClientApi; import com.seibel.lod.core.api.ModAccessorApi; import com.seibel.lod.core.util.SingletonHandler; import com.seibel.lod.core.wrapperInterfaces.modAccessor.IModChecker; +import com.seibel.lod.core.wrapperInterfaces.modAccessor.IOptifineAccessor; import com.seibel.lod.core.wrapperInterfaces.modAccessor.ISodiumAccessor; import com.seibel.lod.core.wrapperInterfaces.modAccessor.IStarlightAccessor; import com.seibel.lod.fabric.wrappers.modAccessor.ModChecker; +import com.seibel.lod.fabric.wrappers.modAccessor.OptifineAccessor; import com.seibel.lod.fabric.wrappers.modAccessor.SodiumAccessor; import com.seibel.lod.fabric.wrappers.modAccessor.StarlightAccessor; import com.seibel.lod.fabric.wrappers.DependencySetup; @@ -75,6 +77,9 @@ public class Main implements ClientModInitializer if (SingletonHandler.get(IModChecker.class).isModLoaded("starlight")) { ModAccessorApi.bind(IStarlightAccessor.class, new StarlightAccessor()); } + if (SingletonHandler.get(IModChecker.class).isModLoaded("optifine")) { + ModAccessorApi.bind(IOptifineAccessor.class, new OptifineAccessor()); + } } public static void initServer() { diff --git a/fabric/src/main/java/com/seibel/lod/fabric/wrappers/modAccessor/OptifineAccessor.java b/fabric/src/main/java/com/seibel/lod/fabric/wrappers/modAccessor/OptifineAccessor.java new file mode 100644 index 000000000..8fb98058a --- /dev/null +++ b/fabric/src/main/java/com/seibel/lod/fabric/wrappers/modAccessor/OptifineAccessor.java @@ -0,0 +1,24 @@ +package com.seibel.lod.fabric.wrappers.modAccessor; + +import java.util.HashSet; + +import com.seibel.lod.core.wrapperInterfaces.chunk.AbstractChunkPosWrapper; +import com.seibel.lod.core.wrapperInterfaces.modAccessor.IOptifineAccessor; + +public class OptifineAccessor implements IOptifineAccessor +{ + + @Override + public String getModName() + { + return "Optifine-Fabric-1.18.X"; + } + + @Override + public HashSet getNormalRenderedChunks() + { + // TODO: Impl proper methods here + return null; + } + +} diff --git a/forge/src/main/java/com/seibel/lod/forge/ForgeMain.java b/forge/src/main/java/com/seibel/lod/forge/ForgeMain.java index 070d05004..a3542c210 100644 --- a/forge/src/main/java/com/seibel/lod/forge/ForgeMain.java +++ b/forge/src/main/java/com/seibel/lod/forge/ForgeMain.java @@ -24,11 +24,17 @@ import com.seibel.lod.common.forge.LodForgeMethodCaller; import com.seibel.lod.common.wrappers.config.ConfigGui; import com.seibel.lod.common.wrappers.minecraft.MinecraftWrapper; 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.handlers.ReflectionHandler; import com.seibel.lod.core.util.SingletonHandler; import com.seibel.lod.core.wrapperInterfaces.modAccessor.IModChecker; +import com.seibel.lod.core.wrapperInterfaces.modAccessor.IOptifineAccessor; import com.seibel.lod.forge.wrappers.ForgeDependencySetup; import com.seibel.lod.forge.wrappers.modAccessor.ModChecker; +import com.seibel.lod.forge.wrappers.modAccessor.OptifineAccessor; + import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.core.Direction; import net.minecraft.world.level.block.Block; @@ -36,12 +42,14 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraftforge.client.model.data.ModelDataMap; import net.minecraftforge.client.ConfigGuiHandler; import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.ModList; import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.fml.loading.FMLLoader; +import net.minecraftforge.forgespi.language.IModInfo; import java.util.List; import java.util.Random; @@ -65,7 +73,12 @@ public class ForgeMain implements LodForgeMethodCaller LodCommonMain.initConfig(); LodCommonMain.startup(this, !FMLLoader.getDist().isClient()); ForgeDependencySetup.createInitialBindings(); + ClientApi.LOGGER.info("Distant Horizons initializing..."); SingletonHandler.bind(IModChecker.class, ModChecker.INSTANCE); + + if (ReflectionHandler.instance.optifinePresent()) { + ModAccessorApi.bind(IOptifineAccessor.class, new OptifineAccessor()); + } } diff --git a/forge/src/main/java/com/seibel/lod/forge/wrappers/modAccessor/OptifineAccessor.java b/forge/src/main/java/com/seibel/lod/forge/wrappers/modAccessor/OptifineAccessor.java new file mode 100644 index 000000000..a2528e63e --- /dev/null +++ b/forge/src/main/java/com/seibel/lod/forge/wrappers/modAccessor/OptifineAccessor.java @@ -0,0 +1,24 @@ +package com.seibel.lod.forge.wrappers.modAccessor; + +import java.util.HashSet; + +import com.seibel.lod.core.wrapperInterfaces.chunk.AbstractChunkPosWrapper; +import com.seibel.lod.core.wrapperInterfaces.modAccessor.IOptifineAccessor; + +public class OptifineAccessor implements IOptifineAccessor +{ + + @Override + public String getModName() + { + return "Optifine-Forge-1.18.X"; + } + + @Override + public HashSet getNormalRenderedChunks() + { + // TODO: Impl proper methods here + return null; + } + +} diff --git a/gradle.properties b/gradle.properties index 3bed93e69..6d1cd0053 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,6 +19,6 @@ fabric_api_version=0.44.0+1.18 # immersive_portals_version = v1.0.4-1.18 # Forge loader -forge_version=39.0.5 +forge_version=39.0.44 # Forge mods # starlight_version_forge=3559934 \ No newline at end of file