From 76f63fcd6052e8b4146a11d3f9f1056eef63c8d7 Mon Sep 17 00:00:00 2001 From: TONY_All Date: Mon, 4 Jul 2022 05:43:15 +0800 Subject: [PATCH] bug fix S2 --- .../sanseyooyea/sansefish/SanseFish.kt | 5 ++++- .../sansefish/command/GetCommand.kt | 11 +++++++++- .../sansefish/command/StorageCommand.kt | 9 ++++++++- .../sansefish/manager/BaitManager.kt | 11 ++++++++-- .../sansefish/manager/RodManager.kt | 9 ++++++++- .../sansefish/misc/FishingRodInstance.kt | 20 ++++++++++++++----- .../sanseyooyea/sansefish/ui/BaitUI.kt | 1 + src/main/resources/ItemStorage.yaml | 2 ++ .../resources/baits/{a.yml => default.yml} | 3 ++- 9 files changed, 59 insertions(+), 12 deletions(-) rename src/main/resources/baits/{a.yml => default.yml} (77%) diff --git a/src/main/kotlin/work/microhand/sanseyooyea/sansefish/SanseFish.kt b/src/main/kotlin/work/microhand/sanseyooyea/sansefish/SanseFish.kt index 8409731..2d89efb 100644 --- a/src/main/kotlin/work/microhand/sanseyooyea/sansefish/SanseFish.kt +++ b/src/main/kotlin/work/microhand/sanseyooyea/sansefish/SanseFish.kt @@ -8,6 +8,8 @@ import taboolib.module.configuration.Configuration import taboolib.platform.BukkitPlugin import work.microhand.sanseyooyea.sansefish.command.registerCommand import work.microhand.sanseyooyea.sansefish.command.StorageCommand +import work.microhand.sanseyooyea.sansefish.manager.BaitManager +import work.microhand.sanseyooyea.sansefish.manager.RodManager object SanseFish : Plugin() { @@ -23,7 +25,8 @@ object SanseFish : Plugin() { info("§a| §7作者QQ: 1187586838") registerCommand() StorageCommand.registerCommand() - + BaitManager + RodManager info("§a| §7插件加载完成.") } diff --git a/src/main/kotlin/work/microhand/sanseyooyea/sansefish/command/GetCommand.kt b/src/main/kotlin/work/microhand/sanseyooyea/sansefish/command/GetCommand.kt index 9e5fa6b..888f20e 100644 --- a/src/main/kotlin/work/microhand/sanseyooyea/sansefish/command/GetCommand.kt +++ b/src/main/kotlin/work/microhand/sanseyooyea/sansefish/command/GetCommand.kt @@ -12,10 +12,19 @@ import work.microhand.sanseyooyea.sansefish.manager.RodManager fun registerCommand() = command("giveRod", permission = "sansefish.giverod") { dynamic { + suggestion { _, _ -> + Bukkit.getOnlinePlayers().map { it.name } + } + restrict { _, _, arg -> + Bukkit.getPlayerExact(arg) != null + } dynamic { + suggestion { _, _ -> + RodManager.rods.keys.toList() + } execute { sender, ctx, arg -> val target = - Bukkit.getPlayerExact(ctx.argument(-1)) ?: return@execute sender.sendMessage("§c| §7该玩家不在线") + Bukkit.getPlayerExact(ctx.argument(-1))!! val rod = RodManager.rods[arg]?: return@execute sender.sendMessage("§c| §7该鱼竿不存在") target.giveItem(rod.buildFishingRod()) } diff --git a/src/main/kotlin/work/microhand/sanseyooyea/sansefish/command/StorageCommand.kt b/src/main/kotlin/work/microhand/sanseyooyea/sansefish/command/StorageCommand.kt index eb9071f..0837f6e 100644 --- a/src/main/kotlin/work/microhand/sanseyooyea/sansefish/command/StorageCommand.kt +++ b/src/main/kotlin/work/microhand/sanseyooyea/sansefish/command/StorageCommand.kt @@ -37,6 +37,9 @@ object StorageCommand { private fun CommandBuilder.CommandBase.commandRemove() = literal("remove") { dynamic { + suggestion { _, _ -> + itemStorage.getKeys(false).toList() + } execute { sender, _, arg -> itemStorage[arg] = null itemStorage.saveToFile() @@ -56,12 +59,16 @@ object StorageCommand { //istorage give xxx Item private fun CommandBuilder.CommandBase.commandGive() = literal("give") { dynamic { + suggestion { _, _ -> + Bukkit.getOnlinePlayers().map { it.name } + } restrict { _, _, arg -> Bukkit.getPlayerExact(arg) != null } dynamic { + suggestion { _, _ -> itemStorage.getKeys(false).toList() } restrict { _, _, arg -> itemStorage.contains(arg) } execute { sender, ctx, arg -> val target = Bukkit.getPlayerExact(ctx.argument(-1)) - val item = itemStorage.getItemStack(arg)?: return@execute sender.sendMessage("§c| §7该物品不存在.") + val item = itemStorage.getItemStack(arg) ?: return@execute sender.sendMessage("§c| §7该物品不存在.") target!!.giveItem(item) sender.sendMessage("§a| §7已将物品 §a${arg} §7给予 §a${target.name}") } diff --git a/src/main/kotlin/work/microhand/sanseyooyea/sansefish/manager/BaitManager.kt b/src/main/kotlin/work/microhand/sanseyooyea/sansefish/manager/BaitManager.kt index 5eb1256..1f998cd 100644 --- a/src/main/kotlin/work/microhand/sanseyooyea/sansefish/manager/BaitManager.kt +++ b/src/main/kotlin/work/microhand/sanseyooyea/sansefish/manager/BaitManager.kt @@ -2,8 +2,10 @@ package work.microhand.sanseyooyea.sansefish.manager import org.bukkit.inventory.ItemStack import taboolib.common.platform.function.getDataFolder +import taboolib.common.platform.function.warning import taboolib.library.xseries.getItemStack import taboolib.module.configuration.Configuration +import taboolib.platform.BukkitPlugin import work.microhand.sanseyooyea.sansefish.command.StorageCommand import work.microhand.sanseyooyea.sansefish.misc.Bait import work.microhand.sanseyooyea.sansefish.misc.BaitReward @@ -26,10 +28,15 @@ object BaitManager { } private fun init() { + val folder = File(getDataFolder(),"baits").apply { + if (exists()) return@apply + mkdirs() + BukkitPlugin.getInstance().saveResource("baits${File.separator}default.yml", false) + } // load baits. - File(getDataFolder(), "baits").listFiles()?.forEach { file -> + folder.listFiles()?.forEach { file -> val config = Configuration.loadFromFile(file) - val key = config.getString("item")?: throw IllegalArgumentException("鱼饵 ${file.nameWithoutExtension} 未配置物品.") + val key = config.getString("item")?: return@forEach warning("鱼饵 ${file.nameWithoutExtension} 未配置物品.") val item = StorageCommand.itemStorage.getItemStack(key)?: throw IllegalArgumentException("物品 $key 不存在.") val rewards = BaitReward(config) baits[file.nameWithoutExtension] = Bait(file.nameWithoutExtension, item, rewards, config) diff --git a/src/main/kotlin/work/microhand/sanseyooyea/sansefish/manager/RodManager.kt b/src/main/kotlin/work/microhand/sanseyooyea/sansefish/manager/RodManager.kt index a27be58..fb76010 100644 --- a/src/main/kotlin/work/microhand/sanseyooyea/sansefish/manager/RodManager.kt +++ b/src/main/kotlin/work/microhand/sanseyooyea/sansefish/manager/RodManager.kt @@ -3,6 +3,7 @@ package work.microhand.sanseyooyea.sansefish.manager import org.bukkit.inventory.ItemStack import taboolib.common.platform.function.getDataFolder import taboolib.module.configuration.Configuration +import taboolib.platform.BukkitPlugin import taboolib.platform.util.ItemBuilder import work.microhand.sanseyooyea.sansefish.SanseFish import work.microhand.sanseyooyea.sansefish.misc.FishingRodInstance @@ -13,8 +14,14 @@ object RodManager { val rods = HashMap() init { + val folder = File(getDataFolder(),"rods").apply { + if (exists()) return@apply + mkdirs() + BukkitPlugin.getInstance().saveResource("rods/default.yml", false) + } + // load fish rods. - File(getDataFolder(), "rods").listFiles()?.forEach { file -> + folder.listFiles()?.forEach { file -> val config = Configuration.loadFromFile(file) val durability = config.getInt("max-durability") val luck = config.getInt("luck-def") diff --git a/src/main/kotlin/work/microhand/sanseyooyea/sansefish/misc/FishingRodInstance.kt b/src/main/kotlin/work/microhand/sanseyooyea/sansefish/misc/FishingRodInstance.kt index 00253ae..d38d05f 100644 --- a/src/main/kotlin/work/microhand/sanseyooyea/sansefish/misc/FishingRodInstance.kt +++ b/src/main/kotlin/work/microhand/sanseyooyea/sansefish/misc/FishingRodInstance.kt @@ -4,6 +4,7 @@ import org.bukkit.Bukkit import org.bukkit.Material import org.bukkit.event.player.PlayerFishEvent import org.bukkit.inventory.ItemStack +import org.bukkit.inventory.meta.Damageable import org.bukkit.persistence.PersistentDataType import taboolib.platform.BukkitPlugin import taboolib.platform.util.ItemBuilder @@ -22,17 +23,26 @@ data class FishingRodInstance( lore.addAll(listOf("", "", type.lore)) lore[0] = "§e耐久: §7$durability" lore[1] = "§d幸运值: §7$luck" + }.let { val durabilityPercentage = (durability.toDouble() / SanseFish.conf.getInt("target-rod.max-durability", 100)) - damage = (64 * (1 - durabilityPercentage)).toInt() - println("Damage Before: $damage") - }.also { println("Damage After: ${ItemBuilder(it).damage}") } + val meta = it.itemMeta + (meta as Damageable).damage = (64 * (1 - durabilityPercentage)).toInt() + it.itemMeta = meta + it + } fun handleFished(fishEvent: PlayerFishEvent) { fishEvent.expToDrop = 0 fishEvent.caught!!.remove() - val bait = BaitManager.baits[item.itemMeta!!.persistentDataContainer[SanseFish.baitKey, PersistentDataType.STRING]?: return]!! + val bait = + BaitManager.baits[item.itemMeta!!.persistentDataContainer[SanseFish.baitKey, PersistentDataType.STRING] + ?: return]!! luck++ - val maxLuck = item.itemMeta!!.persistentDataContainer.getOrDefault(SanseFish.maxLuckKey, PersistentDataType.INTEGER, type.defaultLuck) + val maxLuck = item.itemMeta!!.persistentDataContainer.getOrDefault( + SanseFish.maxLuckKey, + PersistentDataType.INTEGER, + type.defaultLuck + ) if (luck > maxLuck) { val meta = item.itemMeta!! meta.persistentDataContainer[SanseFish.maxLuckKey, PersistentDataType.INTEGER] = luck diff --git a/src/main/kotlin/work/microhand/sanseyooyea/sansefish/ui/BaitUI.kt b/src/main/kotlin/work/microhand/sanseyooyea/sansefish/ui/BaitUI.kt index 6deb681..c90beb4 100644 --- a/src/main/kotlin/work/microhand/sanseyooyea/sansefish/ui/BaitUI.kt +++ b/src/main/kotlin/work/microhand/sanseyooyea/sansefish/ui/BaitUI.kt @@ -36,6 +36,7 @@ class BaitUI(private val player: Player) { player.inventory.itemInMainHand.itemMeta = meta player.sendMessage(player.inventory.itemInMainHand.itemMeta!!.persistentDataContainer.keys.toString()) player.sendMessage("§a| §7成功安装鱼饵") + player.closeInventory() } } } diff --git a/src/main/resources/ItemStorage.yaml b/src/main/resources/ItemStorage.yaml index e69de29..5683fe5 100644 --- a/src/main/resources/ItemStorage.yaml +++ b/src/main/resources/ItemStorage.yaml @@ -0,0 +1,2 @@ +bait1: + material: CLAY_BALL diff --git a/src/main/resources/baits/a.yml b/src/main/resources/baits/default.yml similarity index 77% rename from src/main/resources/baits/a.yml rename to src/main/resources/baits/default.yml index 1593690..4af1eca 100644 --- a/src/main/resources/baits/a.yml +++ b/src/main/resources/baits/default.yml @@ -1,4 +1,5 @@ -item: null +# 使用存放在ItemStorage 内的物品表示 +item: bait1 rewards: - items: