mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-18 18:23:06 +00:00
Command pagination
This commit is contained in:
parent
dd0b4f27d4
commit
ae763ae25d
@ -359,6 +359,18 @@ public class VirtualDecreeCommand {
|
||||
return true;
|
||||
}
|
||||
|
||||
else if(args.size() == 1)
|
||||
{
|
||||
for(String i : args)
|
||||
{
|
||||
if(i.startsWith("help="))
|
||||
{
|
||||
sender.sendDecreeHelp(this, Integer.parseInt(i.split("\\Q=\\E")[1])-1);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
String head = args.get(0);
|
||||
VirtualDecreeCommand match = matchNode(head, skip);
|
||||
|
||||
|
@ -21,6 +21,7 @@ package com.volmit.iris.util.plugin;
|
||||
import com.volmit.iris.Iris;
|
||||
import com.volmit.iris.core.IrisSettings;
|
||||
import com.volmit.iris.util.collection.KList;
|
||||
import com.volmit.iris.util.collection.KMap;
|
||||
import com.volmit.iris.util.decree.DecreeParameter;
|
||||
import com.volmit.iris.util.decree.virtual.VirtualDecreeCommand;
|
||||
import com.volmit.iris.util.format.C;
|
||||
@ -41,12 +42,14 @@ import org.bukkit.permissions.Permission;
|
||||
import org.bukkit.permissions.PermissionAttachment;
|
||||
import org.bukkit.permissions.PermissionAttachmentInfo;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.util.ChatPaginator;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
@ -408,25 +411,73 @@ public class VolmitSender implements CommandSender {
|
||||
sendHeader(name, 46);
|
||||
}
|
||||
|
||||
|
||||
public void sendDecreeHelp(VirtualDecreeCommand v) {
|
||||
sendDecreeHelp(v, 0);
|
||||
}
|
||||
|
||||
|
||||
public static <T> KList<T> paginate(KList<T> all, int linesPerPage, int page, AtomicBoolean hasNext)
|
||||
{
|
||||
int totalPages = (int) Math.ceil((double)all.size() / linesPerPage);
|
||||
page = page < 0 ? 0 : page >= totalPages ? totalPages - 1 : page;
|
||||
hasNext.set(page < totalPages-1);
|
||||
KList<T> d = new KList<>();
|
||||
|
||||
for(int i = linesPerPage * page; i < Math.min(all.size(), linesPerPage * (page + 1)); i++)
|
||||
{
|
||||
d.add(all.get(i));
|
||||
}
|
||||
|
||||
return d;
|
||||
}
|
||||
|
||||
public void sendDecreeHelp(VirtualDecreeCommand v, int page) {
|
||||
int m = v.getNodes().size();
|
||||
|
||||
sendMessageRaw("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
|
||||
|
||||
if (v.getNodes().isNotEmpty()) {
|
||||
sendHeader(Form.capitalize(v.getName()) + " Help");
|
||||
sendHeader(v.getPath() + (page > 0 ? (" {" + (page+1) + "}") : ""));
|
||||
if (isPlayer() && v.getParent() != null) {
|
||||
sendMessageRaw("<hover:show_text:'" + "<#b54b38>Click to go back to <#3299bf>" + Form.capitalize(v.getParent().getName()) + " Help" + "'><click:run_command:" + v.getParent().getPath() + "><font:minecraft:uniform><#f58571>〈 Back</click></hover>");
|
||||
}
|
||||
|
||||
for (VirtualDecreeCommand i : v.getNodes()) {
|
||||
AtomicBoolean next = new AtomicBoolean(false);
|
||||
for (VirtualDecreeCommand i : paginate(v.getNodes(), 17, page, next)) {
|
||||
sendDecreeHelpNode(i);
|
||||
}
|
||||
|
||||
String s = "";
|
||||
int l = 75 - (page > 0 ? 10 : 0) - (next.get() ? 10 : 0);
|
||||
|
||||
if(page > 0)
|
||||
{
|
||||
s += "<hover:show_text:'<green>Click to go back to page " + page + "'><click:run_command:" + v.getPath() + " help=" + page + "><gradient:#27b84d:#2770b8>〈 Page " + page + "</click></hover><reset> ";
|
||||
}
|
||||
|
||||
s += "<reset><font:minecraft:uniform><strikethrough><gradient:#32bfad:#34eb6b>" + Form.repeat(" ", l) + "<reset>";
|
||||
|
||||
if(next.get())
|
||||
{
|
||||
s += " <hover:show_text:'<green>Click to go to back to page " + (page+2) + "'><click:run_command:" + v.getPath() + " help=" + (page+2) + "><gradient:#2770b8:#27b84d>Page " + (page+2) + " ❭</click></hover>";
|
||||
}
|
||||
|
||||
sendMessageRaw(s);
|
||||
} else {
|
||||
sendMessage(C.RED + "There are no subcommands in this group! Contact support, this is a command design issue!");
|
||||
}
|
||||
}
|
||||
|
||||
private static final KMap<String, String> helpCache = new KMap<>();
|
||||
|
||||
public void sendDecreeHelpNode(VirtualDecreeCommand i) {
|
||||
if (isPlayer()) {
|
||||
sendMessageRaw(helpCache.compute(i.getPath(), (k, v) -> {
|
||||
if(v != null)
|
||||
{
|
||||
return v;
|
||||
}
|
||||
|
||||
String newline = "<reset>\n";
|
||||
|
||||
@ -519,7 +570,8 @@ public class VolmitSender implements CommandSender {
|
||||
" " +
|
||||
nodes;
|
||||
|
||||
sendMessageRaw(wrapper);
|
||||
return wrapper;
|
||||
}));
|
||||
} else {
|
||||
sendMessage(i.getPath());
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user