This commit is contained in:
Aleksey 2021-01-05 02:07:49 +03:00
commit db5c21baa9

View file

@ -16,6 +16,7 @@ import net.minecraft.sound.SoundEvents;
import net.minecraft.util.BlockRotation; import net.minecraft.util.BlockRotation;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction; import net.minecraft.util.math.Direction;
import net.minecraft.util.math.Direction.AxisDirection;
import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.Registry;
import net.minecraft.world.Heightmap; import net.minecraft.world.Heightmap;
import net.minecraft.world.World; import net.minecraft.world.World;
@ -99,7 +100,7 @@ public class EndPortalBlock extends NetherPortalBlock implements IRenderTypeable
Direction direction = Direction.EAST; Direction direction = Direction.EAST;
BlockPos.Mutable checkPos = basePos.mutableCopy(); BlockPos.Mutable checkPos = basePos.mutableCopy();
for (int step = 1; step < 64; step++) { for (int step = 1; step < 64; step++) {
for (int i = 0; i < step; i++) { for (int i = 0; i < (step >> 1); i++) {
checkPos.setY(5); checkPos.setY(5);
int ceil = world.getChunk(basePos).sampleHeightmap(Heightmap.Type.WORLD_SURFACE, checkPos.getX(), checkPos.getZ()) + 1; int ceil = world.getChunk(basePos).sampleHeightmap(Heightmap.Type.WORLD_SURFACE, checkPos.getX(), checkPos.getZ()) + 1;
if (ceil < 5) continue; if (ceil < 5) continue;
@ -142,24 +143,16 @@ public class EndPortalBlock extends NetherPortalBlock implements IRenderTypeable
} }
private BlockPos.Mutable findCenter(World world, BlockPos.Mutable pos, Direction.Axis axis, int step) { private BlockPos.Mutable findCenter(World world, BlockPos.Mutable pos, Direction.Axis axis, int step) {
if (step > 21) return pos; if (step > 8) return pos;
BlockState right, left; BlockState right, left;
Direction rightDir, leftDir; Direction rightDir, leftDir;
if (axis == Direction.Axis.X) { rightDir = Direction.from(axis, AxisDirection.POSITIVE);
right = world.getBlockState(pos.east()); leftDir = rightDir.getOpposite();
left = world.getBlockState(pos.west()); right = world.getBlockState(pos.offset(rightDir));
rightDir = Direction.EAST; left = world.getBlockState(pos.offset(leftDir));
leftDir = Direction.WEST;
} else {
right = world.getBlockState(pos.south());
left = world.getBlockState(pos.north());
rightDir = Direction.SOUTH;
leftDir = Direction.NORTH;
}
BlockState down = world.getBlockState(pos.down()); BlockState down = world.getBlockState(pos.down());
if (down.isOf(this)) { if (down.isOf(this)) {
return findCenter(world, pos.move(Direction.DOWN), axis, ++step); return findCenter(world, pos.move(Direction.DOWN), axis, step);
} else if (right.isOf(this) && left.isOf(this)) { } else if (right.isOf(this) && left.isOf(this)) {
return pos; return pos;
} else if (right.isOf(this)) { } else if (right.isOf(this)) {