diff --git a/build.gradle b/build.gradle index 1bc87cf..e7f1d84 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ plugins { group = 'dev.unnm3d' -version = '5.4.1' +version = '5.4.2' repositories { diff --git a/src/main/java/dev/unnm3d/redischat/Permissions.java b/src/main/java/dev/unnm3d/redischat/Permissions.java index 8b0b87c..708764a 100644 --- a/src/main/java/dev/unnm3d/redischat/Permissions.java +++ b/src/main/java/dev/unnm3d/redischat/Permissions.java @@ -30,6 +30,7 @@ public enum Permissions { CHANNEL_PREFIX("redischat.channel."), CHANNEL_PUBLIC("redischat.channel.public"), CHANNEL_CREATE("redischat.createchannel"), + CHANNEL_GUI("redischat.channelgui"), CHANNEL_CHANGE_DISPLAYNAME("redischat.changedisplayname"), CHANNEL_DELETE("redischat.deletechannel"), CHANNEL_TOGGLE_PLAYER("redischat.playerchannel"), diff --git a/src/main/java/dev/unnm3d/redischat/channels/ChannelCommand.java b/src/main/java/dev/unnm3d/redischat/channels/ChannelCommand.java index e77b641..3d5f606 100644 --- a/src/main/java/dev/unnm3d/redischat/channels/ChannelCommand.java +++ b/src/main/java/dev/unnm3d/redischat/channels/ChannelCommand.java @@ -27,6 +27,10 @@ public CommandAPICommand getCommand() { .withSubcommand(getListSubCommand()) .withSubcommand(getDiscordLinkSubCommand()) .executesPlayer((sender, args) -> { + if(!sender.hasPermission(Permissions.CHANNEL_GUI.getPermission())){ + plugin.messages.sendMessage(sender, plugin.messages.noPermission); + return; + } try { plugin.getChannelManager().openChannelsGUI(sender); } catch (Exception e) { diff --git a/src/main/java/dev/unnm3d/redischat/channels/ChannelManager.java b/src/main/java/dev/unnm3d/redischat/channels/ChannelManager.java index 516931c..3d6b984 100644 --- a/src/main/java/dev/unnm3d/redischat/channels/ChannelManager.java +++ b/src/main/java/dev/unnm3d/redischat/channels/ChannelManager.java @@ -7,17 +7,13 @@ import dev.unnm3d.redischat.api.RedisChatAPI; import dev.unnm3d.redischat.api.VanishIntegration; import dev.unnm3d.redischat.api.events.AsyncRedisChatMessageEvent; +import dev.unnm3d.redischat.api.objects.*; import dev.unnm3d.redischat.channels.gui.ChannelGUI; import dev.unnm3d.redischat.chat.ChatFormat; import dev.unnm3d.redischat.chat.ComponentProvider; -import dev.unnm3d.redischat.api.objects.KnownChatEntities; import dev.unnm3d.redischat.chat.filters.AbstractFilter; import dev.unnm3d.redischat.chat.filters.FilterManager; import dev.unnm3d.redischat.chat.filters.FilterResult; -import dev.unnm3d.redischat.api.objects.AudienceType; -import dev.unnm3d.redischat.api.objects.Channel; -import dev.unnm3d.redischat.api.objects.ChannelAudience; -import dev.unnm3d.redischat.api.objects.ChatMessage; import dev.unnm3d.redischat.mail.MailGUIManager; import dev.unnm3d.redischat.moderation.MuteManager; import lombok.Getter; @@ -196,7 +192,7 @@ public void outgoingMessage(CommandSender player, ChannelAudience receiver, @Not chatMessage.setFormat(MiniMessage.miniMessage().serialize(event.getFormat())); chatMessage.setContent(MiniMessage.miniMessage().serialize(event.getContent())); - if (currentChannel.get().getProximityDistance() > 0) {// Send to local server + if (currentChannel.get().getProximityDistance() >= 0) {// Send to local server sendGenericChat(chatMessage); return; } @@ -430,6 +426,7 @@ private Channel getGenericPublic() { .format(plugin.config.defaultFormat.format()) .rateLimit(plugin.config.rate_limit) .rateLimitPeriod(plugin.config.rate_limit_time_seconds) + .proximityDistance(plugin.config.publicProximityDistance) .discordWebhook(plugin.config.publicDiscordWebhook) .filtered(plugin.config.isPublicFiltered) .shownByDefault(true) @@ -463,7 +460,7 @@ public String getActiveChannel(String playerName) { } public void updateActiveChannel(@NotNull String playerName, @Nullable String channelName) { - if(plugin.config.debug) + if (plugin.config.debug) plugin.getLogger().info("Local active channel for " + playerName + " is now " + channelName); if (channelName == null) { activePlayerChannels.remove(playerName); diff --git a/src/main/java/dev/unnm3d/redischat/chat/filters/incoming/IgnorePlayerFilter.java b/src/main/java/dev/unnm3d/redischat/chat/filters/incoming/IgnorePlayerFilter.java index f2a73ed..ddc85ba 100644 --- a/src/main/java/dev/unnm3d/redischat/chat/filters/incoming/IgnorePlayerFilter.java +++ b/src/main/java/dev/unnm3d/redischat/chat/filters/incoming/IgnorePlayerFilter.java @@ -2,11 +2,10 @@ import de.exlll.configlib.Configuration; import dev.unnm3d.redischat.RedisChat; -import dev.unnm3d.redischat.api.objects.KnownChatEntities; -import dev.unnm3d.redischat.chat.filters.AbstractFilter; -import dev.unnm3d.redischat.chat.filters.FilterResult; import dev.unnm3d.redischat.api.objects.AudienceType; import dev.unnm3d.redischat.api.objects.ChatMessage; +import dev.unnm3d.redischat.chat.filters.AbstractFilter; +import dev.unnm3d.redischat.chat.filters.FilterResult; import dev.unnm3d.redischat.settings.FiltersConfig; import lombok.Getter; import net.kyori.adventure.text.minimessage.MiniMessage; @@ -29,7 +28,7 @@ public FilterResult applyWithPrevious(CommandSender receiver, @NotNull ChatMessa if (isIgnored && (chatMessage.getReceiver().isPlayer() || filterSettings.ignorePublicMessages)) { - if(filterSettings.sendWarnWhenIgnoring) { + if (filterSettings.sendWarnWhenIgnoring) { return new FilterResult(chatMessage, true, Optional.of(MiniMessage.miniMessage().deserialize(RedisChat.getInstance().messages.ignored_player .replace("%player%", chatMessage.getSender().getName())))); @@ -47,7 +46,7 @@ public static class IgnorePlayerFilterProperties extends FiltersConfig.FilterSet private boolean sendWarnWhenIgnoring; public IgnorePlayerFilterProperties() { - super(true, 4, Set.of(AudienceType.PLAYER,AudienceType.CHANNEL), Set.of(KnownChatEntities.GENERAL_CHANNEL.toString())); + super(true, 4, Set.of(AudienceType.PLAYER, AudienceType.CHANNEL), Set.of()); this.ignorePublicMessages = true; this.sendWarnWhenIgnoring = true; } diff --git a/src/main/java/dev/unnm3d/redischat/chat/filters/outgoing/IgnoreFilter.java b/src/main/java/dev/unnm3d/redischat/chat/filters/outgoing/IgnoreFilter.java index b6c8c32..e71afbf 100644 --- a/src/main/java/dev/unnm3d/redischat/chat/filters/outgoing/IgnoreFilter.java +++ b/src/main/java/dev/unnm3d/redischat/chat/filters/outgoing/IgnoreFilter.java @@ -22,7 +22,7 @@ public IgnoreFilter(RedisChat plugin, FiltersConfig.FilterSettings filterSetting @Override public FilterResult applyWithPrevious(CommandSender sender, @NotNull ChatMessage message, ChatMessage... previousMessages) { - if (plugin.getChannelManager().getMuteManager().isPlayerIgnored(sender.getName(), message.getSender().getName())) { + if (plugin.getChannelManager().getMuteManager().isPlayerIgnored(sender.getName(), message.getReceiver().getName())) { return new FilterResult(message, true, Optional.of( plugin.getComponentProvider().parse(sender, plugin.messages.ignored_player, true, false, false))); diff --git a/src/main/java/dev/unnm3d/redischat/moderation/MuteManager.java b/src/main/java/dev/unnm3d/redischat/moderation/MuteManager.java index 3b805cc..67c9c37 100644 --- a/src/main/java/dev/unnm3d/redischat/moderation/MuteManager.java +++ b/src/main/java/dev/unnm3d/redischat/moderation/MuteManager.java @@ -178,6 +178,7 @@ public boolean isMutedOnChannel(String playerName, String channel) { * @return true if the "ignorer" is ignoring the "ignored" */ public boolean isPlayerIgnored(String ignorer, String ignored) { + if(ignored.equals(KnownChatEntities.SERVER_SENDER.toString())) return false; final Set mutedPlayers = playersMutedForPlayers.get(ignorer); boolean isIgnored = mutedPlayers != null && ( mutedPlayers.contains(ignored) || mutedPlayers.contains(KnownChatEntities.ALL_PLAYERS.toString()) diff --git a/src/main/java/dev/unnm3d/redischat/settings/Config.java b/src/main/java/dev/unnm3d/redischat/settings/Config.java index e137258..493de3d 100644 --- a/src/main/java/dev/unnm3d/redischat/settings/Config.java +++ b/src/main/java/dev/unnm3d/redischat/settings/Config.java @@ -217,6 +217,14 @@ public final class Config implements ConfigValidator { public String publicDiscordWebhook = ""; @Comment("Whether to filter the public chat") public boolean isPublicFiltered = true; + @Comment({ + "Proximity chat settings", + "Set to -1 to disable proximity chat (normal cross-server chat)", + "Set to 0 to make it work for the whole local server", + "Set to a positive number to check if a player is in the same server, same world and below the specified distance", + "The number is the distance in blocks" + }) + public int publicProximityDistance = -1; @Comment("Rejoin delay in milliseconds") public int rejoinSendDelay = 500; @Comment("Quit delay in milliseconds") diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index b734f7c..cbe07e6 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -50,6 +50,9 @@ commands: description: Setchatplaceholder command permission: redischat.setchatplaceholder permissions: + redischat.channelgui: + description: Allows to open the /channel GUI + default: true redischat.chatcolorcommand: description: Allows to use the /chatcolor command default: op