Dynamically get beacon base blocks in MC 1.18.2+
This commit is contained in:
+33
-3
@@ -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<String> OLD_BEACON_BASE_BLOCK_NAME_LIST = Arrays.asList(
|
||||
"iron_block",
|
||||
"gold_block",
|
||||
"diamond_block",
|
||||
"emerald_block",
|
||||
"netherite_block"
|
||||
);
|
||||
|
||||
public static HashSet<IBlockStateWrapper> rendererIgnoredBlocks = null;
|
||||
public static HashSet<IBlockStateWrapper> 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<TagKey<Block>> tags = blockState.getTags();
|
||||
this.isBeaconBaseBlock = tags.anyMatch((TagKey<Block> 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
|
||||
|
||||
Reference in New Issue
Block a user