From c9f5f09f9b97de80fbccf8b024bbbe9690a291c4 Mon Sep 17 00:00:00 2001 From: itsusinn Date: Sat, 30 Apr 2022 14:23:59 +0800 Subject: [PATCH] feat: support 1.17 --- 1_17/build.gradle.kts | 52 +++++++++++ 1_17/build.sh | 91 +++++++++++++++++++ .../meowcat/mesagisto/fabric/impl/ChatImpl.kt | 5 +- .../fabric/mixin/ServerChatMixin.java | 31 +++++++ .../org.meowcat.mesagisto.fabric.api.IChat | 1 + 1_17/src/main/resources/fabric.mod.json | 28 ++++++ 1_17/src/main/resources/mesagisto.mixins.json | 12 +++ 7 files changed, 218 insertions(+), 2 deletions(-) create mode 100644 1_17/build.gradle.kts create mode 100644 1_17/build.sh rename {1_16_5 => 1_17}/src/main/java/org/meowcat/mesagisto/fabric/impl/ChatImpl.kt (75%) create mode 100644 1_17/src/main/java/org/meowcat/mesagisto/fabric/mixin/ServerChatMixin.java create mode 100644 1_17/src/main/resources/META-INF/services/org.meowcat.mesagisto.fabric.api.IChat create mode 100644 1_17/src/main/resources/fabric.mod.json create mode 100644 1_17/src/main/resources/mesagisto.mixins.json diff --git a/1_17/build.gradle.kts b/1_17/build.gradle.kts new file mode 100644 index 0000000..5a9a005 --- /dev/null +++ b/1_17/build.gradle.kts @@ -0,0 +1,52 @@ +import io.itsusinn.pkg.pkgIn + +plugins { + java + id("fabric-loom") + id("org.jetbrains.kotlin.jvm") + id("org.jetbrains.kotlin.plugin.serialization") + id("com.github.johnrengelman.shadow") + id("io.itsusinn.pkg") +} +pkg { + excludePath("mappings/*") + excludePath("META-INF/*.kotlin_module") + excludePath("*.md") + excludePath("DebugProbesKt.bin") + shadowJar { + tasks.remapJar { + val task = this@shadowJar + dependsOn(task) + mustRunAfter(task) + +// this.inputFile.set(task.outputs.files.singleFile) + this.input.set(task.outputs.files.singleFile) + // 这里需要借助fabric-loom进行remap + } + minimize() + } + relocateKotlinxLib() + relocateKotlinStdlib() +} +tasks { + processResources { + inputs.property("version", project.version) + filesMatching("fabric.mod.json") { + expand(mutableMapOf("version" to project.version)) + } + } +} + +dependencies { + modImplementation("net.fabricmc:fabric-loader:0.12.2") + modImplementation("net.fabricmc.fabric-api:fabric-api:0.29.3+1.17") + + minecraft("com.mojang:minecraft:1.17") + mappings("net.fabricmc:yarn:1.17+build.6:v2") + + pkgIn(project(":common")) + pkgIn("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0") + pkgIn("io.nats:jnats:2.14.0") + pkgIn("org.meowcat:mesagisto-client-jvm:1.3.0") + pkgIn("com.charleskorn.kaml:kaml:0.43.0") +} diff --git a/1_17/build.sh b/1_17/build.sh new file mode 100644 index 0000000..2565f4e --- /dev/null +++ b/1_17/build.sh @@ -0,0 +1,91 @@ +compile(){ + rm -rf packages + mkdir -p packages + rm build/libs/*-dev.jar + mv build/libs/*.jar packages/ + mv packages/*.jar packages/all.jar +} +extract(){ + rm -rf extract + mkdir -p extract + unzip packages/all.jar -d extract/ > /dev/null +} +linux-x86_64(){ + target=target/linux-x86_64 + name=linux-x86_64.jar + + mkdir -p $target/extract $target/tmp + cp -r extract $target + # rocksdb + mv $target/extract/librocksdbjni-linux64.so $target/tmp + rm $target/extract/librocksdbjni* + mv $target/tmp/librocksdbjni-linux64.so $target/extract + # package + jar -c -f packages/$name -C $target/extract/ . + rm -rf $target +} +linux-x86(){ + target=target/linux-x86 + name=linux-x86.jar + + mkdir -p $target/extract $target/tmp + cp -r extract $target + # rocksdb + mv $target/extract/librocksdbjni-linux32.so $target/tmp + rm $target/extract/librocksdbjni* + mv $target/tmp/librocksdbjni-linux32*.so $target/extract + # package + jar -c -f packages/$name -C $target/extract/ . + rm -rf $target +} +windows-x86_64(){ + target=target/windows-x86_64 + name=windows-x86_64.jar + + mkdir -p $target/extract $target/tmp + cp -r extract $target + # rocksdb + mv $target/extract/librocksdbjni-win64.dll $target/tmp + rm $target/extract/librocksdbjni* + mv $target/tmp/librocksdbjni-win64.dll $target/extract + # package + jar -c -f packages/$name -C $target/extract/ . + rm -rf $target +} +mac-x86_64(){ + target=target/mac-x86_64 + name=mac-x86_64.jar + + mkdir -p $target/extract $target/tmp + cp -r extract $target + # rocksdb + mv $target/extract/librocksdbjni-osx-x86_64.jnilib $target/tmp + rm $target/extract/librocksdbjni* + mv $target/tmp/librocksdbjni-osx-x86_64.jnilib $target/extract + # package + jar -c -f packages/$name -C $target/extract/ . + rm -rf $target +} +all_target(){ + linux-x86_64 + linux-x86 + windows-x86_64 + mac-x86_64 + cd packages + prefix=fabric-1.17- + for files in $(ls *.jar) + do mv $files $prefix$files + done + cd .. +} +clean(){ + rm -rf extract target +} +build(){ + compile + extract + all_target + clean +} +build + diff --git a/1_16_5/src/main/java/org/meowcat/mesagisto/fabric/impl/ChatImpl.kt b/1_17/src/main/java/org/meowcat/mesagisto/fabric/impl/ChatImpl.kt similarity index 75% rename from 1_16_5/src/main/java/org/meowcat/mesagisto/fabric/impl/ChatImpl.kt rename to 1_17/src/main/java/org/meowcat/mesagisto/fabric/impl/ChatImpl.kt index a367efe..9e69c3d 100644 --- a/1_16_5/src/main/java/org/meowcat/mesagisto/fabric/impl/ChatImpl.kt +++ b/1_17/src/main/java/org/meowcat/mesagisto/fabric/impl/ChatImpl.kt @@ -7,11 +7,12 @@ import org.meowcat.mesagisto.fabric.api.IChat import java.util.* // ktlint-disable no-wildcard-imports class ChatImpl : IChat { + private lateinit var server: MinecraftServer override fun setServer(server: MinecraftServer) { - TODO("Not yet implemented") + this.server = server } override fun broadcastMessage(message: Text, type: MessageType, senderUuid: UUID) { - TODO("Not yet implemented") + server.playerManager.broadcastChatMessage(message, type, senderUuid) } } diff --git a/1_17/src/main/java/org/meowcat/mesagisto/fabric/mixin/ServerChatMixin.java b/1_17/src/main/java/org/meowcat/mesagisto/fabric/mixin/ServerChatMixin.java new file mode 100644 index 0000000..685e5e7 --- /dev/null +++ b/1_17/src/main/java/org/meowcat/mesagisto/fabric/mixin/ServerChatMixin.java @@ -0,0 +1,31 @@ +package org.meowcat.mesagisto.fabric.mixin; + +import net.minecraft.server.network.ServerPlayNetworkHandler; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.server.filter.TextStream.Message; +import org.meowcat.mesagisto.fabric.Mod; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(ServerPlayNetworkHandler.class) +public abstract class ServerChatMixin { + @Shadow + public ServerPlayerEntity player; + + @Inject( + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/server/PlayerManager;broadcast(Lnet/minecraft/text/Text;Ljava/util/function/Function;Lnet/minecraft/network/MessageType;Ljava/util/UUID;)V" + ), + method = "handleMessage", + cancellable = true + ) + private void handleMessage(Message message, CallbackInfo ci) { + ServerPlayerEntity player = this.player; + String content = message.getRaw(); + Mod.INSTANCE.onServerChat(player, content); + } +} diff --git a/1_17/src/main/resources/META-INF/services/org.meowcat.mesagisto.fabric.api.IChat b/1_17/src/main/resources/META-INF/services/org.meowcat.mesagisto.fabric.api.IChat new file mode 100644 index 0000000..1d0d6e2 --- /dev/null +++ b/1_17/src/main/resources/META-INF/services/org.meowcat.mesagisto.fabric.api.IChat @@ -0,0 +1 @@ +org.meowcat.mesagisto.fabric.impl.ChatImpl diff --git a/1_17/src/main/resources/fabric.mod.json b/1_17/src/main/resources/fabric.mod.json new file mode 100644 index 0000000..65c364b --- /dev/null +++ b/1_17/src/main/resources/fabric.mod.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "id": "mesagisto", + "version": "${version}", + + "name": "Mesagisto Mod", + "description": "Mesagisto: A message forwarding program connecting different instant-message platforms. 信使: 一款连接不同即时通讯平台的消息转发程序。 ", + "authors": [ + "Itsusinn" + ], + "contact": { + "homepage": "https://github.com/MeowCat-Studio/mesagisto", + "sources": "https://github.com/MeowCat-Studio/fabric-message-source" + }, + "mixins": [ + "mesagisto.mixins.json" + ], + "environment": "*", + "license": "LGPLv2", + "entrypoints": { + "main": ["org.meowcat.mesagisto.fabric.ModAdapter"] + }, + "depends": { + "fabricloader": ">=0.12.2", + "fabric": "*", + "minecraft": "1.17.*" + } +} diff --git a/1_17/src/main/resources/mesagisto.mixins.json b/1_17/src/main/resources/mesagisto.mixins.json new file mode 100644 index 0000000..14e79e5 --- /dev/null +++ b/1_17/src/main/resources/mesagisto.mixins.json @@ -0,0 +1,12 @@ +{ + "required": true, + "package": "org.meowcat.mesagisto.fabric.mixin", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "ServerChatMixin" + ], + "injectors": { + "defaultRequire": 1 + }, + "refmap": "1_17-refmap.json" +} \ No newline at end of file