✨ Bedrock remover
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
package dev.solsynth.snConnect
|
||||
|
||||
import dev.solsynth.snConnect.commands.BedrockRemoverCommand
|
||||
import dev.solsynth.snConnect.commands.BedrockRemoverCompleter
|
||||
import dev.solsynth.snConnect.commands.SnCommand
|
||||
import dev.solsynth.snConnect.commands.SnCommandCompleter
|
||||
import dev.solsynth.snConnect.listeners.SnChatListener
|
||||
@@ -106,6 +108,9 @@ class SolarNetworkConnect : JavaPlugin() {
|
||||
Bukkit.getPluginCommand("solar")!!.setExecutor(SnCommand(this.sn!!, this.economy))
|
||||
Bukkit.getPluginCommand("solar")!!.tabCompleter = SnCommandCompleter()
|
||||
|
||||
Bukkit.getPluginCommand("eatrock")!!.setExecutor(BedrockRemoverCommand(this.economy))
|
||||
Bukkit.getPluginCommand("eatrock")!!.tabCompleter = BedrockRemoverCompleter()
|
||||
|
||||
logger.info(
|
||||
String.format(
|
||||
"Successfully loaded Solar Network Connect connected with %s",
|
||||
|
@@ -0,0 +1,220 @@
|
||||
package dev.solsynth.snConnect.commands
|
||||
|
||||
import net.milkbowl.vault.economy.Economy
|
||||
import net.milkbowl.vault.economy.EconomyResponse
|
||||
import org.bukkit.ChatColor
|
||||
import org.bukkit.Material
|
||||
import org.bukkit.Sound
|
||||
import org.bukkit.command.Command
|
||||
import org.bukkit.command.CommandExecutor
|
||||
import org.bukkit.command.CommandSender
|
||||
import org.bukkit.command.TabCompleter
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.inventory.ItemStack
|
||||
|
||||
class BedrockRemoverCommand(private val economy: Economy?) : CommandExecutor {
|
||||
private val paymentMethods = listOf("money", "materials")
|
||||
private val requiredMaterials = listOf(
|
||||
Material.PISTON,
|
||||
Material.TNT,
|
||||
Material.LEVER,
|
||||
Material.OAK_TRAPDOOR // Representative for trapdoor group
|
||||
)
|
||||
|
||||
override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<out String>): Boolean {
|
||||
if (sender !is Player) {
|
||||
sender.sendMessage(ChatColor.RED.toString() + "This command can only be used by players.")
|
||||
return true
|
||||
}
|
||||
|
||||
if (args.isEmpty() || args.size > 1) {
|
||||
sender.sendMessage(ChatColor.RED.toString() + "Usage: /bedrockremove <money/materials>")
|
||||
return true
|
||||
}
|
||||
|
||||
val paymentMethod = args[0].lowercase()
|
||||
if (paymentMethod !in paymentMethods) {
|
||||
sender.sendMessage(ChatColor.RED.toString() + "Invalid payment method. Use: money or materials.")
|
||||
return true
|
||||
}
|
||||
|
||||
// Get the block the player is looking at
|
||||
val targetBlock = sender.getTargetBlock(null, 10)
|
||||
if (targetBlock == null || targetBlock.type != Material.BEDROCK) {
|
||||
sender.sendMessage(ChatColor.RED.toString() + "You must be looking at a bedrock block within 10 blocks.")
|
||||
return true
|
||||
}
|
||||
|
||||
// Attempt payment
|
||||
val success = when (paymentMethod) {
|
||||
"money" -> payWithMoney(sender, 100.0)
|
||||
"materials" -> payWithAllMaterials(sender)
|
||||
else -> return false
|
||||
}
|
||||
|
||||
if (!success) {
|
||||
// Error messages are handled in the pay methods
|
||||
return true
|
||||
}
|
||||
|
||||
// Remove the bedrock
|
||||
targetBlock.type = Material.AIR
|
||||
sender.sendMessage(ChatColor.GREEN.toString() + "Bedrock removed successfully!")
|
||||
sender.playSound(sender.location, Sound.BLOCK_STONE_BREAK, 1.0f, 1.0f)
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
private fun payWithMoney(player: Player, amount: Double): Boolean {
|
||||
if (economy == null) {
|
||||
player.sendMessage(ChatColor.RED.toString() + "Economy not available.")
|
||||
return false
|
||||
}
|
||||
val response = economy.withdrawPlayer(player, "Bedrock removal", amount)
|
||||
if (response.type != EconomyResponse.ResponseType.SUCCESS) {
|
||||
player.sendMessage(ChatColor.RED.toString() + "Insufficient funds. You need ${amount}.")
|
||||
return false
|
||||
}
|
||||
player.sendMessage(ChatColor.GREEN.toString() + "Withdrew $amount from your account.")
|
||||
return true
|
||||
}
|
||||
|
||||
private fun payWithMaterial(player: Player, material: Material): Boolean {
|
||||
val inventory = player.inventory
|
||||
|
||||
// Special handling for materials with multiple variants
|
||||
val hasItem = when (material) {
|
||||
Material.OAK_TRAPDOOR -> {
|
||||
// Check for any trapdoor type
|
||||
inventory.contents.any { item -> item != null && item.type.name.endsWith("_TRAPDOOR") }
|
||||
}
|
||||
Material.PISTON -> {
|
||||
// Check for any piston type
|
||||
inventory.contents.any { item -> item != null && (item.type == Material.PISTON || item.type == Material.STICKY_PISTON) }
|
||||
}
|
||||
else -> inventory.contains(material, 1)
|
||||
}
|
||||
|
||||
if (!hasItem) {
|
||||
player.sendMessage(ChatColor.RED.toString() + "You don't have a ${material.name.lowercase()} in your inventory.")
|
||||
return false
|
||||
}
|
||||
|
||||
// Remove the item
|
||||
when (material) {
|
||||
Material.OAK_TRAPDOOR -> {
|
||||
// Find and remove any trapdoor
|
||||
for (item in inventory.contents) {
|
||||
if (item != null && item.type.name.endsWith("_TRAPDOOR")) {
|
||||
val amount = item.amount
|
||||
if (amount > 1) {
|
||||
item.amount = amount - 1
|
||||
} else {
|
||||
inventory.remove(item)
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
Material.PISTON -> {
|
||||
// Find and remove any piston
|
||||
for (item in inventory.contents) {
|
||||
if (item != null && (item.type == Material.PISTON || item.type == Material.STICKY_PISTON)) {
|
||||
val amount = item.amount
|
||||
if (amount > 1) {
|
||||
item.amount = amount - 1
|
||||
} else {
|
||||
inventory.remove(item)
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
else -> {
|
||||
inventory.removeItem(ItemStack(material, 1))
|
||||
}
|
||||
}
|
||||
|
||||
player.sendMessage(ChatColor.GREEN.toString() + "Consumed 1 ${material.name.lowercase()}.")
|
||||
return true
|
||||
}
|
||||
|
||||
private fun payWithAllMaterials(player: Player): Boolean {
|
||||
val inventory = player.inventory
|
||||
|
||||
// Check if player has all required materials
|
||||
for (material in requiredMaterials) {
|
||||
val hasItem = when (material) {
|
||||
Material.OAK_TRAPDOOR -> {
|
||||
// Check for any trapdoor type
|
||||
inventory.contents.any { item -> item != null && item.type.name.endsWith("_TRAPDOOR") }
|
||||
}
|
||||
Material.PISTON -> {
|
||||
// Check for any piston type
|
||||
inventory.contents.any { item -> item != null && (item.type == Material.PISTON || item.type == Material.STICKY_PISTON) }
|
||||
}
|
||||
else -> inventory.contains(material, 1)
|
||||
}
|
||||
if (!hasItem) {
|
||||
player.sendMessage(ChatColor.RED.toString() + "You don't have all required materials: piston, tnt, lever, and trapdoor.")
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
// Remove one of each material
|
||||
for (material in requiredMaterials) {
|
||||
when (material) {
|
||||
Material.OAK_TRAPDOOR -> {
|
||||
// Find and remove any trapdoor
|
||||
for (item in inventory.contents) {
|
||||
if (item != null && item.type.name.endsWith("_TRAPDOOR")) {
|
||||
val amount = item.amount
|
||||
if (amount > 1) {
|
||||
item.amount = amount - 1
|
||||
} else {
|
||||
inventory.remove(item)
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
Material.PISTON -> {
|
||||
// Find and remove any piston
|
||||
for (item in inventory.contents) {
|
||||
if (item != null && (item.type == Material.PISTON || item.type == Material.STICKY_PISTON)) {
|
||||
val amount = item.amount
|
||||
if (amount > 1) {
|
||||
item.amount = amount - 1
|
||||
} else {
|
||||
inventory.remove(item)
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
else -> {
|
||||
inventory.removeItem(ItemStack(material, 1))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
player.sendMessage(ChatColor.GREEN.toString() + "Consumed materials: piston, tnt, lever, trapdoor.")
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
class BedrockRemoverCompleter : TabCompleter {
|
||||
private val paymentMethods = listOf("money", "materials")
|
||||
|
||||
override fun onTabComplete(
|
||||
sender: CommandSender,
|
||||
command: Command,
|
||||
label: String,
|
||||
args: Array<out String>
|
||||
): MutableList<String> {
|
||||
return when (args.size) {
|
||||
1 -> paymentMethods.filter { it.startsWith(args[0], ignoreCase = true) }.toMutableList()
|
||||
else -> mutableListOf()
|
||||
}
|
||||
}
|
||||
}
|
@@ -17,7 +17,16 @@ commands:
|
||||
aliases: ['sn']
|
||||
permission: solar-network.command.sn
|
||||
permission-message: §cYou don't have the permission -> §6[solar-network.command.sn]
|
||||
eatrock:
|
||||
description: Remove bedrock with payment
|
||||
usage: §e/eatrock §r<money/materials>
|
||||
aliases: ['eatrock']
|
||||
permission: solar-network.command.eatrock
|
||||
permission-message: §cYou don't have the permission -> §6[solar-network.command.eatrock]
|
||||
permissions:
|
||||
solar-network.command.sn:
|
||||
description: Permission of uses Solar Network Command
|
||||
default: true
|
||||
default: true
|
||||
solar-network.command.eatrock:
|
||||
description: Permission to remove bedrock with payment
|
||||
default: op
|
||||
|
Reference in New Issue
Block a user