diff --git a/build.gradle b/build.gradle index dcf6cd2..189b2cd 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ plugins { - id 'fabric-loom' version '0.12-SNAPSHOT' + id 'fabric-loom' version '1.7-SNAPSHOT' id 'maven-publish' - id 'org.jetbrains.kotlin.jvm' version '1.6.0' + id 'org.jetbrains.kotlin.jvm' version '2.0.20' } repositories{ @@ -13,9 +13,9 @@ repositories{ } } -def kotlinVersion = "1.6.0" -sourceCompatibility = JavaVersion.VERSION_17 -targetCompatibility = JavaVersion.VERSION_17 +def kotlinVersion = "2.0.20" +sourceCompatibility = JavaVersion.VERSION_21 +targetCompatibility = JavaVersion.VERSION_21 archivesBaseName = project.archives_base_name version = project.mod_version @@ -27,7 +27,7 @@ dependencies { mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" - modImplementation "net.fabricmc:fabric-language-kotlin:1.7.0+kotlin.${kotlinVersion}" + modImplementation "net.fabricmc:fabric-language-kotlin:1.12.2+kotlin.${kotlinVersion}" // Fabric API. This is technically optional, but you probably want it anyway. modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" @@ -49,7 +49,7 @@ tasks.withType(JavaCompile) { } task sourcesJar(type: Jar, dependsOn: classes) { - classifier = "sources" + archiveClassifier = "sources" from sourceSets.main.allSource } diff --git a/gradle.properties b/gradle.properties index 6c3eeb5..8b19946 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,13 +2,13 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://modmuss50.me/fabric.html -minecraft_version=1.19 -yarn_mappings=1.19+build.4 -loader_version=0.14.8 +minecraft_version=1.21.1 +yarn_mappings=1.21.1+build.3 +loader_version=0.16.5 # Mod Properties -mod_version=1.0.6 +mod_version=1.0.6+1.21.1 maven_group=com.github.quiltservertools archives_base_name=wires # Dependencies # check this on https://fabricmc.net/versions.html -fabric_version=0.56.3+1.19 \ No newline at end of file +fabric_version=0.105.0+1.21.1 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 329f10c..0d8ab51 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1 +1 @@ -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip diff --git a/src/main/java/net/quiltservertools/wires/mixins/MixinPlayerManager.java b/src/main/java/net/quiltservertools/wires/mixins/MixinPlayerManager.java index 2e81e48..12c291c 100644 --- a/src/main/java/net/quiltservertools/wires/mixins/MixinPlayerManager.java +++ b/src/main/java/net/quiltservertools/wires/mixins/MixinPlayerManager.java @@ -1,5 +1,6 @@ package net.quiltservertools.wires.mixins; +import net.minecraft.server.network.ConnectedClientData; import net.quiltservertools.wires.command.VanishCommand; import com.mojang.authlib.GameProfile; import net.minecraft.network.ClientConnection; @@ -24,8 +25,8 @@ public void checkMaintenanceMode(SocketAddress address, GameProfile profile, Cal cir.setReturnValue(Text.literal("Server is closed for maintenance")); } } - @Inject(method = "onPlayerConnect(Lnet/minecraft/network/ClientConnection;Lnet/minecraft/server/network/ServerPlayerEntity;)V", at = @At("RETURN")) - public void onPlayerConnect(ClientConnection connection, ServerPlayerEntity entity, CallbackInfo ci) { - VanishCommand.INSTANCE.getPlayers().forEach(player -> connection.send(new PlayerListS2CPacket(PlayerListS2CPacket.Action.REMOVE_PLAYER, player))); + @Inject(method = "onPlayerConnect", at = @At("RETURN")) + public void onPlayerConnect(ClientConnection connection, ServerPlayerEntity entity, ConnectedClientData clientData, CallbackInfo ci) { + VanishCommand.INSTANCE.getPlayers().forEach(player -> connection.send(new PlayerListS2CPacket(PlayerListS2CPacket.Action.UPDATE_LISTED, player))); } } diff --git a/src/main/java/net/quiltservertools/wires/mixins/MixinServerPlayNetworkHandler.java b/src/main/java/net/quiltservertools/wires/mixins/MixinServerPlayNetworkHandler.java index d20f303..f1d06d4 100644 --- a/src/main/java/net/quiltservertools/wires/mixins/MixinServerPlayNetworkHandler.java +++ b/src/main/java/net/quiltservertools/wires/mixins/MixinServerPlayNetworkHandler.java @@ -1,5 +1,6 @@ package net.quiltservertools.wires.mixins; +import net.minecraft.network.DisconnectionInfo; import net.quiltservertools.wires.StaffChat; import net.quiltservertools.wires.command.MuteCommands; import net.quiltservertools.wires.command.VanishCommand; @@ -33,7 +34,7 @@ public abstract class MixinServerPlayNetworkHandler { @Inject(method = "onChatMessage(Lnet/minecraft/network/packet/c2s/play/ChatMessageC2SPacket;)V", at = @At("HEAD"), cancellable = true) public void interceptChatMessage(ChatMessageC2SPacket packet, CallbackInfo ci) { Config config = Config.INSTANCE; - String message = packet.getChatMessage(); + String message = packet.chatMessage(); if (config.isPlayerMuted(player.getUuid()) && Permissions.INSTANCE.hasPermission(player.getCommandSource(), MuteCommands.name)) { player.sendMessage(muted); player.sendMessage(Text.literal("Reason: " + (config.getMute(player).isPresent() ? config.getMute(player).get().getReason() : ""))); @@ -48,7 +49,7 @@ public void interceptChatMessage(ChatMessageC2SPacket packet, CallbackInfo ci) { } @Inject(method = "onDisconnected", at = @At("HEAD")) - public void removeFromVanish(Text reason, CallbackInfo ci) { + public void removeFromVanish(DisconnectionInfo info, CallbackInfo ci) { VanishCommand.INSTANCE.removePlayer(this.getPlayer()); } } diff --git a/src/main/java/net/quiltservertools/wires/mixins/MixinServerQueryNetworkHandler.java b/src/main/java/net/quiltservertools/wires/mixins/MixinServerQueryNetworkHandler.java index d9be005..19c7df8 100644 --- a/src/main/java/net/quiltservertools/wires/mixins/MixinServerQueryNetworkHandler.java +++ b/src/main/java/net/quiltservertools/wires/mixins/MixinServerQueryNetworkHandler.java @@ -1,29 +1,36 @@ package net.quiltservertools.wires.mixins; -import net.minecraft.server.MinecraftServer; import net.minecraft.server.ServerMetadata; import net.minecraft.server.network.ServerQueryNetworkHandler; import net.quiltservertools.wires.config.Config; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +import java.util.Optional; + @Mixin(ServerQueryNetworkHandler.class) public abstract class MixinServerQueryNetworkHandler { - @Redirect(method = "onRequest", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/MinecraftServer;getServerMetadata()Lnet/minecraft/server/ServerMetadata;")) - private ServerMetadata showMaintenance(MinecraftServer server) { - var realData = server.getServerMetadata(); - if(Config.INSTANCE.isMaintenanceMode()) { - var metadata = new ServerMetadata(); - metadata.setVersion(new ServerMetadata.Version("Maintenance", -1)); - metadata.setDescription(realData.getDescription()); - metadata.setFavicon(realData.getFavicon()); - metadata.setPlayers(realData.getPlayers()); + @Shadow + @Final + private ServerMetadata metadata; - return metadata; + @Redirect(method = "onRequest", at = @At(value = "FIELD", target = "Lnet/minecraft/server/network/ServerQueryNetworkHandler;metadata:Lnet/minecraft/server/ServerMetadata;")) + private ServerMetadata showMaintenance(ServerQueryNetworkHandler instance) { + + if(Config.INSTANCE.isMaintenanceMode()) { + return new ServerMetadata( + metadata.description(), + metadata.players(), + Optional.of(new ServerMetadata.Version("Maintenance", -1)), + metadata.favicon(), + metadata.secureChatEnforced() + ); } - return realData; + return metadata; } } diff --git a/src/main/kotlin/net/quiltservertools/wires/command/MaintenanceModeCommand.kt b/src/main/kotlin/net/quiltservertools/wires/command/MaintenanceModeCommand.kt index 36c469a..498d58f 100644 --- a/src/main/kotlin/net/quiltservertools/wires/command/MaintenanceModeCommand.kt +++ b/src/main/kotlin/net/quiltservertools/wires/command/MaintenanceModeCommand.kt @@ -9,6 +9,7 @@ import net.minecraft.text.Text import net.minecraft.util.Formatting import net.quiltservertools.wires.config.Config import net.quiltservertools.wires.util.Permissions.hasPermission +import java.util.function.Supplier object MaintenanceModeCommand { @@ -50,7 +51,7 @@ object MaintenanceModeCommand { } } scs.sendFeedback( - Text.literal("Maintenance mode ").append(Text.literal(if (state) "enabled" else "disabled").formatted(if (state) Formatting.RED else Formatting.GREEN)), + { Text.literal("Maintenance mode ").append(Text.literal(if (state) "enabled" else "disabled").formatted(if (state) Formatting.RED else Formatting.GREEN)) }, true ) return 1 diff --git a/src/main/kotlin/net/quiltservertools/wires/command/MuteCommands.kt b/src/main/kotlin/net/quiltservertools/wires/command/MuteCommands.kt index d098789..c706328 100644 --- a/src/main/kotlin/net/quiltservertools/wires/command/MuteCommands.kt +++ b/src/main/kotlin/net/quiltservertools/wires/command/MuteCommands.kt @@ -87,13 +87,13 @@ object MuteCommands { } Config.mute(profile, seconds, reason) scs.sendFeedback( - Text.literal("Muted ${profile.name} for${ + { Text.literal("Muted ${profile.name} for${ if (seconds < 0) { "ever" } else { " ${seconds - Instant.now().epochSecond} seconds" } - }"), + }") }, true ) return 1 @@ -101,7 +101,7 @@ object MuteCommands { private fun unmutePlayer(scs: ServerCommandSource, profile: GameProfile): Int { Config.unmute(profile) scs.sendFeedback( - Text.literal("Unmuted ${profile.name}"), + { Text.literal("Unmuted ${profile.name}") }, true ) return 1 @@ -109,7 +109,7 @@ object MuteCommands { private fun serverMute(scs: ServerCommandSource, time: Long): Int { val serverMuteStatus: Boolean = Config.serverMute(time) - scs.sendFeedback(Text.literal("Server mute ${if (serverMuteStatus) "enabled" else "disabled"}"), true) + scs.sendFeedback({ Text.literal("Server mute ${if (serverMuteStatus) "enabled" else "disabled"}") }, true) return 1 } } \ No newline at end of file diff --git a/src/main/kotlin/net/quiltservertools/wires/command/StaffchatCommand.kt b/src/main/kotlin/net/quiltservertools/wires/command/StaffchatCommand.kt index 574e59c..d40f2dd 100644 --- a/src/main/kotlin/net/quiltservertools/wires/command/StaffchatCommand.kt +++ b/src/main/kotlin/net/quiltservertools/wires/command/StaffchatCommand.kt @@ -22,10 +22,10 @@ object StaffChatCommand { .executes { ctx: CommandContext -> StaffChat.toggle(ctx.source.player!!.uuid) ctx.source.sendFeedback( - Text.literal( + { Text.literal( if (StaffChat.isInStaffChat(ctx.source.player!!.uuid) ) "Moved to staff chat" else "Moved to game chat" - ), false + ) }, false ) 1 } diff --git a/src/main/kotlin/net/quiltservertools/wires/command/VanishCommand.kt b/src/main/kotlin/net/quiltservertools/wires/command/VanishCommand.kt index 57aa1a4..41959cd 100644 --- a/src/main/kotlin/net/quiltservertools/wires/command/VanishCommand.kt +++ b/src/main/kotlin/net/quiltservertools/wires/command/VanishCommand.kt @@ -33,7 +33,7 @@ object VanishCommand { player.addStatusEffect(EFFECT_INSTANCE) player.getServer()!!.playerManager.sendToAll( PlayerListS2CPacket( - PlayerListS2CPacket.Action.REMOVE_PLAYER, + PlayerListS2CPacket.Action.UPDATE_LISTED, player ) ) @@ -68,7 +68,7 @@ object VanishCommand { val player = EntityArgumentType.getPlayer(ctx, "player") addOrRemove(player) ctx.source.sendFeedback( - Text.literal("${if (players.contains(player)) "Vanished" else "Unvanished"} ${player.name.string}"), + { Text.literal("${if (players.contains(player)) "Vanished" else "Unvanished"} ${player.name.string}") }, true ) return 1 diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index bc73411..ca8c849 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -28,10 +28,10 @@ ], "depends": { - "fabricloader": ">=0.14.7", - "fabric": ">=0.56.0", - "minecraft": "1.19.x", - "java": ">=17", + "fabricloader": ">=0.16.5", + "fabric": ">=0.105.0", + "minecraft": "1.21.1", + "java": ">=21", "fabric-language-kotlin": "*" } } diff --git a/src/main/resources/wires.mixins.json b/src/main/resources/wires.mixins.json index f151196..a2a5551 100644 --- a/src/main/resources/wires.mixins.json +++ b/src/main/resources/wires.mixins.json @@ -2,7 +2,7 @@ "required": true, "minVersion": "0.8", "package": "net.quiltservertools.wires.mixins", - "compatibilityLevel": "JAVA_17", + "compatibilityLevel": "JAVA_21", "server": [ ], "injectors": {