diff --git a/pom.xml b/pom.xml index 40f2734..299d605 100755 --- a/pom.xml +++ b/pom.xml @@ -183,7 +183,7 @@ com.discord4j discord4j-core - 3.0.11 + 3.0.12 diff --git a/src/main/java/buttondevteam/discordplugin/mcchat/MCChatUtils.java b/src/main/java/buttondevteam/discordplugin/mcchat/MCChatUtils.java index 6c085db..6b1c61d 100644 --- a/src/main/java/buttondevteam/discordplugin/mcchat/MCChatUtils.java +++ b/src/main/java/buttondevteam/discordplugin/mcchat/MCChatUtils.java @@ -1,6 +1,7 @@ package buttondevteam.discordplugin.mcchat; import buttondevteam.core.ComponentManager; +import buttondevteam.core.MainPlugin; import buttondevteam.discordplugin.*; import buttondevteam.discordplugin.broadcaster.GeneralEventBroadcasterModule; import buttondevteam.lib.TBMCCoreAPI; @@ -13,6 +14,7 @@ import lombok.RequiredArgsConstructor; import lombok.val; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; import org.bukkit.event.player.AsyncPlayerPreLoginEvent; @@ -30,6 +32,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Optional; +import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Consumer; import java.util.function.Supplier; import java.util.logging.Level; @@ -81,13 +84,27 @@ public class MCChatUtils { String[] s = topic.split("\\n----\\n"); if (s.length < 3) return; - s[0] = Bukkit.getOnlinePlayers().size() + " player" + (Bukkit.getOnlinePlayers().size() != 1 ? "s" : "") - + " online"; + String gid; + if (lmd instanceof MCChatCustom.CustomLMD) + gid = ((MCChatCustom.CustomLMD) lmd).groupID; + else //If we're not using a custom chat then it's either can ("everyone") or can't (null) see at most + gid = buttondevteam.core.component.channel.Channel.GROUP_EVERYONE; // (Though it's a public chat then rn) + AtomicInteger C = new AtomicInteger(); s[s.length - 1] = "Players: " + Bukkit.getOnlinePlayers().stream() + .filter(p -> gid.equals(lmd.mcchannel.getGroupID(p))) //If they can see it + .filter(MCChatUtils::checkEssentials) + .filter(p -> C.incrementAndGet() > 0) //Always true .map(p -> DPUtils.sanitizeString(p.getDisplayName())).collect(Collectors.joining(", ")); + s[0] = C + " player" + (C.get() != 1 ? "s" : "") + " online"; ((TextChannel) lmd.channel).edit(tce -> tce.setTopic(String.join("\n----\n", s)).setReason("Player list update")).subscribe(); //Don't wait } + private static boolean checkEssentials(Player p) { + var ess = MainPlugin.ess; + if (ess == null) return true; + return !ess.getUser(p).isHidden(); + } + public static T addSender(HashMap> senders, User user, T sender) { return addSender(senders, user.getId().asString(), sender); diff --git a/src/main/java/buttondevteam/discordplugin/mcchat/MCListener.java b/src/main/java/buttondevteam/discordplugin/mcchat/MCListener.java index c3ad14a..144304d 100644 --- a/src/main/java/buttondevteam/discordplugin/mcchat/MCListener.java +++ b/src/main/java/buttondevteam/discordplugin/mcchat/MCListener.java @@ -3,7 +3,9 @@ package buttondevteam.discordplugin.mcchat; import buttondevteam.discordplugin.*; import buttondevteam.lib.TBMCSystemChatEvent; import buttondevteam.lib.architecture.ConfigData; -import buttondevteam.lib.player.*; +import buttondevteam.lib.player.TBMCPlayer; +import buttondevteam.lib.player.TBMCPlayerBase; +import buttondevteam.lib.player.TBMCYEEHAWEvent; import com.earth2me.essentials.CommandSource; import discord4j.core.object.entity.Role; import discord4j.core.object.util.Snowflake; @@ -18,9 +20,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.PlayerCommandSendEvent; -import org.bukkit.event.player.PlayerKickEvent; -import org.bukkit.event.player.PlayerLoginEvent; +import org.bukkit.event.player.*; import org.bukkit.event.player.PlayerLoginEvent.Result; import org.bukkit.event.server.BroadcastMessageEvent; import org.bukkit.event.server.TabCompleteEvent; @@ -45,12 +45,12 @@ class MCListener implements Listener { } @EventHandler(priority = EventPriority.LOWEST) - public void onPlayerJoin(TBMCPlayerJoinEvent e) { + public void onPlayerJoin(PlayerJoinEvent e) { if (e.getPlayer() instanceof DiscordConnectedPlayer) return; // Don't show the joined message for the fake player Bukkit.getScheduler().runTaskAsynchronously(DiscordPlugin.plugin, () -> { final Player p = e.getPlayer(); - DiscordPlayer dp = e.GetPlayer().getAs(DiscordPlayer.class); + DiscordPlayer dp = TBMCPlayerBase.getPlayer(p.getUniqueId(), TBMCPlayer.class).getAs(DiscordPlayer.class); if (dp != null) { DiscordPlugin.dc.getUserById(Snowflake.of(dp.getDiscordID())).flatMap(user -> user.getPrivateChannel().flatMap(chan -> module.chatChannelMono().flatMap(cc -> { MCChatUtils.addSender(MCChatUtils.OnlineSenders, dp.getDiscordID(), @@ -60,14 +60,15 @@ class MCListener implements Listener { return Mono.empty(); }))).subscribe(); } - final String message = e.GetPlayer().PlayerName().get() + " joined the game"; - MCChatUtils.forAllowedCustomAndAllMCChat(MCChatUtils.send(message), e.getPlayer(), ChannelconBroadcast.JOINLEAVE, true); + final String message = e.getJoinMessage(); + if (message != null && message.trim().length() > 0) + MCChatUtils.forAllowedCustomAndAllMCChat(MCChatUtils.send(message), e.getPlayer(), ChannelconBroadcast.JOINLEAVE, true); ChromaBot.getInstance().updatePlayerList(); }); } @EventHandler(priority = EventPriority.HIGHEST) - public void onPlayerLeave(TBMCPlayerQuitEvent e) { + public void onPlayerLeave(PlayerQuitEvent e) { if (e.getPlayer() instanceof DiscordConnectedPlayer) return; // Only care about real users MCChatUtils.OnlineSenders.entrySet() @@ -78,8 +79,9 @@ class MCListener implements Listener { .ifPresent(MCChatUtils::callLoginEvents)); Bukkit.getScheduler().runTaskLaterAsynchronously(DiscordPlugin.plugin, ChromaBot.getInstance()::updatePlayerList, 5); - final String message = e.GetPlayer().PlayerName().get() + " left the game"; - MCChatUtils.forAllowedCustomAndAllMCChat(MCChatUtils.send(message), e.getPlayer(), ChannelconBroadcast.JOINLEAVE, true); + final String message = e.getQuitMessage(); + if (message != null && message.trim().length() > 0) + MCChatUtils.forAllowedCustomAndAllMCChat(MCChatUtils.send(message), e.getPlayer(), ChannelconBroadcast.JOINLEAVE, true); } @EventHandler(priority = EventPriority.HIGHEST) diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index e045c2b..f7ffcf1 100755 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,8 +1,10 @@ name: Chroma-Discord main: buttondevteam.discordplugin.DiscordPlugin -version: 1.0 +version: '1.0' author: NorbiPeti depend: [ChromaCore] +softdepend: + - Essentials commands: discord: website: 'https://github.com/TBMCPlugins/DiscordPlugin'