Skip to content

Commit 957a327

Browse files
committed
Added base logic for spawn mod part.
Left: implement commands.
1 parent 472fe0a commit 957a327

11 files changed

Lines changed: 263 additions & 131 deletions

File tree

src/main/java/com/example/examplemod/ExampleMod.java

Lines changed: 0 additions & 84 deletions
This file was deleted.
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package com.mairwunnx.projectessentials.projectessentialsspawn
2+
3+
import com.mairwunnx.projectessentials.projectessentialsspawn.commands.SetSpawnCommand
4+
import com.mairwunnx.projectessentials.projectessentialsspawn.commands.SpawnCommand
5+
import com.mairwunnx.projectessentials.projectessentialsspawn.helpers.validateForgeVersion
6+
import com.mairwunnx.projectessentials.projectessentialsspawn.models.SpawnModelBase
7+
import com.mojang.brigadier.CommandDispatcher
8+
import net.minecraft.command.CommandSource
9+
import net.minecraftforge.common.MinecraftForge
10+
import net.minecraftforge.eventbus.api.SubscribeEvent
11+
import net.minecraftforge.fml.common.Mod
12+
import net.minecraftforge.fml.event.server.FMLServerStartingEvent
13+
import net.minecraftforge.fml.event.server.FMLServerStoppingEvent
14+
import org.apache.logging.log4j.LogManager
15+
16+
const val MOD_ID = "project_essentials_spawn"
17+
const val MOD_NAME = "Project Essentials Spawn"
18+
const val PART_OF_MOD = "Project Essentials"
19+
const val MOD_VERSION = "1.14.4-1.0.0.0"
20+
const val MOD_MAINTAINER = "MairwunNx (Pavel Erokhin)"
21+
const val MOD_TARGET_FORGE = "28.0.X"
22+
const val MOD_TARGET_FORGE_REGEX = "^28\\.0\\..\\d{1,}|28\\.0\\.[\\d]\$"
23+
const val MOD_TARGET_MC = "1.14.4"
24+
const val MOD_SOURCES_LINK = "https://github.com/MairwunNx/ProjectEssentials-Spawn/"
25+
const val MOD_TELEGRAM_LINK = "https://t.me/minecraftforge"
26+
27+
@Suppress("unused")
28+
@Mod(MOD_ID)
29+
class EntryPoint {
30+
private val logger = LogManager.getLogger()
31+
32+
init {
33+
logBaseInfo()
34+
validateForgeVersion()
35+
logger.debug("Register event bus for $MOD_NAME mod ...")
36+
MinecraftForge.EVENT_BUS.register(this)
37+
logger.info("Loading $MOD_NAME world spawn data ...")
38+
SpawnModelBase.loadData()
39+
}
40+
41+
private fun logBaseInfo() {
42+
logger.info("$MOD_NAME starting initializing ...")
43+
logger.info(" - Mod Id: $MOD_ID")
44+
logger.info(" - Version: $MOD_VERSION")
45+
logger.info(" - Maintainer: $MOD_MAINTAINER")
46+
logger.info(" - Target Forge version: $MOD_TARGET_FORGE")
47+
logger.info(" - Target Minecraft version: $MOD_TARGET_MC")
48+
logger.info(" - Source code: $MOD_SOURCES_LINK")
49+
logger.info(" - Telegram chat: $MOD_TELEGRAM_LINK")
50+
}
51+
52+
@SubscribeEvent
53+
internal fun onServerStarting(it: FMLServerStartingEvent) {
54+
logger.info("$MOD_NAME starting mod loading ...")
55+
registerCommands(it.server.commandManager.dispatcher)
56+
}
57+
58+
private fun registerCommands(
59+
cmdDispatcher: CommandDispatcher<CommandSource>
60+
) {
61+
logger.info("Command registering is starting ...")
62+
SpawnCommand.register(cmdDispatcher)
63+
SetSpawnCommand.register(cmdDispatcher)
64+
}
65+
66+
@Suppress("UNUSED_PARAMETER")
67+
@SubscribeEvent
68+
internal fun onServerStopping(it: FMLServerStoppingEvent) {
69+
logger.info("Shutting down $MOD_NAME mod ...")
70+
logger.info(" - Saving world spawn data ...")
71+
SpawnModelBase.saveData()
72+
}
73+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.mairwunnx.projectessentials.projectessentialsspawn.commands
2+
3+
import com.mojang.brigadier.CommandDispatcher
4+
import net.minecraft.command.CommandSource
5+
6+
object SetSpawnCommand {
7+
fun register(dispatcher: CommandDispatcher<CommandSource>) {
8+
9+
}
10+
11+
private fun execute() {
12+
13+
}
14+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.mairwunnx.projectessentials.projectessentialsspawn.commands
2+
3+
import com.mojang.brigadier.CommandDispatcher
4+
import net.minecraft.command.CommandSource
5+
6+
object SpawnCommand {
7+
fun register(dispatcher: CommandDispatcher<CommandSource>) {
8+
9+
}
10+
11+
private fun execute() {
12+
13+
}
14+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package com.mairwunnx.projectessentials.projectessentialsspawn.enums
2+
3+
enum class ForgeRootPaths { CLIENT, SERVER }
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.mairwunnx.projectessentials.projectessentialsspawn.helpers
2+
3+
import com.mairwunnx.projectessentials.projectessentialsspawn.enums.ForgeRootPaths
4+
import net.minecraft.client.Minecraft
5+
import java.io.File
6+
7+
private val clientRootDir by lazy {
8+
Minecraft.getInstance().gameDir.absolutePath
9+
}
10+
private val serverRootDir by lazy {
11+
File(".").absolutePath
12+
}
13+
14+
fun getRootPath(pathType: ForgeRootPaths): String {
15+
return when (pathType) {
16+
ForgeRootPaths.CLIENT -> clientRootDir
17+
ForgeRootPaths.SERVER -> serverRootDir
18+
}
19+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.mairwunnx.projectessentials.projectessentialsspawn.helpers
2+
3+
import com.mairwunnx.projectessentials.projectessentialsspawn.MOD_NAME
4+
import com.mairwunnx.projectessentials.projectessentialsspawn.MOD_TARGET_FORGE_REGEX
5+
import com.mairwunnx.projectessentials.projectessentialsspawn.MOD_VERSION
6+
import net.minecraftforge.versions.forge.ForgeVersion
7+
import org.apache.logging.log4j.LogManager
8+
9+
private val logger = LogManager.getLogger()
10+
11+
internal fun validateForgeVersion() {
12+
logger.info("Checking forge version for compatibility with mod ...")
13+
if (Regex(MOD_TARGET_FORGE_REGEX).matches(ForgeVersion.getVersion())) {
14+
logger.info("Forge version is compatibility with mod.")
15+
} else {
16+
logger.warn("Forge version may be incompatible with $MOD_NAME $MOD_VERSION!")
17+
logger.warn(" - update or downgrade forge version.")
18+
logger.warn(" - update or downgrade mod version.")
19+
logger.warn(" - or just create issue on github.")
20+
}
21+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.mairwunnx.projectessentials.projectessentialsspawn.helpers
2+
3+
import com.mairwunnx.projectessentials.projectessentialsspawn.PART_OF_MOD
4+
import com.mairwunnx.projectessentials.projectessentialsspawn.enums.ForgeRootPaths
5+
import net.minecraftforge.api.distmarker.Dist
6+
import net.minecraftforge.fml.DistExecutor
7+
import java.io.File
8+
9+
internal val CONFIG_FOLDER = root + File.separator + "config"
10+
internal val MOD_CONFIG_FOLDER =
11+
CONFIG_FOLDER + File.separator + PART_OF_MOD.replace(" ", "")
12+
internal val SPAWN_CONFIG = MOD_CONFIG_FOLDER + File.separator + "spawn.json"
13+
14+
private val root: String
15+
get() {
16+
var rootPath = ""
17+
DistExecutor.runWhenOn(Dist.CLIENT) {
18+
Runnable {
19+
rootPath = getRootPath(ForgeRootPaths.CLIENT)
20+
}
21+
}
22+
DistExecutor.runWhenOn(Dist.DEDICATED_SERVER) {
23+
Runnable {
24+
rootPath = getRootPath(ForgeRootPaths.SERVER)
25+
}
26+
}
27+
return rootPath
28+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.mairwunnx.projectessentials.projectessentialsspawn.models
2+
3+
import kotlinx.serialization.Serializable
4+
5+
@Serializable
6+
data class SpawnModel(var x: Int = 0, var y: Int = 100, var z: Int = 0)
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package com.mairwunnx.projectessentials.projectessentialsspawn.models
2+
3+
import com.mairwunnx.projectessentials.projectessentialsspawn.helpers.MOD_CONFIG_FOLDER
4+
import com.mairwunnx.projectessentials.projectessentialsspawn.helpers.SPAWN_CONFIG
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+
11+
@UseExperimental(UnstableDefault::class)
12+
object SpawnModelBase {
13+
private val logger = LogManager.getLogger()
14+
var spawnModel = SpawnModel()
15+
private val json = Json(
16+
JsonConfiguration(
17+
encodeDefaults = true,
18+
strictMode = true,
19+
unquoted = false,
20+
allowStructuredMapKeys = true,
21+
prettyPrint = true,
22+
useArrayPolymorphism = false
23+
)
24+
)
25+
26+
fun loadData() {
27+
logger.info(" - loading world spawn data ...")
28+
logger.debug(" - setup json configuration for parsing ...")
29+
if (!File(SPAWN_CONFIG).exists()) {
30+
logger.warn(" - spawn config not exist! creating it now!")
31+
createConfigDirs(MOD_CONFIG_FOLDER)
32+
val defaultConfig = json.stringify(
33+
SpawnModel.serializer(),
34+
spawnModel
35+
)
36+
File(SPAWN_CONFIG).writeText(defaultConfig)
37+
}
38+
val spawnConfigRaw = File(SPAWN_CONFIG).readText()
39+
spawnModel = Json.parse(SpawnModel.serializer(), spawnConfigRaw)
40+
}
41+
42+
fun saveData() {
43+
logger.info(" - saving world spawn data ...")
44+
createConfigDirs(MOD_CONFIG_FOLDER)
45+
val spawnConfig = json.stringify(
46+
SpawnModel.serializer(),
47+
spawnModel
48+
)
49+
File(SPAWN_CONFIG).writeText(spawnConfig)
50+
}
51+
52+
private fun createConfigDirs(path: String) {
53+
logger.info(" - creating config directory for world spawn data ($path)")
54+
val configDirectory = File(path)
55+
if (!configDirectory.exists()) configDirectory.mkdirs()
56+
}
57+
}

0 commit comments

Comments
 (0)