Seite 1 von 1

Fake Player dreht seinen Kopf nicht

BeitragVerfasst: So 14. Aug 2016, 09:57
von bsheep87
hallo wie oben schon steht geht es um einen Fake Player in der 1.8 hat es alles super funktioniert aber seit ich auf 1.10 gegangen bin dreht sich nur der Körper der Kopf dreht sich nicht nun mal der code da ich nicht genau weiß wo der fehler ist schreibe ich euch einfach mal die ganze class ich hoffe ihr könnt mir helfen


Code: Alles auswählen
  1. public class LookManager {
  2.    
  3.    private final FakePlayer player;
  4.    
  5.    public LookManager(final FakePlayer arg0) {
  6.       this.player = arg0;
  7.    }
  8.    public void searchTarget() {
  9.       double distance = 15;
  10.       for (final Player p : Bukkit.getOnlinePlayers()) {
  11.          if (p.getWorld().getName().equalsIgnoreCase(this.player.getBukkitEntity().getWorld().getName())) {
  12.             distance = Math.min(distance, p.getLocation().distance(this.player.getBukkitEntity().getLocation()));
  13.          }
  14.       }
  15.       for (final Player p : Bukkit.getOnlinePlayers()) {
  16.          if (((CraftPlayer) p).getHandle() instanceof FakePlayer == false) {
  17.             if (p.getWorld().getName().equalsIgnoreCase(this.player.getBukkitEntity().getWorld().getName())) {
  18.                if (p.getLocation().distance(this.player.getBukkitEntity().getLocation()) <= distance+0.2) {
  19.                   this.faceEntity(this.player.getBukkitEntity(), p);
  20.                }
  21.             }
  22.          }
  23.       }
  24.    }
  25.    private void faceEntity(final Entity entity, final Entity at) {
  26.       if (entity.getWorld() != at.getWorld()) {
  27.          return;
  28.        }
  29.        this.faceLocation(entity, at.getLocation());
  30.    }
  31.    private void faceLocation(final Entity entity, final Location to) {
  32.        if (entity.getWorld() != to.getWorld()) {
  33.           return;
  34.        }
  35.        final Location fromLocation = entity.getLocation();
  36.       
  37.        final double xDiff = to.getX() - fromLocation.getX();
  38.        final double yDiff = to.getY() - fromLocation.getY();
  39.        final double zDiff = to.getZ() - fromLocation.getZ();
  40.       
  41.        final double distanceXZ = Math.sqrt(xDiff * xDiff + zDiff * zDiff);
  42.        final double distanceY = Math.sqrt(distanceXZ * distanceXZ + yDiff * yDiff);
  43.       
  44.        double yaw = Math.toDegrees(Math.acos(xDiff / distanceXZ));
  45.        final double pitch = Math.toDegrees(Math.acos(yDiff / distanceY)) - 90.0D;
  46.        if (zDiff < 0.0D) {
  47.           yaw += Math.abs(180.0D - yaw) * 2.0D;
  48.        }
  49.        this.look(entity, (float)yaw - 90.0F, (float)pitch);
  50.    }
  51.    private void look(final org.bukkit.entity.Entity entity, float yaw, final float pitch) {
  52.        final net.minecraft.server.v1_10_R1.Entity handle = ((CraftEntity) entity).getHandle();
  53.        if (handle == null) {
  54.           return;
  55.        }
  56.        yaw = this.clampYaw(yaw);
  57.        handle.yaw = yaw;
  58.        this.setHeadYaw(handle, yaw);
  59.        handle.pitch = pitch;
  60.    }
  61.    private void setHeadYaw(final net.minecraft.server.v1_10_R1.Entity en, float yaw) {
  62.        if (!(en instanceof EntityLiving)) {
  63.           return;
  64.        }
  65.        final EntityLiving handle = (EntityLiving)en;
  66.        yaw = this.clampYaw(yaw);
  67.        handle.aK = yaw;
  68.        if (!(handle instanceof EntityHuman)) {
  69.           handle.aI = yaw;
  70.        }
  71.        handle.aL = yaw;
  72.    }
  73.    private float clampYaw(float yaw) {
  74.        while (yaw < -180.0F) {
  75.           yaw += 360.0F;
  76.        }
  77.        while (yaw >= 180.0F) {
  78.           yaw -= 360.0F;
  79.        }
  80.        return yaw;
  81.    }
  82. }

Re: Fake Player dreht seinen Kopf nicht

BeitragVerfasst: Mo 15. Aug 2016, 20:42
von Knadda
Versuch es mal damit:

Code: Alles auswählen
  1. public class LookManager {
  2.    
  3.    private final FakePlayer player;
  4.    
  5.    public LookManager(final FakePlayer arg0) {
  6.       this.player = arg0;
  7.    }
  8.    public void searchTarget() {
  9.       double distance = 15;
  10.       for (final Player p : Bukkit.getOnlinePlayers()) {
  11.          if (p.getWorld().getName().equalsIgnoreCase(this.player.getBukkitEntity().getWorld().getName())) {
  12.             distance = Math.min(distance, p.getLocation().distance(this.player.getBukkitEntity().getLocation()));
  13.          }
  14.       }
  15.       for (final Player p : Bukkit.getOnlinePlayers()) {
  16.          if (((CraftPlayer) p).getHandle() instanceof FakePlayer == false) {
  17.             if (p.getWorld().getName().equalsIgnoreCase(this.player.getBukkitEntity().getWorld().getName())) {
  18.                if (p.getLocation().distance(this.player.getBukkitEntity().getLocation()) <= distance+0.2) {
  19.                   this.faceEntity(this.player.getBukkitEntity(), p);
  20.                }
  21.             }
  22.          }
  23.       }
  24.    }
  25.    private void faceEntity(final Entity entity, final Entity at) {
  26.       if (entity.getWorld() != at.getWorld()) {
  27.          return;
  28.        }
  29.        this.faceLocation(entity, at.getLocation());
  30.    }
  31.    private void faceLocation(final Entity entity, final Location to) {
  32.        if (entity.getWorld() != to.getWorld()) {
  33.           return;
  34.        }
  35.        final Location fromLocation = entity.getLocation();
  36.      
  37.        final double xDiff = to.getX() - fromLocation.getX();
  38.        final double yDiff = to.getY() - fromLocation.getY();
  39.        final double zDiff = to.getZ() - fromLocation.getZ();
  40.      
  41.        final double distanceXZ = Math.sqrt(xDiff * xDiff + zDiff * zDiff);
  42.        final double distanceY = Math.sqrt(distanceXZ * distanceXZ + yDiff * yDiff);
  43.      
  44.        double yaw = Math.toDegrees(Math.acos(xDiff / distanceXZ));
  45.        final double pitch = Math.toDegrees(Math.acos(yDiff / distanceY)) - 90.0D;
  46.        if (zDiff < 0.0D) {
  47.           yaw += Math.abs(180.0D - yaw) * 2.0D;
  48.        }
  49.        this.look(entity, (float)yaw - 90.0F, (float)pitch);
  50.    }
  51.    private void look(final org.bukkit.entity.Entity entity, float yaw, final float pitch) {
  52.        final net.minecraft.server.v1_10_R1.Entity handle = ((CraftEntity) entity).getHandle();
  53.        if (handle == null) {
  54.           return;
  55.        }
  56.        yaw = this.clampYaw(yaw);
  57.        handle.yaw = yaw;
  58.        this.setHeadYaw(handle, yaw);
  59.        handle.pitch = pitch;
  60.        
  61.        // Packet an alle Spieler senden.
  62.        
  63.        
  64.        int l = MathHelper.d(handle.yaw * 256.0F / 360.0F);
  65.        int i1 = MathHelper.d(handle.pitch * 256.0F / 360.0F);
  66.        for (Player p : Bukkit.getOnlinePlayers()) {
  67.           ((CraftPlayer) p).getHandle().playerConnection.sendPacket(new PacketPlayOutEntityLook(handle.getId(), (byte)l, (byte)i1, handle.onGround));
  68.        }
  69.    }
  70.    private void setHeadYaw(final net.minecraft.server.v1_10_R1.Entity en, float yaw) {
  71.        if (!(en instanceof EntityLiving)) {
  72.           return;
  73.        }
  74.        final EntityLiving handle = (EntityLiving)en;
  75.        yaw = this.clampYaw(yaw);
  76.        handle.aK = yaw;
  77.        if (!(handle instanceof EntityHuman)) {
  78.           handle.aI = yaw;
  79.        }
  80.        handle.aL = yaw;
  81.    }
  82.    private float clampYaw(float yaw) {
  83.        while (yaw < -180.0F) {
  84.           yaw += 360.0F;
  85.        }
  86.        while (yaw >= 180.0F) {
  87.           yaw -= 360.0F;
  88.        }
  89.        return yaw;
  90.    }


Evtl wenn das packet gesendet wird, dreht sich auch der Kopf mit. Ich hab es aber nicht ausprobiert.

MfG Knadda

Re: Fake Player dreht seinen Kopf nicht

BeitragVerfasst: Do 18. Aug 2016, 20:43
von bsheep87
Hallo Knadda danke für den versuch habe es eben getestet geht leider nicht kenne mich mit dem packet auch leider nicht aus

Re: Fake Player dreht seinen Kopf nicht

BeitragVerfasst: Do 18. Aug 2016, 22:46
von Knadda
ich habe gerade Citizens decompiled da deine Methode "setHeadYaw" auch aus diesem Plugin stammt un gemerkt, dass sie in der 1.10 andere Variablen setzt.
Alte Methode 1.8:
Code: Alles auswählen
  1. private void setHeadYaw(final net.minecraft.server.v1_10_R1.Entity en, float yaw) {
  2.        if (!(en instanceof EntityLiving)) {
  3.           return;
  4.        }
  5.        final EntityLiving handle = (EntityLiving)en;
  6.        yaw = this.clampYaw(yaw);
  7.        handle.aK = yaw;
  8.        if (!(handle instanceof EntityHuman)) {
  9.           handle.aI = yaw;
  10.        }
  11.        handle.aL = yaw;
  12.    }

Neue Methode 1.10:
Code: Alles auswählen
  1. public static void setHeadYaw(net.minecraft.server.v1_10_R1.Entity en, float yaw)
  2.   {
  3.     if (!(en instanceof EntityLiving)) {
  4.       return;
  5.     }
  6.     EntityLiving handle = (EntityLiving)en;
  7.     yaw = clampYaw(yaw);
  8.     handle.aP = yaw;
  9.     if (!(handle instanceof EntityHuman)) {
  10.       handle.aO = yaw;
  11.     }
  12.     handle.aQ = yaw;
  13.   }

Entferne das mit dem Packet und versuche es mal mit diesem Code ;)
P.S: Ich programmiere keine Plugins mehr ;) ich helfe nurnoch bei Problemen :lol:

Re: Fake Player dreht seinen Kopf nicht

BeitragVerfasst: So 21. Aug 2016, 09:39
von bsheep87
ach du bist doch geil es geht super danke :D