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

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
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.
 
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.