Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package net.minecraft.src;
- import java.util.Random;
- public class Teleporter {
- public void findSpot(World world, Entity entity) {
- byte byte0 = 16;
- double d = -1D;
- int i = MathHelper.floor_double(entity.posX);
- int j = MathHelper.floor_double(entity.posY);
- int k = MathHelper.floor_double(entity.posZ);
- int l = i;
- int i1 = j;
- int j1 = k;
- int k1 = 0;
- int l1 = field_28117_a.nextInt(4);
- for (int i2 = i - byte0; i2 <= i + byte0; i2++) {
- double d1 = ((double)i2 + 0.5D) - entity.posX;
- for (int j3 = k - byte0; j3 <= k + byte0; j3++) {
- double d3 = ((double)j3 + 0.5D) - entity.posZ;
- for (int k4 = 127; k4 >= 0; k4--) {
- if (!world.isAirBlock(i2, k4, j3)) {
- continue;
- }
- for (; k4 > 0 && world.isAirBlock(i2, k4 - 1, j3); k4--) {}
- label2:
- for (int k5 = l1; k5 < l1 + 4; k5++) {
- int l6 = k5 % 2;
- int i8 = 1 - l6;
- if (k5 % 4 >= 2) {
- l6 = -l6;
- i8 = -i8;
- }
- for (int j9 = 0; j9 < 3; j9++) {
- for (int k10 = 0; k10 < 4; k10++) {
- for (int l11 = -1; l11 < 4; l11++) {
- int j12 = i2 + (k10 - 1) * l6 + j9 * i8;
- int l12 = k4 + l11;
- int j13 = (j3 + (k10 - 1) * i8) - j9 * l6;
- if (l11 < 0 && !world.getBlockMaterial(j12, l12, j13).isSolid() || l11 >= 0 && !world.isAirBlock(j12, l12, j13)) {
- break label2;
- }
- }
- }
- }
- double d5 = ((double)k4 + 0.5D) - entity.posY;
- double d7 = d1 * d1 + d5 * d5 + d3 * d3;
- if (d < 0.0D || d7 < d) {
- d = d7;
- l = i2;
- i1 = k4;
- j1 = j3;
- k1 = k5 % 4;
- }
- }
- }
- }
- }
- if (d < 0.0D) {
- for (int j2 = i - byte0; j2 <= i + byte0; j2++) {
- double d2 = ((double)j2 + 0.5D) - entity.posX;
- for (int k3 = k - byte0; k3 <= k + byte0; k3++) {
- double d4 = ((double)k3 + 0.5D) - entity.posZ;
- for (int l4 = 127; l4 >= 0; l4--) {
- if (!world.isAirBlock(j2, l4, k3)) {
- continue;
- }
- for (; world.isAirBlock(j2, l4 - 1, k3); l4--) {}
- label3:
- for (int l5 = l1; l5 < l1 + 2; l5++) {
- int i7 = l5 % 2;
- int j8 = 1 - i7;
- for (int k9 = 0; k9 < 4; k9++) {
- for (int l10 = -1; l10 < 4; l10++) {
- int i12 = j2 + (k9 - 1) * i7;
- int k12 = l4 + l10;
- int i13 = k3 + (k9 - 1) * j8;
- if (l10 < 0 && !world.getBlockMaterial(i12, k12, i13).isSolid() || l10 >= 0 && !world.isAirBlock(i12, k12, i13)) {
- break label3;
- }
- }
- }
- double d6 = ((double)l4 + 0.5D) - entity.posY;
- double d8 = d2 * d2 + d6 * d6 + d4 * d4;
- if (d < 0.0D || d8 < d) {
- d = d8;
- l = j2;
- i1 = l4;
- j1 = k3;
- k1 = l5 % 2;
- }
- }
- }
- }
- }
- }
- int k2 = k1;
- int l2 = l;
- int i3 = i1;
- int l3 = j1;
- int i4 = k2 % 2;
- int j4 = 1 - i4;
- if (k2 % 4 >= 2) {
- i4 = -i4;
- j4 = -j4;
- }
- if (d < 0.0D) {
- if (i1 < 70) {
- i1 = 70;
- }
- if (i1 > 118) {
- i1 = 118;
- }
- i3 = i1;
- }
- double x = (double) l2 + 0.5D;
- double y = (double) i3 + 1.5D;
- double z = (double) l3 + 0.5D;
- entity.setLocationAndAngles(x, y, z, entity.rotationYaw, 0.0F);
- entity.motionX = entity.motionY = entity.motionZ = 0.0D;
- }
- private Random field_28117_a;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement