GoldenSunsetMine
Пользователь
- Сообщения
- 91
Возникла такая проблема, что при первом открытии меню после запуска сервера, либо при первом открытии меню когда количество его страниц изменилось, totalPages = 0 и из-за этой проблемы, когда totalPages = 0, меню не доступно для исполнения Listener и вообще ни для чего. Вот при повторном открытии меню, оно уже начинает нормально функционировать и totalPages устанавливается на нужное значение. Помогите исправить и сделать чтобы меню всегда нормально функционировало и всегда устанавливалось правильное значение totalPages. Я перепробовал очень много способов и ни один не оказался результатным.
Java:
package com.bodya.rpbank.GUI.Computer;
import com.bodya.rpbank.Balance.BankAccounts;
import com.bodya.rpbank.Balance.Credits;
import com.bodya.rpbank.Balance.Fines;
import com.bodya.rpbank.Main;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.OfflinePlayer;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.io.File;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.UUID;
public class AllAccountsGUI {
public static int currentPage = 0;
public static int totalPages = 0;
public static Inventory openBankAccountsGUI(Player player, int page) {
FileConfiguration config = YamlConfiguration.loadConfiguration(new File(Main.getInstance().getDataFolder() + "/data/bankaccounts.yml"));
ConfigurationSection accountsSection = config.getConfigurationSection("");
Inventory accountsMenu = Bukkit.createInventory(player, 54, "Банковские счета (" + (page + 1) + "/" + totalPages + ")");
if (accountsSection != null) {
List<ItemStack> accountItems = new ArrayList<>();
for (String ownerUUID : accountsSection.getKeys(false)) {
ConfigurationSection ownerSection = accountsSection.getConfigurationSection(ownerUUID);
if (ownerSection != null) {
UUID offlineOwnerUUID = UUID.fromString(ownerUUID);
OfflinePlayer offlineOwner = Bukkit.getOfflinePlayer(offlineOwnerUUID);
String ownerName = offlineOwner.getName();
for (String accountNumber : ownerSection.getKeys(false)) {
String accountPath = ownerUUID + "." + accountNumber;
if (config.isConfigurationSection(accountPath)) {
String accountName = config.getString(accountPath + ".name");
String category = config.getString(accountPath + ".category");
BankAccounts.AccountStatus status = BankAccounts.AccountStatus.valueOf(config.getString(accountPath + ".status"));
Fines fines = new Fines(Integer.parseInt(accountNumber));
int numberOfFines = fines.getNumberOfFines(Integer.parseInt(accountNumber));
String finesL = (numberOfFines > 0) ? ChatColor.RED + "да" : ChatColor.YELLOW + "нет";
Credits credits = new Credits(Integer.parseInt(accountNumber));
int numberOfCredits = credits.getNumberOfCredits(Integer.parseInt(accountNumber));
String creditsL = (numberOfCredits > 0) ? ChatColor.RED + "да" : ChatColor.YELLOW + "нет";
String accountDisplayName = ChatColor.translateAlternateColorCodes('&', "&a► &fСчёт #" + accountNumber);
ItemStack accountItem = createAccountItem(accountDisplayName, accountName, category, status, ownerName, finesL, creditsL);
accountItems.add(accountItem);
addBackGUIItem(accountsMenu);
}
}
}
}
accountItems.sort(new Comparator<ItemStack>() {
@Override
public int compare(ItemStack item1, ItemStack item2) {
String category1 = item1.getItemMeta().getLore().get(2).replace(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Категория: &e"), "");
String category2 = item2.getItemMeta().getLore().get(2).replace(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Категория: &e"), "");
return category1.compareToIgnoreCase(category2);
}
});
int start = page * 45;
int end = Math.min((page + 1) * 45, accountItems.size());
for (int i = start; i < end; i++) {
accountsMenu.addItem(accountItems.get(i));
}
totalPages = calculateTotalPages(accountItems);
if (accountItems.size() > 45) {
addBackItem(accountsMenu, page);
addForwardItem(accountsMenu, page);
}
player.openInventory(accountsMenu);
currentPage = page;
}
return accountsMenu;
}
private static int calculateTotalPages(List<ItemStack> accountItems) {
return (int) Math.ceil((double) accountItems.size() / 45);
}
private static void addBackGUIItem(Inventory menu) {
ItemStack back = new ItemStack(Material.ARROW);
ItemMeta meta_back = back.getItemMeta();
meta_back.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&7Вернуться назад..."));
back.setItemMeta(meta_back);
menu.setItem(45, back);
}
private static void addBackItem(Inventory menu, int page) {
if (page > 0) {
ItemStack back = new ItemStack(Material.ARROW);
ItemMeta meta_back = back.getItemMeta();
meta_back.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&f<---"));
back.setItemMeta(meta_back);
menu.setItem(52, back);
}
}
private static void addForwardItem(Inventory menu, int page) {
if (page < totalPages - 1) {
ItemStack forward = new ItemStack(Material.ARROW);
ItemMeta meta_forward = forward.getItemMeta();
meta_forward.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&f--->"));
forward.setItemMeta(meta_forward);
menu.setItem(53, forward);
}
}
private static ItemStack createAccountItem(String accountDisplayName, String accountName, String category, BankAccounts.AccountStatus status, String ownerName, String finesL, String creditsL) {
Material material;
if (status == BankAccounts.AccountStatus.OPENED) {
material = Material.PAPER;
} else {
material = Material.EMPTY_MAP;
}
ItemStack accountItem = new ItemStack(material);
ItemMeta meta = accountItem.getItemMeta();
String statusL = (status == BankAccounts.AccountStatus.OPENED) ? ChatColor.GREEN + "Открыт" : ChatColor.RED + "Заблокирован";
meta.setDisplayName(accountDisplayName);
List<String> lore = new ArrayList<>();
lore.add("");
lore.add(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Наименование: &e" + accountName));
lore.add(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Категория: &e" + category));
lore.add("");
lore.add(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Наличие кредитов: &r" + creditsL));
lore.add(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Наличие штрафов: &r" + finesL));
lore.add("");
lore.add(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Владелец: &e" + ownerName));
lore.add(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Статус: &r" + statusL));
lore.add("");
lore.add(ChatColor.translateAlternateColorCodes('&', "&a➥ &fЛКМ &eчтобы открыть данный счёт"));
lore.add(ChatColor.translateAlternateColorCodes('&', "&a➥ &fShift + ЛКМ &eчтобы поменять статус"));
meta.setLore(lore);
accountItem.setItemMeta(meta);
return accountItem;
}
}
Последнее редактирование: