Skip to content

Commit 169c2e5

Browse files
committed
Respawning at first home \ bed point \ world spawn added.
Signed-off-by: Pavel Erokhin (MairwunNx) <[email protected]>
1 parent c3b2a5d commit 169c2e5

File tree

3 files changed

+49
-5
lines changed

3 files changed

+49
-5
lines changed

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

Lines changed: 47 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.mairwunnx.projectessentials.spawn
22

33
import com.mairwunnx.projectessentials.core.EssBase
4+
import com.mairwunnx.projectessentials.home.HomeAPI
45
import com.mairwunnx.projectessentials.permissions.permissions.PermissionsAPI
56
import com.mairwunnx.projectessentials.spawn.commands.SetSpawnCommand
67
import com.mairwunnx.projectessentials.spawn.commands.SpawnCommand
@@ -25,7 +26,7 @@ class EntryPoint : EssBase() {
2526

2627
init {
2728
modInstance = this
28-
modVersion = "1.14.4-1.1.2"
29+
modVersion = "1.14.4-1.2.0"
2930
logBaseInfo()
3031
validateForgeVersion()
3132
MinecraftForge.EVENT_BUS.register(this)
@@ -34,14 +35,15 @@ class EntryPoint : EssBase() {
3435

3536
@SubscribeEvent(priority = EventPriority.HIGH)
3637
fun onServerStarting(event: FMLServerStartingEvent) {
37-
registerCommands(event.server.commandManager.dispatcher)
38+
registerCommands(event.commandDispatcher)
3839
processFirstSession(event)
3940
SpawnModelBase.assignSpawn(event.server)
4041
}
4142

4243
private fun processFirstSession(event: FMLServerStartingEvent) {
4344
logger.info("Processing first session for loaded world")
4445
var equals = true
46+
// todo: previous todo apply for this
4547
val world = event.server.getWorld(DimensionType.OVERWORLD)
4648

4749
if (SpawnModelBase.spawnModel.xPos.toInt() != world.spawnPoint.x) {
@@ -77,12 +79,52 @@ class EntryPoint : EssBase() {
7779

7880
@SubscribeEvent(priority = EventPriority.HIGHEST)
7981
fun onPlayerRespawn(event: PlayerEvent.PlayerRespawnEvent) {
80-
if (!event.player.bedPosition.isPresent) {
81-
SpawnCommand.moveToSpawn(event.player as ServerPlayerEntity)
82+
val player = event.player as ServerPlayerEntity
83+
84+
fun teleportToSpawnOrBed() {
85+
if (player.bedPosition.isPresent) {
86+
val bedPos = player.bedPosition.get()
87+
val targetWorld = player.server.getWorld(DimensionType.OVERWORLD)
88+
player.teleport(
89+
targetWorld,
90+
bedPos.x.toDouble() + 0.5,
91+
bedPos.y.toDouble() + 0.5,
92+
bedPos.z.toDouble() + 0.5,
93+
player.rotationYaw, player.rotationPitch
94+
)
95+
} else {
96+
SpawnCommand.moveToSpawn(player)
97+
}
8298
}
99+
100+
if (homeInstalled) {
101+
val homes = HomeAPI.takeAll(player)
102+
103+
if (homes.isNotEmpty()) {
104+
val home =
105+
homes.first() // todo configure it with core module (new api with common project settings)
106+
val targetWorld = player.server.getWorld(
107+
DimensionType.getById(home.worldId) ?: DimensionType.OVERWORLD
108+
)
109+
player.teleport(
110+
targetWorld,
111+
home.xPos.toDouble() + 0.5,
112+
home.yPos.toDouble() + 0.5,
113+
home.zPos.toDouble() + 0.5,
114+
home.yaw, home.pitch
115+
)
116+
} else teleportToSpawnOrBed()
117+
} else teleportToSpawnOrBed()
83118
}
84119

85120
private fun loadAdditionalModules() {
121+
try {
122+
Class.forName("com.mairwunnx.projectessentials.home.HomeAPI")
123+
homeInstalled = true
124+
} catch (_: ClassNotFoundException) {
125+
// ignored
126+
}
127+
86128
try {
87129
Class.forName(cooldownAPIClassPath)
88130
cooldownsInstalled = true
@@ -102,6 +144,7 @@ class EntryPoint : EssBase() {
102144
lateinit var modInstance: EntryPoint
103145
var cooldownsInstalled: Boolean = false
104146
var permissionsInstalled: Boolean = false
147+
var homeInstalled: Boolean = false
105148

106149
fun hasPermission(player: ServerPlayerEntity, node: String, opLevel: Int = 4): Boolean =
107150
if (permissionsInstalled) {

src/main/kotlin/com/mairwunnx/projectessentials/spawn/commands/SetSpawnCommand.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ object SetSpawnCommand {
4747
SpawnModelBase.spawnModel.yaw = player.rotationYaw
4848
SpawnModelBase.spawnModel.pitch = player.rotationPitch
4949
SpawnModelBase.spawnModel.worldId = player.serverWorld.worldType.id
50-
player.world.spawnPoint = BlockPos(player.posX, player.posY, player.posZ)
50+
player.serverWorld.spawnPoint = BlockPos(player.posX, player.posY, player.posZ)
5151
sendMsg("spawn", c.source, "spawn.set.success")
5252
logger.info("New spawn point installed by ${player.name.string} with data: ")
5353
logger.info(" - xpos: ${player.posX}")

src/main/kotlin/com/mairwunnx/projectessentials/spawn/models/SpawnModelBase.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ object SpawnModelBase {
3232
val xPos = spawnModel.xPos
3333
val yPos = spawnModel.yPos
3434
val zPos = spawnModel.zPos
35+
// todo: configure dim type.
3536
server.getWorld(DimensionType.OVERWORLD).spawnPoint = BlockPos(
3637
xPos, yPos, zPos
3738
)

0 commit comments

Comments
 (0)