Search in sources :

Example 61 with Vector3

use of cn.nukkit.math.Vector3 in project Nukkit by Nukkit.

the class ObjectSavannaTree method generate.

public boolean generate(ChunkManager level, NukkitRandom rand, Vector3 position) {
    int i = rand.nextBoundedInt(3) + rand.nextBoundedInt(3) + 5;
    boolean flag = true;
    if (position.getY() >= 1 && position.getY() + i + 1 <= 256) {
        for (int j = (int) position.getY(); j <= position.getY() + 1 + i; ++j) {
            int k = 1;
            if (j == position.getY()) {
                k = 0;
            }
            if (j >= position.getY() + 1 + i - 2) {
                k = 2;
            }
            Vector3 vector3 = new Vector3();
            for (int l = (int) position.getX() - k; l <= position.getX() + k && flag; ++l) {
                for (int i1 = (int) position.getZ() - k; i1 <= position.getZ() + k && flag; ++i1) {
                    if (j >= 0 && j < 256) {
                        vector3.setComponents(l, j, i1);
                        if (!this.canGrowInto(level.getBlockIdAt((int) vector3.x, (int) vector3.y, (int) vector3.z))) {
                            flag = false;
                        }
                    } else {
                        flag = false;
                    }
                }
            }
        }
        if (!flag) {
            return false;
        } else {
            Vector3 down = position.down();
            int block = level.getBlockIdAt(down.getFloorX(), down.getFloorY(), down.getFloorZ());
            if ((block == Block.GRASS || block == Block.DIRT) && position.getY() < 256 - i - 1) {
                this.setDirtAt(level, position.down());
                BlockFace face = BlockFace.Plane.HORIZONTAL.random(rand);
                int k2 = i - rand.nextBoundedInt(4) - 1;
                int l2 = 3 - rand.nextBoundedInt(3);
                int i3 = position.getFloorX();
                int j1 = position.getFloorZ();
                int k1 = 0;
                for (int l1 = 0; l1 < i; ++l1) {
                    int i2 = position.getFloorY() + l1;
                    if (l1 >= k2 && l2 > 0) {
                        i3 += face.getXOffset();
                        j1 += face.getZOffset();
                        --l2;
                    }
                    Vector3 blockpos = new Vector3(i3, i2, j1);
                    int material = level.getBlockIdAt(blockpos.getFloorX(), blockpos.getFloorY(), blockpos.getFloorZ());
                    if (material == Block.AIR || material == Block.LEAVES) {
                        this.placeLogAt(level, blockpos);
                        k1 = i2;
                    }
                }
                Vector3 blockpos2 = new Vector3(i3, k1, j1);
                for (int j3 = -3; j3 <= 3; ++j3) {
                    for (int i4 = -3; i4 <= 3; ++i4) {
                        if (Math.abs(j3) != 3 || Math.abs(i4) != 3) {
                            this.placeLeafAt(level, blockpos2.add(j3, 0, i4));
                        }
                    }
                }
                blockpos2 = blockpos2.up();
                for (int k3 = -1; k3 <= 1; ++k3) {
                    for (int j4 = -1; j4 <= 1; ++j4) {
                        this.placeLeafAt(level, blockpos2.add(k3, 0, j4));
                    }
                }
                this.placeLeafAt(level, blockpos2.east(2));
                this.placeLeafAt(level, blockpos2.west(2));
                this.placeLeafAt(level, blockpos2.south(2));
                this.placeLeafAt(level, blockpos2.north(2));
                i3 = position.getFloorX();
                j1 = position.getFloorZ();
                BlockFace face1 = BlockFace.Plane.HORIZONTAL.random(rand);
                if (face1 != face) {
                    int l3 = k2 - rand.nextBoundedInt(2) - 1;
                    int k4 = 1 + rand.nextBoundedInt(3);
                    k1 = 0;
                    for (int l4 = l3; l4 < i && k4 > 0; --k4) {
                        if (l4 >= 1) {
                            int j2 = position.getFloorY() + l4;
                            i3 += face1.getXOffset();
                            j1 += face1.getZOffset();
                            Vector3 blockpos1 = new Vector3(i3, j2, j1);
                            int material1 = level.getBlockIdAt(blockpos1.getFloorX(), blockpos1.getFloorY(), blockpos1.getFloorZ());
                            if (material1 == Block.AIR || material1 == Block.LEAVES) {
                                this.placeLogAt(level, blockpos1);
                                k1 = j2;
                            }
                        }
                        ++l4;
                    }
                    if (k1 > 0) {
                        Vector3 blockpos3 = new Vector3(i3, k1, j1);
                        for (int i5 = -2; i5 <= 2; ++i5) {
                            for (int k5 = -2; k5 <= 2; ++k5) {
                                if (Math.abs(i5) != 2 || Math.abs(k5) != 2) {
                                    this.placeLeafAt(level, blockpos3.add(i5, 0, k5));
                                }
                            }
                        }
                        blockpos3 = blockpos3.up();
                        for (int j5 = -1; j5 <= 1; ++j5) {
                            for (int l5 = -1; l5 <= 1; ++l5) {
                                this.placeLeafAt(level, blockpos3.add(j5, 0, l5));
                            }
                        }
                    }
                }
                return true;
            } else {
                return false;
            }
        }
    } else {
        return false;
    }
}
Also used : BlockFace(cn.nukkit.math.BlockFace) Vector3(cn.nukkit.math.Vector3)

Example 62 with Vector3

use of cn.nukkit.math.Vector3 in project Nukkit by Nukkit.

the class Location method getDirectionVector.

public Vector3 getDirectionVector() {
    double pitch = ((getPitch() + 90) * Math.PI) / 180;
    double yaw = ((getYaw() + 90) * Math.PI) / 180;
    double x = Math.sin(pitch) * Math.cos(yaw);
    double z = Math.sin(pitch) * Math.sin(yaw);
    double y = Math.cos(pitch);
    return new Vector3(x, y, z).normalize();
}
Also used : Vector3(cn.nukkit.math.Vector3)

Aggregations

Vector3 (cn.nukkit.math.Vector3)62 BlockFace (cn.nukkit.math.BlockFace)16 Block (cn.nukkit.block.Block)5 Player (cn.nukkit.Player)3 Entity (cn.nukkit.entity.Entity)3 BlockIgniteEvent (cn.nukkit.event.block.BlockIgniteEvent)3 Random (java.util.Random)3 ThreadLocalRandom (java.util.concurrent.ThreadLocalRandom)3 EntityLiving (cn.nukkit.entity.EntityLiving)2 BlockRedstoneEvent (cn.nukkit.event.block.BlockRedstoneEvent)2 BlockSpreadEvent (cn.nukkit.event.block.BlockSpreadEvent)2 VehicleMoveEvent (cn.nukkit.event.vehicle.VehicleMoveEvent)2 VehicleUpdateEvent (cn.nukkit.event.vehicle.VehicleUpdateEvent)2 ItemBlock (cn.nukkit.item.ItemBlock)2 TranslationContainer (cn.nukkit.lang.TranslationContainer)2 Level (cn.nukkit.level.Level)2 Location (cn.nukkit.level.Location)2 AxisAlignedBB (cn.nukkit.math.AxisAlignedBB)2 NukkitRandom (cn.nukkit.math.NukkitRandom)2 Rail (cn.nukkit.utils.Rail)2