Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
LeatherArmorMeta meta = (LeatherArmorMeta) item.getItemMeta();
int red = 255; //максимальное значение
int green = 0; //минимальное значение
int blue = 110;
meta.setColor(Color.fromRGB(red, green, blue));
item.setItemMeta(meta);
/**
*На вход подается требуемый 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();
}
А можно объединить эти две меты? Когда я устанавливаю предмету мету цвета, убирается другая мета (имя, описание, чары и т.д.)Java: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 коды ведерко не умеет
Откопал свой старый (не старый он) метод с хексами.
Java:/** *На вход подается требуемый 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(); }