Merge pull request #307

Added /ecoenchants <giverandombook> <player> <type/rarity> <minLevel> <maxLevel> command
This commit is contained in:
Will FP 2022-10-03 13:21:43 +01:00 committed by GitHub
commit 8728f080fb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 93 additions and 1 deletions

View File

@ -14,5 +14,6 @@ class CommandEcoEnchants(plugin: EcoPlugin) : PluginCommand(plugin, "ecoenchants
init { init {
addSubcommand(CommandReload(plugin)) addSubcommand(CommandReload(plugin))
.addSubcommand(CommandToggleDescriptions(plugin)) .addSubcommand(CommandToggleDescriptions(plugin))
.addSubcommand(CommandGiveRandomBook(plugin))
} }
} }

View File

@ -0,0 +1,84 @@
package com.willfp.ecoenchants.commands
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.command.impl.PluginCommand
import com.willfp.eco.core.items.builder.EnchantedBookBuilder
import com.willfp.ecoenchants.display.getFormattedName
import com.willfp.ecoenchants.enchants.EcoEnchants
import com.willfp.ecoenchants.enchants.wrap
import com.willfp.ecoenchants.rarity.EnchantmentRarities
import com.willfp.ecoenchants.rarity.EnchantmentRarity
import com.willfp.ecoenchants.type.EnchantmentType
import com.willfp.ecoenchants.type.EnchantmentTypes
import org.bukkit.Bukkit
import org.bukkit.command.CommandSender
import org.bukkit.entity.Player
class CommandGiveRandomBook(plugin: EcoPlugin) : PluginCommand(
plugin, "giverandombook", "ecoenchants.command.giverandombook", false
) {
override fun onExecute(sender: CommandSender, args: List<String>) {
val player = (args.firstOrNull()?: run { sender
.sendMessage(plugin.langYml.getMessage("requires-player")); return }).asPlayer()?: run {
sender.sendMessage(plugin.langYml.getMessage("invalid-player"))
return
}
val filter = args.getOrNull(1)?.asRarity()?: args.getOrNull(1)?.asType()
val minLevel = args.getOrNull(2)?.toIntOrNull()?: 1
val maxLevel = args.getOrNull(3)?.toIntOrNull()?: Int.MAX_VALUE
if (minLevel > maxLevel) {
sender.sendMessage(plugin.langYml.getMessage("invalid-levels"))
return
}
val enchantment = EcoEnchants.values()
.filter {
when (filter) {
is EnchantmentRarity -> it.enchantmentRarity == filter
is EnchantmentType -> it.type == filter
else -> true
} && it.maxLevel >= minLevel
}
.randomOrNull()?: run {
sender.sendMessage(plugin.langYml.getMessage("no-enchantments-found"))
return
}
val level = (minLevel..maxLevel.coerceAtMost(enchantment.maxLevel)).random()
player.inventory.addItem(EnchantedBookBuilder()
.addStoredEnchantment(enchantment, level)
.build()).values.forEach {
player.world.dropItem(player.location, it)
}
sender.sendMessage(plugin.langYml.getMessage("random-book-given")
.replace("%playername%", player.name)
.replace("%enchantment%", enchantment.wrap()
.getFormattedName(level)))
}
override fun tabComplete(sender: CommandSender, args: List<String>): List<String> {
return when (args.size) {
1 -> Bukkit.getOnlinePlayers().map { it.name }
2 -> (EnchantmentRarities.values().map { it.id } + EnchantmentTypes.values().map { it.id })
3 -> (1..10).map { it.toString() }
4 -> ((args[3].toIntOrNull()?: 1)..(args[3].toIntOrNull()?: 1)+10).map { it.toString() }
else -> emptyList()
}
}
private fun String.asPlayer(): Player? {
return Bukkit.getPlayer(this)
}
private fun String.asRarity(): EnchantmentRarity? {
return EnchantmentRarities.getByID(this.lowercase())
}
private fun String.asType(): EnchantmentType? {
return EnchantmentTypes.getByID(this.lowercase())
}
}

View File

@ -19,7 +19,7 @@ enchantable: true
effects: effects:
- id: damage_multiplier - id: damage_multiplier
args: args:
multiplier: "1 + (%distance% / (11 - ceil(%level / 2))) * 0.01 * %level%" multiplier: "1 + (%distance% / (11 - ceil(%level% / 2))) * 0.01 * %level%"
triggers: triggers:
- bow_attack - bow_attack

View File

@ -14,6 +14,9 @@ messages:
descriptions-disabled: "&cEnchantment descriptions are disabled on this server." descriptions-disabled: "&cEnchantment descriptions are disabled on this server."
not-found: "&cCannot find an enchantment matching name: &f%name%." not-found: "&cCannot find an enchantment matching name: &f%name%."
missing-enchant: "&cYou must specify an enchantment!" missing-enchant: "&cYou must specify an enchantment!"
random-book-given: "&fYou have been given &a%playername%&f a &r%enchantment%&f random book!"
no-enchantments-found: "&cNo enchantments found!"
invalid-levels: "&cMinimum level can't be higher than maximum level!"
all: "All" all: "All"
no-conflicts: "No Conflicts" no-conflicts: "No Conflicts"

View File

@ -45,6 +45,7 @@ permissions:
ecoenchants.command.reload: true ecoenchants.command.reload: true
ecoenchants.command.ecoenchants: true ecoenchants.command.ecoenchants: true
ecoenchants.command.toggledescriptions: true ecoenchants.command.toggledescriptions: true
ecoenchants.command.giverandombook: true
ecoenchants.command.enchantinfo: true ecoenchants.command.enchantinfo: true
ecoenchants.anvil.*: ecoenchants.anvil.*:
description: All anvil perks description: All anvil perks
@ -58,6 +59,9 @@ permissions:
ecoenchants.command.reload: ecoenchants.command.reload:
description: Allows reloading the config description: Allows reloading the config
default: op default: op
ecoenchants.command.giverandombook:
description: Allows giving random books
default: op
ecoenchants.command.ecoenchants: ecoenchants.command.ecoenchants:
description: Allows the use of /ecoenchants. description: Allows the use of /ecoenchants.
default: true default: true