diff --git a/src/main/java/org/violetmoon/quark/content/tweaks/module/ReacharoundPlacingModule.java b/src/main/java/org/violetmoon/quark/content/tweaks/module/ReacharoundPlacingModule.java index 1bfe44e630..495492c3a6 100644 --- a/src/main/java/org/violetmoon/quark/content/tweaks/module/ReacharoundPlacingModule.java +++ b/src/main/java/org/violetmoon/quark/content/tweaks/module/ReacharoundPlacingModule.java @@ -1,7 +1,24 @@ package org.violetmoon.quark.content.tweaks.module; +import java.util.List; + +import org.apache.commons.lang3.tuple.Pair; +import org.violetmoon.quark.base.Quark; +import org.violetmoon.quark.base.config.Config; +import org.violetmoon.zeta.client.event.play.ZClientTick; +import org.violetmoon.zeta.client.event.play.ZRenderGuiOverlay; +import org.violetmoon.zeta.event.bus.LoadEvent; +import org.violetmoon.zeta.event.bus.PlayEvent; +import org.violetmoon.zeta.event.bus.ZPhase; +import org.violetmoon.zeta.event.load.ZCommonSetup; +import org.violetmoon.zeta.event.play.entity.player.ZRightClickItem; +import org.violetmoon.zeta.module.ZetaLoadModule; +import org.violetmoon.zeta.module.ZetaModule; + import com.google.common.collect.Lists; +import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.platform.Window; +import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; @@ -31,26 +48,12 @@ import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; -import org.apache.commons.lang3.tuple.Pair; - -import org.violetmoon.quark.base.Quark; -import org.violetmoon.quark.base.config.Config; -import org.violetmoon.quark.base.config.type.inputtable.RGBColorConfig; -import org.violetmoon.zeta.client.event.play.ZClientTick; -import org.violetmoon.zeta.client.event.play.ZRenderGuiOverlay; -import org.violetmoon.zeta.event.bus.LoadEvent; -import org.violetmoon.zeta.event.bus.PlayEvent; -import org.violetmoon.zeta.event.bus.ZPhase; -import org.violetmoon.zeta.event.load.ZCommonSetup; -import org.violetmoon.zeta.event.play.entity.player.ZRightClickItem; -import org.violetmoon.zeta.module.ZetaLoadModule; -import org.violetmoon.zeta.module.ZetaModule; - -import java.util.List; - @ZetaLoadModule(category = "tweaks") public class ReacharoundPlacingModule extends ZetaModule { + public static final ResourceLocation OVERLAY_HORIZONTAL = new ResourceLocation(Quark.MOD_ID, "textures/gui/reacharound_overlay_horizontal.png"); + public static final ResourceLocation OVERLAY_VERTICAL = new ResourceLocation(Quark.MOD_ID, "textures/gui/reacharound_overlay_vertical.png"); + @Config @Config.Min(0) @Config.Max(1) @@ -60,12 +63,7 @@ public class ReacharoundPlacingModule extends ZetaModule { public List whitelist = Lists.newArrayList(); @Config public List blacklist = Lists.newArrayList(); - @Config - public String display = "[ ]"; - @Config - public String displayHorizontal = "< >"; - @Config - public RGBColorConfig color = RGBColorConfig.forColor(1, 1, 1); + protected ReacharoundTarget currentTarget; protected int ticksDisplayed; @@ -199,7 +197,7 @@ protected record ReacharoundTarget(BlockPos pos, Direction dir, InteractionHand public static class Client extends ReacharoundPlacingModule { @PlayEvent - public void onRender(ZRenderGuiOverlay.Crosshair event) { + public void onRender(ZRenderGuiOverlay.Crosshair.Post event) { GuiGraphics guiGraphics = event.getGuiGraphics(); Minecraft mc = Minecraft.getInstance(); @@ -207,23 +205,34 @@ public void onRender(ZRenderGuiOverlay.Crosshair event) { if(mc.options.hideGui) return; + + HitResult result = mc.hitResult; + if(result instanceof BlockHitResult bhr) { + BlockPos hitPos = bhr.getBlockPos(); + BlockState stateAt = player.level().getBlockState(hitPos); + if(!stateAt.isAir()) + return; + } + if(player != null && currentTarget != null) { Window res = event.getWindow(); PoseStack matrix = event.getGuiGraphics().pose(); - String text = (currentTarget.dir.getAxis() == Axis.Y ? display : displayHorizontal); - matrix.pushPose(); - matrix.translate(res.getGuiScaledWidth() / 2F, res.getGuiScaledHeight() / 2f - 4, 0); + boolean vertical = (currentTarget.dir.getAxis() == Axis.Y); + ResourceLocation texture = (vertical ? OVERLAY_VERTICAL : OVERLAY_HORIZONTAL); + + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.ONE_MINUS_DST_COLOR, GlStateManager.DestFactor.ONE_MINUS_SRC_COLOR, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); - float scale = Math.min(5, ticksDisplayed + event.getPartialTick()) / 5F; - scale *= scale; - int opacity = ((int) (255 * scale)) << 24; + matrix.pushPose(); + int x = res.getGuiScaledWidth() / 2 - 7; + int y = res.getGuiScaledHeight() / 2 - 7; + guiGraphics.blit(texture, x, y, 0, 0, 16, 16, 16, 16); - matrix.scale(scale, 1F, 1F); - matrix.translate(-mc.font.width(text) / 2f, 0, 0); - guiGraphics.drawString(mc.font, text, 0, 0, color.getColor() | opacity, false); matrix.popPose(); + + RenderSystem.defaultBlendFunc(); + } } diff --git a/src/main/resources/assets/quark/textures/gui/reacharound_overlay_horizontal.png b/src/main/resources/assets/quark/textures/gui/reacharound_overlay_horizontal.png new file mode 100644 index 0000000000..b8ef55b111 Binary files /dev/null and b/src/main/resources/assets/quark/textures/gui/reacharound_overlay_horizontal.png differ diff --git a/src/main/resources/assets/quark/textures/gui/reacharound_overlay_vertical.png b/src/main/resources/assets/quark/textures/gui/reacharound_overlay_vertical.png new file mode 100644 index 0000000000..b072aeee4d Binary files /dev/null and b/src/main/resources/assets/quark/textures/gui/reacharound_overlay_vertical.png differ