inventoryopenevent may only be triggered synchronously. Выводит при исполнении команды открытии меню со списком всех контрактов.
Код:
package ru.LoyderskiYy.Contracts.code.contracts;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.SkullMeta;
import ru.LoyderskiYy.Contracts.code.Main;
import ru.LoyderskiYy.Contracts.code.utils.AbstractCommands;
import ru.LoyderskiYy.Contracts.code.utils.Standard;
public class ContractsCommand extends AbstractCommands {
public ContractsCommand(String command) {
super(command);
}
public void execute(CommandSender sender, Command command, String label, String[] args) {
if (sender.hasPermission("lkyContracts.contracts.view") && !(sender instanceof ConsoleCommandSender)) {
Player player = (Player)sender;
if (ContractsManager.contracts.isEmpty()) {
Standard.sendMessage(sender, "&6&lСЕРВЕР: &fНа данный момент нет активных контрактов.");
return;
}
Bukkit.getScheduler().runTaskAsynchronously(Main.getInstance(), () -> {
player.openInventory(wanted());
});
}
}
public static Inventory wanted() {
Inventory inventory = Bukkit.createInventory((InventoryHolder)null, 45, "Разыскиваются");
List<String> wanted = new ArrayList(ContractsManager.contracts.keySet());
for(int slot = 0; slot < 45; ++slot) {
ItemStack head = new ItemStack(Material.SKULL_ITEM, 1, (short)3);
try {
Player player = Bukkit.getPlayer((String)wanted.get(slot));
if (player != null) {
String head_name = Standard.colorize("&6{prefix} {target}".replace("{prefix}", Main.getInstance().getChat().getPlayerPrefix(player)).replace("{target}", player.getName()));
List<String> head_lore = Arrays.asList(" ", " &fЗаказчик&7: &c{customer} ", " &fСумма&7: &e{cost}{type} ", " ");
List<String> new_lore = new ArrayList();
SkullMeta head_meta = (SkullMeta)head.getItemMeta();
int cost = ((Contract)ContractsManager.contracts.get(player.getName())).getCost();
String type = ((Contract)ContractsManager.contracts.get(player.getName())).getType();
String customer = ((Contract)ContractsManager.contracts.get(player.getName())).getCustomer();
head_name = head_name.replaceAll("\\{target}", (String)wanted.get(slot));
Iterator var12 = head_lore.iterator();
while(var12.hasNext()) {
String str = (String)var12.next();
str = str.replaceAll("\\{cost}", String.valueOf(cost));
str = str.replaceAll("\\{customer}", String.valueOf(customer));
str = str.replaceAll("\\{type}", type.equalsIgnoreCase("rubles") ? "Р" : "⛂");
new_lore.add(Standard.colorize(str));
}
head_meta.setOwner(player.getName());
head_meta.setDisplayName(head_name);
head_meta.setLore(new_lore);
head.setItemMeta(head_meta);
inventory.setItem(slot, head);
}
} catch (IndexOutOfBoundsException var14) {
return inventory;
}
}
return inventory;
}
}
Код:
package ru.LoyderskiYy.Contracts.code.contracts;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.SkullMeta;
import ru.LoyderskiYy.Contracts.code.Main;
import ru.LoyderskiYy.Contracts.code.utils.AbstractCommands;
import ru.LoyderskiYy.Contracts.code.utils.Standard;
public class ContractsCommand extends AbstractCommands {
public ContractsCommand(String command) {
super(command);
}
public void execute(CommandSender sender, Command command, String label, String[] args) {
if (sender.hasPermission("lkyContracts.contracts.view") && !(sender instanceof ConsoleCommandSender)) {
Player player = (Player)sender;
if (ContractsManager.contracts.isEmpty()) {
Standard.sendMessage(sender, "&6&lСЕРВЕР: &fНа данный момент нет активных контрактов.");
return;
}
Bukkit.getScheduler().runTaskAsynchronously(Main.getInstance(), () -> {
player.openInventory(wanted());
});
}
}
public static Inventory wanted() {
Inventory inventory = Bukkit.createInventory((InventoryHolder)null, 45, "Разыскиваются");
List<String> wanted = new ArrayList(ContractsManager.contracts.keySet());
for(int slot = 0; slot < 45; ++slot) {
ItemStack head = new ItemStack(Material.SKULL_ITEM, 1, (short)3);
try {
Player player = Bukkit.getPlayer((String)wanted.get(slot));
if (player != null) {
String head_name = Standard.colorize("&6{prefix} {target}".replace("{prefix}", Main.getInstance().getChat().getPlayerPrefix(player)).replace("{target}", player.getName()));
List<String> head_lore = Arrays.asList(" ", " &fЗаказчик&7: &c{customer} ", " &fСумма&7: &e{cost}{type} ", " ");
List<String> new_lore = new ArrayList();
SkullMeta head_meta = (SkullMeta)head.getItemMeta();
int cost = ((Contract)ContractsManager.contracts.get(player.getName())).getCost();
String type = ((Contract)ContractsManager.contracts.get(player.getName())).getType();
String customer = ((Contract)ContractsManager.contracts.get(player.getName())).getCustomer();
head_name = head_name.replaceAll("\\{target}", (String)wanted.get(slot));
Iterator var12 = head_lore.iterator();
while(var12.hasNext()) {
String str = (String)var12.next();
str = str.replaceAll("\\{cost}", String.valueOf(cost));
str = str.replaceAll("\\{customer}", String.valueOf(customer));
str = str.replaceAll("\\{type}", type.equalsIgnoreCase("rubles") ? "Р" : "⛂");
new_lore.add(Standard.colorize(str));
}
head_meta.setOwner(player.getName());
head_meta.setDisplayName(head_name);
head_meta.setLore(new_lore);
head.setItemMeta(head_meta);
inventory.setItem(slot, head);
}
} catch (IndexOutOfBoundsException var14) {
return inventory;
}
}
return inventory;
}
}