From 39b1ec61ba86a61c249d34a9223602f5f1f43cdc Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sun, 1 Sep 2024 15:04:27 -0500 Subject: [PATCH] Fix glass panes not affecting beacon colors --- .../wrappers/block/BlockStateWrapper.java | 34 ++++++++++++++++--- coreSubProjects | 2 +- 2 files changed, 31 insertions(+), 5 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 126818de9..67747d694 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 @@ -30,6 +30,7 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.block.IBlockStateWrappe import com.seibel.distanthorizons.core.wrapperInterfaces.world.ILevelWrapper; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.BlockTags; +import net.minecraft.world.level.block.BeaconBeamBlock; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.SoundType; @@ -102,8 +103,9 @@ public class BlockStateWrapper implements IBlockStateWrapper private byte blockMaterialId = 0; private final boolean isBeaconBlock; - private final boolean isBeaconBaseBlock; - private final boolean isGlassBlock; + private final boolean isBeaconBaseBlock; + /** null if this block can't tint beacons */ + private final Color beaconTintColor; private final Color mapColor; @@ -139,6 +141,7 @@ public class BlockStateWrapper implements IBlockStateWrapper this.hashCode = Objects.hash(this.serialString); this.blockMaterialId = this.calculateEDhApiBlockMaterialId().index; + // beacon blocks String lowercaseSerial = this.serialString.toLowerCase(); boolean isBeaconBaseBlock = false; for (int i = 0; i < LodUtil.BEACON_BASE_BLOCK_NAME_LIST.size(); i++) @@ -152,7 +155,28 @@ public class BlockStateWrapper implements IBlockStateWrapper } this.isBeaconBaseBlock = isBeaconBaseBlock; this.isBeaconBlock = lowercaseSerial.contains("minecraft:beacon"); - this.isGlassBlock = lowercaseSerial.contains("glass"); + + // beacon tint color + Color beaconTintColor = null; + if (this.blockState != null + // beacon blocks also show up here, but since they block the beacon beam we don't want their color + && !this.isBeaconBlock) + { + Block block = this.blockState.getBlock(); + if (block instanceof BeaconBeamBlock) + { + int colorInt; + #if MC_VER <= MC_1_19_4 + colorInt = ((BeaconBeamBlock) block).getColor().getMaterialColor().col; + #else + colorInt = ((BeaconBeamBlock) block).getColor().getMapColor().col; + #endif + + beaconTintColor = ColorUtil.toColorObjRGB(colorInt); + } + } + this.beaconTintColor = beaconTintColor; + int mcColor = 0; if (this.blockState != null) @@ -399,10 +423,12 @@ public class BlockStateWrapper implements IBlockStateWrapper @Override public boolean isBeaconBaseBlock() { return this.isBeaconBaseBlock; } @Override - public boolean isGlassBlock() { return this.isGlassBlock; } + public boolean isBeaconTintBlock() { return this.beaconTintColor != null; } @Override public Color getMapColor() { return this.mapColor; } + @Override + public Color getBeaconTintColor() { return this.beaconTintColor; } @Override public byte getMaterialId() { return this.blockMaterialId; } diff --git a/coreSubProjects b/coreSubProjects index fc90cf337..ec012d9fd 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit fc90cf33777cab176770872440bcb0b244589a29 +Subproject commit ec012d9fd61d59106cc2bdd1aa2e016cb4cc84c7