Skip to content

Commit 9856f37

Browse files
committed
Added StorageBase class and HomeModel data class.
Added loading and saving home data.
1 parent 717883c commit 9856f37

File tree

3 files changed

+124
-0
lines changed

3 files changed

+124
-0
lines changed

src/main/kotlin/com/mairwunnx/projectessentials/projectessentialshome/EntryPoint.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package com.mairwunnx.projectessentials.projectessentialshome
22

3+
import com.mairwunnx.projectessentials.projectessentialshome.storage.StorageBase
34
import com.mairwunnx.projectessentialscore.EssBase
45
import net.minecraftforge.common.MinecraftForge
6+
import net.minecraftforge.eventbus.api.SubscribeEvent
57
import net.minecraftforge.fml.common.Mod
8+
import net.minecraftforge.fml.event.server.FMLServerStoppingEvent
69
import org.apache.logging.log4j.LogManager
710

811
@Suppress("unused")
@@ -17,6 +20,16 @@ class EntryPoint : EssBase() {
1720
validateForgeVersion()
1821
logger.debug("Register event bus for $modName mod ...")
1922
MinecraftForge.EVENT_BUS.register(this)
23+
logger.info("Loading modification user home data ...")
24+
StorageBase.loadUserData()
25+
}
26+
27+
@Suppress("UNUSED_PARAMETER")
28+
@SubscribeEvent
29+
fun onServerStopping(it: FMLServerStoppingEvent) {
30+
logger.info("Shutting down $modName mod ...")
31+
logger.info(" - Saving modification user home data ...")
32+
StorageBase.saveUserData()
2033
}
2134

2235
companion object {
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.mairwunnx.projectessentials.projectessentialshome.models
2+
3+
import com.mairwunnx.projectessentialscore.extensions.empty
4+
import kotlinx.serialization.Serializable
5+
6+
@Serializable
7+
data class HomeModel(
8+
var homes: List<Home> = emptyList()
9+
) {
10+
@Serializable
11+
data class Home(
12+
var home: String = String.empty,
13+
var clientWorld: String = String.empty,
14+
var worldId: Int = -1,
15+
var xPos: Int = -1,
16+
var yPos: Int = -1,
17+
var zPos: Int = -1
18+
)
19+
}
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
package com.mairwunnx.projectessentials.projectessentialshome.storage
2+
3+
import com.mairwunnx.projectessentials.projectessentialshome.models.HomeModel
4+
import com.mairwunnx.projectessentialscore.helpers.MOD_CONFIG_FOLDER
5+
import kotlinx.serialization.UnstableDefault
6+
import kotlinx.serialization.json.Json
7+
import kotlinx.serialization.json.JsonConfiguration
8+
import org.apache.logging.log4j.LogManager
9+
import java.io.File
10+
import kotlin.system.measureTimeMillis
11+
12+
@UseExperimental(UnstableDefault::class)
13+
object StorageBase {
14+
private val logger = LogManager.getLogger()
15+
private val userHomeData = hashMapOf<String, HomeModel>()
16+
private val userDataFolder = MOD_CONFIG_FOLDER + File.separator + "user-data"
17+
18+
fun getData(uuid: String): HomeModel {
19+
if (userHomeData.containsKey(uuid)) {
20+
val requestedData = userHomeData[uuid] ?: HomeModel()
21+
logger.debug("Requested home data ($requestedData) for UUID ($uuid).")
22+
return requestedData
23+
}
24+
logger.debug("Requested home data not found for UUID ($uuid), will be used default home data.")
25+
return HomeModel()
26+
}
27+
28+
fun setData(uuid: String, data: HomeModel) {
29+
userHomeData[uuid] = data
30+
logger.debug("Installed home data (${data}) for UUID ($uuid).")
31+
}
32+
33+
fun loadUserData() {
34+
logger.info(" - loading user home data configuration ...")
35+
36+
createConfigDirs(userDataFolder)
37+
val users = File(userDataFolder).list()?.filter {
38+
if (File(it).isFile) return@filter false
39+
return@filter true
40+
}
41+
42+
val elapsedTime = measureTimeMillis {
43+
users?.forEach {
44+
logger.debug(" - processing $it user home data ...")
45+
val userId = it
46+
val userDataRaw = File(
47+
userDataFolder + File.separator + it + File.separator + "home.json"
48+
).readText()
49+
val userHomeClass = Json.parse(HomeModel.serializer(), userDataRaw)
50+
userHomeData[userId] = userHomeClass
51+
}
52+
}
53+
logger.info("Loading user home data done configurations with ${elapsedTime}ms")
54+
}
55+
56+
fun saveUserData() {
57+
createConfigDirs(userDataFolder)
58+
userHomeData.keys.forEach {
59+
logger.debug(" - processing $it user home data ...")
60+
61+
val userId = it
62+
val userDataClass = userHomeData[userId]!!
63+
val dataFolder = userDataFolder + File.separator + userId
64+
val dataPath = dataFolder + File.separator + "home.json"
65+
66+
createConfigDirs(dataFolder)
67+
logger.debug(" - setup json configuration for parsing ...")
68+
val json = Json(
69+
JsonConfiguration(
70+
encodeDefaults = true,
71+
strictMode = true,
72+
unquoted = false,
73+
allowStructuredMapKeys = true,
74+
prettyPrint = true,
75+
useArrayPolymorphism = false
76+
)
77+
)
78+
val userDataRaw = json.stringify(HomeModel.serializer(), userDataClass)
79+
try {
80+
File(dataPath).writeText(userDataRaw)
81+
} catch (ex: SecurityException) {
82+
logger.error("An error occurred while saving home configuration", ex)
83+
}
84+
}
85+
}
86+
87+
private fun createConfigDirs(path: String) {
88+
logger.info(" - creating config directory for user home data ($path)")
89+
val configDirectory = File(path)
90+
if (!configDirectory.exists()) configDirectory.mkdirs()
91+
}
92+
}

0 commit comments

Comments
 (0)