13
0

Add Page Command #130

Zusammengeführt
Chaoscaot hat 2 Commits von refactor nach master 2022-09-11 15:06:58 +02:00 zusammengeführt
4 geänderte Dateien mit 61 neuen und 5 gelöschten Zeilen

Datei anzeigen

@ -22,6 +22,8 @@ package de.steamwar.schematicsystem;
import de.steamwar.message.Message; import de.steamwar.message.Message;
import de.steamwar.schematicsystem.commands.DownloadCommand; import de.steamwar.schematicsystem.commands.DownloadCommand;
import de.steamwar.schematicsystem.commands.SchematicCommand; import de.steamwar.schematicsystem.commands.SchematicCommand;
import de.steamwar.schematicsystem.listener.PlayerEventListener;
import org.bukkit.Bukkit;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
public class SchematicSystem extends JavaPlugin { public class SchematicSystem extends JavaPlugin {
@ -35,6 +37,8 @@ public class SchematicSystem extends JavaPlugin {
new SchematicCommand(); new SchematicCommand();
new DownloadCommand(); new DownloadCommand();
Bukkit.getPluginManager().registerEvents(new PlayerEventListener(), this);
} }
public static SchematicSystem getInstance() { public static SchematicSystem getInstance() {

Datei anzeigen

@ -85,7 +85,7 @@ public class SchematicCommand extends SWCommand {
@Register("list") @Register("list")
@Register({"list", "/"}) @Register({"list", "/"})
public void schemList(Player player, @OptionalValue(value = "1", onlyUINIG = true) int page) { public void schemList(Player player, @OptionalValue(value = "1", onlyUINIG = true) int page) {
renderSchemlist(player, SchematicNode.getSchematicsAccessibleByUser(getUser(player).getId(), 0), Math.max(page - 1, 0), null, SchematicListBehavior.DEFAULT); createCachedSchemList(player, SchematicNode.getSchematicsAccessibleByUser(getUser(player).getId(), 0), Math.max(page - 1, 0), null, SchematicListBehavior.DEFAULT);
} }
@Register({"list", "public"}) @Register({"list", "public"})
@ -96,13 +96,13 @@ public class SchematicCommand extends SWCommand {
@Register({"list", "public"}) @Register({"list", "public"})
@Register({"list", "public", "/"}) @Register({"list", "public", "/"})
public void schemListPublic(Player player, @OptionalValue(value = "1", onlyUINIG = true) int page) { public void schemListPublic(Player player, @OptionalValue(value = "1", onlyUINIG = true) int page) {
renderSchemlist(player, SchematicNode.getSchematicsAccessibleByUser(0, 0), Math.max(page - 1, 0), null, SchematicListBehavior.builder().setPublics(true).setPageCommandGen(integer -> "/schem list public " + integer).build()); createCachedSchemList(player, SchematicNode.getSchematicsAccessibleByUser(0, 0), Math.max(page - 1, 0), null, SchematicListBehavior.builder().setPublics(true).setPageCommandGen(integer -> "/schem list public " + integer).build());
} }
@Register("list") @Register("list")
public void schemList(Player player, @Validator("isDirValidator") @Mapper("dirMapper") SchematicNode node, @OptionalValue("1") int page) { public void schemList(Player player, @Validator("isDirValidator") @Mapper("dirMapper") SchematicNode node, @OptionalValue("1") int page) {
SteamwarUser user = getUser(player); SteamwarUser user = getUser(player);
renderSchemlist(player, SchematicNode.getSchematicNodeInNode(node), Math.max(page - 1, 0), node, SchematicListBehavior.builder().setPublics(node.getOwner() == 0).setPageCommandGen(value -> "/schem list " + (node.getOwner()==0?"public ":"") + node.generateBreadcrumbs(user) + " " + value).build()); createCachedSchemList(player, SchematicNode.getSchematicNodeInNode(node), Math.max(page - 1, 0), node, SchematicListBehavior.builder().setPublics(node.getOwner() == 0).setPageCommandGen(value -> "/schem list " + (node.getOwner()==0?"public ":"") + node.generateBreadcrumbs(user) + " " + value).build());
} }
@Register({"info", "public"}) @Register({"info", "public"})
@ -334,12 +334,12 @@ public class SchematicCommand extends SWCommand {
} }
return true; return true;
}); });
renderSchemlist(player, nodes, Math.max(page - 1, 0), null, SchematicListBehavior.builder().setPublics(userId == 0).setShowPath(false).setRenderHook(s -> { createCachedSchemList(player, nodes, Math.max(page - 1, 0), null, SchematicListBehavior.builder().setPublics(userId == 0).setShowPath(false).setRenderHook(s -> {
for (String ss : nameList) { for (String ss : nameList) {
s = s.replace(ss, "§e§l" + ss + "§7"); s = s.replace(ss, "§e§l" + ss + "§7");
} }
return "§7" + s; return "§7" + s;
}).setPageCommandGen(integer -> "/schem search " + integer + " " + Arrays.stream(query).reduce((s, s2) -> s + " " + s2).orElse("")).build()); }).build());
} }
@Register("download") @Register("download")
@ -547,6 +547,11 @@ public class SchematicCommand extends SWCommand {
} }
} }
@Register(value = "page", noTabComplete = true)
public void pageCommand(Player player, int page) {
cachedSchemList(player, page);
}
private final TypeMapper<SchematicNode> publicCommandTypeMapper = publicNodeTypeMapper(); private final TypeMapper<SchematicNode> publicCommandTypeMapper = publicNodeTypeMapper();
@Mapper("publicMapper") @Mapper("publicMapper")

Datei anzeigen

@ -28,8 +28,10 @@ import de.steamwar.schematicsystem.AutoCheckResult;
import de.steamwar.schematicsystem.CheckSchemType; import de.steamwar.schematicsystem.CheckSchemType;
import de.steamwar.schematicsystem.SchematicSystem; import de.steamwar.schematicsystem.SchematicSystem;
import de.steamwar.sql.*; import de.steamwar.sql.*;
import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Getter; import lombok.Getter;
import lombok.With;
import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.ComponentBuilder; import net.md_5.bungee.api.chat.ComponentBuilder;
@ -49,6 +51,8 @@ public class SchematicCommandUtils {
public static final int CHUNK_SIZE = 15; public static final int CHUNK_SIZE = 15;
private static final List<Player> PUBLIC_TOGGLED = new ArrayList<>(); private static final List<Player> PUBLIC_TOGGLED = new ArrayList<>();
private static final List<String> FORBIDDEN_NAMES = Collections.unmodifiableList(Arrays.asList("public")); private static final List<String> FORBIDDEN_NAMES = Collections.unmodifiableList(Arrays.asList("public"));
private static final Map<Player, CachedSchematicList> CACHED_LISTS = new HashMap<>();
private SchematicCommandUtils() { private SchematicCommandUtils() {
} }
@ -83,6 +87,19 @@ public class SchematicCommandUtils {
return false; return false;
} }
public static void createCachedSchemList(Player player, List<SchematicNode> nodes, int chunk, SchematicNode parent, SchematicListBehavior behavior) {
CachedSchematicList cachedSchematicList = new CachedSchematicList(nodes, chunk, (int) Math.ceil(nodes.size() / (double) CHUNK_SIZE), parent, behavior.withPageCommandGen((page) -> "/schematic page " + (page - 1)));
CACHED_LISTS.put(player, cachedSchematicList);
renderSchemlist(player, cachedSchematicList.nodes, chunk, parent, cachedSchematicList.behavior);
}
public static void cachedSchemList(Player player, int chunk) {
CACHED_LISTS.computeIfPresent(player, (p, cachedSchematicList) -> {
renderSchemlist(player, cachedSchematicList.nodes, chunk, null, cachedSchematicList.behavior);
return cachedSchematicList.withPage(chunk);
});
}
public static void renderSchemlist(Player player, public static void renderSchemlist(Player player,
List<SchematicNode> nodes, List<SchematicNode> nodes,
int chunk, int chunk,
@ -168,6 +185,7 @@ public class SchematicCommandUtils {
@Getter @Getter
@Builder(setterPrefix = "set") @Builder(setterPrefix = "set")
@With
public static class SchematicListBehavior { public static class SchematicListBehavior {
public static final SchematicListBehavior DEFAULT = SchematicListBehavior.builder().build(); public static final SchematicListBehavior DEFAULT = SchematicListBehavior.builder().build();
@ -453,4 +471,19 @@ public class SchematicCommandUtils {
inv.setCallback(-999, click -> player.closeInventory()); inv.setCallback(-999, click -> player.closeInventory());
inv.open(); inv.open();
} }
public static void quitPlayer(Player player) {
CACHED_LISTS.remove(player);
PUBLIC_TOGGLED.remove(player);
}
@AllArgsConstructor
@With
static class CachedSchematicList {
private List<SchematicNode> nodes;
private int page;
private int maxPage;
private SchematicNode parent;
private SchematicListBehavior behavior;
}
} }

Datei anzeigen

@ -0,0 +1,14 @@
package de.steamwar.schematicsystem.listener;
import de.steamwar.schematicsystem.commands.SchematicCommandUtils;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerQuitEvent;
public class PlayerEventListener implements Listener {
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
SchematicCommandUtils.quitPlayer(event.getPlayer());
}
}