From 1e32eb07bad9ca3625048b7520ff87cb96e10971 Mon Sep 17 00:00:00 2001 From: Jason Mitchell Date: Sun, 10 Dec 2023 09:57:21 -0800 Subject: [PATCH] Water progress * Return a block instead of a BlockMatch (at least for now) for populating mc_entity --- .../chunk/compile/ChunkBuildBuffers.java | 7 ++-- .../block_rendering/BlockMaterialMapping.java | 33 +++++++++---------- .../BlockRenderingSettings.java | 9 +++-- .../net/coderbot/iris/shaderpack/IdMap.java | 8 ++--- .../shaderpack/materialmap/BlockEntry.java | 24 +++++--------- .../block_context/BlockContextHolder.java | 5 ++- 6 files changed, 38 insertions(+), 48 deletions(-) diff --git a/src/main/java/me/jellysquid/mods/sodium/client/render/chunk/compile/ChunkBuildBuffers.java b/src/main/java/me/jellysquid/mods/sodium/client/render/chunk/compile/ChunkBuildBuffers.java index 60ff9863c..8705c061b 100644 --- a/src/main/java/me/jellysquid/mods/sodium/client/render/chunk/compile/ChunkBuildBuffers.java +++ b/src/main/java/me/jellysquid/mods/sodium/client/render/chunk/compile/ChunkBuildBuffers.java @@ -18,7 +18,6 @@ import me.jellysquid.mods.sodium.client.render.chunk.format.ModelVertexSink; import me.jellysquid.mods.sodium.client.render.chunk.passes.BlockRenderPass; import net.coderbot.iris.block_rendering.BlockRenderingSettings; -import net.coderbot.iris.shaderpack.materialmap.BlockMatch; import net.coderbot.iris.sodium.block_context.BlockContextHolder; import net.coderbot.iris.sodium.block_context.ChunkBuildBuffersExt; import net.coderbot.iris.sodium.block_context.ContextAwareVertexWriter; @@ -54,9 +53,9 @@ public ChunkBuildBuffers(ChunkVertexType vertexType) { this.offset = new ChunkModelOffset(); for (BlockRenderPass pass : BlockRenderPass.VALUES) { - int passId = pass.ordinal(); + final int passId = pass.ordinal(); - VertexBufferBuilder[] buffers = this.buffersByLayer[passId]; + final VertexBufferBuilder[] buffers = this.buffersByLayer[passId]; for (ModelQuadFacing facing : ModelQuadFacing.VALUES) { buffers[facing.ordinal()] = new VertexBufferBuilder(vertexType.getBufferVertexFormat(), EXPECTED_BUFFER_SIZE / ModelQuadFacing.COUNT); @@ -64,7 +63,7 @@ public ChunkBuildBuffers(ChunkVertexType vertexType) { } if(AngelicaConfig.enableIris) { - Object2IntMap blockMatches = BlockRenderingSettings.INSTANCE.getBlockMatches(); + final Object2IntMap blockMatches = BlockRenderingSettings.INSTANCE.getBlockMatches(); if (blockMatches != null) { this.iris$contextHolder = new BlockContextHolder(blockMatches); diff --git a/src/main/java/net/coderbot/iris/block_rendering/BlockMaterialMapping.java b/src/main/java/net/coderbot/iris/block_rendering/BlockMaterialMapping.java index 280c4ca26..e6bee3c80 100644 --- a/src/main/java/net/coderbot/iris/block_rendering/BlockMaterialMapping.java +++ b/src/main/java/net/coderbot/iris/block_rendering/BlockMaterialMapping.java @@ -6,7 +6,6 @@ import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import it.unimi.dsi.fastutil.objects.Reference2ReferenceOpenHashMap; import net.coderbot.iris.shaderpack.materialmap.BlockEntry; -import net.coderbot.iris.shaderpack.materialmap.BlockMatch; import net.coderbot.iris.shaderpack.materialmap.BlockRenderType; import net.coderbot.iris.shaderpack.materialmap.NamespacedId; import net.minecraft.block.Block; @@ -15,11 +14,10 @@ import java.util.List; import java.util.Map; -import java.util.Set; public class BlockMaterialMapping { - public static Object2IntMap createBlockStateIdMap(Int2ObjectMap> blockPropertiesMap) { - Object2IntMap blockMatches = new Object2IntOpenHashMap<>(); + public static Object2IntMap createBlockStateIdMap(Int2ObjectMap> blockPropertiesMap) { + Object2IntMap blockMatches = new Object2IntOpenHashMap<>(); blockPropertiesMap.forEach((intId, entries) -> { for (BlockEntry entry : entries) { @@ -59,11 +57,11 @@ private static RenderLayer convertBlockToRenderType(BlockRenderType type) { }; } - private static void addBlock(BlockEntry entry, Object2IntMap idMap, int intId) { + private static void addBlock(BlockEntry entry, Object2IntMap idMap, int intId) { final NamespacedId id = entry.getId(); final ResourceLocation resourceLocation = new ResourceLocation(id.getNamespace(), id.getName()); - Block block = (Block) Block.blockRegistry.getObject(resourceLocation.toString()); + final Block block = (Block) Block.blockRegistry.getObject(resourceLocation.toString()); // If the block doesn't exist, by default the registry will return AIR. That probably isn't what we want. // TODO: Assuming that Registry.BLOCK.getDefaultId() == "minecraft:air" here @@ -71,18 +69,19 @@ private static void addBlock(BlockEntry entry, Object2IntMap idMap, return; } - Set metas = entry.getMetas(); + idMap.put(block, intId); - // All metas match - if (metas.isEmpty()) { - idMap.putIfAbsent(new BlockMatch(block, null), intId); - return; - } - - // A subset of metas match - for(int meta : metas) { - idMap.putIfAbsent(new BlockMatch(block, meta), intId); - } +// Set metas = entry.getMetas(); +// // All metas match +// if (metas.isEmpty()) { +// idMap.putIfAbsent(new BlockMatch(block, null), intId); +// return; +// } +// +// // A subset of metas match +// for(int meta : metas) { +// idMap.putIfAbsent(new BlockMatch(block, meta), intId); +// } } // We ignore generics here, the actual types don't matter because we just convert diff --git a/src/main/java/net/coderbot/iris/block_rendering/BlockRenderingSettings.java b/src/main/java/net/coderbot/iris/block_rendering/BlockRenderingSettings.java index 7c3432f52..a234d6662 100644 --- a/src/main/java/net/coderbot/iris/block_rendering/BlockRenderingSettings.java +++ b/src/main/java/net/coderbot/iris/block_rendering/BlockRenderingSettings.java @@ -1,10 +1,9 @@ package net.coderbot.iris.block_rendering; +import com.gtnewhorizons.angelica.compat.mojang.RenderLayer; import it.unimi.dsi.fastutil.objects.Object2IntFunction; import it.unimi.dsi.fastutil.objects.Object2IntMap; -import com.gtnewhorizons.angelica.compat.mojang.RenderLayer; import lombok.Getter; -import net.coderbot.iris.shaderpack.materialmap.BlockMatch; import net.coderbot.iris.shaderpack.materialmap.NamespacedId; import net.minecraft.block.Block; import org.jetbrains.annotations.Nullable; @@ -16,7 +15,7 @@ public class BlockRenderingSettings { @Getter private boolean reloadRequired; - private Object2IntMap blockMatches; + private Object2IntMap blockMatches; private Map blockTypeIds; private Object2IntFunction entityIds; private float ambientOcclusionLevel; @@ -39,7 +38,7 @@ public void clearReloadRequired() { } @Nullable - public Object2IntMap getBlockMatches() { + public Object2IntMap getBlockMatches() { return blockMatches; } @@ -53,7 +52,7 @@ public Object2IntFunction getEntityIds() { return entityIds; } - public void setBlockMatches(Object2IntMap blockIds) { + public void setBlockMatches(Object2IntMap blockIds) { if (this.blockMatches != null && this.blockMatches.equals(blockIds)) { return; } diff --git a/src/main/java/net/coderbot/iris/shaderpack/IdMap.java b/src/main/java/net/coderbot/iris/shaderpack/IdMap.java index 61286a573..b4dbd6579 100644 --- a/src/main/java/net/coderbot/iris/shaderpack/IdMap.java +++ b/src/main/java/net/coderbot/iris/shaderpack/IdMap.java @@ -175,15 +175,15 @@ private static Int2ObjectMap> parseBlockMap(Properties properti Int2ObjectMap> entriesById = new Int2ObjectOpenHashMap<>(); properties.forEach((keyObject, valueObject) -> { - String key = (String) keyObject; - String value = (String) valueObject; + final String key = (String) keyObject; + final String value = (String) valueObject; if (!key.startsWith(keyPrefix)) { // Not a valid line, ignore it return; } - int intId; + final int intId; try { intId = Integer.parseInt(key.substring(keyPrefix.length())); @@ -193,7 +193,7 @@ private static Int2ObjectMap> parseBlockMap(Properties properti return; } - List entries = new ArrayList<>(); + final List entries = new ArrayList<>(); // Split on whitespace groups, not just single spaces for (String part : value.split("\\s+")) { diff --git a/src/main/java/net/coderbot/iris/shaderpack/materialmap/BlockEntry.java b/src/main/java/net/coderbot/iris/shaderpack/materialmap/BlockEntry.java index d20e77456..77388cea4 100644 --- a/src/main/java/net/coderbot/iris/shaderpack/materialmap/BlockEntry.java +++ b/src/main/java/net/coderbot/iris/shaderpack/materialmap/BlockEntry.java @@ -1,5 +1,6 @@ package net.coderbot.iris.shaderpack.materialmap; +import lombok.Getter; import net.coderbot.iris.Iris; import org.apache.commons.lang3.StringUtils; import org.jetbrains.annotations.NotNull; @@ -9,6 +10,7 @@ import java.util.Objects; import java.util.Set; +@Getter public class BlockEntry { private final NamespacedId id; private final Set metas; @@ -30,7 +32,7 @@ public static BlockEntry parse(@NotNull String entry) { } // We can assume that this array is of at least array length because the input string is non-empty. - String[] splitStates = entry.split(":"); + final String[] splitStates = entry.split(":"); // Trivial case: no states, no namespace if (splitStates.length == 1) { @@ -61,8 +63,8 @@ public static BlockEntry parse(@NotNull String entry) { } // Complex case: One or more states involved... - int statesStart; - NamespacedId id; + final int statesStart; + final NamespacedId id; if (StringUtils.isNumeric(splitStates[1].substring(0, 1))) { // We have an entry of the form "stone:0" @@ -74,11 +76,11 @@ public static BlockEntry parse(@NotNull String entry) { id = new NamespacedId(splitStates[0], splitStates[1]); } - Set metas = new HashSet<>(); + final Set metas = new HashSet<>(); for (int index = statesStart; index < splitStates.length; index++) { // Parse out one or more metadata ids - String[] metaParts = splitStates[index].split(", "); + final String[] metaParts = splitStates[index].split(", "); for (String metaPart : metaParts) { try { @@ -93,19 +95,11 @@ public static BlockEntry parse(@NotNull String entry) { return new BlockEntry(id, metas); } - public NamespacedId getId() { - return id; - } - - public Set getMetas() { - return metas; - } - - @Override + @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; - BlockEntry that = (BlockEntry) o; + final BlockEntry that = (BlockEntry) o; return Objects.equals(id, that.id) && Objects.equals(metas, that.metas); } diff --git a/src/main/java/net/coderbot/iris/sodium/block_context/BlockContextHolder.java b/src/main/java/net/coderbot/iris/sodium/block_context/BlockContextHolder.java index 9f1a7a3dd..6f7e601ff 100644 --- a/src/main/java/net/coderbot/iris/sodium/block_context/BlockContextHolder.java +++ b/src/main/java/net/coderbot/iris/sodium/block_context/BlockContextHolder.java @@ -2,11 +2,10 @@ import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2IntMaps; -import net.coderbot.iris.shaderpack.materialmap.BlockMatch; import net.minecraft.block.Block; public class BlockContextHolder { - private final Object2IntMap blockMatches; + private final Object2IntMap blockMatches; public int localPosX; public int localPosY; @@ -21,7 +20,7 @@ public BlockContextHolder() { this.renderType = -1; } - public BlockContextHolder(Object2IntMap idMap) { + public BlockContextHolder(Object2IntMap idMap) { this.blockMatches = idMap; this.blockId = -1; this.renderType = -1;