Initial commit
This commit is contained in:
commit
144d2d3025
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
**/build/
|
||||
.gradle/
|
||||
.idea/
|
42
VoidPlugin/build.gradle
Normal file
42
VoidPlugin/build.gradle
Normal file
|
@ -0,0 +1,42 @@
|
|||
plugins {
|
||||
id 'java'
|
||||
id 'org.jetbrains.kotlin.jvm'
|
||||
id 'com.github.johnrengelman.shadow'
|
||||
id 'net.minecrell.plugin-yml.bukkit'
|
||||
}
|
||||
|
||||
|
||||
dependencies {
|
||||
api "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
|
||||
api 'org.jetbrains.exposed:exposed:0.17.1'
|
||||
implementation "com.squareup.moshi:moshi-kotlin:1.8.0"
|
||||
implementation group: 'org.xerial', name: 'sqlite-jdbc', version: '3.28.0'
|
||||
}
|
||||
|
||||
bukkit {
|
||||
main = "nl.voidcorp.mainplugin.VoidPlugin"
|
||||
apiVersion = '1.13'
|
||||
author = 'J00LZ'
|
||||
commands {
|
||||
memes {
|
||||
description = "Memes"
|
||||
}
|
||||
nick {
|
||||
description = "Set a nickname (prolly broken if im honest)"
|
||||
}
|
||||
heal {
|
||||
description = "Heal yourself (if you have the permissions to do so)"
|
||||
permission = 'voidplugin.heal'
|
||||
permissionMessage = 'You are not allowed to heal yourself!'
|
||||
}
|
||||
}
|
||||
permissions {
|
||||
'voidplugin.*' {
|
||||
children = ['voidplugin.heal']
|
||||
}
|
||||
'voidplugin.heal' {
|
||||
description = 'Allows you to heal'
|
||||
setDefault('OP') // 'TRUE', 'FALSE', 'OP' or 'NOT_OP'
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
package nl.voidcorp.mainplugin
|
||||
|
||||
import nl.voidcorp.mainplugin.commands.VoidCommand
|
||||
import org.bukkit.command.Command
|
||||
import org.bukkit.command.CommandSender
|
||||
import org.bukkit.command.TabExecutor
|
||||
|
||||
class CommandHandler(
|
||||
private val plugin: VoidPluginBase
|
||||
) : TabExecutor {
|
||||
private val commands: MutableMap<String, VoidCommand> = mutableMapOf()
|
||||
|
||||
override fun onTabComplete(
|
||||
sender: CommandSender,
|
||||
command: Command,
|
||||
alias: String,
|
||||
args: Array<out String>
|
||||
) = commands[command.name]?.onTabComplete(sender, command, alias, args) ?: mutableListOf()
|
||||
|
||||
|
||||
override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<out String>): Boolean {
|
||||
return commands[command.name]?.onCommand(sender, command, label, args) ?: false
|
||||
}
|
||||
|
||||
fun registerCommand(commandName: String, command: VoidCommand): CommandHandler {
|
||||
plugin.getCommand(commandName)?.setExecutor(this)
|
||||
commands[commandName] = command
|
||||
return this
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
package nl.voidcorp.mainplugin
|
||||
|
||||
data class Config(
|
||||
var databaseUrl: String = "jdbc:sqlite:plugins/VoidPlugin/voidplugin.db",
|
||||
val driver: String = "org.sqlite.JDBC"
|
||||
)
|
|
@ -0,0 +1,18 @@
|
|||
package nl.voidcorp.mainplugin
|
||||
|
||||
import org.jetbrains.exposed.dao.EntityID
|
||||
import org.jetbrains.exposed.dao.IntEntity
|
||||
import org.jetbrains.exposed.dao.IntEntityClass
|
||||
import org.jetbrains.exposed.dao.IntIdTable
|
||||
|
||||
object NickTable : IntIdTable() {
|
||||
val userid = uuid("userid").uniqueIndex()
|
||||
val nickname = varchar("nickname", 50)
|
||||
}
|
||||
|
||||
class Nick(id: EntityID<Int>) : IntEntity(id) {
|
||||
companion object : IntEntityClass<Nick>(NickTable)
|
||||
|
||||
var userid by NickTable.userid
|
||||
var nickname by NickTable.nickname
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
package nl.voidcorp.mainplugin
|
||||
|
||||
import com.squareup.moshi.JsonAdapter
|
||||
import com.squareup.moshi.Moshi
|
||||
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
|
||||
|
||||
val moshi: Moshi = Moshi.Builder().add(KotlinJsonAdapterFactory()).build()
|
||||
|
||||
inline fun <reified T> Moshi.adapter(): JsonAdapter<T> = this.adapter(T::class.java).indent(" ")
|
|
@ -0,0 +1,21 @@
|
|||
package nl.voidcorp.mainplugin
|
||||
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.player.PlayerJoinEvent
|
||||
import org.jetbrains.exposed.sql.transactions.transaction
|
||||
|
||||
|
||||
object VoidEvents : Listener {
|
||||
|
||||
@EventHandler
|
||||
fun onJoin(evt: PlayerJoinEvent) {
|
||||
transaction {
|
||||
val nick = Nick.find { NickTable.userid eq evt.player.uniqueId }.firstOrNull()?.nickname
|
||||
if (nick != null) {
|
||||
evt.player.setDisplayName(nick)
|
||||
}
|
||||
}
|
||||
evt.joinMessage = "Hello ${evt.player.displayName}, and welcome to the server!"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
package nl.voidcorp.mainplugin
|
||||
|
||||
import nl.voidcorp.mainplugin.commands.HealCommand
|
||||
import nl.voidcorp.mainplugin.commands.MemeCommand
|
||||
import nl.voidcorp.mainplugin.commands.NickCommand
|
||||
import nl.voidcorp.mainplugin.messaging.Message
|
||||
import nl.voidcorp.mainplugin.messaging.MessageType
|
||||
import org.jetbrains.exposed.sql.Database
|
||||
import org.jetbrains.exposed.sql.SchemaUtils
|
||||
import org.jetbrains.exposed.sql.transactions.transaction
|
||||
import java.io.File
|
||||
|
||||
class VoidPlugin(
|
||||
override val comment: String = "What are we going to do today?"
|
||||
) : VoidPluginBase() {
|
||||
lateinit var conf: Config
|
||||
var db: Database? = null
|
||||
|
||||
override fun enable() {
|
||||
server.pluginManager.registerEvents(VoidEvents, this)
|
||||
CommandHandler(this)
|
||||
.registerCommand("memes", MemeCommand())
|
||||
.registerCommand("nick", NickCommand())
|
||||
.registerCommand("heal", HealCommand())
|
||||
|
||||
send(name, MessageType.GET_CONFIG)
|
||||
send(name, MessageType.POST_CONFIG, moshi.adapter<Config>().toJson(conf))
|
||||
if (db == null)
|
||||
db = Database.connect(
|
||||
conf.databaseUrl,
|
||||
driver = conf.driver
|
||||
)
|
||||
transaction {
|
||||
SchemaUtils.createMissingTablesAndColumns(NickTable)
|
||||
}
|
||||
}
|
||||
|
||||
override fun disable() {
|
||||
send(name, MessageType.POST_CONFIG, moshi.adapter<Config>().toJson(conf))
|
||||
}
|
||||
|
||||
override fun recieve(message: Message) {
|
||||
when (message.messageType) {
|
||||
MessageType.POST_CONFIG -> {
|
||||
writeConfig(message.from, message.content)
|
||||
logger.info("Saved config for ${message.from}")
|
||||
}
|
||||
MessageType.GET_CONFIG -> {
|
||||
if (message.from == name) {
|
||||
conf = moshi.adapter<Config>().fromJson(readConfig(name))!!
|
||||
} else {
|
||||
send(message.from, MessageType.GET_CONFIG, readConfig(message.from))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun readConfig(filename: String): String {
|
||||
val config = File(dataFolder.apply { mkdirs() }, "$filename.json")
|
||||
if (!config.exists()) {
|
||||
config.createNewFile()
|
||||
return "{}"
|
||||
}
|
||||
return config.readText()
|
||||
}
|
||||
|
||||
private fun writeConfig(filename: String, configString: String) {
|
||||
val config = File(dataFolder.apply { mkdirs() }, "$filename.json")
|
||||
config.writeText(configString)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
package nl.voidcorp.mainplugin
|
||||
|
||||
import nl.voidcorp.mainplugin.messaging.Message
|
||||
import nl.voidcorp.mainplugin.messaging.MessageType
|
||||
import org.bukkit.plugin.java.JavaPlugin
|
||||
|
||||
abstract class VoidPluginBase : JavaPlugin() {
|
||||
|
||||
final override fun onLoad() {
|
||||
plugins += this
|
||||
load()
|
||||
}
|
||||
|
||||
final override fun onEnable() {
|
||||
enable()
|
||||
memeLog()
|
||||
}
|
||||
|
||||
final override fun onDisable() {
|
||||
disable()
|
||||
}
|
||||
|
||||
open fun load() {}
|
||||
|
||||
open fun enable() {}
|
||||
|
||||
open fun disable() {}
|
||||
|
||||
open fun recieve(message: Message) {}
|
||||
|
||||
open fun send(message: Message) {
|
||||
pluginMap[message.to]?.recieve(message)
|
||||
}
|
||||
|
||||
fun send(to: String, messageType: MessageType, content: String = "") = send(Message(to, name, content, messageType))
|
||||
|
||||
abstract val comment: String
|
||||
|
||||
var doMeme = false
|
||||
|
||||
private fun memeLog() {
|
||||
plugins.last().doMeme = true
|
||||
if (doMeme)
|
||||
for (plugin in plugins) {
|
||||
plugin.logger.info(plugin.comment)
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val plugins = mutableListOf<VoidPluginBase>()
|
||||
internal val pluginMap: Map<String, VoidPluginBase>
|
||||
get() = plugins.map { it.name to it }.toMap()
|
||||
}
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
package nl.voidcorp.mainplugin.commands
|
||||
|
||||
import org.bukkit.attribute.Attribute
|
||||
import org.bukkit.command.Command
|
||||
import org.bukkit.command.CommandSender
|
||||
import org.bukkit.entity.Player
|
||||
|
||||
class HealCommand : VoidCommand() {
|
||||
override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<out String>): Boolean {
|
||||
if (!sender.hasPermission("voidplugin.heal")) return false
|
||||
if (sender is Player) {
|
||||
sender.health = sender.getAttribute(Attribute.GENERIC_MAX_HEALTH)!!.value
|
||||
sender.saturation = 20f
|
||||
sender.foodLevel = 20
|
||||
sender.sendMessage("All better now")
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
package nl.voidcorp.mainplugin.commands
|
||||
|
||||
import org.bukkit.Sound
|
||||
import org.bukkit.SoundCategory
|
||||
import org.bukkit.command.Command
|
||||
import org.bukkit.command.CommandSender
|
||||
import org.bukkit.entity.Player
|
||||
|
||||
class MemeCommand : VoidCommand() {
|
||||
override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<out String>): Boolean {
|
||||
if (sender is Player) {
|
||||
sender.playSound(sender.location, Sound.ENTITY_CREEPER_PRIMED, SoundCategory.BLOCKS, 10.0f, 1.0f)
|
||||
sender.sendTitle("Memes", "That's a creeper", 10, 60, 10)
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
package nl.voidcorp.mainplugin.commands
|
||||
|
||||
import nl.voidcorp.mainplugin.Nick
|
||||
import nl.voidcorp.mainplugin.NickTable
|
||||
import org.bukkit.ChatColor
|
||||
import org.bukkit.command.Command
|
||||
import org.bukkit.command.CommandSender
|
||||
import org.bukkit.entity.Player
|
||||
import org.jetbrains.exposed.sql.transactions.transaction
|
||||
|
||||
class NickCommand : VoidCommand() {
|
||||
override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<out String>): Boolean {
|
||||
if (sender is Player) {
|
||||
if (args.isEmpty()) {
|
||||
sender.sendMessage("Your nickname is ${sender.displayName}")
|
||||
} else {
|
||||
val nick = args[0]
|
||||
|
||||
transaction {
|
||||
val n = Nick.find { NickTable.userid eq sender.uniqueId }.firstOrNull()
|
||||
if (n != null) {
|
||||
n.nickname = nick + ChatColor.RESET
|
||||
} else {
|
||||
Nick.new {
|
||||
userid = sender.uniqueId
|
||||
nickname = nick + ChatColor.RESET
|
||||
}
|
||||
}
|
||||
}
|
||||
sender.setDisplayName(nick)
|
||||
sender.sendMessage("Set nickname to ${sender.displayName}")
|
||||
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
package nl.voidcorp.mainplugin.commands
|
||||
|
||||
import org.bukkit.command.Command
|
||||
import org.bukkit.command.CommandSender
|
||||
import org.bukkit.command.TabExecutor
|
||||
|
||||
abstract class VoidCommand : TabExecutor {
|
||||
override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<out String>): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun onTabComplete(
|
||||
sender: CommandSender,
|
||||
command: Command,
|
||||
alias: String,
|
||||
args: Array<out String>
|
||||
): List<String> {
|
||||
return mutableListOf()
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
package nl.voidcorp.mainplugin.messaging
|
||||
|
||||
data class Message(val to: String, val from: String, val content: String, val messageType: MessageType)
|
|
@ -0,0 +1,6 @@
|
|||
package nl.voidcorp.mainplugin.messaging
|
||||
|
||||
enum class MessageType {
|
||||
POST_CONFIG,
|
||||
GET_CONFIG
|
||||
}
|
54
VoidTeleport/build.gradle
Normal file
54
VoidTeleport/build.gradle
Normal file
|
@ -0,0 +1,54 @@
|
|||
plugins {
|
||||
id 'java'
|
||||
id 'org.jetbrains.kotlin.jvm'
|
||||
id 'com.github.johnrengelman.shadow'
|
||||
id 'net.minecrell.plugin-yml.bukkit'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compileOnly project(":VoidPlugin")
|
||||
}
|
||||
|
||||
bukkit {
|
||||
main = "nl.voidcorp.teleportplugin.VoidTeleport"
|
||||
apiVersion = '1.13'
|
||||
author = 'J00LZ'
|
||||
depend = ['VoidPlugin']
|
||||
commands {
|
||||
home {
|
||||
description = "Teleport to a home"
|
||||
}
|
||||
sethome {
|
||||
description = "Set a home"
|
||||
}
|
||||
delhome {
|
||||
description = "Delete a home"
|
||||
}
|
||||
warp {
|
||||
description = "Warp to a location"
|
||||
}
|
||||
spawn {
|
||||
description = "Warp to the worldspawn"
|
||||
}
|
||||
}
|
||||
|
||||
permissions {
|
||||
'voidteleport.*' {
|
||||
children = ['voidteleport.setspawn']
|
||||
}
|
||||
'voidteleport.home' {
|
||||
description = "Allows setting a home and teleporting to it"
|
||||
setDefault("true")
|
||||
}
|
||||
'voidteleport.setspawn' {
|
||||
description = "Allows setting the worldspawn to a different location"
|
||||
setDefault("OP")
|
||||
}
|
||||
'voidteleport.spawn' {
|
||||
description = "Allows usage of the spawn command"
|
||||
setDefault("true")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
package nl.voidcorp.teleportplugin
|
||||
|
||||
data class Config(val allowHome: Boolean = true, val allowSpawn: Boolean = true, val allowTpx: Boolean = true)
|
|
@ -0,0 +1,26 @@
|
|||
package nl.voidcorp.teleportplugin
|
||||
|
||||
import nl.voidcorp.mainplugin.CommandHandler
|
||||
import nl.voidcorp.mainplugin.VoidPluginBase
|
||||
import nl.voidcorp.teleportplugin.commands.*
|
||||
import nl.voidcorp.teleportplugin.models.Homes
|
||||
import nl.voidcorp.teleportplugin.models.Warps
|
||||
import org.jetbrains.exposed.sql.SchemaUtils
|
||||
import org.jetbrains.exposed.sql.transactions.transaction
|
||||
|
||||
class VoidTeleport(override val comment: String = "Teleport around :D") :
|
||||
VoidPluginBase() {
|
||||
|
||||
override fun enable() {
|
||||
CommandHandler(this)
|
||||
.registerCommand("sethome", SetHomeCommand())
|
||||
.registerCommand("home", HomeCommand())
|
||||
.registerCommand("delhome", DelHomeCommand())
|
||||
.registerCommand("warp", WarpCommand())
|
||||
.registerCommand("spawn",SpawnCommand())
|
||||
.registerCommand("setworldspawn", SetWorldspawnCommand())
|
||||
transaction {
|
||||
SchemaUtils.createMissingTablesAndColumns(Homes, Warps)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
package nl.voidcorp.teleportplugin.commands
|
||||
|
||||
import nl.voidcorp.mainplugin.commands.VoidCommand
|
||||
import nl.voidcorp.teleportplugin.models.Homes
|
||||
import org.bukkit.command.Command
|
||||
import org.bukkit.command.CommandSender
|
||||
import org.bukkit.entity.Player
|
||||
import org.jetbrains.exposed.sql.Op
|
||||
import org.jetbrains.exposed.sql.and
|
||||
import org.jetbrains.exposed.sql.deleteWhere
|
||||
import org.jetbrains.exposed.sql.select
|
||||
import org.jetbrains.exposed.sql.transactions.transaction
|
||||
|
||||
class DelHomeCommand : VoidCommand() {
|
||||
override fun onTabComplete(
|
||||
sender: CommandSender,
|
||||
command: Command,
|
||||
alias: String,
|
||||
args: Array<out String>
|
||||
): MutableList<String> {
|
||||
return if (sender is Player) {
|
||||
val current = args.lastOrNull()
|
||||
transaction {
|
||||
Homes.select {
|
||||
(Homes.userid eq sender.uniqueId) and if (current != null) (Homes.name like "$current%") else Op.TRUE
|
||||
}.map { it[Homes.name] }.toMutableList()
|
||||
}
|
||||
|
||||
} else mutableListOf()
|
||||
}
|
||||
|
||||
override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<out String>): Boolean {
|
||||
if (sender is Player) {
|
||||
|
||||
transaction {
|
||||
Homes.deleteWhere {
|
||||
(Homes.userid eq sender.uniqueId) and
|
||||
(Homes.name eq (args.firstOrNull() ?: "home"))
|
||||
}
|
||||
|
||||
commit()
|
||||
sender.sendMessage("Delete home '${args.firstOrNull() ?: "home"}'")
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
package nl.voidcorp.teleportplugin.commands
|
||||
|
||||
import nl.voidcorp.mainplugin.commands.VoidCommand
|
||||
import nl.voidcorp.teleportplugin.models.Home
|
||||
import nl.voidcorp.teleportplugin.models.Homes
|
||||
import org.bukkit.command.Command
|
||||
import org.bukkit.command.CommandSender
|
||||
import org.bukkit.entity.Player
|
||||
import org.jetbrains.exposed.sql.and
|
||||
import org.jetbrains.exposed.sql.transactions.transaction
|
||||
|
||||
class HomeCommand : VoidCommand() {
|
||||
override fun onTabComplete(
|
||||
sender: CommandSender,
|
||||
command: Command,
|
||||
alias: String,
|
||||
args: Array<out String>
|
||||
): List<String> {
|
||||
return if (sender is Player) {
|
||||
val current = args.lastOrNull()
|
||||
transaction {
|
||||
Home.find { (Homes.userid eq sender.uniqueId) and (Homes.name like "$current%") }
|
||||
.map { it.name }.toList()
|
||||
}
|
||||
|
||||
} else mutableListOf()
|
||||
}
|
||||
|
||||
override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<out String>): Boolean {
|
||||
return if (sender is Player) {
|
||||
val where = args.firstOrNull() ?: "home"
|
||||
transaction {
|
||||
val res = Home.find { (Homes.userid eq sender.uniqueId) and (Homes.name eq where) }.firstOrNull()
|
||||
if (res == null) {
|
||||
sender.sendMessage("The home '$where' does not exist!")
|
||||
} else {
|
||||
sender.teleport(res.location)
|
||||
}
|
||||
}
|
||||
true
|
||||
} else false
|
||||
}
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
package nl.voidcorp.teleportplugin.commands
|
||||
|
||||
import nl.voidcorp.mainplugin.commands.VoidCommand
|
||||
import nl.voidcorp.teleportplugin.models.Home
|
||||
import nl.voidcorp.teleportplugin.models.Homes
|
||||
import org.bukkit.command.Command
|
||||
import org.bukkit.command.CommandSender
|
||||
import org.bukkit.entity.Player
|
||||
import org.jetbrains.exposed.sql.and
|
||||
import org.jetbrains.exposed.sql.select
|
||||
import org.jetbrains.exposed.sql.transactions.transaction
|
||||
|
||||
class SetHomeCommand : VoidCommand() {
|
||||
override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<out String>): Boolean {
|
||||
if (sender is Player) {
|
||||
|
||||
transaction {
|
||||
val home = Home.find {
|
||||
(Homes.userid eq sender.uniqueId) and
|
||||
(Homes.name eq (args.firstOrNull() ?: "home"))
|
||||
}.any()
|
||||
if (home) {
|
||||
sender.sendMessage("The home '${args.firstOrNull() ?: "home"}' already exists!")
|
||||
} else {
|
||||
val name = args.firstOrNull() ?: "home"
|
||||
Home.new {
|
||||
location = sender.location
|
||||
this.name = name
|
||||
userId = sender.uniqueId
|
||||
}
|
||||
sender.sendMessage("Created home '$name'")
|
||||
}
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
package nl.voidcorp.teleportplugin.commands
|
||||
|
||||
import nl.voidcorp.mainplugin.commands.VoidCommand
|
||||
import org.bukkit.command.Command
|
||||
import org.bukkit.command.CommandSender
|
||||
import org.bukkit.entity.Player
|
||||
|
||||
class SetWorldspawnCommand : VoidCommand() {
|
||||
override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<out String>): Boolean {
|
||||
if ((sender is Player) && sender.hasPermission("voidteleport.setspawn")) {
|
||||
sender.world.spawnLocation = sender.location
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
package nl.voidcorp.teleportplugin.commands
|
||||
|
||||
import nl.voidcorp.mainplugin.commands.VoidCommand
|
||||
import org.bukkit.command.Command
|
||||
import org.bukkit.command.CommandSender
|
||||
import org.bukkit.entity.Player
|
||||
|
||||
class SpawnCommand : VoidCommand() {
|
||||
override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<out String>): Boolean {
|
||||
if ((sender is Player) && sender.hasPermission("voidteleport.spawn")) {
|
||||
sender.teleport(sender.world.spawnLocation)
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
package nl.voidcorp.teleportplugin.commands
|
||||
|
||||
import nl.voidcorp.mainplugin.commands.VoidCommand
|
||||
import nl.voidcorp.teleportplugin.models.Warps
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.Location
|
||||
import org.bukkit.command.Command
|
||||
import org.bukkit.command.CommandSender
|
||||
import org.bukkit.entity.Player
|
||||
import org.jetbrains.exposed.sql.select
|
||||
import org.jetbrains.exposed.sql.transactions.transaction
|
||||
|
||||
class WarpCommand : VoidCommand() {
|
||||
override fun onTabComplete(
|
||||
sender: CommandSender,
|
||||
command: Command,
|
||||
alias: String,
|
||||
args: Array<out String>
|
||||
): List<String> {
|
||||
return if (sender is Player) {
|
||||
transaction {
|
||||
Warps.select { Warps.name like "${args.lastOrNull() ?: ""}%" }.map { it[Warps.name] }
|
||||
}
|
||||
} else mutableListOf()
|
||||
}
|
||||
|
||||
override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<out String>): Boolean {
|
||||
return if (sender is Player) {
|
||||
val where = args.firstOrNull() ?: return false
|
||||
transaction {
|
||||
val res = Warps.select { (Warps.name eq where) }.firstOrNull()
|
||||
if (res == null) {
|
||||
sender.sendMessage("The warp '$where' does not exist!")
|
||||
} else {
|
||||
val w = Bukkit.getWorld(res[Warps.world]) ?: throw NullPointerException()
|
||||
val loc = Location(w, res[Warps.x], res[Warps.y], res[Warps.z], res[Warps.yaw], res[Warps.pitch])
|
||||
sender.teleport(loc)
|
||||
}
|
||||
}
|
||||
true
|
||||
} else false
|
||||
}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
package nl.voidcorp.teleportplugin.models
|
||||
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.Location
|
||||
import org.jetbrains.exposed.dao.EntityID
|
||||
import org.jetbrains.exposed.dao.IntEntity
|
||||
import org.jetbrains.exposed.dao.IntEntityClass
|
||||
|
||||
class Home(id: EntityID<Int>) : IntEntity(id) {
|
||||
companion object : IntEntityClass<Home>(Homes)
|
||||
|
||||
var userId by Homes.userid
|
||||
var x by Homes.x
|
||||
var y by Homes.y
|
||||
var z by Homes.z
|
||||
var world by Homes.world
|
||||
var pitch by Homes.pitch
|
||||
var yaw by Homes.yaw
|
||||
var name by Homes.name
|
||||
var location: Location
|
||||
get() = Location(Bukkit.getWorld(world), x, y, z, yaw, pitch)
|
||||
set(value) {
|
||||
this.x = value.x
|
||||
this.y = value.y
|
||||
this.z = value.z
|
||||
this.world = value.world.uid
|
||||
this.yaw = value.yaw
|
||||
this.pitch = value.pitch
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
package nl.voidcorp.teleportplugin.models
|
||||
|
||||
import org.jetbrains.exposed.dao.IntIdTable
|
||||
|
||||
object Homes : IntIdTable() {
|
||||
val userid = uuid("userid")
|
||||
val x = double("x")
|
||||
val y = double("y")
|
||||
val z = double("z")
|
||||
val world = uuid("world")
|
||||
val pitch = float("pitch").default(0.0f)
|
||||
val yaw = float("yaw").default(0.0f)
|
||||
val name = varchar("name", 50)
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
package nl.voidcorp.teleportplugin.models
|
||||
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.Location
|
||||
import org.jetbrains.exposed.dao.EntityID
|
||||
import org.jetbrains.exposed.dao.IntEntity
|
||||
import org.jetbrains.exposed.dao.IntEntityClass
|
||||
|
||||
class Warp(id: EntityID<Int>) : IntEntity(id) {
|
||||
companion object : IntEntityClass<Warp>(Warps)
|
||||
|
||||
var x by Warps.x
|
||||
var y by Warps.y
|
||||
var z by Warps.z
|
||||
var world by Warps.world
|
||||
var pitch by Warps.pitch
|
||||
var yaw by Warps.yaw
|
||||
var name by Warps.name
|
||||
var location: Location
|
||||
get() = Location(Bukkit.getWorld(world), x, y, z, yaw, pitch)
|
||||
set(value) {
|
||||
this.x = value.x
|
||||
this.y = value.y
|
||||
this.z = value.z
|
||||
this.world = value.world.uid
|
||||
this.yaw = value.yaw
|
||||
this.pitch = value.pitch
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package nl.voidcorp.teleportplugin.models
|
||||
|
||||
import org.jetbrains.exposed.dao.IntIdTable
|
||||
|
||||
object Warps : IntIdTable() {
|
||||
val world = uuid("world")
|
||||
val x = double("x")
|
||||
val y = double("y")
|
||||
val z = double("z")
|
||||
val pitch = float("pitch")
|
||||
val yaw = float("yaw")
|
||||
val name = varchar("name", 50).uniqueIndex()
|
||||
}
|
45
build.gradle
Normal file
45
build.gradle
Normal file
|
@ -0,0 +1,45 @@
|
|||
plugins {
|
||||
id 'org.jetbrains.kotlin.jvm' version '1.3.41' apply false
|
||||
id 'com.github.johnrengelman.shadow' version '5.1.0' apply false
|
||||
id 'net.minecrell.plugin-yml.bukkit' version '0.3.0' apply false
|
||||
}
|
||||
|
||||
subprojects {
|
||||
apply plugin: 'java'
|
||||
apply plugin: 'org.jetbrains.kotlin.jvm'
|
||||
apply plugin: 'com.github.johnrengelman.shadow'
|
||||
apply plugin: 'net.minecrell.plugin-yml.bukkit'
|
||||
|
||||
repositories {
|
||||
jcenter()
|
||||
maven {
|
||||
url 'https://papermc.io/repo/repository/maven-public/'
|
||||
}
|
||||
maven {
|
||||
url 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/'
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
testCompile group: 'junit', name: 'junit', version: '4.12'
|
||||
compileOnly 'com.destroystokyo.paper:paper-api:1.13.2-R0.1-SNAPSHOT'
|
||||
}
|
||||
|
||||
compileKotlin {
|
||||
kotlinOptions.jvmTarget = "1.8"
|
||||
}
|
||||
compileTestKotlin {
|
||||
kotlinOptions.jvmTarget = "1.8"
|
||||
}
|
||||
|
||||
group 'nl.voidcorp.paperplugin'
|
||||
version '1.0'
|
||||
|
||||
sourceCompatibility = 1.8
|
||||
|
||||
|
||||
shadowJar {
|
||||
destinationDirectory = file("$rootDir/build/libs")
|
||||
getArchiveClassifier().set(null)
|
||||
}
|
||||
}
|
1
gradle.properties
Normal file
1
gradle.properties
Normal file
|
@ -0,0 +1 @@
|
|||
kotlin.code.style=official
|
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
Binary file not shown.
5
gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
5
gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
|
@ -0,0 +1,5 @@
|
|||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6-all.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
172
gradlew
vendored
Normal file
172
gradlew
vendored
Normal file
|
@ -0,0 +1,172 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
##############################################################################
|
||||
##
|
||||
## Gradle start up script for UN*X
|
||||
##
|
||||
##############################################################################
|
||||
|
||||
# Attempt to set APP_HOME
|
||||
# Resolve links: $0 may be a link
|
||||
PRG="$0"
|
||||
# Need this for relative symlinks.
|
||||
while [ -h "$PRG" ] ; do
|
||||
ls=`ls -ld "$PRG"`
|
||||
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||
if expr "$link" : '/.*' > /dev/null; then
|
||||
PRG="$link"
|
||||
else
|
||||
PRG=`dirname "$PRG"`"/$link"
|
||||
fi
|
||||
done
|
||||
SAVED="`pwd`"
|
||||
cd "`dirname \"$PRG\"`/" >/dev/null
|
||||
APP_HOME="`pwd -P`"
|
||||
cd "$SAVED" >/dev/null
|
||||
|
||||
APP_NAME="Gradle"
|
||||
APP_BASE_NAME=`basename "$0"`
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS=""
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD="maximum"
|
||||
|
||||
warn () {
|
||||
echo "$*"
|
||||
}
|
||||
|
||||
die () {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
exit 1
|
||||
}
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
nonstop=false
|
||||
case "`uname`" in
|
||||
CYGWIN* )
|
||||
cygwin=true
|
||||
;;
|
||||
Darwin* )
|
||||
darwin=true
|
||||
;;
|
||||
MINGW* )
|
||||
msys=true
|
||||
;;
|
||||
NONSTOP* )
|
||||
nonstop=true
|
||||
;;
|
||||
esac
|
||||
|
||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
# Determine the Java command to use to start the JVM.
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
# IBM's JDK on AIX uses strange locations for the executables
|
||||
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||
else
|
||||
JAVACMD="$JAVA_HOME/bin/java"
|
||||
fi
|
||||
if [ ! -x "$JAVACMD" ] ; then
|
||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
else
|
||||
JAVACMD="java"
|
||||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
|
||||
# Increase the maximum file descriptors if we can.
|
||||
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
|
||||
MAX_FD_LIMIT=`ulimit -H -n`
|
||||
if [ $? -eq 0 ] ; then
|
||||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
||||
MAX_FD="$MAX_FD_LIMIT"
|
||||
fi
|
||||
ulimit -n $MAX_FD
|
||||
if [ $? -ne 0 ] ; then
|
||||
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
||||
fi
|
||||
else
|
||||
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
||||
fi
|
||||
fi
|
||||
|
||||
# For Darwin, add options to specify how the application appears in the dock
|
||||
if $darwin; then
|
||||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||
fi
|
||||
|
||||
# For Cygwin, switch paths to Windows format before running java
|
||||
if $cygwin ; then
|
||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||
|
||||
# We build the pattern for arguments to be converted via cygpath
|
||||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
||||
SEP=""
|
||||
for dir in $ROOTDIRSRAW ; do
|
||||
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
||||
SEP="|"
|
||||
done
|
||||
OURCYGPATTERN="(^($ROOTDIRS))"
|
||||
# Add a user-defined pattern to the cygpath arguments
|
||||
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
||||
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
||||
fi
|
||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||
i=0
|
||||
for arg in "$@" ; do
|
||||
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
||||
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
||||
|
||||
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
||||
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
||||
else
|
||||
eval `echo args$i`="\"$arg\""
|
||||
fi
|
||||
i=$((i+1))
|
||||
done
|
||||
case $i in
|
||||
(0) set -- ;;
|
||||
(1) set -- "$args0" ;;
|
||||
(2) set -- "$args0" "$args1" ;;
|
||||
(3) set -- "$args0" "$args1" "$args2" ;;
|
||||
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Escape application args
|
||||
save () {
|
||||
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
||||
echo " "
|
||||
}
|
||||
APP_ARGS=$(save "$@")
|
||||
|
||||
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
||||
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
||||
|
||||
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
|
||||
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
|
||||
cd "$(dirname "$0")"
|
||||
fi
|
||||
|
||||
exec "$JAVACMD" "$@"
|
84
gradlew.bat
vendored
Normal file
84
gradlew.bat
vendored
Normal file
|
@ -0,0 +1,84 @@
|
|||
@if "%DEBUG%" == "" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%" == "" set DIRNAME=.
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS=
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if "%ERRORLEVEL%" == "0" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:findJavaFromJavaHome
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:init
|
||||
@rem Get command-line arguments, handling Windows variants
|
||||
|
||||
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||
|
||||
:win9xME_args
|
||||
@rem Slurp the command line arguments.
|
||||
set CMD_LINE_ARGS=
|
||||
set _SKIP=2
|
||||
|
||||
:win9xME_args_slurp
|
||||
if "x%~1" == "x" goto execute
|
||||
|
||||
set CMD_LINE_ARGS=%*
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||
exit /b 1
|
||||
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
||||
:omega
|
4
settings.gradle
Normal file
4
settings.gradle
Normal file
|
@ -0,0 +1,4 @@
|
|||
rootProject.name = 'VoidPluginBase'
|
||||
|
||||
include 'VoidTeleport'
|
||||
include 'VoidPlugin'
|
Loading…
Reference in a new issue