Skip to content

Commit 568ad7a

Browse files
committed
Add configuration option to kick players when toggling premium state
Fixes #1285
1 parent 1464ef2 commit 568ad7a

File tree

6 files changed

+57
-25
lines changed

6 files changed

+57
-25
lines changed

bukkit/src/main/java/com/github/games647/fastlogin/bukkit/command/CrackedCommand.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import com.github.games647.fastlogin.core.storage.StoredProfile;
3131
import org.bukkit.command.Command;
3232
import org.bukkit.command.CommandSender;
33+
import org.bukkit.entity.Player;
3334
import org.jetbrains.annotations.NotNull;
3435

3536
import static com.github.games647.fastlogin.core.shared.event.FastLoginPremiumToggleEvent.PremiumToggleReason;
@@ -57,6 +58,7 @@ private void onCrackedSelf(CommandSender sender) {
5758
return;
5859
}
5960

61+
Player player = (Player) sender;
6062
if (forwardCrackedCommand(sender, sender.getName())) {
6163
return;
6264
}
@@ -71,7 +73,16 @@ private void onCrackedSelf(CommandSender sender) {
7173
plugin.getScheduler().runAsync(() -> {
7274
plugin.getCore().getStorage().save(profile);
7375
plugin.getServer().getPluginManager().callEvent(
74-
new BukkitFastLoginPremiumToggleEvent(sender, profile, PremiumToggleReason.COMMAND_OTHER));
76+
new BukkitFastLoginPremiumToggleEvent(sender, profile, PremiumToggleReason.COMMAND_OTHER)
77+
);
78+
79+
plugin.getScheduler().getSyncExecutor().execute(() -> {
80+
if (plugin.getCore().getConfig().getBoolean("kick-toggle", true)) {
81+
player.kickPlayer(plugin.getCore().getMessage("remove-premium"));
82+
} else {
83+
plugin.getCore().sendLocaleMessage("add-premium", sender);
84+
}
85+
});
7586
});
7687
} else {
7788
plugin.getCore().sendLocaleMessage("not-premium", sender);

bukkit/src/main/java/com/github/games647/fastlogin/bukkit/command/PremiumCommand.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@ private void onPremiumSelf(CommandSender sender) {
6868
return;
6969
}
7070

71-
UUID id = ((Player) sender).getUniqueId();
71+
Player player = (Player) sender;
72+
UUID id = player.getUniqueId();
7273
if (plugin.getConfig().getBoolean("premium-warning") && !plugin.getCore().getPendingConfirms().contains(id)) {
7374
sender.sendMessage(plugin.getCore().getMessage("premium-warning"));
7475
plugin.getCore().getPendingConfirms().add(id);
@@ -86,10 +87,17 @@ private void onPremiumSelf(CommandSender sender) {
8687
plugin.getScheduler().runAsync(() -> {
8788
plugin.getCore().getStorage().save(profile);
8889
plugin.getServer().getPluginManager().callEvent(
89-
new BukkitFastLoginPremiumToggleEvent(sender, profile, PremiumToggleReason.COMMAND_SELF));
90+
new BukkitFastLoginPremiumToggleEvent(sender, profile, PremiumToggleReason.COMMAND_SELF)
91+
);
92+
93+
plugin.getScheduler().getSyncExecutor().execute(() -> {
94+
if (plugin.getCore().getConfig().getBoolean("kick-toggle", true)) {
95+
player.kickPlayer(plugin.getCore().getMessage("remove-premium"));
96+
} else {
97+
plugin.getCore().sendLocaleMessage("add-premium", sender);
98+
}
99+
});
90100
});
91-
92-
plugin.getCore().sendLocaleMessage("add-premium", sender);
93101
}
94102
}
95103

@@ -117,7 +125,8 @@ private void onPremiumOther(CommandSender sender, Command command, String[] args
117125
plugin.getScheduler().runAsync(() -> {
118126
plugin.getCore().getStorage().save(profile);
119127
plugin.getServer().getPluginManager().callEvent(
120-
new BukkitFastLoginPremiumToggleEvent(sender, profile, PremiumToggleReason.COMMAND_OTHER));
128+
new BukkitFastLoginPremiumToggleEvent(sender, profile, PremiumToggleReason.COMMAND_OTHER)
129+
);
121130
});
122131

123132
plugin.getCore().sendLocaleMessage("add-premium-other", sender);

bungee/src/main/java/com/github/games647/fastlogin/bungee/task/AsyncToggleMessage.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,12 @@ private void turnOffPremium() {
7676
? PremiumToggleReason.COMMAND_OTHER : PremiumToggleReason.COMMAND_SELF;
7777
core.getPlugin().getProxy().getPluginManager().callEvent(
7878
new BungeeFastLoginPremiumToggleEvent(playerProfile, reason));
79-
sendMessage("remove-premium");
79+
80+
if (isPlayerSender && core.getConfig().getBoolean("kick-toggle", true)) {
81+
sender.disconnect(TextComponent.fromLegacyText(core.getMessage("remove-premium")));
82+
} else {
83+
sendMessage("remove-premium");
84+
}
8085
}
8186

8287
private void activatePremium() {

core/src/main/resources/config.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,11 +150,14 @@ nameChangeCheck: false
150150
forwardSkin: true
151151

152152
# Displays a warning message that this message SHOULD only be invoked by
153-
# users who actually are the owner of this account. So not by cracked players
153+
# users who actually are the owner of this account (and not cracked players)
154154
#
155155
# If they still want to invoke the command, they have to invoke /premium again
156156
premium-warning: true
157157

158+
# Kick players after they confirmed the command from above.
159+
kick-toggle: true
160+
158161
# ======[[ Spigot+ProtocolLib users only ]]======
159162
# When set to true, enables the use of alternative session resolver which does not send the server IP
160163
# to mojang session servers. This setting might be useful when you are trying to run the server via a

velocity/src/main/java/com/github/games647/fastlogin/velocity/listener/PluginMessageListener.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,12 @@ public void onPluginMessage(PluginMessageEvent pluginMessageEvent) {
8383
plugin.getScheduler().runAsync(() -> readMessage(forPlayer, channel, data));
8484
}
8585

86-
private void readMessage(Player forPlayer, String channel, byte[] data) {
86+
private void readMessage(Player sender, String channel, byte[] data) {
8787
FastLoginCore<Player, CommandSource, FastLoginVelocity> core = plugin.getCore();
8888

8989
ByteArrayDataInput dataInput = ByteStreams.newDataInput(data);
9090
if (successChannel.equals(channel)) {
91-
onSuccessMessage(forPlayer);
91+
onSuccessMessage(sender);
9292
} else if (changeChannel.equals(channel)) {
9393
ChangePremiumMessage changeMessage = new ChangePremiumMessage();
9494
changeMessage.readFrom(dataInput);
@@ -97,19 +97,19 @@ private void readMessage(Player forPlayer, String channel, byte[] data) {
9797
boolean isSourceInvoker = changeMessage.isSourceInvoker();
9898
if (changeMessage.shouldEnable()) {
9999
Boolean premiumWarning = plugin.getCore().getConfig().get("premium-warning", true);
100-
if (playerName.equals(forPlayer.getUsername()) && premiumWarning
101-
&& !core.getPendingConfirms().contains(forPlayer.getUniqueId())) {
100+
if (playerName.equals(sender.getUsername()) && premiumWarning
101+
&& !core.getPendingConfirms().contains(sender.getUniqueId())) {
102102
String message = core.getMessage("premium-warning");
103-
forPlayer.sendMessage(LegacyComponentSerializer.legacyAmpersand().deserialize(message));
104-
core.getPendingConfirms().add(forPlayer.getUniqueId());
103+
sender.sendMessage(LegacyComponentSerializer.legacyAmpersand().deserialize(message));
104+
core.getPendingConfirms().add(sender.getUniqueId());
105105
return;
106106
}
107107

108-
core.getPendingConfirms().remove(forPlayer.getUniqueId());
109-
Runnable task = new AsyncToggleMessage(core, forPlayer, playerName, true, isSourceInvoker);
108+
core.getPendingConfirms().remove(sender.getUniqueId());
109+
Runnable task = new AsyncToggleMessage(core, sender, playerName, true, isSourceInvoker);
110110
plugin.getScheduler().runAsync(task);
111111
} else {
112-
Runnable task = new AsyncToggleMessage(core, forPlayer, playerName, false, isSourceInvoker);
112+
Runnable task = new AsyncToggleMessage(core, sender, playerName, false, isSourceInvoker);
113113
plugin.getScheduler().runAsync(task);
114114
}
115115
}

velocity/src/main/java/com/github/games647/fastlogin/velocity/task/AsyncToggleMessage.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,29 +33,26 @@
3333
import com.velocitypowered.api.command.CommandSource;
3434
import com.velocitypowered.api.proxy.ConsoleCommandSource;
3535
import com.velocitypowered.api.proxy.Player;
36+
import net.kyori.adventure.text.TextComponent;
3637
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
3738

3839
public class AsyncToggleMessage implements Runnable {
3940

4041
private final FastLoginCore<Player, CommandSource, FastLoginVelocity> core;
41-
private final CommandSource sender;
42+
private final Player sender;
4243
private final String senderName;
4344
private final String targetPlayer;
4445
private final boolean toPremium;
4546
private final boolean isPlayerSender;
4647

4748
public AsyncToggleMessage(FastLoginCore<Player, CommandSource, FastLoginVelocity> core,
48-
CommandSource sender, String playerName, boolean toPremium, boolean playerSender) {
49+
Player sender, String playerName, boolean toPremium, boolean playerSender) {
4950
this.core = core;
5051
this.sender = sender;
5152
this.targetPlayer = playerName;
5253
this.toPremium = toPremium;
5354
this.isPlayerSender = playerSender;
54-
if (sender instanceof Player playSender) {
55-
senderName = playSender.getUsername();
56-
} else {
57-
senderName = "";
58-
}
55+
this.senderName = sender.getUsername();
5956
}
6057

6158
@Override
@@ -82,7 +79,14 @@ private void turnOffPremium() {
8279
? PremiumToggleReason.COMMAND_OTHER : PremiumToggleReason.COMMAND_SELF;
8380
core.getPlugin().getProxy().getEventManager().fire(
8481
new VelocityFastLoginPremiumToggleEvent(playerProfile, reason));
85-
sendMessage("remove-premium");
82+
83+
if (isPlayerSender && core.getConfig().getBoolean("kick-toggle", true)) {
84+
TextComponent msg = LegacyComponentSerializer.legacyAmpersand()
85+
.deserialize(core.getMessage("remove-premium"));
86+
sender.disconnect(msg);
87+
} else {
88+
sendMessage("remove-premium");
89+
}
8690
}
8791

8892
private void activatePremium() {

0 commit comments

Comments
 (0)