diff --git a/src/main/java/org/saturnclient/saturnclient/auth/SaturnParser.java b/src/main/java/org/saturnclient/saturnclient/auth/SaturnParser.java index 662c860..522f345 100644 --- a/src/main/java/org/saturnclient/saturnclient/auth/SaturnParser.java +++ b/src/main/java/org/saturnclient/saturnclient/auth/SaturnParser.java @@ -6,6 +6,7 @@ import java.util.Map; public class SaturnParser { public String method = ""; + public String error; private Map params = new HashMap<>(); public SaturnParser(String input) throws IOException { @@ -16,7 +17,7 @@ public class SaturnParser { } if (parts[0].startsWith("!")) { - throw new IOException(parts[0]); + error = input; } method = parts[0]; diff --git a/src/main/java/org/saturnclient/saturnclient/auth/SaturnSocket.java b/src/main/java/org/saturnclient/saturnclient/auth/SaturnSocket.java index cf73279..11aef94 100644 --- a/src/main/java/org/saturnclient/saturnclient/auth/SaturnSocket.java +++ b/src/main/java/org/saturnclient/saturnclient/auth/SaturnSocket.java @@ -6,6 +6,7 @@ import java.util.HashMap; import java.util.Map; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents; +import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents; import net.minecraft.client.MinecraftClient; import org.saturnclient.saturnclient.SaturnClient; @@ -109,6 +110,12 @@ public class SaturnSocket { playerNames.entrySet().removeIf(entry -> entry.getValue().equals(uuid)); } break; + + default: + if (parser.error != null) { + SaturnClient.LOGGER.error("Error from the server: " + parser.error); + } + break; } } } catch (IOException e) { @@ -142,6 +149,16 @@ public class SaturnSocket { public static void afterAuth() { PlayerTracker.initialize(); + + ClientReceiveMessageEvents.CHAT.register((message, signedMessage, sender, params, receptionTimestamp) -> { + String msg = message.getString(); + + if (msg.contains("$SATURN_RELOAD")) { + String name = sender.getName(); + SaturnClient.LOGGER.info("Reloading player: " + name); + player(name, sender.getId().toString().replace("-", "")); + } + }); } public static void setCloak(String cloakName) { @@ -169,11 +186,14 @@ public class SaturnSocket { } } - public static void joinServer(String ip) { - try { - writer.println("join_server@ip=" + ip); - } catch (Exception e) { - SaturnClient.LOGGER.error("Request failed", e); + public static void sendReload() { + for (Map.Entry player : playerNames.entrySet()) { + if (players.containsKey(player.getValue()) && !player.getValue().equals(uuid)) { + MinecraftClient.getInstance().player.networkHandler + .sendChatCommand("msg " + player.getKey() + " " + + "$SATURN_RELOAD if you are seeing this as a player, please report this to https://github.com/saturnclientmc/saturnclient/issues"); + ; + } } } } diff --git a/src/main/java/org/saturnclient/saturnclient/config/ConfigManager.java b/src/main/java/org/saturnclient/saturnclient/config/ConfigManager.java index 0e26aca..835c1c7 100644 --- a/src/main/java/org/saturnclient/saturnclient/config/ConfigManager.java +++ b/src/main/java/org/saturnclient/saturnclient/config/ConfigManager.java @@ -16,11 +16,9 @@ import org.saturnclient.saturnclient.SaturnClient; public class ConfigManager { private static File configFile = new File( - MinecraftClient.getInstance().runDirectory, - "saturn.json" - ); - private static Map>> properties = - new HashMap<>(); + MinecraftClient.getInstance().runDirectory, + "saturn.json"); + private static Map>> properties = new HashMap<>(); private String namespace; @@ -45,49 +43,35 @@ public class ConfigManager { } JsonObject jsonObject = JsonParser.parseString( - new String(Files.readAllBytes(configFile.toPath())) - ).getAsJsonObject(); + new String(Files.readAllBytes(configFile.toPath()))).getAsJsonObject(); for (String namespace : properties.keySet()) { JsonElement configElement = jsonObject.get(namespace); - if (configElement == null) continue; + if (configElement == null) + continue; JsonObject config = jsonObject.get(namespace).getAsJsonObject(); if (config == null) { - SaturnClient.LOGGER.warn( - "No config found for namespace: " + namespace - ); continue; } Map> propertyMap = properties.get( - namespace - ); + namespace); for (String propertyName : propertyMap.keySet()) { JsonElement c = config.get(propertyName); if (c == null) { - SaturnClient.LOGGER.warn( - "No property found in config for " + propertyName - ); continue; } - SaturnClient.LOGGER.info("got prop " + c); Property p = propertyMap.get(propertyName); - SaturnClient.LOGGER.info( - "setting prop " + propertyName + " to " + p.value - ); - - SaturnClient.LOGGER.info("Property type: " + p.getType()); if (p.matchesJson(c)) { switch (p.getType()) { case BOOLEAN: - ((Property) p).value = - c.getAsBoolean(); + ((Property) p).value = c.getAsBoolean(); break; case INTEGER: ((Property) p).value = c.getAsInt(); @@ -106,8 +90,7 @@ public class ConfigManager { } } else { SaturnClient.LOGGER.warn( - "Property does not match JSON: " + propertyName - ); + "Property does not match JSON: " + propertyName); } } } @@ -126,8 +109,7 @@ public class ConfigManager { for (String namespace : properties.keySet()) { JsonObject namespaceConfig = new JsonObject(); Map> propertyMap = properties.get( - namespace - ); + namespace); // Iterate through each property in the namespace for (String propertyName : propertyMap.keySet()) { @@ -138,33 +120,27 @@ public class ConfigManager { switch (property.getType()) { case BOOLEAN: propertyValue = new JsonPrimitive( - (Boolean) property.value - ); + (Boolean) property.value); break; case INTEGER: propertyValue = new JsonPrimitive( - (Integer) property.value - ); + (Integer) property.value); break; case FLOAT: propertyValue = new JsonPrimitive( - (Float) property.value - ); + (Float) property.value); break; case STRING: propertyValue = new JsonPrimitive( - (String) property.value - ); + (String) property.value); break; case HEX: propertyValue = new JsonPrimitive( - (Integer) property.value - ); + (Integer) property.value); break; default: SaturnClient.LOGGER.warn( - "Unknown property type for: " + propertyName - ); + "Unknown property type for: " + propertyName); break; } diff --git a/src/main/java/org/saturnclient/saturnclient/cosmetics/Hats.java b/src/main/java/org/saturnclient/saturnclient/cosmetics/Hats.java index cffbe43..e4efe95 100644 --- a/src/main/java/org/saturnclient/saturnclient/cosmetics/Hats.java +++ b/src/main/java/org/saturnclient/saturnclient/cosmetics/Hats.java @@ -2,7 +2,6 @@ package org.saturnclient.saturnclient.cosmetics; import java.util.ArrayList; import java.util.List; - import org.saturnclient.saturnclient.auth.SaturnPlayer; import org.saturnclient.saturnclient.auth.SaturnSocket; @@ -16,6 +15,7 @@ public class Hats { public static void setHat(String uuid, String hatName) { setHatSilent(uuid, hatName); SaturnSocket.setHat(hatName); + SaturnSocket.sendReload(); } public static void setHatSilent(String uuid, String hatName) { diff --git a/src/main/java/org/saturnclient/saturnclient/cosmetics/cloaks/Cloaks.java b/src/main/java/org/saturnclient/saturnclient/cosmetics/cloaks/Cloaks.java index 2362677..b0bc9be 100644 --- a/src/main/java/org/saturnclient/saturnclient/cosmetics/cloaks/Cloaks.java +++ b/src/main/java/org/saturnclient/saturnclient/cosmetics/cloaks/Cloaks.java @@ -44,6 +44,7 @@ public class Cloaks { public static void setCloak(String uuid, String cloakName) { SaturnSocket.setCloak(cloakName); setCloakSilent(uuid, cloakName); + SaturnSocket.sendReload(); SaturnClient.LOGGER.info("Cloak set to " + cloakName); } diff --git a/src/main/java/org/saturnclient/saturnclient/mixin/SaturnReload.java b/src/main/java/org/saturnclient/saturnclient/mixin/SaturnReload.java new file mode 100644 index 0000000..c9d8b6a --- /dev/null +++ b/src/main/java/org/saturnclient/saturnclient/mixin/SaturnReload.java @@ -0,0 +1,23 @@ +package org.saturnclient.saturnclient.mixin; + +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import net.minecraft.client.gui.hud.ChatHud; +import net.minecraft.client.gui.hud.MessageIndicator; +import net.minecraft.network.message.MessageSignatureData; +import net.minecraft.text.Text; + +@Mixin(ChatHud.class) +public class SaturnReload { + @Inject(method = "addMessage(Lnet/minecraft/text/Text;Lnet/minecraft/network/message/MessageSignatureData;Lnet/minecraft/client/gui/hud/MessageIndicator;)V", at = @At("HEAD"), cancellable = true) + public void onAddMessage(Text message, @Nullable MessageSignatureData signatureData, + @Nullable MessageIndicator indicator, CallbackInfo ci) { + if (message.toString().contains("$SATURN_RELOAD")) { + ci.cancel(); + } + } +} diff --git a/src/main/resources/assets/minecraft/font/fonts.json b/src/main/resources/assets/minecraft/font/fonts.json index 6f80642..3f2448f 100644 --- a/src/main/resources/assets/minecraft/font/fonts.json +++ b/src/main/resources/assets/minecraft/font/fonts.json @@ -1,3 +1,8 @@ { - "saturnclient:panton": "saturnclient:font/panton" + "providers": [ + { + "type": "reference", + "id": "saturnclient:panton" + } + ] } diff --git a/src/main/resources/assets/saturnclient/font/fonts.json b/src/main/resources/assets/saturnclient/font/fonts.json deleted file mode 100644 index 3f2448f..0000000 --- a/src/main/resources/assets/saturnclient/font/fonts.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "providers": [ - { - "type": "reference", - "id": "saturnclient:panton" - } - ] -} diff --git a/src/main/resources/assets/saturnclient/font/panton.json b/src/main/resources/assets/saturnclient/font/panton.json index 06f2d6c..8990556 100644 --- a/src/main/resources/assets/saturnclient/font/panton.json +++ b/src/main/resources/assets/saturnclient/font/panton.json @@ -6,7 +6,7 @@ "shift": [0, 0], "size": 9, "oversample": 5.0, - "skip_missing": false + "skip_missing": true } ] } diff --git a/src/main/resources/saturnclient.mixins.json b/src/main/resources/saturnclient.mixins.json index 2e2742b..c18b739 100644 --- a/src/main/resources/saturnclient.mixins.json +++ b/src/main/resources/saturnclient.mixins.json @@ -8,7 +8,8 @@ "TabListMixin", "NameTagMixin", "PlayerEntityRendererMixin", - "WhoAmI" + "WhoAmI", + "SaturnReload" ], "injectors": { "defaultRequire": 1