diff --git a/src/main/java/at/petrak/hexcasting/api/circle/BlockEntityAbstractImpetus.java b/src/main/java/at/petrak/hexcasting/api/circle/BlockEntityAbstractImpetus.java index 2e56f0c1..5def7b20 100644 --- a/src/main/java/at/petrak/hexcasting/api/circle/BlockEntityAbstractImpetus.java +++ b/src/main/java/at/petrak/hexcasting/api/circle/BlockEntityAbstractImpetus.java @@ -37,6 +37,8 @@ import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.ICapabilityProvider; import net.minecraftforge.common.util.LazyOptional; @@ -115,9 +117,11 @@ public abstract class BlockEntityAbstractImpetus extends PaucalBlockEntity imple this.stepCircle(); } + @OnlyIn(Dist.CLIENT) public void applyScryingLensOverlay(List> lines, BlockState state, BlockPos pos, - LocalPlayer observer, ClientLevel world, InteractionHand lensHand) { + LocalPlayer observer, ClientLevel world, + Direction hitFace, InteractionHand lensHand) { if (world.getBlockEntity(pos) instanceof BlockEntityAbstractImpetus beai) { var dustCount = (float) beai.getMana() / (float) HexConfig.dustManaAmount.get(); var dustCmp = new TranslatableComponent("hexcasting.tooltip.lens.impetus.mana", diff --git a/src/main/java/at/petrak/hexcasting/api/client/ScryingLensOverlayRegistry.java b/src/main/java/at/petrak/hexcasting/api/client/ScryingLensOverlayRegistry.java index 08c092d9..da8323f9 100644 --- a/src/main/java/at/petrak/hexcasting/api/client/ScryingLensOverlayRegistry.java +++ b/src/main/java/at/petrak/hexcasting/api/client/ScryingLensOverlayRegistry.java @@ -6,6 +6,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.InteractionHand; @@ -111,16 +112,16 @@ public final class ScryingLensOverlayRegistry { */ public static @NotNull List> getLines(BlockState state, BlockPos pos, LocalPlayer observer, ClientLevel world, - @Nullable InteractionHand lensHand) { + Direction hitFace, @Nullable InteractionHand lensHand) { List> lines = Lists.newArrayList(); var idLookedup = ID_LOOKUP.get(state.getBlock().getRegistryName()); if (idLookedup != null) { - idLookedup.addLines(lines, state, pos, observer, world, lensHand); + idLookedup.addLines(lines, state, pos, observer, world, hitFace, lensHand); } for (var pair : PREDICATE_LOOKUP) { - if (pair.getFirst().test(state, pos, observer, world, lensHand)) { - pair.getSecond().addLines(lines, state, pos, observer, world, lensHand); + if (pair.getFirst().test(state, pos, observer, world, hitFace, lensHand)) { + pair.getSecond().addLines(lines, state, pos, observer, world, hitFace, lensHand); } } @@ -137,7 +138,7 @@ public final class ScryingLensOverlayRegistry { void addLines(List> lines, BlockState state, BlockPos pos, LocalPlayer observer, ClientLevel world, - @Nullable InteractionHand lensHand); + Direction hitFace, @Nullable InteractionHand lensHand); } /** @@ -145,6 +146,8 @@ public final class ScryingLensOverlayRegistry { */ @FunctionalInterface public interface OverlayPredicate { - boolean test(BlockState state, BlockPos pos, LocalPlayer observer, ClientLevel world, @Nullable InteractionHand lensHand); + boolean test(BlockState state, BlockPos pos, LocalPlayer observer, + ClientLevel world, + Direction hitFace, @Nullable InteractionHand lensHand); } } diff --git a/src/main/java/at/petrak/hexcasting/client/HexAdditionalRenderers.java b/src/main/java/at/petrak/hexcasting/client/HexAdditionalRenderers.java index eb21f035..6262926d 100644 --- a/src/main/java/at/petrak/hexcasting/client/HexAdditionalRenderers.java +++ b/src/main/java/at/petrak/hexcasting/client/HexAdditionalRenderers.java @@ -173,7 +173,7 @@ public class HexAdditionalRenderers { var pos = bhr.getBlockPos(); var bs = mc.level.getBlockState(pos); - var lines = ScryingLensOverlayRegistry.getLines(bs, pos, mc.player, mc.level, lensHand); + var lines = ScryingLensOverlayRegistry.getLines(bs, pos, mc.player, mc.level, bhr.getDirection(), lensHand); if (!lines.isEmpty()) { var window = mc.getWindow(); var x = window.getGuiScaledWidth() / 2f + 8f; diff --git a/src/main/java/at/petrak/hexcasting/client/RegisterClientStuff.java b/src/main/java/at/petrak/hexcasting/client/RegisterClientStuff.java index 3bc43a00..85da2a0e 100644 --- a/src/main/java/at/petrak/hexcasting/client/RegisterClientStuff.java +++ b/src/main/java/at/petrak/hexcasting/client/RegisterClientStuff.java @@ -33,10 +33,7 @@ import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.ComparatorBlock; -import net.minecraft.world.level.block.RepeaterBlock; -import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.properties.ComparatorMode; import net.minecraftforge.client.event.EntityRenderersEvent; import net.minecraftforge.client.event.ParticleFactoryRegisterEvent; @@ -106,15 +103,15 @@ public class RegisterClientStuff { private static void addScryingLensStuff() { ScryingLensOverlayRegistry.addPredicateDisplayer( - (state, pos, observer, world, lensHand) -> state.getBlock() instanceof BlockAbstractImpetus, - (lines, state, pos, observer, world, lensHand) -> { + (state, pos, observer, world, direction, lensHand) -> state.getBlock() instanceof BlockAbstractImpetus, + (lines, state, pos, observer, world, direction, lensHand) -> { if (world.getBlockEntity(pos) instanceof BlockEntityAbstractImpetus beai) { - beai.applyScryingLensOverlay(lines, state, pos, observer, world, lensHand); + beai.applyScryingLensOverlay(lines, state, pos, observer, world, direction, lensHand); } }); ScryingLensOverlayRegistry.addDisplayer(HexBlocks.AKASHIC_BOOKSHELF.get(), - (lines, state, pos, observer, world, lensHand) -> { + (lines, state, pos, observer, world, direction, lensHand) -> { if (world.getBlockEntity(pos) instanceof BlockEntityAkashicBookshelf tile) { var recordPos = tile.getRecordPos(); var pattern = tile.getPattern(); @@ -131,7 +128,7 @@ public class RegisterClientStuff { }); ScryingLensOverlayRegistry.addDisplayer(HexBlocks.AKASHIC_RECORD.get(), - (lines, state, pos, observer, world, lensHand) -> { + (lines, state, pos, observer, world, direction, lensHand) -> { if (world.getBlockEntity(pos) instanceof BlockEntityAkashicRecord tile) { int count = tile.getCount(); @@ -142,16 +139,8 @@ public class RegisterClientStuff { } }); - ScryingLensOverlayRegistry.addDisplayer(Blocks.REDSTONE_WIRE, - (lines, state, pos, observer, world, lensHand) -> lines.add( - new Pair<>( - new ItemStack(Items.REDSTONE), - new TextComponent(String.valueOf(state.getValue(BlockStateProperties.POWER))) - .withStyle(ChatFormatting.RED)) - )); - ScryingLensOverlayRegistry.addDisplayer(Blocks.COMPARATOR, - (lines, state, pos, observer, world, lensHand) -> { + (lines, state, pos, observer, world, direction, lensHand) -> { int comparatorValue = ScryingLensOverlayRegistry.getComparatorValue(true); lines.add(new Pair<>( new ItemStack(Items.REDSTONE), @@ -165,20 +154,31 @@ public class RegisterClientStuff { }); ScryingLensOverlayRegistry.addDisplayer(Blocks.REPEATER, - (lines, state, pos, observer, world, lensHand) -> { - lines.add(new Pair<>( + (lines, state, pos, observer, world, direction, lensHand) -> lines.add(new Pair<>( + new ItemStack(Items.CLOCK), + new TextComponent(String.valueOf(state.getValue(RepeaterBlock.DELAY))) + .withStyle(ChatFormatting.YELLOW)))); + + ScryingLensOverlayRegistry.addPredicateDisplayer( + (state, pos, observer, world, direction, lensHand) -> state.isSignalSource() && !state.is(Blocks.COMPARATOR), + (lines, state, pos, observer, world, direction, lensHand) -> { + int signalStrength; + if (state.getBlock() instanceof DiodeBlock) + signalStrength = state.getSignal(world, pos, state.getValue(DiodeBlock.FACING)); + else if (state.getBlock() instanceof RedStoneWireBlock) + signalStrength = state.getValue(RedStoneWireBlock.POWER); + else + signalStrength = state.getSignal(world, pos, direction); + + lines.add(0, new Pair<>( new ItemStack(Items.REDSTONE), - new TextComponent(String.valueOf(state.getValue(RepeaterBlock.POWERED) ? 15 : 0)) + new TextComponent(String.valueOf(signalStrength)) .withStyle(ChatFormatting.RED))); - lines.add(new Pair<>( - new ItemStack(Items.CLOCK), - new TextComponent(String.valueOf(state.getValue(RepeaterBlock.DELAY))) - .withStyle(ChatFormatting.YELLOW))); }); ScryingLensOverlayRegistry.addPredicateDisplayer( - (state, pos, observer, world, lensHand) -> state.hasAnalogOutputSignal(), - (lines, state, pos, observer, world, lensHand) -> { + (state, pos, observer, world, direction, lensHand) -> state.hasAnalogOutputSignal(), + (lines, state, pos, observer, world, direction, lensHand) -> { int comparatorValue = ScryingLensOverlayRegistry.getComparatorValue(false); lines.add( new Pair<>( diff --git a/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockEntityStoredPlayerImpetus.java b/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockEntityStoredPlayerImpetus.java index f34a0954..d5a36e92 100644 --- a/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockEntityStoredPlayerImpetus.java +++ b/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockEntityStoredPlayerImpetus.java @@ -6,6 +6,7 @@ import com.mojang.datafixers.util.Pair; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; import net.minecraft.network.chat.Component; @@ -15,6 +16,8 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; import org.jetbrains.annotations.Nullable; import java.util.List; @@ -50,10 +53,12 @@ public class BlockEntityStoredPlayerImpetus extends BlockEntityAbstractImpetus { } @Override + @OnlyIn(Dist.CLIENT) public void applyScryingLensOverlay(List> lines, BlockState state, BlockPos pos, LocalPlayer observer, - ClientLevel world, InteractionHand lensHand) { - super.applyScryingLensOverlay(lines, state, pos, observer, world, lensHand); + ClientLevel world, + Direction hitFace, InteractionHand lensHand) { + super.applyScryingLensOverlay(lines, state, pos, observer, world, hitFace, lensHand); var bound = this.getPlayer(); if (bound != null) {