diff --git a/build.gradle.kts b/build.gradle.kts index 26e75ec..86af323 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,7 +6,7 @@ plugins { val versions = providers.gradleProperty("net.labymod.minecraft-versions").get().split(";") group = "org.example" -version = providers.environmentVariable("VERSION").getOrElse("1.1.2") +version = providers.environmentVariable("VERSION").getOrElse("1.1.3") labyMod { defaultPackageName = "com.rappytv.betterfriends" diff --git a/core/src/main/java/com/rappytv/betterfriends/core/BetterFriendsAddon.java b/core/src/main/java/com/rappytv/betterfriends/core/BetterFriendsAddon.java index 2e8fe62..629c995 100644 --- a/core/src/main/java/com/rappytv/betterfriends/core/BetterFriendsAddon.java +++ b/core/src/main/java/com/rappytv/betterfriends/core/BetterFriendsAddon.java @@ -56,6 +56,11 @@ protected void preConfigurationLoad() { new SemanticVersion(1, 1, 2), "2026-06-18" )); + Laby.references().revisionRegistry().register(new SimpleRevision( + "betterfriends", + new SemanticVersion(1, 1, 3), + "2026-06-18" + )); } @Override diff --git a/core/src/main/java/com/rappytv/betterfriends/core/command/BetterFriendsCommand.java b/core/src/main/java/com/rappytv/betterfriends/core/command/BetterFriendsCommand.java index 8fa4d49..2440ec1 100644 --- a/core/src/main/java/com/rappytv/betterfriends/core/command/BetterFriendsCommand.java +++ b/core/src/main/java/com/rappytv/betterfriends/core/command/BetterFriendsCommand.java @@ -145,7 +145,33 @@ public boolean execute(String prefix, String[] arguments) { ); return true; } - Player player = this.getPlayer(arguments[0]); + String username = arguments[0]; + Player player = this.getPlayer(username); + if (player == null) { + Laby.labyAPI() + .labyNetController() + .loadUniqueIdByName(username, (result) -> this.handlePlayer( + new BlockedPlayer(result.getNullable(), username) + )); + return true; + } + + this.handlePlayer(new BlockedPlayer(player.getUniqueId(), player.getName())); + return true; + } + + @Nullable + private Player getPlayer(String username) { + for (Player player : Laby.labyAPI().minecraft().clientWorld().getPlayers()) { + if (player.getName().equalsIgnoreCase(username)) { + return player; + } + } + + return null; + } + + private void handlePlayer(@Nullable BlockedPlayer player) { if (player == null) { this.displayMessage( Component.empty() @@ -155,9 +181,9 @@ public boolean execute(String prefix, String[] arguments) { NamedTextColor.RED )) ); - return true; + return; } - if (Laby.labyAPI().getUniqueId().equals(player.getUniqueId())) { + if (Laby.labyAPI().getUniqueId().equals(player.uuid())) { this.displayMessage( Component.empty() .append(BetterFriendsAddon.getPrefix()) @@ -166,9 +192,9 @@ public boolean execute(String prefix, String[] arguments) { NamedTextColor.RED )) ); - return true; + return; } - if (this.manager.isBlocked(player.getUniqueId())) { + if (this.manager.isBlocked(player.uuid())) { this.displayMessage( Component.empty() .append(BetterFriendsAddon.getPrefix()) @@ -177,23 +203,9 @@ public boolean execute(String prefix, String[] arguments) { NamedTextColor.RED )) ); - return true; + return; } - Laby.labyAPI().minecraft().executeNextTick(() -> - this.manager.block(player.getUniqueId(), player.getName()) - ); - return true; - } - - @Nullable - private Player getPlayer(String username) { - for (Player player : Laby.labyAPI().minecraft().clientWorld().getPlayers()) { - if (player.getName().equalsIgnoreCase(username)) { - return player; - } - } - - return null; + Laby.labyAPI().minecraft().executeNextTick(() -> this.manager.block(player)); } } diff --git a/core/src/main/java/com/rappytv/betterfriends/core/config/subconfig/BlocklistConfig.java b/core/src/main/java/com/rappytv/betterfriends/core/config/subconfig/BlocklistConfig.java index aa03b23..a4ef803 100644 --- a/core/src/main/java/com/rappytv/betterfriends/core/config/subconfig/BlocklistConfig.java +++ b/core/src/main/java/com/rappytv/betterfriends/core/config/subconfig/BlocklistConfig.java @@ -10,6 +10,7 @@ import net.labymod.api.configuration.loader.Config; import net.labymod.api.configuration.loader.annotation.Exclude; import net.labymod.api.configuration.loader.annotation.IntroducedIn; +import net.labymod.api.configuration.loader.annotation.ModRequirement; import net.labymod.api.configuration.loader.annotation.SpriteSlot; import net.labymod.api.configuration.loader.property.ConfigProperty; import net.labymod.api.configuration.settings.annotation.SettingRequires; @@ -46,10 +47,16 @@ public Activity menu() { private final ConfigProperty unfriendBlockedPlayers = new ConfigProperty<>(true); @IntroducedIn(namespace = "betterfriends", value = "1.1.2") + @ModRequirement(namespace = "voicechat") @SpriteSlot(x = 3, y = 2) @SwitchSetting private final ConfigProperty muteInVoiceChat = new ConfigProperty<>(true); + @IntroducedIn(namespace = "betterfriends", value = "1.1.3") + @SpriteSlot(x = 3, y = 1) + @SwitchSetting + private final ConfigProperty hideChatMessages = new ConfigProperty<>(true); + @IntroducedIn(namespace = "betterfriends", value = "1.1.2") @SwitchSetting @SpriteSlot(x = 1, y = 1) @@ -81,6 +88,10 @@ public ConfigProperty muteInVoiceChat() { return this.muteInVoiceChat; } + public ConfigProperty hideChatMessages() { + return this.hideChatMessages; + } + public ConfigProperty declineFriendRequests() { return this.declineFriendRequests; } diff --git a/core/src/main/java/com/rappytv/betterfriends/core/listeners/ChatReceiveListener.java b/core/src/main/java/com/rappytv/betterfriends/core/listeners/ChatReceiveListener.java index db662d3..0de8b3e 100644 --- a/core/src/main/java/com/rappytv/betterfriends/core/listeners/ChatReceiveListener.java +++ b/core/src/main/java/com/rappytv/betterfriends/core/listeners/ChatReceiveListener.java @@ -19,28 +19,48 @@ public ChatReceiveListener(BetterFriendsAddon addon) { } @Subscribe(125) - public void onChatReceive(ChatReceiveEvent receiveEvent) { - if (receiveEvent.isCancelled() || this.addon.configuration().friendPrefix().get().isBlank()) { + public void onChatReceive(ChatReceiveEvent event) { + if (event.isCancelled()) { return; } - Component message = receiveEvent.message(); + if (this.checkIfBlocked(event.chatMessage().getSenderUniqueId())) { + event.setCancelled(true); + return; + } + this.addFriendPrefix(event); + } + + private boolean checkIfBlocked(UUID sender) { + boolean enabled = this.addon.configuration().blocklist().hideChatMessages().get(); + if (sender == null || !enabled) { + return false; + } + + return BetterFriendsAddon.references().blocklistManager().isBlocked(sender); + } + + private void addFriendPrefix(ChatReceiveEvent event) { + if (!this.addon.configuration().friendPrefix().get().isBlank()) { + return; + } + Component message = event.message(); if (MinecraftVersions.V1_12_2.orOlder()) { message = message.copy().colorIfAbsent(NamedTextColor.WHITE); } - UUID uuid = receiveEvent.chatMessage().getSenderUniqueId(); - if (uuid == null) { + UUID sender = event.chatMessage().getSenderUniqueId(); + if (sender == null) { return; } - Friend friend = BetterFriendsAddon.references().sessionHelper().getFriend(uuid); + Friend friend = BetterFriendsAddon.references().sessionHelper().getFriend(sender); if (friend == null) { return; } - receiveEvent.setMessage( + event.setMessage( Component.empty() .append(LegacyComponentSerializer.legacyAmpersand().deserialize( this.addon.configuration().friendPrefix().get() diff --git a/core/src/main/resources/assets/betterfriends/i18n/en_us.json b/core/src/main/resources/assets/betterfriends/i18n/en_us.json index ae661f8..76a74dd 100644 --- a/core/src/main/resources/assets/betterfriends/i18n/en_us.json +++ b/core/src/main/resources/assets/betterfriends/i18n/en_us.json @@ -108,6 +108,10 @@ "muteInVoiceChat": { "name": "Mute player in VoiceChat when blocking them" }, + "hideChatMessages": { + "name": "Hide chat messages by blocked players", + "description": "Note: This may not work on all servers." + }, "declineFriendRequests": { "name": "Decline friend requests automatically" },