-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* chore: remove useless file * feat: first implementation of Achievement * fix: logger * fix: set better pritority * fix: wrong column in map * fix: rename column to receivedAt * feat: translate * fix: primary key * fix: add fallback note --------- Co-authored-by: Liam Sage <[email protected]>
- Loading branch information
1 parent
95a6733
commit baed7ab
Showing
9 changed files
with
121 additions
and
7 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
41 changes: 41 additions & 0 deletions
41
src/main/kotlin/net/blockventuremc/database/functions/Achievements.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
package net.blockventuremc.database.functions | ||
|
||
import net.blockventuremc.database.model.DatabaseAchievement | ||
import net.blockventuremc.database.smartTransaction | ||
import net.blockventuremc.database.toCalendar | ||
import net.blockventuremc.modules.archievements.model.Achievement | ||
import org.jetbrains.exposed.sql.* | ||
import org.jetbrains.exposed.sql.javatime.CurrentTimestamp | ||
import org.jetbrains.exposed.sql.javatime.timestamp | ||
import java.util.* | ||
|
||
object TableAchievements: Table("achievements") { | ||
val userUUID = varchar("uuid", 45) | ||
|
||
val achievement = enumerationByName("achievement", 24, Achievement::class) | ||
|
||
val receivedAt = timestamp("receivedAt").defaultExpression(CurrentTimestamp()) | ||
|
||
override val primaryKey = PrimaryKey(userUUID, achievement) | ||
} | ||
|
||
private fun mapToDatabaseAchievement(row: ResultRow): DatabaseAchievement = with(row) { | ||
return DatabaseAchievement( | ||
uuid = UUID.fromString(this[TableAchievements.userUUID]), | ||
achievement = this[TableAchievements.achievement], | ||
|
||
receivedAt = this[TableAchievements.receivedAt].toCalendar() | ||
) | ||
} | ||
|
||
fun addAchievementToUser(achievement: DatabaseAchievement) = smartTransaction { | ||
TableAchievements.insert { | ||
it[userUUID] = achievement.uuid.toString() | ||
it[TableAchievements.achievement] = achievement.achievement | ||
it[receivedAt] = achievement.receivedAt.javaInstant | ||
} | ||
} | ||
|
||
fun getAchievementOfUser(uuid: UUID, achievement: Achievement): DatabaseAchievement? = smartTransaction { | ||
return@smartTransaction TableAchievements.selectAll().where { TableAchievements.userUUID eq uuid.toString() and (TableAchievements.achievement eq achievement) }.firstOrNull()?.let(::mapToDatabaseAchievement) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
12 changes: 12 additions & 0 deletions
12
src/main/kotlin/net/blockventuremc/database/model/DatabaseAchievement.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
package net.blockventuremc.database.model | ||
|
||
import dev.fruxz.ascend.tool.time.calendar.Calendar | ||
import net.blockventuremc.modules.archievements.model.Achievement | ||
import java.util.* | ||
|
||
data class DatabaseAchievement( | ||
val uuid: UUID, | ||
val achievement: Achievement, | ||
|
||
val receivedAt: Calendar = Calendar.now() | ||
) |
39 changes: 39 additions & 0 deletions
39
src/main/kotlin/net/blockventuremc/modules/archievements/AchievementManager.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
package net.blockventuremc.modules.archievements | ||
|
||
import dev.fruxz.ascend.extension.logging.getItsLogger | ||
import dev.fruxz.stacked.extension.Title | ||
import dev.fruxz.stacked.text | ||
import net.blockventuremc.database.functions.addAchievementToUser | ||
import net.blockventuremc.database.functions.getAchievementOfUser | ||
import net.blockventuremc.database.model.DatabaseAchievement | ||
import net.blockventuremc.extensions.sendMessagePrefixed | ||
import net.blockventuremc.extensions.toDatabaseUser | ||
import net.blockventuremc.extensions.translate | ||
import net.blockventuremc.modules.archievements.model.Achievement | ||
import org.bukkit.Bukkit | ||
import java.util.* | ||
|
||
object AchievementManager { | ||
private fun addAchievement(uuid: UUID, achievement: Achievement) { | ||
|
||
val player = Bukkit.getPlayer(uuid) ?: return | ||
val title = player.toDatabaseUser().translate("achievement.${achievement.name.lowercase()}.title")?.message ?: achievement.title | ||
val description = player.toDatabaseUser().translate("achievement.${achievement.name.lowercase()}.description")?.message ?: achievement.description | ||
|
||
player.showTitle(Title(text(title), text(description))) | ||
|
||
player.sendMessagePrefixed(player.toDatabaseUser().translate("achievement.achieved", mapOf("achievement" to title)) | ||
?.message ?: "Achievement achieved: $title") | ||
|
||
addAchievementToUser(DatabaseAchievement(uuid, achievement)) | ||
|
||
getItsLogger().info("Added achievement $title to ${player.name}") | ||
|
||
} | ||
|
||
fun addIfNotAchieved(uuid: UUID, achievement: Achievement) { | ||
if (getAchievementOfUser(uuid, achievement) == null) { | ||
addAchievement(uuid, achievement) | ||
} | ||
} | ||
} |
15 changes: 15 additions & 0 deletions
15
src/main/kotlin/net/blockventuremc/modules/archievements/events/FirstJoinEvent.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
package net.blockventuremc.modules.archievements.events | ||
|
||
import net.blockventuremc.modules.archievements.AchievementManager | ||
import net.blockventuremc.modules.archievements.model.Achievement | ||
import org.bukkit.event.EventHandler | ||
import org.bukkit.event.EventPriority | ||
import org.bukkit.event.Listener | ||
import org.bukkit.event.player.PlayerJoinEvent | ||
|
||
class FirstJoinEvent: Listener { | ||
@EventHandler(priority = EventPriority.LOWEST) | ||
fun onFirstJoin(event: PlayerJoinEvent) { | ||
AchievementManager.addIfNotAchieved(event.player.uniqueId, Achievement.FirstJoin) | ||
} | ||
} |
6 changes: 6 additions & 0 deletions
6
src/main/kotlin/net/blockventuremc/modules/archievements/model/Achievement.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
package net.blockventuremc.modules.archievements.model | ||
|
||
// IMPORTANT: title, description are only for fallbacks | ||
enum class Achievement(val title: String, val description: String) { | ||
FirstJoin("First Join", "Join the server for the first time"), | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters