From dd26b5f3aa8108c3026080c734878e541c4cd05c Mon Sep 17 00:00:00 2001 From: SoniEx2 Date: Fri, 27 Aug 2021 15:53:46 -0300 Subject: [Project] UwU Mode A client-side mod for Minecraft that adds uwu~ to chat messages, and can be enabled/disabled with commands. --- .../space/autistic/uwumode/mixin/UwuMixin.java | 25 +++++++++ src/main/kotlin/space/autistic/uwumode/UwuMode.kt | 65 ++++++++++++++++++++++ src/main/resources/fabric.mod.json | 35 ++++++++++++ src/main/resources/uwumode.mixins.json | 13 +++++ 4 files changed, 138 insertions(+) create mode 100644 src/main/java/space/autistic/uwumode/mixin/UwuMixin.java create mode 100644 src/main/kotlin/space/autistic/uwumode/UwuMode.kt create mode 100644 src/main/resources/fabric.mod.json create mode 100644 src/main/resources/uwumode.mixins.json (limited to 'src/main') diff --git a/src/main/java/space/autistic/uwumode/mixin/UwuMixin.java b/src/main/java/space/autistic/uwumode/mixin/UwuMixin.java new file mode 100644 index 0000000..6719747 --- /dev/null +++ b/src/main/java/space/autistic/uwumode/mixin/UwuMixin.java @@ -0,0 +1,25 @@ +package space.autistic.uwumode.mixin; + +import net.minecraft.client.network.ClientPlayerEntity; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyVariable; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import space.autistic.uwumode.UwuModeKt; + +@Mixin(ClientPlayerEntity.class) +public class UwuMixin { + @ModifyVariable(at = @At(value = "HEAD"), method = "sendChatMessage(Ljava/lang/String;)V", argsOnly = true) + private String sendChatMessage(String chatMessage) { + if (UwuModeKt.getEnabled()) { + if (!chatMessage.startsWith("/")) { + return chatMessage + " uwu~"; + } + } + return chatMessage; + } +} + +// vim: expandtab sw=4 diff --git a/src/main/kotlin/space/autistic/uwumode/UwuMode.kt b/src/main/kotlin/space/autistic/uwumode/UwuMode.kt new file mode 100644 index 0000000..3e98364 --- /dev/null +++ b/src/main/kotlin/space/autistic/uwumode/UwuMode.kt @@ -0,0 +1,65 @@ +package space.autistic.uwumode + +import com.mojang.brigadier.arguments.BoolArgumentType; +import com.mojang.brigadier.arguments.IntegerArgumentType; +import com.mojang.brigadier.context.CommandContext; + +import net.fabricmc.fabric.api.client.command.v1.ClientCommandManager; +import net.fabricmc.fabric.api.client.command.v1.FabricClientCommandSource; +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; + +// For support join https://discord.gg/v6v4pMv + +var enabled = false +var timer = 0 + +fun uwutimer(c: CommandContext): Int { + val time = IntegerArgumentType.getInteger(c, "seconds"); + if (timer != time) { + timer = time*20; + enabled = true; + return 1 + } + return 0 +} + +fun uwumode(c: CommandContext): Int { + val enable = BoolArgumentType.getBool(c, "enable"); + if (timer > 0 || enabled != enable) { + timer = 0; + enabled = enable; + return 1 + } + return 0 +} + +@Suppress("unused") +fun init() { + // This mod is client-only, so this is the client init. + + ClientCommandManager.DISPATCHER.register( + ClientCommandManager.literal("uwu") + .then( + ClientCommandManager.argument( + "seconds", + IntegerArgumentType.integer(0, 0x7FFFFFFF/20) + ).executes(::uwutimer) + ) + .then( + ClientCommandManager.argument( + "enable", + BoolArgumentType.bool() + ).executes(::uwumode) + ) + ); + + ClientTickEvents.START_CLIENT_TICK.register { + if (timer > 0) { + --timer; + if (timer == 0) { + enabled = false; + } + } + }; +} + diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json new file mode 100644 index 0000000..485459c --- /dev/null +++ b/src/main/resources/fabric.mod.json @@ -0,0 +1,35 @@ +{ + "schemaVersion": 1, + "id": "uwumode", + "version": "${version}", + + "name": "UwU Mode", + "description": "Makes your messages end in uwu, with consent.", + "authors": [ + "SoniEx2" + ], + "contact": { + "homepage": "https://autistic.space/", + "sources": "https://soniex2.autistic.space/git-repos/uwumode.git" + }, + + "license": "AGPL-3.0-or-later", + + "environment": "*", + "entrypoints": { + "client": [ + "space.autistic.uwumode.UwuModeKt::init" + ] + }, + "mixins": [ + "uwumode.mixins.json" + ], + "depends": { + "fabricloader": ">=0.8.7", + "fabric": "*", + "fabric-language-kotlin": "*", + "minecraft": "1.17.x" + }, + "suggests": { + } +} diff --git a/src/main/resources/uwumode.mixins.json b/src/main/resources/uwumode.mixins.json new file mode 100644 index 0000000..4eb19dc --- /dev/null +++ b/src/main/resources/uwumode.mixins.json @@ -0,0 +1,13 @@ +{ + "required": true, + "package": "space.autistic.uwumode.mixin", + "compatibilityLevel": "JAVA_8", + "mixins": [ + ], + "client": [ + "UwuMixin" + ], + "injectors": { + "defaultRequire": 1 + } +} -- cgit 1.4.1