SteamWar/SpigotCore
Archiviert
13
0

Some Fixes for SchematicSelector #140

Zusammengeführt
Lixfel hat 6 Commits von fix_rank nach master 2021-12-27 16:29:43 +01:00 zusammengeführt
2 geänderte Dateien mit 46 neuen und 9 gelöschten Zeilen

Datei anzeigen

@ -20,6 +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;
@ -52,6 +53,9 @@ public class SchematicSelector {
@Getter
private boolean singleDirOpen;
private boolean sdoTrigger = false;
@Getter
@Setter
private int depth = 0;
private Sorting sorting = Sorting.NAME;
private boolean invertSorting = false;
@ -81,12 +85,13 @@ public class SchematicSelector {
if(sdoTrigger) {
sdoTrigger = false;
openList(nodes.get(0));
return;
}
List<SWListInv.SWListEntry<SchematicNode>> list = new ArrayList<>();
if(parent != null) {
if(depth != 0) {
list.add(new SWListInv.SWListEntry<>(new SWItem(Material.ARROW, Core.MESSAGE.parse("SCHEM_SELECTOR_BACK", player), clickType -> {}), null));
}
@ -137,7 +142,32 @@ public class SchematicSelector {
private void handleClick(SchematicNode node, SchematicNode parent) {
if(node == null) {
openList(getParent(parent));
depth--;
if(!singleDirOpen) {
if(NodeMember.getNodeMember(parent.getId(), user.getId()) != null) {
openList(null);
} else {
openList(getParent(parent));
}
} else {
SchematicNode currentParent = parent;
boolean isMember = false;
do {
sdoTrigger = false;
if(NodeMember.getNodeMember(currentParent.getId(), user.getId()) != null) {
isMember = true;
}
currentParent = getParent(currentParent);
if(currentParent == null)
break;
getSchematicList(currentParent);
} while (sdoTrigger);
if(isMember || NodeMember.getNodeMember(parent.getId(), user.getId()) != null) {
openList(null);
} else {
openList(currentParent);
}
}
return;
}
if(node.isDir()) {
@ -147,6 +177,7 @@ public class SchematicSelector {
return;
}
filter.reset();
depth++;
openList(node);
return;
}
@ -323,7 +354,7 @@ public class SchematicSelector {
nodes.removeIf(node -> !node.isDir());
}
if(target.target == Target.SCHEMATIC_TYPE) {
nodes.removeIf(node -> node.isDir() || !node.getType().equals(target.type.toDB()));
nodes.removeIf(node -> node.isDir() || !node.getSchemtype().equals(target.type));
}
return nodes;
}
@ -342,7 +373,12 @@ public class SchematicSelector {
case SCHEMATIC_TYPE:
nodes.addAll(SchematicNode.getAccessibleSchematicsOfTypeInParent(user.getId(), target.type.toDB(), parent==null?0:parent.getId()));
if(target.rank >= 0) {
nodes.removeIf(node -> node.getRank() > target.rank);
nodes.removeIf(node -> {
if(node.isDir()) {
return false;
}
return node.getRank() > target.rank;
});
}
break;
default:
@ -350,7 +386,6 @@ public class SchematicSelector {
}
if(singleDirOpen && nodes.size() == 1 && nodes.get(0).isDir()) {
openList(nodes.get(0));
sdoTrigger = true;
}
return nodes;

Datei anzeigen

@ -34,6 +34,7 @@ import java.sql.SQLException;
import java.sql.Timestamp;
import java.time.Instant;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Predicate;
import java.util.zip.GZIPInputStream;
@ -488,13 +489,14 @@ public class SchematicNode {
StringBuilder builder = new StringBuilder(getName());
SchematicNode currentNode = this;
if (currentNode.isDir()) builder.append("/");
Veraltet
Review

Wie häufig wird das ausgeführt? Falls häufig, dürfte das wsl. ungeil sein, weil da glaube immer eine DB-Abfrage dahinterhängt

Wie häufig wird das ausgeführt? Falls häufig, dürfte das wsl. ungeil sein, weil da glaube immer eine DB-Abfrage dahinterhängt
Veraltet
Review

Sollte jetzt nicht mehr so viele SQL-Statements aufrufen, ist die Methode, welche denn Pfad zu einer Schematic erstellt, da würde das currentNode.getMembers() für jede ParentNode ausgeführt werden.

Sollte jetzt nicht mehr so viele SQL-Statements aufrufen, ist die Methode, welche denn Pfad zu einer Schematic erstellt, da würde das currentNode.getMembers() für jede ParentNode ausgeführt werden.
while (currentNode.getParentNode() != null) {
final Set<NodeMember> nodeMembers = NodeMember.getSchematics(user.getId());
AtomicInteger i = new AtomicInteger();
i.set(currentNode.getId());
while (currentNode.getParentNode() != null && nodeMembers.stream().noneMatch(nodeMember -> nodeMember.getNode() == i.get())) {
currentNode = currentNode.getParentNode();
i.set(currentNode.getId());
builder.insert(0, split)
.insert(0, currentNode.getName());
if (currentNode.getMembers().stream().anyMatch(member -> member.getMember() == user.getId())) {
break;
}
}
return builder.toString();
}