Skip to content

Commit 2d8ef29

Browse files
committed
Add form to ban and unban players/device ids easy
1 parent d7eb975 commit 2d8ef29

7 files changed

Lines changed: 210 additions & 1 deletion

File tree

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package de.mariocst.deviceban;
2+
3+
import cn.nukkit.Player;
4+
import cn.nukkit.form.element.ElementDropdown;
5+
import cn.nukkit.form.element.ElementInput;
6+
import de.mariocst.deviceban.formutils.custom.CustomForm;
7+
8+
import java.util.ArrayList;
9+
10+
public class BanForm {
11+
public void openBanForm(DeviceBan plugin, Player player) {
12+
ArrayList<String> players = new ArrayList<>();
13+
14+
players.add("DeviceID");
15+
16+
for (Player player1 : plugin.getServer().getOnlinePlayers().values()) {
17+
if (player1 != player) players.add(player1.getName());
18+
}
19+
20+
CustomForm form = new CustomForm.Builder(plugin, "§cBan")
21+
.addElement(new ElementDropdown("§6Players", players, players.indexOf("DeviceID")))
22+
.addElement(new ElementInput("§6Reason", "Hacking"))
23+
.addElement(new ElementInput("§6DeviceID (set Players to DeviceID)", player.getLoginChainData().getDeviceId()))
24+
.onSubmit((e, r) -> {
25+
if (r.getDropdownResponse(0).getElementContent().equals("DeviceID")) {
26+
if (r.getInputResponse(1).isEmpty()) {
27+
player.sendMessage(plugin.getPrefix() + "§cPlease enter a device id!");
28+
return;
29+
}
30+
31+
plugin.getBans().addDeviceId(r.getInputResponse(1), r.getInputResponse(0).isEmpty() ? "" : r.getInputResponse(0));
32+
if (r.getInputResponse(0).isEmpty()) {
33+
player.sendMessage(plugin.getPrefix() + "§cThe device id §6" + r.getInputResponse(1) + " §cgot banned!");
34+
}
35+
else {
36+
player.sendMessage(plugin.getPrefix() + "§cThe device id §6" + r.getInputResponse(1) + " §cgot banned for §6" + r.getInputResponse(0) + "§c!");
37+
}
38+
return;
39+
}
40+
41+
plugin.getBans().addBan(plugin.getServer().getPlayer(r.getDropdownResponse(0).getElementContent()), r.getInputResponse(0).isEmpty() ? "" : r.getInputResponse(0));
42+
if (r.getInputResponse(0).isEmpty()) {
43+
player.sendMessage(plugin.getPrefix() + "§cThe player §6" + r.getDropdownResponse(0).getElementContent() + " §cgot banned!");
44+
}
45+
else {
46+
player.sendMessage(plugin.getPrefix() + "§cThe player §6" + r.getDropdownResponse(0).getElementContent() + " §cgot banned for §6" + r.getInputResponse(0) + "§c!");
47+
}
48+
})
49+
.build();
50+
form.send(player);
51+
}
52+
53+
public void openUnbanForm(DeviceBan plugin, Player player) {
54+
CustomForm form = new CustomForm.Builder(plugin, "§cUnban")
55+
.addElement(new ElementDropdown("§6Device IDs", plugin.getBans().getDeviceIds()))
56+
.onSubmit((e, r) -> {
57+
plugin.getBans().removeBan(r.getDropdownResponse(0).getElementContent());
58+
player.sendMessage(plugin.getPrefix() + "§aThe device id §6" + r.getDropdownResponse(0).getElementContent() + " §agot unbanned!");
59+
})
60+
.build();
61+
form.send(player);
62+
}
63+
}

src/main/java/de/mariocst/deviceban/Bans.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,17 @@ public boolean containsXUID(Player player) {
8181
return false;
8282
}
8383

84+
public ArrayList<String> getDeviceIds() {
85+
ArrayList<String> list = new ArrayList<>();
86+
87+
for (String string : this.bans) {
88+
String[] strings = string.split(":");
89+
list.add(strings[0]);
90+
}
91+
92+
return list;
93+
}
94+
8495
public String getReason(String deviceId) {
8596
for (String string : this.bans) {
8697
String[] strings = string.split(":");

src/main/java/de/mariocst/deviceban/DeviceBan.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import cn.nukkit.plugin.PluginBase;
44
import cn.nukkit.utils.Config;
5+
import de.mariocst.deviceban.formutils.FormListener;
56
import lombok.Getter;
67
import lombok.Setter;
78

@@ -15,13 +16,19 @@ public class DeviceBan extends PluginBase {
1516

1617
private DeviceBanConfig deviceBanConfig;
1718

19+
@Getter
20+
private BanForm banForm;
21+
1822
@Override
1923
public void onEnable() {
2024
this.loadConfigs();
2125

2226
this.getServer().getCommandMap().register("deviceban", new DeviceBanCommand(this));
27+
this.getServer().getPluginManager().registerEvents(new FormListener(), this);
2328
this.getServer().getPluginManager().registerEvents(new JoinListener(this), this);
2429

30+
this.banForm = new BanForm();
31+
2532
this.log("DeviceBan enabled!");
2633
}
2734

src/main/java/de/mariocst/deviceban/DeviceBanCommand.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,14 @@ public boolean execute(CommandSender sender, String s, String[] args) {
163163
default: player.sendMessage(this.plugin.getPrefix() + "/db <config|ban|banid|unban>");
164164
}
165165
}
166+
else if (args.length == 1 && args[0].equalsIgnoreCase("banform")) {
167+
this.plugin.getBanForm().openBanForm(this.plugin, player);
168+
}
169+
else if (args.length == 1 && args[0].equalsIgnoreCase("unbanform")) {
170+
this.plugin.getBanForm().openUnbanForm(this.plugin, player);
171+
}
166172
else {
167-
player.sendMessage(this.plugin.getPrefix() + "/db <config|ban|banid|unban>");
173+
player.sendMessage(this.plugin.getPrefix() + "/db <config|ban|banid|unban|banform|unbanform>");
168174
}
169175
}
170176
else {
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package de.mariocst.deviceban.formutils;
2+
3+
import cn.nukkit.Player;
4+
import cn.nukkit.form.window.FormWindowCustom;
5+
import de.mariocst.deviceban.formutils.custom.CustomForm;
6+
7+
import java.util.HashMap;
8+
9+
public class FormHandler {
10+
public static HashMap<String, CustomForm> customPending = new HashMap<>();
11+
12+
public static void handleCustom(Player player, FormWindowCustom form) {
13+
if (customPending.containsKey(player.getName())) {
14+
CustomForm cform = customPending.get(player.getName());
15+
customPending.remove(player.getName());
16+
17+
if (form.getResponse() == null) {
18+
cform.setClosed(player);
19+
return;
20+
}
21+
22+
cform.setSubmitted(player, form.getResponse());
23+
}
24+
}
25+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package de.mariocst.deviceban.formutils;
2+
3+
import cn.nukkit.event.EventHandler;
4+
import cn.nukkit.event.Listener;
5+
import cn.nukkit.event.player.PlayerFormRespondedEvent;
6+
import cn.nukkit.form.window.FormWindowCustom;
7+
import cn.nukkit.form.window.FormWindowModal;
8+
import cn.nukkit.form.window.FormWindowSimple;
9+
10+
public class FormListener implements Listener {
11+
@EventHandler
12+
public void onResponse(PlayerFormRespondedEvent event) {
13+
if (event.getWindow() instanceof FormWindowCustom) FormHandler.handleCustom(event.getPlayer(), (FormWindowCustom) event.getWindow());
14+
}
15+
}
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package de.mariocst.deviceban.formutils.custom;
2+
3+
import cn.nukkit.Player;
4+
import cn.nukkit.form.element.Element;
5+
import cn.nukkit.form.response.FormResponseCustom;
6+
import cn.nukkit.form.window.FormWindowCustom;
7+
import de.mariocst.deviceban.DeviceBan;
8+
import de.mariocst.deviceban.formutils.FormHandler;
9+
10+
import java.util.ArrayList;
11+
import java.util.function.BiConsumer;
12+
import java.util.function.Consumer;
13+
14+
public class CustomForm {
15+
private final DeviceBan plugin;
16+
17+
private final String title;
18+
private final ArrayList<Element> elements;
19+
private final Consumer<Player> closeCallback;
20+
private final BiConsumer<Player, FormResponseCustom> submitCallback;
21+
22+
public CustomForm(DeviceBan plugin, Builder b) {
23+
this.plugin = plugin;
24+
this.title = b.title;
25+
this.elements = b.elements;
26+
this.closeCallback = b.closeCallback;
27+
this.submitCallback = b.submitCallback;
28+
}
29+
30+
public void send(Player player) {
31+
FormWindowCustom form = new FormWindowCustom(title);
32+
elements.forEach(form::addElement);
33+
34+
FormHandler.customPending.put(player.getName(), this);
35+
player.showFormWindow(form);
36+
37+
this.plugin.getServer().getScheduler().scheduleDelayedTask(this.plugin, () -> player.sendExperience(player.getExperience()), 20);
38+
}
39+
40+
public void setClosed(Player player) {
41+
if (closeCallback == null) return;
42+
43+
closeCallback.accept(player);
44+
}
45+
46+
public void setSubmitted(Player player, FormResponseCustom form) {
47+
submitCallback.accept(player, form);
48+
}
49+
50+
public static class Builder {
51+
private final DeviceBan plugin;
52+
53+
private final String title;
54+
private final ArrayList<Element> elements = new ArrayList<>();
55+
private Consumer<Player> closeCallback;
56+
private BiConsumer<Player, FormResponseCustom> submitCallback;
57+
58+
public Builder(DeviceBan plugin, String title) {
59+
this.plugin = plugin;
60+
this.title = title;
61+
}
62+
63+
public Builder addElement(Element element) {
64+
elements.add(element);
65+
return this;
66+
}
67+
68+
public Builder onClose(Consumer<Player> cb) {
69+
this.closeCallback = cb;
70+
return this;
71+
}
72+
73+
public Builder onSubmit(BiConsumer<Player, FormResponseCustom> cb) {
74+
this.submitCallback = cb;
75+
return this;
76+
}
77+
78+
public CustomForm build() {
79+
return new CustomForm(this.plugin, this);
80+
}
81+
}
82+
}

0 commit comments

Comments
 (0)