I am doing a Minecraft client like lunar, but when I click the HUD to modify the place of the "mod" or when I click randomly the game decides to crash. Here is my code for the HUDConfigScreen
package TrayardClient.gui.hud;
import java.io.IOException;
import java.util.*;
import javax.swing.Renderer;
import javax.tools.JavaCompiler;
import org.lwjgl.input.Keyboard;
import com.google.common.base.Predicate;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.ScaledResolution;
public class HUDConfigScreen extends GuiScreen {
private final HashMap<IRenderer, ScreenPosition> renderers = new HashMap<IRenderer, ScreenPosition>();
private Optional<IRenderer> selectedRenderer = Optional.empty();
private int prevX, prevY;
public HUDConfigScreen(HUDManager api) {
Collection<IRenderer> registeredRenderers = api.getRegisteredRenderer();
for (IRenderer ren : registeredRenderers) {
if (!ren.isEnabled()) {
continue;
}
ScreenPosition pos = ren.load();
if (pos == null) {
pos = ScreenPosition.fromRelativePosition(0.5, 0.5);
}
adjustBounds(ren, pos);
this.renderers.put(ren, pos);
}
}
@Override
public void drawScreen(int mouseX, int mouseY, float partialTicks) {
super.drawDefaultBackground();
final float zBackup = this.zLevel;
this.zLevel = 200;
this.drawHollowRect(0, 0, this.width, this.height - 1, 0xFFFF0000);
for(IRenderer renderer : renderers.keySet()) {
ScreenPosition pos = renderers.get(renderer);
renderer.render(pos);
this.drawHollowRect(pos.getAbsoluteX(), pos.getAbsoluteY(), renderer.getWidth(), renderer.getHeight(), 0xFF00FFFF);
}
this.zLevel = zBackup;
}
private void drawHollowRect(int x, int y, int w, int h, int color) {
this.drawHorizontalLine(x, x + w, y, color);
this.drawHorizontalLine(x, x + w, y + h, color);
this.drawVerticalLine(x, y + h, y, color);
this.drawVerticalLine(x + w, y + h, y, color);
}
@Override
protected void keyTyped(char typedChar, int keyCode) throws IOException {
if (keyCode == Keyboard.KEY_ESCAPE) {
renderers.entrySet().forEach((entry) -> {
entry.getKey().save(entry.getValue());
});
this.mc.displayGuiScreen(null);
}
}
@Override
protected void mouseClickMove(int x, int y, int button, long time) throws IOException {
if (selectedRenderer.isPresent()) {
moveSelectedRenderBy(x - prevX, y - prevY);
}
this.prevX = x;
this.prevY = y;
}
private void moveSelectedRenderBy(int offsetX, int offsetY) {
// TODO Auto-generated method stub
IRenderer renderer = selectedRenderer.get();
ScreenPosition pos = renderers.get(renderer);
pos.setAbsolute(pos.getAbsoluteX() + offsetX, pos.getAbsoluteY() + offsetY);
adjustBounds(renderer, pos);
}
@Override
public void onGuiClosed() {
for (IRenderer renderer : renderers.keySet()) {
renderer.save(renderers.get(renderer));
}
}
@Override
public boolean doesGuiPauseGame() {
return true;
}
private void adjustBounds(IRenderer renderer, ScreenPosition pos) {
ScaledResolution res = new ScaledResolution(Minecraft.getMinecraft());
int screenWidth = res.getScaledWidth();
int screenHeight = res.getScaledHeight();
int absoluteX = Math.max(0, Math.min(pos.getAbsoluteX(), Math.max(screenWidth - renderer.getWidth(), 0)));
int absoluteY = Math.max(0, Math.min(pos.getAbsoluteY(), Math.max(screenHeight - renderer.getHeight(), 0)));
}
@Override
protected void mouseClicked(int x, int y, int button) throws IOException {
this.prevX = x;
this.prevY = y;
loadMouseOver(x, y);
}
private void loadMouseOver(int x, int y) {
this.selectedRenderer = renderers.keySet()
.stream()
.filter(new MouseOverFinder(x, y))
.findFirst();
}
private class MouseOverFinder implements java.util.function.Predicate<IRenderer>{
private int mx, my;
public MouseOverFinder(int x, int y) {
this.mx = x;
this.my = y;
}
public boolean test(IRenderer renderer) {
ScreenPosition pos = renderers.get(renderer);
int abssoluteX = pos.getAbsoluteX();
int absoluteY = pos.getAbsoluteY();
if (mx >= abssoluteX && my <= absoluteY + renderer.getHeight()) {
return true;
}
return false;
}
public boolean apply(IRenderer arg0) {
// TODO Auto-generated method stub
return false;
}
}
}


I don't know what to do because I like to code (mostly in C# or python). I am a little bit new to Java. I can't post all the code here, but if you need the code of a certain class, please let me know.