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

Помогите Инвентари и продажа по клику

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

Статус темы:
Закрыта.
  1. Lemar98

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

    Баллы:
    76
    Код:
    public class Main extends JavaPlugin {
    
             public void onEnable() {
                      Bukkit.getPluginManager().registerEvents(new MyListener(this), this);
              }
    }
    
    Код:
    public class MyListener implements Listener {
    
         private Main main;
        
         public MyListener(Main main) {
                 this.main = main;
          }
          
          @EventHandler
          public void onClikc(InventoryClickEvent event) {
                  if(event.getInventory().getHolder() instanceof CustomMenu) {
                         //todo
                  }
           }
    }
    Как-то так
     
  2. Автор темы
    Thorgathis

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

    Баллы:
    66
    Имя в Minecraft:
    Thorgathis
    А как по команде это запустить
     
  3. Witenin

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

    Баллы:
    76
    Имя в Minecraft:
    Witenin
    Это не нужно запускать по команде...
     
  4. Автор темы
    Thorgathis

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

    Баллы:
    66
    Имя в Minecraft:
    Thorgathis
    Ну мне же менюшку надо открыть после выполнения команды
     
  5. Lemar98

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

    Баллы:
    76
    Это не надо запускать по команде.
    Я тебе показал, как работать с обработчиком кликов по инвентарю

    Чтобы открыть инвентарь по команде, просто создаешь свой класс реализующий commandExecutor, регистрируешь в главном классе в onEnable() и в классе с commandExecutor в теле onCommand открываешь инвентарь с помощью player#openInventory(inventory)
     
  6. Автор темы
    Thorgathis

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

    Баллы:
    66
    Имя в Minecraft:
    Thorgathis
    несовсем понял
    if(event.getInventory().getHolder() instanceof CustomMenu) {

    CustomMenu это что
     
  7. Lemar98

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

    Баллы:
    76
    Это твой класс, реализующий интерфейс InventoryHolder, в котором ты можешь создать инвентарь, реализовать логику его заполнения, затем получить его и открыть игроку
     
  8. OJIEKCAHDP

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

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    Ух как у вас всё сложно, особо новичку.

    Вместо этого дерьма проверяй по названию инвентаря, на первое время пойдёт.
     
  9. Автор темы
    Thorgathis

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

    Баллы:
    66
    Имя в Minecraft:
    Thorgathis
    Делал не работает посмотри на предыдущей странице последние сообщение
     
  10. Автор темы
    Thorgathis

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

    Баллы:
    66
    Имя в Minecraft:
    Thorgathis
    Может я его как-то не правильно вызываю
    Потому что нечего не происходит из onClick
     
  11. OJIEKCAHDP

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

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    Ты листенер зарегистрировал?
     
  12. Автор темы
    Thorgathis

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

    Баллы:
    66
    Имя в Minecraft:
    Thorgathis
    Конечно
     
  13. OJIEKCAHDP

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

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    кинь главный класс и с листенером
     
  14. NukerFall

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

    Баллы:
    76
    Spigot 1.17.1

    Код:
    public class Main extends JavaPlugin {
    
        private IHolder holder;
    
        public void onEnable() {
            holder = new IHolder();
            saveDefaultConfig();
            getServer().getPluginManager().registerEvents(new InventoryClickListener(this), this);
            new GUICommand(this);
        }
    
        public IHolder getHolder() {
            return holder;
        }
    
    }
    
    Код:
    public class InventoryClickListener implements Listener {
    
        private String inventory_name;
     
        public InventoryClickListener(Main main) {
            inventory_name = main.getConfig().getString("inventory-name");
        }
     
        @EventHandler
        public void onInventoryClick(InventoryClickEvent event) {
            if (event.getClickedInventory() != null) {
                if (event.getInventory().getHolder() instanceof IHolder) {
                    event.setCancelled(true);
                    if (event.getClickedSlot() == 1) {
                        // buy();
                    }
                }
            }
        }
    
    }
    
    Код:
    public class GUICommand implements CommandExecutor {
    
        private Inventory inv;
        private Main main;
    
        public GUICommand(Main main) {
            main.getCommand("gui").setExecutor(this);
            this.main = main;
            String inventory_name = main.getConfig().getString("inventory-name");
            int inventory_rows = main.getConfig().getInt("inventory-rows");
            inv = main.getServer().createInventory(main.getHolder(), inventory_rows * 9, inventory_name);
            // залей инвентарь вещами.
        }
    
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if (args.length == 0) {
                if (sender instanceof Player) {
                    Player p = (Player) sender;
                    p.openInventory(inv);
                } else {
                    sender.sendMessage(main.getConfig().getString("only-for-players"));
                }
            } else {
                sender.sendMessage(main.getConfig().getString("args"));
            }
        }
    
    }
    
    Код:
    public class IHolder implements InventoryHolder {
    
        @Override
        public Inventory getInventory() {
            return null;
        }
    
    }
    
    Код:
    #Количество строк может быть от 1 до 6, иначе еррор
    inventory-rows: 6
    inventory-name: 'GUI Shop'
    only-for-players: 'Only for players.'
    args: 'Wrong command.'
    
    Код:
    name: **
    author: [**]
    version: **
    main: **
    commands:
      gui:
        description: open GUI
    
     
    Последнее редактирование: 18 ноя 2021
  15. Автор темы
    Thorgathis

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

    Баллы:
    66
    Имя в Minecraft:
    Thorgathis

    Код:
    package main;
    
    import net.md_5.bungee.api.ChatColor;
    
    import org.bukkit.Bukkit;
    import org.bukkit.GameMode;
    import org.bukkit.Material;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.HumanEntity;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.inventory.ClickType;
    import org.bukkit.event.inventory.InventoryClickEvent;
    import org.bukkit.event.inventory.InventoryInteractEvent;
    import org.*********ventory.Inventory;
    import org.*********ventory.InventoryHolder;
    import org.*********ventory.ItemStack;
    import org.*********ventory.meta.ItemMeta;
    import org.bukkit.material.Wool;
    
    import java.awt.Menu;
    import java.util.ArrayList;
    import java.util.List;
    
    public class blocks implements Listener, CommandExecutor {
    
        Inventory inv = Bukkit.createInventory(null, 9, ChatColor.RED +  "CrepperBlocks");
        @EventHandler
        public void onClick(InventoryClickEvent e) {
             Player p = (Player) e.getWhoClicked();
             if (e.getView().getTitle().equalsIgnoreCase("How should I kill him?")){
                 e.setCancelled(true);
                 if (e.getCurrentItem() == null){
                     return;
                 }else if (e.getCurrentItem().getType().equals(Material.CHIPPED_ANVIL)){
                     p.sendMessage("You want to slice someone! Nice!");
                     p.closeInventory();
                 }else if (e.getCurrentItem().getType().equals(Material.CYAN_CARPET)){
                     p.sendMessage("You want to explode him! OKay!");
                     p.closeInventory();
                 }
             }
        }
        public void onGUi(Player p) {
            ItemStack item1 = new ItemStack(Material.DIAMOND_BLOCK);
            ItemMeta item1Meta = item1.getItemMeta();
            ItemStack item2 = new ItemStack(Material.REDSTONE_BLOCK);
            ItemMeta item2Meta = item2.getItemMeta();
          
            item1Meta.setDisplayName("Survival");
            item1.setItemMeta(item1Meta);
            item2Meta.setDisplayName("Creative");
            item2.setItemMeta(item2Meta);
          
            inv.setItem(3, item1);
            inv.setItem(5, item2);
            onClick(null);
        }
        
        public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
            if(cmd.getName().equalsIgnoreCase("blocksell")) {
    
               ((HumanEntity) sender).openInventory(inv);
            }
            return true;
    }
    
    
    
    
    }
     
  16. NukerFall

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

    Баллы:
    76
    удали и сделай как наверху
     
  17. OJIEKCAHDP

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

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    Сравнивай TYPE не через equals, а через ==
    ещё main класс скинь
     
  18. NukerFall

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

    Баллы:
    76
    zachem
     
  19. OJIEKCAHDP

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

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    Человек должен понимать что он делает, а не просто копипастить.
     
  20. NukerFall

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

    Баллы:
    76
    там есть комментарии и красиво отформатированный код, пускай вникает. Я так учился и чел научится)
     
Статус темы:
Закрыта.

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