Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Игнорирование символа '&.'

Тема в разделе "Разработка плагинов для новичков", создана пользователем ВukkitPrоfi, 2 окт 2016.

  1. Автор темы
    ВukkitPrоfi

    ВukkitPrоfi Активный участник Пользователь

    Баллы:
    76
    Стоит плагин UralClans2, кастомизированный одним челом. Решил я его доработать.

    Нашел такую особенность, что при создании клана от лица смертного символы '&' игнорируются и цвет клан-тегу не приминяется и сам символ стирается. (Допустим, я создал клан /c create &6&lCLan, а в теге будет выглядеть так [CLan], без цвета)

    Заглядываю ''под капот'' плагина, нахожу:
    Код:
     *много пробелов*           String rname = args[1].replaceAll("&.", "");
    
    НО, проверки на права и прочие особенности (if...) я никакой не вижу, хотя, если я себе выдам право '*', то я смогу создавать кланы с цветным названием, а если выдам uralclans2.*, то символ '&' всеравно будет игнорироваться.
    Что же все-таки дает возможность создавать клан с цветным названием?

    пуст скриптум.: если нужен исходник, пишите, скину.
     
  2. Хостинг MineCraft
    <
  3. chief

    chief Активный участник Пользователь

    Баллы:
    76
    Может быть проверка основной команд на ввод от имени оператора и перенаправления на другие команды. Проверь команды ввода
    Ты хочешь понять, как оно так странно работает?
     
    Последнее редактирование: 2 окт 2016
  4. Автор темы
    ВukkitPrоfi

    ВukkitPrоfi Активный участник Пользователь

    Баллы:
    76
    Хочу понять, почему (НЕ оператор) игрок, имеющий право '*' может создать цветное название, то есть да, хочу понять, как оно так работает.

    Там я больше ничего не нашел, связанное с проверкой на цветовые коды, нашел только этот string - у него нет никакой проверки, т.е. игнор этих символов должен распространятся на всех игроков сервера, даже на основателей, но у основателя все права ('*'), но нет прав оператора и он как-то может создать клан с цветным названием.
     
    Последнее редактирование: 2 окт 2016
  5. chief

    chief Активный участник Пользователь

    Баллы:
    76
    С UralClans не имел дела, написал свой аналог.
    Скинь cорцы, попробую разобраться. Также интересно, как оно так работает
     
  6. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Просто фиксани на args[1].replaceAll("&.", "§");
    Пруфит.
     
  7. CoolBoy

    CoolBoy Активный участник Пользователь

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Там скорее всего стоит ChatColor.stripColor();
    И в зависимости от разрешения этот метод используется или нет.
     
  8. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Может левый плагин слушает команд ивент и подменяет символ на параграф с какими то правами.
     
  9. Kalabealu

    Kalabealu Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    GoldFox
    Код:
    package com.storm.files;
    
    import org.bukkit.Material;
    import org.bukkit.event.block.Action;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.event.block.BlockBreakEvent;
    import org.bukkit.event.EventHandler;
    import org.bukkit.configuration.file.FileConfiguration;
    import java.util.Iterator;
    import java.util.List;
    import org.bukkit.entity.Player;
    import java.io.IOException;
    import java.util.ArrayList;
    import org.bukkit.configuration.file.YamlConfiguration;
    import java.io.File;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.event.Listener;
    
    public class hand implements Listener
    {
        private main plugin;
       
        public hand(final main plugin) {
            this.plugin = plugin;
        }
       
        @EventHandler
        public void join(final PlayerJoinEvent e) {
            final Player p = e.getPlayer();
            final List<String> msg = (List<String>)this.plugin.getConfig().getStringList("messages.join");
            for (String s : msg) {
                s = s.replace("&", "ยง");
                p.sendMessage(s);
            }
            final File players = new File(this.plugin.getDataFolder() + File.separator + "players.yml");
            final FileConfiguration users = (FileConfiguration)YamlConfiguration.loadConfiguration(players);
            List<String> list = (List<String>)users.getStringList("users");
            if (list == null) {
                list = new ArrayList<String>();
            }
            if (list.contains(p.getName())) {
                return;
            }
            list.add(p.getName());
            users.set("users", (Object)list);
            try {
                users.save(players);
            }
            catch (IOException e2) {
                e2.printStackTrace();
            }
        }
       
        @EventHandler
        public void block(final BlockBreakEvent e) {
        }
       
        @EventHandler
        public void interact(final PlayerInteractEvent e) {
            final Action a = e.getAction();
            if (a != Action.RIGHT_CLICK_AIR) {
                return;
            }
            final Player p = e.getPlayer();
            if (p.getItemInHand().getType() == Material.AIR) {
                return;
            }
        }
    }
    



    можно и заменить & на тот же параграф,в помощь юникод.


    Пиши так String rname = args[1].replace("&","\u00a7")[DOUBLEPOST=1475488206,1475487776][/DOUBLEPOST]
    Он неправильно сделал.Код сверху такая же вещь стоит.Юникод в помощь идёт.
     
  10. Автор темы
    ВukkitPrоfi

    ВukkitPrоfi Активный участник Пользователь

    Баллы:
    76
    Ладно, этот вопрос отпадает, применю String rname = args[1].replace("&","§").

    Появляется новый вопрос: как добавить проверку на перм к этому стрингу? (проще: Чтобы игрок без permission'a 'uralclans2.create.color не мог создавать клан с цветным названием). Я прост новичог в буккит апи и в самой джаве/яве
     
  11. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    сначала скинь весь код класса.
     
  12. CoolBoy

    CoolBoy Активный участник Пользователь

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Код:
    if (player.hasPermission("твой перм") {
      //do it
    } else {
      ChatColor.stripColor(do it);
    }
    
    #Псевдокод.
     

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