Open Malfrador opened 3 years ago
Ich hab es mir schon während der Hausarbeitsphase angeschaut und hab auf den ersten Blick eher geglaubt, dass es gar nicht DXLs Problem ist:
DXL benutzt Permission#playerAdd/RemoveTransient(String world, Player player, String permission) was LuckPerms nicht implementiert: https://github.com/lucko/LuckPerms/blob/master/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/LuckPermsVaultPermission.java
In der Standard-Implementierung callt das einfach die playerAddTransient(Player player, String permission)-Methode ohne Welt, und in deren Standard-Implementierung erkenne ich nicht unbedingt, ob die Permission darin überhaupt noch "transient" wäre.
Wieso das nicht auf dieselbe Weise dann auch entfernt wird, weiß ich nicht. Wenn es an DXL liegt, wird DEditPlayer#delete() aus irgendeinem Grund nicht gecallt, aber das müsste noch tausend andere Probleme machen.
Ich denke, dass LuckPerms zumindest selbst die Transient-Methoden implementieren müsste oder Vault vielleicht sogar besser gar keine komischen Defaults sondern einfach absrakte Methoden oder Exceptions haben sollte.
"We've been tricked, we've been backstabbed, and we've been, quite possibly, bamboozled"
Habs ausprobiert, in dem ich den Weltnamen im Chat ausgegeben habe.
[14:34:39 INFO]: [DungeonsXL] Added Perm for CraftPlayer{name=BlacKroma} in Test: worldedit.* // Name des Dungeons
[14:34:39 INFO]: [DungeonsXL] Added Perm for CraftPlayer{name=BlacKroma} in Test: essentials.broadcast
[14:34:45 INFO]: BlacKroma issued server command: /dxl leave
[14:34:45 INFO]: [DungeonsXL] Removed Perm for CraftPlayer{name=BlacKroma} in DXL_Edit_0: worldedit.*
[14:34:45 INFO]: [DungeonsXL] Removed Perm for CraftPlayer{name=BlacKroma} in DXL_Edit_0: essentials.broadcast
Anscheinend gibt es einen Unterschied zwischen world
und getWorld
. getWorld
gibt einem die EditWorld (auch wenn ich erwartet hätte, das dafür getEditWorld
gut ist, aber na gut).
Hab das gefixt weil das denke ich mal ziemlicher sicher falsch ist. Eine Welt mit dem Dungeonnamen existiert ja zu keinem Zeitpunkt. PR: https://github.com/DRE2N/DungeonsXL/pull/902
Aber: Löst das Problem nicht. Permissions werden jetzt zwar korrekt entfernt und hinzugefügt für die richtige Welt, aber man behält sie trotzdem.
Eventuell wäre es doch am einfachsten, einfach direkt die LP-API zu nutzen? Dann könnte man auch Dungeons als Context implementieren und sich das Permission adden/entfernen sparen.
LP hat btw eine vault-ignore-world
-Config-Option. Ich gehe also eigentlich davon aus, das es immer die Welt ignoriert - außer die Option ist nur fürs gute Gewissen.
Es ist andersrum. getWorld() gibt einem die Bukkit-World und world ist der Parameter des Constructors, auf den editWorld / getEditWorld() gesetzt wird.
Permissions werden jetzt zwar korrekt entfernt und hinzugefügt für die richtige Welt, aber man behält sie trotzdem.
Wie muss ich mir das vorstellen? Die Methode zum Entfernen wird gecallt, aber nichts passiert? Oder die Permission wird auf der Disc entfernt, aber nicht im Spiel?
Die Methode wird gecalled und wird für Vault auch gegeben/entfernt. LP hatte mal eine vault-debug-Funktion, die aber leider entfernt wurde. Ob es auch wirklich bei LP ankommt kann man daher nicht sagen, denn transient-Permissions werden auch bei Befehlen nicht angezeigt. Also wirklich viel schlauer als vorher sind wir dadurch auch nicht.
Description
Edit-mode permissions are kept after leaving the edit mode with /dxl leave. Paper 1.16.3 LuckPerms 5.2.7
Reproduce
(List steps to reproduce, e.g.:
Expected behavior
Edit-mode permissions should get removed after leaving edit-mode
PS: Ich weiß das du aufm Discord gefragt hattest ob das noch ein Bug ist und das verneint wurde. ist aber leider wohl doch noch ein Bug :/