Added updating player count when players enter/exit vanished mode.

Works with EssentialsX, SuperVanish, and VanishNoPacket.
This commit is contained in:
TheMrEngMan 2021-04-13 03:05:50 -04:00
parent 43a69545f5
commit c28424f6cd
8 changed files with 180 additions and 12 deletions

View File

@ -3,6 +3,9 @@ package uk.co.angrybee.joe;
import org.bukkit.Server;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.plugin.java.JavaPlugin;
import com.earth2me.essentials.Essentials;
import org.kitteh.vanish.VanishPlugin;
import org.bukkit.plugin.PluginManager;
import uk.co.angrybee.joe.commands.minecraft.CommandAbout;
import uk.co.angrybee.joe.commands.minecraft.CommandReload;
import uk.co.angrybee.joe.commands.minecraft.CommandStatus;
@ -14,6 +17,9 @@ import uk.co.angrybee.joe.stores.InGameRemovedList;
import uk.co.angrybee.joe.stores.RemovedList;
import uk.co.angrybee.joe.stores.UserList;
import uk.co.angrybee.joe.stores.WhitelistedPlayers;
import uk.co.angrybee.joe.events.EssentialsVanishEvents;
import uk.co.angrybee.joe.events.SuperVanishEvents;
import uk.co.angrybee.joe.events.VanishNoPacketEvents;
import java.util.List;
import java.util.logging.Logger;
@ -45,6 +51,11 @@ public class DiscordWhitelister extends JavaPlugin
private static Server thisServer;
private static Logger pluginLogger;
// Plugins
public static Essentials essentialsPlugin;
public static VanishPlugin vanishNoPacketPlugin;
public static boolean hasSuperVanishOrPremiumVanish;
// For not counting vanished players when other players join/leave
private static int vanishedPlayersCount;
@ -65,6 +76,12 @@ public class DiscordWhitelister extends JavaPlugin
thisServer = thisPlugin.getServer();
pluginLogger = thisPlugin.getLogger();
// Get/check for plugin
PluginManager pluginManager = getServer().getPluginManager();
essentialsPlugin = (Essentials) pluginManager.getPlugin("Essentials");
vanishNoPacketPlugin = (VanishPlugin) pluginManager.getPlugin("VanishNoPacket");
hasSuperVanishOrPremiumVanish = pluginManager.getPlugin("SuperVanish") != null || pluginManager.getPlugin("PremiumVanish") != null;
int initSuccess = InitBot(true);
if(initSuccess == 0)
@ -245,8 +262,23 @@ public class DiscordWhitelister extends JavaPlugin
// Only attempt to set player count if the bot successfully initialized
if(mainConfig.getFileConfiguration().getBoolean("show-player-count"))
{
// Register events if enabled
thisServer.getPluginManager().registerEvents(new JoinLeaveEvents(), thisPlugin);
if(firstInit) {
// Register events if enabled
thisServer.getPluginManager().registerEvents(new JoinLeaveEvents(), thisPlugin);
//pluginLogger.info("Registered join/leave events!");
if (hasSuperVanishOrPremiumVanish) {
thisServer.getPluginManager().registerEvents(new SuperVanishEvents(), thisPlugin);
//pluginLogger.info("Registered SuperVanish events!");
}
if(vanishNoPacketPlugin != null) {
thisServer.getPluginManager().registerEvents(new VanishNoPacketEvents(), thisPlugin);
//pluginLogger.info("Registered VanishNoPacket events!");
}
if (essentialsPlugin != null) {
thisServer.getPluginManager().registerEvents(new EssentialsVanishEvents(), thisPlugin);
//pluginLogger.info("Registered Essentials vanish events!");
}
}
// Set initial player count
DiscordClient.SetPlayerCountStatus(getOnlineUsers());

View File

@ -0,0 +1,46 @@
package uk.co.angrybee.joe;
import de.myzelyam.api.vanish.VanishAPI;
import org.bukkit.entity.Player;
import org.bukkit.metadata.MetadataValue;
import static uk.co.angrybee.joe.DiscordWhitelister.*;
public class Utils {
// Check if player is vanished
public static boolean isVanished(Player player) {
// For Essentials
if(essentialsPlugin != null) {
//getPluginLogger().info("Checking via EssX if " + player.getDisplayName() + " is vanished: " + essentialsPlugin.getUser(player).isVanished());
//getPluginLogger().info("Checking via EssX for list of vanished players: " + essentialsPlugin.getVanishedPlayers());
if(essentialsPlugin.getUser(player).isVanished()) return true;
}
// For SuperVanish / PremiumVanish
if(VanishAPI.getPlugin() != null) {
//getPluginLogger().info("Checking via SV if " + player.getDisplayName() + " is vanished: " + VanishAPI.isInvisible(player));
//getPluginLogger().info("Checking via SV for list of vanished players: " + VanishAPI.getAllInvisiblePlayers());
if(VanishAPI.isInvisible(player)) return true;
}
// For VanishNoPacket
if(vanishNoPacketPlugin != null) {
//getPluginLogger().info("Checking via VNP if " + player.getDisplayName() + " is vanished: " + vanishNoPacketPlugin.getManager().isVanished(player));
//getPluginLogger().info("Checking via VNP for list of vanished players: " + vanishNoPacketPlugin.getManager().getVanishedPlayers());
if(vanishNoPacketPlugin.getManager().isVanished(player)) return true;
}
// For others (maybe)
for (MetadataValue meta : player.getMetadata("vanished")) {
if (meta.asBoolean()) return true;
}
// Otherwise, player is not vanished
return false;
}
}

View File

@ -0,0 +1,21 @@
package uk.co.angrybee.joe.events;
import net.ess3.api.events.VanishStatusChangeEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
public class EssentialsVanishEvents implements Listener {
@EventHandler
public void onVanishStatusChangeEvent(VanishStatusChangeEvent event){
// If value is true (player just vanished)
if(event.getValue()) {
VanishEvents.onPlayerHide(event.getAffected().getDisplayName());
}
// If value is false (player just un-vanished)
else {
VanishEvents.onPlayerShow(event.getAffected().getDisplayName());
}
}
}

View File

@ -1,5 +1,7 @@
package uk.co.angrybee.joe.events;
import org.bukkit.entity.Player;
import org.bukkit.event.EventPriority;
import uk.co.angrybee.joe.DiscordWhitelister;
import uk.co.angrybee.joe.DiscordClient;
@ -7,20 +9,20 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import uk.co.angrybee.joe.Utils;
// Used for showing player count in the discord bots status
public class JoinLeaveEvents implements Listener
{
@EventHandler
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onPlayerJoin(PlayerJoinEvent event)
{
Player player = event.getPlayer();
if(!DiscordWhitelister.showVanishedPlayersInCount)
{
if(event.getPlayer().hasPermission("discordsrv.silentjoin")
|| event.getPlayer().hasPermission("discordsrv.silentquit")
|| event.getPlayer().hasPermission("sv.joinvanished"))
if(Utils.isVanished(player))
{
DiscordWhitelister.getPlugin().getLogger().info("Player " + event.getPlayer().getDisplayName() + " joined with silent joining/quitting permission, not incrementing player count");
DiscordWhitelister.getPlugin().getLogger().info("Player " + player.getDisplayName() + " joined while vanished, not incrementing player count");
DiscordWhitelister.addVanishedPlayer();
return;
}
@ -28,16 +30,15 @@ public class JoinLeaveEvents implements Listener
DiscordClient.SetPlayerCountStatus(DiscordWhitelister.getOnlineUsers());
}
@EventHandler
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onPlayerLeave(PlayerQuitEvent event)
{
Player player = event.getPlayer();
if(!DiscordWhitelister.showVanishedPlayersInCount)
{
if(event.getPlayer().hasPermission("discordsrv.silentjoin")
|| event.getPlayer().hasPermission("discordsrv.silentquit")
|| event.getPlayer().hasPermission("sv.joinvanished"))
if(Utils.isVanished(player))
{
DiscordWhitelister.getPlugin().getLogger().info("Player " + event.getPlayer().getDisplayName() + " quit with silent joining/quitting permission, not decrementing player count");
DiscordWhitelister.getPlugin().getLogger().info("Player " + player.getDisplayName() + " quit while vanished, not decrementing player count");
DiscordWhitelister.removeVanishedPlayer();
return;
}

View File

@ -0,0 +1,21 @@
package uk.co.angrybee.joe.events;
import de.myzelyam.api.vanish.PlayerHideEvent;
import de.myzelyam.api.vanish.PlayerShowEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import uk.co.angrybee.joe.DiscordWhitelister;
public class SuperVanishEvents implements Listener {
@EventHandler
public void onPlayerShowEvent(PlayerShowEvent event){
VanishEvents.onPlayerShow(event.getPlayer().getDisplayName());
}
@EventHandler
public void onPlayerHideEvent(PlayerHideEvent event){
VanishEvents.onPlayerHide(event.getPlayer().getDisplayName());
}
}

View File

@ -0,0 +1,25 @@
package uk.co.angrybee.joe.events;
import uk.co.angrybee.joe.DiscordClient;
import uk.co.angrybee.joe.DiscordWhitelister;
public class VanishEvents {
// Called when a player exits vanished mode
public static void onPlayerShow(String playerName) {
if(!DiscordWhitelister.showVanishedPlayersInCount) {
DiscordWhitelister.getPlugin().getLogger().info("Player " + playerName + " un-vanished, incrementing player count");
DiscordWhitelister.removeVanishedPlayer();
DiscordClient.SetPlayerCountStatus(DiscordWhitelister.getOnlineUsers());
}
}
// Called when a player enters vanished mode
public static void onPlayerHide(String playerName) {
if(!DiscordWhitelister.showVanishedPlayersInCount) {
DiscordWhitelister.getPlugin().getLogger().info("Player " + playerName + " vanished, decrementing player count");
DiscordWhitelister.addVanishedPlayer();
DiscordClient.SetPlayerCountStatus(DiscordWhitelister.getOnlineUsers());
}
}
}

View File

@ -0,0 +1,21 @@
package uk.co.angrybee.joe.events;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.kitteh.vanish.event.VanishStatusChangeEvent;
public class VanishNoPacketEvents implements Listener {
@EventHandler
public void onVanishStatusChangeEvent(VanishStatusChangeEvent event){
// If value is true (player just vanished)
if(event.isVanishing()) {
VanishEvents.onPlayerHide(event.getPlayer().getDisplayName());
}
// If value is false (player just un-vanished)
else {
VanishEvents.onPlayerShow(event.getPlayer().getDisplayName());
}
}
}

View File

@ -3,6 +3,7 @@ version: 1.4.8
author: Joe Shimell
main: uk.co.angrybee.joe.DiscordWhitelister
description: Discord Whitelister.
softdepend: [Essentials, SuperVanish, VanishNoPacket]
commands:
discordwhitelister:
description: See info about this plugin