Allow to teleport under blocks

Fixes #119
This commit is contained in:
DBotThePony 2022-10-16 12:19:12 +07:00
parent 9623f84eb5
commit b5ed902871
Signed by: DBot
GPG Key ID: DCC23B5715498507

View File

@ -157,6 +157,7 @@ class EnderTeleporterFeature(capability: MatteryPlayerCapability) : AndroidActiv
val testPositions = ply.genericPositions() val testPositions = ply.genericPositions()
if ( if (
!ply.isShiftKeyDown &&
result.direction == Direction.UP && result.direction == Direction.UP &&
isValidPosition(result.blockPos.above()) && isValidPosition(result.blockPos.above()) &&
shortestDistanceBetween(testPositions, result.blockPos.above().asVector()) <= ServerConfig.EnderTeleporter.MAX_DISTANCE shortestDistanceBetween(testPositions, result.blockPos.above().asVector()) <= ServerConfig.EnderTeleporter.MAX_DISTANCE
@ -167,6 +168,7 @@ class EnderTeleporterFeature(capability: MatteryPlayerCapability) : AndroidActiv
val candidates = LinkedList<TraceResult>() val candidates = LinkedList<TraceResult>()
if ( if (
!ply.isShiftKeyDown &&
result.direction != Direction.UP && result.direction != Direction.UP &&
result.direction != Direction.DOWN && result.direction != Direction.DOWN &&
!isAirGap(result.blockPos) && !isAirGap(result.blockPos) &&
@ -196,7 +198,15 @@ class EnderTeleporterFeature(capability: MatteryPlayerCapability) : AndroidActiv
var phasedBlocks = 0 var phasedBlocks = 0
val phasedBlocksList = ArrayList<BlockPos>() val phasedBlocksList = ArrayList<BlockPos>()
for (y in (if (ply.level.getBlockState(result.blockPos).`is`(BlockTags.CLIMBABLE)) -1 else 0) .. ply.level.maxBuildHeight - ply.level.minBuildHeight) { val searchDirection: IntProgression
if (ply.isShiftKeyDown) {
searchDirection = -1 downTo ply.level.minBuildHeight - ply.level.maxBuildHeight
} else {
searchDirection = (if (ply.level.getBlockState(result.blockPos).`is`(BlockTags.CLIMBABLE)) -1 else 0) .. ply.level.maxBuildHeight - ply.level.minBuildHeight
}
for (y in searchDirection) {
val pos = BlockPos(result.blockPos.x, result.blockPos.y + y + 1, result.blockPos.z) val pos = BlockPos(result.blockPos.x, result.blockPos.y + y + 1, result.blockPos.z)
val state = ply.level.getBlockState(pos) val state = ply.level.getBlockState(pos)