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

Помогите Верстак с которым нельзя взаимодействовать.

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

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

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

    Баллы:
    76
    Имя в Minecraft:
    Kukuroku
    В 1 плагине видел что при в воде команды открывался инвентрать с крафтом, но вещи в нём нельзя трогать и взаимодействовать никак нельзя.
    Как создать такой муляж верстака?

    Создаю инвентарь так
    PHP:
    Inventory inv Bukkit.createInventory(nullInventoryType.WORKBENCH);
     
  2. iD3LSY

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

    Баллы:
    76
    При клики по инвентарю сверяй его холдера, потом отменяй. Тему с инвентарями, имеющими холдера можешь найти на этом же форуме.
     
    Последнее редактирование: 3 май 2018
  3. alexandrage

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

    Баллы:
    173
    Код:
    package Example;
    
    import org.bukkit.Bukkit;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.inventory.InventoryClickEvent;
    import org.bukkit.event.inventory.InventoryDragEvent;
    import org.bukkit.event.inventory.InventoryType;
    import org.*********ventory.Inventory;
    import org.*********ventory.InventoryHolder;
    
    public class FaceWorkbench implements InventoryHolder, Listener {
        private Inventory inventory;
    
        FaceWorkbench() {
            inventory = Bukkit.createInventory(this, InventoryType.WORKBENCH);
        }
    
        @Override
        public Inventory getInventory() {
            return inventory;
        }
    
        @EventHandler
        public void on(InventoryClickEvent e) {
            if (e.getClickedInventory() == null) {
                return;
            }
            if (e.getClickedInventory().getHolder() instanceof FaceWorkbench) {
                e.setCancelled(true);
            }
        }
    
        @EventHandler
        public void on(InventoryDragEvent e) {
            if (e.getInventory().getHolder() instanceof FaceWorkbench) {
                e.setCancelled(true);
            }
        }
    }
     
    Последнее редактирование: 5 май 2018
  4. iD3LSY

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

    Баллы:
    76
    Разве если указать тип инвентаря ему дастся дефолтный для этого типа холдер вне зависимости от указанного null-холдера?
     
  5. alexandrage

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

    Баллы:
    173
    Забыл сменить на this.
     
  6. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Разве InventoryDragEvent не отменится если отменить InventoryClickEvent?
     
  7. alexandrage

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

    Баллы:
    173
    Но
     
  8. Автор темы
    Mukiroku

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

    Баллы:
    76
    Имя в Minecraft:
    Kukuroku
    Подскажи почему если добавить готовый крафт(Изменить в инверторе 0 слот), то при открытии инвентаря он не погружается, а когда кликнешь видно.
     
  9. Автор темы
    Mukiroku

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

    Баллы:
    76
    Имя в Minecraft:
    Kukuroku
    P.S. Достаточно player.updateInventory ()
     
  10. Автор темы
    Mukiroku

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

    Баллы:
    76
    Имя в Minecraft:
    Kukuroku
    А вот так не проще?
    PHP:
      public FaceWorkbench() {
            
    inventory Bukkit.createInventory(thisInventoryType.WORKBENCH,"crafts");
           
        }

        @
    Override
        
    public Inventory getInventory() {
            return 
    inventory;
        }

        @
    EventHandler
        
    public void on(InventoryClickEvent e) {
            if(
    e.getInventory().getName().equals("crafts")){
                
    e.setCancelled(true);
            }       
        }
     
  11. alexandrage

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

    Баллы:
    173
    Ваще неправильно.
     
  12. Автор темы
    Mukiroku

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

    Баллы:
    76
    Имя в Minecraft:
    Kukuroku
    Просто, в твоём способе игрок может взаимодействовать со своим инвентарём во время просмотра крафта, из-за чего если баги.

    P.S. А что тут неправильно?
     
  13. alexandrage

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

    Баллы:
    173
    Так и было задумано. Ибо смысл запрещать инвентарь игрока.
     
  14. Автор темы
    Mukiroku

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

    Баллы:
    76
    Имя в Minecraft:
    Kukuroku
    Просто когда берёшь вещи из своего инвентаря они иногда обратно не ложатся и приходится их выкидывать.
    Да и смысл, посмотрел крафт и всё.
     
  15. alexandrage

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

    Баллы:
    173
    Я тебя понял. Терь норм станет.

    Код:
    package Example;
    
    import org.bukkit.Bukkit;
    import org.bukkit.Material;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.inventory.InventoryClickEvent;
    import org.bukkit.event.inventory.InventoryDragEvent;
    import org.bukkit.event.inventory.InventoryType;
    import org.*********ventory.Inventory;
    import org.*********ventory.InventoryHolder;
    import org.*********ventory.ItemStack;
    import org.bukkit.plugin.Plugin;
    
    public class FaceWorkbench implements InventoryHolder, Listener {
        private Inventory inventory;
    
        FaceWorkbench(Plugin plugin) {
            inventory = Bukkit.createInventory(this, InventoryType.WORKBENCH);
            plugin.getServer().getPluginManager().registerEvents(this, plugin);
            ItemStack stack = new ItemStack(Material.STONE);
            inventory.addItem(stack);
        }
    
        @Override
        public Inventory getInventory() {
            return inventory;
        }
    
        @EventHandler
        public void on(InventoryClickEvent e) {
            if (e.getClickedInventory() == null) {
                return;
            }
            if (e.getClickedInventory().getHolder() instanceof FaceWorkbench) {
                e.setCancelled(true);
            }
        }
    
        @EventHandler
        public void on(InventoryDragEvent e) {
            if (e.getInventory().getHolder() instanceof FaceWorkbench) {
                if (e.getNewItems().containsKey(0)
                    || e.getNewItems().containsKey(1)
                    || e.getNewItems().containsKey(2)
                    || e.getNewItems().containsKey(3)
                    || e.getNewItems().containsKey(4)
                    || e.getNewItems().containsKey(5)
                    || e.getNewItems().containsKey(6)
                    || e.getNewItems().containsKey(7)
                    || e.getNewItems().containsKey(8)
                    || e.getNewItems().containsKey(9))
                {
                    e.setCancelled(true);
                }
            }
        }
    }
     

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