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

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

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

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

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

    Баллы:
    123
    Ну вот...
    Надеюсь решение не это, а более простое?:
    Код:
    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();
    }
     
  2. Хостинг MineCraft
    <
  3. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    org.bukkit.block.Chest ch = (org.bukkit.block.Chest) e.getClickedBlock().getState();
    ch.getBlockInventory().getTitle(); // Выдаёт название инвентаря сундука
     
  4. Hilgert

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

    Баллы:
    123
    Skype:
    mixa2258
    Имя в Minecraft:
    Hilgert
    я выше уже писал((9
     
  5. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Ну вот... А у меня вот это возвращает "container.chest"!!!
     
  6. Hilgert

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

    Баллы:
    123
    Skype:
    mixa2258
    Имя в Minecraft:
    Hilgert
    а ты уверен что при создании инвентаря сундука ты ему указываешь название?
     
  7. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Я скинул то, что у меня сработало, тему не читал
     
  8. ql_Nik_lp

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

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    (Пшш, если у сундука нет названия - вернет "контейнер.чест")
     
  9. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Думаю да... Я получаю сундук командой /getCase, вот ее код:
    Код:
                } 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;
    
    Код:
        protected String key = ChatColor.translateAlternateColorCodes('&', "&cКлюч");
        protected String keyLore = ChatColor.translateAlternateColorCodes('&', "&c&lКлюч к кейсу");
        protected String chestCase = ChatColor.translateAlternateColorCodes('&', "&aКейс");
        protected String chestCaseLore = ChatColor.translateAlternateColorCodes('&', "&a&lОружейный кейс");
    
    ItemMeta.setDisplayName(key) это разве не то?
     
  10. Code

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

    Баллы:
    123
    Имя в Minecraft:
    _Gizmo
    наверно, нет. это имя предмета.
     
  11. Hilgert

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

    Баллы:
    123
    Skype:
    mixa2258
    Имя в Minecraft:
    Hilgert
    я же говорил что DisplayName - название предмета в инвентаре.[DOUBLEPOST=1430916664,1430916193][/DOUBLEPOST]
    Код:
    BlockPlaceEvent e:
            CraftChest cchest = (CraftChest)e.getBlock().getState();
            Field inventoryField = cchest.getClass().getDeclaredField("chest");
            inventoryField.setAccessible(true);
            TileEntityChest tchest = ((TileEntityChest)inventoryField.get(cchest));
            tchest.a("Название");
    
     
  12. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Понятно..[DOUBLEPOST=1430923924][/DOUBLEPOST]
    А есть какой-то более простой способ опознать сундук?
     
  13. Hilgert

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

    Баллы:
    123
    Skype:
    mixa2258
    Имя в Minecraft:
    Hilgert
    nbt
     
  14. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    А можешь подсказать, какие импорты тут нужны?
    Просто сомневаюсь в том что подсказывает IDE...
     
  15. Hilgert

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

    Баллы:
    123
    Skype:
    mixa2258
    Имя в Minecraft:
    Hilgert
    я сам то с ними никогда не работал, ищи на bukkit.org
     
  16. CraftCoder

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

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    craftbukkit
     
  17. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Подождите...
    А разве это не ВСЕМ сундукам ставящимся в мире даст название? Мне надо только определенным сундукам...
     
  18. Code

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

    Баллы:
    123
    Имя в Minecraft:
    _Gizmo
    ну блин, добавь условие свое, и, если оно выполнено, меняй название.
     
  19. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Ну так... Как я понимаю все будет так:
    Каждый раз когда кто-то ставить блок будет вызыватся этот метод и блоку дастся имя...
     
  20. Hilgert

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

    Баллы:
    123
    Skype:
    mixa2258
    Имя в Minecraft:
    Hilgert
    ну так добавь условие, что бы отличить кейс от сундука
     
  21. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Так как?! Если бы его можно было как-то отличить, то я бы не делал такой заумный код!!
    Кейс отличается только DisplayNameом!
     
Статус темы:
Закрыта.

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