diff --git a/src/main/java/world/arainu/core/metaverseplugin/MetaversePlugin.java b/src/main/java/world/arainu/core/metaverseplugin/MetaversePlugin.java index c935606..a6fb17d 100644 --- a/src/main/java/world/arainu/core/metaverseplugin/MetaversePlugin.java +++ b/src/main/java/world/arainu/core/metaverseplugin/MetaversePlugin.java @@ -18,11 +18,12 @@ import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.java.JavaPlugin; +//import org.dynmap.DynmapAPI; import org.jetbrains.annotations.NotNull; import world.arainu.core.metaverseplugin.commands.CommandBase; import world.arainu.core.metaverseplugin.commands.CommandSpawn; -import world.arainu.core.metaverseplugin.commands.CommandiPhone; import world.arainu.core.metaverseplugin.commands.CommandWhitelist; +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.Bank; @@ -37,6 +38,7 @@ 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; @@ -58,6 +60,7 @@ public final class MetaversePlugin extends JavaPlugin { private static MetaversePlugin Instance; @Getter private static FileConfiguration configuration; + // @Getter private static DynmapAPI dynmap; private final HashMap commands = new HashMap<>(); @Override @@ -78,10 +81,12 @@ public void onEnable() { private void setScheduler() { new MoneyScheduler().runTaskTimer(this, 0, 20); new LateScheduler().runTaskTimer(this, 0, 20); + new SqlScheduler().runTaskTimer(this, 0, 20 * 60 * 60); createStairsYml(); } private void EnablePlugins() { +// dynmap = (DynmapAPI) getServer().getPluginManager().getPlugin("Dynmap"); if (!setupEconomy()) { getLogger().severe(String.format("[%s] - Vaultが依存する経済プラグインがなかったためメタバースプラグインを無効にしました!!!", getDescription().getName())); getServer().getPluginManager().disablePlugin(this); @@ -122,7 +127,7 @@ private void loadGuis() { traptowerItem.setItemMeta(traptowerMeta); iPhoneStore.addGuiItem(new MenuItem("トラップタワーに行く", new TrapTower()::executeGui, true, traptowerItem), (p) -> !p.getWorld().getName().equals(configuration.getString("world.traptower")) && Objects.equals(ServerStore.getServerName(), "survival")); iPhoneStore.addGuiItem(new MenuItem("サバイバルサーバーに戻る", new MoveSurvival()::executeGui, true, Material.GRASS_BLOCK), (p) -> p.getWorld().getName().equals(configuration.getString("world.traptower"))); - iPhoneStore.addGuiItem(new MenuItem("エンドラを復活させる", new iPhoneEnderDragon()::executeGui, true, Material.END_STONE), (p) -> Gui.isEnderDragonDead(p) && Gui.isPlayerInEnd(p)); + iPhoneStore.addGuiItem(new MenuItem("エンドラを復活させる", new iPhoneEnderDragon()::executeGui, true, Material.END_STONE), (p) -> !Gui.isEnderDragonLiving(p) && Gui.isPlayerInEnd(p)); } /** @@ -136,13 +141,14 @@ public void setListener() { PM.registerEvents(Gui.getInstance(), this); PM.registerEvents(new PublicListener(), this); PM.registerEvents(new VillagerListener(), this); - this.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord"); + PM.registerEvents(new CommandWhitelist(), this); DiscordSRV.api.subscribe(this); } /** * JDAがログインできてReadyになったときにServerListenerを定義する * ぬるぽ対策 + * * @param event イベント */ @Subscribe @@ -174,11 +180,10 @@ private void addCommand(String commandName, CommandBase command) { */ private void loadCommands() { commands.clear(); - addCommand("worldtp", new Worldteleport()); addCommand("iphone", new CommandiPhone()); addCommand("spawn", new CommandSpawn()); - addCommand("whitelist",new CommandWhitelist()); + addCommand("whitelist", new CommandWhitelist()); } @Override diff --git a/src/main/java/world/arainu/core/metaverseplugin/commands/CommandSpawn.java b/src/main/java/world/arainu/core/metaverseplugin/commands/CommandSpawn.java index 0a98742..9c46a61 100644 --- a/src/main/java/world/arainu/core/metaverseplugin/commands/CommandSpawn.java +++ b/src/main/java/world/arainu/core/metaverseplugin/commands/CommandSpawn.java @@ -123,21 +123,12 @@ public boolean execute(Player player, Command command, String label, String[] ar recipes.add(createRecipe(1, 5, new ItemStack(Material.STONE_BRICKS))); recipes.add(createRecipe(1, 5, new ItemStack(Material.CRACKED_STONE_BRICKS))); recipes.add(createRecipe(1, 5, new ItemStack(Material.CHISELED_STONE_BRICKS))); - recipes.add(createRecipe(1, 5, new ItemStack(Material.GRAVEL))); recipes.add(createRecipe(1, 10, new ItemStack(Material.GRANITE))); recipes.add(createRecipe(1, 10, new ItemStack(Material.POLISHED_GRANITE))); recipes.add(createRecipe(1, 10, new ItemStack(Material.DIORITE))); recipes.add(createRecipe(1, 10, new ItemStack(Material.POLISHED_DIORITE))); recipes.add(createRecipe(1, 10, new ItemStack(Material.ANDESITE))); recipes.add(createRecipe(1, 10, new ItemStack(Material.POLISHED_ANDESITE))); - recipes.add(createRecipe(1, 5, new ItemStack(Material.SANDSTONE))); - recipes.add(createRecipe(1, 5, new ItemStack(Material.CUT_SANDSTONE))); - recipes.add(createRecipe(1, 5, new ItemStack(Material.CHISELED_SANDSTONE))); - recipes.add(createRecipe(1, 5, new ItemStack(Material.SMOOTH_SANDSTONE))); - recipes.add(createRecipe(1, 5, new ItemStack(Material.RED_SANDSTONE))); - recipes.add(createRecipe(1, 5, new ItemStack(Material.CUT_RED_SANDSTONE))); - recipes.add(createRecipe(1, 5, new ItemStack(Material.CHISELED_RED_SANDSTONE))); - recipes.add(createRecipe(1, 5, new ItemStack(Material.SMOOTH_RED_SANDSTONE))); recipes.add(createRecipe(1, 40, new ItemStack(Material.END_STONE))); recipes.add(createRecipe(1, 40, new ItemStack(Material.END_STONE_BRICKS))); recipes.add(createRecipe(1, 50, new ItemStack(Material.OBSIDIAN))); @@ -185,21 +176,12 @@ public boolean execute(Player player, Command command, String label, String[] ar recipes.add(createRecipe2(1, 5, new ItemStack(Material.STONE_BRICKS))); recipes.add(createRecipe2(1, 5, new ItemStack(Material.CRACKED_STONE_BRICKS))); recipes.add(createRecipe2(1, 5, new ItemStack(Material.CHISELED_STONE_BRICKS))); - recipes.add(createRecipe2(1, 5, new ItemStack(Material.GRAVEL))); recipes.add(createRecipe2(1, 10, new ItemStack(Material.GRANITE))); recipes.add(createRecipe2(1, 10, new ItemStack(Material.POLISHED_GRANITE))); recipes.add(createRecipe2(1, 10, new ItemStack(Material.DIORITE))); recipes.add(createRecipe2(1, 10, new ItemStack(Material.POLISHED_DIORITE))); recipes.add(createRecipe2(1, 10, new ItemStack(Material.ANDESITE))); recipes.add(createRecipe2(1, 10, new ItemStack(Material.POLISHED_ANDESITE))); - recipes.add(createRecipe2(1, 5, new ItemStack(Material.SANDSTONE))); - recipes.add(createRecipe2(1, 5, new ItemStack(Material.CUT_SANDSTONE))); - recipes.add(createRecipe2(1, 5, new ItemStack(Material.CHISELED_SANDSTONE))); - recipes.add(createRecipe2(1, 5, new ItemStack(Material.SMOOTH_SANDSTONE))); - recipes.add(createRecipe2(1, 5, new ItemStack(Material.RED_SANDSTONE))); - recipes.add(createRecipe2(1, 5, new ItemStack(Material.CUT_RED_SANDSTONE))); - recipes.add(createRecipe2(1, 5, new ItemStack(Material.CHISELED_RED_SANDSTONE))); - recipes.add(createRecipe2(1, 5, new ItemStack(Material.SMOOTH_RED_SANDSTONE))); recipes.add(createRecipe2(1, 40, new ItemStack(Material.END_STONE))); recipes.add(createRecipe2(1, 40, new ItemStack(Material.END_STONE_BRICKS))); recipes.add(createRecipe2(1, 50, new ItemStack(Material.OBSIDIAN))); @@ -236,22 +218,68 @@ public boolean execute(Player player, Command command, String label, String[] ar recipes.add(createRecipe2(1, 5, new ItemStack(Material.POINTED_DRIPSTONE))); villager.setRecipes(recipes); } - case "money-villager" -> { - Villager villager = createVillager("両替店員", Villager.Profession.TOOLSMITH, player); + case "mob-villager" -> { + Villager villager = createVillager("モブ店員", Villager.Profession.FARMER, player); + sqlUtil.setuuidtype(villager.getUniqueId(), args[0]); + List recipes = new ArrayList<>(); + recipes.add(createRecipe2(1000, 5, new ItemStack(Material.AXOLOTL_SPAWN_EGG))); + recipes.add(createRecipe2(500, 5, new ItemStack(Material.BEE_SPAWN_EGG))); + recipes.add(createRecipe2(500, 5, new ItemStack(Material.CAT_SPAWN_EGG))); + recipes.add(createRecipe2(150, 5, new ItemStack(Material.CHICKEN_SPAWN_EGG))); + recipes.add(createRecipe2(150, 5, new ItemStack(Material.COD_SPAWN_EGG))); + recipes.add(createRecipe2(150, 5, new ItemStack(Material.COW_SPAWN_EGG))); + recipes.add(createRecipe2(1000, 5, new ItemStack(Material.DOLPHIN_SPAWN_EGG))); + recipes.add(createRecipe2(1000, 5, new ItemStack(Material.DONKEY_SPAWN_EGG))); + recipes.add(createRecipe2(500, 5, new ItemStack(Material.FOX_SPAWN_EGG))); + recipes.add(createRecipe2(1000, 5, new ItemStack(Material.HORSE_SPAWN_EGG))); + recipes.add(createRecipe2(1000, 5, new ItemStack(Material.LLAMA_SPAWN_EGG))); + recipes.add(createRecipe2(500, 5, new ItemStack(Material.OCELOT_SPAWN_EGG))); + recipes.add(createRecipe2(1000, 5, new ItemStack(Material.PARROT_SPAWN_EGG))); + recipes.add(createRecipe2(500, 5, new ItemStack(Material.PANDA_SPAWN_EGG))); + recipes.add(createRecipe2(150, 5, new ItemStack(Material.PIG_SPAWN_EGG))); + recipes.add(createRecipe2(500, 5, new ItemStack(Material.POLAR_BEAR_SPAWN_EGG))); + recipes.add(createRecipe2(200, 5, new ItemStack(Material.PUFFERFISH_SPAWN_EGG))); + recipes.add(createRecipe2(500, 5, new ItemStack(Material.RABBIT_SPAWN_EGG))); + recipes.add(createRecipe2(150, 5, new ItemStack(Material.SALMON_SPAWN_EGG))); + recipes.add(createRecipe2(150, 5, new ItemStack(Material.SHEEP_SPAWN_EGG))); + recipes.add(createRecipe2(1000, 5, new ItemStack(Material.SKELETON_HORSE_SPAWN_EGG))); + recipes.add(createRecipe2(150, 5, new ItemStack(Material.SQUID_SPAWN_EGG))); + recipes.add(createRecipe2(1000, 5, new ItemStack(Material.STRIDER_SPAWN_EGG))); + recipes.add(createRecipe2(200, 5, new ItemStack(Material.TROPICAL_FISH_SPAWN_EGG))); + recipes.add(createRecipe2(300, 5, new ItemStack(Material.TURTLE_SPAWN_EGG))); + recipes.add(createRecipe2(500, 5, new ItemStack(Material.WOLF_SPAWN_EGG))); + recipes.add(createRecipe2(1000, 5, new ItemStack(Material.ZOMBIE_HORSE_SPAWN_EGG))); + villager.setRecipes(recipes); + + } + case "sandstone-villager" -> { + Villager villager = createVillager("砂岩砂利店員", Villager.Profession.MASON, player); sqlUtil.setuuidtype(villager.getUniqueId(), args[0]); List recipes = new ArrayList<>(); - recipes.add(createRecipe2(1, 5, Bank.getPluginMoneyEmerald(5,1))); - recipes.add(createRecipe2(5, 2, Bank.getPluginMoneyEmerald(10,1))); - recipes.add(createRecipe2(10, 5, Bank.getPluginMoneyEmerald(50,1))); - recipes.add(createRecipe2(50, 2, Bank.getPluginMoneyEmerald(100,1))); - recipes.add(createRecipe2(100, 5, Bank.getPluginMoneyEmerald(500,1))); - recipes.add(createRecipe2(500,2 , Bank.getPluginMoneyEmerald(1000,1))); - recipes.add(createRecipe(1, 5, Bank.getPluginMoneyEmerald(5,1))); - recipes.add(createRecipe(5, 2, Bank.getPluginMoneyEmerald(10,1))); - recipes.add(createRecipe(10, 5, Bank.getPluginMoneyEmerald(50,1))); - recipes.add(createRecipe(50, 2, Bank.getPluginMoneyEmerald(100,1))); - recipes.add(createRecipe(100, 5, Bank.getPluginMoneyEmerald(500,1))); - recipes.add(createRecipe(500,2 , Bank.getPluginMoneyEmerald(1000,1))); + recipes.add(createRecipe(1, 5, new ItemStack(Material.GRAVEL))); + recipes.add(createRecipe(1, 5, new ItemStack(Material.SANDSTONE))); + recipes.add(createRecipe(1, 5, new ItemStack(Material.CUT_SANDSTONE))); + recipes.add(createRecipe(1, 5, new ItemStack(Material.CHISELED_SANDSTONE))); + recipes.add(createRecipe(1, 5, new ItemStack(Material.SMOOTH_SANDSTONE))); + recipes.add(createRecipe(1, 5, new ItemStack(Material.RED_SANDSTONE))); + recipes.add(createRecipe(1, 5, new ItemStack(Material.CUT_RED_SANDSTONE))); + recipes.add(createRecipe(1, 5, new ItemStack(Material.CHISELED_RED_SANDSTONE))); + recipes.add(createRecipe(1, 5, new ItemStack(Material.SMOOTH_RED_SANDSTONE))); + villager.setRecipes(recipes); + } + case "sandstone-villager-shop" -> { + Villager villager = createVillager("お金店員(砂岩系&砂利)", Villager.Profession.MASON, player); + sqlUtil.setuuidtype(villager.getUniqueId(), args[0]); + List recipes = new ArrayList<>(); + recipes.add(createRecipe2(1, 5, new ItemStack(Material.GRAVEL))); + recipes.add(createRecipe2(1, 5, new ItemStack(Material.SANDSTONE))); + recipes.add(createRecipe2(1, 5, new ItemStack(Material.CUT_SANDSTONE))); + recipes.add(createRecipe2(1, 5, new ItemStack(Material.CHISELED_SANDSTONE))); + recipes.add(createRecipe2(1, 5, new ItemStack(Material.SMOOTH_SANDSTONE))); + recipes.add(createRecipe2(1, 5, new ItemStack(Material.RED_SANDSTONE))); + recipes.add(createRecipe2(1, 5, new ItemStack(Material.CUT_RED_SANDSTONE))); + recipes.add(createRecipe2(1, 5, new ItemStack(Material.CHISELED_RED_SANDSTONE))); + recipes.add(createRecipe2(1, 5, new ItemStack(Material.SMOOTH_RED_SANDSTONE))); villager.setRecipes(recipes); } default -> { @@ -267,6 +295,6 @@ public boolean execute(Player player, Command command, String label, String[] ar @Override public List onTabComplete(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String label, String[] args) { - return List.of("mason-villager", "stone-villager", "mason-villager-shop", "stone-villager-shop", "money-villager"); + return List.of("mason-villager", "stone-villager", "mason-villager-shop", "stone-villager-shop", "mob-villager"); } } diff --git a/src/main/java/world/arainu/core/metaverseplugin/commands/CommandWhitelist.java b/src/main/java/world/arainu/core/metaverseplugin/commands/CommandWhitelist.java index abba0d0..ede8447 100644 --- a/src/main/java/world/arainu/core/metaverseplugin/commands/CommandWhitelist.java +++ b/src/main/java/world/arainu/core/metaverseplugin/commands/CommandWhitelist.java @@ -1,22 +1,15 @@ package world.arainu.core.metaverseplugin.commands; -import com.destroystokyo.paper.profile.PlayerProfile; -import me.leoko.advancedban.manager.PunishmentManager; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; -import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerPreLoginEvent; import org.jetbrains.annotations.NotNull; import world.arainu.core.metaverseplugin.utils.ChatUtil; import world.arainu.core.metaverseplugin.utils.sqlUtil; import java.util.List; -import java.util.Objects; import java.util.UUID; @@ -71,7 +64,11 @@ public boolean execute(CommandSender sender, Command command, String label, Stri assert whitelist != null; for (UUID uuid : whitelist) { //プレイヤーを表示する際にうるさくならないようにplaysoundをfalseに - ChatUtil.success(sender, Bukkit.getOfflinePlayer(uuid).getName(), false); + String name = Bukkit.getOfflinePlayer(uuid).getName(); + if(name == null){ + name = uuid.toString(); + } + ChatUtil.success(sender, name, false); } ChatUtil.success(sender, "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━", false); } else { diff --git a/src/main/java/world/arainu/core/metaverseplugin/gui/Gui.java b/src/main/java/world/arainu/core/metaverseplugin/gui/Gui.java index e37c61c..9e4faf5 100644 --- a/src/main/java/world/arainu/core/metaverseplugin/gui/Gui.java +++ b/src/main/java/world/arainu/core/metaverseplugin/gui/Gui.java @@ -1,17 +1,16 @@ package world.arainu.core.metaverseplugin.gui; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.TextDecoration; -import org.bukkit.*; import net.kyori.adventure.text.TextComponent; -import net.kyori.adventure.text.TranslatableComponent; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.Sound; import org.bukkit.SoundCategory; +import org.bukkit.World; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.EnderDragon; import org.bukkit.entity.HumanEntity; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -29,7 +28,7 @@ import java.util.Collection; import java.util.Comparator; import java.util.HashMap; -import java.util.concurrent.atomic.AtomicBoolean; +import java.util.List; import java.util.Objects; import java.util.function.Consumer; @@ -118,7 +117,8 @@ public void onInventoryClose(InventoryCloseEvent e) { private void openMenuJavaImpl(Player player, String title, MenuItem[] items) { Integer max = Arrays.stream(items).map(MenuItem::getY).max(Comparator.naturalOrder()).orElse(0); - final Inventory inv = Bukkit.createInventory(null, Math.max(1 + items.length / 9, max) * 9, Component.text(title)); + final int size = Math.max(1 + (items.length-1) / 9, max) * 9; + final Inventory inv = Bukkit.createInventory(null, size, Component.text(title)); final HashMap itemmap = new HashMap<>(); final int[] count = {0}; @@ -208,16 +208,11 @@ public static boolean isPlayerInEnd(Player player) { * @return エンドラが死んでる場合はtrue */ - public static boolean isEnderDragonDead(Player player) { - if (isPlayerInEnd(player)) { - AtomicBoolean alive = new AtomicBoolean(false); - player.getWorld().getLivingEntities().forEach((livingEntity -> { - alive.set(livingEntity instanceof EnderDragon); - })); - return alive.get(); - } else { - return false; - } + public static boolean isEnderDragonLiving(Player player) { + List entity = player.getWorld().getLivingEntities(); + for (LivingEntity i : entity) { + if (i instanceof EnderDragon) return true; + } return false; } private final HashMap> invMap = new HashMap<>(); diff --git a/src/main/java/world/arainu/core/metaverseplugin/iphone/Bank.java b/src/main/java/world/arainu/core/metaverseplugin/iphone/Bank.java index e46ea43..dcb438d 100644 --- a/src/main/java/world/arainu/core/metaverseplugin/iphone/Bank.java +++ b/src/main/java/world/arainu/core/metaverseplugin/iphone/Bank.java @@ -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); } @@ -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); } } @@ -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 { @@ -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 gui_hashmap = BankStore.getGui_hashmap(); gui_hashmap.put(player.getUniqueId(), payment_yen); @@ -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); @@ -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() diff --git a/src/main/java/world/arainu/core/metaverseplugin/iphone/iPhoneEnderDragon.java b/src/main/java/world/arainu/core/metaverseplugin/iphone/iPhoneEnderDragon.java index 7e93c1d..65b5a31 100644 --- a/src/main/java/world/arainu/core/metaverseplugin/iphone/iPhoneEnderDragon.java +++ b/src/main/java/world/arainu/core/metaverseplugin/iphone/iPhoneEnderDragon.java @@ -1,7 +1,12 @@ package world.arainu.core.metaverseplugin.iphone; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.World; +import org.bukkit.boss.DragonBattle; import org.bukkit.entity.EnderDragon; +import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import world.arainu.core.metaverseplugin.gui.MenuItem; @@ -16,34 +21,21 @@ */ public class iPhoneEnderDragon extends iPhoneBase { - - public static boolean ALIVE = false; - /** * エンドラを復活させる関数 * @param player プレイヤー */ public static void reviveDragon(Player player) { World world = player.getWorld(); - if (world.getEnvironment() == World.Environment.THE_END) { - - for (LivingEntity entity : world.getLivingEntities()) { - if (entity instanceof EnderDragon) { - ALIVE = true; - break; - } - } - - if (ALIVE) { - Objects.requireNonNull(world.getEnderDragonBattle()).initiateRespawn(); - ChatUtil.success(player, "エンダードラゴンを復活させました!"); - } else { - ChatUtil.warning(player, "まだエンドラは生きています"); - } - - } else { - ChatUtil.warning(player, "あなたはエンドにいません!"); - } + DragonBattle db = Objects.requireNonNull(world.getEnderDragonBattle()); + final Location portalLocation = Objects.requireNonNull(db.getEndPortalLocation()); + Bukkit.getLogger().info(String.valueOf(portalLocation)); + world.spawnEntity(new Location(world, 0.5,portalLocation.getBlockY()+1,3.5), EntityType.ENDER_CRYSTAL); + world.spawnEntity(new Location(world, 0.5,portalLocation.getBlockY()+1,-2.5), EntityType.ENDER_CRYSTAL); + world.spawnEntity(new Location(world, 3.5,portalLocation.getBlockY()+1,0.5), EntityType.ENDER_CRYSTAL); + world.spawnEntity(new Location(world, -2.5,portalLocation.getBlockY()+1,0.5), EntityType.ENDER_CRYSTAL); + db.initiateRespawn(); + ChatUtil.success(player, "エンダードラゴンを復活させました!"); } @Override diff --git a/src/main/java/world/arainu/core/metaverseplugin/listener/BankListener.java b/src/main/java/world/arainu/core/metaverseplugin/listener/BankListener.java index 00e0e22..ecdae19 100644 --- a/src/main/java/world/arainu/core/metaverseplugin/listener/BankListener.java +++ b/src/main/java/world/arainu/core/metaverseplugin/listener/BankListener.java @@ -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; @@ -14,8 +16,7 @@ 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; @@ -23,6 +24,7 @@ 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; @@ -30,11 +32,13 @@ /** * 銀行に関するイベントをハンドリングしているクラス + * * @author kumitatepazuru */ public class BankListener implements Listener { /** * インベントリをクリックしたときに発火する関数 + * * @param e イベント */ @EventHandler @@ -42,48 +46,78 @@ public void onInventoryClick(InventoryClickEvent e) { Player p = (Player) e.getWhoClicked(); HashMap gui_hashmap = BankStore.getGui_hashmap(); if (BankStore.getGui_hashmap().containsKey(p.getUniqueId())) { - Bukkit.getScheduler().runTaskLater(MetaversePlugin.getInstance(), () -> { - Inventory inv = e.getInventory(); - List 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 gui_hashmap = BankStore.getGui_hashmap(); Inventory oldInv = e.getInventory(); List 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; @@ -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 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 login_money_map = BankStore.getLogin_money_map(); - login_money_map.put(e.getPlayer().getUniqueId(),System.currentTimeMillis() / 1000); + HashMap 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 login_money_map = BankStore.getLogin_money_map(); + public void onPlayerQuit(PlayerQuitEvent e) { + HashMap 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)); } } diff --git a/src/main/java/world/arainu/core/metaverseplugin/listener/VillagerListener.java b/src/main/java/world/arainu/core/metaverseplugin/listener/VillagerListener.java index f785261..8bf9ed4 100644 --- a/src/main/java/world/arainu/core/metaverseplugin/listener/VillagerListener.java +++ b/src/main/java/world/arainu/core/metaverseplugin/listener/VillagerListener.java @@ -1,5 +1,7 @@ package world.arainu.core.metaverseplugin.listener; +import lombok.Getter; +import lombok.RequiredArgsConstructor; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.milkbowl.vault.economy.Economy; @@ -14,9 +16,11 @@ import org.bukkit.event.Listener; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.MerchantInventory; import org.bukkit.inventory.MerchantRecipe; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.persistence.PersistentDataContainer; @@ -26,6 +30,7 @@ import world.arainu.core.metaverseplugin.gui.MenuItem; import world.arainu.core.metaverseplugin.iphone.Bank; import world.arainu.core.metaverseplugin.store.BankStore; +import world.arainu.core.metaverseplugin.utils.ChatUtil; import world.arainu.core.metaverseplugin.utils.sqlUtil; import java.util.ArrayList; @@ -35,6 +40,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; /** @@ -54,11 +60,15 @@ public void onPlayerInteractEntity(PlayerInteractEntityEvent e) { if (Boolean.TRUE.equals(sqlUtil.hasuuid(e.getRightClicked().getUniqueId()))) { e.setCancelled(true); Villager villager = (Villager) e.getRightClicked(); - List tradeitems = villager.getRecipes().stream() + AtomicInteger i = new AtomicInteger(-1); + List tradeitems = villager.getRecipes().stream().map((recipe) -> { + i.getAndIncrement(); + return new Mapdata(recipe,i.get(),villager); + }) .map((recipe) -> new MenuItem( this::onClick, true, - Bank.isMoney(recipe.getResult()) ? recipe.getIngredients().get(0) : recipe.getResult(), + Bank.isMoney(recipe.recipe.getResult()) ? recipe.recipe.getIngredients().get(0) : recipe.recipe.getResult(), recipe, false, -1, @@ -70,6 +80,16 @@ public void onPlayerInteractEntity(PlayerInteractEntityEvent e) { } } + /** + * Mapのreturnに使うやつ + */ + @RequiredArgsConstructor + static class Mapdata { + private final MerchantRecipe recipe; + private final int index; + private final Villager villager; + } + /* TODO: Util化 */ @@ -100,127 +120,146 @@ public void onInventoryClick(InventoryClickEvent e) { final Inventory inv = e.getInventory(); final HumanEntity p = e.getWhoClicked(); GuiData guiData = invMap.get(inv); - final ItemStack item = Objects.requireNonNull(inv.getItem(2)); + if( guiData != null ) { + final ItemStack item = Objects.requireNonNull(inv.getItem(2)); - // 管理インベントリでなければ無視 - if (!invMap.containsKey(inv)) return; - final int id = e.getRawSlot(); - if (id < 18 && id > 0) { - e.setCancelled(true); - switch (id) { - case 1 -> { - playClickSound((Player) p); - if (item.getAmount() != 1) { - item.setAmount(item.getAmount() - 1); + // 管理インベントリでなければ無視 + if (!invMap.containsKey(inv)) return; + final int id = e.getRawSlot(); + if (id < 18 && id > 0) { + e.setCancelled(true); + switch (id) { + case 1 -> { + playClickSound((Player) p); + if (item.getAmount() != 1) { + item.setAmount(item.getAmount() - 1); + } + updatePrice(inv, item); } - updatePrice(inv, item); - } - case 3 -> { - playClickSound((Player) p); - if (item.getAmount() != 64) { - item.setAmount(item.getAmount() + 1); + case 3 -> { + playClickSound((Player) p); + if (item.getAmount() != 64) { + item.setAmount(item.getAmount() + 1); + } + updatePrice(inv, item); } - updatePrice(inv, item); - } - case 6 -> { - playClickSound((Player) p); - if (guiData.isPurchase) { - final HashMap item_list = inv.all(item.getType()); - int total = 0; - for (Map.Entry i : item_list.entrySet()) { - if (i.getKey() != 2) { - total += i.getValue().getAmount(); + case 6 -> { + playClickSound((Player) p); + boolean okay = false; + if (guiData.isPurchase) { + final HashMap item_list = inv.all(item.getType()); + int total = 0; + for (Map.Entry i : item_list.entrySet()) { + if (i.getKey() != 2) { + total += i.getValue().getAmount(); + } } - } - final int required_item = item.getAmount(); - if (required_item <= total) { - Bank.addMoneyForPlayer((Player) p, guiData.price * item.getAmount()); + final int required_item = item.getAmount(); + if (required_item <= total) { + Bank.addMoneyForPlayer((Player) p, guiData.price * item.getAmount()); - total = 0; - for (Map.Entry i : item_list.entrySet()) { - final ItemStack pay_item = i.getValue(); - final int index = i.getKey(); - if (index != 2) { - if (total + pay_item.getAmount() < required_item) { - inv.setItem(index, new ItemStack(Material.AIR)); - total += pay_item.getAmount(); - } else { - pay_item.setAmount(pay_item.getAmount() - (required_item - total)); - inv.setItem(index, pay_item); - break; + total = 0; + okay = true; + for (Map.Entry i : item_list.entrySet()) { + final ItemStack pay_item = i.getValue(); + final int index = i.getKey(); + if (index != 2) { + if (total + pay_item.getAmount() < required_item) { + inv.setItem(index, new ItemStack(Material.AIR)); + total += pay_item.getAmount(); + } else { + pay_item.setAmount(pay_item.getAmount() - (required_item - total)); + inv.setItem(index, pay_item); + break; + } } } } - } - } else { - final ReturnMoney returnMoney = getTotalmoney(inv); - final int required_money = guiData.price * Objects.requireNonNull(inv.getItem(2)).getAmount(); - if (required_money <= returnMoney.total_money) { - for (ItemStack i : returnMoney.money_list) { - if (Bank.isMoney(i)) { - inv.remove(i); + } else { + final ReturnMoney returnMoney = getTotalmoney(inv); + final int required_money = guiData.price * Objects.requireNonNull(inv.getItem(2)).getAmount(); + if (required_money <= returnMoney.getTotal_money()) { + okay = true; + for (ItemStack i : returnMoney.getMoney_list()) { + if (Bank.isMoney(i)) { + inv.remove(i); + } } + Bank.addMoneyForPlayer((Player) p, returnMoney.getTotal_money() - required_money); + p.getInventory().addItem(Objects.requireNonNull(inv.getItem(2))); } - Bank.addMoneyForPlayer((Player) p, returnMoney.total_money - required_money); - p.getInventory().addItem(Objects.requireNonNull(inv.getItem(2))); + } + if(okay){ + MerchantRecipe recipe = guiData.villager.getRecipe(guiData.index); + recipe.setUses(recipe.getUses()+1); + guiData.villager.setRecipe(guiData.index,recipe); } } } } - } - Bukkit.getScheduler().runTaskLater(MetaversePlugin.getInstance(), () -> { - int total = 0; - final int required; - if (guiData.isPurchase) { - final HashMap item_list = inv.all(item.getType()); - for (Map.Entry i : item_list.entrySet()) { - if (i.getKey() != 2) { - total += i.getValue().getAmount(); - } - } - required = item.getAmount(); - } else { - final List money_list = new ArrayList<>(inv.all(Material.EMERALD).values()); - for (ItemStack i : money_list) { - if (Bank.isMoney(i)) { - final PersistentDataContainer persistentDataContainer = i.getItemMeta().getPersistentDataContainer(); - total += persistentDataContainer.get(BankStore.getKey(), PersistentDataType.INTEGER) * i.getAmount(); + Bukkit.getScheduler().runTaskLater(MetaversePlugin.getInstance(), () -> { + int total = 0; + final int required; + if (guiData.isPurchase) { + final HashMap item_list = inv.all(item.getType()); + for (Map.Entry i : item_list.entrySet()) { + if (i.getKey() != 2) { + total += i.getValue().getAmount(); + } } + required = item.getAmount(); + } else { + ReturnMoney money = getTotalmoney(inv); + total = money.getTotal_money(); + required = guiData.price * Objects.requireNonNull(inv.getItem(2)).getAmount(); } - required = guiData.price * Objects.requireNonNull(inv.getItem(2)).getAmount(); - } - ItemStack priceItem = Objects.requireNonNull(inv.getItem(6)); - ItemMeta itemMeta = priceItem.getItemMeta(); - if (required > total) { - if (guiData.isPurchase) { - itemMeta.lore(Arrays.asList( - Component.text("クリックして買取").color(NamedTextColor.GRAY), - Component.text(required - total + "個不足しています").color(NamedTextColor.RED) - )); + ItemStack priceItem = Objects.requireNonNull(inv.getItem(6)); + ItemMeta itemMeta = priceItem.getItemMeta(); + if (required > total) { + if (guiData.isPurchase) { + itemMeta.lore(Arrays.asList( + Component.text("クリックして買取").color(NamedTextColor.GRAY), + Component.text(required - total + "個不足しています").color(NamedTextColor.RED) + )); + } else { + itemMeta.lore(Arrays.asList( + Component.text("クリックして購入").color(NamedTextColor.GRAY), + Component.text(MetaversePlugin.getEcon().format(required - total) + "不足しています").color(NamedTextColor.RED) + )); + } } else { - itemMeta.lore(Arrays.asList( - Component.text("クリックして購入").color(NamedTextColor.GRAY), - Component.text(MetaversePlugin.getEcon().format(required - total) + "不足しています").color(NamedTextColor.RED) - )); + if (guiData.isPurchase) { + itemMeta.lore(List.of(Component.text("クリックして買取").color(NamedTextColor.GREEN))); + } else { + itemMeta.lore(List.of(Component.text("クリックして購入").color(NamedTextColor.GREEN))); + } } - } else { - if (guiData.isPurchase) { - itemMeta.lore(List.of(Component.text("クリックして買取").color(NamedTextColor.GREEN))); - } else { - itemMeta.lore(List.of(Component.text("クリックして購入").color(NamedTextColor.GREEN))); + priceItem.setItemMeta(itemMeta); + }, 1); + } else { + if(inv.getType() == InventoryType.MERCHANT) { + HashMap items = inv.all(Material.EMERALD); + List isMoney = items.values().stream() + .map(itemStack -> itemStack.getItemMeta().getPersistentDataContainer().has(BankStore.getKey(), PersistentDataType.INTEGER)) + .collect(Collectors.toList()); + MerchantRecipe recipe = ((MerchantInventory) inv).getSelectedRecipe(); + if(recipe != null) { + recipe.setUses(recipe.getUses() - 1); + ChatUtil.error(p,"ゲーム内通貨で通常の村人と貿易することはできません!"); + e.setCancelled(isMoney.contains(true)); } } - priceItem.setItemMeta(itemMeta); - }, 1); + } } /** * インベントリ内のお金を取得する関数 + * * @param inv 対象のインベントリ * @return お金の情報 */ - public ReturnMoney getTotalmoney(Inventory inv) { + public static ReturnMoney getTotalmoney(Inventory inv) { final List money_list = new ArrayList<>(inv.all(Material.EMERALD).values()); int total_money = 0; for (ItemStack i : money_list) { @@ -238,7 +277,8 @@ public ReturnMoney getTotalmoney(Inventory inv) { static class ReturnMoney { /** * 初期化 - * @param money_list インベントリ内のエメラルドのリスト + * + * @param money_list インベントリ内のエメラルドのリスト * @param total_money 現金の合計 */ ReturnMoney(List money_list, int total_money) { @@ -246,8 +286,8 @@ static class ReturnMoney { this.total_money = total_money; } - private final List money_list; - private final int total_money; + @Getter private final List money_list; + @Getter private final int total_money; } /** @@ -268,11 +308,18 @@ public void onInventoryClose(InventoryCloseEvent e) { } private void onClick(MenuItem e) { - MerchantRecipe recipe = (MerchantRecipe) e.getCustomData(); + MerchantRecipe recipe = ((Mapdata) e.getCustomData()).recipe; + int index = ((Mapdata) e.getCustomData()).index; + Villager villager = ((Mapdata) e.getCustomData()).villager; boolean isPurchase = Bank.isMoney(recipe.getResult()); ItemStack money = Bank.isMoney(recipe.getResult()) ? recipe.getResult() : recipe.getIngredients().get(0); int price = money.getAmount() * money.getItemMeta().getPersistentDataContainer().get(BankStore.getKey(), PersistentDataType.INTEGER); - final Inventory inv = Bukkit.createInventory(null, 27, e.getIcon().displayName().append(Component.text(" を購入"))); + final Inventory inv; + if (isPurchase) { + inv = Bukkit.createInventory(null, 27, e.getIcon().displayName().append(Component.text(" を買取")).color(NamedTextColor.BLACK)); + } else { + inv = Bukkit.createInventory(null, 27, e.getIcon().displayName().append(Component.text(" を購入")).color(NamedTextColor.BLACK)); + } final ItemStack down_button = new ItemStack(Material.RED_WOOL); ItemMeta itemMeta = down_button.getItemMeta(); @@ -330,19 +377,17 @@ private void onClick(MenuItem e) { inv.setItem(i, partition); } - invMap.put(inv, new GuiData(price, isPurchase)); + invMap.put(inv, new GuiData(price, index, isPurchase,villager)); e.getClicker().openInventory(inv); } private final HashMap invMap = new HashMap<>(); + @RequiredArgsConstructor private static class GuiData { - GuiData(int price, boolean isPurchase) { - this.price = price; - this.isPurchase = isPurchase; - } - private final int price; + private final int index; private final boolean isPurchase; + private final Villager villager; } } diff --git a/src/main/java/world/arainu/core/metaverseplugin/scheduler/LateScheduler.java b/src/main/java/world/arainu/core/metaverseplugin/scheduler/LateScheduler.java index 0539735..b129a88 100644 --- a/src/main/java/world/arainu/core/metaverseplugin/scheduler/LateScheduler.java +++ b/src/main/java/world/arainu/core/metaverseplugin/scheduler/LateScheduler.java @@ -33,6 +33,17 @@ public void run() { Arrays.asList(50, 20, 6, Material.DIAMOND), Arrays.asList(5, 30, 10, Material.LAPIS_LAZULI) )); + update("sandstone-villager", Arrays.asList( + Arrays.asList(1, 5, 2, Material.GRAVEL), + Arrays.asList(1, 5, 2, Material.SANDSTONE), + Arrays.asList(1, 5, 2, Material.CUT_SANDSTONE), + Arrays.asList(1, 5, 2, Material.CHISELED_SANDSTONE), + Arrays.asList(1, 5, 2, Material.SMOOTH_SANDSTONE), + Arrays.asList(1, 5, 2, Material.RED_SANDSTONE), + Arrays.asList(1, 5, 2, Material.CUT_RED_SANDSTONE), + Arrays.asList(1, 5, 2, Material.CHISELED_RED_SANDSTONE), + Arrays.asList(1, 5, 2, Material.SMOOTH_RED_SANDSTONE) + )); //noinspection RedundantTypeArguments (explicit type arguments speedup compilation and analysis time) update("stone-villager", Arrays.>asList( Arrays.asList(1, 3, 0, Material.COBBLESTONE), @@ -42,21 +53,12 @@ public void run() { Arrays.asList(1, 5, 2, Material.STONE_BRICKS), Arrays.asList(1, 5, 2, Material.CRACKED_STONE_BRICKS), Arrays.asList(1, 5, 2, Material.CHISELED_STONE_BRICKS), - Arrays.asList(1, 5, 2, Material.GRAVEL), Arrays.asList(1, 10, 5, Material.GRANITE), Arrays.asList(1, 10, 5, Material.POLISHED_GRANITE), Arrays.asList(1, 10, 5, Material.DIORITE), Arrays.asList(1, 10, 5, Material.POLISHED_DIORITE), Arrays.asList(1, 10, 5, Material.ANDESITE), Arrays.asList(1, 10, 5, Material.POLISHED_ANDESITE), - Arrays.asList(1, 5, 2, Material.SANDSTONE), - Arrays.asList(1, 5, 2, Material.CUT_SANDSTONE), - Arrays.asList(1, 5, 2, Material.CHISELED_SANDSTONE), - Arrays.asList(1, 5, 2, Material.SMOOTH_SANDSTONE), - Arrays.asList(1, 5, 2, Material.RED_SANDSTONE), - Arrays.asList(1, 5, 2, Material.CUT_RED_SANDSTONE), - Arrays.asList(1, 5, 2, Material.CHISELED_RED_SANDSTONE), - Arrays.asList(1, 5, 2, Material.SMOOTH_RED_SANDSTONE), Arrays.asList(1, 40, 5, Material.END_STONE), Arrays.asList(1, 40, 5, Material.END_STONE_BRICKS), Arrays.asList(1, 50, 5, Material.OBSIDIAN), @@ -92,6 +94,35 @@ public void run() { Arrays.asList(1, 15, 5, Material.DRIPSTONE_BLOCK), Arrays.asList(1, 5, 2, Material.POINTED_DRIPSTONE) )); + update("mob-villager", Arrays.asList( + Arrays.asList(1000, 5, 3, Material.AXOLOTL_SPAWN_EGG), + Arrays.asList(500, 5, 3, Material.BEE_SPAWN_EGG), + Arrays.asList(500, 5, 3, Material.CAT_SPAWN_EGG), + Arrays.asList(150, 5, 3, Material.CHICKEN_SPAWN_EGG), + Arrays.asList(150, 5, 3, Material.COD_SPAWN_EGG), + Arrays.asList(150, 5, 3, Material.COW_SPAWN_EGG), + Arrays.asList(1000, 5, 3, Material.DOLPHIN_SPAWN_EGG), + Arrays.asList(1000, 5, 3, Material.DONKEY_SPAWN_EGG), + Arrays.asList(500, 5, 3, Material.FOX_SPAWN_EGG), + Arrays.asList(1000, 5, 3, Material.HORSE_SPAWN_EGG), + Arrays.asList(1000, 5, 3, Material.LLAMA_SPAWN_EGG), + Arrays.asList(500, 5, 3, Material.OCELOT_SPAWN_EGG), + Arrays.asList(1000, 5, 3, Material.PARROT_SPAWN_EGG), + Arrays.asList(500, 5, 3, Material.PANDA_SPAWN_EGG), + Arrays.asList(150, 5, 3, Material.PIG_SPAWN_EGG), + Arrays.asList(500, 5, 3, Material.POLAR_BEAR_SPAWN_EGG), + Arrays.asList(200, 5, 3, Material.PUFFERFISH_SPAWN_EGG), + Arrays.asList(500, 5, 3, Material.RABBIT_SPAWN_EGG), + Arrays.asList(150, 5, 3, Material.SALMON_SPAWN_EGG), + Arrays.asList(150, 5, 3, Material.SHEEP_SPAWN_EGG), + Arrays.asList(1000, 5, 3, Material.SKELETON_HORSE_SPAWN_EGG), + Arrays.asList(150, 5, 3, Material.SQUID_SPAWN_EGG), + Arrays.asList(1000, 5, 3, Material.STRIDER_SPAWN_EGG), + Arrays.asList(200, 5, 3, Material.TROPICAL_FISH_SPAWN_EGG), + Arrays.asList(300, 5, 3, Material.TURTLE_SPAWN_EGG), + Arrays.asList(500, 5, 3, Material.WOLF_SPAWN_EGG), + Arrays.asList(1000, 5, 3, Material.ZOMBIE_HORSE_SPAWN_EGG) + )); } old_time = Bukkit.getWorlds().get(0).getTime(); } @@ -100,11 +131,11 @@ private void update(String type, List> recipeData) { List villager_use = new ArrayList<>(Collections.nCopies(recipeData.size(), 0)); final List villager_list = new ArrayList<>(); villager_list.addAll(Objects.requireNonNull(sqlUtil.getuuidsbytype(type))); - villager_list.addAll(Objects.requireNonNull(sqlUtil.getuuidsbytype(type+"-shop"))); + villager_list.addAll(Objects.requireNonNull(sqlUtil.getuuidsbytype(type + "-shop"))); for (UUID uuid : villager_list) { - Bukkit.getLogger().info("villager uuid:"+uuid); + Bukkit.getLogger().info("villager uuid:" + uuid); Villager villager = (Villager) Bukkit.getEntity(uuid); - if(villager != null) { + if (villager != null) { List recipes = villager.getRecipes(); for (int i = 0; i < recipes.size(); i++) { villager_use.set(i, villager_use.get(i) + recipes.get(i).getUses()); @@ -132,7 +163,7 @@ private void update(String type, List> recipeData) { List recipes = new ArrayList<>(); List recipes2 = new ArrayList<>(); - for (int i=0;i data = recipeData.get(i); recipes.add(CommandSpawn.createRecipe((int) data.get(0), (int) Math.round((int) data.get(1) + ((int) data.get(2) * Math.tanh(p.get(i) / 5f))), new ItemStack((Material) data.get(3)))); recipes2.add(CommandSpawn.createRecipe2((int) data.get(0), (int) Math.round((int) data.get(1) + ((int) data.get(2) * Math.tanh(p.get(i) / 5f))), new ItemStack((Material) data.get(3)))); @@ -144,13 +175,13 @@ private void update(String type, List> recipeData) { villager.setRecipes(recipes); } } - for (UUID uuid : Objects.requireNonNull(sqlUtil.getuuidsbytype(type+"-shop"))) { + for (UUID uuid : Objects.requireNonNull(sqlUtil.getuuidsbytype(type + "-shop"))) { Villager villager = (Villager) Bukkit.getEntity(uuid); if(villager != null) { villager.setRecipes(recipes2); } } - Bukkit.getLogger().info("すべての" + type + "及び"+type+"-shopの価格を変更しました。"); + Bukkit.getLogger().info("すべての" + type + "及び" + type + "-shopの価格を変更しました。"); } } @@ -158,7 +189,8 @@ private void update(String type, List> recipeData) { private static final HashMap> quantity_p = new HashMap<>() { { put("mason-villager", new ArrayList<>(Collections.nCopies(7, 0))); - put("stone-villager", new ArrayList<>(Collections.nCopies(56, 0))); + put("stone-villager", new ArrayList<>(Collections.nCopies(47, 0))); + put("mob-villager", new ArrayList<>(Collections.nCopies(27, 0))); } }; private long old_time; diff --git a/src/main/java/world/arainu/core/metaverseplugin/scheduler/MoneyScheduler.java b/src/main/java/world/arainu/core/metaverseplugin/scheduler/MoneyScheduler.java index 67e2d39..4740dcc 100644 --- a/src/main/java/world/arainu/core/metaverseplugin/scheduler/MoneyScheduler.java +++ b/src/main/java/world/arainu/core/metaverseplugin/scheduler/MoneyScheduler.java @@ -2,7 +2,6 @@ import net.milkbowl.vault.economy.Economy; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; import world.arainu.core.metaverseplugin.MetaversePlugin; diff --git a/src/main/java/world/arainu/core/metaverseplugin/utils/ItemUtil.java b/src/main/java/world/arainu/core/metaverseplugin/utils/ItemUtil.java new file mode 100644 index 0000000..4184ac9 --- /dev/null +++ b/src/main/java/world/arainu/core/metaverseplugin/utils/ItemUtil.java @@ -0,0 +1,22 @@ +package world.arainu.core.metaverseplugin.utils; + +import org.bukkit.entity.Player; + +/** + * アイテムに関する関数(群) + * + * @author AreaEffectCloud + */ + +public class ItemUtil { + + /** + * プレイヤーのインベントリが満杯であることを戻り値で返す + * + * @param player インベントリが満杯かどうかをチェックするプレイヤー + * @return 満杯であった場合、戻り値が返される(満杯でなかった場合はスルーされる) + */ + public boolean isInventoryFull(Player player) { + return player.getInventory().firstEmpty() == -1; + } +} diff --git a/src/main/java/world/arainu/core/metaverseplugin/utils/sqlUtil.java b/src/main/java/world/arainu/core/metaverseplugin/utils/sqlUtil.java index 6b077ee..ea27461 100644 --- a/src/main/java/world/arainu/core/metaverseplugin/utils/sqlUtil.java +++ b/src/main/java/world/arainu/core/metaverseplugin/utils/sqlUtil.java @@ -313,6 +313,6 @@ public static List getWhitelist() { private final static int port = MetaversePlugin.getConfiguration().getInt("mysql.port"); @Getter private final static String url = MetaversePlugin.getConfiguration().getString("mysql.url"); - private final static String url_connection = "jdbc:mysql://" + url + ":" + port + "/" + db_name + "?autoReconnect=true&maxReconnects=3"; + private final static String url_connection = "jdbc:mysql://" + url + ":" + port + "/" + db_name + "?autoReconnect=true&maxReconnects=3&useSSL=false"; private static Connection conn; }