Skip to content

Commit 4ea000b

Browse files
Client doesnt crash now + new FontManager. Icons wont render for now.
1 parent a3354d6 commit 4ea000b

File tree

19 files changed

+240
-168
lines changed

19 files changed

+240
-168
lines changed

src/main/java/dev/heliosclient/HeliosClient.java

+4-6
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,6 @@
3838
import java.util.Map;
3939
import java.util.function.Consumer;
4040

41-
import static dev.heliosclient.managers.FontManager.fonts;
42-
4341
public class HeliosClient implements ModInitializer, Listener {
4442
public static final HeliosClient INSTANCE = new HeliosClient();
4543
public static final MinecraftClient MC = MinecraftClient.getInstance();
@@ -83,8 +81,8 @@ private static void load(Consumer<Config> consumer) {
8381
configTimer.resetTimer();
8482

8583
// Font event is posted to allow the GUI to reset its calculation for the new font by the config.
86-
if (fonts != null)
87-
EventManager.postEvent(new FontChangeEvent(fonts));
84+
if (FontManager.areFontsAvailable())
85+
EventManager.postEvent(new FontChangeEvent());
8886
}
8987

9088
public static void loadModulesOnly() {
@@ -173,8 +171,8 @@ public void onInitialize() {
173171
//Saving is handled when the client stops, crashes, the world stops or the player disconnects.
174172
//Crash save is handled in MixinCrashReport and configs are saved while switching.
175173

176-
if (fonts != null)
177-
EventManager.postEvent(new FontChangeEvent(fonts));
174+
if (FontManager.areFontsAvailable())
175+
EventManager.postEvent(new FontChangeEvent());
178176

179177
}
180178

src/main/java/dev/heliosclient/event/events/heliosclient/FontChangeEvent.java

+1-13
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,4 @@
22

33
import dev.heliosclient.event.Event;
44

5-
import java.awt.*;
6-
7-
public class FontChangeEvent extends Event {
8-
private final Font[] fonts;
9-
10-
public FontChangeEvent(Font[] fonts) {
11-
this.fonts = fonts;
12-
}
13-
14-
public Font[] getFonts() {
15-
return fonts;
16-
}
17-
}
5+
public class FontChangeEvent extends Event {}

src/main/java/dev/heliosclient/event/events/player/PacketEvent.java

+22-23
Original file line numberDiff line numberDiff line change
@@ -3,49 +3,48 @@
33
import dev.heliosclient.event.Cancelable;
44
import dev.heliosclient.event.Event;
55
import dev.heliosclient.event.LuaEvent;
6+
import net.minecraft.network.ClientConnection;
67
import net.minecraft.network.packet.Packet;
78

89
@Cancelable
910
@LuaEvent("PacketEvent")
1011
public class PacketEvent extends Event {
12+
public Packet<?> packet;
13+
public ClientConnection connection;
14+
public PacketEvent(Packet<?> packet, ClientConnection connection){
15+
this.packet = packet;
16+
this.connection = connection;
17+
}
18+
19+
public Packet<?> getPacket() {
20+
return packet;
21+
}
22+
23+
public ClientConnection getConnection() {
24+
return connection;
25+
}
26+
1127
@Cancelable
1228
@LuaEvent("packetReceiveEvent")
1329
public static class RECEIVE extends PacketEvent {
14-
public Packet<?> packet;
15-
16-
public RECEIVE(Packet<?> packet) {
17-
this.packet = packet;
18-
}
1930

20-
public Packet<?> getPacket() {
21-
return packet;
31+
public RECEIVE(Packet<?> packet, ClientConnection connection) {
32+
super(packet,connection);
2233
}
2334
}
2435

2536
@Cancelable
2637
@LuaEvent("packetSendEvent")
2738
public static class SEND extends PacketEvent {
28-
public Packet<?> packet;
29-
30-
public SEND(Packet<?> packet) {
31-
this.packet = packet;
32-
}
33-
34-
public Packet<?> getPacket() {
35-
return packet;
39+
public SEND(Packet<?> packet, ClientConnection connection) {
40+
super(packet,connection);
3641
}
3742
}
3843

3944
@LuaEvent("packetSentEvent")
4045
public static class SENT extends PacketEvent {
41-
public Packet<?> packet;
42-
43-
public SENT(Packet<?> packet) {
44-
this.packet = packet;
45-
}
46-
47-
public Packet<?> getPacket() {
48-
return packet;
46+
public SENT(Packet<?> packet, ClientConnection connection) {
47+
super(packet,connection);
4948
}
5049
}
5150
}

src/main/java/dev/heliosclient/hud/HudElement.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public class HudElement implements ISettingChange, ISaveAndLoad, Listener {
4848
protected static final MinecraftClient mc = MinecraftClient.getInstance();
4949
public String name;
5050
public String description;
51-
public int height = FontManager.hudFontSize;
51+
public int height = FontManager.HUD_FONT_SIZE;
5252
public int width = 10;
5353
public int x;
5454
public int y;

src/main/java/dev/heliosclient/hud/hudelements/ArmorHud.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import dev.heliosclient.hud.HudElementData;
88
import dev.heliosclient.managers.FontManager;
99
import dev.heliosclient.module.settings.*;
10-
import dev.heliosclient.util.fontutils.fxFontRenderer;
10+
import dev.heliosclient.util.fontutils.BetterFontRenderer;
1111
import dev.heliosclient.util.player.PlayerUtils;
1212
import dev.heliosclient.util.render.Renderer2D;
1313
import net.minecraft.client.font.TextRenderer;
@@ -59,7 +59,7 @@ public class ArmorHud extends HudElement {
5959
.build()
6060
);
6161

62-
fxFontRenderer cFontRenderer;
62+
BetterFontRenderer cFontRenderer;
6363

6464
public ArmorHud() {
6565
super(DATA);
@@ -76,21 +76,21 @@ public void onSettingChange(Setting<?> setting) {
7676
super.onSettingChange(setting);
7777

7878
if(setting == textSize && HeliosClient.shouldUpdate()){
79-
this.cFontRenderer = new fxFontRenderer(FontManager.fonts[0],textSize.getFloat());
79+
this.cFontRenderer = new BetterFontRenderer(FontManager.ACTIVE_FONT,textSize.getFloat());
8080
}
8181
}
8282
@SubscribeEvent
8383
public void onFontChange(FontChangeEvent e){
8484
if(mc.getWindow() == null) return;
8585

86-
this.cFontRenderer = new fxFontRenderer(e.getFonts()[0],textSize.getFloat());
86+
this.cFontRenderer = new BetterFontRenderer(FontManager.ACTIVE_FONT,textSize.getFloat());
8787
}
8888

8989
@Override
9090
public void renderElement(DrawContext drawContext, TextRenderer textRenderer) {
9191
super.renderElement(drawContext, textRenderer);
9292
if(cFontRenderer == null){
93-
this.cFontRenderer = new fxFontRenderer(FontManager.fonts[0],textSize.getFloat());
93+
this.cFontRenderer = new BetterFontRenderer(FontManager.ACTIVE_FONT,textSize.getFloat());
9494
}
9595

9696
ItemStack helmet, chestplate, leggings, boots;

src/main/java/dev/heliosclient/managers/FontManager.java

+66-33
Original file line numberDiff line numberDiff line change
@@ -5,37 +5,35 @@
55
import dev.heliosclient.event.events.TickEvent;
66
import dev.heliosclient.event.events.heliosclient.FontChangeEvent;
77
import dev.heliosclient.event.listener.Listener;
8+
import dev.heliosclient.util.fontutils.BetterFontRenderer;
89
import dev.heliosclient.util.fontutils.FontLoader;
910
import dev.heliosclient.util.fontutils.FontRenderers;
10-
import dev.heliosclient.util.fontutils.fxFontRenderer;
1111
import me.x150.renderer.font.FontRenderer;
1212

1313
import java.awt.*;
14-
import java.util.ArrayList;
14+
import java.util.HashMap;
15+
import java.util.Map;
1516

1617
public class FontManager implements Listener {
17-
public static Font[] fonts, iconFonts;
18-
public static Font font, iconFont;
19-
public static Font[] originalFonts;
20-
public static int hudFontSize = 8, clientFontSize = 8;
21-
public static ArrayList<String> fontNames = new ArrayList<>();
18+
public static final Map<String, Font> FONTS = new HashMap<>();
19+
public static final Map<String, Font> ICON_FONTS = new HashMap<>();
20+
public static Font ACTIVE_FONT;
21+
public static Font ACTIVE_ICON_FONT;
22+
public static int HUD_FONT_SIZE = 8, GLOBAL_FONT_SIZE = 8;
2223
public static FontManager INSTANCE = new FontManager();
2324

24-
public FontManager() {
25+
private FontManager(){
2526
refresh();
2627
}
2728

28-
public void refresh() {
29-
fontNames.clear();
30-
fonts = FontLoader.loadFonts();
31-
font = fonts[0];
32-
iconFonts = FontLoader.loadIconFonts();
33-
iconFont = iconFonts[0];
34-
originalFonts = fonts.clone();
35-
for (Font font : originalFonts) {
36-
fontNames.add(font.getName());
37-
}
38-
EventManager.register(this);
29+
public void refresh(){
30+
FONTS.clear();
31+
ICON_FONTS.clear();
32+
ACTIVE_FONT = null;
33+
ACTIVE_ICON_FONT = null;
34+
35+
FontLoader.getFonts().forEach(FontManager::registerFont);
36+
FontLoader.getFonts().forEach(FontManager::registerIconFont);
3937
}
4038

4139
@SubscribeEvent(priority = SubscribeEvent.Priority.HIGHEST)
@@ -47,28 +45,63 @@ public void onTick(TickEvent.CLIENT event) {
4745
}
4846

4947
public void registerFonts() {
50-
FontRenderers.fontRenderer = new FontRenderer(font, hudFontSize);
51-
FontRenderers.fxfontRenderer = new fxFontRenderer(font, clientFontSize);
52-
FontRenderers.iconRenderer = new fxFontRenderer(iconFont, 10f);
48+
FontRenderers.fontRenderer = new FontRenderer(ACTIVE_FONT, HUD_FONT_SIZE);
49+
FontRenderers.fxfontRenderer = new BetterFontRenderer(ACTIVE_FONT, GLOBAL_FONT_SIZE);
50+
FontRenderers.iconRenderer = new BetterFontRenderer(ACTIVE_ICON_FONT, 10f);
5351

54-
FontRenderers.Super_Small_fxfontRenderer = new fxFontRenderer(font, 4f);
55-
FontRenderers.Super_Small_iconRenderer = new fxFontRenderer(iconFont, 4f);
52+
FontRenderers.Super_Small_fxfontRenderer = new BetterFontRenderer(ACTIVE_FONT, 4f);
53+
FontRenderers.Super_Small_iconRenderer = new BetterFontRenderer(ACTIVE_ICON_FONT, 4f);
5654

57-
FontRenderers.Small_fxfontRenderer = new fxFontRenderer(font, 6f);
58-
FontRenderers.Small_iconRenderer = new fxFontRenderer(iconFont, 6f);
55+
FontRenderers.Small_fxfontRenderer = new BetterFontRenderer(ACTIVE_FONT, 6f);
56+
FontRenderers.Small_iconRenderer = new BetterFontRenderer(ACTIVE_ICON_FONT, 6f);
5957

60-
FontRenderers.Mid_fxfontRenderer = new fxFontRenderer(font, 8f);
61-
FontRenderers.Mid_iconRenderer = new fxFontRenderer(iconFont, 8f);
58+
FontRenderers.Mid_fxfontRenderer = new BetterFontRenderer(ACTIVE_FONT, 8f);
59+
FontRenderers.Mid_iconRenderer = new BetterFontRenderer(ACTIVE_ICON_FONT, 8f);
6260

63-
FontRenderers.Large_fxfontRenderer = new fxFontRenderer(font, 13f);
64-
FontRenderers.Large_iconRenderer = new fxFontRenderer(iconFont, 13f);
61+
FontRenderers.Large_fxfontRenderer = new BetterFontRenderer(ACTIVE_FONT, 13f);
62+
FontRenderers.Large_iconRenderer = new BetterFontRenderer(ACTIVE_ICON_FONT, 13f);
6563

6664
if(FontLoader.COMICALFONTS != null)
67-
FontRenderers.Comical_fxfontRenderer = new fxFontRenderer(FontLoader.COMICALFONTS[0], 12f);
65+
FontRenderers.Comical_fxfontRenderer = new BetterFontRenderer(FontLoader.COMICALFONTS[0], 12f);
6866

69-
FontRenderers.Ultra_Large_iconRenderer = new fxFontRenderer(iconFont, 25f);
67+
FontRenderers.Ultra_Large_iconRenderer = new BetterFontRenderer(ACTIVE_ICON_FONT, 25f);
7068

7169
//Post the font change event to the EventManager
72-
EventManager.postEvent(new FontChangeEvent(FontManager.fonts));
70+
EventManager.postEvent(new FontChangeEvent());
71+
}
72+
73+
private static void registerFont(Font font) {
74+
FONTS.put(font.getFontName(), font);
75+
if(ACTIVE_FONT == null) ACTIVE_FONT = font;
76+
}
77+
78+
private static void registerIconFont(Font font) {
79+
ICON_FONTS.put(font.getFontName(), font);
80+
if(ACTIVE_ICON_FONT == null) ACTIVE_ICON_FONT = font;
81+
}
82+
private static void setActiveIconFont(Font font) {
83+
if(!ICON_FONTS.containsValue(font)) {
84+
ICON_FONTS.put(font.getFontName(), font);
85+
}
86+
ACTIVE_ICON_FONT = font;
87+
}
88+
89+
private static void setActiveFont(Font font) {
90+
if(!FONTS.containsValue(font)) {
91+
FONTS.put(font.getFontName(), font);
92+
}
93+
ACTIVE_FONT = font;
94+
}
95+
96+
public static Font getFont(String key) {
97+
return FONTS.getOrDefault(key, ACTIVE_FONT);
98+
}
99+
100+
public static Font getIconFont(String key) {
101+
return ICON_FONTS.getOrDefault(key, ACTIVE_ICON_FONT);
102+
}
103+
104+
public static boolean areFontsAvailable(){
105+
return !FONTS.isEmpty();
73106
}
74107
}

src/main/java/dev/heliosclient/mixin/ClientConnectionMixin.java

+8-7
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66
import dev.heliosclient.managers.CommandManager;
77
import dev.heliosclient.managers.EventManager;
88
import dev.heliosclient.util.ChatUtils;
9+
import io.netty.channel.ChannelHandlerContext;
910
import io.netty.channel.SimpleChannelInboundHandler;
1011
import net.minecraft.network.ClientConnection;
1112
import net.minecraft.network.PacketCallbacks;
1213
import net.minecraft.network.listener.ClientPlayPacketListener;
13-
import net.minecraft.network.listener.PacketListener;
1414
import net.minecraft.network.packet.Packet;
1515
import net.minecraft.network.packet.c2s.play.ChatMessageC2SPacket;
1616
import net.minecraft.network.packet.s2c.play.BundleS2CPacket;
@@ -24,13 +24,14 @@
2424

2525
@Mixin(ClientConnection.class)
2626
public abstract class ClientConnectionMixin extends SimpleChannelInboundHandler<Packet<?>> {
27-
@Inject(method = "handlePacket", at = @At("HEAD"), cancellable = true)
28-
private static <T extends PacketListener> void onHandlePacket(Packet<T> packet, PacketListener listener, CallbackInfo info) {
27+
@Inject(method = "channelRead0(Lio/netty/channel/ChannelHandlerContext;Lnet/minecraft/network/packet/Packet;)V",
28+
at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ClientConnection;handlePacket(Lnet/minecraft/network/packet/Packet;Lnet/minecraft/network/listener/PacketListener;)V", shift = At.Shift.BEFORE), cancellable = true)
29+
private void onHandlePacket(ChannelHandlerContext channelHandlerContext, Packet<?> packet, CallbackInfo ci) {
2930
if (packet instanceof BundleS2CPacket bundle) {
3031
for (Iterator<Packet<? super ClientPlayPacketListener>> i = bundle.getPackets().iterator(); i.hasNext(); ) {
31-
if (EventManager.postEvent(new PacketEvent.RECEIVE(i.next())).isCanceled()) i.remove();
32+
if (EventManager.postEvent(new PacketEvent.RECEIVE(i.next(), (ClientConnection) (Object) this)).isCanceled()) i.remove();
3233
}
33-
} else if (EventManager.postEvent(new PacketEvent.RECEIVE(packet)).isCanceled()) info.cancel();
34+
} else if (EventManager.postEvent(new PacketEvent.RECEIVE(packet, (ClientConnection) (Object) this)).isCanceled()) ci.cancel();
3435

3536
if(packet instanceof ExplosionS2CPacket explosionPack){
3637
EventManager.postEvent(new ExplosionEvent(explosionPack.center(),explosionPack.playerKnockback(),explosionPack.explosionParticle()));
@@ -39,7 +40,7 @@ private static <T extends PacketListener> void onHandlePacket(Packet<T> packet,
3940

4041
@Inject(method = "send(Lnet/minecraft/network/packet/Packet;Lnet/minecraft/network/PacketCallbacks;Z)V", at = @At("HEAD"), cancellable = true)
4142
public void send(Packet<?> packet, PacketCallbacks callbacks, boolean flush, CallbackInfo ci) {
42-
if (EventManager.postEvent(new PacketEvent.SEND(packet)).isCanceled()) ci.cancel();
43+
if (EventManager.postEvent(new PacketEvent.SEND(packet, (ClientConnection) (Object) this)).isCanceled()) ci.cancel();
4344

4445
// Call commands if the prefix is sent
4546
if (packet instanceof ChatMessageC2SPacket && ((ChatMessageC2SPacket) packet).chatMessage().startsWith(CommandManager.get().getPrefix())) {
@@ -54,6 +55,6 @@ public void send(Packet<?> packet, PacketCallbacks callbacks, boolean flush, Cal
5455
}
5556
@Inject(method = "send(Lnet/minecraft/network/packet/Packet;Lnet/minecraft/network/PacketCallbacks;Z)V", at = @At("TAIL"))
5657
public void sent(Packet<?> packet, PacketCallbacks callbacks, boolean flush, CallbackInfo ci) {
57-
EventManager.postEvent(new PacketEvent.SENT(packet));
58+
EventManager.postEvent(new PacketEvent.SENT(packet, (ClientConnection) (Object) this));
5859
}
5960
}

src/main/java/dev/heliosclient/mixin/TitleScreenMixin.java

-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ private void onRender(DrawContext context, int mouseX, int mouseY, float delta,
6262
.color(Color.GREEN,Color.YELLOW,Renderer2D.Direction.BOTTOM_TOP)
6363
.outline(true,1.5f)
6464
.draw(context.getMatrices());
65-
6665
*/
6766

6867
if(entity != null) {

0 commit comments

Comments
 (0)