From 3fed73e640af4921596fff1ff959a66c291d20d3 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Tue, 3 May 2022 22:12:56 +0200 Subject: [PATCH] fix explosion affected blocks --- .../de/bixilon/minosoft/gui/rendering/util/VecUtil.kt | 9 +++++---- .../minosoft/modding/event/events/ExplosionEvent.kt | 2 +- .../minosoft/protocol/packets/s2c/play/ExplosionS2CP.kt | 8 +++++--- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/util/VecUtil.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/util/VecUtil.kt index ff1405cf3..212f39b84 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/util/VecUtil.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/util/VecUtil.kt @@ -13,15 +13,16 @@ package de.bixilon.minosoft.gui.rendering.util -import de.bixilon.kotlinglm.func.common.ceil import de.bixilon.kotlinglm.func.common.clamp -import de.bixilon.kotlinglm.func.common.floor import de.bixilon.kotlinglm.vec2.Vec2 import de.bixilon.kotlinglm.vec2.Vec2i import de.bixilon.kotlinglm.vec3.Vec3 import de.bixilon.kotlinglm.vec3.Vec3d import de.bixilon.kotlinglm.vec3.Vec3i import de.bixilon.kotlinglm.vec3.Vec3t +import de.bixilon.kutil.math.simple.DoubleMath.ceil +import de.bixilon.kutil.math.simple.DoubleMath.floor +import de.bixilon.kutil.math.simple.FloatMath.floor import de.bixilon.minosoft.data.Axes import de.bixilon.minosoft.data.direction.Directions import de.bixilon.minosoft.data.registries.AABB @@ -261,9 +262,9 @@ object VecUtil { fun getDistanceToNextIntegerAxisInDirection(position: Vec3d, direction: Vec3d): Double { fun getTarget(direction: Vec3d, position: Vec3d, axis: Axes): Int { return if (direction[axis] > 0) { - position[axis].floor.toInt() + 1 + position[axis].floor + 1 } else { - position[axis].ceil.toInt() - 1 + position[axis].ceil - 1 } } diff --git a/src/main/java/de/bixilon/minosoft/modding/event/events/ExplosionEvent.kt b/src/main/java/de/bixilon/minosoft/modding/event/events/ExplosionEvent.kt index b719b60b6..cb23991c1 100644 --- a/src/main/java/de/bixilon/minosoft/modding/event/events/ExplosionEvent.kt +++ b/src/main/java/de/bixilon/minosoft/modding/event/events/ExplosionEvent.kt @@ -24,7 +24,7 @@ class ExplosionEvent( initiator: EventInitiators, val position: Vec3, val power: Float, - val explodedBlocks: List, + val explodedBlocks: Array, val velocity: Vec3, ) : PlayConnectionEvent(connection) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ExplosionS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ExplosionS2CP.kt index 425cb9bef..4b5bf06ab 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ExplosionS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ExplosionS2CP.kt @@ -14,6 +14,7 @@ package de.bixilon.minosoft.protocol.packets.s2c.play import de.bixilon.kotlinglm.vec3.Vec3i import de.bixilon.kutil.primitive.BooleanUtil.decide +import de.bixilon.minosoft.gui.rendering.util.VecUtil.floor import de.bixilon.minosoft.modding.event.events.ExplosionEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.packets.factory.LoadPacket @@ -28,7 +29,7 @@ import de.bixilon.minosoft.util.logging.LogMessageType class ExplosionS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val position = buffer.readVec3f() val power = buffer.readFloat() - val explodedBlocks: List = buffer.readArray((buffer.versionId < V_1_17).decide({ buffer.readInt() }, { buffer.readVarInt() })) { Vec3i(buffer.readByte(), buffer.readByte(), buffer.readByte()) }.toList() // ToDo: Find out version + val explodedBlocks: Array = buffer.readArray((buffer.versionId < V_1_17).decide({ buffer.readInt() }, { buffer.readVarInt() })) { Vec3i(buffer.readByte(), buffer.readByte(), buffer.readByte()) } // ToDo: Find out version val velocity = buffer.readVec3f() override fun check(connection: PlayConnection) { @@ -40,8 +41,9 @@ class ExplosionS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { } override fun handle(connection: PlayConnection) { - for (record in explodedBlocks) { - val blockPosition = Vec3i(position) + record + val offsetPosition = Vec3i(position.floor) + for (blockDelta in explodedBlocks) { + val blockPosition = offsetPosition + blockDelta connection.world[blockPosition] = null // ToDo: Mass set blocks }