Вопрос не работает permission-message

Версия Minecraft
1.20.X

geksxcx

Пользователь
Сообщения
9
Разрешается выкладывание кода, файлов конфигураций, логов и т.д. только под BB-код CODE
попытался сделать проверку на пермишин, но в майне не работает, отправляется стандарт сообщение, вот код

package org.example1.untitled2.commands;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.example1.untitled2.Untitled2;

public class KillCMD implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {

if (!(sender instanceof Player player)) {
sender.sendMessage("Эту команду может использовать только игрок!");
return true;
}

// Проверка permission в начале
if (!player.hasPermission("kill.allow")) {
player.sendMessage("Нет прав для выполнения этой команды.");
return true;
}

//логика команды
if (args.length == 0) {
// Убийство самого игрока
player.setHealth(0);
player.sendMessage("убил сам себя");
return true;

} else {
//проверка permission
if(!player.hasPermission("kill.allow")){
player.sendMessage("нет прав");
return true;
}

// Убийство другого игрока
String playerName = args[0];
Player target = Bukkit.getPlayerExact(playerName);

if (target == null) {
player.sendMessage("Данного игрока нет в сети");
return true;
}

target.setHealth(0);
target.sendMessage("вас убили командой");
Untitled2.getPlugin().getLogger().info(player.getName() + " кильнул " + target.getName());
return true;
}
}
}
 
Решение
Да везде зарегистрировал, если я себе выдам пермишин в lp то все работает, пермишин тоже записал в plugin.yml
Вот сообщение: Unknown or incomplete command, see below for error
Объединено


Да
commands:
permission: kill.allow
Объединено
Если ты указываешь в plugin.yml permission для команды, то сервер не даст тебе ее выполнить. Чтобы решить твою проблему я изменил plugin.yml вот так:
YAML:
name: untitled2
version: '${project.version}'
main: org.example1.untitled2.Untitled2
api-version: '1.16'

permissions:
  test.com:
    description: allow to break block
    default: op
  kill.allow:
    description: allow to kill player
    default: op

commands:
  aaa:
    description: kill player
    usage: /aaa| /aaa <player>
...
попытался сделать проверку на пермишин, но в майне не работает, отправляется стандарт сообщение, вот код

package org.example1.untitled2.commands;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.example1.untitled2.Untitled2;

public class KillCMD implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {

if (!(sender instanceof Player player)) {
sender.sendMessage("Эту команду может использовать только игрок!");
return true;
}

// Проверка permission в начале
if (!player.hasPermission("kill.allow")) {
player.sendMessage("Нет прав для выполнения этой команды.");
return true;
}

//логика команды
if (args.length == 0) {
// Убийство самого игрока
player.setHealth(0);
player.sendMessage("убил сам себя");
return true;

} else {
//проверка permission
if(!player.hasPermission("kill.allow")){
player.sendMessage("нет прав");
return true;
}

// Убийство другого игрока
String playerName = args[0];
Player target = Bukkit.getPlayerExact(playerName);

if (target == null) {
player.sendMessage("Данного игрока нет в сети");
return true;
}

target.setHealth(0);
target.sendMessage("вас убили командой");
Untitled2.getPlugin().getLogger().info(player.getName() + " кильнул " + target.getName());
return true;
}
}
}
ты в plugin.yml пермишн записал?
 
Какое стандартное сообщение отправляется? Ты зарегистрировал команду в plugin.yml и в onEnable?
Да везде зарегистрировал, если я себе выдам пермишин в lp то все работает, пермишин тоже записал в plugin.yml
Вот сообщение: Unknown or incomplete command, see below for error
Объединено

ты в plugin.yml пермишн записал?
Да
commands:
permission: kill.allow
Объединено

вот весь проект, делал его чисто для обучения
 

Вложения

  • untitled2.zip
    31.6 KB · Просмотры: 2
Последнее редактирование:
Да везде зарегистрировал, если я себе выдам пермишин в lp то все работает, пермишин тоже записал в plugin.yml
Вот сообщение: Unknown or incomplete command, see below for error
Объединено


Да
commands:
permission: kill.allow
Объединено
Если ты указываешь в plugin.yml permission для команды, то сервер не даст тебе ее выполнить. Чтобы решить твою проблему я изменил plugin.yml вот так:
YAML:
name: untitled2
version: '${project.version}'
main: org.example1.untitled2.Untitled2
api-version: '1.16'

permissions:
  test.com:
    description: allow to break block
    default: op
  kill.allow:
    description: allow to kill player
    default: op

commands:
  aaa:
    description: kill player
    usage: /aaa| /aaa <player>

Теперь ты будешь получать сообщение о том, что у тебя нет прав на выполнение команды:

Вам необходимо зарегистрироваться для просмотра изображений-вложений


Так же я чуть доработал твой код:

Java:
public class KillCMD implements CommandExecutor {
private final Logger logger = Untitled2.getPlugin().getLogger();


@Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!(sender instanceof Player player)) {
sender.sendMessage("Эту команду может использовать только игрок!");
 return true;
        }

// Проверка permission в начале
        if (!player.hasPermission("kill.allow")) {
player.sendMessage("Нет прав для выполнения этой команды.");
 return true;
        }

//логика команды
        if (args.length == 0) {
// Убийство самого игрока
            player.setHealth(0);
player.sendMessage("убил сам себя");
 return true;
} else {
/* Проверка не нужна (ты уже в самом начале проверил наличие прав на использование)
                //проверка permission
                if(!player.hasPermission("kill.allow")){
                    player.sendMessage("нет прав");
                    return true;
                }

  */

            // Убийство другого игрока
            final String playerName = args[0];
final Player target = Bukkit.getPlayerExact(playerName);

if (target == null) {
player.sendMessage("Данного игрока нет в сети");
 return true;
            }

target.setHealth(0);
target.sendMessage("вас убили командой");

// Вынеси logger в отдельную переменную
            // Лучше использовать String.formatted()

            logger.info("%s кильнул командой %s".formatted(player.getName(), target.getName()));
 return true;
        }
    }
}
 
Если ты указываешь в plugin.yml permission для команды, то сервер не даст тебе ее выполнить. Чтобы решить твою проблему я изменил plugin.yml вот так:
YAML:
name: untitled2
version: '${project.version}'
main: org.example1.untitled2.Untitled2
api-version: '1.16'

permissions:
  test.com:
    description: allow to break block
    default: op
  kill.allow:
    description: allow to kill player
    default: op

commands:
  aaa:
    description: kill player
    usage: /aaa| /aaa <player>

Теперь ты будешь получать сообщение о том, что у тебя нет прав на выполнение команды:

Вам необходимо зарегистрироваться для просмотра изображений-вложений


Так же я чуть доработал твой код:

Java:
public class KillCMD implements CommandExecutor {
private final Logger logger = Untitled2.getPlugin().getLogger();


@Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!(sender instanceof Player player)) {
sender.sendMessage("Эту команду может использовать только игрок!");
 return true;
        }

// Проверка permission в начале
        if (!player.hasPermission("kill.allow")) {
player.sendMessage("Нет прав для выполнения этой команды.");
 return true;
        }

//логика команды
        if (args.length == 0) {
// Убийство самого игрока
            player.setHealth(0);
player.sendMessage("убил сам себя");
 return true;
} else {
/* Проверка не нужна (ты уже в самом начале проверил наличие прав на использование)
                //проверка permission
                if(!player.hasPermission("kill.allow")){
                    player.sendMessage("нет прав");
                    return true;
                }

  */

            // Убийство другого игрока
            final String playerName = args[0];
final Player target = Bukkit.getPlayerExact(playerName);

if (target == null) {
player.sendMessage("Данного игрока нет в сети");
 return true;
            }

target.setHealth(0);
target.sendMessage("вас убили командой");

// Вынеси logger в отдельную переменную
            // Лучше использовать String.formatted()

            logger.info("%s кильнул командой %s".formatted(player.getName(), target.getName()));
 return true;
        }
    }
}
спасибо, огромное
 
Назад
Сверху Снизу