Skip to content

Commit 64b5ee8

Browse files
committed
fix soul not able to create when player leave server on death
1 parent d81c11a commit 64b5ee8

File tree

3 files changed

+10
-14
lines changed

3 files changed

+10
-14
lines changed

docker-compose.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ services:
1414
# Forge --------------------
1515
TYPE: NEOFORGE
1616
VERSION: "1.21.1"
17-
NEOFORGE_VERSION: "21.1.129"
17+
NEOFORGE_VERSION: "21.1.209"
1818
# Paper --------------------
1919
#TYPE: PAPER
2020
#VERSION: 1.21.8

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ makeevrserg.java.ktarget=21
1313
# Project
1414
makeevrserg.project.name=SoulKeeper
1515
makeevrserg.project.group=ru.astrainteractive.soulkeeper
16-
makeevrserg.project.version.string=1.2.6
16+
makeevrserg.project.version.string=1.2.7
1717
makeevrserg.project.description=Keep your items after death
1818
makeevrserg.project.developers=makeevrserg|Makeev Roman|[email protected]
1919
makeevrserg.project.url=https://github.com/Astra-Interactive/SoulKeeper

modules/event-neoforge/src/main/kotlin/ru/astrainteractive/soulkeeper/module/event/event/ForgeSoulEvents.kt

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import ru.astrainteractive.astralibs.server.location.Location
2121
import ru.astrainteractive.astralibs.server.player.OnlineMinecraftPlayer
2222
import ru.astrainteractive.astralibs.server.util.asLocatable
2323
import ru.astrainteractive.astralibs.server.util.asOnlineMinecraftPlayer
24+
import ru.astrainteractive.astralibs.server.util.toPlain
2425
import ru.astrainteractive.klibs.kstorage.api.CachedKrate
2526
import ru.astrainteractive.klibs.kstorage.util.getValue
2627
import ru.astrainteractive.klibs.mikro.core.dispatchers.KotlinDispatchers
@@ -87,16 +88,16 @@ internal class ForgeSoulEvents(
8788
}
8889

8990
private suspend fun createSoul(
90-
onlineMinecraftPlayer: OnlineMinecraftPlayer,
91+
serverPlayer: ServerPlayer,
9192
droppedXp: Int?,
9293
soulItems: List<ItemStack>?,
9394
location: Location,
9495
dimension: ResourceKey<Level>
9596
) {
9697
val soul = DefaultSoul(
9798
exp = droppedXp ?: 0,
98-
ownerUUID = onlineMinecraftPlayer.uuid,
99-
ownerLastName = onlineMinecraftPlayer.name,
99+
ownerUUID = serverPlayer.uuid,
100+
ownerLastName = serverPlayer.name.toPlain(),
100101
createdAt = Instant.now(),
101102
isFree = soulsConfig.soulFreeAfter == 0.seconds,
102103
location = when (dimension) {
@@ -116,20 +117,19 @@ internal class ForgeSoulEvents(
116117

117118
@Suppress("LongMethod")
118119
private suspend fun createOrUpdateSoul(
119-
onlineMinecraftPlayer: OnlineMinecraftPlayer,
120120
serverPlayer: ServerPlayer,
121121
droppedXp: Int?,
122122
soulItems: List<ItemStack>?
123123
) {
124124
mutex.withLock {
125-
val location = onlineMinecraftPlayer
125+
val location = serverPlayer
126126
.asLocatable()
127127
.getLocation()
128128

129129
val existingSoul = soulsDao.getSoulsNear(location, 1)
130130
.getOrNull()
131131
.orEmpty()
132-
.firstOrNull { soul -> soul.ownerUUID == onlineMinecraftPlayer.uuid }
132+
.firstOrNull { soul -> soul.ownerUUID == serverPlayer.uuid }
133133
?.let { dbSoul -> soulsDao.toItemDatabaseSoul(dbSoul) }
134134
?.getOrNull()
135135

@@ -142,15 +142,15 @@ internal class ForgeSoulEvents(
142142
} else {
143143
createSoul(
144144
location = location,
145-
onlineMinecraftPlayer = onlineMinecraftPlayer,
145+
serverPlayer = serverPlayer,
146146
droppedXp = droppedXp,
147147
soulItems = soulItems,
148148
dimension = serverPlayer.level().dimension()
149149
)
150150
}
151151
spawnSoulEffects(
152152
location = location,
153-
onlineMinecraftPlayer = onlineMinecraftPlayer
153+
onlineMinecraftPlayer = serverPlayer.asOnlineMinecraftPlayer()
154154
)
155155
}
156156
}
@@ -160,7 +160,6 @@ internal class ForgeSoulEvents(
160160
.onEach { event ->
161161
val serverPlayer = event.entity.tryCast<ServerPlayer>() ?: return@onEach
162162
val keepLevel = event.entity.level().gameRules.getBoolean(GameRules.RULE_KEEPINVENTORY)
163-
val onlineMinecraftPlayer = serverPlayer.asOnlineMinecraftPlayer()
164163

165164
val droppedXp = when {
166165
keepLevel -> 0
@@ -175,7 +174,6 @@ internal class ForgeSoulEvents(
175174
event.droppedExperience = 0
176175

177176
createOrUpdateSoul(
178-
onlineMinecraftPlayer = onlineMinecraftPlayer,
179177
serverPlayer = serverPlayer,
180178
droppedXp = droppedXp,
181179
soulItems = null
@@ -189,7 +187,6 @@ internal class ForgeSoulEvents(
189187
info { "#livingDropsEvent ${event.drops.size} ${event.drops}" }
190188
val serverPlayer = event.entity.tryCast<ServerPlayer>() ?: return@onEach
191189
val keepInventory = event.entity.level().gameRules.getBoolean(GameRules.RULE_KEEPINVENTORY)
192-
val onlineMinecraftPlayer = serverPlayer.asOnlineMinecraftPlayer()
193190

194191
val soulItems = when {
195192
keepInventory -> emptyList()
@@ -200,7 +197,6 @@ internal class ForgeSoulEvents(
200197
event.drops.clear()
201198

202199
createOrUpdateSoul(
203-
onlineMinecraftPlayer = onlineMinecraftPlayer,
204200
serverPlayer = serverPlayer,
205201
droppedXp = null,
206202
soulItems = soulItems

0 commit comments

Comments
 (0)