From 045623a67b5eac946c301784fab3cef5aa02c359 Mon Sep 17 00:00:00 2001 From: Hedzer Kuijlman Date: Thu, 27 Mar 2025 11:03:35 +0100 Subject: [PATCH] Split client & common sources + POC FPS counter --- build.gradle | 14 ++++++- gradlew | 0 .../survivalfabric/SurvivalFabricClient.java | 39 +++++++++++++++++++ .../SurvivalFabricDataGenerator.java | 11 ++++++ .../mixin/client/InGameHudMixin.java | 28 +++++++++++++ .../survivalfabric.client.mixins.json | 11 ++++++ .../mixin/PlayerManagerMixin.java | 4 +- .../assets/survivalfabric/lang/en_us.json | 4 ++ src/main/resources/fabric.mod.json | 13 +++++-- 9 files changed, 119 insertions(+), 5 deletions(-) mode change 100644 => 100755 gradlew create mode 100644 src/client/java/wtf/hak/survivalfabric/SurvivalFabricClient.java create mode 100644 src/client/java/wtf/hak/survivalfabric/SurvivalFabricDataGenerator.java create mode 100644 src/client/java/wtf/hak/survivalfabric/mixin/client/InGameHudMixin.java create mode 100644 src/client/resources/survivalfabric.client.mixins.json create mode 100644 src/main/resources/assets/survivalfabric/lang/en_us.json diff --git a/build.gradle b/build.gradle index 804c665..2cc49bd 100644 --- a/build.gradle +++ b/build.gradle @@ -18,6 +18,18 @@ repositories { // for more information about repositories. } +loom { + splitEnvironmentSourceSets() + + mods { + "survivalfabric" { + sourceSet sourceSets.main + sourceSet sourceSets.client + } + } + +} + fabricApi { configureDataGeneration { client = true @@ -26,7 +38,7 @@ fabricApi { dependencies { // To change the versions see the gradle.properties file - minecraft "net.minecraft:minecraft:${project.minecraft_version}" + minecraft "com.mojang:minecraft:${project.minecraft_version}" mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 diff --git a/src/client/java/wtf/hak/survivalfabric/SurvivalFabricClient.java b/src/client/java/wtf/hak/survivalfabric/SurvivalFabricClient.java new file mode 100644 index 0000000..7198177 --- /dev/null +++ b/src/client/java/wtf/hak/survivalfabric/SurvivalFabricClient.java @@ -0,0 +1,39 @@ +package wtf.hak.survivalfabric; + +import net.fabricmc.api.ClientModInitializer; +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; +import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.option.KeyBinding; +import net.minecraft.client.util.InputUtil; +import net.minecraft.text.Text; +import org.lwjgl.glfw.GLFW; + +import java.awt.*; + +public class SurvivalFabricClient implements ClientModInitializer { + + public static boolean SHOULD_SHOW_FPS = false; + + KeyBinding keyBinding = KeyBindingHelper.registerKeyBinding(new KeyBinding( + "key.survivalfabric.fps", // The translation key of the keybinding's name + InputUtil.Type.KEYSYM, // The type of the keybinding, KEYSYM for keyboard, MOUSE for mouse. + GLFW.GLFW_KEY_PERIOD, // The keycode of the key + "category.survivalfabric.utils" // The translation key of the keybinding's category. + )); + + @Override + public void onInitializeClient() { + ClientTickEvents.END_CLIENT_TICK.register(client -> { + while (keyBinding.wasPressed()) { + MinecraftClient mc = MinecraftClient.getInstance(); + SHOULD_SHOW_FPS = !SHOULD_SHOW_FPS; + if(SHOULD_SHOW_FPS) { + mc.player.sendMessage(Text.literal("FPS Counter is now on").withColor(Color.GREEN.getRGB()), true); + } else + mc.player.sendMessage(Text.literal("FPS Counter is now off").withColor(Color.RED.getRGB()), true); + + } + }); + } +} \ No newline at end of file diff --git a/src/client/java/wtf/hak/survivalfabric/SurvivalFabricDataGenerator.java b/src/client/java/wtf/hak/survivalfabric/SurvivalFabricDataGenerator.java new file mode 100644 index 0000000..b14e2d9 --- /dev/null +++ b/src/client/java/wtf/hak/survivalfabric/SurvivalFabricDataGenerator.java @@ -0,0 +1,11 @@ +package wtf.hak.survivalfabric; + +import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint; +import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator; + +public class SurvivalFabricDataGenerator implements DataGeneratorEntrypoint { + @Override + public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) { + + } +} diff --git a/src/client/java/wtf/hak/survivalfabric/mixin/client/InGameHudMixin.java b/src/client/java/wtf/hak/survivalfabric/mixin/client/InGameHudMixin.java new file mode 100644 index 0000000..09739a7 --- /dev/null +++ b/src/client/java/wtf/hak/survivalfabric/mixin/client/InGameHudMixin.java @@ -0,0 +1,28 @@ +package wtf.hak.survivalfabric.mixin.client; + +import net.minecraft.client.MinecraftClient; +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.DrawContext; +import net.minecraft.client.gui.hud.InGameHud; +import net.minecraft.client.render.RenderTickCounter; +import wtf.hak.survivalfabric.SurvivalFabricClient; + +import java.awt.*; + +@Mixin(InGameHud.class) +public class InGameHudMixin { + + private final int TEXT_COLOR = Color.GRAY.getRGB(); + + @Inject(method = "render", at = @At("RETURN")) + private void renderFPS(DrawContext context, RenderTickCounter tickCounter, CallbackInfo ci) { + if(SurvivalFabricClient.SHOULD_SHOW_FPS) { + MinecraftClient client = MinecraftClient.getInstance(); + context.drawTextWithShadow(client.textRenderer, client.getCurrentFps() + " FPS", 5, 5, TEXT_COLOR); + } + } +} \ No newline at end of file diff --git a/src/client/resources/survivalfabric.client.mixins.json b/src/client/resources/survivalfabric.client.mixins.json new file mode 100644 index 0000000..4059539 --- /dev/null +++ b/src/client/resources/survivalfabric.client.mixins.json @@ -0,0 +1,11 @@ +{ + "required": true, + "package": "wtf.hak.survivalfabric.mixin.client", + "compatibilityLevel": "JAVA_21", + "client": [ + "InGameHudMixin" + ], + "injectors": { + "defaultRequire": 1 + } +} \ No newline at end of file diff --git a/src/main/java/wtf/hak/survivalfabric/mixin/PlayerManagerMixin.java b/src/main/java/wtf/hak/survivalfabric/mixin/PlayerManagerMixin.java index a537fe0..bd88e19 100644 --- a/src/main/java/wtf/hak/survivalfabric/mixin/PlayerManagerMixin.java +++ b/src/main/java/wtf/hak/survivalfabric/mixin/PlayerManagerMixin.java @@ -1,8 +1,10 @@ package wtf.hak.survivalfabric.mixin; +import com.mojang.authlib.minecraft.client.MinecraftClient; import net.minecraft.network.ClientConnection; import net.minecraft.network.message.MessageType; import net.minecraft.network.message.SignedMessage; +import net.minecraft.server.MinecraftServer; import net.minecraft.server.PlayerManager; import net.minecraft.server.network.ConnectedClientData; import net.minecraft.server.network.ServerPlayerEntity; @@ -24,7 +26,7 @@ public abstract class PlayerManagerMixin { @Inject(method = {"onPlayerConnect"}, at = {@At(value = "INVOKE", target = "Lnet/minecraft/server/PlayerManager;broadcast(Lnet/minecraft/text/Text;Z)V")}) public void onPlayerConnect(ClientConnection connection, ServerPlayerEntity player, ConnectedClientData clientData, CallbackInfo ci) { - if(ConfigManager.getConfig().joinMessageEnabled) { + if(ConfigManager.getConfig().joinMessageEnabled && !player.getServer().isSingleplayer()) { Text text = Text.literal(String.format(ConfigManager.getConfig().joinMessage, player.getName().getString())); player.sendMessage(text, false); } diff --git a/src/main/resources/assets/survivalfabric/lang/en_us.json b/src/main/resources/assets/survivalfabric/lang/en_us.json new file mode 100644 index 0000000..db97a8d --- /dev/null +++ b/src/main/resources/assets/survivalfabric/lang/en_us.json @@ -0,0 +1,4 @@ +{ + "category.survivalfabric.utils": "ChirpClient", + "key.survivalfabric.fps": "Toggle FPS" +} \ No newline at end of file diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 5916f25..ea0fb69 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -18,20 +18,27 @@ "main": [ "wtf.hak.survivalfabric.SurvivalFabric" ], + "client": [ + "wtf.hak.survivalfabric.SurvivalFabricClient" + ], "fabric-datagen": [ "wtf.hak.survivalfabric.SurvivalFabricDataGenerator" ] }, "mixins": [ - "survivalfabric.mixins.json" + "survivalfabric.mixins.json", + { + "config": "survivalfabric.client.mixins.json", + "environment": "client" + } ], "depends": { "fabricloader": ">=0.16.10", - "minecraft": "~1.21.4", + "minecraft": "~1.21.5", "java": ">=21", "fabric-api": "*" }, "suggests": { - + "another-mod": "*" } } \ No newline at end of file