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

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Dereku, 20 сен 2015.

  1. Автор темы
    Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    В общем, сабж в названии. Ищу тулзу, которая умеет из баккитовских материалов в языковые ключи майнкрафта. Или же какой ниб способ. Если кто встречал такое, скиньте. А то костылить мне ещё с этим не очень хочется.
     
  2. Хостинг MineCraft
    <
  3. Автор темы
    Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Сам спросил, сам ответил.
    Код:
        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";
        }
     
  4. Agravaine

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

    Баллы:
    88
    Имя в Minecraft:
    Agravaine25
    Ухтыжё, элегантное решение ;)
     
  5. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    А по мне выглядит дико :/
    Может лучше таки в начале отмапить все значения? При включении сервера. А потом не дергать понапрасну столько эвентов и прочей лабуды
     
  6. Автор темы
    Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Дёргается всего лишь два эвента. А маппить все значения весьма неблагодарное занятие. Я молчу о том, что материалы баккиты различаются от материалов ванили.
    [​IMG]

    Не совсем. Мне лично тоже не нравится создавать Entity лишь для имени. Но коли Bukkit не умеет в названия предметов, приходится изощряться таким методом.
     
  7. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Достаточно закешировать их.
     
  8. Автор темы
    Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    А вот про кэш я и не подумал. Вот тут спасибки.[DOUBLEPOST=1446184252,1442749994][/DOUBLEPOST]Как я уже писал, есть куда более изящное решение. Прошу любить и жаловать - NMS!
    Код:
    public String getItemStackName(ItemStack is) {
        net.minecraft.server.v1_8_R3.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(is);
        return nmsItemStack.a() + ".name";
    }
    [DOUBLEPOST=1446186075][/DOUBLEPOST]Ну и в догоночку - ванильные названия материалов в формате "minecraft:stone".
    Код:
    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();
    }
     

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