diff --git a/src/main/java/dan200/computercraft/client/render/DebugOverlay.java b/src/main/java/dan200/computercraft/client/render/DebugOverlay.java new file mode 100644 index 000000000..9545ab7c5 --- /dev/null +++ b/src/main/java/dan200/computercraft/client/render/DebugOverlay.java @@ -0,0 +1,61 @@ +/* + * This file is part of ComputerCraft - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2021. Do not distribute without permission. + * Send enquiries to dratcliffe@gmail.com + */ +package dan200.computercraft.client.render; + +import dan200.computercraft.ComputerCraft; +import dan200.computercraft.api.turtle.ITurtleUpgrade; +import dan200.computercraft.api.turtle.TurtleSide; +import dan200.computercraft.shared.peripheral.monitor.TileMonitor; +import dan200.computercraft.shared.turtle.blocks.TileTurtle; +import net.minecraft.client.Minecraft; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.RayTraceResult; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.RenderGameOverlayEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +import java.util.List; + +@Mod.EventBusSubscriber( modid = ComputerCraft.MOD_ID, value = Dist.CLIENT ) +public class DebugOverlay +{ + @SubscribeEvent + public static void onRenderText( RenderGameOverlayEvent.Text event ) + { + Minecraft minecraft = Minecraft.getInstance(); + if( !minecraft.options.renderDebug || minecraft.level == null ) return; + if( minecraft.hitResult == null || minecraft.hitResult.getType() != RayTraceResult.Type.BLOCK ) return; + + TileEntity tile = minecraft.level.getBlockEntity( ((BlockRayTraceResult) minecraft.hitResult).getBlockPos() ); + + if( tile instanceof TileMonitor ) + { + TileMonitor monitor = (TileMonitor) tile; + event.getRight().add( "" ); + event.getRight().add( + String.format( "Targeted monitor: (%d, %d), %d x %d", monitor.getXIndex(), monitor.getYIndex(), monitor.getWidth(), monitor.getHeight() ) + ); + } + else if( tile instanceof TileTurtle ) + { + TileTurtle turtle = (TileTurtle) tile; + + event.getRight().add( "" ); + event.getRight().add( "Targeted turtle:" ); + event.getRight().add( String.format( "Id: %d", turtle.getComputerID() ) ); + addTurtleUpgrade( event.getRight(), turtle, TurtleSide.LEFT ); + addTurtleUpgrade( event.getRight(), turtle, TurtleSide.RIGHT ); + } + } + + private static void addTurtleUpgrade( List out, TileTurtle turtle, TurtleSide side ) + { + ITurtleUpgrade upgrade = turtle.getUpgrade( side ); + if( upgrade != null ) out.add( String.format( "Upgrade[%s]: %s", side, upgrade.getUpgradeID() ) ); + } +}