Skip to content
This repository was archived by the owner on Apr 30, 2022. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,19 @@
import world.arainu.core.metaverseplugin.commands.CommandiPhone;
import world.arainu.core.metaverseplugin.gui.Gui;
import world.arainu.core.metaverseplugin.gui.MenuItem;
import world.arainu.core.metaverseplugin.iphone.*;
import world.arainu.core.metaverseplugin.listener.*;
import world.arainu.core.metaverseplugin.iphone.Bank;
import world.arainu.core.metaverseplugin.iphone.MoveSurvival;
import world.arainu.core.metaverseplugin.iphone.TrapTower;
import world.arainu.core.metaverseplugin.iphone.Worldteleport;
import world.arainu.core.metaverseplugin.iphone.iPhoneEnderDragon;
import world.arainu.core.metaverseplugin.listener.BankListener;
import world.arainu.core.metaverseplugin.listener.PublicListener;
import world.arainu.core.metaverseplugin.listener.ServerListener;
import world.arainu.core.metaverseplugin.listener.SittingListener;
import world.arainu.core.metaverseplugin.listener.VillagerListener;
import world.arainu.core.metaverseplugin.scheduler.LateScheduler;
import world.arainu.core.metaverseplugin.scheduler.MoneyScheduler;
import world.arainu.core.metaverseplugin.scheduler.SqlScheduler;
import world.arainu.core.metaverseplugin.store.ServerStore;
import world.arainu.core.metaverseplugin.store.iPhoneStore;
import world.arainu.core.metaverseplugin.utils.sqlUtil;
Expand Down Expand Up @@ -70,6 +79,7 @@ public void onEnable() {
private void setScheduler() {
new MoneyScheduler().runTaskTimer(this, 0, 20);
new LateScheduler().runTaskTimer(this, 0, 20);
new SqlScheduler().runTaskTimer(this, 0, 60*60*2);
createStairsYml();
}

Expand Down
42 changes: 36 additions & 6 deletions src/main/java/world/arainu/core/metaverseplugin/iphone/Bank.java
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,11 @@ public static ItemStack getPluginMoneyEmerald(int yen, int quantity) {

/**
* アイテムがお金かどうか確認する関数
*
* @param item 対象のアイテム
* @return お金かどうか
*/
public static boolean isMoney(ItemStack item){
public static boolean isMoney(ItemStack item) {
return item.getItemMeta().getPersistentDataContainer().has(BankStore.getKey(), PersistentDataType.INTEGER);
}

Expand All @@ -76,13 +77,23 @@ public static boolean isMoney(ItemStack item){
* @param yen 換金する額
*/
public static void addMoneyForPlayer(Player player, int yen) {
addMoneyForInventory(player.getInventory(), yen);
}

/**
* 口座のお金を現金に換金する関数。
*
* @param inv 対象のインベントリ
* @param yen 換金する額
*/
public static void addMoneyForInventory(Inventory inv, int yen) {
int log_money = (int) Math.log(yen);
if (log_money > 5) {
log_money = 5;
}
for (int i = log_money; i >= 0; i--) {
ItemStack moneyStack = getPluginMoneyEmerald((int) Math.pow(10, i), (int) (yen / Math.pow(10, i)));
player.getInventory().addItem(moneyStack);
inv.addItem(moneyStack);
yen %= (int) Math.pow(10, i);
}
}
Expand All @@ -94,7 +105,7 @@ private void withdraw_Complete(Player player, String text, Economy econ, AtomicB
throw new NumberFormatException();
} else if (econ.has(player, withdrawal_yen)) {
econ.withdrawPlayer(player, withdrawal_yen);
ChatUtil.success(player,econ.format(withdrawal_yen) + "を正常に引き出しました。");
ChatUtil.success(player, econ.format(withdrawal_yen) + "を正常に引き出しました。");
addMoneyForPlayer(player, withdrawal_yen);
complete_flag.set(true);
} else {
Expand All @@ -112,7 +123,25 @@ private void payment_Complete(Player player, String text, AtomicBoolean complete
throw new NumberFormatException();
} else {
complete_flag.set(true);
Inventory inv = Bukkit.createInventory(null, 9, Component.text("入金したいお金を入れてください。"));
Inventory inv = Bukkit.createInventory(null, 27, Component.text("入金したいお金を入れてください。"));
final ItemStack partition = new ItemStack(Material.BLACK_STAINED_GLASS_PANE);
ItemMeta itemMeta = partition.getItemMeta();
itemMeta.displayName(Component.text(""));
partition.setItemMeta(itemMeta);
for (int i = 0; i < 9; i++) {
inv.setItem(i, partition);
}
final ItemStack price_item = new ItemStack(Material.EMERALD);
itemMeta = price_item.getItemMeta();
itemMeta.displayName(Component.text("必要な金額:" + payment_yen));
itemMeta.lore(Collections.singletonList(Component.text("クリックして入金").color(NamedTextColor.GRAY)));
price_item.setItemMeta(itemMeta);
inv.setItem(4, price_item);
final ItemStack move_all_item = new ItemStack(Material.GOLD_INGOT);
itemMeta = move_all_item.getItemMeta();
itemMeta.displayName(Component.text("全額入金ボックスに移動させる").color(NamedTextColor.GOLD));
move_all_item.setItemMeta(itemMeta);
inv.setItem(8, move_all_item);
player.openInventory(inv);
HashMap<UUID, Integer> gui_hashmap = BankStore.getGui_hashmap();
gui_hashmap.put(player.getUniqueId(), payment_yen);
Expand All @@ -138,7 +167,8 @@ private void remittance_Complete(Player player, String text, Economy econ, Atomi
.responseHandler((form, responseData) -> {
CustomFormResponse response = form.parseResponse(responseData);
if (!response.isCorrect()) ChatUtil.warning(player, "お金の送金を取りやめました。");
else remittance_Complete2(player, econ, remittance_yen, response.getInput(0), complete_flag_);
else
remittance_Complete2(player, econ, remittance_yen, response.getInput(0), complete_flag_);
});
final FloodgatePlayer fPlayer = FloodgateApi.getInstance().getPlayer(player.getUniqueId());
fPlayer.sendForm(builder);
Expand Down Expand Up @@ -170,7 +200,7 @@ private void remittance_Complete2(Player player, Economy econ, int remittance_ye
if (econ.hasAccount(player_)) {
econ.withdrawPlayer(player, remittance_yen);
econ.depositPlayer(player_, remittance_yen);
ChatUtil.success(player,econ.format(remittance_yen) + "を" + player_.getName() + "に送金しました。");
ChatUtil.success(player, econ.format(remittance_yen) + "を" + player_.getName() + "に送金しました。");
if (player_.isOnline()) {
final Player player_online = (Player) player_;
ChatUtil.success(player_online, (TextComponent) player.displayName()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package world.arainu.core.metaverseplugin.listener;

import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.Bukkit;
import org.bukkit.Material;
Expand All @@ -14,76 +16,108 @@
import org.bukkit.inventory.CraftingInventory;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.persistence.PersistentDataContainer;
import org.bukkit.persistence.PersistentDataType;
import org.bukkit.inventory.meta.ItemMeta;
import world.arainu.core.metaverseplugin.MetaversePlugin;
import world.arainu.core.metaverseplugin.iphone.Bank;
import world.arainu.core.metaverseplugin.store.BankStore;
import world.arainu.core.metaverseplugin.utils.BankNotice;
import world.arainu.core.metaverseplugin.utils.ChatUtil;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
import java.util.UUID;

/**
* 銀行に関するイベントをハンドリングしているクラス
*
* @author kumitatepazuru
*/
public class BankListener implements Listener {
/**
* インベントリをクリックしたときに発火する関数
*
* @param e イベント
*/
@EventHandler
public void onInventoryClick(InventoryClickEvent e) {
Player p = (Player) e.getWhoClicked();
HashMap<UUID, Integer> gui_hashmap = BankStore.getGui_hashmap();
if (BankStore.getGui_hashmap().containsKey(p.getUniqueId())) {
Bukkit.getScheduler().runTaskLater(MetaversePlugin.getInstance(), () -> {
Inventory inv = e.getInventory();
List<ItemStack> money_list = new ArrayList<>(inv.all(Material.EMERALD).values());
int total_money = 0;
for (ItemStack i : money_list) {
if (Bank.isMoney(i)) {
final PersistentDataContainer persistentDataContainer = i.getItemMeta().getPersistentDataContainer();
total_money += persistentDataContainer.get(BankStore.getKey(), PersistentDataType.INTEGER) * i.getAmount();
final int id = e.getRawSlot();
Inventory inv = e.getInventory();
switch (id) {
case 4 -> {
e.setCancelled(true);
Bukkit.getScheduler().runTaskLater(MetaversePlugin.getInstance(), () -> {
final VillagerListener.ReturnMoney money = VillagerListener.getTotalmoney(inv);
final int total_money = money.getTotal_money();
int required_money = Objects.requireNonNull(BankStore.getGui_hashmap().get(p.getUniqueId()));
if (total_money >= required_money) {
final Economy econ = MetaversePlugin.getEcon();
Bank.addMoneyForPlayer(p, total_money - required_money);
econ.depositPlayer(p, required_money);
ChatUtil.success(p, econ.format(required_money) + "を正常に入金しました。");
gui_hashmap.remove(p.getUniqueId());
BankStore.setGui_hashmap(gui_hashmap);
inv.clear();
inv.close();
}
}, 1L);
}
case 8 -> {
e.setCancelled(true);
final Inventory player_inv = e.getWhoClicked().getInventory();
final VillagerListener.ReturnMoney returnMoney = VillagerListener.getTotalmoney(player_inv);
for (ItemStack i : returnMoney.getMoney_list()) {
if (Bank.isMoney(i)) {
player_inv.remove(i);
}
}
Bank.addMoneyForInventory(inv, returnMoney.getTotal_money());
}
default -> {
if (id < 9) e.setCancelled(true);
}
try {
}
if (id != 4) {
Bukkit.getScheduler().runTaskLater(MetaversePlugin.getInstance(), () -> {
VillagerListener.ReturnMoney money = VillagerListener.getTotalmoney(inv);
int total = money.getTotal_money();
int required_money = Objects.requireNonNull(BankStore.getGui_hashmap().get(p.getUniqueId()));
if (total_money >= required_money) {
final Economy econ = MetaversePlugin.getEcon();
Bank.addMoneyForPlayer(p, total_money - required_money);
econ.depositPlayer(p, required_money);
ChatUtil.success(p,econ.format(required_money) + "を正常に入金しました。");
gui_hashmap.remove(p.getUniqueId());
BankStore.setGui_hashmap(gui_hashmap);
inv.clear();
inv.close();
final ItemStack priceItem = Objects.requireNonNull(inv.getItem(4));
final ItemMeta itemMeta = priceItem.getItemMeta();
if (required_money > total) {
itemMeta.lore(Arrays.asList(
Component.text("クリックして入金").color(NamedTextColor.GRAY),
Component.text(MetaversePlugin.getEcon().format(required_money - total) + "不足しています").color(NamedTextColor.RED)
));
} else {
itemMeta.lore(List.of(Component.text("クリックして入金").color(NamedTextColor.GREEN)));
}
} catch (NullPointerException ignored){
}
}, 1L);
priceItem.setItemMeta(itemMeta);
}, 1);
}
}
}

/**
* GUIを閉じたときに発火する関数
*
* @param e イベント
*/
@EventHandler
public void onInventoryClose(InventoryCloseEvent e) {
Player p = (Player) e.getPlayer();
if (BankStore.getGui_hashmap().containsKey(p.getUniqueId())) {
ChatUtil.warning(p,"お金の入金を取りやめました。");
ChatUtil.warning(p, "お金の入金を取りやめました。");
HashMap<UUID, Integer> gui_hashmap = BankStore.getGui_hashmap();

Inventory oldInv = e.getInventory();
List<ItemStack> items = new ArrayList<>();
for (int i = 0, size = oldInv.getSize(); i < size; i++) {
for (int i = 9, size = oldInv.getSize(); i < size; i++) {
ItemStack item = oldInv.getItem(i);
if (item == null) {
continue;
Expand All @@ -104,44 +138,47 @@ public void onInventoryClose(InventoryCloseEvent e) {

/**
* プレイヤーがログインしてきたとき発火する関数
*
* @param e イベント
*/
@EventHandler
public void onPlayerJoin(PlayerJoinEvent e){
public void onPlayerJoin(PlayerJoinEvent e) {
Economy econ = MetaversePlugin.getEcon();

if (BankStore.getRemittance_map().containsKey(e.getPlayer().getUniqueId())){
if (BankStore.getRemittance_map().containsKey(e.getPlayer().getUniqueId())) {
List<BankNotice> remittance = BankStore.getRemittance_map().get(e.getPlayer().getUniqueId());
for(BankNotice i : remittance){
ChatUtil.success(e.getPlayer(),i.getPlayerUID() + "があなたへ" + i.getFormatedMoney() + "送金しました。\n所持金は" + econ.format(econ.getBalance(e.getPlayer())) + "です。");
for (BankNotice i : remittance) {
ChatUtil.success(e.getPlayer(), i.getPlayerUID() + "があなたへ" + i.getFormatedMoney() + "送金しました。\n所持金は" + econ.format(econ.getBalance(e.getPlayer())) + "です。");
}
}
HashMap<UUID,Long> login_money_map = BankStore.getLogin_money_map();
login_money_map.put(e.getPlayer().getUniqueId(),System.currentTimeMillis() / 1000);
HashMap<UUID, Long> login_money_map = BankStore.getLogin_money_map();
login_money_map.put(e.getPlayer().getUniqueId(), System.currentTimeMillis() / 1000);
BankStore.setLogin_money_map(login_money_map);
}

/**
* プレイヤーが退出したときに発火する関数
*
* @param e イベント
*/
@EventHandler
public void onPlayerQuit(PlayerQuitEvent e){
HashMap<UUID,Long> login_money_map = BankStore.getLogin_money_map();
public void onPlayerQuit(PlayerQuitEvent e) {
HashMap<UUID, Long> login_money_map = BankStore.getLogin_money_map();
login_money_map.remove(e.getPlayer().getUniqueId());
BankStore.setLogin_money_map(login_money_map);
}

/**
* プレイヤーがクラフトしたときに発火する関数。通貨でエメラルドブロックを作成できなくする
*
* @param e イベント
*/
@EventHandler
public void onPrepareItemCraft(PrepareItemCraftEvent e){
public void onPrepareItemCraft(PrepareItemCraftEvent e) {
CraftingInventory inv = e.getInventory();
if(Objects.equals(inv.getResult(), new ItemStack(Material.EMERALD_BLOCK))){
for (ItemStack item :inv){
if(Bank.isMoney(item))
if (Objects.equals(inv.getResult(), new ItemStack(Material.EMERALD_BLOCK))) {
for (ItemStack item : inv) {
if (Bank.isMoney(item))
inv.setResult(new ItemStack(Material.AIR));
}
}
Expand Down
Loading