summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--build.gradle.kts65
-rw-r--r--buildSrc/build.gradle.kts3
-rw-r--r--root.gradle.kts34
-rw-r--r--settings.gradle.kts1
-rw-r--r--sharedVariables/src/MappingStyle.kt6
-rw-r--r--sharedVariables/src/MinecraftVersion.kt32
-rw-r--r--sharedVariables/src/Versions.kt59
-rw-r--r--src/main/java/moe/nea/ultranotifier/mixin/AccessorChatHudImpl.java23
-rw-r--r--src/main/java/moe/nea/ultranotifier/mixin/AccessorCommandHandler.java18
-rw-r--r--src/main/java/moe/nea/ultranotifier/mixin/ChatHudCategoryTracker.java49
-rw-r--r--src/main/java/moe/nea/ultranotifier/mixin/ChatHudMessageAdded.java23
-rw-r--r--src/main/java/moe/nea/ultranotifier/mixin/ChatScreenTabRenderer.java77
-rw-r--r--src/main/java/moe/nea/ultranotifier/mixin/FilterVisibleMessagePatch.java72
-rw-r--r--src/main/kotlin/AllModules.kt17
-rw-r--r--src/main/kotlin/ChatStore.kt53
-rw-r--r--src/main/kotlin/Constants.kt12
-rw-r--r--src/main/kotlin/UltraNotifier.kt16
-rw-r--r--src/main/kotlin/UltraNotifierEntryPoint.kt4
-rw-r--r--src/main/kotlin/commands/BrigadierPatchbay.kt119
-rw-r--r--src/main/kotlin/commands/Commands.kt51
-rw-r--r--src/main/kotlin/datamodel/ChatType.kt175
-rw-r--r--src/main/kotlin/event/ChatGuiLineEvent.kt8
-rw-r--r--src/main/kotlin/event/CommandRegistrationEvent.kt10
-rw-r--r--src/main/kotlin/event/RegistrationFinishedEvent.kt6
-rw-r--r--src/main/kotlin/event/SubscriptionTarget.kt5
-rw-r--r--src/main/kotlin/event/TickEvent.kt26
-rw-r--r--src/main/kotlin/event/UltraEvent.kt6
-rw-r--r--src/main/kotlin/event/UltraNotifierEvents.kt7
-rw-r--r--src/main/kotlin/event/VisibleChatMessageAddedEvent.kt17
-rw-r--r--src/main/kotlin/gui/ChatUi.kt91
-rw-r--r--src/main/kotlin/gui/MessageUi.kt28
-rw-r--r--src/main/kotlin/gui/ScreenUtil.kt19
-rw-r--r--src/main/kotlin/util/GsonUtil.kt55
-rw-r--r--src/main/kotlin/util/IdentityCharacteristics.kt15
-rw-r--r--src/main/kotlin/util/KSerializable.kt112
-rw-r--r--src/main/kotlin/util/identifierutil.kt11
-rw-r--r--src/main/kotlin/util/iterutil.kt36
-rw-r--r--src/main/kotlin/util/minecrat/MC.kt11
-rw-r--r--src/main/kotlin/util/minecrat/TextUtil.kt70
-rw-r--r--src/main/kotlin/util/minecrat/infer.kt22
-rw-r--r--src/main/kotlin/util/render/ScreenRenderUtils.kt135
-rw-r--r--src/main/resources/assets/ultranotifier/textures/gui/square_panel.pngbin0 -> 711 bytes
-rw-r--r--src/main/resources/fabric.mod.json3
-rw-r--r--versions/mapping-1.12.2-1.8.9.txt (renamed from versions/mapping-1.14.4-1.14.4-forge.txt)0
-rw-r--r--versions/mapping-1.14.4-forge-1.8.9.txt5
-rw-r--r--versions/mapping-1.16.2-fabric-1.16.2-forge.txt (renamed from versions/mapping-1.20.6-1.14.4.txt)0
-rw-r--r--versions/mapping-1.16.2-forge-1.12.2.txt16
48 files changed, 1523 insertions, 101 deletions
diff --git a/.gitignore b/.gitignore
index d4f1e7a..f09dcb6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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;
+//$$ }
+