From f144a9ebc1282e5101f894588a5f48016ba0d791 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Mon, 8 Jul 2024 20:20:48 -0500 Subject: [PATCH] Optimize beacon detection --- .../block/IBlockStateWrapper.java | 15 ++++++++++ .../chunk/IChunkWrapper.java | 30 ++++--------------- .../LightingTestBlockStateWrapper.java | 7 +++++ 3 files changed, 27 insertions(+), 25 deletions(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/block/IBlockStateWrapper.java b/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/block/IBlockStateWrapper.java index b26481a87..68fe9a194 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/block/IBlockStateWrapper.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/block/IBlockStateWrapper.java @@ -21,6 +21,9 @@ package com.seibel.distanthorizons.core.wrapperInterfaces.block; import com.seibel.distanthorizons.api.interfaces.block.IDhApiBlockStateWrapper; +import java.util.Arrays; +import java.util.List; + /** A Minecraft version independent way of handling Blocks. */ public interface IBlockStateWrapper extends IDhApiBlockStateWrapper { @@ -31,6 +34,15 @@ public interface IBlockStateWrapper extends IDhApiBlockStateWrapper int FULLY_TRANSPARENT = 0; int FULLY_OPAQUE = 16; + /** should be all lowercase */ + List BEACON_BASE_BLOCK_NAME_LIST = Arrays.asList( + "iron_block", + "gold_block", + "diamond_block", + "emerald_block", + "netherite_block" + ); + /** contains the indices used by Iris to determine how different block types should be rendered */ class IrisBlockMaterial { @@ -77,4 +89,7 @@ public interface IBlockStateWrapper extends IDhApiBlockStateWrapper byte getIrisBlockMaterialId(); + boolean isBeaconBlock(); + boolean isBeaconBaseBlock(); + } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/chunk/IChunkWrapper.java b/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/chunk/IChunkWrapper.java index 21c35ea79..ea774036b 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/chunk/IChunkWrapper.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/chunk/IChunkWrapper.java @@ -41,15 +41,6 @@ public interface IChunkWrapper extends IBindable /** useful for debugging, but can slow down chunk operations quite a bit due to being called every time. */ boolean RUN_RELATIVE_POS_INDEX_VALIDATION = ModInfo.IS_DEV_BUILD; - /** should be all lowercase */ - List BEACON_BASE_BLOCK_NAME_LIST = Arrays.asList( - "iron_block", - "gold_block", - "diamond_block", - "emerald_block", - "netherite_block" - ); - DhChunkPos getChunkPos(); @@ -271,8 +262,9 @@ public interface IChunkWrapper extends IBindable DhBlockPos pos = blockPosList.get(i); DhBlockPos relPos = pos.convertToChunkRelativePos(); + IBlockStateWrapper block = this.getBlockState(relPos); - if (block.getSerialString().toLowerCase().contains("minecraft:beacon")) + if (block.isBeaconBlock()) { if (isBeaconActive(pos, adjacentChunkHolder)) { @@ -299,21 +291,9 @@ public interface IChunkWrapper extends IBindable IChunkWrapper chunk = chunkHolder.getByBlockPos(beaconPos.x + x, beaconPos.z + z); if (chunk != null) - { - String blockSerial = chunk.getBlockState(baseRelPos.x, baseRelPos.y, baseRelPos.z).getSerialString(); - - boolean baseBlockFound = false; - for (int i = 0; i < BEACON_BASE_BLOCK_NAME_LIST.size(); i++) - { - String baseBlockName = BEACON_BASE_BLOCK_NAME_LIST.get(i); - if (blockSerial.contains(baseBlockName)) - { - baseBlockFound = true; - break; - } - } - - if (!baseBlockFound) + { + IBlockStateWrapper block = chunk.getBlockState(baseRelPos.x, baseRelPos.y, baseRelPos.z); + if (!block.isBeaconBaseBlock()) { return false; } diff --git a/core/src/test/java/testItems/lightingEngine/LightingTestBlockStateWrapper.java b/core/src/test/java/testItems/lightingEngine/LightingTestBlockStateWrapper.java index 1ecea8ab5..58eb1bdb0 100644 --- a/core/src/test/java/testItems/lightingEngine/LightingTestBlockStateWrapper.java +++ b/core/src/test/java/testItems/lightingEngine/LightingTestBlockStateWrapper.java @@ -104,4 +104,11 @@ public class LightingTestBlockStateWrapper implements IBlockStateWrapper @Override public byte getIrisBlockMaterialId() { throw new UnsupportedOperationException("Not Implemented"); } + @Override + public boolean isBeaconBlock() { throw new UnsupportedOperationException("Not Implemented"); } + @Override + public boolean isBeaconBaseBlock() { throw new UnsupportedOperationException("Not Implemented"); } + + + }