Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/main/kotlin/live/einfachgustaf/smp/Entrypoint.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import live.einfachgustaf.smp.core.database.DatabaseConnector
import live.einfachgustaf.smp.core.feature.FeatureContext
import live.einfachgustaf.smp.core.feature.FeatureManager
import live.einfachgustaf.smp.features.SpawnFeature
import live.einfachgustaf.smp.teams.TeamsFeature
import live.einfachgustaf.smp.utils.registerSimple
import live.einfachgustaf.smp.utils.servicesManager
import org.bukkit.plugin.ServicePriority
Expand All @@ -20,6 +21,7 @@ class Entrypoint: JavaPlugin() {
featureManager = FeatureManager(FeatureContext(this)).apply {
// register all features
register(SpawnFeature())
register(TeamsFeature())
}
databaseConnector = DatabaseConnector(this)

Expand Down
36 changes: 36 additions & 0 deletions src/main/kotlin/live/einfachgustaf/smp/teams/TeamsFeature.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package live.einfachgustaf.smp.teams

import live.einfachgustaf.smp.core.feature.Feature
import live.einfachgustaf.smp.core.feature.FeatureContext
import live.einfachgustaf.smp.teams.api.TeamManager
import live.einfachgustaf.smp.teams.impl.TeamManagerImpl
import live.einfachgustaf.smp.teams.tables.MemberTable
import live.einfachgustaf.smp.teams.tables.TeamTable
import live.einfachgustaf.smp.utils.getSimple
import live.einfachgustaf.smp.utils.registerSimple
import live.einfachgustaf.smp.utils.servicesManager
import org.jetbrains.exposed.v1.jdbc.SchemaUtils
import org.jetbrains.exposed.v1.jdbc.transactions.transaction
import java.util.UUID

class TeamsFeature(override val name: String = "Teams") : Feature {

override fun enable(context: FeatureContext) {
transaction {
SchemaUtils.create(TeamTable, MemberTable)
}

servicesManager.registerSimple<TeamManager>(TeamManagerImpl())

val simple = servicesManager.getSimple(TeamManager::class)

simple!!.createTeam(
name = "Default Team",
shortName = "DT",
owner = UUID.randomUUID(),
color = "#FFFFFF"
)
}

override fun disable() = Unit
}
17 changes: 17 additions & 0 deletions src/main/kotlin/live/einfachgustaf/smp/teams/api/SMPTeam.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package live.einfachgustaf.smp.teams.api

import java.util.UUID

data class SMPTeam(
val id: Int,
val name: String,
val shortName: String,
val owner: UUID,
var color: String,
var maxPlayers: Int
) {

fun update(): Boolean {
TODO("not yet implemented")
}
}
18 changes: 18 additions & 0 deletions src/main/kotlin/live/einfachgustaf/smp/teams/api/TeamManager.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package live.einfachgustaf.smp.teams.api

import java.util.UUID

interface TeamManager {

fun createTeam(
name: String,
shortName: String,
owner: UUID,
color: String = "#FFFFFF"
): Int?

fun updateTeam(
id: Int,
team: SMPTeam
): Boolean
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package live.einfachgustaf.smp.teams.impl

import live.einfachgustaf.smp.teams.tables.TeamTable
import java.util.UUID
import live.einfachgustaf.smp.teams.api.SMPTeam
import live.einfachgustaf.smp.teams.api.TeamManager
import org.jetbrains.exposed.v1.core.SqlExpressionBuilder.eq
import org.jetbrains.exposed.v1.core.SqlExpressionBuilder.neq
import org.jetbrains.exposed.v1.core.and
import org.jetbrains.exposed.v1.core.or
import org.jetbrains.exposed.v1.jdbc.select
import org.jetbrains.exposed.v1.jdbc.transactions.transaction
import org.jetbrains.exposed.v1.jdbc.update
import org.jetbrains.exposed.v1.jdbc.insert

class TeamManagerImpl: TeamManager {

override fun createTeam(
name: String,
shortName: String,
owner: UUID,
color: String
): Int? = transaction {
val exists = TeamTable.select(
(TeamTable.name eq name) or (TeamTable.shortName eq shortName)
).count() > 0

if (exists) return@transaction null

val id = TeamTable.insert {
it[TeamTable.name] = name
it[TeamTable.shortName] = shortName
it[TeamTable.owner] = owner
it[TeamTable.color] = color
it[TeamTable.maxPlayers] = 20 // TODO: config for default max players
}[TeamTable.id]

id
}

override fun updateTeam(id: Int, team: SMPTeam): Boolean = transaction {
val exists = TeamTable.select(
((TeamTable.name eq team.name) or (TeamTable.shortName eq team.shortName)) and (TeamTable.id neq id)
).count() > 0

if (exists) return@transaction false

val updatedRows = TeamTable.update({ TeamTable.id eq id }) {
it[TeamTable.name] = team.name
it[TeamTable.shortName] = team.shortName
it[TeamTable.owner] = team.owner
it[TeamTable.color] = team.color
it[TeamTable.maxPlayers] = team.maxPlayers
}
updatedRows > 0
}
}
10 changes: 10 additions & 0 deletions src/main/kotlin/live/einfachgustaf/smp/teams/tables/MemberTable.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package live.einfachgustaf.smp.teams.tables

import org.jetbrains.exposed.v1.core.Table

object MemberTable : Table("smp_team_members") {
val id = integer("id").autoIncrement() // primary key
val uuid = uuid("uuid").uniqueIndex()
val teamId = integer("team_id").references(TeamTable.id)
override val primaryKey = PrimaryKey(id)
}
13 changes: 13 additions & 0 deletions src/main/kotlin/live/einfachgustaf/smp/teams/tables/TeamTable.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package live.einfachgustaf.smp.teams.tables

import org.jetbrains.exposed.v1.core.Table

object TeamTable : Table("smp_teams") {
val id = integer("id").autoIncrement() // primary key
val name = varchar("name", 32).uniqueIndex()
val shortName = varchar("short_name", 4).uniqueIndex()
val owner = uuid("owner")
val color = varchar("color", 7) // as hex value
val maxPlayers = integer("max_players")
override val primaryKey = PrimaryKey(id)
}