Skip to content

Commit 53f5c57

Browse files
committed
Added moving to spawn after player respawn.
Added checking on correct world spawnpoint.
1 parent a20c9d7 commit 53f5c57

4 files changed

Lines changed: 59 additions & 20 deletions

File tree

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

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,18 @@ import com.mairwunnx.projectessentials.projectessentialsspawn.helpers.validateFo
66
import com.mairwunnx.projectessentials.projectessentialsspawn.models.SpawnModelBase
77
import com.mojang.brigadier.CommandDispatcher
88
import net.minecraft.command.CommandSource
9-
import net.minecraft.util.math.BlockPos
9+
import net.minecraft.entity.player.ServerPlayerEntity
10+
import net.minecraft.world.dimension.DimensionType
1011
import net.minecraftforge.common.MinecraftForge
12+
import net.minecraftforge.event.entity.player.PlayerEvent
1113
import net.minecraftforge.eventbus.api.EventPriority
1214
import net.minecraftforge.eventbus.api.SubscribeEvent
1315
import net.minecraftforge.fml.common.Mod
1416
import net.minecraftforge.fml.event.server.FMLServerStartingEvent
1517
import net.minecraftforge.fml.event.server.FMLServerStoppingEvent
1618
import org.apache.logging.log4j.LogManager
1719

20+
// todo: move to core project as abstract class
1821
const val MOD_ID = "project_essentials_spawn"
1922
const val MOD_NAME = "Project Essentials Spawn"
2023
const val PART_OF_MOD = "Project Essentials"
@@ -40,6 +43,7 @@ class EntryPoint {
4043
SpawnModelBase.loadData()
4144
}
4245

46+
// todo: Move to core project
4347
private fun logBaseInfo() {
4448
logger.info("$MOD_NAME starting initializing ...")
4549
logger.info(" - Mod Id: $MOD_ID")
@@ -55,9 +59,32 @@ class EntryPoint {
5559
fun onServerStarting(event: FMLServerStartingEvent) {
5660
logger.info("$MOD_NAME starting mod loading ...")
5761
registerCommands(event.server.commandManager.dispatcher)
62+
processFirstSession(event)
5863
SpawnModelBase.assignSpawn(event)
5964
}
6065

66+
private fun processFirstSession(event: FMLServerStartingEvent) {
67+
var equals = true
68+
val world = event.server.getWorld(DimensionType.OVERWORLD)
69+
70+
if (SpawnModelBase.spawnModel.xPos.toInt() != world.spawnPoint.x) {
71+
equals = false
72+
}
73+
if (SpawnModelBase.spawnModel.yPos.toInt() != world.spawnPoint.y) {
74+
equals = false
75+
}
76+
if (SpawnModelBase.spawnModel.zPos.toInt() != world.spawnPoint.z) {
77+
equals = false
78+
}
79+
80+
if (!equals) {
81+
SpawnModelBase.spawnModel.xPos = world.spawnPoint.x.toDouble()
82+
SpawnModelBase.spawnModel.yPos = world.spawnPoint.y.toDouble()
83+
SpawnModelBase.spawnModel.zPos = world.spawnPoint.z.toDouble()
84+
}
85+
// if (world.firstSession()) { get world spawn and set it in config ; return }
86+
}
87+
6188
private fun registerCommands(
6289
cmdDispatcher: CommandDispatcher<CommandSource>
6390
) {
@@ -73,4 +100,11 @@ class EntryPoint {
73100
logger.info(" - Saving world spawn data ...")
74101
SpawnModelBase.saveData()
75102
}
103+
104+
@SubscribeEvent(priority = EventPriority.HIGHEST)
105+
fun onPlayerRespawn(event: PlayerEvent.PlayerRespawnEvent) {
106+
if (!event.player.bedPosition.isPresent) {
107+
SpawnCommand.moveToSpawn(event.player as ServerPlayerEntity)
108+
}
109+
}
76110
}

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ import com.mojang.brigadier.CommandDispatcher
88
import com.mojang.brigadier.builder.LiteralArgumentBuilder
99
import com.mojang.brigadier.context.CommandContext
1010
import net.minecraft.command.CommandSource
11+
import net.minecraft.util.math.BlockPos
1112
import org.apache.logging.log4j.LogManager
1213

1314
object SetSpawnCommand {
14-
private val aliases = arrayOf("setspawn", "esetspawn")
15+
private val aliases = arrayOf("setspawn", "esetspawn", "spawnpoint", "setworldspawn")
1516
private val logger = LogManager.getLogger()
1617

1718
fun register(dispatcher: CommandDispatcher<CommandSource>) {
@@ -35,6 +36,7 @@ object SetSpawnCommand {
3536
SpawnModelBase.spawnModel.yaw = player.rotationYaw
3637
SpawnModelBase.spawnModel.pitch = player.rotationPitch
3738
SpawnModelBase.spawnModel.worldId = player.serverWorld.worldType.id
39+
player.world.spawnPoint = BlockPos(player.posX, player.posY, player.posZ)
3840
sendMsg(c.source, "spawn.set.success")
3941
logger.info("New spawn point installed by ${player.name.string} with data: ")
4042
logger.info(" - xpos: ${player.posX}")

src/main/kotlin/com/mairwunnx/projectessentials/projectessentialsspawn/commands/SpawnCommand.kt

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import com.mojang.brigadier.CommandDispatcher
88
import com.mojang.brigadier.builder.LiteralArgumentBuilder.literal
99
import com.mojang.brigadier.context.CommandContext
1010
import net.minecraft.command.CommandSource
11+
import net.minecraft.entity.player.ServerPlayerEntity
1112
import net.minecraft.world.dimension.DimensionType
1213
import org.apache.logging.log4j.LogManager
1314

@@ -30,16 +31,7 @@ object SpawnCommand {
3031
if (c.isPlayerSender()) {
3132
val playerName = c.source.asPlayer().name.string
3233
if (PermissionsAPI.hasPermission(playerName, "ess.spawn")) {
33-
val xPos = SpawnModelBase.spawnModel.xPos
34-
val yPos = SpawnModelBase.spawnModel.yPos
35-
val zPos = SpawnModelBase.spawnModel.zPos
36-
val yaw = SpawnModelBase.spawnModel.yaw
37-
val pitch = SpawnModelBase.spawnModel.pitch
38-
val dimId = SpawnModelBase.spawnModel.worldId
39-
val targetWorld = c.source.server.getWorld(
40-
DimensionType.getById(dimId) ?: DimensionType.OVERWORLD
41-
)
42-
c.source.asPlayer().teleport(targetWorld, xPos, yPos, zPos, yaw, pitch)
34+
moveToSpawn(c.source.asPlayer())
4335
logger.info("Executed command \"/${c.input}\" from $playerName")
4436
sendMsg(c.source, "spawn.success")
4537
} else {
@@ -51,4 +43,17 @@ object SpawnCommand {
5143
}
5244
return 0
5345
}
46+
47+
fun moveToSpawn(player: ServerPlayerEntity) {
48+
val xPos = SpawnModelBase.spawnModel.xPos
49+
val yPos = SpawnModelBase.spawnModel.yPos
50+
val zPos = SpawnModelBase.spawnModel.zPos
51+
val yaw = SpawnModelBase.spawnModel.yaw
52+
val pitch = SpawnModelBase.spawnModel.pitch
53+
val dimId = SpawnModelBase.spawnModel.worldId
54+
val targetWorld = player.server.getWorld(
55+
DimensionType.getById(dimId) ?: DimensionType.OVERWORLD
56+
)
57+
player.teleport(targetWorld, xPos, yPos, zPos, yaw, pitch)
58+
}
5459
}

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

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,12 @@ object SpawnModelBase {
4343
}
4444

4545
fun assignSpawn(event: FMLServerStartingEvent) {
46-
event.server.worlds.forEach {
47-
val dim = it.dimension.type.id
48-
event.server.getWorld()
49-
if (dim == 0) {
50-
val pos = spawnModel
51-
it.spawnPoint = BlockPos(pos.x, pos.y, pos.z)
52-
}
53-
}
46+
val xPos = spawnModel.xPos
47+
val yPos = spawnModel.yPos
48+
val zPos = spawnModel.zPos
49+
event.server.getWorld(DimensionType.OVERWORLD).spawnPoint = BlockPos(
50+
xPos, yPos, zPos
51+
)
5452
}
5553

5654
fun saveData() {

0 commit comments

Comments
 (0)