diff --git a/CommonCore b/CommonCore index d56150a..8b8e6a9 160000 --- a/CommonCore +++ b/CommonCore @@ -1 +1 @@ -Subproject commit d56150a8b105f5ad63a8c3a21b6833f388a83225 +Subproject commit 8b8e6a9e574040eea1bdea955f69263e63eb8078 diff --git a/SpigotCore_Main/src/de/steamwar/inventory/SchematicSelector.java b/SpigotCore_Main/src/de/steamwar/inventory/SchematicSelector.java index ef9cf7f..8c7ed13 100644 --- a/SpigotCore_Main/src/de/steamwar/inventory/SchematicSelector.java +++ b/SpigotCore_Main/src/de/steamwar/inventory/SchematicSelector.java @@ -20,10 +20,7 @@ package de.steamwar.inventory; import de.steamwar.core.Core; -import de.steamwar.sql.NodeMember; -import de.steamwar.sql.SchematicNode; -import de.steamwar.sql.SchematicType; -import de.steamwar.sql.SteamwarUser; +import de.steamwar.sql.*; import lombok.*; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -118,7 +115,7 @@ public class SchematicSelector { list.add(renderItem(node)); } - SWListInv inv = new SWListInv<>(player, MessageFormat.format(injectable.createTitle(player), target.target.getName(player), filter.getName() == null?(parent == null?"/":parent.generateBreadcrumbs(user)):filter.getName()), false, list, (clickType, node) -> handleClick(node, parent)); + SWListInv inv = new SWListInv<>(player, MessageFormat.format(injectable.createTitle(player), target.target.getName(player), filter.getName() == null?(parent == null?"/":parent.generateBreadcrumbs()):filter.getName()), false, list, (clickType, node) -> handleClick(node, parent)); if(publicMode == PublicMode.ALL) { if(user.getId() == 0) { inv.setItem(48, Material.BUCKET, Core.MESSAGE.parse("SCHEM_SELECTOR_OWN", player), clickType -> { @@ -166,28 +163,21 @@ public class SchematicSelector { } if(!singleDirOpen) { if(NodeMember.getNodeMember(parent.getId(), user.getId()) != null) { - return null; + return Optional.ofNullable(SchematicNode.byIdAndUser(user, parent.getId())).flatMap(SchematicNode::getOptionalParent).map(integer -> SchematicNode.byIdAndUser(user, integer)).orElse(null); } else { - return getParent(parent); + return getParent(parent).orElse(null); } } else { - SchematicNode currentParent = parent; - boolean isMember = false; + Optional currentParent = Optional.of(parent); do { sdoTrigger = false; - if(NodeMember.getNodeMember(currentParent.getId(), user.getId()) != null) { - isMember = true; - } - currentParent = getParent(currentParent); - if(currentParent == null) + currentParent = currentParent.flatMap(SchematicSelector::getParent); + if(!currentParent.isPresent()) { break; - getSchematicList(currentParent); + } + getSchematicList(currentParent.get()); } while (sdoTrigger); - if(isMember || NodeMember.getNodeMember(parent.getId(), user.getId()) != null) { - return null; - } else { - return currentParent; - } + return currentParent.orElse(null); } } @@ -397,7 +387,7 @@ public class SchematicSelector { } private List getFilteredSchematics() { - List nodes = new ArrayList<>(SchematicNode.getAllSchematicsAccessibleByUser(user.getId())); + List nodes = new ArrayList<>(SchematicNode.getAll(user)); nodes.removeIf(node -> { injectable.onNodeFilter(this, node); return !filter.matches(node); @@ -415,15 +405,11 @@ public class SchematicSelector { List nodes = new ArrayList<>(); switch (target.target) { case DIRECTORY: - if(parent == null) { - nodes.addAll(SchematicNode.getSchematicsAccessibleByUser(user.getId(), null)); - nodes.removeIf(node -> !node.isDir()); - } else { - nodes.addAll(SchematicNode.getSchematicDirectoryInNode(parent.getId())); - } + nodes.addAll(SchematicNode.list(user, Optional.ofNullable(parent).map(SchematicNode::getId).orElse(null))); + nodes.removeIf(node -> !node.isDir()); break; case SCHEMATIC_TYPE: - nodes.addAll(SchematicNode.getAccessibleSchematicsOfTypeInParent(user.getId(), target.type.toDB(), parent==null?0:parent.getId())); + nodes.addAll(SchematicNode.accessibleByUserTypeMap(user, target.type).get(parent==null?null:parent.getId())); if(target.rank >= 0) { nodes.removeIf(node -> { if(node.isDir()) { @@ -434,7 +420,7 @@ public class SchematicSelector { } break; default: - nodes.addAll(SchematicNode.getSchematicsAccessibleByUser(user.getId(), parent == null?0:parent.getId())); + nodes.addAll(SchematicNode.list(user, parent == null?null:parent.getId())); } if(singleDirOpen && nodes.size() == 1 && nodes.get(0).isDir()) { @@ -443,11 +429,8 @@ public class SchematicSelector { return nodes; } - private static SchematicNode getParent(SchematicNode node) { - if(node.getParent() == null) { - return null; - } - return node.getParentNode(); + private static Optional getParent(SchematicNode node) { + return node.getOptionalParent().map(integer -> SchematicNode.byIdAndUser(SteamwarUser.get(node.getEffectiveOwner()), integer)); } public static SelectorTarget selectSchematic() {