Fix disguises and stuff

This commit is contained in:
libraryaddict
2016-11-27 04:36:57 +13:00
parent 401061bbcd
commit 126a7a4a6a
22 changed files with 373 additions and 645 deletions

View File

@@ -4,18 +4,15 @@ import java.util.HashMap;
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
public class DisguiseValues
{
public class DisguiseValues {
private static HashMap<DisguiseType, DisguiseValues> values = new HashMap<>();
public static DisguiseValues getDisguiseValues(DisguiseType type)
{
switch (type)
{
public static DisguiseValues getDisguiseValues(DisguiseType type) {
switch (type) {
case DONKEY:
case MULE:
case UNDEAD_HORSE:
case ZOMBIE_HORSE:
case SKELETON_HORSE:
type = DisguiseType.HORSE;
break;
@@ -28,6 +25,7 @@ public class DisguiseValues
type = DisguiseType.MINECART;
break;
case WITHER_SKELETON:
case STRAY:
type = DisguiseType.SKELETON;
break;
case ZOMBIE_VILLAGER:
@@ -39,8 +37,7 @@ public class DisguiseValues
return values.get(type);
}
public static Class getNmsEntityClass(DisguiseType type)
{
public static Class getNmsEntityClass(DisguiseType type) {
return getDisguiseValues(type).getNmsEntityClass();
}
@@ -50,50 +47,41 @@ public class DisguiseValues
private double maxHealth;
private Class nmsEntityClass;
public DisguiseValues(DisguiseType type, Class classType, int entitySize, double maxHealth)
{
public DisguiseValues(DisguiseType type, Class classType, int entitySize, double maxHealth) {
values.put(type, this);
nmsEntityClass = classType;
this.maxHealth = maxHealth;
}
public FakeBoundingBox getAdultBox()
{
public FakeBoundingBox getAdultBox() {
return adultBox;
}
public FakeBoundingBox getBabyBox()
{
public FakeBoundingBox getBabyBox() {
return babyBox;
}
public float[] getEntitySize()
{
public float[] getEntitySize() {
return entitySize;
}
public double getMaxHealth()
{
public double getMaxHealth() {
return maxHealth;
}
public Class getNmsEntityClass()
{
public Class getNmsEntityClass() {
return nmsEntityClass;
}
public void setAdultBox(FakeBoundingBox newBox)
{
public void setAdultBox(FakeBoundingBox newBox) {
adultBox = newBox;
}
public void setBabyBox(FakeBoundingBox newBox)
{
public void setBabyBox(FakeBoundingBox newBox) {
babyBox = newBox;
}
public void setEntitySize(float[] size)
{
public void setEntitySize(float[] size) {
this.entitySize = size;
}
}

View File

@@ -2,6 +2,7 @@ package me.libraryaddict.disguise.utilities;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry;
@@ -104,6 +105,10 @@ public class PacketsManager {
return packets;
}
public Collection<ArrayList<PacketContainer>> getDelayedPackets() {
return delayedPackets.values();
}
public void sendDelayed(final Player observer) {
for (final Entry<Integer, ArrayList<PacketContainer>> entry : delayedPackets.entrySet()) {
Bukkit.getScheduler().scheduleSyncDelayedTask(libsDisguises, new Runnable() {
@@ -494,6 +499,16 @@ public class PacketsManager {
mods.write(1, yaw);
}
if (disguise.getType() == DisguiseType.EVOKER_FANGS) {
PacketContainer newPacket = new PacketContainer(Server.ENTITY_STATUS);
StructureModifier<Object> mods = newPacket.getModifier();
mods.write(0, disguise.getEntity().getEntityId());
mods.write(1, (byte) 4);
packets.addPacket(newPacket);
}
return packets;
}

View File

@@ -778,7 +778,7 @@ public class ReflectionManager {
return null;
}
private static Object convertInvalidItem(Object value) {
public static Object convertInvalidItem(Object value) {
if (value instanceof Optional) {
Optional opt = (Optional) value;
@@ -787,10 +787,7 @@ public class ReflectionManager {
Object val = opt.get();
if (val instanceof ItemStack) {
return Optional.of(getNmsItem((ItemStack) val));
}
else if (val instanceof BlockPosition) {
if (val instanceof BlockPosition) {
BlockPosition pos = (BlockPosition) val;
try {
@@ -840,6 +837,9 @@ public class ReflectionManager {
ex.printStackTrace();
}
}
else if (value instanceof ItemStack) {
return getNmsItem((ItemStack) value);
}
return value;
}
@@ -871,8 +871,10 @@ public class ReflectionManager {
}
if (serializer == null) {
throw new IllegalArgumentException(
"Unable to find Serializer for " + value + "! Are you running the latest version of ProtocolLib?");
throw new IllegalArgumentException("Unable to find Serializer for " + value
+ (value instanceof Optional && ((Optional) value).isPresent()
? " (" + ((Optional) value).get().getClass().getName() + ")" : "")
+ "! Are you running the latest version of ProtocolLib?");
}
WrappedDataWatcherObject watcherObject = new WrappedDataWatcherObject(id, serializer);

View File

@@ -22,10 +22,8 @@ import me.libraryaddict.disguise.utilities.PacketsManager;
import me.libraryaddict.disguise.utilities.PacketsManager.LibsPackets;
import me.libraryaddict.disguise.utilities.ReflectionManager;
public class PacketListenerViewDisguises extends PacketAdapter
{
public PacketListenerViewDisguises(LibsDisguises plugin)
{
public class PacketListenerViewDisguises extends PacketAdapter {
public PacketListenerViewDisguises(LibsDisguises plugin) {
super(plugin, ListenerPriority.HIGH, Server.NAMED_ENTITY_SPAWN, Server.ATTACH_ENTITY, Server.REL_ENTITY_MOVE,
Server.REL_ENTITY_MOVE_LOOK, Server.ENTITY_LOOK, Server.ENTITY_TELEPORT, Server.ENTITY_HEAD_ROTATION,
Server.ENTITY_METADATA, Server.ENTITY_EQUIPMENT, Server.ANIMATION, Server.BED, Server.ENTITY_EFFECT,
@@ -33,25 +31,21 @@ public class PacketListenerViewDisguises extends PacketAdapter
}
@Override
public void onPacketSending(final PacketEvent event)
{
public void onPacketSending(final PacketEvent event) {
if (event.isCancelled())
return;
try
{
try {
final Player observer = event.getPlayer();
if (observer.getName().contains("UNKNOWN[")) // If the player is temporary
return;
if (event.getPacket().getIntegers().read(0) != observer.getEntityId())
{
if (event.getPacket().getIntegers().read(0) != observer.getEntityId()) {
return;
}
if (!DisguiseAPI.isSelfDisguised(observer))
{
if (!DisguiseAPI.isSelfDisguised(observer)) {
return;
}
@@ -63,45 +57,48 @@ public class PacketListenerViewDisguises extends PacketAdapter
// Here I grab the packets to convert them to, So I can display them as if the disguise sent them.
LibsPackets transformed = PacketsManager.transformPacket(event.getPacket(), disguise, observer, observer);
if (transformed.isUnhandled())
{
if (transformed.isUnhandled()) {
transformed.getPackets().add(event.getPacket());
}
transformed.setPacketType(event.getPacketType());
for (PacketContainer packet : transformed.getPackets())
{
if (packet.getType() != Server.PLAYER_INFO)
{
if (packet.equals(event.getPacket()))
{
for (PacketContainer packet : transformed.getPackets()) {
if (packet.getType() != Server.PLAYER_INFO) {
if (packet.equals(event.getPacket())) {
packet = packet.shallowClone();
}
packet.getIntegers().write(0, DisguiseAPI.getSelfDisguiseId());
}
try
{
try {
ProtocolLibrary.getProtocolManager().sendServerPacket(observer, packet, false);
}
catch (InvocationTargetException e)
{
catch (InvocationTargetException e) {
e.printStackTrace();
}
}
for (ArrayList<PacketContainer> packets : transformed.getDelayedPackets()) {
for (PacketContainer packet : packets) {
if (packet.getType() != Server.PLAYER_INFO) {
if (packet.equals(event.getPacket())) {
packet = packet.shallowClone();
}
packet.getIntegers().write(0, DisguiseAPI.getSelfDisguiseId());
}
}
}
transformed.sendDelayed(observer);
if (event.getPacketType() == Server.ENTITY_METADATA)
{
if (event.getPacketType() == Server.ENTITY_METADATA) {
event.setPacket(event.getPacket().deepClone());
for (WrappedWatchableObject watch : event.getPacket().getWatchableCollectionModifier().read(0))
{
if (watch.getIndex() == 0)
{
for (WrappedWatchableObject watch : event.getPacket().getWatchableCollectionModifier().read(0)) {
if (watch.getIndex() == 0) {
byte b = (byte) watch.getValue();
byte a = (byte) (b | 1 << 5);
@@ -113,8 +110,7 @@ public class PacketListenerViewDisguises extends PacketAdapter
}
}
}
else if (event.getPacketType() == Server.NAMED_ENTITY_SPAWN)
{
else if (event.getPacketType() == Server.NAMED_ENTITY_SPAWN) {
event.setCancelled(true);
PacketContainer packet = new PacketContainer(Server.ENTITY_METADATA);
@@ -134,40 +130,32 @@ public class PacketListenerViewDisguises extends PacketAdapter
watchableList.add(watch);
packet.getWatchableCollectionModifier().write(0, watchableList);
try
{
try {
ProtocolLibrary.getProtocolManager().sendServerPacket(observer, packet);
}
catch (InvocationTargetException e)
{
catch (InvocationTargetException e) {
e.printStackTrace();
}
}
else if (event.getPacketType() == Server.ANIMATION)
{
if (event.getPacket().getIntegers().read(1) != 2)
{
else if (event.getPacketType() == Server.ANIMATION) {
if (event.getPacket().getIntegers().read(1) != 2) {
event.setCancelled(true);
}
}
else if (event.getPacketType() == Server.ATTACH_ENTITY || event.getPacketType() == Server.REL_ENTITY_MOVE
|| event.getPacketType() == Server.REL_ENTITY_MOVE_LOOK || event.getPacketType() == Server.ENTITY_LOOK
|| event.getPacketType() == Server.ENTITY_TELEPORT || event.getPacketType() == Server.ENTITY_HEAD_ROTATION
|| event.getPacketType() == Server.ENTITY_EFFECT || event.getPacketType() == Server.ENTITY_EQUIPMENT)
{
|| event.getPacketType() == Server.ENTITY_EFFECT || event.getPacketType() == Server.ENTITY_EQUIPMENT) {
event.setCancelled(true);
}
else if (event.getPacketType() == Server.ENTITY_STATUS)
{
else if (event.getPacketType() == Server.ENTITY_STATUS) {
if (disguise.isSelfDisguiseSoundsReplaced() && !disguise.getType().isPlayer()
&& event.getPacket().getBytes().read(0) == 2)
{
&& event.getPacket().getBytes().read(0) == 2) {
event.setCancelled(true);
}
}
}
catch (Exception ex)
{
catch (Exception ex) {
event.setCancelled(true);
ex.printStackTrace();
}