From b13626689b3f42c9c4e8599aa6a7cdd8b2acfe25 Mon Sep 17 00:00:00 2001 From: coolGi2007 Date: Sun, 9 Jan 2022 20:09:06 +1030 Subject: [PATCH] Updated everything(need to update the sodium stuff) --- .../java/com/seibel/lod/common/Config.java | 6 +- .../wrappers/chunk/ChunkPosWrapper.java | 11 ++- .../common/wrappers/chunk/ChunkWrapper.java | 24 ++++++- .../config/LodConfigWrapperSingleton.java | 10 +++ .../wrappers/config/TexturedButtonWidget.java | 2 +- .../minecraft/MinecraftRenderWrapper.java | 69 ++++++++----------- .../common/wrappers/world/WorldWrapper.java | 16 ++++- .../worldGeneration/LodServerWorld.java | 27 ++++---- .../WorldGeneratorWrapper.java | 2 +- common/src/main/resources/lod.accesswidener | 6 ++ core | 2 +- fabric/build.gradle | 21 ++++++ .../com/seibel/lod/fabric/ClientProxy.java | 11 +-- .../main/java/com/seibel/lod/fabric/Main.java | 7 ++ .../mixins/unsafe/MixinPalettedContainer.java | 2 +- .../fabric/modAccessor/SodiumAccessor.java | 43 ++++++++++++ .../seibel/lod/forge/ForgeClientProxy.java | 6 +- gradle.properties | 18 +++-- 18 files changed, 212 insertions(+), 71 deletions(-) create mode 100644 fabric/src/main/java/com/seibel/lod/fabric/modAccessor/SodiumAccessor.java diff --git a/common/src/main/java/com/seibel/lod/common/Config.java b/common/src/main/java/com/seibel/lod/common/Config.java index d3369f02d..fbc60b9c1 100644 --- a/common/src/main/java/com/seibel/lod/common/Config.java +++ b/common/src/main/java/com/seibel/lod/common/Config.java @@ -105,6 +105,9 @@ public class Config extends ConfigGui @ConfigAnnotations.Entry public static HorizontalQuality horizontalQuality = IQuality.HORIZONTAL_QUALITY_DEFAULT; + + @ConfigAnnotations.Entry + public static DropoffQuality dropoffQuality = IQuality.DROPOFF_QUALITY_DEFAULT; } @@ -168,8 +171,9 @@ public class Config extends ConfigGui @ConfigAnnotations.Entry public static DistanceGenerationMode distanceGenerationMode = IWorldGenerator.DISTANCE_GENERATION_MODE_DEFAULT; + // FIXME: Temperary override. In 1.18, the newer Unstable gnerator is more usable @ConfigAnnotations.Entry - public static boolean allowUnstableFeatureGeneration = IWorldGenerator.ALLOW_UNSTABLE_FEATURE_GENERATION_DEFAULT; + public static boolean allowUnstableFeatureGeneration = true;//IWorldGenerator.ALLOW_UNSTABLE_FEATURE_GENERATION_DEFAULT; @ConfigAnnotations.Entry public static BlocksToAvoid blocksToAvoid = IWorldGenerator.BLOCKS_TO_AVOID_DEFAULT; diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/chunk/ChunkPosWrapper.java b/common/src/main/java/com/seibel/lod/common/wrappers/chunk/ChunkPosWrapper.java index d4fcd8d80..a21d7e02e 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/chunk/ChunkPosWrapper.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/chunk/ChunkPosWrapper.java @@ -96,7 +96,16 @@ public class ChunkPosWrapper extends AbstractChunkPosWrapper @Override public boolean equals(Object o) { - return chunkPos.equals(o); + // If the object is compared with itself then return true + if (o == this) { + return true; + } + // Check if o is an instance of RegionPos or not + if (!(o instanceof ChunkPosWrapper)) { + return false; + } + ChunkPosWrapper c = (ChunkPosWrapper) o; + return c.chunkPos.equals(chunkPos); } @Override diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/chunk/ChunkWrapper.java b/common/src/main/java/com/seibel/lod/common/wrappers/chunk/ChunkWrapper.java index 8fef58377..74344185e 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/chunk/ChunkWrapper.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/chunk/ChunkWrapper.java @@ -13,6 +13,8 @@ import com.seibel.lod.common.wrappers.block.BlockShapeWrapper; import com.seibel.lod.common.wrappers.world.BiomeWrapper; import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.world.level.LightLayer; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.LiquidBlock; import net.minecraft.world.level.block.LiquidBlockContainer; @@ -31,6 +33,7 @@ import net.minecraft.world.level.levelgen.Heightmap; public class ChunkWrapper implements IChunkWrapper { private ChunkAccess chunk; + private BlockAndTintGetter lightSource; private final int CHUNK_SECTION_SHIFT = 4; private final int CHUNK_SECTION_MASK = 0b1111; private final int CHUNK_SIZE_SHIFT = 4; @@ -66,7 +69,7 @@ public class ChunkWrapper implements IChunkWrapper @Override public IBiomeWrapper getBiome(int x, int y, int z) { - return BiomeWrapper.getBiomeWrapper(chunk.getBiomes().getNoiseBiome((x & CHUNK_SIZE_MASK) >> 2, y >> 2, (z & CHUNK_SIZE_MASK) >> 2)); + return BiomeWrapper.getBiomeWrapper(chunk.getNoiseBiome((x & CHUNK_SIZE_MASK) >> 2, y >> 2, (z & CHUNK_SIZE_MASK) >> 2)); } @Override @@ -85,9 +88,16 @@ public class ChunkWrapper implements IChunkWrapper return BlockShapeWrapper.getBlockShapeWrapper(block, this, x, y, z); } + @Deprecated public ChunkWrapper(ChunkAccess chunk) { this.chunk = chunk; + this.lightSource = null; + } + public ChunkWrapper(ChunkAccess chunk, BlockAndTintGetter lightSource) + { + this.chunk = chunk; + this.lightSource = lightSource; } public ChunkAccess getChunk() { @@ -157,4 +167,16 @@ public class ChunkWrapper implements IChunkWrapper { return chunk.getLightEmission(new BlockPos(x,y,z)); } + + @Override + public int getBlockLight(int x, int y, int z) { + if (lightSource == null) return -1; + return lightSource.getBrightness(LightLayer.BLOCK, new BlockPos(x,y,z)); + } + + @Override + public int getSkyLight(int x, int y, int z) { + if (lightSource == null) return -1; + return lightSource.getBrightness(LightLayer.SKY, new BlockPos(x, y, z)); + } } diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/config/LodConfigWrapperSingleton.java b/common/src/main/java/com/seibel/lod/common/wrappers/config/LodConfigWrapperSingleton.java index 3be042bf3..f82c70676 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/config/LodConfigWrapperSingleton.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/config/LodConfigWrapperSingleton.java @@ -185,6 +185,16 @@ public class LodConfigWrapperSingleton implements ILodConfigWrapperSingleton ConfigGui.editSingleOption.getEntry("client.graphics.quality.horizontalQuality").value = newHorizontalQuality; ConfigGui.editSingleOption.saveOption("client.graphics.quality.horizontalQuality"); } + + @Override + public DropoffQuality getDropoffQuality() { + return Config.Client.Graphics.Quality.dropoffQuality; + } + @Override + public void setDropoffQuality(DropoffQuality newDropoffQuality) { + ConfigGui.editSingleOption.getEntry("client.graphics.quality.dropoffQuality").value = newDropoffQuality; + ConfigGui.editSingleOption.saveOption("client.graphics.quality.dropoffQuality"); + } } diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/config/TexturedButtonWidget.java b/common/src/main/java/com/seibel/lod/common/wrappers/config/TexturedButtonWidget.java index 9701d9e82..63df62446 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/config/TexturedButtonWidget.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/config/TexturedButtonWidget.java @@ -31,7 +31,7 @@ public class TexturedButtonWidget extends ImageButton { RenderSystem.setShader(GameRenderer::getPositionTexShader); RenderSystem.setShaderTexture(0, WIDGETS_LOCATION); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, this.alpha); - int i = this.getYImage(this.isHovered()); + int i = this.getYImage(this.isHovered); RenderSystem.enableBlend(); RenderSystem.defaultBlendFunc(); RenderSystem.enableDepthTest(); 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 a8abb87cc..8eee070fe 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 @@ -2,18 +2,16 @@ package com.seibel.lod.common.wrappers.minecraft; import java.awt.*; import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.stream.Collectors; import com.mojang.blaze3d.platform.NativeImage; import com.mojang.blaze3d.systems.RenderSystem; -import com.seibel.lod.common.wrappers.WrapperFactory; import com.seibel.lod.common.wrappers.misc.LightMapWrapper; -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 net.minecraft.client.renderer.FogRenderer; + import net.minecraft.client.renderer.LightTexture; -import net.minecraft.world.level.material.FogType; -import org.lwjgl.opengl.GL20; import com.mojang.math.Vector3f; import com.seibel.lod.core.objects.math.Mat4f; @@ -22,18 +20,20 @@ import com.seibel.lod.core.objects.math.Vec3f; 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.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.LevelRenderer.RenderChunkInfo; -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; +import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; @@ -42,7 +42,7 @@ import net.minecraft.world.phys.Vec3; * related to rendering in Minecraft. * * @author James Seibel - * @version 12-14-2021 + * @version 12-12-2021 */ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper { @@ -50,8 +50,7 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper private static final Minecraft MC = Minecraft.getInstance(); private static final GameRenderer GAME_RENDERER = MC.gameRenderer; - - + private static final WrapperFactory FACTORY = WrapperFactory.INSTANCE; @Override public Vec3f getLookAtVector() @@ -102,6 +101,7 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper float[] colorValues = RenderSystem.getShaderFogColor(); return new Color(colorValues[0], colorValues[1], colorValues[2], colorValues[3]); } + // getUnderWaterFogColor() is the same as getFogColor() @Override public Color getSkyColor() { @@ -140,36 +140,26 @@ 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). */ + @Override - public HashSet getVanillaRenderedChunks() - { - HashSet loadedPos = new HashSet<>(); - - // Wow, those are some long names! - - // go through every RenderInfo to get the compiled chunks - LevelRenderer renderer = MC.levelRenderer; - for (LevelRenderer.RenderChunkInfo worldRenderer$LocalRenderInformationContainer : renderer.renderChunks) - { - CompiledChunk compiledChunk = worldRenderer$LocalRenderInformationContainer.chunk.getCompiledChunk(); - if (!compiledChunk.hasNoRenderableLayers()) - { - // add the ChunkPos for every rendered chunk - BlockPos bpos = worldRenderer$LocalRenderInformationContainer.chunk.getOrigin(); - - loadedPos.add(new ChunkPosWrapper(bpos)); - } + public HashSet getVanillaRenderedChunks() { + ISodiumAccessor sodium = ModAccessorApi.get(ISodiumAccessor.class); + if (sodium != null) { + return sodium.getNormalRenderedChunks(); } - - - return loadedPos; + 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 public int[] getLightmapPixels() { @@ -203,11 +193,10 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper int col = ((c.getRed() & 0xFF) << 16) | // blue - ((c.getGreen() & 0xFF) << 8) | // green - ((c.getBlue() & 0xFF)) | // red - ((c.getAlpha() & 0xFF) << 24); // alpha + ((c.getGreen() & 0xFF) << 8) | // green + ((c.getBlue() & 0xFF)) | // red + ((c.getAlpha() & 0xFF) << 24); // alpha - // 2D array stored in a 1D array. // Thank you Tim from College ;) pixels[u * lightMapWidth + v] = col; diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/world/WorldWrapper.java b/common/src/main/java/com/seibel/lod/common/wrappers/world/WorldWrapper.java index 49eb24800..76af3563e 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/world/WorldWrapper.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/world/WorldWrapper.java @@ -25,9 +25,12 @@ import java.util.concurrent.ConcurrentMap; import com.seibel.lod.core.enums.WorldType; import com.seibel.lod.core.wrapperInterfaces.block.AbstractBlockPosWrapper; +import com.seibel.lod.core.wrapperInterfaces.chunk.AbstractChunkPosWrapper; +import com.seibel.lod.core.wrapperInterfaces.chunk.IChunkWrapper; import com.seibel.lod.core.wrapperInterfaces.world.IBiomeWrapper; import com.seibel.lod.core.wrapperInterfaces.world.IWorldWrapper; import com.seibel.lod.common.wrappers.block.BlockPosWrapper; +import com.seibel.lod.common.wrappers.chunk.ChunkWrapper; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.core.BlockPos; @@ -35,6 +38,9 @@ import net.minecraft.server.level.ServerChunkCache; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.LightLayer; +import net.minecraft.world.level.chunk.ChunkAccess; +import net.minecraft.world.level.chunk.ChunkStatus; + import org.jetbrains.annotations.Nullable; /** @@ -138,7 +144,8 @@ public class WorldWrapper implements IWorldWrapper } @Override - public short getMinHeight() { + public short getMinHeight() + { return (short) world.getMinBuildHeight(); } @@ -170,5 +177,12 @@ public class WorldWrapper implements IWorldWrapper return world.getSeaLevel(); } + @Override + public IChunkWrapper tryGetChunk(AbstractChunkPosWrapper pos) { + ChunkAccess chunk = world.getChunk(pos.getX(), pos.getZ(), ChunkStatus.EMPTY, false); + if (chunk == null) return null; + return new ChunkWrapper(chunk, world); + } + } diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/LodServerWorld.java b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/LodServerWorld.java index 4bb09f586..ece108c20 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/LodServerWorld.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/LodServerWorld.java @@ -39,8 +39,6 @@ import net.minecraft.sounds.SoundSource; import net.minecraft.world.DifficultyInstance; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.EmptyTickList; -import net.minecraft.world.level.TickList; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.BiomeManager; @@ -62,6 +60,7 @@ import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.storage.LevelData; import net.minecraft.world.phys.AABB; +import net.minecraft.world.ticks.LevelTickAccess; import org.jetbrains.annotations.Nullable; @@ -106,7 +105,7 @@ public class LodServerWorld implements WorldGenLevel @Override public Biome getBiome(BlockPos pos) { - return chunk.getBiomes().getNoiseBiome(pos.getX() >> 2, pos.getY() >> 2, pos.getZ() >> 2); + return chunk.getNoiseBiome(pos.getX() >> 2, pos.getY() >> 2, pos.getZ() >> 2); } @Override @@ -140,9 +139,19 @@ public class LodServerWorld implements WorldGenLevel } @Override - public TickList getBlockTicks() + public long nextSubTickCount() { + return 0; + } + + @Override + public LevelTickAccess getBlockTicks() { - return EmptyTickList.empty(); + return null; + } + + @Override + public LevelTickAccess getFluidTicks() { + return null; } @Override @@ -152,17 +161,11 @@ public class LodServerWorld implements WorldGenLevel } @Override - public Stream> startsForFeature(SectionPos p_241827_1_, StructureFeature p_241827_2_) + public List> startsForFeature(SectionPos p_241827_1_, StructureFeature p_241827_2_) { return serverWorld.startsForFeature(p_241827_1_, p_241827_2_); } - @Override - public TickList getLiquidTicks() - { - return EmptyTickList.empty(); - } - @Override public LevelLightEngine getLightEngine() { diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/WorldGeneratorWrapper.java b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/WorldGeneratorWrapper.java index 941c771dc..b5b471d78 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/WorldGeneratorWrapper.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/WorldGeneratorWrapper.java @@ -115,7 +115,7 @@ public class WorldGeneratorWrapper extends AbstractWorldGeneratorWrapper ChunkAccess ca = serverWorld.getChunkSource().getChunk(chunkX, chunkZ, targetStatus, true); if (ca == null) throw new RuntimeException("This should NEVER be null due to bool being true"); - lodBuilder.generateLodNodeFromChunk(lodDim, new ChunkWrapper(ca), new LodBuilderConfig(generationMode)); + lodBuilder.generateLodNodeFromChunk(lodDim, new ChunkWrapper(ca, serverWorld), new LodBuilderConfig(generationMode), false); // long duration = System.nanoTime()-t; diff --git a/common/src/main/resources/lod.accesswidener b/common/src/main/resources/lod.accesswidener index 5b3d8bffd..de46ed225 100644 --- a/common/src/main/resources/lod.accesswidener +++ b/common/src/main/resources/lod.accesswidener @@ -13,6 +13,12 @@ accessible field net/minecraft/client/renderer/LevelRenderer renderChunks Lit/un accessible class net/minecraft/client/renderer/LevelRenderer$RenderChunkInfo accessible field net/minecraft/client/renderer/LevelRenderer$RenderChunkInfo chunk Lnet/minecraft/client/renderer/chunk/ChunkRenderDispatcher$RenderChunk; +# used for grabbing vanilla rendered chunks +accessible field net/minecraft/client/renderer/LevelRenderer renderChunkStorage Ljava/util/concurrent/atomic/AtomicReference; +accessible class net/minecraft/client/renderer/LevelRenderer$RenderChunkStorage +accessible class net/minecraft/client/renderer/LevelRenderer$RenderChunkInfo +accessible field net/minecraft/client/renderer/LevelRenderer$RenderChunkInfo chunk Lnet/minecraft/client/renderer/chunk/ChunkRenderDispatcher$RenderChunk; + # lighting accessible field net/minecraft/client/renderer/LightTexture lightPixels Lcom/mojang/blaze3d/platform/NativeImage; accessible field net/minecraft/world/level/lighting/LevelLightEngine blockEngine Lnet/minecraft/world/level/lighting/LayerLightEngine; diff --git a/core b/core index 5ac51dd2a..d1e1970c1 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit 5ac51dd2a5fd24be6203d22004a760ad9d696fa6 +Subproject commit d1e1970c180e3b0e82d0800782b2ea9e806eb5fc diff --git a/fabric/build.gradle b/fabric/build.gradle index 8e7aede1c..9ecc65c6d 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -1,5 +1,6 @@ plugins { id "com.github.johnrengelman.shadow" version "7.0.0" + id "com.modrinth.minotaur" version "1.2.1" } loom { @@ -20,10 +21,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 +46,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 487593009..52ff9c4a0 100644 --- a/fabric/src/main/java/com/seibel/lod/fabric/ClientProxy.java +++ b/fabric/src/main/java/com/seibel/lod/fabric/ClientProxy.java @@ -41,6 +41,7 @@ import net.fabricmc.fabric.mixin.event.lifecycle.client.ClientChunkManagerMixin; import net.minecraft.client.KeyMapping; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientChunkCache; +import net.minecraft.client.multiplayer.ClientPacketListener; import net.minecraft.core.BlockPos; import net.minecraft.server.MinecraftServer; import net.minecraft.world.level.Level; @@ -59,6 +60,7 @@ import org.lwjgl.glfw.GLFW; public class ClientProxy { private final EventApi eventApi = EventApi.INSTANCE; + private final ClientApi clientApi = ClientApi.INSTANCE; /** @@ -68,6 +70,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); ServerTickEvents.END_SERVER_TICK.register(this::serverTickEvent); @@ -76,8 +80,6 @@ public class ClientProxy //ServerChunkEvents.CHUNK_LOAD.register(this::chunkLoadEvent); ClientChunkEvents.CHUNK_LOAD.register(this::chunkLoadEvent); - - /* World Events */ ServerWorldEvents.LOAD.register((server, level) -> this.worldLoadEvent(level)); ServerWorldEvents.UNLOAD.register((server, level) -> this.worldUnloadEvent(level)); @@ -101,7 +103,8 @@ public class ClientProxy public void chunkLoadEvent(LevelAccessor level, LevelChunk chunk) { - eventApi.chunkLoadEvent(new ChunkWrapper(chunk), DimensionTypeWrapper.getDimensionTypeWrapper(level.dimensionType())); + clientApi.clientChunkLoadEvent(new ChunkWrapper(chunk, level), + WorldWrapper.getWorldWrapper(level)); } public void worldSaveEvent() @@ -145,7 +148,7 @@ public class ClientProxy * } */ public void blockChangeEvent(LevelAccessor world, BlockPos pos) { - IChunkWrapper chunk = new ChunkWrapper(world.getChunk(pos)); + IChunkWrapper chunk = new ChunkWrapper(world.getChunk(pos), world); DimensionTypeWrapper dimType = DimensionTypeWrapper.getDimensionTypeWrapper(world.dimensionType()); // recreate the LOD where the blocks were changed 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 66eae2616..906701bec 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/mixins/unsafe/MixinPalettedContainer.java b/fabric/src/main/java/com/seibel/lod/fabric/mixins/unsafe/MixinPalettedContainer.java index d1a513bcc..1ef045585 100644 --- a/fabric/src/main/java/com/seibel/lod/fabric/mixins/unsafe/MixinPalettedContainer.java +++ b/fabric/src/main/java/com/seibel/lod/fabric/mixins/unsafe/MixinPalettedContainer.java @@ -23,7 +23,7 @@ import java.util.concurrent.Semaphore; @Mixin(PalettedContainer.class) public class MixinPalettedContainer { @Mutable - @Shadow @Final private Semaphore lock; + private Semaphore lock; @Inject(method = "", at = @At("RETURN")) private void setSemaphore(CallbackInfo ci) { 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..865e19e9a --- /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/forge/src/main/java/com/seibel/lod/forge/ForgeClientProxy.java b/forge/src/main/java/com/seibel/lod/forge/ForgeClientProxy.java index f9d82e20b..f7c8445f1 100644 --- a/forge/src/main/java/com/seibel/lod/forge/ForgeClientProxy.java +++ b/forge/src/main/java/com/seibel/lod/forge/ForgeClientProxy.java @@ -19,6 +19,7 @@ package com.seibel.lod.forge; +import com.seibel.lod.core.api.ClientApi; import com.seibel.lod.core.api.EventApi; import com.seibel.lod.core.wrapperInterfaces.chunk.IChunkWrapper; import com.seibel.lod.common.wrappers.chunk.ChunkWrapper; @@ -42,6 +43,7 @@ import net.minecraftforge.eventbus.api.SubscribeEvent; public class ForgeClientProxy { private final EventApi eventApi = EventApi.INSTANCE; + private final ClientApi clientApi = ClientApi.INSTANCE; @@ -54,7 +56,7 @@ public class ForgeClientProxy @SubscribeEvent public void chunkLoadEvent(ChunkEvent.Load event) { - eventApi.chunkLoadEvent(new ChunkWrapper(event.getChunk()), DimensionTypeWrapper.getDimensionTypeWrapper(event.getWorld().dimensionType())); + clientApi.clientChunkLoadEvent(new ChunkWrapper(event.getChunk(), event.getWorld()), WorldWrapper.getWorldWrapper(event.getWorld())); } @SubscribeEvent @@ -88,7 +90,7 @@ public class ForgeClientProxy event.getClass() == BlockEvent.FluidPlaceBlockEvent.class || event.getClass() == BlockEvent.PortalSpawnEvent.class) { - IChunkWrapper chunk = new ChunkWrapper(event.getWorld().getChunk(event.getPos())); + IChunkWrapper chunk = new ChunkWrapper(event.getWorld().getChunk(event.getPos()), event.getWorld()); DimensionTypeWrapper dimType = DimensionTypeWrapper.getDimensionTypeWrapper(event.getWorld().dimensionType()); // recreate the LOD where the blocks were changed diff --git a/gradle.properties b/gradle.properties index 272dc69d1..5aad84977 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,14 +1,22 @@ org.gradle.jvmargs=-Xmx2048M -minecraft_version=1.17.1 +minecraft_version=1.18.1 archives_base_name=DistantHorizons mod_version=1.5.4a maven_group=com.seibel.lod toml_version=3.6.0 -fabric_loader_version=0.11.6 -fabric_api_version=0.37.1+1.17 -modmenu_version=2.0.14 -forge_version=37.1.0 \ No newline at end of file +# Fabric loader +fabric_loader_version=0.12.12 +fabric_api_version=0.44.0+1.18 + # Fabric mods + modmenu_version=3.0.0 + sodium_version=mc1.17.1-0.3.3 +# iris_version=1.17.x-v1.1.4 + +# Forge loader +forge_version=39.0.5 + # Forge mods + ## currentlly no mods ##