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

Помогите Как создать Chest имея Block и зная что этот блок сундук?

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

Статус темы:
Закрыта.
  1. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    У меня есть блок (Block), я точно знаю что это сундук, как мне превратить его в Chest?
    Просто каст не помогает..
    Код:
    Chest chest = (Chest) event.getBlock();
    Выбивает ошибку, так как все-таки правильно превратить Block в Chest, ну или просто получить Chest?..
     
  2. Хостинг MineCraft
    <
  3. Plasticable

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

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    Plasticable
    getBlock().getState()?
     
  4. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Да вроде подойдет...
    Но возникла другая проблема...
    У этого сундука который я получил в Chest имя должно быть &aКейс
    но когда я делаю так
    Код:
    chest.getInventory().getName()
    то метод возвращает не "&aКейс" а "container.chest" Как вернуть именно имя сундука?
     
  5. Plasticable

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

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    Plasticable
    Вот, что я нашёл на англоведре
    Код:
    CraftChest chest = (CraftChest) block.getState(); //block has to be a chest
          
    try
    {
        Field inventoryField = chest.getClass().getDeclaredField("chest"); //This get's the CraftChest variable 'chest' which is the TileEntityChest that is stored within it
        inventoryField.setAccessible(true); //Allows you to access that field since it's declared as private
        TileEntityChest teChest = ((TileEntityChest) inventoryField.get(chest)); //obtains the field and casts it to a TileEntityChest
        teChest.a("Name Goes Here"); //The a(String) method sets the title of the chest
    }
    catch (Exception e) //This has to be here as the getDeclaredField(String) throws an exception if the input doesn't exist in the given class
    {
         e.printStackTrace();
    }
    
     
  6. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Сначала я ничего не понял,
    потом тоже ничего не понял,
    потом подумал что это устанавливает что-то, а не получает что-то...[DOUBLEPOST=1430477218,1430477182][/DOUBLEPOST]Да и это что-то слишком заумно.... Чтоб просто получить имя сундучка..
     
  7. BeYkeR

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

    Баллы:
    173
    У меня всегда имя сундука возвращало :/
     
  8. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Эм... Ну тогда я вообще ничего не понял...
     
  9. Code

    Code Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    _Gizmo
    лучше бы понял) ничего особо сложного нет. просто у сундука тайлэнтити, видимо, приватная, этот код дает к ней доступ, достает ее и берет оттуда имя. только неужели нет нормального способа получить энтити сундука?)
     
  10. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Эээ... Ага...
    Пожалуй сделаю умное лицо, пусть все подумают что я хоть что-то понял..
     
  11. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    А ты это имя то выставлял чтобы потом его получить то?
     
  12. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Ну в принципе выставлял... Если я правильно Вас понял, я кейс сундук с именем получаю командой, и мне прилетает сундук с установленным именем...
    Код:
                } else if (cmd.getName().equalsIgnoreCase("getCase")) {
                    if (player.hasPermission("opencase.getcase")) {
                        if (args.length == 0) {
                            ItemStack item = new ItemStack(Material.CHEST);
                            ItemMeta meta = item.getItemMeta();
                            meta.setDisplayName(chestCase);
                            ArrayList<String> lore = new ArrayList<String>();
                            lore.add(chestCaseLore);
                            meta.setLore(lore);
                            meta.addEnchant(Enchantment.DURABILITY, 1, true);
                            item.setItemMeta(meta);
                            player.getInventory().setItemInHand(item);
                            return true;
    
    [DOUBLEPOST=1430540407,1430540362][/DOUBLEPOST]
    Код:
        protected String chestCase = ChatColor.translateAlternateColorCodes('&', "&aКейс");
        protected String chestCaseLore = ChatColor.translateAlternateColorCodes('&', "&a&lОружейный кейс");
    
    [DOUBLEPOST=1430540491][/DOUBLEPOST]Ну и в самом майне видно что у него имя есть...
     
  13. CraftCoder

    CraftCoder Старожил Пользователь

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Ну так ты ставишь displayName, а пытаешься получить Name...
     
  14. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Ыыы... Это не одно и тоже?...
    Метода setName я не нашел...[DOUBLEPOST=1430549069,1430549018][/DOUBLEPOST]Ну и метода getDisplayName я не нашел также...
     
  15. MOR_IV

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

    Баллы:
    88
    Имя в Minecraft:
    MOR_IV
    Сундук.getMetadata().getDisplayName()
     
  16. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Возможно, но...
    Лично у меня метод есть только такой: Chest.getMetadata(String s) и что указывать в качестве параметра s?[DOUBLEPOST=1430563967,1430563900][/DOUBLEPOST]И этот метод возвращает List<MetadataValue>...[DOUBLEPOST=1430664349][/DOUBLEPOST]UP щтоле..[DOUBLEPOST=1430724482][/DOUBLEPOST]UP! Так как мне можно правильно получить имя сундука?![DOUBLEPOST=1430753721][/DOUBLEPOST]
    Так можете ответить?
    Я нашел только это:
    https://hub.spigotmc.org/javadocs/b...etadatable.html#getMetadata(java.lang.String)
    Но это не подходит, метод воpвращает List<MetadataValue>...
    И в качестве параметра требует String...[DOUBLEPOST=1430759965][/DOUBLEPOST]UP
     
  17. Hilgert

    Hilgert Старожил Пользователь

    Баллы:
    123
    Skype:
    mixa2258
    Имя в Minecraft:
    Hilgert
    displayName - это название предмета в инвентаре
    попробуй:
    Код:
    Chest ch = (Chest)block.getState();
    ch.getBlockInventory().getTitle();
    //или
    ch.getBlockInventory().getName();
    
     
  18. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Второе возвращает "container.chest" первое попробую..[DOUBLEPOST=1430797389,1430796943][/DOUBLEPOST]И getTitle() и getName() возвращает "container.chest"...

    Ну кааак мне получить DisplayName()?:cry::cry::cry::cry:
     
  19. ql_Nik_lp

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

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Омг, ты шутишь что-ли?
    Сидеть несколько дней над такой херней когда в первой строке гугла есть ответ... Мде..
     
  20. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    С русским запросом, или по английски?
     
  21. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Конечно по-английски.
     
Статус темы:
Закрыта.

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