diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/WrapperFactory.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/WrapperFactory.java index 44a9c3662..2dca01e27 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/WrapperFactory.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/WrapperFactory.java @@ -147,16 +147,19 @@ public class WrapperFactory implements IWrapperFactory public IBlockStateWrapper deserializeBlockStateWrapper(String str, ILevelWrapper levelWrapper) throws IOException { return BlockStateWrapper.deserialize(str, levelWrapper); } @Override public IBlockStateWrapper getAirBlockStateWrapper() { return BlockStateWrapper.AIR; } - + @Override + public IBlockStateWrapper getWaterBlockStateWrapper(ILevelWrapper levelWrapper) { return BlockStateWrapper.getWaterBlockStateWrapper(levelWrapper); } @Override public ObjectOpenHashSet getRendererIgnoredBlocks(ILevelWrapper levelWrapper) { return BlockStateWrapper.getRendererIgnoredBlocks(levelWrapper); } @Override public ObjectOpenHashSet getRendererIgnoredCaveBlocks(ILevelWrapper levelWrapper) { return BlockStateWrapper.getRendererIgnoredCaveBlocks(levelWrapper); } + @Override + public ObjectOpenHashSet getWaterSubsurfaceReplacementBlocks(ILevelWrapper levelWrapper) { return BlockStateWrapper.getWaterSubsurfaceReplacementBlocks(levelWrapper); } + @Override + public ObjectOpenHashSet getWaterSurfaceReplacementBlocks(ILevelWrapper levelWrapper) { return BlockStateWrapper.getWaterSurfaceReplacementBlocks(levelWrapper); } @Override - public void resetRendererIgnoredCaveBlocks() { BlockStateWrapper.clearRendererIgnoredCaveBlocks(); } - @Override - public void resetRendererIgnoredBlocksSet() { BlockStateWrapper.clearRendererIgnoredBlocks(); } + public void resetCachedIgnoredBlocksSets() { BlockStateWrapper.clearCachedIgnoreBlocks(); } /** diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java index 1deff2935..b34a1c228 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java @@ -20,6 +20,7 @@ package com.seibel.distanthorizons.common.wrappers.block; import com.seibel.distanthorizons.api.enums.rendering.EDhApiBlockMaterial; +import com.seibel.distanthorizons.common.wrappers.WrapperFactory; import com.seibel.distanthorizons.core.config.Config; import com.seibel.distanthorizons.core.config.types.ConfigEntry; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; @@ -44,7 +45,6 @@ import java.util.List; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Stream; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; #if MC_VER == MC_1_16_5 || MC_VER == MC_1_17_1 @@ -95,6 +95,9 @@ public class BlockStateWrapper implements IBlockStateWrapper public static ObjectOpenHashSet rendererIgnoredBlocks = null; public static ObjectOpenHashSet rendererIgnoredCaveBlocks = null; + public static ObjectOpenHashSet waterSubsurfaceReplacementBlocks = null; + public static ObjectOpenHashSet waterSurfaceReplacementBlocks = null; + public static IBlockStateWrapper waterBlock = null; /** keep track of broken blocks so we don't log every time */ #if MC_VER <= MC_1_21_10 @@ -312,10 +315,12 @@ public class BlockStateWrapper implements IBlockStateWrapper //====================// //region - /** - * Requires a {@link ILevelWrapper} since {@link BlockStateWrapper#deserialize(String,ILevelWrapper)} also requires one. + /** + * Each of the following methods require + * a {@link ILevelWrapper} since {@link BlockStateWrapper#deserialize(String,ILevelWrapper)} also requires one. * This way the method won't accidentally be called before the deserialization can be completed. */ + public static ObjectOpenHashSet getRendererIgnoredBlocks(ILevelWrapper levelWrapper) { // use the cached version if possible @@ -329,10 +334,6 @@ public class BlockStateWrapper implements IBlockStateWrapper rendererIgnoredBlocks = getAllBlockWrappers(Config.Client.Advanced.Graphics.Culling.ignoredRenderBlockCsv, baseIgnoredBlock, levelWrapper); return rendererIgnoredBlocks; } - /** - * Requires a {@link ILevelWrapper} since {@link BlockStateWrapper#deserialize(String,ILevelWrapper)} also requires one. - * This way the method won't accidentally be called before the deserialization can be completed. - */ public static ObjectOpenHashSet getRendererIgnoredCaveBlocks(ILevelWrapper levelWrapper) { // use the cached version if possible @@ -346,9 +347,50 @@ public class BlockStateWrapper implements IBlockStateWrapper rendererIgnoredCaveBlocks = getAllBlockWrappers(Config.Client.Advanced.Graphics.Culling.ignoredRenderCaveBlockCsv, baseIgnoredBlock, levelWrapper); return rendererIgnoredCaveBlocks; } + public static ObjectOpenHashSet getWaterSurfaceReplacementBlocks(ILevelWrapper levelWrapper) + { + // use the cached version if possible + if (waterSurfaceReplacementBlocks != null) + { + return waterSurfaceReplacementBlocks; + } + + ObjectOpenHashSet baseIgnoredBlock = new ObjectOpenHashSet<>(); + waterSurfaceReplacementBlocks = getAllBlockWrappers(Config.Client.Advanced.Graphics.Culling.waterSurfaceBlockReplacementCsv, baseIgnoredBlock, levelWrapper); + return waterSurfaceReplacementBlocks; + } + public static ObjectOpenHashSet getWaterSubsurfaceReplacementBlocks(ILevelWrapper levelWrapper) + { + // use the cached version if possible + if (waterSubsurfaceReplacementBlocks != null) + { + return waterSubsurfaceReplacementBlocks; + } + + ObjectOpenHashSet baseIgnoredBlock = new ObjectOpenHashSet<>(); + waterSubsurfaceReplacementBlocks = getAllBlockWrappers(Config.Client.Advanced.Graphics.Culling.waterSubSurfaceBlockReplacementCsv, baseIgnoredBlock, levelWrapper); + return waterSubsurfaceReplacementBlocks; + } + public static IBlockStateWrapper getWaterBlockStateWrapper(ILevelWrapper levelWrapper) + { + // use the cached version if possible + if (waterBlock != null) + { + return waterBlock; + } + + waterBlock = WrapperFactory.INSTANCE.deserializeBlockStateWrapperOrGetDefault("minecraft:water", levelWrapper); + return waterBlock; + } - public static void clearRendererIgnoredBlocks() { rendererIgnoredBlocks = null; } - public static void clearRendererIgnoredCaveBlocks() { rendererIgnoredCaveBlocks = null; } + public static void clearCachedIgnoreBlocks() + { + rendererIgnoredBlocks = null; + rendererIgnoredCaveBlocks = null; + waterSurfaceReplacementBlocks = null; + waterSubsurfaceReplacementBlocks = null; + waterBlock = null; + } //endregion diff --git a/coreSubProjects b/coreSubProjects index 5933ef824..da2454b24 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 5933ef82458c45e9dd896aa60e7a9064b895ee36 +Subproject commit da2454b249a0102dd756b52013af39b78bdb508e