Skip to content

Commit ff66cec

Browse files
committed
Implement teleport form instead of requiring level name
1 parent 3d09ae6 commit ff66cec

2 files changed

Lines changed: 43 additions & 15 deletions

File tree

src/main/java/de/kcodeyt/plotplugin/PlotPlugin.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ public class PlotPlugin extends PluginBase {
5252
@Getter
5353
private Language language;
5454

55+
@Getter
5556
private Map<String, PlotManager> plotManagerMap;
5657
private PlayerManager playerManager;
5758

src/main/java/de/kcodeyt/plotplugin/command/defaults/TeleportCommand.java

Lines changed: 42 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,37 +17,64 @@
1717
package de.kcodeyt.plotplugin.command.defaults;
1818

1919
import cn.nukkit.Player;
20-
import cn.nukkit.command.data.CommandParamType;
21-
import cn.nukkit.command.data.CommandParameter;
20+
import cn.nukkit.event.EventHandler;
21+
import cn.nukkit.event.Listener;
22+
import cn.nukkit.event.player.PlayerFormRespondedEvent;
23+
import cn.nukkit.form.element.ElementButton;
24+
import cn.nukkit.form.response.FormResponse;
25+
import cn.nukkit.form.response.FormResponseSimple;
26+
import cn.nukkit.form.window.FormWindowSimple;
2227
import de.kcodeyt.plotplugin.PlotPlugin;
2328
import de.kcodeyt.plotplugin.command.SubCommand;
2429
import de.kcodeyt.plotplugin.manager.PlotManager;
2530

31+
import java.util.HashMap;
32+
import java.util.Map;
33+
import java.util.function.Consumer;
34+
2635
public class TeleportCommand extends SubCommand {
2736

37+
private final Map<Player, Map<Integer, Consumer<FormResponse>>> map;
38+
2839
public TeleportCommand(PlotPlugin plugin) {
2940
super(plugin, "teleport", "tp");
3041
this.setPermission("plot.command.admin.teleport");
31-
this.addParameter(CommandParameter.newType("level", CommandParamType.STRING));
42+
43+
this.map = new HashMap<>();
44+
45+
this.plugin.getServer().getPluginManager().registerEvents(new Listener() {
46+
@EventHandler
47+
public void onResponded(PlayerFormRespondedEvent event) {
48+
final Map<Integer, Consumer<FormResponse>> map;
49+
if((map = TeleportCommand.this.map.get(event.getPlayer())) != null) {
50+
final Consumer<FormResponse> consumer = map.get(event.getFormID());
51+
if(consumer != null) consumer.accept(event.getResponse());
52+
}
53+
}
54+
}, this.plugin);
3255
}
3356

3457
@Override
3558
public boolean execute(Player player, String[] args) {
36-
final String levelName = args.length > 0 ? args[0] : "";
59+
Map<Integer, Consumer<FormResponse>> map;
60+
if((map = this.map.get(player)) == null)
61+
this.map.put(player, map = new HashMap<>());
62+
63+
final Map<String, PlotManager> plotManagers = this.plugin.getPlotManagerMap();
64+
final FormWindowSimple window = new FormWindowSimple(this.translate("teleport-form-title"), "");
3765

38-
if(levelName.trim().isEmpty()) {
39-
player.sendMessage(this.translate("no-world"));
40-
return false;
41-
}
66+
for(String levelName : plotManagers.keySet())
67+
window.addButton(new ElementButton(levelName));
4268

43-
final PlotManager plotManager = this.plugin.getPlotManager(levelName);
44-
if(plotManager == null) {
45-
player.sendMessage(this.translate("teleport-no-plot-world"));
46-
return false;
47-
}
69+
map.put(player.showFormWindow(window), response -> {
70+
if(response instanceof FormResponseSimple) {
71+
final PlotManager plotManager = plotManagers.get(((FormResponseSimple) response).getClickedButton().getText());
72+
if(plotManager == null) return;
4873

49-
player.teleport(plotManager.getLevel().getSpawnLocation());
50-
player.sendMessage(this.translate("teleport-success", plotManager.getLevel().getFolderName()));
74+
player.teleport(plotManager.getLevel().getSpawnLocation());
75+
player.sendMessage(this.translate("teleport-success", plotManager.getLevel().getFolderName()));
76+
}
77+
});
5178
return false;
5279
}
5380

0 commit comments

Comments
 (0)