Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Плагин [FUN] oShameBan - Унизь Читера

pan3l

Активный участник
Баллы
61
Имя в Minecraft
Oz1p
Унизь читера и раздай всем игрокам его вещи!

Команды
/shameban [ник] [время] [причина] - Опозорить игрока

/shameban reload - Перезагрузить плагин

Сурс
Тык

Скачать
Тык

Права
oshameban.reload - Перезагрузить config.yml
oshameban.use - Использовать /shameban

Демо
giphy.gif

Кастомизация
giphy.gif


Конфиг

YAML:
prefix: "&x&C&B&2&D&3&Eᴏ&x&D&0&3&0&3&Eꜱ&x&D&4&3&4&3&Dʜ&x&D&9&3&7&3&Dᴀ&x&D&D&3&A&3&Cᴍ&x&E&2&3&D&3&Cᴇ&x&E&6&4&1&3&Bʙ&x&E&B&4&4&3&Bᴀ&x&E&F&4&7&3&Aɴ &8»"
ban-command: "ban %player% %time% %reason%" # Команда бана
args: 3 # Сколько аргументов (3 = player, time, reason | 2 = player, reason | 1 = player)
shame-time: 100 # Время в тиках (20 тиков = 1 сек)
effect-color: RED # Цвет эффекта
spirals-amount: 15 # Количество спиралей
effect-radius: 0.7 # Радиус эффекта
y-Offset: 2 # Оффсет где будет спавнитсья эффект (2 = голова, 1 = тело, 0 = ноги)
create-explosion: true # Взорвать игрока (Может убить других игроков)
play-beacon-sound: true # Проиграть звук маяка
sound-distance: 32 # За сколько блоков можно будет услышить звук.
disable-movement: true # Запретить игроку двигаться
lang:
  usage-1: "&f/oshameban [игрок] [время] [причина] &8- &7Опозорить игрока"
  usage-2: "&f/oshameban reload &8- &7Перезагрузить конфиг"
  no-perms: "&cНету прав!"
  player-offline: "&cИгрок %player% не в сети."
  reloaded: "&3Конфиг перезагружен."
OShameBan-Recode.svg

 
А зачем настройки которые должны быть в самом коде, по типу args [1], args [2], args [3] выносить в config.yml? Или я чего-то не понял?
shame-time: 100 в тиках, ты мог в коде просто прописать за скобками *1000, по типу - 5 секунд = 100 тиков, 1 тик = 50 миллисекунд, 100 * 50 = 5000, а тут сразу 5 * 1000 и будет 5000, а уже в config.yml прописываешь за место тиков, полноценные секунды. Только не забудь указать в void - long currentTime
 
Последнее редактирование:
А зачем настройки которые должны быть в самом коде, по типу args [1], args [2], args [3] выносить в config.yml? Или я чего-то не понял?
shame-time: 100 в тиках, ты мог в коде просто прописать за скобками *1000, по типу - 5 секунд = 100 тиков, 1 тик = 50 миллисекунд, 100 * 50 = 5000, а тут сразу 5 * 1000 и будет 5000, а уже в config.yml прописываешь за место тиков, полноценные секунды. Только не забудь указать в void - long currentTime

args [1], args [2], args [3] нужны для того если админ не хочет например банить игрока на время то есть вместо (/ban игрок время причина) он хочет например написать (/ban игрок причина) то это не сработает ибо будет писать что слишком мало аргументов.
 
args [1], args [2], args [3] нужны для того если админ не хочет например банить игрока на время то есть вместо (/ban игрок время причина) он хочет например написать (/ban игрок причина) то это не сработает ибо будет писать что слишком мало аргументов.
Тоже странно, можно прописать в коде, если кол-во аргументов после команды = 1, то выполняется это действие, если кол-во аргументов = 2, то выполняется другое действие и тд. Зачем выносить в config.yml и менять там, если можно просто настроить несколько подвидов команды, которая будет в зависимости от введённых кол-во аргументов, выполнять разные действия.

Пример кода:

Код:
    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if (command.getName().equalsIgnoreCase("pl")) {
            if (args.length < 2) {
                sender.sendMessage("Ошибка: необходимо указать ник игрока и время или причину.");
                return true;
            }

            String playerName = args[0];
            Player target = Bukkit.getPlayer(playerName);

            if (target == null) {
                sender.sendMessage("Игрок не найден.");
                return true;
            }

            if (args.length == 2) {
                try {
                    int time = Integer.parseInt(args[1]);
                    sender.sendMessage("Игрок " + playerName + " заблокирован на " + time + " минут.");
                } catch (NumberFormatException e) {
                    String reason = args[1];
                    sender.sendMessage("Игрок " + playerName + " заблокирован навсегда. Причина: " + reason);
                }
            } else if (args.length == 3) {
                try {
                    int time = Integer.parseInt(args[1]);
                    String reason = args[2];
                    sender.sendMessage("Игрок " + playerName + " заблокирован на " + time + " минут. Причина: " + reason);
                } catch (NumberFormatException e) {
                    sender.sendMessage("Ошибка: неверный формат времени.");
                }
            }
            return true;
        }
        return false;
    }
}

А если суть в том что запретить админу банить навсегда игроков, то просто создай право для бана навсегда и не давай ему его или в принципе забери такое право у него. В чём суть я так и не понял.
 
Последнее редактирование:
Унизь читера и раздай всем игрокам его вещи!

Команды
/shameban [ник] [время] [причина] - Опозорить игрока

/shameban reload - Перезагрузить плагин

Сурс
Тык

Скачать
Тык

Права
oshameban.reload - Перезагрузить config.yml
oshameban.use - Использовать /shameban

Демо
giphy.gif

Кастомизация
giphy.gif


Конфиг

YAML:
prefix: "&x&C&B&2&D&3&Eᴏ&x&D&0&3&0&3&Eꜱ&x&D&4&3&4&3&Dʜ&x&D&9&3&7&3&Dᴀ&x&D&D&3&A&3&Cᴍ&x&E&2&3&D&3&Cᴇ&x&E&6&4&1&3&Bʙ&x&E&B&4&4&3&Bᴀ&x&E&F&4&7&3&Aɴ &8»"
ban-command: "ban %player% %time% %reason%" # Команда бана
args: 3 # Сколько аргументов (3 = player, time, reason | 2 = player, reason | 1 = player)
shame-time: 100 # Время в тиках (20 тиков = 1 сек)
effect-color: RED # Цвет эффекта
spirals-amount: 15 # Количество спиралей
effect-radius: 0.7 # Радиус эффекта
y-Offset: 2 # Оффсет где будет спавнитсья эффект (2 = голова, 1 = тело, 0 = ноги)
create-explosion: true # Взорвать игрока (Может убить других игроков)
play-beacon-sound: true # Проиграть звук маяка
sound-distance: 32 # За сколько блоков можно будет услышить звук.
disable-movement: true # Запретить игроку двигаться
lang:
  usage-1: "&f/oshameban [игрок] [время] [причина] &8- &7Опозорить игрока"
  usage-2: "&f/oshameban reload &8- &7Перезагрузить конфиг"
  no-perms: "&cНету прав!"
  player-offline: "&cИгрок %player% не в сети."
  reloaded: "&3Конфиг перезагружен."
OShameBan-Recode.svg
Небольшие вопросы по коду:
1. Для чего в onDisable() ты очищаешь коллекцию и убираешь значения объектов?
2. Зачем ты применяешь утилиту для Hex цветов, если их не используешь в данных сообщениях?
3. Для чего currentShamed?
 
Тоже странно, можно прописать в коде, если кол-во аргументов после команды = 1, то выполняется это действие, если кол-во аргументов = 2, то выполняется другое действие и тд. Зачем выносить в config.yml и менять там, если можно просто настроить несколько подвидов команды, которая будет в зависимости от введённых кол-во аргументов, выполнять разные действия.

Пример кода:

Код:
    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if (command.getName().equalsIgnoreCase("pl")) {
            if (args.length < 2) {
                sender.sendMessage("Ошибка: необходимо указать ник игрока и время или причину.");
                return true;
            }

            String playerName = args[0];
            Player target = Bukkit.getPlayer(playerName);

            if (target == null) {
                sender.sendMessage("Игрок не найден.");
                return true;
            }

            if (args.length == 2) {
                try {
                    int time = Integer.parseInt(args[1]);
                    sender.sendMessage("Игрок " + playerName + " заблокирован на " + time + " минут.");
                } catch (NumberFormatException e) {
                    String reason = args[1];
                    sender.sendMessage("Игрок " + playerName + " заблокирован навсегда. Причина: " + reason);
                }
            } else if (args.length == 3) {
                try {
                    int time = Integer.parseInt(args[1]);
                    String reason = args[2];
                    sender.sendMessage("Игрок " + playerName + " заблокирован на " + time + " минут. Причина: " + reason);
                } catch (NumberFormatException e) {
                    sender.sendMessage("Ошибка: неверный формат времени.");
                }
            }
            return true;
        }
        return false;
    }
}

А если суть в том что запретить админу банить навсегда игроков, то просто создай право для бана навсегда и не давай ему его или в принципе забери такое право у него. В чём суть я так и не понял.
Это уже будет не то. Если количество аргументов, например указано 2, то есть ник и причина, то при недостатке аргументов тебе будет писать: /ban [ник] [причина], если делать всё в коде, то соответственно тебе будет отправлено сообщение сразу со всеми 3 аргументами. Пример: /ban [ник] [время] [причина].
 
Это уже будет не то. Если количество аргументов, например указано 2, то есть ник и причина, то при недостатке аргументов тебе будет писать: /ban [ник] [причина], если делать всё в коде, то соответственно тебе будет отправлено сообщение сразу со всеми 3 аргументами. Пример: /ban [ник] [время] [причина].
Но уменьшается кастомизация и более костыльно и менее лаконично.
 
Но уменьшается кастомизация и более костыльно и менее лаконично.
Насчёт как это реализовано я не знаю, не смотрел исходники, но по поводу кастомизации, то наоборот её больше с этим.
 
Небольшие вопросы по коду:
1. Для чего в onDisable() ты очищаешь коллекцию и убираешь значения объектов?
2. Зачем ты применяешь утилиту для Hex цветов, если их не используешь в данных сообщениях?
3. Для чего currentShamed?

1. Привык так делать, хз почему.
2. Если админ хочет использовать то чтобы была возможность.
3. currenShamed нужен для того чтобы хранить игроков которые взлетают. Если бы этого списка не было челы бы ливали при виде эффекта и бы не получали бан.
 

Поделиться этой страницей

Назад
Верх