package com.bodya.rpbank;
import com.bodya.rpbank.Balance.Deposit;
import com.bodya.rpbank.Balance.Score;
import com.bodya.rpbank.Events.CreateScore;
import me.clip.placeholderapi.PlaceholderAPI;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
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.player.AsyncPlayerChatEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;
import java.util.*;
public class Menu extends BukkitRunnable implements Listener {
public Menu(JavaPlugin plugin) { // в конструкторе передаёшь главный класс плагина
this.runTaskTimer(plugin, 0, 20); // запускаем таймер на каждый 20 тиков (1 секунда)
}
private Map<UUID, Long> players = new HashMap<UUID, Long>();
private final Main plugin = Main.getInstance();
private static Inventory menu;
public Menu(Player p) {
menu = Bukkit.createInventory(null, 9, "Банковская система");
Deposit deposit = new Deposit(p.getName());
Score score = new Score(p.getName());
CreateScore scorenum = new CreateScore(p.getName());
ItemStack take_money = new ItemStack(Material.YELLOW_STAINED_GLASS_PANE);
ItemStack head_info = new ItemStack(Material.PLAYER_HEAD);
ItemStack give_money = new ItemStack(Material.BLUE_STAINED_GLASS_PANE);
ItemMeta meta_take_money = take_money.getItemMeta();
ItemMeta meta_head_info = head_info.getItemMeta();
ItemMeta meta_give_money = give_money.getItemMeta();
meta_take_money.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&a► &fБанковский депозит"));
meta_head_info.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&a► &fБанковский аккаунт"));
meta_give_money.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&a► &fОсновной счёт"));
List<String> lore_take_money = new ArrayList();
lore_take_money.add("");
lore_take_money.add(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Баланс: &e" + deposit.getDepositBalance() + "$"));
lore_take_money.add(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Получайте &eпроцент &fпо вкладу."));
lore_take_money.add("");
lore_take_money.add(ChatColor.translateAlternateColorCodes('&', "&a➥ &fЛКМ &eдля снятия"));
lore_take_money.add(ChatColor.translateAlternateColorCodes('&', "&a➥ &fПКМ &eдля пополнения"));
meta_take_money.setLore(lore_take_money);
List<String> lore_head_info = new ArrayList();
int allbalance = deposit.getDepositBalance() + score.getScoreBalance();
lore_head_info.add("");
lore_head_info.add(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Гражданин: &e" + PlaceholderAPI.setPlaceholders(p, "%pass_name%")));
lore_head_info.add(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Общий баланс: &e" + allbalance + "$"));
lore_head_info.add("");
lore_head_info.add(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Номер счёта: &e" + scorenum.getScore() + ""));
meta_head_info.setLore(lore_head_info);
List<String> lore_give_money = new ArrayList();
String formattedScoreBalance = String.format(Locale.CANADA, "%,d", score.getScoreBalance());
lore_give_money.add("");
lore_give_money.add(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Баланс: &e" + formattedScoreBalance + "$"));
lore_give_money.add(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Получайте &eзарплату&7."));
lore_give_money.add(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Получайте &eплатежи &7от граждан."));
lore_give_money.add("");
lore_give_money.add(ChatColor.translateAlternateColorCodes('&', "&a➥ &fЛКМ &eдля снятия"));
lore_give_money.add(ChatColor.translateAlternateColorCodes('&', "&a➥ &fСКМ &eдля перевода"));
lore_give_money.add(ChatColor.translateAlternateColorCodes('&', "&a➥ &fПКМ &eдля пополнения"));
meta_give_money.setLore(lore_give_money);
take_money.setItemMeta(meta_take_money);
head_info.setItemMeta(meta_head_info);
give_money.setItemMeta(meta_give_money);
menu.setItem(2, take_money);
menu.setItem(4, head_info);
menu.setItem(6, give_money);
p.openInventory(menu);
}
public Menu(Main main) {
}
public static void buildMenu() {
}
@EventHandler
public void onInventoryClick(InventoryClickEvent e) {
Player p = (Player) e.getWhoClicked();
if (menu.getViewers().contains(e.getWhoClicked())) {
if (p.getInventory().getHolder().equals(e.getWhoClicked())) {
e.setCancelled(true);
}
}
if (e.getClickedInventory().equals(menu)) {
switch (e.getCurrentItem().getType()) {
case YELLOW_STAINED_GLASS_PANE:
if (e.getClick() == ClickType.LEFT) {
if (players.containsKey(p.getUniqueId())) { // проверка, если игрок есть в мап, то пишем ему что надо ответить на сообщение
p.closeInventory();
p.sendMessage("Вы не ответили на предыдущее сообщение");
return;
} else {
players.put(p.getUniqueId(), System.currentTimeMillis() + 10000); // добавляем игрока по ключу и системная миллисекунда + 10 секунд
p.closeInventory();
p.sendMessage(ChatColor.translateAlternateColorCodes('&', Main.plugin.getConfig().getString("messages.take_deposit")));
}
} else if (e.getClick() == ClickType.RIGHT) {
p.sendMessage(ChatColor.translateAlternateColorCodes('&', Main.plugin.getConfig().getString("messages.give_deposit")));
} else {
break;
}
p.closeInventory();
case PLAYER_HEAD:
if (e.getClick() == ClickType.LEFT) {
}
break;
case BLUE_STAINED_GLASS_PANE:
if (e.getClick() == ClickType.LEFT) {
p.sendMessage(ChatColor.translateAlternateColorCodes('&', Main.plugin.getConfig().getString("messages.take_score")));
} else if (e.getClick() == ClickType.MIDDLE) {
p.sendMessage(ChatColor.translateAlternateColorCodes('&', Main.plugin.getConfig().getString("messages.translate_score")));
} else if (e.getClick() == ClickType.RIGHT) {
p.sendMessage(ChatColor.translateAlternateColorCodes('&', Main.plugin.getConfig().getString("messages.give_score")));
} else {
break;
}
p.closeInventory();
}
}
}
@EventHandler
public void onChat(AsyncPlayerChatEvent event) {
Player player = event.getPlayer();
String message = event.getMessage();
if (!players.containsKey(player.getUniqueId())) { // проверка, если игрока нет в мап, то назад
return;
}
player.sendMessage("test");
for (UUID uuid : players.keySet()) { // проходим по всем ключам
players.remove(uuid); // удаление по ключу
// тут выполняешь нужное действие, message - сообщение игрока
}
}
@Override
public void run() {
for (UUID uuid : players.keySet()) { // проходим по всем ключам
if (System.currentTimeMillis() >= players.get(uuid)) { // проверяем, если текущая системная миллисекунда больше значения в мап, то удаляем
players.remove(uuid); // удаление по ключу
}
}
}
}