From c3784f8043af7403ee8e7fe0f54f038a94d9c84c Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Thu, 13 Oct 2022 15:46:20 +0700 Subject: [PATCH] Disallow to phase through bedrock --- .../mc/otm/android/feature/EnderTeleporterFeature.kt | 11 +++++++++++ 1 file changed, 11 insertions(+) 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 16b46c622..4e0cf3410 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 @@ -15,6 +15,7 @@ import net.minecraft.sounds.SoundSource import net.minecraft.tags.BlockTags import net.minecraft.world.level.ClipContext import net.minecraft.world.level.block.Block +import net.minecraft.world.level.block.Blocks import net.minecraft.world.phys.HitResult import net.minecraft.world.phys.shapes.BooleanOp import net.minecraft.world.phys.shapes.CollisionContext @@ -148,6 +149,11 @@ class EnderTeleporterFeature(capability: MatteryPlayerCapability) : AndroidActiv for (y in (if (ply.level.getBlockState(result.blockPos).`is`(BlockTags.CLIMBABLE)) -1 else 0) .. ServerConfig.EnderTeleporter.MAX_PHASE_DISTANCE) { val pos = BlockPos(result.blockPos.x, result.blockPos.y + y + 1, result.blockPos.z) + if (ply.level.getBlockState(pos).`is`(Blocks.BEDROCK)) { + // Can't phase through bedrock + break + } + if (isValidPosition(pos) && shortestDistanceBetween(testPositions, pos.asVector()) <= ServerConfig.EnderTeleporter.MAX_DISTANCE) { return TraceResult(pos, if (y != 0) ImmutableList(y + 1) { result.blockPos + BlockPos(0, it, 0) } else listOf()) } @@ -159,6 +165,11 @@ class EnderTeleporterFeature(capability: MatteryPlayerCapability) : AndroidActiv for (y in 0 downTo -ServerConfig.EnderTeleporter.MAX_PHASE_DISTANCE) { val pos = BlockPos(result.blockPos.x, result.blockPos.y + y, result.blockPos.z) + if (ply.level.getBlockState(pos).`is`(Blocks.BEDROCK)) { + // Can't phase through bedrock + break + } + if (isValidPosition(pos) && shortestDistanceBetween(testPositions, pos.asVector()) <= ServerConfig.EnderTeleporter.MAX_DISTANCE) { return TraceResult(pos, if (y != 0) ImmutableList(-y + 1) { result.blockPos - BlockPos(0, it, 0) } else listOf()) }