From a60887e9a7b2eeaf58efa1565773c50835bf1c71 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sat, 10 Jan 2026 17:33:51 -0600 Subject: [PATCH] Dynamically get beacon base blocks in MC 1.18.2+ --- .../wrappers/block/BlockStateWrapper.java | 36 +++++++++++++++++-- 1 file changed, 33 insertions(+), 3 deletions(-) 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 dca8c7530..eec8492c5 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 @@ -41,6 +41,7 @@ import java.io.IOException; import java.util.*; import java.util.List; import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Stream; import org.jetbrains.annotations.Nullable; @@ -49,12 +50,14 @@ import net.minecraft.core.Registry; import net.minecraft.core.BlockPos; import net.minecraft.world.level.EmptyBlockGetter; #elif MC_VER == MC_1_18_2 || MC_VER == MC_1_19_2 +import net.minecraft.tags.TagKey; import net.minecraft.client.Minecraft; import net.minecraft.world.level.Level; import net.minecraft.core.BlockPos; import net.minecraft.core.Registry; import net.minecraft.world.level.EmptyBlockGetter; #else +import net.minecraft.tags.TagKey; import net.minecraft.world.level.Level; import net.minecraft.core.BlockPos; import net.minecraft.core.registries.Registries; @@ -88,6 +91,15 @@ public class BlockStateWrapper implements IBlockStateWrapper public static final String DIRT_RESOURCE_LOCATION_STRING = "minecraft:dirt"; public static final String WATER_RESOURCE_LOCATION_STRING = "minecraft:water"; + /** Used to handle older MC versions that don't have an simple way of getting the block's tags */ + public static final List OLD_BEACON_BASE_BLOCK_NAME_LIST = Arrays.asList( + "iron_block", + "gold_block", + "diamond_block", + "emerald_block", + "netherite_block" + ); + public static HashSet rendererIgnoredBlocks = null; public static HashSet rendererIgnoredCaveBlocks = null; @@ -176,11 +188,14 @@ public class BlockStateWrapper implements IBlockStateWrapper String lowercaseSerial = this.serialString.toLowerCase(); - // beacon blocks + + // beacon base blocks + #if MC_VER <= MC_1_18_2 + // Older MC versions are harder to get block tags, so just use a static list to determine beacon blocks boolean isBeaconBaseBlock = false; - for (int i = 0; i < LodUtil.BEACON_BASE_BLOCK_NAME_LIST.size(); i++) + for (int i = 0; i < OLD_BEACON_BASE_BLOCK_NAME_LIST.size(); i++) { - String baseBlockName = LodUtil.BEACON_BASE_BLOCK_NAME_LIST.get(i); + String baseBlockName = OLD_BEACON_BASE_BLOCK_NAME_LIST.get(i); if (lowercaseSerial.contains(baseBlockName)) { isBeaconBaseBlock = true; @@ -188,8 +203,23 @@ public class BlockStateWrapper implements IBlockStateWrapper } } this.isBeaconBaseBlock = isBeaconBaseBlock; + #else + if (blockState != null) + { + // check if this block has any tags + Stream> tags = blockState.getTags(); + this.isBeaconBaseBlock = tags.anyMatch((TagKey tag) -> tag.location().getPath().toLowerCase().contains("beacon_base_blocks")); + } + else + { + this.isBeaconBaseBlock = false; + } + #endif + + // beacon block this.isBeaconBlock = lowercaseSerial.contains("minecraft:beacon"); + // beacon tint color Color beaconTintColor = null; if (this.blockState != null