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

  • Автор темы Автор темы Mukiroku
  • Дата начала Дата начала

Mukiroku

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

Создаю инвентарь так
PHP:
Inventory inv = Bukkit.createInventory(null, InventoryType.WORKBENCH);
 
При клики по инвентарю сверяй его холдера, потом отменяй. Тему с инвентарями, имеющими холдера можешь найти на этом же форуме.
 
Последнее редактирование:
Код:
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);
        }
    }
}
 
Последнее редактирование:
Код:
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(null, InventoryType.WORKBENCH);
    }

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

    @EventHandler
    public void on(InventoryClickEvent e) {
        if (e.getClickedInventory().getHolder() instanceof FaceWorkbench) {
            e.setCancelled(true);
        }
    }

    @EventHandler
    public void on(InventoryDragEvent e) {
        if (e.getInventory().getHolder() instanceof FaceWorkbench) {
            e.setCancelled(true);
        }
    }
}
Разве если указать тип инвентаря ему дастся дефолтный для этого типа холдер вне зависимости от указанного null-холдера?
 
Подскажи почему если добавить готовый крафт(Изменить в инверторе 0 слот), то при открытии инвентаря он не погружается, а когда кликнешь видно.

P.S. Достаточно player.updateInventory ()
 
Код:
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().getHolder() instanceof FaceWorkbench) {
            e.setCancelled(true);
        }
    }

    @EventHandler
    public void on(InventoryDragEvent e) {
        if (e.getInventory().getHolder() instanceof FaceWorkbench) {
            e.setCancelled(true);
        }
    }
}

А вот так не проще?
PHP:
  public FaceWorkbench() {
        inventory = Bukkit.createInventory(this, InventoryType.WORKBENCH,"crafts");
       
    }

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

    @EventHandler
    public void on(InventoryClickEvent e) {
        if(e.getInventory().getName().equals("crafts")){
            e.setCancelled(true);
        }       
    }
 
А вот так не проще?
PHP:
  public FaceWorkbench() {
        inventory = Bukkit.createInventory(this, InventoryType.WORKBENCH,"crafts");
      
    }

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

    @EventHandler
    public void on(InventoryClickEvent e) {
        if(e.getInventory().getName().equals("crafts")){
            e.setCancelled(true);
        }      
    }
Ваще неправильно.
 
Вопще неправильно.
Просто, в твоём способе игрок может взаимодействовать со своим инвентарём во время просмотра крафта, из-за чего если баги.

P.S. А что тут неправильно?
 
Просто, в твоём способе игрок может взаимодействовать со своим инвентарём во время просмотра крафта, из-за чего если баги.

P.S. А что тут неправильно?
Так и было задумано. Ибо смысл запрещать инвентарь игрока.
 
Так и было задумано. Ибо смысл запрещать инвентарь игрока.
Просто когда берёшь вещи из своего инвентаря они иногда обратно не ложатся и приходится их выкидывать.
Да и смысл, посмотрел крафт и всё.
 
Просто когда берёшь вещи из своего инвентаря они иногда обратно не ложатся и приходится их выкидывать.
Да и смысл, посмотрел крафт и всё.
Я тебя понял. Терь норм станет.

Код:
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);
            }
        }
    }
}
 
Назад
Верх