events: EntityDestroyEvent now holds single entity

This commit is contained in:
Bixilon 2021-06-10 12:40:14 +02:00 committed by Lukas
parent 119541a2b1
commit 52f750ba9a
3 changed files with 8 additions and 19 deletions

View File

@ -53,17 +53,11 @@ class EntityHitBoxRenderer(
} }
}) })
connection.registerEvent(CallbackEventInvoker.of<EntityDestroyEvent> { connection.registerEvent(CallbackEventInvoker.of<EntityDestroyEvent> {
val meshes: MutableSet<EntityHitBoxMesh> = mutableSetOf() val mesh = this.meshes.getAndRemove(it.entity) ?: return@of
for (entity in it.entities) {
val mesh = this.meshes.getAndRemove(entity) ?: continue
meshes += mesh
}
renderWindow.queue += { renderWindow.queue += {
for (mesh in meshes) {
mesh.unload(false) mesh.unload(false)
} }
}
}) })
} }

View File

@ -15,15 +15,9 @@ package de.bixilon.minosoft.modding.event.events
import de.bixilon.minosoft.data.entities.entities.Entity import de.bixilon.minosoft.data.entities.entities.Entity
import de.bixilon.minosoft.modding.event.EventInitiators import de.bixilon.minosoft.modding.event.EventInitiators
import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.protocol.network.connection.PlayConnection
import de.bixilon.minosoft.protocol.packets.s2c.play.EntityDestroyS2CP
import de.bixilon.minosoft.util.KUtil.entities
class EntityDestroyEvent( class EntityDestroyEvent(
connection: PlayConnection, connection: PlayConnection,
initiator: EventInitiators, initiator: EventInitiators,
val entities: Set<Entity>, val entity: Entity,
) : PlayConnectionEvent(connection, initiator) { ) : PlayConnectionEvent(connection, initiator)
constructor(connection: PlayConnection, packet: EntityDestroyS2CP) : this(connection, EventInitiators.SERVER, packet.entityIds.entities(connection))
}

View File

@ -13,6 +13,7 @@
package de.bixilon.minosoft.protocol.packets.s2c.play package de.bixilon.minosoft.protocol.packets.s2c.play
import de.bixilon.minosoft.Minosoft import de.bixilon.minosoft.Minosoft
import de.bixilon.minosoft.modding.event.EventInitiators
import de.bixilon.minosoft.modding.event.events.EntityDestroyEvent import de.bixilon.minosoft.modding.event.events.EntityDestroyEvent
import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.protocol.network.connection.PlayConnection
import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket
@ -35,11 +36,11 @@ class EntityDestroyS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() {
override fun handle(connection: PlayConnection) { override fun handle(connection: PlayConnection) {
connection.fireEvent(EntityDestroyEvent(connection, this))
for (entityId in entityIds) { for (entityId in entityIds) {
val entity = connection.world.entities[entityId] ?: continue val entity = connection.world.entities[entityId] ?: continue
entity.vehicle?.passengers?.remove(entity) entity.vehicle?.passengers?.remove(entity)
connection.fireEvent(EntityDestroyEvent(connection, EventInitiators.SERVER, entity))
connection.world.entities.remove(entityId) connection.world.entities.remove(entityId)
} }
} }