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

Помогите Окраска брони

Discussion in 'Разработка плагинов для новичков' started by Dexel, Mar 24, 2017.

Thread Status:
Not open for further replies.
  1. Автор темы
    Dexel

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

    Trophy Points:
    76
    Skype:
    the_osirius
    Добрый день. Spigot 1.11.2
    Как можно дать ItemStack'у кожаной броне цвет?
    К примеру, #94CCEB
     
  2. Хостинг MineCraft
    <
  3. Blc_Dragon

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

    Trophy Points:
    76
    Имя в Minecraft:
    Blc_Dragon
    Code:
    LeatherArmorMeta meta = (LeatherArmorMeta) item.getItemMeta();
    int red = 255; //максимальное значение
    int green = 0; //минимальное значение
    int blue = 110;
    meta.setColor(Color.fromRGB(red, green, blue));
    item.setItemMeta(meta);
    Принимать во входной параметр Hex коды ведерко не умеет[DOUBLEPOST=1490382245,1490381141][/DOUBLEPOST]Откопал свой старый (не старый он) метод с хексами.
    Code:
    /**
    *На вход подается требуемый itemStack и строка с цветовым кодом
    *Строка может быть:
    * 1) '#FAB' (будет интерпертироваться как '#FFAABB')
    * 2) '#94CCEB'
    * 3) '255,0,110' - стандартный RGB
    * Остальные входные строки игнорируются
    * На выходе получаем ItemMeta с колором, если входной ItemStack был кожанкой
    */
    public static ItemMeta getColorMeta(String data, ItemStack item){
        item=item.clone(); //клонируем item (а то мало ли)
        if (item.getType()!=Material.LEATHER_BOOTS&&item.getType()!=Material.LEATHER_CHESTPLATE
                &&item.getType()!=Material.LEATHER_HELMET&&item.getType()!=Material.LEATHER_LEGGINGS) return item.getItemMeta(); //проверяем предмет. если не кожанка, то возвращает ту мету, которая и была
        if (data==null||data.isEmpty()) return item.getItemMeta(); //если строка пустая, то снова возвращаем старую мету
        if (data.startsWith("#")){
            data=data.substring(1).toUpperCase();
            if (data.length()!=3&&data.length()!=6) return item.getItemMeta();
            if (data.length()==3){
                LeatherArmorMeta meta = (LeatherArmorMeta) item.getItemMeta();
                //перегон хекса в RGB
                int red = fromHEXtoRGB(data.substring(0, 0)+data.substring(0, 0));
                int green = fromHEXtoRGB(data.substring(1, 1)+data.substring(1, 1));
                int blue = fromHEXtoRGB(data.substring(2, 2)+data.substring(2, 2));
                meta.setColor(Color.fromRGB(red, green, blue));
                return meta;
            }
            if (data.length()==6){
                LeatherArmorMeta meta = (LeatherArmorMeta) item.getItemMeta();
                //перегон хекса в RGB
                int red = fromHEXtoRGB(data.substring(0, 1));
                int green = fromHEXtoRGB(data.substring(2, 3));
                int blue = fromHEXtoRGB(data.substring(4, 5));
                meta.setColor(Color.fromRGB(red, green, blue));
                return meta;
            }
        }
        if (data.split(",").length==3){
            LeatherArmorMeta meta = (LeatherArmorMeta) item.getItemMeta();
            if (!isNumeric(data.split(",")[0])||!isNumeric(data.split(",")[1])||!isNumeric(data.split(",")[2])) return item.getItemMeta();
            int red = Integer.parseInt((data.split(",")[0]));
            int green = Integer.parseInt((data.split(",")[1]));
            int blue = Integer.parseInt((data.split(",")[2]));
            meta.setColor(Color.fromRGB(red, green, blue));
            return meta;
        }
       
        return item.getItemMeta();
    }
    
    //дополнительные методы, которые были использованы в данном решении
    private static int fromHEXtoRGB(String hex){
        if (hex.length()!=2)return 0;
        if (!hex.matches("[0-9A-Fa-f]")) return 0;
        int color = letterToInt(hex.toUpperCase().charAt(0))*16+letterToInt(hex.toUpperCase().charAt(1));
        return color;
    }
    /**
     * Only Upper Case
     * @param a
     * @return
     */
    private static int letterToInt(char a){
        switch (a){
        case 'A':
            return 10;
        case 'B':
            return 11;
        case 'C':
            return 12;
        case 'D':
            return 13;
        case 'E':
            return 14;
        case 'F':
            return 15;
           
        default: return -1;
        }
    }
    public static boolean isNumeric(String s){
        if (s==null) return false;
        if (s.startsWith("-")) s=s.substring(1);
        Pattern p = Pattern.compile("(\\d+)(\\.\\d+)?");
        Matcher m = p.matcher(s);
        return m.matches();
    }
    
     
  4. Автор темы
    Dexel

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

    Trophy Points:
    76
    Skype:
    the_osirius
    А можно объединить эти две меты? Когда я устанавливаю предмету мету цвета, убирается другая мета (имя, описание, чары и т.д.)
    [DOUBLEPOST=1490385057][/DOUBLEPOST]Можно. Спасибо, тема закрыта.
     
    Last edited: Mar 25, 2017
Thread Status:
Not open for further replies.

Share This Page