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

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

Метки:
Теги Теги
help itemstack plugin spigot 1.16.5
Статус
Закрыто для дальнейших ответов.
Код:
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
              }
       }
}
Как-то так
 
Код:
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
              }
       }
}
Как-то так
А как по команде это запустить
 
А как по команде это запустить
Это не надо запускать по команде.
Я тебе показал, как работать с обработчиком кликов по инвентарю

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

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

несовсем понял
if(event.getInventory().getHolder() instanceof CustomMenu) {

CustomMenu это что
 
несовсем понял
if(event.getInventory().getHolder() instanceof CustomMenu) {

CustomMenu это что
Это твой класс, реализующий интерфейс InventoryHolder, в котором ты можешь создать инвентарь, реализовать логику его заполнения, затем получить его и открыть игроку
 
Это твой класс, реализующий интерфейс InventoryHolder, в котором ты можешь создать инвентарь, реализовать логику его заполнения, затем получить его и открыть игроку
Ух как у вас всё сложно, особо новичку.

несовсем понял
if(event.getInventory().getHolder() instanceof CustomMenu) {

CustomMenu это что
Вместо этого дерьма проверяй по названию инвентаря, на первое время пойдёт.
 
Ух как у вас всё сложно, особо новичку.


Вместо этого дерьма проверяй по названию инвентаря, на первое время пойдёт.
Делал не работает посмотри на предыдущей странице последние сообщение
 
Ух как у вас всё сложно, особо новичку.


Вместо этого дерьма проверяй по названию инвентаря, на первое время пойдёт.
Может я его как-то не правильно вызываю
Потому что нечего не происходит из onClick
 
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
 
Последнее редактирование:
кинь главный класс и с листенером


Код:
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;
}




}
 
Код:
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;
}




}
удали и сделай как наверху
 
Код:
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;
}




}
Сравнивай TYPE не через equals, а через ==
ещё main класс скинь
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх