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

Помогите Как получить экземпляр Chest имея экземпляр Block

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

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

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

    Баллы:
    66
    Как получить экземпляр Chest имея экземпляр Block, если я знаю, что этот Block в мире есть CHEST

    public void open(PlayerInteractEvent e) {
    Block bl = e.getClickedBlock() ; //я получил блок, но как мне получить CHEST для работы с инвентарем

    }
     
  2. Exception_Prototype

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

    Баллы:
    96
    PHP:
    if (bl.getType() == Material.CHEST) {
          
    Chest chest = (Chestbl.getState();
          
    //todo
    }
     
  3. alexandrage

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

    Баллы:
    173
    Ты щас серьезно?
     
  4. Автор темы
    Poyalnik

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

    Баллы:
    66
    А что тут не серьезного?
     
  5. Автор темы
    Poyalnik

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

    Баллы:
    66
    Все работает. Спасибо.
     
  6. alexandrage

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

    Баллы:
    173
    Код:
        public void sendBlockAction(Location loc, Player player, int i) {
            WrapperPlayServerBlockAction packet = new WrapperPlayServerBlockAction();
            packet.setBlockType(Material.CHEST);
            packet.setByte1(1);
            packet.setByte2(i);
            packet.setLocation(new BlockPosition(loc.toVector()));
            packet.sendPacket(player);
            if(i==1) {
                player.playSound(loc, Sound.BLOCK_CHEST_OPEN, 1, i);
            }
            if(i==0) {
                player.playSound(loc, Sound.BLOCK_CHEST_CLOSE, 1, i);
            }
        }
      
        @EventHandler
        public void on(PlayerInteractEvent e) {
            Block block = e.getClickedBlock();
            Player player = e.getPlayer();
            if (block.getType() == Material.CHEST) {
                sendBlockAction(block.getLocation(), player, 1);
                e.setCancelled(true);
            }
        }
     
  7. alexandrage

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

    Баллы:
    173
  8. Bars

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

    Баллы:
    173
    Это вообще к чему? Просто так? Какой пример использования в быту?
     
  9. alexandrage

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

    Баллы:
    173
    К тому, что чел наплодил 2 темы.
     
  10. Автор темы
    Poyalnik

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

    Баллы:
    66
    Я совсем новичок и если можешь объясни чем полезен протоколлиб и пакетварпер?
    Если есть уроки по этой теме, то скинь пожалуйста.
     
  11. alexandrage

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

    Баллы:
    173
    Вот к примеру отправкой пакета открыть закрыть сундук. И не нужно заботится о версиях сервера, все за тебя сделаено.
     
  12. Автор темы
    Poyalnik

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

    Баллы:
    66
    А можно изменить title инвентаря этого сундука?
     
  13. alexandrage

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

    Баллы:
    173
    Конечно же.

    Код:
    package Example;
    
    import java.util.List;
    import org.bukkit.Bukkit;
    import org.*********ventory.Inventory;
    import org.*********ventory.InventoryHolder;
    import org.*********ventory.ItemStack;
    
    public class Menu implements InventoryHolder {
    
        private Inventory inventory;
    
        public Menu(List<ItemStack> stack, String title) {
            this.inventory = Bukkit.createInventory(this, 9 * (int) Math.ceil((double) stack.size() / 9), title);
            for (int i = 0; i < stack.size(); i++) {
                inventory.setItem(i, stack.get(i));
            }
        }
    
        @Override
        public Inventory getInventory() {
            return this.inventory;
        }
    }
     
  14. Автор темы
    Poyalnik

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

    Баллы:
    66
    Как сделать чтобы сундук был этим InventoryHolder?

    может так? (Menu menu = new Menu(a,b);
    Chest ch=(Chest) menu; )
     
  15. alexandrage

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

    Баллы:
    173
    От ты даун!)
    e.getPlayer().openInventory(menu.getInventory());
     
  16. Rider3217

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

    Баллы:
    98
    Имя в Minecraft:
    Planet0111
    Скорее ты, он же тебе выше сказал, что дуб дубом в этом, а ты ему код кидаешь:good:
    Или ты хочешь каждый раз за него писать код?
    Автор: Иди поучи базу Java для старта, а потом уже переходи к Javadoc по Bukkit Api и можешь еще почитать темы на рб для новичков с полезным кодом и гайдами
     
  17. alexandrage

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

    Баллы:
    173
    Да пофигу. Все написано и давно, для нубасов. https://github.com/alexandrage/Example
    Из пустого в порожни же гоняют, одно и тоже.
     
  18. Rider3217

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

    Баллы:
    98
    Имя в Minecraft:
    Planet0111
    Ответ принят, вопросов нет
     
  19. Bars

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

    Баллы:
    173
    Не используйте, устаревший метод. Вот актуальный:
    Код:
    chest.setCustomName("Новый тайтл");
    chest.update();
     
  20. alexandrage

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

    Баллы:
    173
    Ты вообще о чем? В моем коде фейк сундук, алё. И он ни разу не устаревший.
     

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