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

Помогите Как создать 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ом!
     
Статус темы:
Закрыта.

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