Skip to content

Commit 44d0814

Browse files
Upgrade to Minestom 1.20.4
1 parent b05b09a commit 44d0814

File tree

25 files changed

+140
-643
lines changed

25 files changed

+140
-643
lines changed

build.gradle.kts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,8 @@ subprojects {
2727

2828
dependencies {
2929
testImplementation(kotlin("test"))
30-
testImplementation(project(":testing"))
3130
testImplementation(libs.mockk)
3231
testImplementation(libs.junit.api)
33-
testImplementation(libs.minestom.testing)
3432
testRuntimeOnly(libs.junit.engine)
3533

3634
implementation(libs.minestom) // Minestom

common/src/main/kotlin/com/bluedragonmc/server/CustomPlayer.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ import net.minestom.server.potion.PotionEffect
1818
import net.minestom.server.utils.async.AsyncUtils
1919
import java.util.*
2020
import java.util.concurrent.CompletableFuture
21-
import kotlin.math.log
22-
import kotlin.math.pow
2321

2422
class CustomPlayer(uuid: UUID, username: String, playerConnection: PlayerConnection) :
2523
Player(uuid, username, playerConnection) {
@@ -62,9 +60,10 @@ class CustomPlayer(uuid: UUID, username: String, playerConnection: PlayerConnect
6260
}
6361
}
6462

65-
override fun setGameMode(gameMode: GameMode) {
63+
override fun setGameMode(gameMode: GameMode): Boolean {
6664
val prevGameMode = this.gameMode
67-
super.setGameMode(gameMode)
65+
val result = super.setGameMode(gameMode)
66+
if (!result) return false
6867
// When a player stops spectating, send a camera packet to make sure they are not stuck.
6968
if (isSpectating && prevGameMode == GameMode.SPECTATOR && gameMode != GameMode.SPECTATOR) {
7069
stopSpectating()
@@ -76,6 +75,7 @@ class CustomPlayer(uuid: UUID, username: String, playerConnection: PlayerConnect
7675
if (prevGameMode == GameMode.SPECTATOR && gameMode != GameMode.SPECTATOR) { // Leaving spectator mode
7776
isInvisible = wasInvisible
7877
}
78+
return true
7979
}
8080

8181
public override fun refreshHealth() { // Overridden to increase visibility

common/src/main/kotlin/com/bluedragonmc/server/command/BlueDragonCommand.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ open class BlueDragonCommand(
169169

170170
fun <T> get(argument: Argument<T>): T = ctx.get(argument)
171171
fun getPlayer(argument: Argument<PlayerDocument>): Player? =
172-
MinecraftServer.getConnectionManager().getPlayer(get(argument).uuid)
172+
MinecraftServer.getConnectionManager().getOnlinePlayerByUuid(get(argument).uuid)
173173

174174
fun getFirstPlayer(argument: Argument<EntityFinder>): Player =
175175
ctx.get(argument).findFirstPlayer(sender) ?: run {

common/src/main/kotlin/com/bluedragonmc/server/module/combat/CustomDeathMessageModule.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ class CustomDeathMessageModule : GameModule() {
4141
Component.translatable("death.attack.generic", BRAND_COLOR_PRIMARY_2, player.name)
4242
}
4343
}
44-
DamageType.VOID -> Component.translatable("death.attack.outOfWorld", BRAND_COLOR_PRIMARY_2, player.name)
45-
DamageType.GRAVITY -> Component.translatable("death.attack.fall", BRAND_COLOR_PRIMARY_2, player.name)
44+
DamageType.OUT_OF_WORLD -> Component.translatable("death.attack.outOfWorld", BRAND_COLOR_PRIMARY_2, player.name)
45+
DamageType.FALL -> Component.translatable("death.attack.fall", BRAND_COLOR_PRIMARY_2, player.name)
4646
else -> Component.translatable("death.attack.generic", BRAND_COLOR_PRIMARY_2, player.name)
4747
}
4848
}

common/src/main/kotlin/com/bluedragonmc/server/module/combat/OldCombatModule.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import net.minestom.server.MinecraftServer
99
import net.minestom.server.attribute.Attribute
1010
import net.minestom.server.coordinate.Vec
1111
import net.minestom.server.entity.*
12+
import net.minestom.server.entity.damage.Damage
1213
import net.minestom.server.entity.damage.DamageType
1314
import net.minestom.server.event.Event
1415
import net.minestom.server.event.EventNode
@@ -182,23 +183,23 @@ class OldCombatModule(var allowDamage: Boolean = true, var allowKnockback: Boole
182183
if (damage > lastDamage) {
183184
if ((damage - lastDamage) > target.health && target is Player && !target.isDead) {
184185
parent.callCancellable(PlayerKillPlayerEvent(player, target)) {
185-
target.damage(DamageType.fromPlayer(player), damage - lastDamage)
186+
target.damage(Damage(DamageType.PLAYER_ATTACK, player, player, player.position, damage - lastDamage))
186187
target.setTag(LAST_DAMAGE, damage)
187188
}
188189
} else {
189-
target.damage(DamageType.fromPlayer(player), damage - lastDamage)
190+
target.damage(Damage(DamageType.PLAYER_ATTACK, player, player, player.position, damage - lastDamage))
190191
target.setTag(LAST_DAMAGE, damage)
191192
}
192193
} else return@addListener
193194
} else {
194195
// The target has not been hit in the past (by default) 10 ticks.
195196
if (damage > target.health && target is Player && !target.isDead) {
196197
parent.callCancellable(PlayerKillPlayerEvent(player, target)) {
197-
target.damage(DamageType.fromPlayer(player), damage)
198+
target.damage(Damage(DamageType.PLAYER_ATTACK, player, player, player.position, damage))
198199
target.setTag(LAST_DAMAGE, damage)
199200
}
200201
} else {
201-
target.damage(DamageType.fromPlayer(player), damage)
202+
target.damage(Damage(DamageType.PLAYER_ATTACK, player, player, player.position, damage))
202203
target.setTag(LAST_DAMAGE, damage)
203204
target.setTag(HURT_RESISTANT_TIME, target.getTag(MAX_HURT_RESISTANT_TIME))
204205
}
@@ -245,7 +246,7 @@ class OldCombatModule(var allowDamage: Boolean = true, var allowKnockback: Boole
245246
val level = itemStack.meta().enchantmentMap[Enchantment.THORNS]?.toInt() ?: return@forEach
246247
if (CombatUtils.shouldCauseThorns(level)) {
247248
val thornsDamage = CombatUtils.getThornsDamage(level)
248-
player.damage(DamageType.fromPlayer(target), thornsDamage.toFloat())
249+
target.damage(Damage(DamageType.THORNS, player, event.entity, event.entity.position, thornsDamage.toFloat()))
249250
target.inventory.setEquipment(slot, CombatUtils.damageItemStack(itemStack, 2))
250251
}
251252
}

common/src/main/kotlin/com/bluedragonmc/server/module/combat/ProjectileModule.kt

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@ import net.minestom.server.coordinate.Point
1212
import net.minestom.server.coordinate.Pos
1313
import net.minestom.server.entity.*
1414
import net.minestom.server.entity.Player.Hand
15+
import net.minestom.server.entity.damage.Damage
1516
import net.minestom.server.entity.damage.DamageType
16-
import net.minestom.server.entity.metadata.arrow.ArrowMeta
17+
import net.minestom.server.entity.metadata.projectile.ArrowMeta
1718
import net.minestom.server.event.Event
1819
import net.minestom.server.event.EventNode
1920
import net.minestom.server.event.entity.projectile.ProjectileCollideWithBlockEvent
@@ -44,10 +45,6 @@ class ProjectileModule : GameModule() {
4445
private val CHARGE_START_TAG = Tag.Long("bow_charge_start").defaultValue(Long.MAX_VALUE)
4546
private val ARROW_DAMAGE_TAG = Tag.Short("entity_arrow_power").defaultValue(0) // the power enchantment level
4647
private val PUNCH_TAG = Tag.Short("entity_projectile_punch").defaultValue(0) // the punch enchantment level
47-
48-
private val SNOWBALL_DAMAGE_TYPE = DamageType("snowball")
49-
private val EGG_DAMAGE_TYPE = DamageType("egg")
50-
5148
private val PEARL_OWNER_TAG = Tag.UUID("ender_pearl_owner")
5249
}
5350

@@ -144,7 +141,15 @@ class ProjectileModule : GameModule() {
144141
shooter.sendPacket(ChangeGameStatePacket(ChangeGameStatePacket.Reason.ARROW_HIT_PLAYER, 0.0f))
145142
}
146143

147-
target.damage(DamageType.fromProjectile(projectile.shooter, projectile), damage)
144+
target.damage(
145+
Damage(
146+
DamageType.THROWN,
147+
projectile.shooter,
148+
projectile,
149+
projectile.shooter?.position,
150+
damage
151+
)
152+
)
148153
target.arrowCount++
149154
projectile.remove()
150155
(target as? Player)?.resetInvincibilityPeriod()
@@ -188,7 +193,7 @@ class ProjectileModule : GameModule() {
188193
if ((target as? Player)?.isInvincible() == true) return@addListener
189194

190195
OldCombatModule.takeKnockback(-projectile.velocity.x, -projectile.velocity.z, target, 0.0)
191-
target.damage(SNOWBALL_DAMAGE_TYPE, 0.0f)
196+
target.damage(Damage(DamageType.THROWN, projectile, projectile.shooter, projectile.shooter?.position, 0.0f))
192197
projectile.remove()
193198
(target as? Player)?.resetInvincibilityPeriod()
194199
}
@@ -254,7 +259,15 @@ class ProjectileModule : GameModule() {
254259
val mult = radius - entity.position.distance(center)
255260
OldCombatModule.takeKnockback(projectile.velocity.x, projectile.velocity.z, entity, mult)
256261
if (entity is LivingEntity) {
257-
entity.damage(DamageType.fromProjectile(projectile.shooter, projectile), mult.toFloat())
262+
entity.damage(
263+
Damage(
264+
DamageType.FIREBALL,
265+
projectile.shooter,
266+
projectile,
267+
projectile.shooter?.position,
268+
mult.toFloat()
269+
)
270+
)
258271
}
259272
}
260273
}
@@ -264,7 +277,7 @@ class ProjectileModule : GameModule() {
264277
centerY: Float,
265278
centerZ: Float,
266279
strength: Float,
267-
projectile: EntityProjectile
280+
projectile: EntityProjectile,
268281
) = object : Explosion(centerX, centerY, centerZ, strength) {
269282

270283
override fun prepare(instance: Instance): List<Point> {
@@ -315,7 +328,7 @@ class ProjectileModule : GameModule() {
315328
if ((target as? Player)?.isInvincible() == true) return@addListener
316329

317330
OldCombatModule.takeKnockback(-projectile.velocity.x, -projectile.velocity.z, target, 0.0)
318-
target.damage(EGG_DAMAGE_TYPE, 0.0f)
331+
target.damage(Damage(DamageType.THROWN, projectile, projectile.shooter, projectile.shooter?.position, 0.0f))
319332
projectile.remove()
320333
(target as? Player)?.resetInvincibilityPeriod()
321334
}
@@ -377,7 +390,15 @@ class ProjectileModule : GameModule() {
377390
if (event.entity.entityType == EntityType.ENDER_PEARL) {
378391
event.entity.instance?.players?.firstOrNull { it.uuid == event.entity.getTag(PEARL_OWNER_TAG) }?.apply {
379392
teleport(event.entity.position.add(0.0, 1.0, 0.0))
380-
damage(DamageType.GRAVITY, 5.0f)
393+
damage(
394+
Damage(
395+
DamageType.THROWN,
396+
event.entity,
397+
this,
398+
event.entity.position.add(0.0, 1.0, 0.0),
399+
5.0f
400+
)
401+
)
381402
event.entity.instance?.playSound(
382403
Sound.sound(
383404
SoundEvent.ENTITY_ENDERMAN_TELEPORT,

common/src/main/kotlin/com/bluedragonmc/server/module/gameplay/InstantRespawnModule.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ import net.minestom.server.event.player.PlayerRespawnEvent
2121
class InstantRespawnModule : GameModule() {
2222
override fun initialize(parent: Game, eventNode: EventNode<Event>) {
2323
eventNode.addListener(EntityDamageEvent::class.java) { event ->
24-
if (event.entity is Player && event.damage >= (event.entity.health + (event.entity as Player).additionalHearts)) {
25-
event.damage = 0.0f
24+
if (event.entity is Player && event.damage.amount >= (event.entity.health + (event.entity as Player).additionalHearts)) {
25+
event.damage.amount = 0.0f
2626

2727
(event.entity as CustomPlayer).apply {
2828
refreshHealth()

common/src/main/kotlin/com/bluedragonmc/server/module/minigame/VoidDeathModule.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class VoidDeathModule(private val threshold: Double, private val respawnMode: Bo
2222
event.player.teleport(event.player.respawnPoint)
2323
parent.callEvent(PlayerDeathEvent(event.player, null, null))
2424
} else {
25-
event.player.damage(DamageType.VOID, Float.MAX_VALUE)
25+
event.player.damage(DamageType.OUT_OF_WORLD, Float.MAX_VALUE)
2626
}
2727
}
2828
}

common/src/main/kotlin/com/bluedragonmc/server/module/vanilla/FallDamageModule.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ class FallDamageModule : GameModule() {
8888
player, fallStart - event.player.position.y - 3 - getJumpBoostLevel(player)
8989
)
9090
if (fallDamage > 0.0) {
91-
player.damage(DamageType.GRAVITY, fallDamage.toFloat())
91+
player.damage(DamageType.FALL, fallDamage.toFloat())
9292
}
9393
}
9494
} else {

common/src/main/kotlin/com/bluedragonmc/server/module/vanilla/FireworkRocketModule.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import net.minestom.server.MinecraftServer
77
import net.minestom.server.entity.Entity
88
import net.minestom.server.entity.EntityType
99
import net.minestom.server.entity.Player
10-
import net.minestom.server.entity.metadata.other.FireworkRocketMeta
10+
import net.minestom.server.entity.metadata.projectile.FireworkRocketMeta
1111
import net.minestom.server.event.Event
1212
import net.minestom.server.event.EventNode
1313
import net.minestom.server.event.player.PlayerUseItemEvent

common/src/main/kotlin/com/bluedragonmc/server/utils/FireworkUtils.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import net.minestom.server.MinecraftServer
55
import net.minestom.server.coordinate.Pos
66
import net.minestom.server.entity.Entity
77
import net.minestom.server.entity.EntityType
8-
import net.minestom.server.entity.metadata.other.FireworkRocketMeta
8+
import net.minestom.server.entity.metadata.projectile.FireworkRocketMeta
99
import net.minestom.server.instance.Instance
1010
import net.minestom.server.item.ItemMeta
1111
import net.minestom.server.item.ItemStack

common/src/main/kotlin/com/bluedragonmc/server/utils/InstanceUtils.kt

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import com.bluedragonmc.server.module.minigame.SpawnpointModule
99
import net.kyori.adventure.text.Component
1010
import net.minestom.server.MinecraftServer
1111
import net.minestom.server.event.EventNode
12-
import net.minestom.server.event.player.PlayerLoginEvent
1312
import net.minestom.server.event.trait.PlayerEvent
1413
import net.minestom.server.instance.Instance
1514
import net.minestom.server.timer.Task
@@ -30,12 +29,6 @@ object InstanceUtils {
3029
event.player.kick(Component.text("This instance is shutting down."))
3130
event.player.remove()
3231
}
33-
eventNode.addListener(PlayerLoginEvent::class.java) { event ->
34-
if (event.spawningInstance == instance) {
35-
event.player.kick(Component.text("This instance is shutting down."))
36-
event.player.remove()
37-
}
38-
}
3932
MinecraftServer.getGlobalEventHandler().addChild(eventNode)
4033
return vacateInstance(instance).thenRun {
4134
MinecraftServer.getSchedulerManager().scheduleNextTick {

gradle/libs.versions.toml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ metadata.format.version = "1.1"
22

33
[versions]
44
kotlin = "1.7.10"
5-
minestom = "54850b0c74"
5+
minestom = "2419c76da7"
66
configurate = "4.1.2"
77
minimessage = "4.11.0"
88
kmongo = "4.6.1"
@@ -24,8 +24,9 @@ junit = "5.9.0"
2424
[libraries]
2525
kotlin-jvm = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" }
2626
#minestom = { group = "com.github.BlueDragonMC", name = "Minestom", version.ref = "minestom" }
27-
minestom = { group = "dev.hollowcube", name = "minestom-ce", version.ref = "minestom" }
28-
minestom-testing = { group = "com.github.BlueDragonMC.Minestom", name = "testing", version = "8d87815841" }
27+
#minestom = { group = "dev.hollowcube", name = "minestom-ce", version.ref = "minestom" }
28+
#minestom = { group = "dev.hollowcube", name = "minestom-ce", version = "dev" }
29+
minestom = { group = "com.github.BlueDragonMC", name = "minestom-ce", version.ref = "minestom" }
2930
configurate = { group = "org.spongepowered", name = "configurate-yaml", version.ref = "configurate" }
3031
configurate-extra-kotlin = { group = "org.spongepowered", name = "configurate-extra-kotlin", version.ref = "configurate" }
3132
minimessage = { group = "net.kyori", name = "adventure-text-minimessage", version.ref = "minimessage" }

src/main/kotlin/com/bluedragonmc/server/bootstrap/dev/DevInstanceRouter.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,18 @@ import net.minestom.server.MinecraftServer
1010
import net.minestom.server.event.Event
1111
import net.minestom.server.event.EventNode
1212
import net.minestom.server.event.instance.InstanceTickEvent
13+
import net.minestom.server.event.player.AsyncPlayerConfigurationEvent
1314
import net.minestom.server.event.player.AsyncPlayerPreLoginEvent
14-
import net.minestom.server.event.player.PlayerLoginEvent
1515

1616
object DevInstanceRouter : Bootstrap(EnvType.DEVELOPMENT) {
1717
override fun hook(eventNode: EventNode<Event>) {
1818
eventNode.addListener(AsyncPlayerPreLoginEvent::class.java) { event ->
1919
Database.connection.loadDataDocument(event.player as CustomPlayer)
2020
}
21-
eventNode.addListener(PlayerLoginEvent::class.java) { event ->
21+
eventNode.addListener(AsyncPlayerConfigurationEvent::class.java) { event ->
2222
if (isLobbyInitialized()) {
2323
// Send the player to the lobby
24-
event.setSpawningInstance(lobby.getInstance())
24+
event.spawningInstance = lobby.getInstance()
2525
lobby.players.add(event.player)
2626
} else {
2727
// Send the player to a temporary "limbo" instance while the lobby is being loaded
@@ -35,7 +35,7 @@ object DevInstanceRouter : Bootstrap(EnvType.DEVELOPMENT) {
3535
lobby.addPlayer(event.player)
3636
}
3737
}
38-
event.setSpawningInstance(instance)
38+
event.spawningInstance = instance
3939
}
4040
}
4141
}

0 commit comments

Comments
 (0)