From da64c528fa37f4b6f76a718c5c5e91152e512807 Mon Sep 17 00:00:00 2001 From: BlueZeeKing Date: Thu, 16 Jun 2022 20:32:38 -0400 Subject: [PATCH 1/4] Backport to 1.18.2 --- gradle.properties | 6 +- .../java/io/icker/factions/FactionsMod.java | 21 ++---- .../icker/factions/command/SafeCommand.java | 4 +- .../factions/command/SettingsCommand.java | 3 +- .../io/icker/factions/core/ChatManager.java | 66 +++++++++---------- .../mixin/ServerPlayNetworkHandlerMixin.java | 55 ++++------------ .../java/io/icker/factions/util/Command.java | 13 ++-- .../java/io/icker/factions/util/Message.java | 4 +- src/main/resources/fabric.mod.json | 2 +- 9 files changed, 71 insertions(+), 103 deletions(-) diff --git a/gradle.properties b/gradle.properties index 68a64be3..94d7a520 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,8 +1,8 @@ org.gradle.jvmargs=-Xmx2G # Fabric Properties -minecraft_version=1.19 -yarn_mappings=1.19+build.1 +minecraft_version=1.18.2 +yarn_mappings=1.18.2+build.3 loader_version=0.14.6 # Mod Properties @@ -12,6 +12,6 @@ archives_base_name = factions # Dependencies h2_version=1.4.200 -fabric_version=0.55.2+1.19 +fabric_version=0.56.0+1.18.2 lucko_permissions_version=0.1-SNAPSHOT dynmap_api_version=3.4-beta-3 \ No newline at end of file diff --git a/src/main/java/io/icker/factions/FactionsMod.java b/src/main/java/io/icker/factions/FactionsMod.java index 148a1cdb..36b24512 100644 --- a/src/main/java/io/icker/factions/FactionsMod.java +++ b/src/main/java/io/icker/factions/FactionsMod.java @@ -1,28 +1,20 @@ package io.icker.factions; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.tree.LiteralCommandNode; - import io.icker.factions.command.*; import io.icker.factions.config.Config; -import io.icker.factions.core.ChatManager; -import io.icker.factions.core.FactionsManager; -import io.icker.factions.core.InteractionManager; -import io.icker.factions.core.ServerManager; -import io.icker.factions.core.SoundManager; -import io.icker.factions.core.WorldManager; +import io.icker.factions.core.*; import io.icker.factions.util.Command; import io.icker.factions.util.DynmapWrapper; import io.icker.factions.util.Migrator; import net.fabricmc.api.ModInitializer; -import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; +import net.fabricmc.fabric.api.command.v1.CommandRegistrationCallback; import net.fabricmc.loader.api.FabricLoader; -import net.minecraft.command.CommandRegistryAccess; import net.minecraft.server.command.CommandManager; import net.minecraft.server.command.ServerCommandSource; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; public class FactionsMod implements ModInitializer { public static Logger LOGGER = LogManager.getLogger("Factions"); @@ -32,12 +24,11 @@ public class FactionsMod implements ModInitializer { @Override public void onInitialize() { - LOGGER.info("Initialized Factions Mod for Minecraft v1.19"); + LOGGER.info("Initialized Factions Mod for Minecraft v1.18"); dynmap = FabricLoader.getInstance().isModLoaded("dynmap") ? new DynmapWrapper() : null; Migrator.migrate(); - ChatManager.register(); FactionsManager.register(); InteractionManager.register(); ServerManager.register(); @@ -47,7 +38,7 @@ public void onInitialize() { CommandRegistrationCallback.EVENT.register(FactionsMod::registerCommands); } - private static void registerCommands(CommandDispatcher dispatcher, CommandRegistryAccess registryAccess, CommandManager.RegistrationEnvironment environment) { + private static void registerCommands(CommandDispatcher dispatcher, boolean dedicated) { LiteralCommandNode factions = CommandManager .literal("factions") .build(); diff --git a/src/main/java/io/icker/factions/command/SafeCommand.java b/src/main/java/io/icker/factions/command/SafeCommand.java index 71e9f90a..a064560e 100644 --- a/src/main/java/io/icker/factions/command/SafeCommand.java +++ b/src/main/java/io/icker/factions/command/SafeCommand.java @@ -1,8 +1,8 @@ package io.icker.factions.command; import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.mojang.brigadier.tree.LiteralCommandNode; - import io.icker.factions.FactionsMod; import io.icker.factions.api.events.PlayerEvents; import io.icker.factions.config.Config; @@ -12,7 +12,7 @@ public class SafeCommand implements Command { - private int run(CommandContext context) { + private int run(CommandContext context) throws CommandSyntaxException { PlayerEvents.OPEN_SAFE.invoker().onOpenSafe(context.getSource().getPlayer()); return 1; } diff --git a/src/main/java/io/icker/factions/command/SettingsCommand.java b/src/main/java/io/icker/factions/command/SettingsCommand.java index 88f4e0fe..5f96f2c7 100644 --- a/src/main/java/io/icker/factions/command/SettingsCommand.java +++ b/src/main/java/io/icker/factions/command/SettingsCommand.java @@ -3,7 +3,6 @@ import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.mojang.brigadier.tree.LiteralCommandNode; - import io.icker.factions.api.persistents.User; import io.icker.factions.util.Command; import io.icker.factions.util.Message; @@ -29,7 +28,7 @@ private int setChat(CommandContext context, User.ChatMode o return 1; } - private int setSounds(CommandContext context, User.SoundMode option) { + private int setSounds(CommandContext context, User.SoundMode option) throws CommandSyntaxException { ServerPlayerEntity player = context.getSource().getPlayer(); User user = User.get(player.getUuid()); user.sounds = option; diff --git a/src/main/java/io/icker/factions/core/ChatManager.java b/src/main/java/io/icker/factions/core/ChatManager.java index b0531cbe..1adb4416 100644 --- a/src/main/java/io/icker/factions/core/ChatManager.java +++ b/src/main/java/io/icker/factions/core/ChatManager.java @@ -1,64 +1,62 @@ package io.icker.factions.core; -import java.util.UUID; -import java.util.concurrent.CompletableFuture; - import io.icker.factions.FactionsMod; import io.icker.factions.api.persistents.Faction; import io.icker.factions.api.persistents.User; import io.icker.factions.util.Message; -import net.fabricmc.fabric.api.message.v1.ServerMessageDecoratorEvent; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.Text; import net.minecraft.util.Formatting; -public class ChatManager { - public static void register() { - ServerMessageDecoratorEvent.EVENT.register(ServerMessageDecoratorEvent.CONTENT_PHASE, (sender, message) -> { - if (sender != null && FactionsMod.CONFIG.MODIFY_CHAT) { - return CompletableFuture.completedFuture(ChatManager.handleMessage(sender, message.getString())); - } - return CompletableFuture.completedFuture(message); - }); - } +import java.util.UUID; - public static Text handleMessage(ServerPlayerEntity sender, String message) { +public class ChatManager { + public static void handleMessage(ServerPlayerEntity sender, String message) { UUID id = sender.getUuid(); User member = User.get(id); if (member.chat == User.ChatMode.GLOBAL) { if (member.isInFaction()) { - return ChatManager.inFactionGlobal(sender, member.getFaction(), message); + ChatManager.inFactionGlobal(sender, member.getFaction(), message); } else { - return ChatManager.global(sender, message); + ChatManager.global(sender, message); } } else { if (member.isInFaction()) { - return ChatManager.faction(sender, member.getFaction(), message); + ChatManager.faction(sender, member.getFaction(), message); } else { - return ChatManager.global(sender, message); + ChatManager.fail(sender); } } } - private static Text global(ServerPlayerEntity sender, String message) { - return new Message(message).format(Formatting.GRAY) - .raw(); + private static void global(ServerPlayerEntity sender, String message) { + FactionsMod.LOGGER.info("[" + sender.getName().asString() + " -> All] " + message); + new Message(message).format(Formatting.GRAY).sendToGlobalChat(); + } + + private static void inFactionGlobal(ServerPlayerEntity sender, Faction faction, String message) { + FactionsMod.LOGGER.info("[" + faction.getName() + " " + sender.getName().asString() + " -> All] " + message); + new Message("") + .add(new Message(faction.getName()).format(Formatting.BOLD, faction.getColor())) + .filler("»") + .add(new Message(message).format(Formatting.GRAY)) + .sendToGlobalChat(); } - private static Text inFactionGlobal(ServerPlayerEntity sender, Faction faction, String message) { - return new Message("") - .add(new Message(faction.getName()).format(Formatting.BOLD, faction.getColor())) - .filler("»") - .add(new Message(message).format(Formatting.GRAY)) - .raw(); + public static void fail(ServerPlayerEntity sender) { + new Message("You must be in a faction to use faction chat") + .hover("Click to join global chat") + .click("/f chat global") + .fail() + .send(sender, false); } - private static Text faction(ServerPlayerEntity sender, Faction faction, String message) { - return new Message("") - .add(new Message("F").format(Formatting.BOLD, faction.getColor())) - .filler("»") - .add(new Message(message).format(Formatting.GRAY)) - .raw(); + private static void faction(ServerPlayerEntity sender, Faction faction, String message) { + FactionsMod.LOGGER.info("[" + faction.getName() + " " + sender.getName().asString() + " -> " + faction.getName() + "] " + message); + new Message("") + .add(new Message("F").format(Formatting.BOLD, faction.getColor())) + .filler("»") + .add(new Message(message).format(Formatting.GRAY)) + .sendToFactionChat(faction); } } diff --git a/src/main/java/io/icker/factions/mixin/ServerPlayNetworkHandlerMixin.java b/src/main/java/io/icker/factions/mixin/ServerPlayNetworkHandlerMixin.java index 17d35079..2c8ccfe0 100644 --- a/src/main/java/io/icker/factions/mixin/ServerPlayNetworkHandlerMixin.java +++ b/src/main/java/io/icker/factions/mixin/ServerPlayNetworkHandlerMixin.java @@ -1,5 +1,14 @@ package io.icker.factions.mixin; +import io.icker.factions.api.events.PlayerEvents; +import io.icker.factions.core.ChatManager; +import net.minecraft.network.MessageType; +import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket; +import net.minecraft.server.PlayerManager; +import net.minecraft.server.filter.TextStream; +import net.minecraft.server.network.ServerPlayNetworkHandler; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.text.Text; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -7,18 +16,8 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import io.icker.factions.api.events.PlayerEvents; -import io.icker.factions.api.persistents.Faction; -import io.icker.factions.api.persistents.User; -import io.icker.factions.util.Message; -import net.minecraft.network.message.MessageType; -import net.minecraft.network.message.SignedMessage; -import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket; -import net.minecraft.server.PlayerManager; -import net.minecraft.server.filter.FilteredMessage; -import net.minecraft.server.network.ServerPlayNetworkHandler; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.util.registry.RegistryKey; +import java.util.UUID; +import java.util.function.Function; @Mixin(ServerPlayNetworkHandler.class) public class ServerPlayNetworkHandlerMixin { @@ -30,34 +29,8 @@ public void onPlayerMove(PlayerMoveC2SPacket packet, CallbackInfo ci) { PlayerEvents.ON_MOVE.invoker().onMove(player); } - @Redirect(method = "handleDecoratedMessage", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/PlayerManager;broadcast(Lnet/minecraft/server/filter/FilteredMessage;Lnet/minecraft/server/network/ServerPlayerEntity;Lnet/minecraft/util/registry/RegistryKey;)V")) - private void replaceChatMessage(PlayerManager instance, FilteredMessage message, ServerPlayerEntity sender, RegistryKey typeKey) { - User member = User.get(sender.getUuid()); - Faction faction = member != null ? member.getFaction() : null; - - boolean factionChat = member.chat == User.ChatMode.FACTION || member.chat == User.ChatMode.FOCUS; - - if (factionChat && faction == null) { - new Message("You can't send a message to faction chat if you aren't in a faction.") - .fail() - .hover("Click to switch to global chat") - .click("/factions settings chat global") - .send(sender, false); - } else { - instance.broadcast(message.raw(), player -> { - User targetMember = User.get(player.getUuid()); - Faction target = targetMember != null ? targetMember.getFaction() : null; - - if (member.chat == User.ChatMode.GLOBAL && targetMember.chat != User.ChatMode.FOCUS) { - return message.getFilterableFor(sender, player); - } - - if (factionChat && target != null && target.getName().equals(faction.getName())) { - return message.getFilterableFor(sender, player); - } - - return null; - }, sender.asMessageSender(), typeKey); - } + @Redirect(method = "handleMessage", 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")) + private void broadcast(PlayerManager instance, Text serverMessage, Function playerMessageFactory, MessageType type, UUID sender, TextStream.Message message) { + ChatManager.handleMessage(instance.getPlayer(sender), message.getRaw()); } } diff --git a/src/main/java/io/icker/factions/util/Command.java b/src/main/java/io/icker/factions/util/Command.java index ab1a7847..72679be6 100644 --- a/src/main/java/io/icker/factions/util/Command.java +++ b/src/main/java/io/icker/factions/util/Command.java @@ -1,10 +1,8 @@ package io.icker.factions.util; -import java.util.function.Predicate; - +import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.mojang.brigadier.suggestion.SuggestionProvider; import com.mojang.brigadier.tree.LiteralCommandNode; - import io.icker.factions.FactionsMod; import io.icker.factions.api.persistents.Faction; import io.icker.factions.api.persistents.User; @@ -13,6 +11,8 @@ import net.minecraft.server.command.ServerCommandSource; import net.minecraft.server.network.ServerPlayerEntity; +import java.util.function.Predicate; + public interface Command { public LiteralCommandNode getNode(); @@ -62,7 +62,12 @@ public static Predicate hasPerms(String permission, int def public static Predicate require(Requires req) { return source -> { - ServerPlayerEntity entity = source.getPlayer(); + ServerPlayerEntity entity = null; + try { + entity = source.getPlayer(); + } catch (CommandSyntaxException e) { + FactionsMod.LOGGER.info("Error in command requirements", e); + } User user = User.get(entity.getUuid()); return req.run(user); }; diff --git a/src/main/java/io/icker/factions/util/Message.java b/src/main/java/io/icker/factions/util/Message.java index cffc35cd..622c5349 100644 --- a/src/main/java/io/icker/factions/util/Message.java +++ b/src/main/java/io/icker/factions/util/Message.java @@ -82,7 +82,9 @@ public void sendToGlobalChat() { public void sendToFactionChat(Faction faction) { for (User member : faction.getUsers()) { ServerPlayerEntity player = manager.getPlayer(member.getID()); - player.sendMessage(text, false); + if (player != null) { + player.sendMessage(text, false); + } } } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index bc38f4a3..f4107c19 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -29,7 +29,7 @@ "depends": { "fabricloader": ">=0.13.3", - "minecraft": ">=1.19", + "minecraft": "1.18.X", "java": ">=17", "fabric": "*" }, From 7fecc61e26271d0db62c52ad66235f0b2c45e10c Mon Sep 17 00:00:00 2001 From: BlueZeeKing Date: Fri, 24 Jun 2022 21:49:02 -0400 Subject: [PATCH 2/4] Fix 1.18 chat --- src/main/java/io/icker/factions/core/ChatManager.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/icker/factions/core/ChatManager.java b/src/main/java/io/icker/factions/core/ChatManager.java index 1adb4416..43c2c689 100644 --- a/src/main/java/io/icker/factions/core/ChatManager.java +++ b/src/main/java/io/icker/factions/core/ChatManager.java @@ -31,12 +31,12 @@ public static void handleMessage(ServerPlayerEntity sender, String message) { private static void global(ServerPlayerEntity sender, String message) { FactionsMod.LOGGER.info("[" + sender.getName().asString() + " -> All] " + message); - new Message(message).format(Formatting.GRAY).sendToGlobalChat(); + new Message(String.format("[%s] ") + message).format(Formatting.GRAY).sendToGlobalChat(); } private static void inFactionGlobal(ServerPlayerEntity sender, Faction faction, String message) { FactionsMod.LOGGER.info("[" + faction.getName() + " " + sender.getName().asString() + " -> All] " + message); - new Message("") + new Message(String.format("[%s] ")) .add(new Message(faction.getName()).format(Formatting.BOLD, faction.getColor())) .filler("»") .add(new Message(message).format(Formatting.GRAY)) @@ -53,7 +53,7 @@ public static void fail(ServerPlayerEntity sender) { private static void faction(ServerPlayerEntity sender, Faction faction, String message) { FactionsMod.LOGGER.info("[" + faction.getName() + " " + sender.getName().asString() + " -> " + faction.getName() + "] " + message); - new Message("") + new Message(String.format("[%s] ")) .add(new Message("F").format(Formatting.BOLD, faction.getColor())) .filler("»") .add(new Message(message).format(Formatting.GRAY)) From 376341328c9cfa48791c7e5828fe1f1e491b2a3d Mon Sep 17 00:00:00 2001 From: BlueZeeKing Date: Fri, 24 Jun 2022 22:05:30 -0400 Subject: [PATCH 3/4] Actually fix 1.18 chat --- src/main/java/io/icker/factions/core/ChatManager.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/icker/factions/core/ChatManager.java b/src/main/java/io/icker/factions/core/ChatManager.java index 43c2c689..d0edd267 100644 --- a/src/main/java/io/icker/factions/core/ChatManager.java +++ b/src/main/java/io/icker/factions/core/ChatManager.java @@ -31,12 +31,12 @@ public static void handleMessage(ServerPlayerEntity sender, String message) { private static void global(ServerPlayerEntity sender, String message) { FactionsMod.LOGGER.info("[" + sender.getName().asString() + " -> All] " + message); - new Message(String.format("[%s] ") + message).format(Formatting.GRAY).sendToGlobalChat(); + new Message(String.format("[%s] ", sender.getName().getString()) + message).format(Formatting.GRAY).sendToGlobalChat(); } private static void inFactionGlobal(ServerPlayerEntity sender, Faction faction, String message) { FactionsMod.LOGGER.info("[" + faction.getName() + " " + sender.getName().asString() + " -> All] " + message); - new Message(String.format("[%s] ")) + new Message(String.format("[%s] ", sender.getName().getString())) .add(new Message(faction.getName()).format(Formatting.BOLD, faction.getColor())) .filler("»") .add(new Message(message).format(Formatting.GRAY)) @@ -53,7 +53,7 @@ public static void fail(ServerPlayerEntity sender) { private static void faction(ServerPlayerEntity sender, Faction faction, String message) { FactionsMod.LOGGER.info("[" + faction.getName() + " " + sender.getName().asString() + " -> " + faction.getName() + "] " + message); - new Message(String.format("[%s] ")) + new Message(String.format("[%s] ", sender.getName().getString())) .add(new Message("F").format(Formatting.BOLD, faction.getColor())) .filler("»") .add(new Message(message).format(Formatting.GRAY)) From 49e587558a0eb51549dc1346a8e8aa3d059474b4 Mon Sep 17 00:00:00 2001 From: BlueZeeKing Date: Fri, 24 Jun 2022 22:15:18 -0400 Subject: [PATCH 4/4] Update version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 94d7a520..cad1a5b5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ yarn_mappings=1.18.2+build.3 loader_version=0.14.6 # Mod Properties -mod_version = 2.1.0 +mod_version = 2.1.1 maven_group = io.icker archives_base_name = factions