[SOLVED] Vector help

Discussion in 'Spigot Plugin Development' started by AgentLV, Jun 27, 2015.

  1. Hey,
    I am not very good with vectors (did not have this yet in school) and need help with my plugin which uses vectors.

    Code (Java):
    public void startTask() {
       
              plugin.getServer().getScheduler().runTaskTimerAsynchronously(plugin, new Runnable() {

                  @Override
                  public void run() {
                      for (final Player p : Bukkit.getOnlinePlayers()) {
                       
                          if (p.isSneaking()) {
                           
                              final Location loc = p.getLocation().toVector().add(p.getLocation().getDirection().multiply(3)).toLocation(p.getWorld());
                              loc.setY(loc.getY() + 1);
                              PlayerHologramInfo phl = null;
                              EntitySheep sheep = null;
                           
                              if (!players.containsKey(p)) {
                                  phl = new PlayerHologramInfo();
                               
                                  sheep = new EntitySheep(((CraftWorld) loc.getWorld()).getHandle());
                                  sheep.setInvisible(false);
                                  sheep.setCustomName(p.getName());
                                  sheep.setCustomNameVisible(true);
                                  sheep.setLocation(loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
                               
                                  phl.setSheep(sheep);
                               
                                  PacketPlayOutSpawnEntityLiving packet = new PacketPlayOutSpawnEntityLiving(sheep);
                                  ((CraftPlayer) p).getHandle().playerConnection.sendPacket(packet);
                               
                              } else {
                           
                                  phl = players.get(p);
                               
                                  sheep = phl.getSheep();
                               
                                  if (!loc.equals(phl.getLocation())) {
                                   
                                      p.sendMessage("Loc: " + loc.getX());
                                      p.sendMessage("Phl: " + phl.getLocation().getX());
                                   
                                      double dx = loc.getX() - phl.getLocation().getX();
                                      double dy = loc.getY() - phl.getLocation().getY();
                                      double dz = loc.getZ() - phl.getLocation().getZ();
                                   
                                      PacketPlayOutRelEntityMove packet = new PacketPlayOutRelEntityMove(sheep.getId(), (byte) (dx * 32), (byte) (dy * 32),
                                              (byte) (dz * 32), false);
                                      ((CraftPlayer) p).getHandle().playerConnection.sendPacket(packet);
                                      p.sendMessage("move");
                                  }
                              }
                           
                              phl.setLocation(loc);
                              players.put(p, phl);
                           
                          } else {
                              if (players.containsKey(p)) {
                                  PacketPlayOutEntityDestroy packet = new PacketPlayOutEntityDestroy(players.get(p).getSheep().getId());
                                  ((CraftPlayer) p).getHandle().playerConnection.sendPacket(packet);
                                  players.remove(p);
                              }
                          }
                       
                      }
                   
                  }
              }, 0, 1);
          }
    The problem is that, the sheep is spawned but its movement is just wierd. I want that the sheep is always moved in front of the player, but instead the sheep keeps moving further away from the player.
     
  2. Try the oposite. Just negating it: -dx
     
  3. Code (Java):
                                      double dx = loc.toVector().getX() - phl.getLocation().toVector().getX();
                                      double dy = loc.toVector().getY() - phl.getLocation().toVector().getY();
                                      double dz = loc.toVector().getZ() - phl.getLocation().toVector().getZ();
    Now it works :D