67 lines
3.1 KiB
Java
67 lines
3.1 KiB
Java
package com.atsuishio.superbwarfare.client.overlay;
|
|
|
|
import com.atsuishio.superbwarfare.Mod;
|
|
import com.atsuishio.superbwarfare.tools.FormatTool;
|
|
import com.atsuishio.superbwarfare.tools.TraceTool;
|
|
import net.minecraft.client.DeltaTracker;
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.gui.GuiGraphics;
|
|
import net.minecraft.client.gui.LayeredDraw;
|
|
import net.minecraft.network.chat.Component;
|
|
import net.minecraft.resources.ResourceLocation;
|
|
import net.minecraft.world.entity.Entity;
|
|
import net.minecraft.world.entity.player.Player;
|
|
import net.minecraft.world.item.Items;
|
|
import net.minecraft.world.level.ClipContext;
|
|
import net.minecraft.world.phys.BlockHitResult;
|
|
import net.minecraft.world.phys.Vec3;
|
|
import net.neoforged.api.distmarker.Dist;
|
|
import net.neoforged.api.distmarker.OnlyIn;
|
|
|
|
import javax.annotation.ParametersAreNonnullByDefault;
|
|
|
|
@OnlyIn(Dist.CLIENT)
|
|
public class SpyglassRangeOverlay implements LayeredDraw.Layer {
|
|
|
|
public static final ResourceLocation ID = Mod.loc("spyglass_range");
|
|
|
|
@Override
|
|
@ParametersAreNonnullByDefault
|
|
public void render(GuiGraphics guiGraphics, DeltaTracker deltaTracker) {
|
|
int w = guiGraphics.guiWidth();
|
|
int h = guiGraphics.guiHeight();
|
|
Player player = Minecraft.getInstance().player;
|
|
if (player != null && (player.getMainHandItem().getItem() == Items.SPYGLASS || player.getOffhandItem().getItem() == Items.SPYGLASS) && player.isUsingItem()) {
|
|
boolean lookAtEntity = false;
|
|
|
|
BlockHitResult result = player.level().clip(new ClipContext(player.getEyePosition(), player.getEyePosition().add(player.getViewVector(1).scale(512)),
|
|
ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player));
|
|
Vec3 hitPos = result.getLocation();
|
|
|
|
double blockRange = player.getEyePosition(1).distanceTo(hitPos);
|
|
|
|
double entityRange = 0;
|
|
Entity lookingEntity = TraceTool.findLookingEntity(player, 520);
|
|
|
|
if (lookingEntity != null) {
|
|
lookAtEntity = true;
|
|
entityRange = player.distanceTo(lookingEntity);
|
|
}
|
|
|
|
if (lookAtEntity) {
|
|
guiGraphics.drawString(Minecraft.getInstance().font, Component.translatable("tips.superbwarfare.drone.range")
|
|
.append(Component.literal(FormatTool.format1D(entityRange, "M ") + lookingEntity.getDisplayName().getString())),
|
|
w / 2 + 12, h / 2 - 28, -1, false);
|
|
} else {
|
|
if (blockRange > 500) {
|
|
guiGraphics.drawString(Minecraft.getInstance().font, Component.translatable("tips.superbwarfare.drone.range")
|
|
.append(Component.literal("---M")), w / 2 + 12, h / 2 - 28, -1, false);
|
|
} else {
|
|
guiGraphics.drawString(Minecraft.getInstance().font, Component.translatable("tips.superbwarfare.drone.range")
|
|
.append(Component.literal(FormatTool.format1D(blockRange, "M"))),
|
|
w / 2 + 12, h / 2 - 28, -1, false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|