Add new armorstand option for player disguise names, clean up config cos of the player name options

Added ability to set multiple names on a player disguise, also normal mob but that is untested and has no command accessibility
Permission to do this is libsdisguises.multiname
Renamed "Now disguised as a %s" to "Now disguised as %s" for messages
This commit is contained in:
libraryaddict
2020-05-07 21:27:07 +12:00
parent 6170d8e77f
commit 888bbd9521
16 changed files with 406 additions and 104 deletions

View File

@@ -25,6 +25,7 @@ public class PacketsManager {
private static PacketListener viewDisguisesListener;
private static boolean viewDisguisesListenerEnabled;
private static PacketsHandler packetsHandler;
private static PacketListener destroyListener;
public static void addPacketListeners() {
// Add a client listener to cancel them interacting with uninteractable disguised entitys.
@@ -160,8 +161,10 @@ public class PacketsManager {
}
mainListener = new PacketListenerMain(LibsDisguises.getInstance(), packetsToListen);
destroyListener = new PacketListenerDestroyEntity(LibsDisguises.getInstance());
ProtocolLibrary.getProtocolManager().addPacketListener(mainListener);
ProtocolLibrary.getProtocolManager().addPacketListener(destroyListener);
}
}
@@ -183,7 +186,7 @@ public class PacketsManager {
if (enabled) {
DisguiseUtilities.setupFakeDisguise(disguise);
} else {
DisguiseUtilities.removeSelfDisguise(player);
DisguiseUtilities.removeSelfDisguise(disguise);
}
if (inventoryModifierEnabled &&

View File

@@ -18,6 +18,8 @@ import org.bukkit.entity.Player;
import org.bukkit.metadata.FixedMetadataValue;
import org.bukkit.util.Vector;
import java.util.ArrayList;
/**
* Created by libraryaddict on 3/01/2019.
*/
@@ -38,6 +40,36 @@ public class PacketHandlerMovement implements IPacketHandler {
@Override
public void handle(Disguise disguise, PacketContainer sentPacket, LibsPackets packets, Player observer,
Entity entity) {
handle2(disguise, sentPacket, packets, observer, entity);
int len = disguise.getMultiName().length;
if (len == 0) {
return;
}
ArrayList<PacketContainer> toAdd = new ArrayList<>();
for (PacketContainer packet : packets.getPackets()) {
for (int i = 0; i < len; i++) {
for (int standId : disguise.getArmorstandIds()) {
PacketContainer packet2 = packet.shallowClone();
packet2.getIntegers().write(0, standId);
if (packet2.getType() == PacketType.Play.Server.ENTITY_TELEPORT) {
packet2.getDoubles().write(1, packet2.getDoubles().read(1) + -0.175 + (0.28 * i));
}
toAdd.add(packet2);
}
}
}
packets.getPackets().addAll(toAdd);
}
public void handle2(Disguise disguise, PacketContainer sentPacket, LibsPackets packets, Player observer,
Entity entity) {
if (invalid && RandomUtils.nextDouble() < 0.1) {
packets.clear();
return;

View File

@@ -151,7 +151,7 @@ public class PacketHandlerSpawn implements IPacketHandler {
mods.write(5, pitch);
} else if (disguise.getType().isPlayer()) {
PlayerDisguise playerDisguise = (PlayerDisguise) disguise;
boolean visibleOrNewCompat = playerDisguise.isNameVisible() || DisguiseConfig.isScoreboardDisguiseNames();
boolean visibleOrNewCompat = playerDisguise.isNameVisible() || DisguiseConfig.isScoreboardNames();
WrappedGameProfile spawnProfile = visibleOrNewCompat ? playerDisguise.getGameProfile() : ReflectionManager
.getGameProfileWithThisSkin(UUID.randomUUID(), visibleOrNewCompat ? playerDisguise.getName() : "",
@@ -387,6 +387,8 @@ public class PacketHandlerSpawn implements IPacketHandler {
packets.addPacket(newPacket);
}
DisguiseUtilities.getNamePackets(disguise, new String[0]).forEach(packets::addPacket);
// If armor must be sent because its currently not displayed and would've been sent normally
// This sends the armor packets so that the player isn't naked.

View File

@@ -78,7 +78,8 @@ public class PacketListenerViewSelfDisguise extends PacketAdapter {
}
for (PacketContainer newPacket : transformed.getPackets()) {
if (newPacket.getType() != Server.PLAYER_INFO) {
if (newPacket.getType() != Server.PLAYER_INFO &&
newPacket.getIntegers().read(0) == observer.getEntityId()) {
if (newPacket == packet) {
newPacket = newPacket.shallowClone();
}