diff options
48 files changed, 1523 insertions, 101 deletions
@@ -6,3 +6,4 @@ versions/*/build/ versions/*/run/ .env .properties +.kotlin diff --git a/build.gradle.kts b/build.gradle.kts index 5feb95d..9bec6d0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,4 +1,5 @@ import com.replaymod.gradle.preprocess.PreprocessExtension +import moe.nea.sharedbuild.MinecraftVersion import moe.nea.sharedbuild.Versions import moe.nea.sharedbuild.parseEnvFile import net.fabricmc.loom.api.LoomGradleExtensionAPI @@ -9,6 +10,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { id("java") kotlin("jvm") + id("com.google.devtools.ksp") id("com.github.johnrengelman.shadow") } @@ -16,7 +18,7 @@ val version = Versions.values().find { it.projectPath == project.path }!! if (version.forgeDep != null) extra.set("loom.platform", "forge") apply(plugin = "gg.essential.loom") -apply(plugin = "com.replaymod.preprocess") +apply(plugin = "dev.deftu.gradle.preprocess") val loom = the<LoomGradleExtensionAPI>() val preprocess = the<PreprocessExtension>() @@ -27,42 +29,20 @@ if (version.needsPack200) { if (version.forgeDep != null) { loom.forge.mixinConfig("mixins.ultranotifier.json") } -val mcJavaVersion = JavaLanguageVersion.of( - when { - version.numericMinecraftVersion >= 12005 -> 21 - version.numericMinecraftVersion >= 11800 -> 17 - version.numericMinecraftVersion >= 11700 -> 16 - else -> 8 - } -) -loom.mixin.defaultRefmapName.set("mixins.ultranotifier.refmap.json") +val mcJavaVersion = version.minecraftVersion.javaLanguageVersion +//loom.mixin.defaultRefmapName.set("mixins.ultranotifier.refmap.json") java.toolchain.languageVersion.set(mcJavaVersion) preprocess.run { - vars.put("MC", version.numericMinecraftVersion) + vars.put("MC", version.minecraftVersion.versionNumber) vars.put("FORGE", if ((version.forgeDep != null)) 1 else 0) + vars.put("FABRIC", if ((version.forgeDep != null)) 0 else 1) vars.put("JAVA", mcJavaVersion.asInt()) } - -repositories { - mavenCentral() - maven("https://maven.minecraftforge.net") { - metadataSources { - artifact() - } - } - maven("https://repo.spongepowered.org/maven/") - maven("https://pkgs.dev.azure.com/djtheredstoner/DevAuth/_packaging/public/maven/v1") - maven("https://jitpack.io") { - content { - includeGroupByRegex("(io|com)\\.github\\..+") - } - } -} - loom.run { this.runs { this.removeIf { it.name != "client" } this.named("client") { + ideConfigGenerated(true) parseEnvFile(file(".env")).forEach { (t, u) -> this.environmentVariable(t, u) } @@ -70,7 +50,7 @@ loom.run { this.property(t, u) } this.property("mixin.debug", "true") - if (version == Versions.MC189) { + if (version.minecraftVersion <= MinecraftVersion.MC11202) { this.programArgs("--tweakClass", "org.spongepowered.asm.launch.MixinTweaker") } } @@ -83,11 +63,14 @@ val shadowImpl by configurations.creating { val shadowModImpl by configurations.creating { modImplementation.extendsFrom(this) } -val include = if (version.forgeDep != null) configurations.getByName("include") else shadowModImpl +val include = if (version.forgeDep != null) configurations.create("includeModImpl") { + configurations.getByName("include").extendsFrom(this) + modImplementation.extendsFrom(this) +} else shadowModImpl val devauthVersion = "1.1.2" dependencies { - "minecraft"("com.mojang:minecraft:" + version.minecraftVersion) - "mappings"(version.mappingDependency) + "minecraft"("com.mojang:minecraft:" + version.minecraftVersion.versionName) + "mappings"(if (version.mappingDependency == "official") loom.officialMojangMappings() else version.mappingDependency) if (version.forgeDep != null) { "forge"(version.forgeDep!!) runtimeOnly("me.djtheredstoner:DevAuth-forge-legacy:$devauthVersion") @@ -96,17 +79,21 @@ dependencies { modImplementation("net.fabricmc.fabric-api:fabric-api:${version.fabricVersion!!}") runtimeOnly("me.djtheredstoner:DevAuth-fabric:$devauthVersion") } + runtimeOnly("com.google.guava:guava:17.0") + implementation(kotlin("reflect")) shadowImpl("com.github.therealbush:eventbus:1.0.2") - if (version.numericMinecraftVersion < 11300) { + include(version.universalCraft) + shadowImpl("io.github.juuxel:libninepatch:1.2.0") + if (version.minecraftVersion.versionNumber < 11300) { shadowImpl("com.mojang:brigadier:1.0.18") } - if (version <= Versions.MC11404F) { + if (version.forgeDep != null) { shadowImpl("org.spongepowered:mixin:0.7.11-SNAPSHOT") { isTransitive = false } annotationProcessor("org.spongepowered:mixin:0.8.5-SNAPSHOT") annotationProcessor("com.google.code.gson:gson:2.10.1") - annotationProcessor("com.google.guava:guava:17.0") + annotationProcessor("com.google.guava:guava:33.4.0-jre") } } @@ -140,7 +127,7 @@ tasks.shadowJar { tasks.processResources { inputs.property("java", mcJavaVersion.asInt().toString()) - inputs.property("mcVersion", version.minecraftVersion) + inputs.property("mcVersion", version.minecraftVersion.versionName) inputs.property("version", project.version.toString()) inputs.property("modName", "Ultra Notifier") inputs.property("description", "Ultra Notifications") @@ -149,7 +136,7 @@ tasks.processResources { } if (version.forgeDep != null) { exclude("fabric.mod.json") - if (version.numericMinecraftVersion < 11400) { + if (version.minecraftVersion < MinecraftVersion.MC1144) { exclude("META-INF/mods.toml") } else { exclude("mcmod.info") @@ -172,11 +159,11 @@ tasks.named("runClient", RunGameTask::class) { }) } -if (version.isBridge) { +if (version == Versions.MC116Forge) { tasks.withType<JavaCompile> { onlyIf { false } } tasks.withType<KotlinCompile> { onlyIf { false } } -} +}
\ No newline at end of file diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index d54cae9..e118815 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -7,4 +7,5 @@ repositories { } dependencies { implementation("com.google.code.gson:gson:2.10.1") -}
\ No newline at end of file + implementation("com.google.guava:guava:33.2.1-jre") +} diff --git a/root.gradle.kts b/root.gradle.kts index d7f638d..94f4f55 100644 --- a/root.gradle.kts +++ b/root.gradle.kts @@ -2,9 +2,10 @@ import com.replaymod.gradle.preprocess.Node import moe.nea.sharedbuild.Versions plugins { - id("com.replaymod.preprocess") version "b09f534" + id("dev.deftu.gradle.preprocess") version "0.7.1" // id("fabric-loom") version "1.6-SNAPSHOT" apply false - kotlin("jvm") version "1.9.23" apply false + kotlin("jvm") version "2.0.20" apply false + id("com.google.devtools.ksp") version "2.0.20-1.0.24" apply false id("gg.essential.loom") version "1.6.+" apply false id("dev.architectury.architectury-pack200") version "0.1.3" id("com.github.johnrengelman.shadow") version "8.1.1" apply false @@ -13,15 +14,40 @@ plugins { allprojects { version = "1.0.0" group = "moe.nea.rxcraft" + repositories { + mavenCentral() + maven("https://maven.minecraftforge.net") { + metadataSources { + artifact() + } + } + maven("https://repo.spongepowered.org/maven/") + maven("https://pkgs.dev.azure.com/djtheredstoner/DevAuth/_packaging/public/maven/v1") + maven("https://jitpack.io") { + content { + includeGroupByRegex("(io|com)\\.github\\..+") + } + } + maven("https://repo.essential.gg/repository/maven-public") + } } preprocess { + strictExtraMappings.set(true) val nodes = mutableMapOf<Versions, Node>() Versions.values().forEach { version -> - nodes[version] = createNode(version.projectName, version.numericMinecraftVersion, version.mappingStyle) + nodes[version] = + createNode(version.projectName, version.minecraftVersion.versionNumber, version.mappingStyle.identifier) } Versions.values().forEach { child -> val parent = child.parent ?: return@forEach - nodes[parent]!!.link(nodes[child]!!, file("versions/mapping-${parent.projectName}-${child.projectName}.txt")) + val mappingFile = file("versions/mapping-${parent.projectName}-${child.projectName}.txt") + if (mappingFile.exists()) { + println("Using mapping file $mappingFile") + nodes[parent]!!.link(nodes[child]!!, mappingFile) + } else { + nodes[parent]!!.link(nodes[child]!!) + println("Skipping mapping file $mappingFile") + } } }
\ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 3f927a5..4a20c6e 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -14,6 +14,7 @@ pluginManagement { maven("https://maven.minecraftforge.net/") maven("https://repo.spongepowered.org/maven/") maven("https://repo.sk1er.club/repository/maven-releases/") + maven("https://maven.deftu.dev/releases") } resolutionStrategy { eachPlugin { diff --git a/sharedVariables/src/MappingStyle.kt b/sharedVariables/src/MappingStyle.kt new file mode 100644 index 0000000..deb7fe8 --- /dev/null +++ b/sharedVariables/src/MappingStyle.kt @@ -0,0 +1,6 @@ +package moe.nea.sharedbuild + +enum class MappingStyle(val identifier: String) { + SEARGE("srg"), + YARN("yarn"), +} diff --git a/sharedVariables/src/MinecraftVersion.kt b/sharedVariables/src/MinecraftVersion.kt new file mode 100644 index 0000000..a9e8851 --- /dev/null +++ b/sharedVariables/src/MinecraftVersion.kt @@ -0,0 +1,32 @@ +package moe.nea.sharedbuild + +import org.gradle.jvm.toolchain.JavaLanguageVersion + +enum class MinecraftVersion( + val versionName: String, +) { + MC189("1.8.9"), + MC11200("1.12"), + MC11202("1.12.2"), + MC1144("1.14.4"), + MC11602("1.16.2"), + MC11605("1.16.5"), + MC12006("1.20.6"), + MC121("1.21"), + ; + + val versionNumber = run { + val parts = versionName.split('.').mapTo(mutableListOf()) { it.toInt() } + if (parts.size == 2) parts.add(0) + require(parts.size == 3) + parts[0] * 10000 + parts[1] * 100 + parts[2] + } + val javaVersion: Int = when { + versionNumber >= 12005 -> 21 + versionNumber >= 11800 -> 17 + versionNumber >= 11700 -> 16 + else -> 8 + } + val javaLanguageVersion = JavaLanguageVersion.of(javaVersion) + +} diff --git a/sharedVariables/src/Versions.kt b/sharedVariables/src/Versions.kt index bfccd3a..895ceba 100644 --- a/sharedVariables/src/Versions.kt +++ b/sharedVariables/src/Versions.kt @@ -5,32 +5,61 @@ private fun yarn(version: String): String = enum class Versions( val projectName: String, - val mappingStyle: String, - val minecraftVersion: String, + val minecraftVersion: MinecraftVersion, val mappingDependency: String, - parentName: String?, + val mappingStyle: MappingStyle, val forgeDep: String?, - val needsPack200: Boolean, - val isBridge: Boolean, - val fabricVersion: String? = null, + parentName: String?, ) { - MC189("1.8.9", "srg", "1.8.9", "de.oceanlabs.mcp:mcp_stable:22-1.8.9@zip", "MC11404F", "net.minecraftforge:forge:1.8.9-11.15.1.2318-1.8.9", true, false), - MC11404F("1.14.4-forge", "srg", "1.14.4", "de.oceanlabs.mcp:mcp_stable:58-1.14.4@zip", "MC11404", "net.minecraftforge:forge:1.14.4-28.1.113", false, true), - MC11404("1.14.4", "yarn", "1.14.4", yarn("1.14.4+build.1"), "MC12006", null, false, true, fabricVersion = "0.23.2+1.14"), - MC12006("1.20.6", "yarn", "1.20.6", yarn("1.20.6+build.1"), null, null, false, false, fabricVersion = "0.99.0+1.20.6"), + MC189("1.8.9", + MinecraftVersion.MC189, + "de.oceanlabs.mcp:mcp_stable:22-1.8.9@zip", + MappingStyle.SEARGE, + "net.minecraftforge:forge:1.8.9-11.15.1.2318-1.8.9", + null, + "MC11202"), + MC11202("1.12.2", + MinecraftVersion.MC11202, + "de.oceanlabs.mcp:mcp_stable:39-1.12@zip", + MappingStyle.SEARGE, + "net.minecraftforge:forge:1.12.2-14.23.5.2847", + null, + "MC116Forge"), + MC116Forge("1.16.2-forge", + MinecraftVersion.MC11602, + "official", + MappingStyle.SEARGE, + "net.minecraftforge:forge:1.16.2-33.0.61", + null, + "MC116Fabric"), + MC116Fabric("1.16.2-fabric", + MinecraftVersion.MC11602, + yarn("1.16.2+build.47"), + MappingStyle.YARN, + null, + "0.42.0+1.16", + "MC12006" + ), + MC12006( + "1.20.6", + MinecraftVersion.MC12006, + yarn("1.20.6+build.1"), + MappingStyle.YARN, + null, + fabricVersion = "0.99.0+1.20.6", + null, + ), ; + val platformName = if (forgeDep == null) "fabric" else "forge" + val universalCraft = "gg.essential:universalcraft-${minecraftVersion.versionName}-$platformName:369" + val needsPack200 = forgeDep != null && minecraftVersion <= MinecraftVersion.MC11202 val parent: Versions? by lazy { if (parentName == null) null else Versions.values().find { it.name == parentName }!! } - val numericMinecraftVersion = run { - require(minecraftVersion.count { it == '.' } == 2) - val (a, b, c) = minecraftVersion.split(".").map { it.toInt() } - a * 10000 + b * 100 + c - } val projectPath get() = ":$projectName" companion object { diff --git a/src/main/java/moe/nea/ultranotifier/mixin/AccessorChatHudImpl.java b/src/main/java/moe/nea/ultranotifier/mixin/AccessorChatHudImpl.java new file mode 100644 index 0000000..ec30dcf --- /dev/null +++ b/src/main/java/moe/nea/ultranotifier/mixin/AccessorChatHudImpl.java @@ -0,0 +1,23 @@ +package moe.nea.ultranotifier.mixin; + +import moe.nea.ultranotifier.util.minecrat.AccessorChatHud; +import net.minecraft.client.gui.hud.ChatHud; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(ChatHud.class) +public abstract class AccessorChatHudImpl implements AccessorChatHud { + + //#if MC>1.17 + @Shadow + protected abstract int getLineHeight(); + //#endif + @Override + public int getLineHeight_ultranotifier() { + //#if MC>1.17 + return getLineHeight(); + //#else + //$$return 9; // TODO: better typing here + //#endif + } +} diff --git a/src/main/java/moe/nea/ultranotifier/mixin/AccessorCommandHandler.java b/src/main/java/moe/nea/ultranotifier/mixin/AccessorCommandHandler.java new file mode 100644 index 0000000..9218421 --- /dev/null +++ b/src/main/java/moe/nea/ultranotifier/mixin/AccessorCommandHandler.java @@ -0,0 +1,18 @@ +package moe.nea.ultranotifier.mixin; + +//#if FORGE +//$$import net.minecraft.command.CommandHandler; +//$$import net.minecraft.command.ICommand; +//$$import org.jetbrains.annotations.NotNull; +//$$import org.spongepowered.asm.mixin.Mixin; +//$$import org.spongepowered.asm.mixin.gen.Accessor; +//$$ +//$$import java.util.Set; +//$$ +//$$@Mixin(CommandHandler.class) +//$$public interface AccessorCommandHandler { +//$$ @Accessor("commandSet") +//$$ @NotNull +//$$ Set<@NotNull ICommand> getCommandSet_ultraNotifier(); +//$$} +//#endif
\ No newline at end of file diff --git a/src/main/java/moe/nea/ultranotifier/mixin/ChatHudCategoryTracker.java b/src/main/java/moe/nea/ultranotifier/mixin/ChatHudCategoryTracker.java new file mode 100644 index 0000000..6205506 --- /dev/null +++ b/src/main/java/moe/nea/ultranotifier/mixin/ChatHudCategoryTracker.java @@ -0,0 +1,49 @@ +package moe.nea.ultranotifier.mixin; + +import moe.nea.ultranotifier.datamodel.CategorizedChatLine; +import moe.nea.ultranotifier.datamodel.ChatCategoryArbiter; +import moe.nea.ultranotifier.datamodel.HasCategorizedChatLine; +import net.minecraft.client.gui.hud.ChatHudLine; +import net.minecraft.text.Text; +import org.jetbrains.annotations.NotNull; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +//#if MC> 1.20 +import net.minecraft.client.gui.hud.MessageIndicator; +import net.minecraft.network.message.MessageSignatureData; +//#endif + +@Mixin(ChatHudLine.class) +public class ChatHudCategoryTracker<T> implements HasCategorizedChatLine { + @Unique + CategorizedChatLine categorizedSelf; + + @Inject(method = "<init>", at = @At("RETURN")) + private void onInit( + int creationTick, + //#if MC>1.20 + Text content, + //#elseif MC<1.16 + //$$net.minecraft.util.text.ITextComponent content, + //$$int weird, + //#else + //$$T content, + //$$int weird, + //#endif + //#if MC>1.20 + MessageSignatureData signature, MessageIndicator tag, + //#endif + CallbackInfo ci + ) { + categorizedSelf = ChatCategoryArbiter.INSTANCE.categorize((Text)content); + } + + @Override + public @NotNull CategorizedChatLine getCategorizedChatLine_ultraNotifier() { + return categorizedSelf; + } +} diff --git a/src/main/java/moe/nea/ultranotifier/mixin/ChatHudMessageAdded.java b/src/main/java/moe/nea/ultranotifier/mixin/ChatHudMessageAdded.java index 2b65282..d7ed298 100644 --- a/src/main/java/moe/nea/ultranotifier/mixin/ChatHudMessageAdded.java +++ b/src/main/java/moe/nea/ultranotifier/mixin/ChatHudMessageAdded.java @@ -3,7 +3,7 @@ package moe.nea.ultranotifier.mixin; import moe.nea.ultranotifier.event.ChatGuiLineEvent; import moe.nea.ultranotifier.event.UltraNotifierEvents; import net.minecraft.client.gui.hud.ChatHud; -//#if MC > 11404 +//#if MC >= 1.20 import net.minecraft.client.gui.hud.MessageIndicator; import net.minecraft.network.message.MessageSignatureData; //#endif @@ -18,25 +18,26 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; ) public class ChatHudMessageAdded { @Inject( -//#if MC <= 11404 -//#if FORGE -//$$ method = "printChatMessageWithOptionalDeletion", -//#else -//$$ method = "addMessage(Lnet/minecraft/text/Text;I)V", -//#endif -//#else +//#if MC >= 1.20 method = "addMessage(Lnet/minecraft/text/Text;Lnet/minecraft/network/message/MessageSignatureData;Lnet/minecraft/client/gui/hud/MessageIndicator;)V", +//#elseif MC >= 1.16 +//$$ method = "addMessage(Lnet/minecraft/text/Text;IIZ)V", +//#else +//$$ method = "printChatMessageWithOptionalDeletion", //#endif at = @At("HEAD"), cancellable = true) private void onAddMessage( Text message, -//#if MC <= 11404 -//$$ int chatLineId, -//#else +//#if MC >= 1.20 MessageSignatureData signatureData, MessageIndicator indicator, +//#elseif MC >= 1.16 +//$$ int chatLineId, int timestamp, boolean bl, +//#else +//$$ int chatLineId, //#endif CallbackInfo ci ) { + // TODO: in this method prevent messages from being flushed (to preserve more history) if (UltraNotifierEvents.post(new ChatGuiLineEvent(message)).isCancelled()) { ci.cancel(); } diff --git a/src/main/java/moe/nea/ultranotifier/mixin/ChatScreenTabRenderer.java b/src/main/java/moe/nea/ultranotifier/mixin/ChatScreenTabRenderer.java new file mode 100644 index 0000000..972e40c --- /dev/null +++ b/src/main/java/moe/nea/ultranotifier/mixin/ChatScreenTabRenderer.java @@ -0,0 +1,77 @@ +package moe.nea.ultranotifier.mixin; + +import moe.nea.ultranotifier.gui.ChatUi; +import moe.nea.ultranotifier.util.render.ScreenRenderUtils; +import net.minecraft.client.gui.screen.ChatScreen; +import org.objectweb.asm.Opcodes; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +//#if MC>1.16 +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.util.math.MatrixStack; +//#endif + +@Mixin(ChatScreen.class) +public abstract class ChatScreenTabRenderer { + + private ChatUi chatUi_ultraNotifier = new ChatUi((ChatScreen) (Object) this); + + @Unique + ChatUi chatUi() {return chatUi_ultraNotifier;} + + @Inject( +//#if MC > 1.16 + method = "render", +//#else +//$$ method="drawScreen", +//#endif + at = @At("HEAD")) + private void onRender( +//#if MC >1.20 + DrawContext context, +//#elseif MC > 1.16 +//$$ MatrixStack context, +//#endif + int mouseX, int mouseY, + float delta, + CallbackInfo ci) { + chatUi().renderButtons( + ScreenRenderUtils.umatrix( + //#if MC > 1.16 + context + //#endif + ), + mouseX, mouseY + ); + } + + @Inject( + method = "mouseClicked", + at = @At(value = "INVOKE", + //#if MC > 1.16 + target = "Lnet/minecraft/client/gui/screen/Screen;mouseClicked(DDI)Z", + //#else + //$$target = "Lnet/minecraft/client/gui/GuiScreen;mouseClicked(III)V", + //#endif + opcode = Opcodes.INVOKESPECIAL) + ) + private void onMouseClick( + //#if MC > 1.16 + double mouseX, double mouseY, + //#else + //$$int mouseX, int mouseY, + //#endif + int button, + //#if MC > 1.16 + CallbackInfoReturnable<Boolean> cir + //#else + //$$CallbackInfo cir + //#endif + ) { + chatUi().clickMouse(mouseX, mouseY, button); + } +} diff --git a/src/main/java/moe/nea/ultranotifier/mixin/FilterVisibleMessagePatch.java b/src/main/java/moe/nea/ultranotifier/mixin/FilterVisibleMessagePatch.java new file mode 100644 index 0000000..22e06b5 --- /dev/null +++ b/src/main/java/moe/nea/ultranotifier/mixin/FilterVisibleMessagePatch.java @@ -0,0 +1,72 @@ +package moe.nea.ultranotifier.mixin; + +import moe.nea.ultranotifier.event.UltraNotifierEvents; +import moe.nea.ultranotifier.event.VisibleChatMessageAddedEvent; +import net.minecraft.client.gui.hud.ChatHud; +import net.minecraft.client.gui.hud.ChatHudLine; +import net.minecraft.text.Text; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyVariable; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; + +import java.util.Collections; +import java.util.List; + +@Mixin(ChatHud.class) +public class FilterVisibleMessagePatch { +//#if MC > 1.18 + @Inject( + method = "addVisibleMessage", + at = @At("HEAD"), + cancellable = true + ) + private void onAddVisibleMessage(ChatHudLine message, CallbackInfo ci) { + if (UltraNotifierEvents.post(new VisibleChatMessageAddedEvent(message)).isCancelled()) { + ci.cancel(); + } + } +//#else +//$$ @Unique +//$$ ChatHudLine lastAddedChatLine; +//$$ +//$$ @Inject(method = "reset()V", +//$$ at = @At(value = "INVOKE", +//$$ target = "Lnet/minecraft/client/gui/hud/ChatHud;addMessage(Lnet/minecraft/text/Text;IIZ)V"), +//$$ locals = LocalCapture.CAPTURE_FAILHARD) +//$$ private void saveMessageAboutToBeRefreshed(CallbackInfo ci, int i, ChatHudLine chatLine) { +//$$ lastAddedChatLine = chatLine; +//$$ } + |
