More changes, fixed armor
This commit is contained in:
parent
cfdd7bbecf
commit
e5799d7a5e
@ -3,7 +3,6 @@ package me.libraryaddict.disguise.commands;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
@ -39,6 +38,7 @@ import me.libraryaddict.disguise.disguisetypes.MobDisguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.PlayerDisguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.RabbitType;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers;
|
||||
|
||||
/**
|
||||
* @author libraryaddict
|
||||
@ -157,26 +157,6 @@ public abstract class BaseDisguiseCommand implements CommandExecutor {
|
||||
}
|
||||
}
|
||||
|
||||
protected Method[] getDisguiseWatcherMethods(Class<? extends FlagWatcher> watcherClass) {
|
||||
Method[] methods = watcherClass.getMethods();
|
||||
|
||||
methods = Arrays.copyOf(methods, methods.length + 4);
|
||||
int i = 4;
|
||||
|
||||
for (String methodName : new String[] {
|
||||
"setViewSelfDisguise", "setHideHeldItemFromSelf", "setHideArmorFromSelf", "setHearSelfDisguise"
|
||||
}) {
|
||||
try {
|
||||
methods[methods.length - i--] = Disguise.class.getMethod(methodName, boolean.class);
|
||||
}
|
||||
catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
return methods;
|
||||
}
|
||||
|
||||
private Entry<Method, Integer> getMethod(Method[] methods, String methodName, int toStart) {
|
||||
for (int i = toStart; i < methods.length; i++) {
|
||||
Method method = methods[i];
|
||||
@ -665,7 +645,7 @@ public abstract class BaseDisguiseCommand implements CommandExecutor {
|
||||
System.arraycopy(args, toSkip, newArgs, 0, args.length - toSkip);
|
||||
args = newArgs;
|
||||
|
||||
Method[] methods = this.getDisguiseWatcherMethods(disguise.getWatcher().getClass());
|
||||
Method[] methods = ReflectionFlagWatchers.getDisguiseWatcherMethods(disguise.getWatcher().getClass());
|
||||
|
||||
for (int i = 0; i < args.length; i += 2) {
|
||||
String methodName = args[i];
|
||||
@ -985,9 +965,23 @@ public abstract class BaseDisguiseCommand implements CommandExecutor {
|
||||
|
||||
private ItemStack parseToItemstack(String string) throws Exception {
|
||||
String[] split = string.split(":", -1);
|
||||
|
||||
int itemId = -1;
|
||||
|
||||
if (isNumeric(split[0])) {
|
||||
int itemId = Integer.parseInt(split[0]);
|
||||
itemId = Integer.parseInt(split[0]);
|
||||
}
|
||||
else {
|
||||
try {
|
||||
itemId = Material.valueOf(split[0].toUpperCase()).getId();
|
||||
}
|
||||
catch (Exception ex) {
|
||||
}
|
||||
}
|
||||
|
||||
if (itemId != -1) {
|
||||
short itemDura = 0;
|
||||
|
||||
if (split.length > 1) {
|
||||
if (isNumeric(split[1])) {
|
||||
itemDura = Short.parseShort(split[1]);
|
||||
@ -996,6 +990,7 @@ public abstract class BaseDisguiseCommand implements CommandExecutor {
|
||||
throw parseToException("item ID:Durability combo", string, "%s");
|
||||
}
|
||||
}
|
||||
|
||||
return new ItemStack(itemId, 1, itemDura);
|
||||
}
|
||||
else {
|
||||
|
@ -123,7 +123,7 @@ public class DisguiseCommand extends BaseDisguiseCommand implements TabCompleter
|
||||
addMethods = false;
|
||||
|
||||
if (info.isEnums()) {
|
||||
for (String e : info.getEnums()) {
|
||||
for (String e : info.getEnums(origArgs[origArgs.length - 1])) {
|
||||
tabs.add(e);
|
||||
}
|
||||
}
|
||||
|
@ -46,7 +46,7 @@ public class DisguiseHelpCommand extends BaseDisguiseCommand implements TabCompl
|
||||
|
||||
if (help != null) {
|
||||
sender.sendMessage(ChatColor.RED + help.getName() + ": " + ChatColor.GREEN
|
||||
+ StringUtils.join(help.getEnums(), ChatColor.RED + ", " + ChatColor.GREEN));
|
||||
+ StringUtils.join(help.getEnums(""), ChatColor.RED + ", " + ChatColor.GREEN));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -108,7 +108,7 @@ public class EntityDisguiseCommand extends BaseDisguiseCommand implements TabCom
|
||||
addMethods = false;
|
||||
|
||||
if (info.isEnums()) {
|
||||
for (String e : info.getEnums()) {
|
||||
for (String e : info.getEnums(origArgs[origArgs.length - 1])) {
|
||||
tabs.add(e);
|
||||
}
|
||||
}
|
||||
|
@ -159,7 +159,7 @@ public class PlayerDisguiseCommand extends BaseDisguiseCommand implements TabCom
|
||||
addMethods = false;
|
||||
|
||||
if (info.isEnums()) {
|
||||
for (String e : info.getEnums()) {
|
||||
for (String e : info.getEnums(origArgs[origArgs.length - 1])) {
|
||||
tabs.add(e);
|
||||
}
|
||||
}
|
||||
|
@ -269,7 +269,7 @@ public class RadiusDisguiseCommand extends BaseDisguiseCommand implements TabCom
|
||||
addMethods = false;
|
||||
|
||||
if (info.isEnums()) {
|
||||
for (String e : info.getEnums()) {
|
||||
for (String e : info.getEnums(origArgs[origArgs.length - 1])) {
|
||||
tabs.add(e);
|
||||
}
|
||||
}
|
||||
|
@ -34,16 +34,15 @@ public class FlagWatcher {
|
||||
private HashMap<Integer, Object> backupEntityValues = new HashMap<>();
|
||||
private TargetedDisguise disguise;
|
||||
private HashMap<Integer, Object> entityValues = new HashMap<>();
|
||||
private EntityEquipment equipment;
|
||||
private LibsEquipment equipment;
|
||||
private boolean hasDied;
|
||||
private HashSet<Integer> modifiedEntityAnimations = new HashSet<>();
|
||||
private List<WrappedWatchableObject> watchableObjects;
|
||||
|
||||
public FlagWatcher(Disguise disguise) {
|
||||
this.disguise = (TargetedDisguise) disguise;
|
||||
equipment = ReflectionManager.createEntityEquipment(disguise.getEntity());
|
||||
|
||||
this.setData(FlagType.ENTITY_AIR_TICKS, 0);
|
||||
equipment = new LibsEquipment(this);
|
||||
}
|
||||
|
||||
private byte addEntityAnimations(byte originalValue, byte entityValue) {
|
||||
@ -72,7 +71,7 @@ public class FlagWatcher {
|
||||
}
|
||||
|
||||
cloned.entityValues = (HashMap<Integer, Object>) entityValues.clone();
|
||||
cloned.equipment = ReflectionManager.createEntityEquipment(cloned.getDisguise().getEntity());
|
||||
cloned.equipment = equipment.clone(cloned);
|
||||
cloned.modifiedEntityAnimations = (HashSet<Integer>) modifiedEntityAnimations.clone();
|
||||
cloned.addEntityAnimations = addEntityAnimations;
|
||||
|
||||
@ -202,10 +201,7 @@ public class FlagWatcher {
|
||||
}
|
||||
|
||||
public ItemStack[] getArmor() {
|
||||
ItemStack[] armor = new ItemStack[4];
|
||||
System.arraycopy(armor, 0, armor, 0, 4);
|
||||
|
||||
return armor;
|
||||
return getEquipment().getArmorContents();
|
||||
}
|
||||
|
||||
public String getCustomName() {
|
||||
@ -225,39 +221,15 @@ public class FlagWatcher {
|
||||
}
|
||||
|
||||
public ItemStack getItemInMainHand() {
|
||||
if (equipment == null)
|
||||
return null;
|
||||
|
||||
return equipment.getItemInMainHand();
|
||||
}
|
||||
|
||||
public ItemStack getItemInOffHand() {
|
||||
if (equipment == null)
|
||||
return null;
|
||||
|
||||
return equipment.getItemInOffHand();
|
||||
}
|
||||
|
||||
public ItemStack getItemStack(EquipmentSlot slot) {
|
||||
if (equipment == null)
|
||||
return null;
|
||||
|
||||
switch (slot) {
|
||||
case CHEST:
|
||||
return equipment.getChestplate();
|
||||
case FEET:
|
||||
return equipment.getBoots();
|
||||
case HAND:
|
||||
return equipment.getItemInMainHand();
|
||||
case HEAD:
|
||||
return equipment.getHelmet();
|
||||
case LEGS:
|
||||
return equipment.getLeggings();
|
||||
case OFF_HAND:
|
||||
return equipment.getItemInOffHand();
|
||||
}
|
||||
|
||||
return null;
|
||||
return equipment.getItem(slot);
|
||||
}
|
||||
|
||||
protected <Y> Y getData(FlagType<Y> flagType) {
|
||||
@ -407,11 +379,8 @@ public class FlagWatcher {
|
||||
addEntityAnimations = isEntityAnimationsAdded;
|
||||
}
|
||||
|
||||
public void setArmor(ItemStack[] itemstack) {
|
||||
setItemStack(EquipmentSlot.HEAD, itemstack[0]);
|
||||
setItemStack(EquipmentSlot.CHEST, itemstack[1]);
|
||||
setItemStack(EquipmentSlot.LEGS, itemstack[2]);
|
||||
setItemStack(EquipmentSlot.FEET, itemstack[3]);
|
||||
public void setArmor(ItemStack[] items) {
|
||||
getEquipment().setArmorContents(items);
|
||||
}
|
||||
|
||||
protected void setBackupValue(FlagType no, Object value) {
|
||||
@ -484,54 +453,46 @@ public class FlagWatcher {
|
||||
setItemStack(EquipmentSlot.OFF_HAND, itemstack);
|
||||
}
|
||||
|
||||
private void setItemStack(EntityEquipment equipment, EquipmentSlot slot, ItemStack itemStack) {
|
||||
if (equipment == null)
|
||||
public void setItemStack(EquipmentSlot slot, ItemStack itemStack) {
|
||||
setItemStack(slot, itemStack);
|
||||
|
||||
sendItemStack(slot, itemStack);
|
||||
}
|
||||
|
||||
protected void sendItemStack(EquipmentSlot slot, ItemStack itemStack) {
|
||||
if (!DisguiseAPI.isDisguiseInUse(getDisguise()) || getDisguise().getWatcher() != this
|
||||
|| getDisguise().getEntity() == null)
|
||||
return;
|
||||
|
||||
if (itemStack == null && getDisguise().getEntity() instanceof LivingEntity) {
|
||||
EntityEquipment equip = ((LivingEntity) getDisguise().getEntity()).getEquipment();
|
||||
|
||||
switch (slot) {
|
||||
case CHEST:
|
||||
equipment.setChestplate(itemStack);
|
||||
break;
|
||||
case FEET:
|
||||
equipment.setBoots(itemStack);
|
||||
break;
|
||||
case HAND:
|
||||
equipment.setItemInMainHand(itemStack);
|
||||
break;
|
||||
case HEAD:
|
||||
equipment.setHelmet(itemStack);
|
||||
break;
|
||||
case LEGS:
|
||||
equipment.setLeggings(itemStack);
|
||||
itemStack = equip.getItemInMainHand();
|
||||
break;
|
||||
case OFF_HAND:
|
||||
equipment.setItemInOffHand(itemStack);
|
||||
itemStack = equip.getItemInOffHand();
|
||||
break;
|
||||
case HEAD:
|
||||
itemStack = equip.getHelmet();
|
||||
break;
|
||||
case CHEST:
|
||||
itemStack = equip.getChestplate();
|
||||
break;
|
||||
case LEGS:
|
||||
itemStack = equip.getLeggings();
|
||||
break;
|
||||
case FEET:
|
||||
itemStack = equip.getBoots();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void setItemStack(EquipmentSlot slot, ItemStack itemStack) {
|
||||
if (equipment == null)
|
||||
return;
|
||||
Object itemToSend = ReflectionManager.getNmsItem(itemStack);
|
||||
|
||||
// Itemstack which is null means that its not replacing the disguises itemstack.
|
||||
if (itemStack == null) {
|
||||
// Find the item to replace it with
|
||||
if (getDisguise().getEntity() instanceof LivingEntity) {
|
||||
EntityEquipment equipment = ((LivingEntity) getDisguise().getEntity()).getEquipment();
|
||||
setItemStack(equipment, slot, itemStack);
|
||||
}
|
||||
}
|
||||
|
||||
Object itemToSend = null;
|
||||
|
||||
if (itemStack != null && itemStack.getTypeId() != 0) {
|
||||
itemToSend = ReflectionManager.getNmsItem(itemStack);
|
||||
}
|
||||
|
||||
setItemStack(equipment, slot, itemStack);
|
||||
|
||||
if (DisguiseAPI.isDisguiseInUse(getDisguise()) && getDisguise().getWatcher() == this) {
|
||||
PacketContainer packet = new PacketContainer(Server.ENTITY_EQUIPMENT);
|
||||
|
||||
StructureModifier<Object> mods = packet.getModifier();
|
||||
@ -541,6 +502,7 @@ public class FlagWatcher {
|
||||
mods.write(2, itemToSend);
|
||||
|
||||
for (Player player : DisguiseUtilities.getPerverts(getDisguise())) {
|
||||
|
||||
try {
|
||||
ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet);
|
||||
}
|
||||
@ -549,7 +511,6 @@ public class FlagWatcher {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void setNoGravity(boolean noGravity) {
|
||||
setData(FlagType.ENTITY_NO_GRAVITY, noGravity);
|
||||
|
211
src/me/libraryaddict/disguise/disguisetypes/LibsEquipment.java
Normal file
211
src/me/libraryaddict/disguise/disguisetypes/LibsEquipment.java
Normal file
@ -0,0 +1,211 @@
|
||||
package me.libraryaddict.disguise.disguisetypes; // Its here so I can make use of flagWatcher.sendItemStack() which is protected
|
||||
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.inventory.EntityEquipment;
|
||||
import org.bukkit.inventory.EquipmentSlot;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class LibsEquipment implements EntityEquipment {
|
||||
private ItemStack[] equipment = new ItemStack[6];
|
||||
private FlagWatcher flagWatcher;
|
||||
|
||||
public LibsEquipment(FlagWatcher flagWatcher) {
|
||||
this.flagWatcher = flagWatcher;
|
||||
}
|
||||
|
||||
public LibsEquipment clone(FlagWatcher flagWatcher) {
|
||||
LibsEquipment newEquip = new LibsEquipment(flagWatcher);
|
||||
|
||||
for (int i = 0; i < equipment.length; i++) {
|
||||
ItemStack item = equipment[i];
|
||||
|
||||
if (item == null)
|
||||
continue;
|
||||
|
||||
newEquip.equipment[i] = item.clone();
|
||||
}
|
||||
|
||||
return newEquip;
|
||||
}
|
||||
|
||||
public ItemStack getItem(EquipmentSlot slot) {
|
||||
return equipment[slot.ordinal()];
|
||||
}
|
||||
|
||||
public void setItem(EquipmentSlot slot, ItemStack item) {
|
||||
if (getItem(slot) == item)
|
||||
return;
|
||||
|
||||
equipment[slot.ordinal()] = item;
|
||||
flagWatcher.sendItemStack(slot, item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getItemInMainHand() {
|
||||
return getItem(EquipmentSlot.HAND);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setItemInMainHand(ItemStack item) {
|
||||
setItem(EquipmentSlot.HAND, item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getItemInOffHand() {
|
||||
return getItem(EquipmentSlot.OFF_HAND);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setItemInOffHand(ItemStack item) {
|
||||
setItem(EquipmentSlot.OFF_HAND, item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getItemInHand() {
|
||||
return getItem(EquipmentSlot.HAND);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setItemInHand(ItemStack stack) {
|
||||
setItem(EquipmentSlot.HAND, stack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getHelmet() {
|
||||
return getItem(EquipmentSlot.HEAD);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setHelmet(ItemStack helmet) {
|
||||
setItem(EquipmentSlot.HEAD, helmet);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getChestplate() {
|
||||
return getItem(EquipmentSlot.CHEST);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setChestplate(ItemStack chestplate) {
|
||||
setItem(EquipmentSlot.CHEST, chestplate);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getLeggings() {
|
||||
return getItem(EquipmentSlot.LEGS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLeggings(ItemStack leggings) {
|
||||
setItem(EquipmentSlot.LEGS, leggings);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getBoots() {
|
||||
return getItem(EquipmentSlot.FEET);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBoots(ItemStack boots) {
|
||||
setItem(EquipmentSlot.FEET, boots);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack[] getArmorContents() {
|
||||
return new ItemStack[] {
|
||||
getBoots(), getLeggings(), getChestplate(), getHelmet()
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setArmorContents(ItemStack[] items) {
|
||||
setBoots(items[0]);
|
||||
setLeggings(items[1]);
|
||||
setChestplate(items[2]);
|
||||
setHelmet(items[3]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
setBoots(null);
|
||||
setLeggings(null);
|
||||
setChestplate(null);
|
||||
setHelmet(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getItemInHandDropChance() {
|
||||
throw new UnsupportedOperationException("This is not supported on a disguise");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setItemInHandDropChance(float chance) {
|
||||
throw new UnsupportedOperationException("This is not supported on a disguise");
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getItemInMainHandDropChance() {
|
||||
throw new UnsupportedOperationException("This is not supported on a disguise");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setItemInMainHandDropChance(float chance) {
|
||||
throw new UnsupportedOperationException("This is not supported on a disguise");
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getItemInOffHandDropChance() {
|
||||
throw new UnsupportedOperationException("This is not supported on a disguise");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setItemInOffHandDropChance(float chance) {
|
||||
throw new UnsupportedOperationException("This is not supported on a disguise");
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getHelmetDropChance() {
|
||||
throw new UnsupportedOperationException("This is not supported on a disguise");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setHelmetDropChance(float chance) {
|
||||
throw new UnsupportedOperationException("This is not supported on a disguise");
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getChestplateDropChance() {
|
||||
throw new UnsupportedOperationException("This is not supported on a disguise");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setChestplateDropChance(float chance) {
|
||||
throw new UnsupportedOperationException("This is not supported on a disguise");
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getLeggingsDropChance() {
|
||||
throw new UnsupportedOperationException("This is not supported on a disguise");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLeggingsDropChance(float chance) {
|
||||
throw new UnsupportedOperationException("This is not supported on a disguise");
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getBootsDropChance() {
|
||||
throw new UnsupportedOperationException("This is not supported on a disguise");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBootsDropChance(float chance) {
|
||||
throw new UnsupportedOperationException("This is not supported on a disguise");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Entity getHolder() {
|
||||
throw new UnsupportedOperationException("This is not supported on a disguise");
|
||||
}
|
||||
|
||||
}
|
@ -25,26 +25,21 @@ import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
import me.libraryaddict.disguise.utilities.ReflectionManager;
|
||||
|
||||
public class LivingWatcher extends FlagWatcher
|
||||
{
|
||||
public class LivingWatcher extends FlagWatcher {
|
||||
static Map<Integer, Object> list = new HashMap<>();
|
||||
static Method getId;
|
||||
|
||||
static
|
||||
{
|
||||
try
|
||||
{
|
||||
static {
|
||||
try {
|
||||
getId = ReflectionManager.getNmsMethod("MobEffectList", "getId", ReflectionManager.getNmsClass("MobEffectList"));
|
||||
Object REGISTRY = ReflectionManager.getNmsField("MobEffectList", "REGISTRY").get(null);
|
||||
|
||||
for (Object next : ((Iterable) REGISTRY))
|
||||
{
|
||||
for (Object next : ((Iterable) REGISTRY)) {
|
||||
int id = (int) getId.invoke(null, next);
|
||||
list.put(id, next);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
@ -53,15 +48,12 @@ public class LivingWatcher extends FlagWatcher
|
||||
private boolean maxHealthSet;
|
||||
private HashSet<Integer> potionEffects = new HashSet<>();
|
||||
|
||||
public LivingWatcher(Disguise disguise)
|
||||
{
|
||||
public LivingWatcher(Disguise disguise) {
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public void addPotionEffect(PotionEffectType potionEffect)
|
||||
{
|
||||
if (!hasPotionEffect(potionEffect))
|
||||
{
|
||||
public void addPotionEffect(PotionEffectType potionEffect) {
|
||||
if (!hasPotionEffect(potionEffect)) {
|
||||
removePotionEffect(potionEffect);
|
||||
potionEffects.add(potionEffect.getId());
|
||||
|
||||
@ -70,8 +62,7 @@ public class LivingWatcher extends FlagWatcher
|
||||
}
|
||||
|
||||
@Override
|
||||
public LivingWatcher clone(Disguise disguise)
|
||||
{
|
||||
public LivingWatcher clone(Disguise disguise) {
|
||||
LivingWatcher clone = (LivingWatcher) super.clone(disguise);
|
||||
clone.potionEffects = (HashSet<Integer>) potionEffects.clone();
|
||||
clone.maxHealth = maxHealth;
|
||||
@ -80,27 +71,22 @@ public class LivingWatcher extends FlagWatcher
|
||||
return clone;
|
||||
}
|
||||
|
||||
public float getHealth()
|
||||
{
|
||||
public float getHealth() {
|
||||
return (float) getData(FlagType.LIVING_HEALTH);
|
||||
}
|
||||
|
||||
public double getMaxHealth()
|
||||
{
|
||||
public double getMaxHealth() {
|
||||
return maxHealth;
|
||||
}
|
||||
|
||||
public boolean isPotionParticlesAmbient()
|
||||
{
|
||||
public boolean isPotionParticlesAmbient() {
|
||||
return (boolean) getData(FlagType.LIVING_POTION_AMBIENT);
|
||||
}
|
||||
|
||||
private int getPotions()
|
||||
{
|
||||
private int getPotions() {
|
||||
int m = 3694022;
|
||||
|
||||
if (potionEffects.isEmpty())
|
||||
{
|
||||
if (potionEffects.isEmpty()) {
|
||||
return m;
|
||||
}
|
||||
|
||||
@ -108,10 +94,8 @@ public class LivingWatcher extends FlagWatcher
|
||||
float f2 = 0.0F;
|
||||
float f3 = 0.0F;
|
||||
float f4 = 0.0F;
|
||||
try
|
||||
{
|
||||
for (int localMobEffect : potionEffects)
|
||||
{
|
||||
try {
|
||||
for (int localMobEffect : potionEffects) {
|
||||
int n = (Integer) getId.invoke(list.get(localMobEffect));
|
||||
f1 += (n >> 16 & 0xFF) / 255.0F;
|
||||
f2 += (n >> 8 & 0xFF) / 255.0F;
|
||||
@ -119,8 +103,7 @@ public class LivingWatcher extends FlagWatcher
|
||||
f4 += 1.0F;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
|
||||
@ -131,61 +114,50 @@ public class LivingWatcher extends FlagWatcher
|
||||
return (int) f1 << 16 | (int) f2 << 8 | (int) f3;
|
||||
}
|
||||
|
||||
public boolean hasPotionEffect(PotionEffectType type)
|
||||
{
|
||||
public boolean hasPotionEffect(PotionEffectType type) {
|
||||
return potionEffects.contains(type.getId());
|
||||
}
|
||||
|
||||
public boolean isMaxHealthSet()
|
||||
{
|
||||
public boolean isMaxHealthSet() {
|
||||
return maxHealthSet;
|
||||
}
|
||||
|
||||
public void removePotionEffect(PotionEffectType type)
|
||||
{
|
||||
if (potionEffects.contains(type.getId()))
|
||||
{
|
||||
public void removePotionEffect(PotionEffectType type) {
|
||||
if (potionEffects.contains(type.getId())) {
|
||||
potionEffects.remove(type.getId());
|
||||
sendPotionEffects();
|
||||
}
|
||||
}
|
||||
|
||||
public void setPotionParticlesAmbient(boolean particles)
|
||||
{
|
||||
public void setPotionParticlesAmbient(boolean particles) {
|
||||
setData(FlagType.LIVING_POTION_AMBIENT, particles);
|
||||
sendData(FlagType.LIVING_POTION_AMBIENT);
|
||||
}
|
||||
|
||||
private void sendPotionEffects()
|
||||
{
|
||||
private void sendPotionEffects() {
|
||||
setData(FlagType.LIVING_POTIONS, getPotions());
|
||||
sendData(FlagType.LIVING_POTIONS);
|
||||
}
|
||||
|
||||
public void setHealth(float health)
|
||||
{
|
||||
public void setHealth(float health) {
|
||||
setData(FlagType.LIVING_HEALTH, health);
|
||||
sendData(FlagType.LIVING_HEALTH);
|
||||
}
|
||||
|
||||
public int getArrowsSticking()
|
||||
{
|
||||
public int getArrowsSticking() {
|
||||
return (int) getData(FlagType.LIVING_ARROWS);
|
||||
}
|
||||
|
||||
public void setArrowsSticking(int arrowsNo)
|
||||
{
|
||||
public void setArrowsSticking(int arrowsNo) {
|
||||
setData(FlagType.LIVING_ARROWS, arrowsNo);
|
||||
sendData(FlagType.LIVING_ARROWS);
|
||||
}
|
||||
|
||||
public void setMaxHealth(double newHealth)
|
||||
{
|
||||
public void setMaxHealth(double newHealth) {
|
||||
this.maxHealth = newHealth;
|
||||
this.maxHealthSet = true;
|
||||
|
||||
if (DisguiseAPI.isDisguiseInUse(getDisguise()) && getDisguise().getWatcher() == this)
|
||||
{
|
||||
if (DisguiseAPI.isDisguiseInUse(getDisguise()) && getDisguise().getWatcher() == this) {
|
||||
PacketContainer packet = new PacketContainer(Server.UPDATE_ATTRIBUTES);
|
||||
|
||||
List<WrappedAttribute> attributes = new ArrayList<>();
|
||||
@ -203,18 +175,14 @@ public class LivingWatcher extends FlagWatcher
|
||||
packet.getIntegers().write(0, entity.getEntityId());
|
||||
packet.getAttributeCollectionModifier().write(0, attributes);
|
||||
|
||||
for (Player player : DisguiseUtilities.getPerverts(getDisguise()))
|
||||
{
|
||||
try
|
||||
{
|
||||
for (Player player : DisguiseUtilities.getPerverts(getDisguise())) {
|
||||
try {
|
||||
ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet, false);
|
||||
}
|
||||
catch (InvocationTargetException e)
|
||||
{
|
||||
catch (InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -186,6 +186,7 @@ public class PacketsManager {
|
||||
ItemStack itemstack = disguise.getWatcher().getItemStack(slot);
|
||||
|
||||
if (itemstack == null || itemstack.getType() == Material.AIR) {
|
||||
System.out.println("Not wearing anything for " + slot.name());
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -3,10 +3,13 @@ package me.libraryaddict.disguise.utilities;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.bukkit.Art;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.entity.Horse;
|
||||
import org.bukkit.entity.Llama;
|
||||
@ -82,7 +85,7 @@ public class ReflectionFlagWatchers {
|
||||
return description;
|
||||
}
|
||||
|
||||
public String[] getEnums() {
|
||||
public String[] getEnums(String tabComplete) {
|
||||
return enums;
|
||||
}
|
||||
}
|
||||
@ -141,6 +144,34 @@ public class ReflectionFlagWatchers {
|
||||
|
||||
potionEnums.add(toReadable(effectType.getName()));
|
||||
}
|
||||
String[] materials = new String[Material.values().length];
|
||||
|
||||
for (int i = 0; i < Material.values().length; i++) {
|
||||
materials[i] = Material.values()[i].name();
|
||||
}
|
||||
|
||||
paramList.add(new ParamInfo(ItemStack.class, "Item (id:damage)", "An ItemStack compromised of ID:Durability", materials));
|
||||
|
||||
paramList.add(new ParamInfo(ItemStack[].class, "Four ItemStacks (id:damage,id:damage..)",
|
||||
"Four ItemStacks seperated by an ,", materials) {
|
||||
@Override
|
||||
public String[] getEnums(String tabComplete) {
|
||||
String beginning = tabComplete.substring(0, tabComplete.contains(",") ? tabComplete.lastIndexOf(",") + 1 : 0);
|
||||
String end = tabComplete.substring(tabComplete.contains(",") ? tabComplete.lastIndexOf(",") + 1 : 0);
|
||||
|
||||
ArrayList<String> toReturn = new ArrayList<String>();
|
||||
|
||||
for (String material : super.getEnums("")) {
|
||||
if (!material.toLowerCase().startsWith(end.toLowerCase()))
|
||||
continue;
|
||||
|
||||
toReturn.add(beginning + material);
|
||||
}
|
||||
|
||||
return toReturn.toArray(new String[0]);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
paramList.add(new ParamInfo(PotionEffectType.class, "Potion Effect", "View all the potion effects you can add",
|
||||
potionEnums.toArray(new String[0])));
|
||||
@ -151,14 +182,18 @@ public class ReflectionFlagWatchers {
|
||||
paramList.add(new ParamInfo(int.class, "Number", "A whole number, no decimcals"));
|
||||
paramList.add(new ParamInfo(double.class, "Number", "A number which can have decimals"));
|
||||
paramList.add(new ParamInfo(float.class, "Number", "A number which can have decimals"));
|
||||
paramList.add(new ParamInfo(ItemStack.class, "Item (id:damage)", "An ItemStack compromised of ID:Durability"));
|
||||
paramList.add(
|
||||
new ParamInfo(ItemStack[].class, "Four ItemStacks (id:damage,id:damage..)", "Four ItemStacks seperated by an ,"));
|
||||
paramList.add(new ParamInfo(Horse.Style.class, "Horse Style", "Horse style which is the patterns on the horse"));
|
||||
paramList.add(new ParamInfo(int[].class, "number,number,number...", "Numbers seperated by an ,"));
|
||||
paramList.add(new ParamInfo(BlockPosition.class, "Block Position (num,num,num)", "Three numbers seperated by an ,"));
|
||||
paramList.add(new ParamInfo(GameProfile.class, "GameProfile",
|
||||
"Get the gameprofile here https://sessionserver.mojang.com/session/minecraft/profile/PLAYER_UUID_GOES_HERE?unsigned=false"));
|
||||
|
||||
Collections.sort(paramList, new Comparator<ParamInfo>() {
|
||||
@Override
|
||||
public int compare(ParamInfo o1, ParamInfo o2) {
|
||||
return String.CASE_INSENSITIVE_ORDER.compare(o1.getName(), o2.getName());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static Method[] getDisguiseWatcherMethods(Class<? extends FlagWatcher> watcherClass) {
|
||||
@ -184,6 +219,9 @@ public class ReflectionFlagWatchers {
|
||||
else if (!method.getReturnType().equals(Void.TYPE)) {
|
||||
itel.remove();
|
||||
}
|
||||
else if (method.getName().equals("removePotionEffect")) {
|
||||
itel.remove();
|
||||
}
|
||||
}
|
||||
|
||||
for (String methodName : new String[] {
|
||||
|
@ -20,7 +20,6 @@ import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Monster;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.EntityEquipment;
|
||||
import org.bukkit.inventory.EquipmentSlot;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
@ -895,22 +894,6 @@ public class ReflectionManager {
|
||||
return new WrappedWatchableObject(createDataWatcherItem(index, obj));
|
||||
}
|
||||
|
||||
public static EntityEquipment createEntityEquipment(Entity entity) {
|
||||
if (!(entity instanceof LivingEntity))
|
||||
return null;
|
||||
|
||||
Constructor construct = getCraftConstructor("inventory.CraftEntityEquipment", getCraftClass("entity.CraftLivingEntity"));
|
||||
|
||||
try {
|
||||
return (EntityEquipment) construct.newInstance((LivingEntity) entity);
|
||||
}
|
||||
catch (InstantiationException | IllegalAccessException | InvocationTargetException | ClassCastException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static int getCombinedId(int id, int data) {
|
||||
return id + (data << 12);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user