Algoritma

javabey

git add Brain.java in/earth/people/brainless
Mesajlar
176
En iyi cevaplar
0
Beğeniler
180
Puanları
330
Ruh hali
konuya nasıl giriş yapıcam bulamadım o yüzden direk kodu atıyorum:
Java:
public class BaseStructureEntityShape implements StructureEntityShape {

    private final double specialNumber = 0.375;
    private final double specialNumber2 = 0.625;

    private final Map<String, Entry<EulerAngle, Material>> shapeIdMap;
    private final Map<Integer, Map<Integer, String[]>> roofShapeMap;

    public BaseStructureEntityShape(Map<String, Entry<EulerAngle, Material>> shapeIdMap,
                                    Map<Integer, Map<Integer, String[]>> roofShapeMap) {

        this.shapeIdMap = shapeIdMap;
        this.roofShapeMap = roofShapeMap;
    }

    @Override
    public Structure createStructure(Location l) {

        final List<StructureEntity> structureEntities = new ArrayList<>();

        for (int roof : roofShapeMap.keySet()) {
            Map<Integer, String[]> shapes = roofShapeMap.get(roof);

            for (int li = 0; li < shapes.size(); li++) {

                String[] ids = shapes.get(li);

                for (int idi = 0; idi < ids.length; idi++) {

                    String id = String.valueOf(ids[idi]);
                    Entry<EulerAngle, Material> tempMap = shapeIdMap.get(id);

                    if (tempMap == null) continue;
                    if (tempMap.getValue() == Material.AIR) continue;

                    Material material = tempMap.getValue();
                    EulerAngle angle = tempMap.getKey();

                    double x = 0;
                    double y = calculate(roof) + specialNumber2;
                    double z = 0;

                    int distanceZ = (shapes.size() / 2) - li + 1;
                    int distanceX = (ids.length / 2) - idi + 1;
                    x = calculate(distanceX);
                    z = calculate(distanceZ);

                    DirectionUtil direction = DirectionUtil.SOUTH.getDoubleDirection(l);

                    if (direction == DirectionUtil.NORTH) {
                        z = -z;
                    } else if (direction == DirectionUtil.EAST) {
                        x = -x;
                    } else if (direction == DirectionUtil.NORTHEAST) {
                        z = -z;
                    } else if (direction == DirectionUtil.NORTHWEST) {
                        x = -x;
                        z = -z;
                    } else if (direction == DirectionUtil.SOUTHWEST) {
                        x = -x;
                    }

                    if (Math.toDegrees(angle.getX()) == 90 ||
                            Math.toDegrees(angle.getX()) == 270 ||
                            Math.toDegrees(angle.getX()) == -90) {
                        y += specialNumber2/2;
                    } else if (Math.toDegrees(angle.getX()) == 180 ||
                            Math.toDegrees(angle.getX()) == -180) {
                        y += specialNumber2;
                    }

                    structureEntities.add(new BaseStructureEntity(
                            material,
                            newLoc(l, x, y, z)).pose(angle));
                }
            }
        }

        return new BaseStructure(structureEntities.toArray(new StructureEntity[0]), l);
    }

    private Location newLoc(Location location, double x, double y, double z) {
        return location.clone().add(x,y,z);
    }

    private double calculate(int index) {
        double i = 0;
        if (index > 0) {
            i = index - index * specialNumber;
        } else if (index < 0) {
            i = index + index * -specialNumber;
        }
        return i - 2;
    }

    private int calculateSize() {
        int i = 0;
        for (Map<Integer, String[]> roofShapeMapValues : roofShapeMap.values()) {
            for (String[] roofShapeMapValuesString : roofShapeMapValues.values()) {
                for (String ids : roofShapeMapValuesString) {
                    Entry<EulerAngle, Material> tempMap = shapeIdMap.get(ids);
                    if (tempMap != null) {
                        if (tempMap.getValue() != Material.AIR) i++;
                    }
                }
            }
        }
        return i;
    }

}

ben armor standler ile uğraşıyorum kafalarına block koyup görünmez yapıyorum, entityblock gibi bir şey oluyor ancak sorunum şu, kare olan blockların yönlerini çok saçma da olsa bi şekidle ayarladım directionutil in altında ki ifler ile ancak döndürülmüş blocklar ya da merdivenli, basamaklı olan blocklar için çok iyi çalıştığını söyleyemem biraz algoritma bilgimin eksikliğinden kaynaklı bir durum.

tam olarak yapmak istediğim şey hangi yöne bakıyorsam beni blockların en arka-merkez'e atması ve sırayla tüm armor standleri oluşturması, sadece SOUTH yönü için yaptım ancak diğer yönlerde çok değişik şeyler oluyor bunun için önerisi olan arkadaşlardan yardım istiyorum spigot a da açtım fakat pek bi verim alamadım iyi cevaplar gelmedi çözüm olarak.

eklentinin kaynak kodları için: Lol Turret bu konuyu inceleyebilirsiniz.

özet: armor standleri, baktığım yönü algılıycak ve shape sistemine uygun şekilde oluşturmak.

tag list: @Admicos @Schaffer79 @LifeMCServer @Bernard

matrisleri kullanmayı denedim fakat yazamadım kafamda ki şeyi
 


Son düzenleme:

GodofMilker

Nether Yerlisi
Mesajlar
2,196
En iyi cevaplar
0
Beğeniler
2,562
Puanları
6,790
World editteki rotation şeyi bunu yapmıyor mu*
Oradan baksan olur bence
Hatta direkt apisini kullanmayı da deneyebilirsin de meh
 

javabey

git add Brain.java in/earth/people/brainless
Mesajlar
176
En iyi cevaplar
0
Beğeniler
180
Puanları
330
Ruh hali
World editteki rotation şeyi bunu yapmıyor mu*
Oradan baksan olur bence
Hatta direkt apisini kullanmayı da deneyebilirsin de meh
baktım oraya tam istediğim şeyi bulamadım, armor stand de daha farklı işlediğini söyledi mathew
 

javabey

git add Brain.java in/earth/people/brainless
Mesajlar
176
En iyi cevaplar
0
Beğeniler
180
Puanları
330
Ruh hali
Armorstandler zaten istedikleri gibi dönemiyor mu? Niye south vs olarak ayarlıyorsun ki* sorunu anlamadım ben galiba ama xd
armorstandleri döndürebiliyorsun fakat, her yön için ayrı ayrı yapılması gerekiyor, south için farklı x y z ve eulerangle var, diğer yönler için farklı değerler
 

javabey

git add Brain.java in/earth/people/brainless
Mesajlar
176
En iyi cevaplar
0
Beğeniler
180
Puanları
330
Ruh hali


bu şekilde olması gerekiyor ilkinde south a bakıyor sonra easy ve ya west e bakarak methodu çalışrıcak oyuncu matristeki gibi de yer değiştirmesi gerekiyor ama matristeki her elementte direction ı değişmesi gerekiyor atıyorum a b c blockları south a bakıyorsa ilkinde hem locationları 2. deki gibi olucak hemde west/east e bakıcak
 

GodofMilker

Nether Yerlisi
Mesajlar
2,196
En iyi cevaplar
0
Beğeniler
2,562
Puanları
6,790
armorstandleri döndürebiliyorsun fakat, her yön için ayrı ayrı yapılması gerekiyor, south için farklı x y z ve eulerangle var, diğer yönler için farklı değerler
Dümdüz değer verdiğinde dönüyor diye hatırlıyorum ben :c
Niye south West vs diye ayırıyorsun onu anlamadım bloklar zaten armor standın kafası değil mi? Her an arkasında olması gerekiyorsa oyuncunun açısına o açıyı ekle baktıkları yön için
Konumları için de oyuncuyu merkez alarak döndür
Bloklar gerçek bloksa da 90 ve katları olsun açılar işte
 

javabey

git add Brain.java in/earth/people/brainless
Mesajlar
176
En iyi cevaplar
0
Beğeniler
180
Puanları
330
Ruh hali
Dümdüz değer verdiğinde dönüyor diye hatırlıyorum ben :c
Niye south West vs diye ayırıyorsun onu anlamadım bloklar zaten armor standın kafası değil mi? Her an arkasında olması gerekiyorsa oyuncunun açısına o açıyı ekle baktıkları yön için
Konumları için de oyuncuyu merkez alarak döndür
Bloklar gerçek bloksa da 90 ve katları olsun açılar işte
armor standlerin yönleri oluyor zaten sadece kordinatları yanlış çevriliyor, baktığım yöne doğru bakıyor merdivenler vs. ama x y z lerini yöne göre değiştirmem lazım
 

ByNovem

Kızıltaş Madencisi
Mesajlar
445
En iyi cevaplar
1
Beğeniler
587
Puanları
1,200
Java:
public static final Vector rotateAroundAxisX(Vector v, double angle) {
        double cos = Math.cos(angle);
        double sin = Math.sin(angle);
        double y = v.getY() * cos - v.getZ() * sin;
        double z = v.getY() * sin + v.getZ() * cos;
        return v.setY(y).setZ(z);
    }

    public static final Vector rotateAroundAxisY(Vector v, double angle) {

        double cos = Math.cos(angle);
        double sin = Math.sin(angle);
        double x = v.getX() * cos + v.getZ() * sin;
        double z = v.getX() * -sin + v.getZ() * cos;
        return v.setX(x).setZ(z);
    }

    public static final Vector rotateAroundAxisZ(Vector v, double angle) {
        double cos = Math.cos(angle);
        double sin = Math.sin(angle);
        double x = v.getX() * cos - v.getY() * sin;
        double y = v.getX() * sin + v.getY() * cos;
        return v.setX(x).setY(y);
    }

    public static final Vector rotateVector(Vector v, double angleX, double angleY, double angleZ) {
        rotateAroundAxisX(v, angleX);
        rotateAroundAxisY(v, angleY);
        rotateAroundAxisZ(v, angleZ);
        return v;
    }
Bunu bir yere kaydettikten sonra

Java:
    public void NovemicRotation(Location loc) {
        for (ArmorStand p : pck) {
            Vector v = HashVectorLocation.get(p);  //ArmorStandın ilk lokasyonlarını değiştirmeden kayddiyorsun sonra onları merkezden çıkartıp vektörlüyorsun(B-A olacak şekilde)
            Vector v1 = v.clone();
            VectorUtils.rotateAroundAxisX(v1, (loc.getPitch()) * 0.017453292F);
            VectorUtils.rotateAroundAxisY(v1, -loc.getYaw() * 0.017453292F);
            Location k3 = loc.clone();
            k3.add(v1);
            p.teleport(loc.clone().add(k3));
        }

        
    }

locun yaw ve pitchini değiştirerek istediğin dönmeyi elde edebilirsin ( eğer locun yaw ve pitch ini bir lokasyona eşitlersen ve timer eklersen sürekli o yöne dönecek böylece turret ini yapabilirsin)
 

ByNovem

Kızıltaş Madencisi
Mesajlar
445
En iyi cevaplar
1
Beğeniler
587
Puanları
1,200
teşekkürler, geri dönüş yapıcam testlerim sonucunda.
Bu her yön için geçerli doğru bir yön için bunu yaparsan(yani Southu oluşturdum dedin south lokasyonlarını kaydetmelisin) armor standlar otomatik olarak her yöne dönecektir 360 derece south north gibi kısıtlı yönler olmazlar geriye atma kısmını ayarlaman için gene kendi lokasyonunu turretin yön değiştirilmemiş arkasından almalısın ve aynı vektör işlemlerini uygulamalısın önemli değil iyi akşamlar.
 

javabey

git add Brain.java in/earth/people/brainless
Mesajlar
176
En iyi cevaplar
0
Beğeniler
180
Puanları
330
Ruh hali
maalesef bir türlü yapamadım,
Java:
public class BaseStructureEntity implements StructureEntity {

    private final Material material;
    private final Location pivot;
    private final ArmorStand armorStand;
    private Location location;

    public BaseStructureEntity(Material material, Location pivot) {
        this.material = material;
        this.pivot = pivot;
        this.location = this.pivot;
        this.armorStand = create();
    }

    @Override
    public ArmorStand create() {
        ArmorStand armorStand = location.getWorld().spawn(location, ArmorStand.class);
        armorStand.setGravity(false);
        armorStand.setVisible(false);
        armorStand.setBasePlate(false);
        armorStand.setSmall(false);
        armorStand.setArms(false);
        armorStand.setInvulnerable(true);
        armorStand.setCanPickupItems(false);
        armorStand.setHelmet(new ItemStack(material));
        armorStand.setCollidable(true);
        return armorStand;
    }

    @Override
    public void teleport(Location location) {
        armorStand.teleport(location);
        this.location = location;
    }

    @Override
    public Location shiftTo(Location location) {
        return this.location.add(
                this.location.getBlockX() - location.getBlockX(),
                this.location.getBlockY() - location.getBlockY(),
                this.location.getBlockZ() - location.getBlockZ());
    }

    @Override
    public void pose(EulerAngle angle) {
        armorStand.setHeadPose(angle);
    }

    @Override
    public void rotate(Location loc) {
        Vector v = armorStand.getLocation().getDirection();
        Vector v1 = v.clone();
        VectorUtil.rotateAroundAxisX(v1, loc.getPitch() * 0.017453292F);
        Location k3 = loc.clone().add(v1);
        teleport(k3);
    }

}
Java:
public class BaseStructureEntityShape implements StructureEntityShape {

    private final double specialNumber = 0.375;
    private final double specialNumber2 = 0.625;

    private final Map<String, Entry<EulerAngle, Material>> shapeIdMap;
    private final Map<Integer, Map<Integer, String[]>> roofShapeMap;

    public BaseStructureEntityShape(Map<String, Entry<EulerAngle, Material>> shapeIdMap,
                                    Map<Integer, Map<Integer, String[]>> roofShapeMap) {

        this.shapeIdMap = shapeIdMap;
        this.roofShapeMap = roofShapeMap;
    }

    @Override
    public Structure createStructure(Location l) {

        final List<StructureEntity> structureEntities = new ArrayList<>();

        for (int roof : roofShapeMap.keySet()) {

            double x = 0;
            double y = calculate(roof) + specialNumber2;
            double z = 0;

            Map<Integer, String[]> shapes = roofShapeMap.get(roof);

            for (int li = 0; li < shapes.size(); li++) {

                double distanceZ = shapes.size() / 2.0 - li + 1;
                z = calculate(distanceZ);

                String[] ids = shapes.get(li);

                for (int idi = 0; idi < ids.length; idi++) {

                    double distanceX = ids.length / 2.0 - (idi + 1);
                    x = calculate(distanceX);

                    String id = String.valueOf(ids[idi]);
                    Entry<EulerAngle, Material> tempMap = shapeIdMap.get(id);

                    if (tempMap == null) continue;
                    if (tempMap.getValue() == Material.AIR) continue;

                    Material material = tempMap.getValue();
                    EulerAngle angle = tempMap.getKey();

                    Location newLoc = newLoc(l, x, y, z);

                    StructureEntity structureEntity = new BaseStructureEntity(material, newLoc);

                    structureEntity.pose(angle);

                    structureEntity.rotate(newLoc);

                    structureEntities.add(structureEntity);

                }
            }
        }

        return new BaseStructure(structureEntities.toArray(new StructureEntity[0]), l);
    }

    private Location newLoc(Location location, double x, double y, double z) {
        return location.clone().add(x,y,z);
    }

    private double calculate(double index) {
        double i = 0;
        if (index > 0) {
            i = index - index * specialNumber;
        } else if (index < 0) {
            i = index + index * -specialNumber;
        }
        return i - 2;
    }

    private int calculateSize() {
        int i = 0;
        for (Map<Integer, String[]> roofShapeMapValues : roofShapeMap.values()) {
            for (String[] roofShapeMapValuesString : roofShapeMapValues.values()) {
                for (String ids : roofShapeMapValuesString) {
                    Entry<EulerAngle, Material> tempMap = shapeIdMap.get(ids);
                    if (tempMap != null) {
                        if (tempMap.getValue() != Material.AIR) i++;
                    }
                }
            }
        }
        return i;
    }

}
SOUTH:
1547049732523.png

WEST:
1547049752773.png

NORTH:
1547049770250.png

EAST:
1547049838819.png

Java:
    public void NovemicRotation(Location loc) {
        for (ArmorStand p : pck) {
            Vector v = HashVectorLocation.get(p);  //ArmorStandın ilk lokasyonlarını değiştirmeden kayddiyorsun sonra onları merkezden çıkartıp vektörlüyorsun(B-A olacak şekilde)
            Vector v1 = v.clone();
            VectorUtils.rotateAroundAxisX(v1, (loc.getPitch()) * 0.017453292F);
            VectorUtils.rotateAroundAxisY(v1, -loc.getYaw() * 0.017453292F);
            Location k3 = loc.clone();
            k3.add(v1);
            p.teleport(loc.clone().add(k3));
        }

    }
bu kodda en son ki p.teleport kısmında loc.clone().add(k3) böyle olunca yapı çok başka yerlere gidiyor, direk k3 yaptım bende, biraz fazla armor stand olduğu için ve pc'de render olduğundan kodun yavaş yavaş vectorlemesini görebiliyorum yani kod bir nevi işe yarıyor ancak dediğim gibi kendi etrafında dönüyor yani benim etrafımda döndürmeyi bir türlü yapamadım merkeze kendimi koyamıyorum onu hesaplattırıyorum güya;
Java:
BaseStructureEntity.class > public Structure createStructure(Location l);
double distanceX = ids.length / 2.0 - (idi + 1);
double distanceZ = shapes.size() / 2.0 - li + 1;
bu ikisi ile ama yine banamısın demiyor beni hep en köşeye atıyor
 

GodofMilker

Nether Yerlisi
Mesajlar
2,196
En iyi cevaplar
0
Beğeniler
2,562
Puanları
6,790
maalesef bir türlü yapamadım,
Java:
public class BaseStructureEntity implements StructureEntity {

    private final Material material;
    private final Location pivot;
    private final ArmorStand armorStand;
    private Location location;

    public BaseStructureEntity(Material material, Location pivot) {
        this.material = material;
        this.pivot = pivot;
        this.location = this.pivot;
        this.armorStand = create();
    }

    @Override
    public ArmorStand create() {
        ArmorStand armorStand = location.getWorld().spawn(location, ArmorStand.class);
        armorStand.setGravity(false);
        armorStand.setVisible(false);
        armorStand.setBasePlate(false);
        armorStand.setSmall(false);
        armorStand.setArms(false);
        armorStand.setInvulnerable(true);
        armorStand.setCanPickupItems(false);
        armorStand.setHelmet(new ItemStack(material));
        armorStand.setCollidable(true);
        return armorStand;
    }

    @Override
    public void teleport(Location location) {
        armorStand.teleport(location);
        this.location = location;
    }

    @Override
    public Location shiftTo(Location location) {
        return this.location.add(
                this.location.getBlockX() - location.getBlockX(),
                this.location.getBlockY() - location.getBlockY(),
                this.location.getBlockZ() - location.getBlockZ());
    }

    @Override
    public void pose(EulerAngle angle) {
        armorStand.setHeadPose(angle);
    }

    @Override
    public void rotate(Location loc) {
        Vector v = armorStand.getLocation().getDirection();
        Vector v1 = v.clone();
        VectorUtil.rotateAroundAxisX(v1, loc.getPitch() * 0.017453292F);
        Location k3 = loc.clone().add(v1);
        teleport(k3);
    }

}
Java:
public class BaseStructureEntityShape implements StructureEntityShape {

    private final double specialNumber = 0.375;
    private final double specialNumber2 = 0.625;

    private final Map<String, Entry<EulerAngle, Material>> shapeIdMap;
    private final Map<Integer, Map<Integer, String[]>> roofShapeMap;

    public BaseStructureEntityShape(Map<String, Entry<EulerAngle, Material>> shapeIdMap,
                                    Map<Integer, Map<Integer, String[]>> roofShapeMap) {

        this.shapeIdMap = shapeIdMap;
        this.roofShapeMap = roofShapeMap;
    }

    @Override
    public Structure createStructure(Location l) {

        final List<StructureEntity> structureEntities = new ArrayList<>();

        for (int roof : roofShapeMap.keySet()) {

            double x = 0;
            double y = calculate(roof) + specialNumber2;
            double z = 0;

            Map<Integer, String[]> shapes = roofShapeMap.get(roof);

            for (int li = 0; li < shapes.size(); li++) {

                double distanceZ = shapes.size() / 2.0 - li + 1;
                z = calculate(distanceZ);

                String[] ids = shapes.get(li);

                for (int idi = 0; idi < ids.length; idi++) {

                    double distanceX = ids.length / 2.0 - (idi + 1);
                    x = calculate(distanceX);

                    String id = String.valueOf(ids[idi]);
                    Entry<EulerAngle, Material> tempMap = shapeIdMap.get(id);

                    if (tempMap == null) continue;
                    if (tempMap.getValue() == Material.AIR) continue;

                    Material material = tempMap.getValue();
                    EulerAngle angle = tempMap.getKey();

                    Location newLoc = newLoc(l, x, y, z);

                    StructureEntity structureEntity = new BaseStructureEntity(material, newLoc);

                    structureEntity.pose(angle);

                    structureEntity.rotate(newLoc);

                    structureEntities.add(structureEntity);

                }
            }
        }

        return new BaseStructure(structureEntities.toArray(new StructureEntity[0]), l);
    }

    private Location newLoc(Location location, double x, double y, double z) {
        return location.clone().add(x,y,z);
    }

    private double calculate(double index) {
        double i = 0;
        if (index > 0) {
            i = index - index * specialNumber;
        } else if (index < 0) {
            i = index + index * -specialNumber;
        }
        return i - 2;
    }

    private int calculateSize() {
        int i = 0;
        for (Map<Integer, String[]> roofShapeMapValues : roofShapeMap.values()) {
            for (String[] roofShapeMapValuesString : roofShapeMapValues.values()) {
                for (String ids : roofShapeMapValuesString) {
                    Entry<EulerAngle, Material> tempMap = shapeIdMap.get(ids);
                    if (tempMap != null) {
                        if (tempMap.getValue() != Material.AIR) i++;
                    }
                }
            }
        }
        return i;
    }

}

Java:
    public void NovemicRotation(Location loc) {
        for (ArmorStand p : pck) {
            Vector v = HashVectorLocation.get(p);  //ArmorStandın ilk lokasyonlarını değiştirmeden kayddiyorsun sonra onları merkezden çıkartıp vektörlüyorsun(B-A olacak şekilde)
            Vector v1 = v.clone();
            VectorUtils.rotateAroundAxisX(v1, (loc.getPitch()) * 0.017453292F);
            VectorUtils.rotateAroundAxisY(v1, -loc.getYaw() * 0.017453292F);
            Location k3 = loc.clone();
            k3.add(v1);
            p.teleport(loc.clone().add(k3));
        }

    }
bu kodda en son ki p.teleport kısmında loc.clone().add(k3) böyle olunca yapı çok başka yerlere gidiyor, direk k3 yaptım bende, biraz fazla armor stand olduğu için ve pc'de render olduğundan kodun yavaş yavaş vectorlemesini görebiliyorum yani kod bir nevi işe yarıyor ancak dediğim gibi kendi etrafında dönüyor yani benim etrafımda döndürmeyi bir türlü yapamadım merkeze kendimi koyamıyorum onu hesaplattırıyorum güya;
Java:
BaseStructureEntity.class > public Structure createStructure(Location l);
double distanceX = ids.length / 2.0 - (idi + 1);
double distanceZ = shapes.size() / 2.0 - li + 1;
bu ikisi ile ama yine banamısın demiyor beni hep en köşeye atıyor
lokasyonu 2 katına çıkartıp kyı 1 kere ekliyorsun bu arada niye yakın yapıyor emin değilim ama*
İlk vektörü rotatelerken kullandığın vektörün standın vektörü - loc'un vektörü olması lazım, sonra p'yi loc + k'ya eşitlesen olur sanırım*
 

ByNovem

Kızıltaş Madencisi
Mesajlar
445
En iyi cevaplar
1
Beğeniler
587
Puanları
1,200
Senin etrafında dönmesini istiyorsan B -A yani armor standların mekez lokasyonu olan A yı kendine almalısın ve öyle kaydetmelisin.O k yı düzeltmelisin doğru evet eski bir kodumdan alıp düzenledimde onu görmemişim.Vede input locu kendi lokasyonuna setlemelisin.
 
Son düzenleme:

javabey

git add Brain.java in/earth/people/brainless
Mesajlar
176
En iyi cevaplar
0
Beğeniler
180
Puanları
330
Ruh hali
lokasyonu 2 katına çıkartıp kyı 1 kere ekliyorsun bu arada niye yakın yapıyor emin değilim ama*
İlk vektörü rotatelerken kullandığın vektörün standın vektörü - loc'un vektörü olması lazım, sonra p'yi loc + k'ya eşitlesen olur sanırım*
Java:
    @Override
    public void rotate(Location loc) {
        Vector v = armorStand.getLocation().getDirection();
        Vector v1 = v.clone().subtract(loc.getDirection());
        VectorUtil.rotateAroundAxisX(v1, loc.getPitch() * 0.017453292F);
        Location k3 = loc.clone().add(v1);
        teleport(loc.add(k3));
        // yada
        teleport(k3);
    }

bu şekilde diyorsan olmuyor.
 

Üst