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

Из Material.STONE в tile.stone.stone.name

Dereku

Старожил
Пользователь
Баллы
173
Имя в Minecraft
_Dereku
В общем, сабж в названии. Ищу тулзу, которая умеет из баккитовских материалов в языковые ключи майнкрафта. Или же какой ниб способ. Если кто встречал такое, скиньте. А то костылить мне ещё с этим не очень хочется.
 
Сам спросил, сам ответил.
Java:
    public String getItemStackName(Player player, ItemStack is) {
        Location loc = player.getLocation();
        Item item = loc.getWorld().dropItem(new Location(loc.getWorld(), loc.getBlockX(), 0, loc.getBlockZ()), is);
        item.setCustomName(null);
        String name = item.getName();
        item.remove();
        return name.substring(5) + ".name";
    }
 
Ухтыжё, элегантное решение ;)
 
Сам спросил, сам ответил.
Java:
    public String getItemStackName(Player player, ItemStack is) {
        Location loc = player.getLocation();
        Item item = loc.getWorld().dropItem(new Location(loc.getWorld(), loc.getBlockX(), 0, loc.getBlockZ()), is);
        item.setCustomName(null);
        String name = item.getName();
        item.remove();
        return name.substring(5) + ".name";
    }
А по мне выглядит дико :/
Может лучше таки в начале отмапить все значения? При включении сервера. А потом не дергать понапрасну столько эвентов и прочей лабуды
 
А по мне выглядит дико :/
Может лучше таки в начале отмапить все значения? При включении сервера. А потом не дергать понапрасну столько эвентов и прочей лабуды
Дёргается всего лишь два эвента. А маппить все значения весьма неблагодарное занятие. Я молчу о том, что материалы баккиты различаются от материалов ванили.
YD1UXc-aNVg.jpg

Ухтыжё, элегантное решение ;)
Не совсем. Мне лично тоже не нравится создавать Entity лишь для имени. Но коли Bukkit не умеет в названия предметов, приходится изощряться таким методом.
 
Достаточно закешировать их.
А вот про кэш я и не подумал. Вот тут спасибки.
Как я уже писал, есть куда более изящное решение. Прошу любить и жаловать - NMS!
Java:
public String getItemStackName(ItemStack is) {
    net.minecraft.server.v1_8_R3.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(is);
    return nmsItemStack.a() + ".name";
}

Ну и в догоночку - ванильные названия материалов в формате "minecraft:stone".
Java:
private String getTrueMaterialName(ItemStack is) {
    net.minecraft.server.v1_8_R3.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(is);
    MinecraftKey key = net.minecraft.server.v1_8_R3.Item.REGISTRY.c(nmsItemStack.getItem());
    return key.toString();
}
 

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

Назад
Верх