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

.

Статус
Закрыто для дальнейших ответов.
Конечно по-английски.
Ну вот...
Надеюсь решение не это, а более простое?:
JavaScript:
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();
}
 
org.bukkit.block.Chest ch = (org.bukkit.block.Chest) e.getClickedBlock().getState();
ch.getBlockInventory().getTitle(); // Выдаёт название инвентаря сундука
 
(Пшш, если у сундука нет названия - вернет "контейнер.чест")
 
а ты уверен что при создании инвентаря сундука ты ему указываешь название?
(Пшш, если у сундука нет названия - вернет "контейнер.чест")
Думаю да... Я получаю сундук командой /getCase, вот ее код:
JavaScript:
            } 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;
JavaScript:
    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) это разве не то?
 
Думаю да... Я получаю сундук командой /getCase, вот ее код:
JavaScript:
            } 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;
JavaScript:
    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) это разве не то?
я же говорил что DisplayName - название предмета в инвентаре.
JavaScript:
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("Название");
 
я же говорил что DisplayName - название предмета в инвентаре.
JavaScript:
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("Название");
Понятно..
я же говорил что DisplayName - название предмета в инвентаре.
JavaScript:
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("Название");
А есть какой-то более простой способ опознать сундук?
 
я же говорил что DisplayName - название предмета в инвентаре.
JavaScript:
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("Название");
А можешь подсказать, какие импорты тут нужны?
Просто сомневаюсь в том что подсказывает IDE...
 
я же говорил что DisplayName - название предмета в инвентаре.
JavaScript:
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("Название");
Подождите...
А разве это не ВСЕМ сундукам ставящимся в мире даст название? Мне надо только определенным сундукам...
 
Подождите...
А разве это не ВСЕМ сундукам ставящимся в мире даст название? Мне надо только определенным сундукам...
ну блин, добавь условие свое, и, если оно выполнено, меняй название.
 
ну если этот код рабочий, то нет. блок то берется из текущего события. из него достается тайлэнтити. в ней ставится имя.
Ну так... Как я понимаю все будет так:
Каждый раз когда кто-то ставить блок будет вызыватся этот метод и блоку дастся имя...
 
Подождите...
А разве это не ВСЕМ сундукам ставящимся в мире даст название? Мне надо только определенным сундукам...
ну так добавь условие, что бы отличить кейс от сундука
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх