diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/command/CrackedCommand.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/command/CrackedCommand.java index 04c1c91a..56510e93 100644 --- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/command/CrackedCommand.java +++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/command/CrackedCommand.java @@ -30,6 +30,7 @@ import com.github.games647.fastlogin.bukkit.event.BukkitFastLoginPremiumToggleEv import com.github.games647.fastlogin.core.storage.StoredProfile; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import static com.github.games647.fastlogin.core.shared.event.FastLoginPremiumToggleEvent.PremiumToggleReason; @@ -57,6 +58,7 @@ public class CrackedCommand extends ToggleCommand { return; } + Player player = (Player) sender; if (forwardCrackedCommand(sender, sender.getName())) { return; } @@ -71,7 +73,16 @@ public class CrackedCommand extends ToggleCommand { plugin.getScheduler().runAsync(() -> { plugin.getCore().getStorage().save(profile); plugin.getServer().getPluginManager().callEvent( - new BukkitFastLoginPremiumToggleEvent(sender, profile, PremiumToggleReason.COMMAND_OTHER)); + new BukkitFastLoginPremiumToggleEvent(sender, profile, PremiumToggleReason.COMMAND_OTHER) + ); + + plugin.getScheduler().getSyncExecutor().execute(() -> { + if (plugin.getCore().getConfig().getBoolean("kick-toggle", true)) { + player.kickPlayer(plugin.getCore().getMessage("remove-premium")); + } else { + plugin.getCore().sendLocaleMessage("add-premium", sender); + } + }); }); } else { plugin.getCore().sendLocaleMessage("not-premium", sender); diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/command/PremiumCommand.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/command/PremiumCommand.java index 20af2de4..de4fe13b 100644 --- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/command/PremiumCommand.java +++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/command/PremiumCommand.java @@ -68,7 +68,8 @@ public class PremiumCommand extends ToggleCommand { return; } - UUID id = ((Player) sender).getUniqueId(); + Player player = (Player) sender; + UUID id = player.getUniqueId(); if (plugin.getConfig().getBoolean("premium-warning") && !plugin.getCore().getPendingConfirms().contains(id)) { sender.sendMessage(plugin.getCore().getMessage("premium-warning")); plugin.getCore().getPendingConfirms().add(id); @@ -86,10 +87,17 @@ public class PremiumCommand extends ToggleCommand { plugin.getScheduler().runAsync(() -> { plugin.getCore().getStorage().save(profile); plugin.getServer().getPluginManager().callEvent( - new BukkitFastLoginPremiumToggleEvent(sender, profile, PremiumToggleReason.COMMAND_SELF)); - }); + new BukkitFastLoginPremiumToggleEvent(sender, profile, PremiumToggleReason.COMMAND_SELF) + ); - plugin.getCore().sendLocaleMessage("add-premium", sender); + plugin.getScheduler().getSyncExecutor().execute(() -> { + if (plugin.getCore().getConfig().getBoolean("kick-toggle", true)) { + player.kickPlayer(plugin.getCore().getMessage("remove-premium")); + } else { + plugin.getCore().sendLocaleMessage("add-premium", sender); + } + }); + }); } } @@ -117,7 +125,8 @@ public class PremiumCommand extends ToggleCommand { plugin.getScheduler().runAsync(() -> { plugin.getCore().getStorage().save(profile); plugin.getServer().getPluginManager().callEvent( - new BukkitFastLoginPremiumToggleEvent(sender, profile, PremiumToggleReason.COMMAND_OTHER)); + new BukkitFastLoginPremiumToggleEvent(sender, profile, PremiumToggleReason.COMMAND_OTHER) + ); }); plugin.getCore().sendLocaleMessage("add-premium-other", sender); diff --git a/bungee/src/main/java/com/github/games647/fastlogin/bungee/task/AsyncToggleMessage.java b/bungee/src/main/java/com/github/games647/fastlogin/bungee/task/AsyncToggleMessage.java index 30162b92..bc4d9f57 100644 --- a/bungee/src/main/java/com/github/games647/fastlogin/bungee/task/AsyncToggleMessage.java +++ b/bungee/src/main/java/com/github/games647/fastlogin/bungee/task/AsyncToggleMessage.java @@ -76,7 +76,12 @@ public class AsyncToggleMessage implements Runnable { ? PremiumToggleReason.COMMAND_OTHER : PremiumToggleReason.COMMAND_SELF; core.getPlugin().getProxy().getPluginManager().callEvent( new BungeeFastLoginPremiumToggleEvent(playerProfile, reason)); - sendMessage("remove-premium"); + + if (isPlayerSender && core.getConfig().getBoolean("kick-toggle", true)) { + sender.disconnect(TextComponent.fromLegacyText(core.getMessage("remove-premium"))); + } else { + sendMessage("remove-premium"); + } } private void activatePremium() { diff --git a/core/src/main/resources/config.yml b/core/src/main/resources/config.yml index 07f453de..4f230aca 100644 --- a/core/src/main/resources/config.yml +++ b/core/src/main/resources/config.yml @@ -150,11 +150,14 @@ nameChangeCheck: false forwardSkin: true # Displays a warning message that this message SHOULD only be invoked by -# users who actually are the owner of this account. So not by cracked players +# users who actually are the owner of this account (and not cracked players) # # If they still want to invoke the command, they have to invoke /premium again premium-warning: true +# Kick players after they confirmed the command from above. +kick-toggle: true + # ======[[ Spigot+ProtocolLib users only ]]====== # When set to true, enables the use of alternative session resolver which does not send the server IP # to mojang session servers. This setting might be useful when you are trying to run the server via a diff --git a/velocity/src/main/java/com/github/games647/fastlogin/velocity/listener/PluginMessageListener.java b/velocity/src/main/java/com/github/games647/fastlogin/velocity/listener/PluginMessageListener.java index 36f916c2..03afd899 100644 --- a/velocity/src/main/java/com/github/games647/fastlogin/velocity/listener/PluginMessageListener.java +++ b/velocity/src/main/java/com/github/games647/fastlogin/velocity/listener/PluginMessageListener.java @@ -83,12 +83,12 @@ public class PluginMessageListener { plugin.getScheduler().runAsync(() -> readMessage(forPlayer, channel, data)); } - private void readMessage(Player forPlayer, String channel, byte[] data) { + private void readMessage(Player sender, String channel, byte[] data) { FastLoginCore core = plugin.getCore(); ByteArrayDataInput dataInput = ByteStreams.newDataInput(data); if (successChannel.equals(channel)) { - onSuccessMessage(forPlayer); + onSuccessMessage(sender); } else if (changeChannel.equals(channel)) { ChangePremiumMessage changeMessage = new ChangePremiumMessage(); changeMessage.readFrom(dataInput); @@ -97,19 +97,19 @@ public class PluginMessageListener { boolean isSourceInvoker = changeMessage.isSourceInvoker(); if (changeMessage.shouldEnable()) { Boolean premiumWarning = plugin.getCore().getConfig().get("premium-warning", true); - if (playerName.equals(forPlayer.getUsername()) && premiumWarning - && !core.getPendingConfirms().contains(forPlayer.getUniqueId())) { + if (playerName.equals(sender.getUsername()) && premiumWarning + && !core.getPendingConfirms().contains(sender.getUniqueId())) { String message = core.getMessage("premium-warning"); - forPlayer.sendMessage(LegacyComponentSerializer.legacyAmpersand().deserialize(message)); - core.getPendingConfirms().add(forPlayer.getUniqueId()); + sender.sendMessage(LegacyComponentSerializer.legacyAmpersand().deserialize(message)); + core.getPendingConfirms().add(sender.getUniqueId()); return; } - core.getPendingConfirms().remove(forPlayer.getUniqueId()); - Runnable task = new AsyncToggleMessage(core, forPlayer, playerName, true, isSourceInvoker); + core.getPendingConfirms().remove(sender.getUniqueId()); + Runnable task = new AsyncToggleMessage(core, sender, playerName, true, isSourceInvoker); plugin.getScheduler().runAsync(task); } else { - Runnable task = new AsyncToggleMessage(core, forPlayer, playerName, false, isSourceInvoker); + Runnable task = new AsyncToggleMessage(core, sender, playerName, false, isSourceInvoker); plugin.getScheduler().runAsync(task); } } diff --git a/velocity/src/main/java/com/github/games647/fastlogin/velocity/task/AsyncToggleMessage.java b/velocity/src/main/java/com/github/games647/fastlogin/velocity/task/AsyncToggleMessage.java index b9ff3bee..21abf3cf 100644 --- a/velocity/src/main/java/com/github/games647/fastlogin/velocity/task/AsyncToggleMessage.java +++ b/velocity/src/main/java/com/github/games647/fastlogin/velocity/task/AsyncToggleMessage.java @@ -33,29 +33,26 @@ import com.github.games647.fastlogin.velocity.event.VelocityFastLoginPremiumTogg import com.velocitypowered.api.command.CommandSource; import com.velocitypowered.api.proxy.ConsoleCommandSource; import com.velocitypowered.api.proxy.Player; +import net.kyori.adventure.text.TextComponent; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; public class AsyncToggleMessage implements Runnable { private final FastLoginCore core; - private final CommandSource sender; + private final Player sender; private final String senderName; private final String targetPlayer; private final boolean toPremium; private final boolean isPlayerSender; public AsyncToggleMessage(FastLoginCore core, - CommandSource sender, String playerName, boolean toPremium, boolean playerSender) { + Player sender, String playerName, boolean toPremium, boolean playerSender) { this.core = core; this.sender = sender; this.targetPlayer = playerName; this.toPremium = toPremium; this.isPlayerSender = playerSender; - if (sender instanceof Player playSender) { - senderName = playSender.getUsername(); - } else { - senderName = ""; - } + this.senderName = sender.getUsername(); } @Override @@ -82,7 +79,14 @@ public class AsyncToggleMessage implements Runnable { ? PremiumToggleReason.COMMAND_OTHER : PremiumToggleReason.COMMAND_SELF; core.getPlugin().getProxy().getEventManager().fire( new VelocityFastLoginPremiumToggleEvent(playerProfile, reason)); - sendMessage("remove-premium"); + + if (isPlayerSender && core.getConfig().getBoolean("kick-toggle", true)) { + TextComponent msg = LegacyComponentSerializer.legacyAmpersand() + .deserialize(core.getMessage("remove-premium")); + sender.disconnect(msg); + } else { + sendMessage("remove-premium"); + } } private void activatePremium() {