From 46aa05433bcbf411f090aeca3764304b21cb97cd Mon Sep 17 00:00:00 2001 From: Patrick <147879351+WinniePatGG@users.noreply.github.com> Date: Sat, 20 Jun 2026 22:58:27 +0200 Subject: [PATCH] Config and logging | I dont even know anymore --- .../de/winniepat/parrotmod/ParrotLogger.java | 21 ++++++++ .../de/winniepat/parrotmod/Parrotmod.java | 8 +++ .../parrotmod/discord/DiscordRPCManager.java | 54 +++++++++++++++---- .../parrotmod/ui/DiscordTabFragment.java | 35 ++++++++++-- .../parrotmod/ui/GeneralTabFragment.java | 13 +++++ .../parrotmod/ui/SettingsFragment.java | 5 +- 6 files changed, 121 insertions(+), 15 deletions(-) create mode 100644 src/main/java/de/winniepat/parrotmod/ParrotLogger.java diff --git a/src/main/java/de/winniepat/parrotmod/ParrotLogger.java b/src/main/java/de/winniepat/parrotmod/ParrotLogger.java new file mode 100644 index 0000000..11ce114 --- /dev/null +++ b/src/main/java/de/winniepat/parrotmod/ParrotLogger.java @@ -0,0 +1,21 @@ +package de.winniepat.parrotmod; + +import de.winniepat.parrotmod.config.ConfigManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class ParrotLogger { + public static void logInfo(Class className, String message) { + Logger logger = LoggerFactory.getLogger(ConfigManager.class); + if (Parrotmod.DEBUG) { + logger.info(message); + } + } + + public static void logError(Class className, String message, Exception e) { + Logger logger = LoggerFactory.getLogger(className); + if (Parrotmod.DEBUG) { + logger.error(message, e); + } + } +} diff --git a/src/main/java/de/winniepat/parrotmod/Parrotmod.java b/src/main/java/de/winniepat/parrotmod/Parrotmod.java index 390267d..82632a6 100644 --- a/src/main/java/de/winniepat/parrotmod/Parrotmod.java +++ b/src/main/java/de/winniepat/parrotmod/Parrotmod.java @@ -1,15 +1,23 @@ package de.winniepat.parrotmod; +import de.winniepat.parrotmod.config.ConfigManager; import de.winniepat.parrotmod.discord.DiscordRPCManager; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class Parrotmod implements ModInitializer { + private static final Logger DEBUG_LOGGER = LoggerFactory.getLogger("ParrotMod-Debug"); + + public static final boolean DEBUG = true; + @Override public void onInitialize() { + ConfigManager.load(); DiscordRPCManager.init(); ClientLifecycleEvents.CLIENT_STOPPING.register(client -> DiscordRPCManager.shutdown()); diff --git a/src/main/java/de/winniepat/parrotmod/discord/DiscordRPCManager.java b/src/main/java/de/winniepat/parrotmod/discord/DiscordRPCManager.java index 8b350c8..392905a 100644 --- a/src/main/java/de/winniepat/parrotmod/discord/DiscordRPCManager.java +++ b/src/main/java/de/winniepat/parrotmod/discord/DiscordRPCManager.java @@ -8,6 +8,7 @@ import com.jagrosh.discordipc.entities.Packet; import com.jagrosh.discordipc.entities.RichPresence; import com.jagrosh.discordipc.entities.User; import com.jagrosh.discordipc.exceptions.NoDiscordClientException; +import de.winniepat.parrotmod.config.ConfigManager; import net.minecraft.client.player.LocalPlayer; import net.minecraft.world.item.ItemStack; @@ -16,7 +17,6 @@ import java.util.List; import java.util.concurrent.ThreadLocalRandom; public class DiscordRPCManager { - private static final long APPLICATION_ID = 1517985621396820039L; private static final long UPDATE_COOLDOWN_MS = 15_000; private static IPCClient client; @@ -47,7 +47,27 @@ public class DiscordRPCManager { private DiscordRPCManager() {} public static void init() { - client = new IPCClient(APPLICATION_ID); + ConfigManager.registerListener(cfg -> { + if (cfg.enableDiscordRPC) { + if (!connected && client == null) { + startClient(); + } + } else { + if (client != null) { + shutdown(); + client = null; + connected = false; + } + } + }); + + if (ConfigManager.getInstance().enableDiscordRPC) { + startClient(); + } + } + + private static void startClient() { + client = new IPCClient(ConfigManager.getInstance().discordAppId); client.setListener(new IPCListener() { @Override public void onPacketSent(IPCClient client, Packet packet) { @@ -109,6 +129,7 @@ public class DiscordRPCManager { } private static void updateFromPlayer(LocalPlayer player) { + var cfg = ConfigManager.getInstance(); String dimension = player.level().dimension().registry().getPath(); String biomeName = player.level().getBiome(player.blockPosition()) .unwrapKey() @@ -117,12 +138,27 @@ public class DiscordRPCManager { ItemStack held = player.getMainHandItem(); String heldName = held.isEmpty() ? "empty hands" : held.getHoverName().getString(); - String details = switch (dimension) { - case "the_nether" -> "Surviving the Nether"; - case "the_end" -> "Facing the End"; - default -> "Exploring the " + prettify(biomeName); - }; - String state = "Wielding " + heldName + " · " + (int) player.getHealth() + " HP"; + String details; + if (cfg.showBiomeInRPC) { + details = switch (dimension) { + case "the_nether" -> "Surviving the Nether"; + case "the_end" -> "Facing the End"; + default -> "Exploring the " + prettify(biomeName); + }; + } else { + details = "Playing Minecraft"; + } + + StringBuilder stateBuilder = new StringBuilder(); + if (cfg.showHeldItemInRPC) { + stateBuilder.append("Wielding ").append(heldName); + } + if (cfg.showHealthInRPC) { + if (stateBuilder.length() > 0) stateBuilder.append(" · "); + stateBuilder.append((int) player.getHealth()).append(" HP"); + } + String state = stateBuilder.toString(); + if (state.isEmpty()) state = "In-game"; updatePresence(details, state); } @@ -132,7 +168,7 @@ public class DiscordRPCManager { } public static void updatePresence(String details, String state) { - if (!connected) return; + if (!connected || !ConfigManager.getInstance().enableDiscordRPC) return; RichPresence presence = new RichPresence.Builder() .setActivityType(ActivityType.Playing) .setDetails(details) diff --git a/src/main/java/de/winniepat/parrotmod/ui/DiscordTabFragment.java b/src/main/java/de/winniepat/parrotmod/ui/DiscordTabFragment.java index db8d4aa..ca46bf2 100644 --- a/src/main/java/de/winniepat/parrotmod/ui/DiscordTabFragment.java +++ b/src/main/java/de/winniepat/parrotmod/ui/DiscordTabFragment.java @@ -1,5 +1,6 @@ package de.winniepat.parrotmod.ui; +import de.winniepat.parrotmod.config.ConfigManager; import icyllis.modernui.fragment.Fragment; import icyllis.modernui.util.DataSet; import icyllis.modernui.view.LayoutInflater; @@ -8,7 +9,6 @@ import icyllis.modernui.view.ViewGroup; import icyllis.modernui.widget.LinearLayout; import icyllis.modernui.widget.Switch; import icyllis.modernui.widget.TextView; -import net.minecraft.client.Minecraft; public class DiscordTabFragment extends Fragment { @@ -20,13 +20,40 @@ public class DiscordTabFragment extends Fragment { layout.addView(makeLabel("Enable DiscordRPC")); Switch toggleDiscordRPC = new Switch(getContext()); - toggleDiscordRPC.setChecked(true); // TODO: load from config + toggleDiscordRPC.setChecked(ConfigManager.getInstance().enableDiscordRPC); toggleDiscordRPC.setOnCheckedChangeListener((v, checked) -> { - // TODO: save to config - // MyConfig.enableDiscordRPC = checked; + ConfigManager.getInstance().enableDiscordRPC = checked; + ConfigManager.save(); }); layout.addView(toggleDiscordRPC); + layout.addView(makeLabel("Show Biome in RPC")); + Switch toggleBiome = new Switch(getContext()); + toggleBiome.setChecked(ConfigManager.getInstance().showBiomeInRPC); + toggleBiome.setOnCheckedChangeListener((v, checked) -> { + ConfigManager.getInstance().showBiomeInRPC = checked; + ConfigManager.save(); + }); + layout.addView(toggleBiome); + + layout.addView(makeLabel("Show Held Item in RPC")); + Switch toggleHeldItem = new Switch(getContext()); + toggleHeldItem.setChecked(ConfigManager.getInstance().showHeldItemInRPC); + toggleHeldItem.setOnCheckedChangeListener((v, checked) -> { + ConfigManager.getInstance().showHeldItemInRPC = checked; + ConfigManager.save(); + }); + layout.addView(toggleHeldItem); + + layout.addView(makeLabel("Show Health in RPC")); + Switch toggleHealth = new Switch(getContext()); + toggleHealth.setChecked(ConfigManager.getInstance().showHealthInRPC); + toggleHealth.setOnCheckedChangeListener((v, checked) -> { + ConfigManager.getInstance().showHealthInRPC = checked; + ConfigManager.save(); + }); + layout.addView(toggleHealth); + return layout; } diff --git a/src/main/java/de/winniepat/parrotmod/ui/GeneralTabFragment.java b/src/main/java/de/winniepat/parrotmod/ui/GeneralTabFragment.java index 822d579..39b6ec5 100644 --- a/src/main/java/de/winniepat/parrotmod/ui/GeneralTabFragment.java +++ b/src/main/java/de/winniepat/parrotmod/ui/GeneralTabFragment.java @@ -1,6 +1,7 @@ package de.winniepat.parrotmod.ui; import de.winniepat.parrotmod.Parrotmod; +import de.winniepat.parrotmod.config.ConfigManager; import icyllis.modernui.fragment.Fragment; import icyllis.modernui.util.DataSet; import icyllis.modernui.view.*; @@ -17,6 +18,18 @@ public class GeneralTabFragment extends Fragment { layout.addView(makeLabel("Minecraft Version: " + Minecraft.getInstance().getLaunchedVersion())); + Button reloadBtn = new Button(getContext()); + reloadBtn.setText("Reload Config"); + reloadBtn.setOnClickListener(v -> ConfigManager.load()); + var p = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); + p.topMargin = dp(16); + layout.addView(reloadBtn, p); + + Button saveBtn = new Button(getContext()); + saveBtn.setText("Save Config"); + saveBtn.setOnClickListener(v -> ConfigManager.save()); + layout.addView(saveBtn, p); + return layout; } diff --git a/src/main/java/de/winniepat/parrotmod/ui/SettingsFragment.java b/src/main/java/de/winniepat/parrotmod/ui/SettingsFragment.java index 88abb4a..e169a71 100644 --- a/src/main/java/de/winniepat/parrotmod/ui/SettingsFragment.java +++ b/src/main/java/de/winniepat/parrotmod/ui/SettingsFragment.java @@ -34,10 +34,11 @@ public class SettingsFragment extends Fragment { contentParams.leftMargin = dp(6); root.addView(contentArea, contentParams); - String[] tabNames = {"Info", "General"}; + String[] tabNames = {"Info", "General", "Discord"}; Fragment[] tabFragments = { new InfoTabFragment(), - new GeneralTabFragment() + new GeneralTabFragment(), + new DiscordTabFragment() }; getChildFragmentManager().beginTransaction()