Fix holograms not following players in 1.9+
This commit is contained in:
parent
98929f043f
commit
a61c4cd816
|
@ -34,7 +34,7 @@ public class Hologram {
|
||||||
/**
|
/**
|
||||||
* 1.7 packets uses both EntityIDs while 1.8 uses only the first.
|
* 1.7 packets uses both EntityIDs while 1.8 uses only the first.
|
||||||
*/
|
*/
|
||||||
private ArrayList<Integer> _entityIds = new ArrayList<Integer>();
|
private ArrayList<Integer> _entityIds = new ArrayList<>();
|
||||||
private Entity _followEntity;
|
private Entity _followEntity;
|
||||||
private HologramManager _hologramManager;
|
private HologramManager _hologramManager;
|
||||||
private String[] _hologramText = new String[0];
|
private String[] _hologramText = new String[0];
|
||||||
|
@ -50,7 +50,7 @@ public class Hologram {
|
||||||
private Packet[] _packets1_8;
|
private Packet[] _packets1_8;
|
||||||
private Packet[] _packets1_9;
|
private Packet[] _packets1_9;
|
||||||
private HashSet<UUID> _playersInList = new HashSet<>();
|
private HashSet<UUID> _playersInList = new HashSet<>();
|
||||||
private ArrayList<Player> _playersTracking = new ArrayList<Player>();
|
private ArrayList<Player> _playersTracking = new ArrayList<>();
|
||||||
private boolean _removeEntityDeath;
|
private boolean _removeEntityDeath;
|
||||||
private HologramTarget _target = HologramTarget.BLACKLIST;
|
private HologramTarget _target = HologramTarget.BLACKLIST;
|
||||||
private int _viewDistance = 70;
|
private int _viewDistance = 70;
|
||||||
|
@ -70,7 +70,7 @@ public class Hologram {
|
||||||
*/
|
*/
|
||||||
public Hologram(HologramManager hologramManager, Location location, String... text)
|
public Hologram(HologramManager hologramManager, Location location, String... text)
|
||||||
{
|
{
|
||||||
this(hologramManager, location, false, -1l, text);
|
this(hologramManager, location, false, -1L, text);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -83,7 +83,7 @@ public class Hologram {
|
||||||
*/
|
*/
|
||||||
public Hologram(HologramManager hologramManager, Location location, boolean hideBoundingBox, String... text)
|
public Hologram(HologramManager hologramManager, Location location, boolean hideBoundingBox, String... text)
|
||||||
{
|
{
|
||||||
this(hologramManager, location, hideBoundingBox, -1l, text);
|
this(hologramManager, location, hideBoundingBox, -1L, text);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -431,9 +431,14 @@ public class Hologram {
|
||||||
*
|
*
|
||||||
* @return the original hologram object.
|
* @return the original hologram object.
|
||||||
*/
|
*/
|
||||||
public Hologram setFollowEntity(Entity entityToFollow) {
|
public Hologram setFollowEntity(Entity entityToFollow)
|
||||||
|
{
|
||||||
_followEntity = entityToFollow;
|
_followEntity = entityToFollow;
|
||||||
relativeToEntity = entityToFollow == null ? null : _location.clone().subtract(entityToFollow.getLocation()).toVector();
|
|
||||||
|
if (entityToFollow != null)
|
||||||
|
{
|
||||||
|
relativeToEntity = _location.clone().subtract(entityToFollow.getLocation()).toVector();
|
||||||
|
}
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
@ -447,7 +452,8 @@ public class Hologram {
|
||||||
*
|
*
|
||||||
* @retuen the original hologram object.
|
* @retuen the original hologram object.
|
||||||
*/
|
*/
|
||||||
public Hologram setHologramTarget(HologramTarget newTarget) {
|
public Hologram setHologramTarget(HologramTarget newTarget)
|
||||||
|
{
|
||||||
_target = newTarget;
|
_target = newTarget;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
@ -516,9 +522,32 @@ public class Hologram {
|
||||||
int z = (int) Math.floor(32 * _lastMovement.getZ());
|
int z = (int) Math.floor(32 * _lastMovement.getZ());
|
||||||
|
|
||||||
Packet[] packets1_8 = new Packet[_hologramText.length];
|
Packet[] packets1_8 = new Packet[_hologramText.length];
|
||||||
|
Packet[] packets1_9 = new Packet[_hologramText.length];
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
|
// Generate packets for 1.9 clients
|
||||||
|
x = (int) Math.floor(32 * newLocation.getX());
|
||||||
|
z = (int) Math.floor(32 * newLocation.getZ());
|
||||||
|
|
||||||
|
_lastMovement = new Vector(newLocation.getX() - (x / 32D), 0, newLocation.getZ() - (z / 32D));
|
||||||
|
|
||||||
|
for (Integer entityId : _entityIds)
|
||||||
|
{
|
||||||
|
PacketPlayOutEntityTeleport teleportPacket = new PacketPlayOutEntityTeleport();
|
||||||
|
teleportPacket.a = entityId;
|
||||||
|
teleportPacket.b = x;
|
||||||
|
teleportPacket.c = (int) Math.floor((oldLocation.getY() + (-2.1) + ((double) i * 0.285)) * 32);
|
||||||
|
teleportPacket.d = z;
|
||||||
|
|
||||||
|
packets1_9[i] = teleportPacket;
|
||||||
|
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
|
||||||
|
// Generate move packets for 1.8 clients if the move is small enough.
|
||||||
if (x >= -128 && x <= 127 && y >= -128 && y <= 127 && z >= -128 && z <= 127)
|
if (x >= -128 && x <= 127 && y >= -128 && y <= 127 && z >= -128 && z <= 127)
|
||||||
{
|
{
|
||||||
_lastMovement.subtract(new Vector(x / 32D, y / 32D, z / 32D));
|
_lastMovement.subtract(new Vector(x / 32D, y / 32D, z / 32D));
|
||||||
|
@ -536,28 +565,21 @@ public class Hologram {
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else // Use teleport packets
|
||||||
{
|
{
|
||||||
x = (int) Math.floor(32 * newLocation.getX());
|
packets1_8 = packets1_9;
|
||||||
z = (int) Math.floor(32 * newLocation.getZ());
|
|
||||||
|
|
||||||
_lastMovement = new Vector(newLocation.getX() - (x / 32D), 0, newLocation.getZ() - (z / 32D));
|
|
||||||
|
|
||||||
for (Integer entityId : _entityIds)
|
|
||||||
{
|
|
||||||
PacketPlayOutEntityTeleport teleportPacket = new PacketPlayOutEntityTeleport();
|
|
||||||
teleportPacket.a = entityId;
|
|
||||||
teleportPacket.b = x;
|
|
||||||
teleportPacket.c = (int) Math.floor((oldLocation.getY() + (-2.1) + ((double) i * 0.285)) * 32);
|
|
||||||
teleportPacket.d = z;
|
|
||||||
|
|
||||||
packets1_8[i] = teleportPacket;
|
|
||||||
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Player player : canSee)
|
for (Player player : canSee)
|
||||||
|
{
|
||||||
|
if (UtilPlayer.is1_9(player))
|
||||||
|
{
|
||||||
|
for (Packet packet : packets1_9)
|
||||||
|
{
|
||||||
|
UtilPlayer.sendPacket(player, packet);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
for (Packet packet : packets1_8)
|
for (Packet packet : packets1_8)
|
||||||
{
|
{
|
||||||
|
@ -566,6 +588,7 @@ public class Hologram {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,6 +81,7 @@ public class HologramManager extends MiniPlugin implements IPacketHandler
|
||||||
hologram.stop();
|
hologram.stop();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!hologram.relativeToEntity.equals(following.getLocation().subtract(hologram.getLocation()).toVector()))
|
if (!hologram.relativeToEntity.equals(following.getLocation().subtract(hologram.getLocation()).toVector()))
|
||||||
{
|
{
|
||||||
// And we do this so in the rare offchance it changes by a decimal. It doesn't start turning wonky.
|
// And we do this so in the rare offchance it changes by a decimal. It doesn't start turning wonky.
|
||||||
|
|
Loading…
Reference in New Issue