Fake Player dreht seinen Kopf nicht

Wenn ihr bei eurem Plugin nicht weiter kommt, könnt ihr hier euer Problem beschreiben und um Hilfe bitten.

Fake Player dreht seinen Kopf nicht

Beitragvon bsheep87 » So 14. Aug 2016, 09:57

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. }
Benutzeravatar
bsheep87
 
Beiträge: 17
Registriert: So 14. Aug 2016, 09:39

Re: Fake Player dreht seinen Kopf nicht

Beitragvon Knadda » Mo 15. Aug 2016, 20:42

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
Benutzeravatar
Knadda
 
Beiträge: 49
Registriert: Mo 1. Aug 2016, 07:06

Re: Fake Player dreht seinen Kopf nicht

Beitragvon bsheep87 » Do 18. Aug 2016, 20:43

Hallo Knadda danke für den versuch habe es eben getestet geht leider nicht kenne mich mit dem packet auch leider nicht aus
Benutzeravatar
bsheep87
 
Beiträge: 17
Registriert: So 14. Aug 2016, 09:39

Re: Fake Player dreht seinen Kopf nicht

Beitragvon Knadda » Do 18. Aug 2016, 22:46

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:
Benutzeravatar
Knadda
 
Beiträge: 49
Registriert: Mo 1. Aug 2016, 07:06

Re: Fake Player dreht seinen Kopf nicht

Beitragvon bsheep87 » So 21. Aug 2016, 09:39

ach du bist doch geil es geht super danke :D
Benutzeravatar
bsheep87
 
Beiträge: 17
Registriert: So 14. Aug 2016, 09:39


Zurück zu Hilfe und Support

Wer ist online?

Mitglieder in diesem Forum: Google [Bot], MSN [Bot] und 20 Gäste