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

ВukkitPrоfi

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

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

Заглядываю ''под капот'' плагина, нахожу:
Код:
 *много пробелов*           String rname = args[1].replaceAll("&.", "");

НО, проверки на права и прочие особенности (if...) я никакой не вижу, хотя, если я себе выдам право '*', то я смогу создавать кланы с цветным названием, а если выдам uralclans2.*, то символ '&' всеравно будет игнорироваться.
Что же все-таки дает возможность создавать клан с цветным названием?

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

Там я больше ничего не нашел, связанное с проверкой на цветовые коды, нашел только этот string - у него нет никакой проверки, т.е. игнор этих символов должен распространятся на всех игроков сервера, даже на основателей, но у основателя все права ('*'), но нет прав оператора и он как-то может создать клан с цветным названием.
 
Последнее редактирование:
С UralClans не имел дела, написал свой аналог.
Скинь cорцы, попробую разобраться. Также интересно, как оно так работает
 
Просто фиксани на args[1].replaceAll("&.", "§");
Пруфит.
 
Там скорее всего стоит ChatColor.stripColor();
И в зависимости от разрешения этот метод используется или нет.
 
Может левый плагин слушает команд ивент и подменяет символ на параграф с какими то правами.
 
Код:
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;
        }
    }
}
Стоит плагин UralClans2, кастомизированный одним челом. Решил я его доработать.

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

Заглядываю ''под капот'' плагина, нахожу:
Код:
*много пробелов*           String rname = args[1].replaceAll("&.", "");

НО, проверки на права и прочие особенности (if...) я никакой не вижу, хотя, если я себе выдам право '*', то я смогу создавать кланы с цветным названием, а если выдам uralclans2.*, то символ '&' всеравно будет игнорироваться.
Что же все-таки дает возможность создавать клан с цветным названием?

пуст скриптум.: если нужен исходник, пишите, скину.




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


Пиши так String rname = args[1].replace("&","\u00a7")
Может левый плагин слушает команд ивент и подменяет символ на параграф с какими то правами.
Он неправильно сделал.Код сверху такая же вещь стоит.Юникод в помощь идёт.
 
Ладно, этот вопрос отпадает, применю String rname = args[1].replace("&","§").

Появляется новый вопрос: как добавить проверку на перм к этому стрингу? (проще: Чтобы игрок без permission'a 'uralclans2.create.color не мог создавать клан с цветным названием). Я прост новичог в буккит апи и в самой джаве/яве
 
Ладно, этот вопрос отпадает, применю String rname = args[1].replace("&","§").

Появляется новый вопрос: как добавить проверку на перм к этому стрингу? (проще: Чтобы игрок без permission'a 'uralclans2.create.color не мог создавать клан с цветным названием). Я прост новичог в буккит апи и в самой джаве/яве
сначала скинь весь код класса.
 
Java:
if (player.hasPermission("твой перм") {
  //do it
} else {
  ChatColor.stripColor(do it);
}

#Псевдокод.
 
Назад
Верх