Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 15 additions & 9 deletions src/client/java/dev/quickinfos/QuickInfosClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import dev.quickinfos.infos.*;
import dev.quickinfos.trackers.DeathCoordinatesTracker;
import dev.quickinfos.trackers.Tracker;
import dev.quickinfos.utils.ExitUtils;
import dev.quickinfos.utils.ScreenUtils;
import dev.quickinfos.utils.StaticUtils;
import net.fabricmc.api.ClientModInitializer;
Expand Down Expand Up @@ -42,7 +43,7 @@ private void onInitializeLoadStatic() {
}
}

for (Info info : new Info[] {new Coordinates(), new DeathCoordinates(), new TargetedBlock(), new TargetedBlockCoordinates(), new CurrentBiome(), new FacingDirection()}) {
for (Info info : new Info[] {new Coordinates(), new DeathCoordinates(), new TargetedBlock(), new TargetedBlockCoordinates(), new TargetedEntity(), new TargetedEntityCoordinates(), new CurrentBiome(), new FacingDirection(), new FPS(), new Ping()}) {
try {
Singleton.INFOS_INSTANCES.put(info.getClass().getName(), info);
} catch (Throwable e) {
Expand All @@ -52,14 +53,19 @@ private void onInitializeLoadStatic() {
}

private void onInitializeLoadConfig() {
Singleton.config = ConfigManager.loadConfig();
if(Singleton.config.isValid()){
Singleton.useUserConfig();
try{
Singleton.config = ConfigManager.loadConfig();
if(Singleton.config.isValid()){
Singleton.useUserConfig();
return;
}
}
else {
Singleton.useDefaultConfig();
Singleton.useDefaultOrderedInfos();
catch (Throwable e) {
System.out.println("Failed to load config: " + e.getMessage());
}

Singleton.useDefaultConfig();
Singleton.useDefaultOrderedInfos();
}

private void onInitializeRegisterEvents() {
Expand Down Expand Up @@ -110,10 +116,10 @@ private void onInitializeRegisterEvents() {
commandContext -> {
try{
ScreenUtils.openScreen(commandContext.getSource().getClient());
return 0;
return ExitUtils.PROPER_EXIT;
}catch (Throwable e){
commandContext.getSource().sendError(Text.of(e.toString()));
return 1;
return ExitUtils.ERROR_IN_OPENED_SCREEN_EXIT;
}
}
))
Expand Down
21 changes: 9 additions & 12 deletions src/client/java/dev/quickinfos/Singleton.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@

import dev.quickinfos.config.Config;
import dev.quickinfos.enums.Positions;
import dev.quickinfos.infos.Coordinates;
import dev.quickinfos.infos.CurrentBiome;
import dev.quickinfos.infos.FacingDirection;
import dev.quickinfos.infos.Info;
import dev.quickinfos.trackers.Tracker;
import dev.quickinfos.utils.DefaultConfigUtils;
Expand All @@ -31,15 +28,15 @@ public class Singleton {
private Singleton() {}

public static void useDefaultConfig(){
INFOS_INSTANCES.get(Coordinates.class.getName()).setOn(true);
INFOS_INSTANCES.get(CurrentBiome.class.getName()).setOn(true);
INFOS_INSTANCES.get(FacingDirection.class.getName()).setOn(true);

POSITION = Positions.TOP_RIGHT;
SHOW = true;
for (String info : DefaultConfigUtils.DEFAULT_INFOS) {
INFOS_INSTANCES.get(info).setOn(true);
}

TOGGLE_INFO_KEY = KeyUtils.registerToggleInfo(DefaultConfigUtils.TOGGLE_INFO_KEYCODE);
SHOW_MENU_KEY = KeyUtils.registerShowMenu(DefaultConfigUtils.SHOW_MENU_KEYCODE);

POSITION = DefaultConfigUtils.POSITION;
SHOW = DefaultConfigUtils.SHOW;
}

public static void useDefaultOrderedInfos() {
Expand All @@ -63,10 +60,10 @@ public static void useUserConfig(){
}
}

POSITION = config.getPosition();
SHOW = config.getShow();

TOGGLE_INFO_KEY = KeyUtils.registerToggleInfo(config.getToggleKeyCode());
SHOW_MENU_KEY = KeyUtils.registerShowMenu(config.getShowMenuKeyCode());

POSITION = config.getPosition();
SHOW = config.getShow();
}
}
18 changes: 18 additions & 0 deletions src/client/java/dev/quickinfos/infos/FPS.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package dev.quickinfos.infos;

import net.minecraft.client.MinecraftClient;
import org.jetbrains.annotations.NotNull;

public class FPS extends Info {

@Override
public String getHumanReadableName() {
return "FPS";
}

@Override
public String render(@NotNull MinecraftClient client) {
return String.format("%d FPS", client.getCurrentFps());
}

}
35 changes: 35 additions & 0 deletions src/client/java/dev/quickinfos/infos/Ping.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package dev.quickinfos.infos;

import dev.quickinfos.exceptions.CannotRenderInfoException;
import dev.quickinfos.utils.StaticUtils;
import net.minecraft.client.MinecraftClient;
import org.jetbrains.annotations.NotNull;

import java.util.Objects;
import java.util.UUID;

public class Ping extends Info {

@Override
public String getHumanReadableName() {
return "Ping";
}

@Override
public String render(@NotNull MinecraftClient client) {
if (client.getNetworkHandler() == null)
return StaticUtils.NONE_INFO_CALCULATED;

if (client.player == null)
throw new CannotRenderInfoException(this);

try {
UUID uuid = client.player.getUuid();
return String.format("%dms", Objects.requireNonNull(client.getNetworkHandler().getPlayerListEntry(uuid)).getLatency());
}
catch (Throwable e) {
throw new CannotRenderInfoException(this);
}
}

}
27 changes: 27 additions & 0 deletions src/client/java/dev/quickinfos/infos/TargetedEntity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package dev.quickinfos.infos;

import dev.quickinfos.exceptions.CannotRenderInfoException;
import dev.quickinfos.utils.PlayerUtils;
import dev.quickinfos.utils.StaticUtils;
import net.minecraft.client.MinecraftClient;
import net.minecraft.util.hit.EntityHitResult;
import org.jetbrains.annotations.NotNull;

public class TargetedEntity extends Info {

@Override
public String getHumanReadableName() {
return "Targeted Entity";
}

@Override
public String render(@NotNull MinecraftClient client) {
if (client.player == null || client.world == null)
throw new CannotRenderInfoException(this);

EntityHitResult targetedEntity = PlayerUtils.getTargetedEntityInRange(client.player);
return targetedEntity != null ? String.format("Target %s", targetedEntity.getEntity().getName()) :
StaticUtils.NONE_INFO_CALCULATED;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package dev.quickinfos.infos;

import dev.quickinfos.exceptions.CannotRenderInfoException;
import dev.quickinfos.utils.PlayerUtils;
import dev.quickinfos.utils.StaticUtils;
import net.minecraft.client.MinecraftClient;
import net.minecraft.util.hit.EntityHitResult;
import net.minecraft.util.math.Vec3d;
import org.jetbrains.annotations.NotNull;

public class TargetedEntityCoordinates extends Info {

@Override
public String getHumanReadableName() {
return "Targeted Entity's Coordinates";
}

@Override
public String render(@NotNull MinecraftClient client) {
if (client.player == null)
throw new CannotRenderInfoException(this);

EntityHitResult targetedEntity = PlayerUtils.getTargetedEntityInRange(client.player);

if(targetedEntity == null)
return StaticUtils.NONE_INFO_CALCULATED;

Vec3d pos = targetedEntity.getPos();
return String.format("Target at %f / %f / %f", pos.getX(), pos.getY(), pos.getZ());
}

}
35 changes: 35 additions & 0 deletions src/client/java/dev/quickinfos/screen/Dimension.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package dev.quickinfos.screen;

public class Dimension {
private final int x;
private final int y;
private final int width;
private final int height;

public Dimension(int x, int y) {
this(x, y, 0, 0);
}

public Dimension(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}

public int getHeight() {
return height;
}

public int getWidth() {
return width;
}

public int getY() {
return y;
}

public int getX() {
return x;
}
}
70 changes: 30 additions & 40 deletions src/client/java/dev/quickinfos/screen/QuickInfosScreen.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,31 +4,39 @@
import dev.quickinfos.config.ConfigManager;
import dev.quickinfos.enums.Positions;
import dev.quickinfos.infos.Info;
import dev.quickinfos.utils.ScreenUtils;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.text.Text;

import java.util.ArrayList;

public class QuickInfosScreen extends Screen {
public ArrayList<UpDownWidget> upDownWidgets = new ArrayList<>();

public static final Dimension TITLE_DIMENSION = new Dimension(40, 10);
public static final Dimension SUBTITLE_DIMENSION = new Dimension(40, TITLE_DIMENSION.getY() + 10);
public static final Dimension SHOW_BUTTON_DIMENSION = new Dimension(SUBTITLE_DIMENSION.getX(), SUBTITLE_DIMENSION.getY() + 15, 160, 20);
public static final Dimension POSITION_BUTTON_DIMENSION = new Dimension(SHOW_BUTTON_DIMENSION.getX() + SHOW_BUTTON_DIMENSION.getWidth() + 10, SHOW_BUTTON_DIMENSION.getY(), SHOW_BUTTON_DIMENSION.getWidth() - 10, SHOW_BUTTON_DIMENSION.getHeight());
public static final Dimension INFO_LIST_DIMENSION = new Dimension(SHOW_BUTTON_DIMENSION.getX(), POSITION_BUTTON_DIMENSION.getY() + 25, 320, SHOW_BUTTON_DIMENSION.getHeight());
public static final int INFO_LIST_MARGIN = 20;

public QuickInfosScreen(Text title) {
super(title);
}

@Override
public void init() {
createShowButton();
createPositionButton();
refreshUpDownList();
}

@Override
public void render(DrawContext context, int mouseX, int mouseY, float delta) {
super.render(context, mouseX, mouseY, delta);
context.drawText(this.textRenderer, "Quick infos menu", 40, 40 - this.textRenderer.fontHeight - 10, 0xFFFFFFFF, true);
context.drawText(this.textRenderer, "Checkout Minecraft default controls menu for keybindings", 40, 60 - this.textRenderer.fontHeight - 10, 0xFFFFFFFF, true);
context.drawText(this.textRenderer, "Quick infos menu (This screen will changed in the next mod version)", TITLE_DIMENSION.getX(), TITLE_DIMENSION.getY(), 0xFFFFFFFF, true);
context.drawText(this.textRenderer, "Checkout Minecraft default controls menu for keybindings", SUBTITLE_DIMENSION.getX(), SUBTITLE_DIMENSION.getY(), 0xFFFFFFFF, true);
}

@Override
Expand All @@ -40,14 +48,6 @@ public void close() {
}
}

public String buildMessage(Info info){
return String.format("%s : %s", info.getHumanReadableName(), info.isOn() ? "ON" : "OFF");
}

public String buildMessage(Positions position){
return String.format("Info position : %s", position.toString().replace("_", " "));
}

public void onActivate(UpDownWidget upDownWidget) {
Info info = upDownWidget.getInfo();
info.setOn(!info.isOn());
Expand All @@ -73,39 +73,29 @@ private void move(UpDownWidget upDownWidget, boolean up) {
}

private void refreshUpDownList(){
if(!upDownWidgets.isEmpty()) {
for(UpDownWidget widget : upDownWidgets){
this.remove(widget.getUp());
this.remove(widget.getCenter());
this.remove(widget.getDown());
}
upDownWidgets.clear();
}
int y = 100;
int y = QuickInfosScreen.INFO_LIST_DIMENSION.getY();
upDownWidgets.forEach(widget -> widget.getWidgets().forEach(this::remove));
upDownWidgets.clear();
for(Info orderedInfo : Singleton.ORDERED_INFOS){
upDownWidgets.add(new UpDownWidget(orderedInfo, 40, y, 320, 20, this));
y+= 22;
}
for(UpDownWidget widget : upDownWidgets){
this.addDrawableChild(widget.getUp());
this.addDrawableChild(widget.getCenter());
this.addDrawableChild(widget.getDown());
upDownWidgets.add(new UpDownWidget(orderedInfo, QuickInfosScreen.INFO_LIST_DIMENSION.getX(), y, QuickInfosScreen.INFO_LIST_DIMENSION.getWidth(), QuickInfosScreen.INFO_LIST_DIMENSION.getHeight(),this));
y+= QuickInfosScreen.INFO_LIST_MARGIN;
}
upDownWidgets.forEach(widget -> widget.getWidgets().forEach(this::addDrawableChild));
}

private void createPositionButton() {
this.addDrawableChild(ScreenUtils.createButton(Singleton.POSITION, () -> {
switch (Singleton.POSITION){
case TOP_RIGHT -> Singleton.POSITION = Positions.BOTTOM_RIGHT;
case BOTTOM_RIGHT -> Singleton.POSITION = Positions.BOTTOM_LEFT;
case BOTTOM_LEFT -> Singleton.POSITION = Positions.TOP_LEFT;
case TOP_LEFT -> Singleton.POSITION = Positions.TOP_RIGHT;
}
}, QuickInfosScreen.POSITION_BUTTON_DIMENSION.getX(), QuickInfosScreen.POSITION_BUTTON_DIMENSION.getY(), QuickInfosScreen.POSITION_BUTTON_DIMENSION.getWidth(), QuickInfosScreen.POSITION_BUTTON_DIMENSION.getHeight()));
}

private void createPositionButton(){
ButtonWidget posButton = ButtonWidget.builder(Text.of(buildMessage(Singleton.POSITION)), button -> {
switch (Singleton.POSITION){
case TOP_RIGHT -> Singleton.POSITION = Positions.BOTTOM_RIGHT;
case BOTTOM_RIGHT -> Singleton.POSITION = Positions.BOTTOM_LEFT;
case BOTTOM_LEFT -> Singleton.POSITION = Positions.TOP_LEFT;
case TOP_LEFT -> Singleton.POSITION = Positions.TOP_RIGHT;
}
button.setMessage(Text.of(buildMessage(Singleton.POSITION)));
})
.dimensions(40, 65, 160, 20)
.build();
this.addDrawableChild(posButton);
private void createShowButton(){
this.addDrawableChild(ScreenUtils.createButton("Show/Hide", () -> Singleton.SHOW = !Singleton.SHOW, QuickInfosScreen.SHOW_BUTTON_DIMENSION.getX(), QuickInfosScreen.SHOW_BUTTON_DIMENSION.getY(), QuickInfosScreen.SHOW_BUTTON_DIMENSION.getWidth(), QuickInfosScreen.SHOW_BUTTON_DIMENSION.getHeight()));
}

}
Loading