Permissions Utilisation des "command block" sans être op.

ShE3py

Enbogueuse
Support
26 Septembre 2015
4 139
162
464
247
21
Mìlhüsa
Salut,

Tout d'abord, merci de ta réponse ! :)
J'avais déjà essayer le plugin mais il ne fonctionnait pas. J'avais mis la permission mais cela ne changeait rien. :/

Cordialement,
Elywe9n.
En effet, j'ai regarder le code source du plugin sur Github il est un peu foireux :
Code:
    @EventHandler(priority = EventPriority.HIGHEST)
    public void onPlayerInteract(PlayerInteractEvent event) {
        Player player = event.getPlayer();
        String displayname = player.getDisplayName();

        if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
            Block block = event.getClickedBlock();
            if ((block.getType() == Material.COMMAND) && (!player.hasPermission("commandblocks.use"))) {
                player.closeInventory();
                event.setCancelled(true);
                if (event.isCancelled()) {
                    Bukkit.getLogger().info("[CommandBlocksExtended] " + displayname + " tried to use a Command Block but does not have permission to do that!");
                    player.sendMessage(ChatColor.RED + "You are not allowed to use this!");
                }
                else if ((block.getType() == Material.COMMAND) && (player.hasPermission("commandblocks.use"))) {
                    event.setCancelled(false);
                }
            }
        }
}
Là si je peux résumer il regarde si le joueur clique sur le command block, et qu'il n'a pas la permission, il annule l'évènement et que si l'évènement n'est pas annulé et qu'il a la permission alors il autorise le joueur... En gros y'a 2 paradoxes dans ce code, c'est impossible qu'il autorise le joueur à accéder au bloc.

Après je comprends pas ce qu'il bidouille avec l'annulation de l'évènement, il faudrait que Bukkit, avant de lancer l'event, annule l'évènement si le joueur n'a pas accès aux commands blocks.
Je vais check ça et j'édit.

EDIT: Impossible de faire ça avec l'API bukkit (du moins l'évènement PlayerInteract dit que le command block est utilisable dans tous les cas), j'ai tenté de bidouiller quelques trucs sans succès, il faudrait voir du côté des packets (en espérant que le client ne vérifie pas de son côté s'il a accès aux command blocks). Je pense qu'il va falloir faire sans :x
 
Dernière édition:
  • J'aime
Reactions: DiscowZombie

Elywe9n

Aventurier
31 Juillet 2018
17
2
3
20
En effet, j'ai regarder le code source du plugin sur Github il est un peu foireux :
Code:
    @EventHandler(priority = EventPriority.HIGHEST)
    public void onPlayerInteract(PlayerInteractEvent event) {
        Player player = event.getPlayer();
        String displayname = player.getDisplayName();

        if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
            Block block = event.getClickedBlock();
            if ((block.getType() == Material.COMMAND) && (!player.hasPermission("commandblocks.use"))) {
                player.closeInventory();
                event.setCancelled(true);
                if (event.isCancelled()) {
                    Bukkit.getLogger().info("[CommandBlocksExtended] " + displayname + " tried to use a Command Block but does not have permission to do that!");
                    player.sendMessage(ChatColor.RED + "You are not allowed to use this!");
                }
                else if ((block.getType() == Material.COMMAND) && (player.hasPermission("commandblocks.use"))) {
                    event.setCancelled(false);
                }
            }
        }
}
Là si je peux résumer il regarde si le joueur clique sur le command block, et qu'il n'a pas la permission, il annule l'évènement et que si l'évènement n'est pas annulé et qu'il a la permission alors il autorise le joueur... En gros y'a 2 paradoxes dans ce code, c'est impossible qu'il autorise le joueur à accéder au bloc.

Après je comprends pas ce qu'il bidouille avec l'annulation de l'évènement, il faudrait que Bukkit, avant de lancer l'event, annule l'évènement si le joueur n'a pas accès aux commands blocks.
Je vais check ça et j'édit.

EDIT: Impossible de faire ça avec l'API bukkit (du moins l'évènement PlayerInteract dit que le command block est utilisable dans tous les cas), j'ai tenté de bidouiller quelques trucs sans succès, il faudrait voir du côté des packets (en espérant que le client ne vérifie pas de son côté s'il a accès aux command blocks). Je pense qu'il va falloir faire sans :x
Ah oui :/
J'ai quelque notions de Java mais je t'avoue que tout ça est assez confu.

Je vais essayer de trouver autre chose, merci quand même.

Cordialement,
Elywe9n.
 

Ekron

Docteur ès Kotlinologie
11 Février 2016
37
12
68
Galaé
Erf, au temps pour moi, j'avoue que je n'ai pas pris le temps de vérifier qu'il fonctionnait. :/
J'espère que tu trouveras ce que tu cherches.