From 56d1501d6183315eccd992e34f9223fdc87c50e1 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Thu, 24 Nov 2022 22:28:11 +0700 Subject: [PATCH] Fire teleport event on forge event bus Fixes #219 --- .../android/feature/EnderTeleporterFeature.kt | 30 +++++++------------ 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/android/feature/EnderTeleporterFeature.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/android/feature/EnderTeleporterFeature.kt index f46b0e763..99b2dca79 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/android/feature/EnderTeleporterFeature.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/android/feature/EnderTeleporterFeature.kt @@ -22,6 +22,7 @@ import net.minecraft.world.phys.shapes.BooleanOp import net.minecraft.world.phys.shapes.CollisionContext import net.minecraft.world.phys.shapes.Shapes import net.minecraftforge.client.event.RenderLevelStageEvent +import net.minecraftforge.event.ForgeEventFactory import net.minecraftforge.event.entity.living.LivingDeathEvent import ru.dbotthepony.mc.otm.NULLABLE_MINECRAFT_SERVER import ru.dbotthepony.mc.otm.OverdriveThatMatters @@ -290,32 +291,21 @@ class EnderTeleporterFeature(capability: MatteryPlayerCapability) : AndroidActiv override fun activate(isClient: Boolean): Boolean { val canUse = canUse() - if (!canUse && isClient) { - return false - } - - if (!isClient) { - putOnCooldown() - - if (!canUse) { - android.androidEnergy.extractEnergyInnerExact(ServerConfig.EnderTeleporter.ENERGY_COST, false) - return false - } - } + if (!canUse && isClient) return false + if (isClient) return true val (blockPos) = trace() blockPos ?: return false - val server = ply.server + val event = ForgeEventFactory.onEnderTeleport(ply, blockPos.x + 0.5, blockPos.y.toDouble(), blockPos.z + 0.5) + if (event.isCanceled) return false - if (server != null) - lastTeleport = server.tickCount + lastTeleport = ply.server!!.tickCount + android.androidEnergy.extractEnergyInner(ServerConfig.EnderTeleporter.ENERGY_COST, false) - if (!isClient) android.androidEnergy.extractEnergyInner(ServerConfig.EnderTeleporter.ENERGY_COST, false) - - ply.level.playSound(ply, ply, SoundEvents.ENDERMAN_TELEPORT, SoundSource.PLAYERS, 0.3f, 0.8f + ply.level.random.nextFloat() * 0.4f) - ply.setPos(Vector(blockPos.x + 0.5, blockPos.y.toDouble(), blockPos.z + 0.5)) - ply.level.playSound(ply, ply, SoundEvents.ENDERMAN_TELEPORT, SoundSource.PLAYERS, 1f, 0.8f + ply.level.random.nextFloat() * 0.4f) + ply.level.playSound(null, ply, SoundEvents.ENDERMAN_TELEPORT, SoundSource.PLAYERS, 0.3f, 0.8f + ply.level.random.nextFloat() * 0.4f) + ply.teleportTo(event.targetX, event.targetY, event.targetZ) + ply.level.playSound(null, ply, SoundEvents.ENDERMAN_TELEPORT, SoundSource.PLAYERS, 1f, 0.8f + ply.level.random.nextFloat() * 0.4f) ply.deltaMovement = Vector(0.0, 0.0, 0.0) ply.resetFallDistance()