• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Player Permission zurücksetzten

IDK_WHO_AM_I

Kuhfänger
Registriert
30 Mai 2017
Beiträge
66
Alter
28
Diamanten
300
Minecraft
IDK_WHO_AM_I
Hey Leute,

ich hänge da an einer kleinen Sache. Mein Permission System ist soweit voll funktionsfähig, ich habe derzeit allerdings Probleme beim Aktualisieren der Rechte.

Ich setzte beim Joinen die Rechte wie folgt:

Javascript:
    @EventHandler(priority=EventPriority.HIGH)
    public void onJoin(PlayerJoinEvent e) {
        List<String> permission = new ArrayList<>();
        User user = McSpigot.getInstance().getUserManager().getUserByName(e.getPlayer().getName());
        try {
            permission = user.getPermissions();
        } catch (SQLException e1) {
            e1.printStackTrace();
        }
        for(String perm :permission) {
            PermissionAttachment attachment = e.getPlayer().addAttachment(McSpigot.getInstance());
            attachment.setPermission(perm, true);
        }
    }

Nun basiert das System allerdings auf ServerSockets und die Permission werden per BungeeeCord Befehl eingetragen also sende ich diese neuen/aktualisierten Daten dann an den Spigot Server.

Nun habe ich folgende Mehtode geschrieben. Um dann die Rechte der Spieler zu aktualisieren.
Javascript:
    public void refreshPermissions() {
        for(Player player : Bukkit.getOnlinePlayers()) {
            List<String> permission = new ArrayList<>();
            User user = McSpigot.getInstance().getUserManager().getUserByName(player.getName());
            try {
                permission = user.getPermissions();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            PermissionAttachment attachment = player.addAttachment(McSpigot.getInstance());
            for (String perm : permission) {
                attachment.setPermission(perm, true);
            }
        }
    }

jedoch funktioniert diese Methode nicht. Jedoch wenn ich rejoine funktioniert alles prima. Ich vermute das beim Verlassen des Servers irgendwo im Mojang Code die Rechte gelöscht/resetet werden jedoch weiß ich nicht wie oder wo.

Ich habe bereits versucht:
Javascript:
player.recalculatePermissions();
player.getEffectivePermissions().clear();

jedoch ohne Erfolg.
Ich hoffe jemand kann mir helfen.


Danke im Voraus
Euer Maxi
 
Zuletzt bearbeitet:

BlackHole

Workaholic
Registriert
1 Juli 2012
Beiträge
752
Diamanten
0
Minecraft
BlackHole
Ich glaube dass es eine schlechte Idee ist, die Spieler über ihren Namen zu identifzieren. Dieser kann sich jederzeit ändern. Die UUID der Spieler hingegen nicht. Du solltest du Permissions aber versuchen früher zu setzen, damit Plugins die Möglichkeit haben, in entsprechenden Events Permissions abzufragen.
Das früheste Event mit einem Spielerobjekt in reinem Bukkit wäre PlayerLoginEvent. Hier solltest du dann nur ein PermissionAttachment anlegen und dieses pro Spieler speichern. Dieses benutzt du dann auch in recalculatePermissions() und gibst es wieder frei, wenn der Spieler den Server verlässt.
 

IDK_WHO_AM_I

Kuhfänger
Registriert
30 Mai 2017
Beiträge
66
Alter
28
Diamanten
300
Minecraft
IDK_WHO_AM_I
@BlackHole Ich glaube du hast mich nicht ganz verstanden was ich meinte es geht mir darum zu erfahren was beim Verlassen des Server passiert wie werden die Rechte geleert/zurückgesetzt.

Zu der Sache mit dem Namen, das ist mir klar aber darum habe ich eine UUIDDatenbank die ich bei jeden betretenen eines Spielers aktualisiere.
 
Oben