75 lines
2.8 KiB
Kotlin
75 lines
2.8 KiB
Kotlin
package io.dico.parcels2.command
|
|
|
|
import io.dico.dicore.command.CommandException
|
|
import io.dico.dicore.command.EMessageType
|
|
import io.dico.dicore.command.ExecutionContext
|
|
import io.dico.dicore.command.annotation.Cmd
|
|
import io.dico.parcels2.ParcelsPlugin
|
|
import io.dico.parcels2.Privilege
|
|
import io.dico.parcels2.blockvisitor.RegionTraverser
|
|
import io.dico.parcels2.doBlockOperation
|
|
import org.bukkit.Bukkit
|
|
import org.bukkit.Material
|
|
import org.bukkit.block.BlockFace
|
|
import org.bukkit.block.data.Directional
|
|
import org.bukkit.entity.Player
|
|
import java.util.Random
|
|
|
|
class CommandsDebug(plugin: ParcelsPlugin) : AbstractParcelCommands(plugin) {
|
|
|
|
@Cmd("reloadoptions")
|
|
fun reloadOptions() {
|
|
plugin.loadOptions()
|
|
}
|
|
|
|
@Cmd("tpworld")
|
|
fun tpWorld(sender: Player, worldName: String): String {
|
|
if (worldName == "list") {
|
|
return Bukkit.getWorlds().joinToString("\n- ", "- ", "")
|
|
}
|
|
val world = Bukkit.getWorld(worldName) ?: throw CommandException("World $worldName is not loaded")
|
|
sender.teleport(world.spawnLocation)
|
|
return "Teleported you to $worldName spawn"
|
|
}
|
|
|
|
@Cmd("make_mess")
|
|
@RequireParcelPrivilege(Privilege.OWNER)
|
|
fun ParcelScope.cmdMakeMess(context: ExecutionContext) {
|
|
val server = plugin.server
|
|
val blockDatas = arrayOf(
|
|
server.createBlockData(Material.BLUE_WOOL),
|
|
server.createBlockData(Material.LIME_WOOL),
|
|
server.createBlockData(Material.GLASS),
|
|
server.createBlockData(Material.STONE_SLAB),
|
|
server.createBlockData(Material.STONE),
|
|
server.createBlockData(Material.QUARTZ_BLOCK),
|
|
server.createBlockData(Material.BROWN_CONCRETE)
|
|
)
|
|
val random = Random()
|
|
|
|
world.blockManager.doBlockOperation(parcel.id, traverser = RegionTraverser.upward) { block ->
|
|
block.blockData = blockDatas[random.nextInt(7)]
|
|
}.onProgressUpdate(1000, 1000) { progress, elapsedTime ->
|
|
context.sendMessage(
|
|
EMessageType.INFORMATIVE, "Mess progress: %.02f%%, %.2fs elapsed"
|
|
.format(progress * 100, elapsedTime / 1000.0)
|
|
)
|
|
}
|
|
}
|
|
|
|
@Cmd("directionality", aliases = ["dir"])
|
|
fun cmdDirectionality(sender: Player, context: ExecutionContext, material: Material): Any? {
|
|
val senderLoc = sender.location
|
|
val block = senderLoc.add(senderLoc.direction.setY(0).normalize().multiply(2).toLocation(sender.world)).block
|
|
|
|
val blockData = Bukkit.createBlockData(material)
|
|
if (blockData is Directional) {
|
|
blockData.facing = BlockFace.SOUTH
|
|
}
|
|
|
|
block.blockData = blockData
|
|
return if (blockData is Directional) "The block is facing south" else "The block is not directional, however it implements " +
|
|
blockData.javaClass.interfaces!!.contentToString()
|
|
}
|
|
|
|
} |