В данный момент я изучаю java и разрабатываю плагин для Bukkit. Вот моя проблема:
У меня есть событие, которое срабатывает при нажатии игроком инвентаря (событие зарегистрировано в Главном классе):
Метод регистрации
private void registerEvents() {
Bukkit.getPluginManager().registerEvents(new SendMailInventory(), this);
Bukkit.getPluginManager().registerEvents(new MailInventory(), this);
}
onEnable ():
public void onEnable() {
Logger log = getLogger();
PluginDescriptionFile file = this.getDescription();
log.info(file.getName() + " Version: " + file.getVersion() + " has been enabled!");
plugin = this;
registerCommands();
registerEvents(); //here
setConfig();
}
Когда игрок использует команду «/ smi open», я создаю новый объект, который открывает инвентарь и управляет им. Моя проблема возникает здесь, мне нужен способ использовать объект только для того игрока, чтобы хранить предметы, и т. Д. c ... Как создать экземпляр объекта для каждого игрока, который использует команду, и использовать созданный объект, чтобы делать вещи :
Игрок a -> имеет свой собственный объект из класса нумерации страниц
Игрок b -> имеет свой собственный объект из нумерации классов
Player c - -> имеет свой собственный объект из класса нумерации страниц
et c ....
Итак, как я могу передать этот объект в класс, где происходит событие? Я сделал это (но я не думаю, что это лучший способ, я действительно не знаю):
if(args[0].equalsIgnoreCase("open")) {
Pagination pag = new Pagination(player);
MailInventory.pagList.put(player, pag);
pag.setUpInventories();
return true;
}
Таким образом, из класса событий я могу сделать это:
@EventHandler
public void clickCrate(InventoryClickEvent e) {
Player player = (Player) e.getWhoClicked();
Pagination pag = pagList.get(player); //RIGHT HERE
if(!(e.getInventory().getHolder() instanceof Pagination)) {return;}
ItemStack itemInHand = e.getCurrentItem();
if(itemInHand!=null) {
if(itemInHand.getType().equals(Material.CHEST)) {
ItemMeta meta = itemInHand.getItemMeta();
int id = meta.getCustomModelData();
pag.getItemsFromCrate(id);
}
e.setCancelled(true);
}
}
Пагинация действует как инвентарь