From 6b88eb833d865d65718f0085bc237235471b30c5 Mon Sep 17 00:00:00 2001 From: coolGi2007 Date: Sun, 9 Jan 2022 21:32:57 +1030 Subject: [PATCH] Updated everything --- .../java/com/seibel/lod/common/Config.java | 7 ++- .../wrappers/chunk/ChunkPosWrapper.java | 11 ++++- .../common/wrappers/chunk/ChunkWrapper.java | 21 +++++++++ .../config/LodConfigWrapperSingleton.java | 10 ++++ .../minecraft/MinecraftRenderWrapper.java | 46 ++++++++----------- .../common/wrappers/world/WorldWrapper.java | 11 ++++- .../WorldGeneratorWrapper.java | 2 +- common/src/main/resources/lod.accesswidener | 5 ++ core | 2 +- fabric/build.gradle | 21 +++++++++ .../com/seibel/lod/fabric/ClientProxy.java | 6 ++- .../main/java/com/seibel/lod/fabric/Main.java | 7 +++ .../fabric/modAccessor/SodiumAccessor.java | 43 +++++++++++++++++ .../seibel/lod/forge/ForgeClientProxy.java | 6 ++- gradle.properties | 16 +++++-- 15 files changed, 174 insertions(+), 40 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 f53ae05ea..7512f8cab 100644 --- a/common/src/main/java/com/seibel/lod/common/Config.java +++ b/common/src/main/java/com/seibel/lod/common/Config.java @@ -26,7 +26,6 @@ import com.seibel.lod.core.enums.rendering.*; import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton.IClient.IAdvanced.*; import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton.IClient.IGraphics.*; import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton.IClient.IWorldGenerator; -import net.minecraft.client.renderer.DimensionSpecialEffects; /** * This handles any configuration the user has access to. @@ -105,6 +104,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 +170,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 b1576c878..ff2769ca4 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..f5e5cc8b4 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; @@ -85,9 +88,15 @@ 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 +166,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/minecraft/MinecraftRenderWrapper.java b/common/src/main/java/com/seibel/lod/common/wrappers/minecraft/MinecraftRenderWrapper.java index 8e8741e88..67e706fa4 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,16 +2,22 @@ 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.mojang.math.Vector3d; import com.seibel.lod.common.wrappers.WrapperFactory; import com.seibel.lod.common.wrappers.misc.LightMapWrapper; +import com.seibel.lod.core.api.ModAccessorApi; import com.seibel.lod.core.handlers.IReflectionHandler; import com.seibel.lod.core.handlers.ReflectionHandler; import com.seibel.lod.core.util.LodUtil; +import com.seibel.lod.core.wrapperInterfaces.modAccessor.ISodiumAccessor; +import it.unimi.dsi.fastutil.objects.ObjectList; import net.minecraft.client.renderer.LightTexture; +import net.minecraft.world.phys.AABB; import org.lwjgl.opengl.GL15; import org.lwjgl.opengl.GL20; @@ -49,6 +55,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; @@ -101,6 +108,7 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper GL15.glGetFloatv(GL15.GL_FOG_COLOR, colorValues); return new Color(colorValues[0], colorValues[1], colorValues[2], colorValues[3]); } + // getUnderWaterFogColor() is the same as getFogColor() @Override public Color getSkyColor() { @@ -139,34 +147,20 @@ 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 - // FIXME[1.16.5]: pls fix -// 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)); -// } -// } - - - return loadedPos; + public HashSet getVanillaRenderedChunks() { + ISodiumAccessor sodium = ModAccessorApi.get(ISodiumAccessor.class); + if (sodium != null) { + return sodium.getNormalRenderedChunks(); + } + LevelRenderer levelRenderer = MC.levelRenderer; + ObjectList chunks = levelRenderer.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))); } 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 bd1fd38af..93f906f05 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 @@ -23,8 +23,10 @@ import java.io.File; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; +import com.seibel.lod.common.wrappers.chunk.ChunkWrapper; 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.world.IBiomeWrapper; import com.seibel.lod.core.wrapperInterfaces.world.IWorldWrapper; import com.seibel.lod.common.wrappers.block.BlockPosWrapper; @@ -35,6 +37,8 @@ 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; /** @@ -165,5 +169,10 @@ public class WorldWrapper implements IWorldWrapper return world.getSeaLevel(); } - + @Override + public ChunkWrapper 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/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 19f6862e3..06bb2314e 100644 --- a/common/src/main/resources/lod.accesswidener +++ b/common/src/main/resources/lod.accesswidener @@ -6,6 +6,11 @@ accessible field net/minecraft/world/level/storage/DimensionDataStorage dataFold # used when rendering accessible method net/minecraft/client/renderer/GameRenderer getFov (Lnet/minecraft/client/Camera;FZ)D +# used for grabbing vanilla rendered chunks +accessible field net/minecraft/client/renderer/LevelRenderer renderChunks Lit/unimi/dsi/fastutil/objects/ObjectList; +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..06a93957f 100644 --- a/fabric/src/main/java/com/seibel/lod/fabric/ClientProxy.java +++ b/fabric/src/main/java/com/seibel/lod/fabric/ClientProxy.java @@ -59,6 +59,7 @@ import org.lwjgl.glfw.GLFW; public class ClientProxy { private final EventApi eventApi = EventApi.INSTANCE; + private final ClientApi clientApi = ClientApi.INSTANCE; /** @@ -101,7 +102,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 +147,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/modAccessor/SodiumAccessor.java b/fabric/src/main/java/com/seibel/lod/fabric/modAccessor/SodiumAccessor.java new file mode 100644 index 000000000..165fd395f --- /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; + +public class SodiumAccessor implements ISodiumAccessor { + IWrapperFactory factory = SingletonHandler.get(IWrapperFactory.class); + + @Override + public String getModName() { + return "Sodium-Fabric-1.16.5"; + } + + @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)); + return null; + } + +} 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 677fcee29..127444edd 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_version=0.11.3 -fabric_api_version=0.34.2+1.16 -modmenu_version=1.16.22 -forge_version=36.1.0 \ No newline at end of file +# Fabric loader +fabric_loader_version=0.12.3 +fabric_api_version=0.34.2+1.16 + # Fabric mods + modmenu_version=1.16.22 + sodium_version=mc1.16.5-0.2.0 +# iris_version=1.16.x-v1.1.4 + +# Forge loader +forge_version=36.1.0 + # Forge mods + ## currentlly no mods ##