Skip to content

Commit

Permalink
New ScreenResizeEvent. HudElements now resize to their proper location.
Browse files Browse the repository at this point in the history
  • Loading branch information
tanishisherewithhh committed Aug 27, 2024
1 parent f8f0588 commit d28ee08
Show file tree
Hide file tree
Showing 14 changed files with 110 additions and 67 deletions.
5 changes: 2 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,12 @@
To submit a bug open an issue in this repository. Before doing so please assure yourself that the issues isn't already listed under [Known issues](#known-issues).

## Known issues
- Buggy modules like Tick-Shift, NewChunks, PacketMine.
- Buggy modules like Tick-Shift, PacketMine.
- Incomplete modules like Phase.
- HudElements don't resize to their proper locations sometimes.
- ~~HudElements don't resize to their proper locations sometimes.~~
- Scripting System (WIP).
- Lack of combat and some important utility modules.
- No Baritone Integration
- Compatibility with performance mods like sodium (for now only XRay has an issue)
- No AltManager
- Lack of commands
- Lack of shaders (Neither of the current contributors know much good about GLSL)
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/dev/heliosclient/HeliosClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import dev.heliosclient.addon.AddonManager;
import dev.heliosclient.event.SubscribeEvent;
import dev.heliosclient.event.events.client.FontChangeEvent;
import dev.heliosclient.event.events.heliosclient.FontChangeEvent;
import dev.heliosclient.event.events.player.DisconnectEvent;
import dev.heliosclient.event.listener.Listener;
import dev.heliosclient.hud.HudElementList;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package dev.heliosclient.event.events.client;

import dev.heliosclient.event.Event;

public class ScreenResizeEvent extends Event {
public final int prevWidth, prevHeight, newWidth, newHeight;

public ScreenResizeEvent(int prevWidth, int prevHeight, int newWidth, int newHeight) {
this.prevWidth = prevWidth;
this.prevHeight = prevHeight;
this.newWidth = newWidth;
this.newHeight = newHeight;
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package dev.heliosclient.event.events.client;
package dev.heliosclient.event.events.heliosclient;

import dev.heliosclient.event.Event;

Expand Down
92 changes: 50 additions & 42 deletions src/main/java/dev/heliosclient/hud/HudElement.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import dev.heliosclient.HeliosClient;
import dev.heliosclient.event.SubscribeEvent;
import dev.heliosclient.event.events.TickEvent;
import dev.heliosclient.event.events.client.FontChangeEvent;
import dev.heliosclient.event.events.heliosclient.FontChangeEvent;
import dev.heliosclient.event.listener.Listener;
import dev.heliosclient.managers.ColorManager;
import dev.heliosclient.managers.EventManager;
Expand Down Expand Up @@ -63,6 +63,10 @@ public class HudElement implements ISettingChange, ISaveAndLoad, Listener {
int startX, startY;
private static int snapSize = 120;

//This variable is used to control the number of imaginary lines to use, to
//anchor the hud elements during resize, as stated in the class comment.
private static final int NUMBER_OF_LINES = 100;

// Default settings
// This is a lot of complete customisation.
// Todo: Add radius setting for rounded background
Expand Down Expand Up @@ -159,6 +163,11 @@ public HudElement(HudElementData<?> hudElementInfo) {
* @param mouseY
*/
public void renderEditor(DrawContext drawContext, TextRenderer textRenderer, int mouseX, int mouseY) {
// Get right line to align to

double posYInterval = (double) drawContext.getScaledWindowHeight() / (NUMBER_OF_LINES);
double posXInterval = (double) drawContext.getScaledWindowWidth() / (NUMBER_OF_LINES);

if (dragging) {
int newX = mouseX - startX;
int newY = mouseY - startY;
Expand All @@ -181,67 +190,63 @@ public void renderEditor(DrawContext drawContext, TextRenderer textRenderer, int
y = newY;


//Get right line to align to
assert drawContext != null;
if (drawContext.getScaledWindowHeight() / 3 > y) {
posY = 0;
} else if ((drawContext.getScaledWindowHeight() / 3) * 2 > y) {
posY = 1;
} else {
posY = 2;
for (int i = 0; i < NUMBER_OF_LINES; i++) {
if (x < posXInterval * i) {
posX = i;
break;
}
}

if (drawContext.getScaledWindowWidth() / 3 > x) {
posX = 0;
} else if ((drawContext.getScaledWindowWidth() / 3) * 2 > x) {
posX = 1;
} else {
posX = 2;
for (int i = 0; i < NUMBER_OF_LINES; i++) {
if (y < posYInterval * i) {
posY = i;
break;
}
}

//Calculate and store distances from the lines
// Calculate and store distances from the lines
if (posX == 0) {
distanceX = Math.max(x, 0);
} else if (posX == 1) {
distanceX = drawContext.getScaledWindowWidth() / 2 - x;
} else {
} else if (posX == NUMBER_OF_LINES) {
distanceX = Math.max(drawContext.getScaledWindowWidth() - x, this.width);
} else {
distanceX = (int) Math.min(x - posXInterval * posX, posXInterval - x % posXInterval);
}

if (posY == 0) {
distanceY = Math.max(y, 0);
} else if (posY == 1) {
distanceY = drawContext.getScaledWindowHeight() / 2 - y;
} else {
} else if (posY == NUMBER_OF_LINES) {
distanceY = Math.max(drawContext.getScaledWindowHeight() - y, this.height);
} else {
distanceY = (int) Math.min(y - posYInterval * posY, posYInterval - y % posYInterval);
}
}

//Move to right position according to pos and distance variables
// Move to right position according to pos and distance variables
if (posX == 0) {
x = Math.max(Math.min(distanceX, drawContext.getScaledWindowWidth() - width), 0);
} else if (posX == 1) {
x = Math.max(Math.min(drawContext.getScaledWindowWidth() / 2 - distanceX, drawContext.getScaledWindowWidth() - width), 0);
} else {
} else if (posX == NUMBER_OF_LINES) {
x = Math.max(Math.min(drawContext.getScaledWindowWidth() - distanceX, drawContext.getScaledWindowWidth() - width), 0);
} else {
x = (int) Math.max(Math.min(posXInterval * posX + distanceX, drawContext.getScaledWindowWidth() - width), 0);
}

if (posY == 0) {
y = Math.max(Math.min(distanceY, drawContext.getScaledWindowHeight() - height), 0);
} else if (posY == 1) {
y = Math.max(Math.min(drawContext.getScaledWindowHeight() / 2 - distanceY, drawContext.getScaledWindowHeight() - height), 0);
} else {
} else if (posY == NUMBER_OF_LINES) {
y = Math.max(Math.min(drawContext.getScaledWindowHeight() - distanceY, drawContext.getScaledWindowHeight() - height), 0);
} else {
y = (int) Math.max(Math.min(posYInterval * posY + distanceY, drawContext.getScaledWindowHeight() - height), 0);
}

//Draw outline when selected
if (this.selected && renderOutLineBox) {
if (dragging) {
//Draw X and Y lines when centered
if (distanceX == 0 && posX == 1) {
if (x + width / 2f == drawContext.getScaledWindowWidth()) {
Renderer2D.drawRectangle(drawContext.getMatrices().peek().getPositionMatrix(), (float) drawContext.getScaledWindowWidth() / 2 - 1, 0, 2, drawContext.getScaledWindowHeight(), 0xFFFF0000);
}
if (distanceY == 0 && posY == 1) {
if (y + height / 2f == drawContext.getScaledWindowHeight()) {
Renderer2D.drawRectangle(drawContext.getMatrices().peek().getPositionMatrix(), 0, (float) drawContext.getScaledWindowHeight() / 2 - 1, drawContext.getScaledWindowWidth(), 2, 0xFF00FF00);
}
}
Expand Down Expand Up @@ -269,21 +274,24 @@ public void render(DrawContext drawContext, TextRenderer textRenderer) {
//Skip if in F3 menu or hud is hidden
if (HeliosClient.MC.options.hudHidden || HeliosClient.MC.getDebugHud().shouldShowDebugHud()) return;

//Move to proper position
if (posY == 0) {
y = Math.max(Math.min(distanceY, drawContext.getScaledWindowHeight() - height), 0);
} else if (posY == 1) {
y = Math.max(Math.min(drawContext.getScaledWindowHeight() / 2 - distanceY, drawContext.getScaledWindowHeight() - height), 0);
} else {
y = Math.max(Math.min(drawContext.getScaledWindowHeight() - distanceY, drawContext.getScaledWindowHeight() - height), 0);
}
double posYInterval = (double) drawContext.getScaledWindowHeight() / (NUMBER_OF_LINES);
double posXInterval = (double) drawContext.getScaledWindowWidth() / (NUMBER_OF_LINES);

// Move to right position according to pos and distance variables
if (posX == 0) {
x = Math.max(Math.min(distanceX, drawContext.getScaledWindowWidth() - width), 0);
} else if (posX == 1) {
x = Math.max(Math.min(drawContext.getScaledWindowWidth() / 2 - distanceX, drawContext.getScaledWindowWidth() - width), 0);
} else {
} else if (posX == NUMBER_OF_LINES) {
x = Math.max(Math.min(drawContext.getScaledWindowWidth() - distanceX, drawContext.getScaledWindowWidth() - width), 0);
} else {
x = (int) Math.max(Math.min(posXInterval * posX + distanceX, drawContext.getScaledWindowWidth() - width), 0);
}

if (posY == 0) {
y = Math.max(Math.min(distanceY, drawContext.getScaledWindowHeight() - height), 0);
} else if (posY == NUMBER_OF_LINES) {
y = Math.max(Math.min(drawContext.getScaledWindowHeight() - distanceY, drawContext.getScaledWindowHeight() - height), 0);
} else {
y = (int) Math.max(Math.min(posYInterval * posY + distanceY, drawContext.getScaledWindowHeight() - height), 0);
}

//Render element
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/dev/heliosclient/hud/hudelements/Tps.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public void renderElement(DrawContext drawContext, TextRenderer textRenderer) {
super.renderElement(drawContext, textRenderer);
String text = "TPS: " + ColorUtils.gray + MathUtils.round(TickRate.INSTANCE.getTPS(), 1);
this.width = Math.round(Renderer2D.getStringWidth(text)) + 1;
Renderer2D.drawString(drawContext.getMatrices(), text, this.x + 1, this.y, ColorManager.INSTANCE.hudColor);
Renderer2D.drawString(drawContext.getMatrices(), text, this.x, this.y, ColorManager.INSTANCE.hudColor);
}

}
2 changes: 1 addition & 1 deletion src/main/java/dev/heliosclient/managers/FontManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import dev.heliosclient.HeliosClient;
import dev.heliosclient.event.SubscribeEvent;
import dev.heliosclient.event.events.TickEvent;
import dev.heliosclient.event.events.client.FontChangeEvent;
import dev.heliosclient.event.events.heliosclient.FontChangeEvent;
import dev.heliosclient.event.listener.Listener;
import dev.heliosclient.util.fontutils.FontLoader;
import dev.heliosclient.util.fontutils.FontRenderers;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,14 @@
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.option.GameOptions;
import net.minecraft.client.resource.language.LanguageManager;
import net.minecraft.client.util.Window;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Hand;
import net.minecraft.util.SystemDetails;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
Expand All @@ -38,6 +40,10 @@ public abstract class MinecraftClientMixin {
@Shadow
private int itemUseCooldown;

@Shadow @Final private Window window;

@Shadow public abstract Window getWindow();

@Inject(method = "tick", at = @At(value = "HEAD"), cancellable = true)
public void onTick(CallbackInfo ci) {
TickEvent clientTick = new TickEvent.CLIENT();
Expand Down
24 changes: 24 additions & 0 deletions src/main/java/dev/heliosclient/mixin/MixinScreen.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package dev.heliosclient.mixin;

import dev.heliosclient.event.events.client.ScreenResizeEvent;
import dev.heliosclient.managers.EventManager;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(Screen.class)
public abstract class MixinScreen{

@Shadow public int width;

@Shadow public int height;

@Inject(method = "resize", at = @At(value = "HEAD"))
private void onResize(MinecraftClient client, int width, int height, CallbackInfo ci) {
EventManager.postEvent(new ScreenResizeEvent(this.width, this.height,width,height));
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package dev.heliosclient.module.sysmodules;

import dev.heliosclient.HeliosClient;
import dev.heliosclient.event.events.client.FontChangeEvent;
import dev.heliosclient.event.events.heliosclient.FontChangeEvent;
import dev.heliosclient.managers.ColorManager;
import dev.heliosclient.managers.EventManager;
import dev.heliosclient.managers.FontManager;
Expand All @@ -19,7 +19,6 @@
import dev.heliosclient.util.fontutils.FontUtils;
import dev.heliosclient.util.render.Renderer2D;
import me.x150.renderer.font.FontRenderer;
import org.apache.commons.lang3.ArrayUtils;
import org.lwjgl.glfw.GLFW;

import java.awt.*;
Expand Down
12 changes: 1 addition & 11 deletions src/main/java/dev/heliosclient/ui/clickgui/CategoryPane.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
package dev.heliosclient.ui.clickgui;

import com.mojang.blaze3d.systems.RenderSystem;
import dev.heliosclient.HeliosClient;
import dev.heliosclient.event.SubscribeEvent;
import dev.heliosclient.event.events.client.FontChangeEvent;
import dev.heliosclient.event.events.heliosclient.FontChangeEvent;
import dev.heliosclient.event.events.input.MouseClickEvent;
import dev.heliosclient.event.listener.Listener;
import dev.heliosclient.managers.ColorManager;
import dev.heliosclient.managers.EventManager;
import dev.heliosclient.managers.ModuleManager;
import dev.heliosclient.module.Categories;
import dev.heliosclient.module.Category;
import dev.heliosclient.module.Module_;
import dev.heliosclient.module.modules.render.GUI;
Expand All @@ -19,20 +17,12 @@
import dev.heliosclient.util.ColorUtils;
import dev.heliosclient.util.fontutils.FontRenderers;
import dev.heliosclient.util.render.Renderer2D;
import me.x150.renderer.util.BufferUtils;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.render.*;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.math.MathHelper;
import org.joml.Matrix4f;
import org.lwjgl.opengl.GL;
import org.lwjgl.opengl.GL11;

import java.awt.*;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
import dev.heliosclient.util.animation.EasingType;
import dev.heliosclient.util.fontutils.FontRenderers;
import dev.heliosclient.util.render.Renderer2D;
import net.minecraft.client.Mouse;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.text.Text;
Expand Down Expand Up @@ -256,6 +255,7 @@ public void keyPressed(KeyPressedEvent keyPressedEvent) {
for (int i = 0; i < HudManager.INSTANCE.hudElements.size(); i++) {
if (HudManager.INSTANCE.hudElements.get(i).selected) {
HudElement hudElement = HudManager.INSTANCE.hudElements.get(i);
EventManager.unregister(hudElement);
HudManager.INSTANCE.removeHudElement(hudElement);
HudCategoryPane.INSTANCE.getHudElementButton(hudElement).updateCount();
i--;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,12 @@ public <T extends HudElement> void addInstanceToList(Class<? extends T> clazz) {
try {
T instance = clazz.getDeclaredConstructor().newInstance();
HudManager.INSTANCE.addHudElement(instance);
HudManager.INSTANCE.hudElements.get(HudManager.INSTANCE.hudElements.size() - 1).posX = 1;
HudManager.INSTANCE.hudElements.get(HudManager.INSTANCE.hudElements.size() - 1).posY = 1;
HudManager.INSTANCE.hudElements.get(HudManager.INSTANCE.hudElements.size() - 1).distanceX = 0;
HudManager.INSTANCE.hudElements.get(HudManager.INSTANCE.hudElements.size() - 1).distanceY = 0;
HudElement lastHudElement = HudManager.INSTANCE.hudElements.get(HudManager.INSTANCE.hudElements.size() - 1);

lastHudElement.posX = 1;
lastHudElement.posY = 1;
lastHudElement.distanceX = 0;
lastHudElement.distanceY = 0;
} catch (Exception e) {
HeliosClient.LOGGER.error("Error adding hud element instance to list", e);
}
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/heliosclient.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@
"MixinKeyboardInput",
"MixinParticleManager",
"MixinRenderTickCounter",
"MixinScreen",
"MixinSplashScreen",
"MouseMixin",
"MultiplayerScreenMixin",
Expand Down

0 comments on commit d28ee08

Please sign in to comment.