Different approach to FlagWatcher, fixed some errors for the update
This commit is contained in:
parent
e751cf4582
commit
daab2c9606
@ -1,398 +1,407 @@
|
||||
package me.libraryaddict.disguise;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Ageable;
|
||||
import org.bukkit.entity.Damageable;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Tameable;
|
||||
import org.bukkit.entity.Zombie;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import com.comphenix.protocol.reflect.FieldAccessException;
|
||||
import com.comphenix.protocol.wrappers.WrappedDataWatcher;
|
||||
import com.comphenix.protocol.wrappers.WrappedWatchableObject;
|
||||
|
||||
import me.libraryaddict.disguise.commands.CloneDisguiseCommand;
|
||||
import me.libraryaddict.disguise.commands.DisguiseCommand;
|
||||
import me.libraryaddict.disguise.commands.DisguiseViewSelf;
|
||||
import me.libraryaddict.disguise.commands.EntityDisguiseCommand;
|
||||
import me.libraryaddict.disguise.commands.HelpDisguiseCommand;
|
||||
import me.libraryaddict.disguise.commands.LibsDisguisesCommand;
|
||||
import me.libraryaddict.disguise.commands.PlayerDisguiseCommand;
|
||||
import me.libraryaddict.disguise.commands.RadiusDisguiseCommand;
|
||||
import me.libraryaddict.disguise.commands.UndisguiseCommand;
|
||||
import me.libraryaddict.disguise.commands.UndisguiseEntityCommand;
|
||||
import me.libraryaddict.disguise.commands.UndisguisePlayerCommand;
|
||||
import me.libraryaddict.disguise.commands.UndisguiseRadiusCommand;
|
||||
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.AgeableWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.GuardianWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.HorseWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.MinecartWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.SkeletonWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.SlimeWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.TameableWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.ZombieWatcher;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseSound;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseValues;
|
||||
import me.libraryaddict.disguise.utilities.FakeBoundingBox;
|
||||
import me.libraryaddict.disguise.utilities.Metrics;
|
||||
import me.libraryaddict.disguise.utilities.PacketsManager;
|
||||
import me.libraryaddict.disguise.utilities.ReflectionManager;
|
||||
|
||||
public class LibsDisguises extends JavaPlugin
|
||||
{
|
||||
private static LibsDisguises instance;
|
||||
private DisguiseListener listener;
|
||||
|
||||
@Override
|
||||
public void onEnable()
|
||||
{
|
||||
getLogger().info("Discovered MC version: " + ReflectionManager.getBukkitVersion());
|
||||
|
||||
saveDefaultConfig();
|
||||
|
||||
PacketsManager.init(this);
|
||||
DisguiseUtilities.init(this);
|
||||
|
||||
DisguiseConfig.initConfig(getConfig());
|
||||
|
||||
PacketsManager.addPacketListeners();
|
||||
|
||||
listener = new DisguiseListener(this);
|
||||
|
||||
Bukkit.getPluginManager().registerEvents(listener, this);
|
||||
|
||||
getCommand("disguise").setExecutor(new DisguiseCommand());
|
||||
getCommand("undisguise").setExecutor(new UndisguiseCommand());
|
||||
getCommand("disguiseplayer").setExecutor(new PlayerDisguiseCommand());
|
||||
getCommand("undisguiseplayer").setExecutor(new UndisguisePlayerCommand());
|
||||
getCommand("undisguiseentity").setExecutor(new UndisguiseEntityCommand());
|
||||
getCommand("disguiseentity").setExecutor(new EntityDisguiseCommand());
|
||||
getCommand("disguiseradius").setExecutor(new RadiusDisguiseCommand(getConfig().getInt("DisguiseRadiusMax")));
|
||||
getCommand("undisguiseradius").setExecutor(new UndisguiseRadiusCommand(getConfig().getInt("UndisguiseRadiusMax")));
|
||||
getCommand("disguisehelp").setExecutor(new HelpDisguiseCommand());
|
||||
getCommand("disguiseclone").setExecutor(new CloneDisguiseCommand());
|
||||
getCommand("libsdisguises").setExecutor(new LibsDisguisesCommand());
|
||||
getCommand("disguiseviewself").setExecutor(new DisguiseViewSelf());
|
||||
|
||||
registerValues();
|
||||
|
||||
instance = this;
|
||||
|
||||
try
|
||||
{
|
||||
Metrics metrics = new Metrics(this);
|
||||
metrics.start();
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reloads the config with new config options.
|
||||
*/
|
||||
public void reload()
|
||||
{
|
||||
HandlerList.unregisterAll(listener);
|
||||
|
||||
reloadConfig();
|
||||
DisguiseConfig.initConfig(getConfig());
|
||||
}
|
||||
|
||||
/**
|
||||
* Here we create a nms entity for each disguise. Then grab their default values in their datawatcher. Then their sound volume
|
||||
* for mob noises. As well as setting their watcher class and entity size.
|
||||
*/
|
||||
private void registerValues()
|
||||
{
|
||||
for (DisguiseType disguiseType : DisguiseType.values())
|
||||
{
|
||||
if (disguiseType.getEntityType() == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
Class watcherClass = null;
|
||||
|
||||
try
|
||||
{
|
||||
switch (disguiseType)
|
||||
{
|
||||
case ITEM_FRAME: // Not really supported...
|
||||
break;
|
||||
case MINECART_CHEST:
|
||||
case MINECART_COMMAND:
|
||||
case MINECART_FURNACE:
|
||||
case MINECART_HOPPER:
|
||||
case MINECART_MOB_SPAWNER:
|
||||
case MINECART_TNT:
|
||||
watcherClass = MinecartWatcher.class;
|
||||
break;
|
||||
case DONKEY:
|
||||
case MULE:
|
||||
case UNDEAD_HORSE:
|
||||
case SKELETON_HORSE:
|
||||
watcherClass = HorseWatcher.class;
|
||||
break;
|
||||
case ZOMBIE_VILLAGER:
|
||||
case PIG_ZOMBIE:
|
||||
watcherClass = ZombieWatcher.class;
|
||||
break;
|
||||
case MAGMA_CUBE:
|
||||
watcherClass = SlimeWatcher.class;
|
||||
break;
|
||||
case ELDER_GUARDIAN:
|
||||
watcherClass = GuardianWatcher.class;
|
||||
break;
|
||||
case ENDERMITE:
|
||||
watcherClass = LivingWatcher.class;
|
||||
break;
|
||||
case WITHER_SKELETON:
|
||||
watcherClass = SkeletonWatcher.class;
|
||||
break;
|
||||
default:
|
||||
watcherClass = Class.forName(
|
||||
"me.libraryaddict.disguise.disguisetypes.watchers." + toReadable(disguiseType.name()) + "Watcher");
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch (ClassNotFoundException ex)
|
||||
{
|
||||
// There is no explicit watcher for this entity.
|
||||
Class entityClass = disguiseType.getEntityType().getEntityClass();
|
||||
|
||||
if (entityClass != null)
|
||||
{
|
||||
if (Tameable.class.isAssignableFrom(entityClass))
|
||||
{
|
||||
watcherClass = TameableWatcher.class;
|
||||
}
|
||||
else if (Ageable.class.isAssignableFrom(entityClass))
|
||||
{
|
||||
watcherClass = AgeableWatcher.class;
|
||||
}
|
||||
else if (LivingEntity.class.isAssignableFrom(entityClass))
|
||||
{
|
||||
watcherClass = LivingWatcher.class;
|
||||
}
|
||||
else
|
||||
{
|
||||
watcherClass = FlagWatcher.class;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
watcherClass = FlagWatcher.class; // Disguise is unknown type
|
||||
}
|
||||
}
|
||||
|
||||
disguiseType.setWatcherClass(watcherClass);
|
||||
|
||||
if (DisguiseValues.getDisguiseValues(disguiseType) != null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
String nmsEntityName = toReadable(disguiseType.name());
|
||||
|
||||
switch (disguiseType)
|
||||
{
|
||||
case WITHER_SKELETON:
|
||||
case ZOMBIE_VILLAGER:
|
||||
case DONKEY:
|
||||
case MULE:
|
||||
case UNDEAD_HORSE:
|
||||
case SKELETON_HORSE:
|
||||
continue;
|
||||
case PRIMED_TNT:
|
||||
nmsEntityName = "TNTPrimed";
|
||||
break;
|
||||
case MINECART_TNT:
|
||||
nmsEntityName = "MinecartTNT";
|
||||
break;
|
||||
case MINECART:
|
||||
nmsEntityName = "MinecartRideable";
|
||||
break;
|
||||
case FIREWORK:
|
||||
nmsEntityName = "Fireworks";
|
||||
break;
|
||||
case SPLASH_POTION:
|
||||
nmsEntityName = "Potion";
|
||||
break;
|
||||
case GIANT:
|
||||
nmsEntityName = "GiantZombie";
|
||||
break;
|
||||
case DROPPED_ITEM:
|
||||
nmsEntityName = "Item";
|
||||
break;
|
||||
case FIREBALL:
|
||||
nmsEntityName = "LargeFireball";
|
||||
break;
|
||||
case LEASH_HITCH:
|
||||
nmsEntityName = "Leash";
|
||||
break;
|
||||
case ELDER_GUARDIAN:
|
||||
nmsEntityName = "Guardian";
|
||||
break;
|
||||
case ARROW:
|
||||
nmsEntityName = "TippedArrow";
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if (nmsEntityName.equalsIgnoreCase("Unknown"))
|
||||
{
|
||||
DisguiseValues disguiseValues = new DisguiseValues(disguiseType, null, 0, 0);
|
||||
|
||||
disguiseValues.setAdultBox(new FakeBoundingBox(0, 0, 0));
|
||||
|
||||
DisguiseSound sound = DisguiseSound.getType(disguiseType.name());
|
||||
|
||||
if (sound != null)
|
||||
{
|
||||
sound.setDamageAndIdleSoundVolume(1f);
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
Object nmsEntity = ReflectionManager.createEntityInstance(nmsEntityName);
|
||||
|
||||
if (nmsEntity == null)
|
||||
{
|
||||
getLogger().warning("Entity not found! (" + nmsEntityName + ")");
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
Entity bukkitEntity = ReflectionManager.getBukkitEntity(nmsEntity);
|
||||
int entitySize = 0;
|
||||
|
||||
for (Field field : ReflectionManager.getNmsClass("Entity").getFields())
|
||||
{
|
||||
if (field.getType().getName().equals("EnumEntitySize"))
|
||||
{
|
||||
Enum enumEntitySize = (Enum) field.get(nmsEntity);
|
||||
|
||||
entitySize = enumEntitySize.ordinal();
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
DisguiseValues disguiseValues = new DisguiseValues(disguiseType, nmsEntity.getClass(), entitySize,
|
||||
bukkitEntity instanceof Damageable ? ((Damageable) bukkitEntity).getMaxHealth() : 0);
|
||||
|
||||
WrappedDataWatcher watcher = WrappedDataWatcher.getEntityWatcher(bukkitEntity);
|
||||
|
||||
for (WrappedWatchableObject watch : watcher.getWatchableObjects())
|
||||
{
|
||||
FlagType flagType = FlagType.getFlag(watcherClass, watch.getIndex());
|
||||
|
||||
if (flagType == null)
|
||||
{
|
||||
System.err.println("Error finding the FlagType for " + disguiseType.name() + "! " + watch.getIndex()
|
||||
+ " cannot be found!");
|
||||
System.err.println("Lib's Disguises will continue to load, but this will not work properly!");
|
||||
continue;
|
||||
}
|
||||
|
||||
disguiseValues.setMetaValue(flagType, watch.getValue());
|
||||
|
||||
// Uncomment when I need to find the new datawatcher values for a class..
|
||||
// int id = watch.getIndex();
|
||||
// Object val = watch.getValue();
|
||||
// Class<?> valClazz = val != null ? watch.getValue().getClass() : null;
|
||||
// try {
|
||||
// val = val.toString();
|
||||
// } catch (Exception e) {
|
||||
// val = val != null ? val.getClass() : "null";
|
||||
// }
|
||||
// System.out.println("Disguise: " + disguiseType + ", ID: " + id + ", Class: " + (val == null ? "null" :
|
||||
// valClazz) + ", Value: " + val);
|
||||
}
|
||||
|
||||
DisguiseSound sound = DisguiseSound.getType(disguiseType.name());
|
||||
|
||||
if (sound != null)
|
||||
{
|
||||
Float soundStrength = ReflectionManager.getSoundModifier(nmsEntity);
|
||||
|
||||
if (soundStrength != null)
|
||||
{
|
||||
sound.setDamageAndIdleSoundVolume(soundStrength);
|
||||
}
|
||||
}
|
||||
|
||||
// Get the bounding box
|
||||
disguiseValues.setAdultBox(ReflectionManager.getBoundingBox(bukkitEntity));
|
||||
|
||||
if (bukkitEntity instanceof Ageable)
|
||||
{
|
||||
((Ageable) bukkitEntity).setBaby();
|
||||
|
||||
disguiseValues.setBabyBox(ReflectionManager.getBoundingBox(bukkitEntity));
|
||||
}
|
||||
else if (bukkitEntity instanceof Zombie)
|
||||
{
|
||||
((Zombie) bukkitEntity).setBaby(true);
|
||||
|
||||
disguiseValues.setBabyBox(ReflectionManager.getBoundingBox(bukkitEntity));
|
||||
}
|
||||
|
||||
disguiseValues.setEntitySize(ReflectionManager.getSize(bukkitEntity));
|
||||
}
|
||||
catch (SecurityException | IllegalArgumentException | IllegalAccessException | FieldAccessException ex)
|
||||
{
|
||||
System.out.print(
|
||||
"[LibsDisguises] Uh oh! Trouble while making values for the disguise " + disguiseType.name() + "!");
|
||||
System.out.print("[LibsDisguises] Before reporting this error, "
|
||||
+ "please make sure you are using the latest version of LibsDisguises and ProtocolLib.");
|
||||
System.out.print("[LibsDisguises] Development builds are available at (ProtocolLib) "
|
||||
+ "http://ci.dmulloy2.net/job/ProtocolLib/ and (LibsDisguises) http://server.o2gaming.com:8080/job/LibsDisguises%201.9+/");
|
||||
|
||||
ex.printStackTrace(System.out);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String toReadable(String string)
|
||||
{
|
||||
StringBuilder builder = new StringBuilder();
|
||||
|
||||
for (String s : string.split("_"))
|
||||
{
|
||||
builder.append(s.substring(0, 1)).append(s.substring(1).toLowerCase());
|
||||
}
|
||||
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
public DisguiseListener getListener()
|
||||
{
|
||||
return listener;
|
||||
}
|
||||
|
||||
/**
|
||||
* External APIs shouldn't actually need this instance. DisguiseAPI should be enough to handle most cases.
|
||||
*
|
||||
* @return The instance of this plugin
|
||||
*/
|
||||
public static LibsDisguises getInstance()
|
||||
{
|
||||
return instance;
|
||||
}
|
||||
}
|
||||
package me.libraryaddict.disguise;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Ageable;
|
||||
import org.bukkit.entity.Creature;
|
||||
import org.bukkit.entity.Damageable;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Tameable;
|
||||
import org.bukkit.entity.Zombie;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import com.comphenix.protocol.reflect.FieldAccessException;
|
||||
import com.comphenix.protocol.wrappers.WrappedDataWatcher;
|
||||
import com.comphenix.protocol.wrappers.WrappedWatchableObject;
|
||||
|
||||
import me.libraryaddict.disguise.commands.CloneDisguiseCommand;
|
||||
import me.libraryaddict.disguise.commands.DisguiseCommand;
|
||||
import me.libraryaddict.disguise.commands.DisguiseViewSelf;
|
||||
import me.libraryaddict.disguise.commands.EntityDisguiseCommand;
|
||||
import me.libraryaddict.disguise.commands.HelpDisguiseCommand;
|
||||
import me.libraryaddict.disguise.commands.LibsDisguisesCommand;
|
||||
import me.libraryaddict.disguise.commands.PlayerDisguiseCommand;
|
||||
import me.libraryaddict.disguise.commands.RadiusDisguiseCommand;
|
||||
import me.libraryaddict.disguise.commands.UndisguiseCommand;
|
||||
import me.libraryaddict.disguise.commands.UndisguiseEntityCommand;
|
||||
import me.libraryaddict.disguise.commands.UndisguisePlayerCommand;
|
||||
import me.libraryaddict.disguise.commands.UndisguiseRadiusCommand;
|
||||
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.AgeableWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.ArrowWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.GuardianWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.HorseWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.InsentientWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.MinecartWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.SkeletonWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.SlimeWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.SpiderWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.TNTWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.TameableWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.ZombieWatcher;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseSound;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseValues;
|
||||
import me.libraryaddict.disguise.utilities.FakeBoundingBox;
|
||||
import me.libraryaddict.disguise.utilities.Metrics;
|
||||
import me.libraryaddict.disguise.utilities.PacketsManager;
|
||||
import me.libraryaddict.disguise.utilities.ReflectionManager;
|
||||
|
||||
public class LibsDisguises extends JavaPlugin
|
||||
{
|
||||
private static LibsDisguises instance;
|
||||
private DisguiseListener listener;
|
||||
|
||||
@Override
|
||||
public void onEnable()
|
||||
{
|
||||
getLogger().info("Discovered MC version: " + ReflectionManager.getBukkitVersion());
|
||||
|
||||
saveDefaultConfig();
|
||||
|
||||
PacketsManager.init(this);
|
||||
DisguiseUtilities.init(this);
|
||||
|
||||
DisguiseConfig.initConfig(getConfig());
|
||||
|
||||
PacketsManager.addPacketListeners();
|
||||
|
||||
listener = new DisguiseListener(this);
|
||||
|
||||
Bukkit.getPluginManager().registerEvents(listener, this);
|
||||
|
||||
getCommand("disguise").setExecutor(new DisguiseCommand());
|
||||
getCommand("undisguise").setExecutor(new UndisguiseCommand());
|
||||
getCommand("disguiseplayer").setExecutor(new PlayerDisguiseCommand());
|
||||
getCommand("undisguiseplayer").setExecutor(new UndisguisePlayerCommand());
|
||||
getCommand("undisguiseentity").setExecutor(new UndisguiseEntityCommand());
|
||||
getCommand("disguiseentity").setExecutor(new EntityDisguiseCommand());
|
||||
getCommand("disguiseradius").setExecutor(new RadiusDisguiseCommand(getConfig().getInt("DisguiseRadiusMax")));
|
||||
getCommand("undisguiseradius").setExecutor(new UndisguiseRadiusCommand(getConfig().getInt("UndisguiseRadiusMax")));
|
||||
getCommand("disguisehelp").setExecutor(new HelpDisguiseCommand());
|
||||
getCommand("disguiseclone").setExecutor(new CloneDisguiseCommand());
|
||||
getCommand("libsdisguises").setExecutor(new LibsDisguisesCommand());
|
||||
getCommand("disguiseviewself").setExecutor(new DisguiseViewSelf());
|
||||
|
||||
registerValues();
|
||||
|
||||
instance = this;
|
||||
|
||||
try
|
||||
{
|
||||
Metrics metrics = new Metrics(this);
|
||||
metrics.start();
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reloads the config with new config options.
|
||||
*/
|
||||
public void reload()
|
||||
{
|
||||
HandlerList.unregisterAll(listener);
|
||||
|
||||
reloadConfig();
|
||||
DisguiseConfig.initConfig(getConfig());
|
||||
}
|
||||
|
||||
/**
|
||||
* Here we create a nms entity for each disguise. Then grab their default values in their datawatcher. Then their sound volume
|
||||
* for mob noises. As well as setting their watcher class and entity size.
|
||||
*/
|
||||
private void registerValues()
|
||||
{
|
||||
for (DisguiseType disguiseType : DisguiseType.values())
|
||||
{
|
||||
if (disguiseType.getEntityType() == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
Class watcherClass = null;
|
||||
|
||||
try
|
||||
{
|
||||
switch (disguiseType)
|
||||
{
|
||||
case SPECTRAL_ARROW:
|
||||
watcherClass = ArrowWatcher.class;
|
||||
break;
|
||||
case PRIMED_TNT:
|
||||
watcherClass = TNTWatcher.class;
|
||||
break;
|
||||
case MINECART_CHEST:
|
||||
case MINECART_COMMAND:
|
||||
case MINECART_FURNACE:
|
||||
case MINECART_HOPPER:
|
||||
case MINECART_MOB_SPAWNER:
|
||||
case MINECART_TNT:
|
||||
watcherClass = MinecartWatcher.class;
|
||||
break;
|
||||
case SPIDER:
|
||||
case CAVE_SPIDER:
|
||||
watcherClass = SpiderWatcher.class;
|
||||
break;
|
||||
case DONKEY:
|
||||
case MULE:
|
||||
case UNDEAD_HORSE:
|
||||
case SKELETON_HORSE:
|
||||
watcherClass = HorseWatcher.class;
|
||||
break;
|
||||
case ZOMBIE_VILLAGER:
|
||||
case PIG_ZOMBIE:
|
||||
watcherClass = ZombieWatcher.class;
|
||||
break;
|
||||
case MAGMA_CUBE:
|
||||
watcherClass = SlimeWatcher.class;
|
||||
break;
|
||||
case ELDER_GUARDIAN:
|
||||
watcherClass = GuardianWatcher.class;
|
||||
break;
|
||||
case WITHER_SKELETON:
|
||||
watcherClass = SkeletonWatcher.class;
|
||||
break;
|
||||
default:
|
||||
watcherClass = Class.forName(
|
||||
"me.libraryaddict.disguise.disguisetypes.watchers." + toReadable(disguiseType.name()) + "Watcher");
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch (ClassNotFoundException ex)
|
||||
{
|
||||
// There is no explicit watcher for this entity.
|
||||
Class entityClass = disguiseType.getEntityType().getEntityClass();
|
||||
|
||||
if (entityClass != null)
|
||||
{
|
||||
if (Tameable.class.isAssignableFrom(entityClass))
|
||||
{
|
||||
watcherClass = TameableWatcher.class;
|
||||
}
|
||||
else if (Ageable.class.isAssignableFrom(entityClass))
|
||||
{
|
||||
watcherClass = AgeableWatcher.class;
|
||||
}
|
||||
else if (Creature.class.isAssignableFrom(entityClass))
|
||||
{
|
||||
watcherClass = InsentientWatcher.class;
|
||||
}
|
||||
else if (LivingEntity.class.isAssignableFrom(entityClass))
|
||||
{
|
||||
watcherClass = LivingWatcher.class;
|
||||
}
|
||||
else
|
||||
{
|
||||
watcherClass = FlagWatcher.class;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
watcherClass = FlagWatcher.class; // Disguise is unknown type
|
||||
}
|
||||
}
|
||||
|
||||
if (watcherClass == null)
|
||||
{
|
||||
System.err.println("Error loading " + disguiseType.name() + ", FlagWatcher not assigned");
|
||||
continue;
|
||||
}
|
||||
|
||||
disguiseType.setWatcherClass(watcherClass);
|
||||
|
||||
if (DisguiseValues.getDisguiseValues(disguiseType) != null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
String nmsEntityName = toReadable(disguiseType.name());
|
||||
|
||||
switch (disguiseType)
|
||||
{
|
||||
case WITHER_SKELETON:
|
||||
case ZOMBIE_VILLAGER:
|
||||
case DONKEY:
|
||||
case MULE:
|
||||
case UNDEAD_HORSE:
|
||||
case SKELETON_HORSE:
|
||||
continue;
|
||||
case PRIMED_TNT:
|
||||
nmsEntityName = "TNTPrimed";
|
||||
break;
|
||||
case MINECART_TNT:
|
||||
nmsEntityName = "MinecartTNT";
|
||||
break;
|
||||
case MINECART:
|
||||
nmsEntityName = "MinecartRideable";
|
||||
break;
|
||||
case FIREWORK:
|
||||
nmsEntityName = "Fireworks";
|
||||
break;
|
||||
case SPLASH_POTION:
|
||||
nmsEntityName = "Potion";
|
||||
break;
|
||||
case GIANT:
|
||||
nmsEntityName = "GiantZombie";
|
||||
break;
|
||||
case DROPPED_ITEM:
|
||||
nmsEntityName = "Item";
|
||||
break;
|
||||
case FIREBALL:
|
||||
nmsEntityName = "LargeFireball";
|
||||
break;
|
||||
case LEASH_HITCH:
|
||||
nmsEntityName = "Leash";
|
||||
break;
|
||||
case ELDER_GUARDIAN:
|
||||
nmsEntityName = "Guardian";
|
||||
break;
|
||||
case ARROW:
|
||||
case SPECTRAL_ARROW:
|
||||
nmsEntityName = "TippedArrow";
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if (nmsEntityName.equalsIgnoreCase("Unknown"))
|
||||
{
|
||||
DisguiseValues disguiseValues = new DisguiseValues(disguiseType, null, 0, 0);
|
||||
|
||||
disguiseValues.setAdultBox(new FakeBoundingBox(0, 0, 0));
|
||||
|
||||
DisguiseSound sound = DisguiseSound.getType(disguiseType.name());
|
||||
|
||||
if (sound != null)
|
||||
{
|
||||
sound.setDamageAndIdleSoundVolume(1f);
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
Object nmsEntity = ReflectionManager.createEntityInstance(nmsEntityName);
|
||||
|
||||
if (nmsEntity == null)
|
||||
{
|
||||
getLogger().warning("Entity not found! (" + nmsEntityName + ")");
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
Entity bukkitEntity = ReflectionManager.getBukkitEntity(nmsEntity);
|
||||
int entitySize = 0;
|
||||
|
||||
for (Field field : ReflectionManager.getNmsClass("Entity").getFields())
|
||||
{
|
||||
if (field.getType().getName().equals("EnumEntitySize"))
|
||||
{
|
||||
Enum enumEntitySize = (Enum) field.get(nmsEntity);
|
||||
|
||||
entitySize = enumEntitySize.ordinal();
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
DisguiseValues disguiseValues = new DisguiseValues(disguiseType, nmsEntity.getClass(), entitySize,
|
||||
bukkitEntity instanceof Damageable ? ((Damageable) bukkitEntity).getMaxHealth() : 0);
|
||||
|
||||
WrappedDataWatcher watcher = WrappedDataWatcher.getEntityWatcher(bukkitEntity);
|
||||
|
||||
for (WrappedWatchableObject watch : watcher.getWatchableObjects())
|
||||
{
|
||||
FlagType flagType = FlagType.getFlag(watcherClass, watch.getIndex());
|
||||
|
||||
if (flagType == null)
|
||||
{
|
||||
System.err.println("Error finding the FlagType for " + disguiseType.name() + "! Index " + watch.getIndex()
|
||||
+ " can't be found!");
|
||||
System.err.println("Value is " + watch.getRawValue() + " (" + watch.getRawValue().getClass() + ") ("
|
||||
+ nmsEntity.getClass() + ") & " + watcherClass.getSimpleName());
|
||||
System.err.println("Lib's Disguises will continue to load, but this will not work properly!");
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
DisguiseSound sound = DisguiseSound.getType(disguiseType.name());
|
||||
|
||||
if (sound != null)
|
||||
{
|
||||
Float soundStrength = ReflectionManager.getSoundModifier(nmsEntity);
|
||||
|
||||
if (soundStrength != null)
|
||||
{
|
||||
sound.setDamageAndIdleSoundVolume(soundStrength);
|
||||
}
|
||||
}
|
||||
|
||||
// Get the bounding box
|
||||
disguiseValues.setAdultBox(ReflectionManager.getBoundingBox(bukkitEntity));
|
||||
|
||||
if (bukkitEntity instanceof Ageable)
|
||||
{
|
||||
((Ageable) bukkitEntity).setBaby();
|
||||
|
||||
disguiseValues.setBabyBox(ReflectionManager.getBoundingBox(bukkitEntity));
|
||||
}
|
||||
else if (bukkitEntity instanceof Zombie)
|
||||
{
|
||||
((Zombie) bukkitEntity).setBaby(true);
|
||||
|
||||
disguiseValues.setBabyBox(ReflectionManager.getBoundingBox(bukkitEntity));
|
||||
}
|
||||
|
||||
disguiseValues.setEntitySize(ReflectionManager.getSize(bukkitEntity));
|
||||
}
|
||||
catch (SecurityException | IllegalArgumentException | IllegalAccessException | FieldAccessException ex)
|
||||
{
|
||||
System.out.print(
|
||||
"[LibsDisguises] Uh oh! Trouble while making values for the disguise " + disguiseType.name() + "!");
|
||||
System.out.print("[LibsDisguises] Before reporting this error, "
|
||||
+ "please make sure you are using the latest version of LibsDisguises and ProtocolLib.");
|
||||
System.out.print("[LibsDisguises] Development builds are available at (ProtocolLib) "
|
||||
+ "http://ci.dmulloy2.net/job/ProtocolLib/ and (LibsDisguises) http://server.o2gaming.com:8080/job/LibsDisguises%201.9+/");
|
||||
|
||||
ex.printStackTrace(System.out);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String toReadable(String string)
|
||||
{
|
||||
StringBuilder builder = new StringBuilder();
|
||||
|
||||
for (String s : string.split("_"))
|
||||
{
|
||||
builder.append(s.substring(0, 1)).append(s.substring(1).toLowerCase());
|
||||
}
|
||||
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
public DisguiseListener getListener()
|
||||
{
|
||||
return listener;
|
||||
}
|
||||
|
||||
/**
|
||||
* External APIs shouldn't actually need this instance. DisguiseAPI should be enough to handle most cases.
|
||||
*
|
||||
* @return The instance of this plugin
|
||||
*/
|
||||
public static LibsDisguises getInstance()
|
||||
{
|
||||
return instance;
|
||||
}
|
||||
}
|
||||
|
@ -6,7 +6,6 @@ import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
@ -38,7 +37,6 @@ import me.libraryaddict.disguise.disguisetypes.watchers.ZombieWatcher;
|
||||
import me.libraryaddict.disguise.events.DisguiseEvent;
|
||||
import me.libraryaddict.disguise.events.UndisguiseEvent;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseValues;
|
||||
import me.libraryaddict.disguise.utilities.PacketsManager;
|
||||
import me.libraryaddict.disguise.utilities.ReflectionManager;
|
||||
|
||||
@ -260,7 +258,7 @@ public abstract class Disguise
|
||||
deadTicks = 0;
|
||||
|
||||
// If the disguise type is tnt, we need to resend the entity packet else it will turn invisible
|
||||
if (getType() == DisguiseType.PRIMED_TNT || getType() == DisguiseType.FIREWORK)
|
||||
if (getType() == DisguiseType.FIREWORK)
|
||||
{
|
||||
refreshDisguise++;
|
||||
|
||||
@ -783,15 +781,23 @@ public abstract class Disguise
|
||||
*/
|
||||
private void setupWatcher()
|
||||
{
|
||||
HashMap<FlagType, Object> disguiseValues = DisguiseValues.getMetaValues(getType());
|
||||
HashMap<FlagType, Object> entityValues = DisguiseValues.getMetaValues(DisguiseType.getType(getEntity().getType()));
|
||||
ArrayList<FlagType> disguiseFlags = FlagType.getFlags(getType().getWatcherClass());
|
||||
ArrayList<FlagType> entityFlags = FlagType.getFlags(DisguiseType.getType(getEntity().getType()).getWatcherClass());
|
||||
|
||||
for (Entry<FlagType, Object> entry : entityValues.entrySet())
|
||||
for (FlagType flag : entityFlags)
|
||||
{
|
||||
if (disguiseValues.containsKey(entry.getKey()))
|
||||
if (disguiseFlags.contains(flag))
|
||||
continue;
|
||||
|
||||
getWatcher().setBackupValue(entry.getKey(), entry.getValue());
|
||||
FlagType backup = null;
|
||||
|
||||
for (FlagType flagType : disguiseFlags)
|
||||
{
|
||||
if (flagType.getIndex() == flag.getIndex())
|
||||
backup = flagType;
|
||||
}
|
||||
|
||||
getWatcher().setBackupValue(flag, backup == null ? null : backup.getDefault());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,260 +1,423 @@
|
||||
package me.libraryaddict.disguise.disguisetypes;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.UUID;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import com.google.common.base.Optional;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.*;
|
||||
|
||||
public class FlagType<Y>
|
||||
{
|
||||
private static FlagType[] _values = new FlagType[0];
|
||||
|
||||
public static FlagType<Boolean> AGEABLE_BABY = new FlagType<Boolean>(AgeableWatcher.class, 11, false);
|
||||
|
||||
public static FlagType<Integer> AREA_EFFECT_COLOR = new FlagType<Integer>(AreaEffectCloudWatcher.class, 6,
|
||||
Color.BLACK.asRGB());
|
||||
|
||||
public static FlagType<Boolean> AREA_EFFECT_IGNORE_RADIUS = new FlagType<Boolean>(AreaEffectCloudWatcher.class, 7, false);
|
||||
|
||||
public static FlagType<Integer> AREA_EFFECT_PARTICLE = new FlagType<Integer>(AreaEffectCloudWatcher.class, 8, 0);
|
||||
|
||||
public static FlagType<Float> AREA_EFFECT_RADIUS = new FlagType<Float>(AreaEffectCloudWatcher.class, 6, 0F);
|
||||
|
||||
public static FlagType<Byte> ARMORSTAND_META = new FlagType<Byte>(ArmorStandWatcher.class, 10, (byte) 0);
|
||||
|
||||
public static FlagType<Byte> ARROW_CRITICAL = new FlagType<Byte>(ArrowWatcher.class, 6, (byte) 0);
|
||||
|
||||
public static FlagType<Byte> BAT_HANGING = new FlagType<Byte>(BatWatcher.class, 11, (byte) 1);
|
||||
|
||||
public static FlagType<Boolean> BLAZE_BLAZING = new FlagType<Boolean>(BlazeWatcher.class, 11, false);
|
||||
|
||||
public static FlagType<Float> BOAT_DAMAGE = new FlagType<Float>(BoatWatcher.class, 7, 40F);
|
||||
|
||||
public static FlagType<Boolean> CREEPER_IGNITED = new FlagType<Boolean>(CreeperWatcher.class, 13, false);
|
||||
|
||||
public static FlagType<Boolean> CREEPER_POWERED = new FlagType<Boolean>(CreeperWatcher.class, 12, false);
|
||||
|
||||
public static FlagType<ItemStack> DROPPED_ITEM = new FlagType<ItemStack>(DroppedItemWatcher.class, 6,
|
||||
new ItemStack(Material.AIR));
|
||||
|
||||
public static FlagType<Optional> ENDER_CRYSTAL_BEAM = new FlagType<Optional>(EnderCrystalWatcher.class, 6, Optional.absent());
|
||||
|
||||
public static FlagType<Boolean> ENDER_CRYSTAL_PLATE = new FlagType<Boolean>(EnderCrystalWatcher.class, 6, false);
|
||||
|
||||
public static FlagType<Integer> ENDERDRAGON_PHASE = new FlagType<Integer>(EnderDragonWatcher.class, 6, 0);
|
||||
|
||||
public static FlagType<Boolean> ENDERMAN_AGRESSIVE = new FlagType<Boolean>(EndermanWatcher.class, 12, false);
|
||||
|
||||
public static FlagType<Optional<Integer>> ENDERMAN_ITEM = new FlagType<Optional<Integer>>(EndermanWatcher.class, 11,
|
||||
Optional.of(1));
|
||||
|
||||
public static FlagType<Integer> ENTITY_AIR_TICKS = new FlagType<Integer>(FlagWatcher.class, 1, 0);
|
||||
|
||||
public static FlagType<String> ENTITY_CUSTOM_NAME = new FlagType<String>(FlagWatcher.class, 2, null);
|
||||
|
||||
public static FlagType<Boolean> ENTITY_CUSTOM_NAME_VISIBLE = new FlagType<Boolean>(FlagWatcher.class, 3, false);
|
||||
|
||||
public static FlagType<Byte> ENTITY_META = new FlagType<Byte>(FlagWatcher.class, 0, (byte) 0);
|
||||
|
||||
public static FlagType<Boolean> ENTITY_NO_GRAVITY = new FlagType<Boolean>(FlagWatcher.class, 5, false);
|
||||
|
||||
public static FlagType<Integer> ENTITY_SILENT = new FlagType<Integer>(FlagWatcher.class, 4, 0);
|
||||
|
||||
public static FlagType<Boolean> GHAST_AGRESSIVE = new FlagType<Boolean>(GhastWatcher.class, 11, false);
|
||||
|
||||
public static FlagType<Byte> GUARDIAN_FLAG = new FlagType<Byte>(GuardianWatcher.class, 11, (byte) 0);
|
||||
|
||||
public static FlagType<Integer> GUARDIAN_TARGET = new FlagType<Integer>(GuardianWatcher.class, 12, 0);
|
||||
|
||||
public static FlagType<Integer> HORSE_ARMOR = new FlagType<Integer>(HorseWatcher.class, 16, 0);
|
||||
|
||||
public static FlagType<Integer> HORSE_COLOR = new FlagType<Integer>(HorseWatcher.class, 14, 0);
|
||||
|
||||
public static FlagType<Byte> HORSE_META = new FlagType<Byte>(HorseWatcher.class, 12, (byte) 0);
|
||||
|
||||
public static FlagType<Optional<UUID>> HORSE_OWNER = new FlagType<Optional<UUID>>(HorseWatcher.class, 15,
|
||||
Optional.<UUID> absent());
|
||||
|
||||
public static FlagType<Integer> HORSE_STYLE = new FlagType<Integer>(HorseWatcher.class, 14, 0);
|
||||
|
||||
public static FlagType<Integer> HORSE_VARIANT = new FlagType<Integer>(HorseWatcher.class, 13, 0);
|
||||
|
||||
public static FlagType<Byte> INSENTIENT_META = new FlagType<Byte>(LivingWatcher.class, 10, (byte) 0);
|
||||
|
||||
public static FlagType<ItemStack> ITEMFRAME_ITEM = new FlagType<ItemStack>(ItemFrameWatcher.class, 6, null);
|
||||
|
||||
public static FlagType<Byte> ITEMFRAME_ROTATION = new FlagType<Byte>(ItemFrameWatcher.class, 6, (byte) 0);
|
||||
|
||||
public static FlagType<Integer> LIVING_ARROWS = new FlagType<Integer>(LivingWatcher.class, 9, 0);
|
||||
|
||||
public static FlagType<Float> LIVING_HEALTH = new FlagType<Float>(LivingWatcher.class, 6, 0F);
|
||||
|
||||
public static FlagType<Boolean> LIVING_POTION_AMBIENT = new FlagType<Boolean>(LivingWatcher.class, 8, false);
|
||||
|
||||
public static FlagType<Integer> LIVING_POTIONS = new FlagType<Integer>(LivingWatcher.class, 7, 0);
|
||||
|
||||
public static FlagType<Integer> MINECART_BLOCK = new FlagType<Integer>(MinecartWatcher.class, 8, 0);
|
||||
|
||||
public static FlagType<Boolean> MINECART_BLOCK_VISIBLE = new FlagType<Boolean>(MinecartWatcher.class, 10, false);
|
||||
|
||||
public static FlagType<Integer> MINECART_BLOCK_Y = new FlagType<Integer>(MinecartWatcher.class, 9, 0);
|
||||
|
||||
public static FlagType<Integer> OCELOT_TYPE = new FlagType<Integer>(OcelotWatcher.class, 14, 0);
|
||||
|
||||
public static FlagType<Boolean> PIG_SADDLED = new FlagType<Boolean>(PigWatcher.class, 12, false);
|
||||
|
||||
public static FlagType<Byte> PLAYER_SKIN = new FlagType<Byte>(PlayerWatcher.class, 12, (byte) 0);
|
||||
|
||||
public static FlagType<Integer> RABBIT_TYPE = new FlagType<Integer>(RabbitWatcher.class, 12, 0);
|
||||
|
||||
public static FlagType<Byte> SHEEP_WOOL = new FlagType<Byte>(SheepWatcher.class, 12, (byte) 0);
|
||||
|
||||
public static FlagType<Integer> SKELETON_TYPE = new FlagType<Integer>(SkeletonWatcher.class, 11, 0);
|
||||
|
||||
public static FlagType<Integer> SLIME_SIZE = new FlagType<Integer>(SlimeWatcher.class, 11, 0);
|
||||
|
||||
public static FlagType<Byte> TAMEABLE_META = new FlagType<Byte>(TameableWatcher.class, 12, (byte) 0);
|
||||
|
||||
public static FlagType<Optional<UUID>> TAMEABLE_OWNER = new FlagType<Optional<UUID>>(TameableWatcher.class, 13,
|
||||
Optional.<UUID> absent());
|
||||
|
||||
public static FlagType<Integer> TIPPED_ARROW_COLOR = new FlagType<Integer>(TippedArrowWatcher.class, 6, Color.WHITE.asRGB());
|
||||
|
||||
public static FlagType<Integer> VILLAGER_PROFESSION = new FlagType<Integer>(VillagerWatcher.class, 12, 0);
|
||||
|
||||
public static FlagType<Boolean> WITCH_AGGRESSIVE = new FlagType<Boolean>(WitchWatcher.class, 11, false);
|
||||
|
||||
public static FlagType<Integer> WITHER_INVUL = new FlagType<Integer>(WitchWatcher.class, 14, 0);
|
||||
|
||||
public static FlagType<Integer> WITHER_TARGET_1 = new FlagType<Integer>(WitherWatcher.class, 11, 0);
|
||||
|
||||
public static FlagType<Integer> WITHER_TARGET_2 = new FlagType<Integer>(WitherWatcher.class, 12, 0);
|
||||
|
||||
public static FlagType<Integer> WITHER_TARGET_3 = new FlagType<Integer>(WitherWatcher.class, 13, 0);
|
||||
|
||||
public static FlagType<Boolean> WITHERSKULL_BLUE = new FlagType<Boolean>(WitherSkullWatcher.class, 6, false);
|
||||
|
||||
public static FlagType<Boolean> WOLF_BEGGING = new FlagType<Boolean>(WolfWatcher.class, 15, false);
|
||||
|
||||
public static FlagType<Integer> WOLF_COLLAR = new FlagType<Integer>(WolfWatcher.class, 16, 14);
|
||||
|
||||
public static FlagType<Float> WOLF_DAMAGE = new FlagType<Float>(WolfWatcher.class, 14, 0F);
|
||||
|
||||
public static FlagType<Boolean> ZOMBIE_AGGRESSIVE = new FlagType<Boolean>(ZombieWatcher.class, 14, false);
|
||||
|
||||
public static FlagType<Boolean> ZOMBIE_BABY = new FlagType<Boolean>(ZombieWatcher.class, 11, false);
|
||||
|
||||
public static FlagType<Integer> ZOMBIE_PROFESSION = new FlagType<Integer>(ZombieWatcher.class, 12, 0);
|
||||
|
||||
public static FlagType<Boolean> ZOMBIE_SHAKING = new FlagType<Boolean>(ZombieWatcher.class, 13, false);
|
||||
|
||||
static
|
||||
{
|
||||
// Simple verification for the dev that he's setting up the FlagType's properly.
|
||||
// All flag types should be from 0 to <Max Number> with no empty numbers.
|
||||
// All flag types should never occur twice.
|
||||
|
||||
HashMap<Class, Integer> maxValues = new HashMap<Class, Integer>();
|
||||
|
||||
for (FlagType type : values())
|
||||
{
|
||||
if (maxValues.containsKey(type.getFlagWatcher()) && maxValues.get(type.getFlagWatcher()) > type.getIndex())
|
||||
continue;
|
||||
|
||||
maxValues.put(type.getFlagWatcher(), type.getIndex());
|
||||
}
|
||||
|
||||
for (Entry<Class, Integer> entry : maxValues.entrySet())
|
||||
{
|
||||
loop:
|
||||
|
||||
for (int i = 0; i < entry.getValue(); i++)
|
||||
{
|
||||
FlagType found = null;
|
||||
|
||||
for (FlagType type : values())
|
||||
{
|
||||
if (type.getIndex() != i)
|
||||
continue;
|
||||
|
||||
if (!type.getFlagWatcher().isAssignableFrom(entry.getKey()))
|
||||
continue;
|
||||
|
||||
if (found != null)
|
||||
{
|
||||
System.err.println(entry.getKey().getSimpleName() + " has multiple FlagType's registered for the index "
|
||||
+ i + " (" + type.getFlagWatcher().getSimpleName() + ", " + found.getFlagWatcher().getSimpleName()
|
||||
+ ")");
|
||||
continue loop;
|
||||
}
|
||||
|
||||
found = type;
|
||||
}
|
||||
|
||||
if (found != null)
|
||||
continue;
|
||||
|
||||
System.err.println(entry.getKey().getSimpleName() + " has no FlagType registered for the index " + i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static FlagType getFlag(Class<? extends FlagWatcher> watcherClass, int flagNo)
|
||||
{
|
||||
for (FlagType type : values())
|
||||
{
|
||||
if (type.getIndex() != flagNo)
|
||||
continue;
|
||||
|
||||
if (!type.getFlagWatcher().isAssignableFrom(watcherClass))
|
||||
continue;
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static FlagType[] values()
|
||||
{
|
||||
return _values;
|
||||
}
|
||||
|
||||
private Y _defaultValue;
|
||||
|
||||
private int _index;
|
||||
|
||||
private Class<? extends FlagWatcher> _watcher;
|
||||
|
||||
private FlagType(Class<? extends FlagWatcher> watcher, int index, Y defaultValue)
|
||||
{
|
||||
_index = index;
|
||||
_watcher = watcher;
|
||||
|
||||
_values = Arrays.copyOf(_values, _values.length + 1);
|
||||
_values[_values.length - 1] = this;
|
||||
}
|
||||
|
||||
public Y getDefault()
|
||||
{
|
||||
return _defaultValue;
|
||||
}
|
||||
|
||||
public Class<? extends FlagWatcher> getFlagWatcher()
|
||||
{
|
||||
return _watcher;
|
||||
}
|
||||
|
||||
public int getIndex()
|
||||
{
|
||||
return _index;
|
||||
}
|
||||
}
|
||||
package me.libraryaddict.disguise.disguisetypes;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import com.comphenix.protocol.wrappers.BlockPosition;
|
||||
import com.google.common.base.Optional;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.AgeableWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.AreaEffectCloudWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.ArmorStandWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.ArrowWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.BatWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.BlazeWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.BoatWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.CreeperWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.DroppedItemWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.EnderCrystalWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.EnderDragonWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.EndermanWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.FallingBlockWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.FireworkWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.FishingHookWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.GhastWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.GuardianWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.HorseWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.InsentientWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.IronGolemWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.ItemFrameWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.MinecartWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.OcelotWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.PigWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.PlayerWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.RabbitWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.SheepWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.ShulkerWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.SkeletonWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.SlimeWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.SnowmanWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.SpiderWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.SplashPotionWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.TNTWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.TameableWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.VillagerWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.WitchWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.WitherSkullWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.WitherWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.WolfWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.ZombieWatcher;
|
||||
|
||||
public class FlagType<Y>
|
||||
{
|
||||
private static FlagType[] _values = new FlagType[0];
|
||||
|
||||
public static FlagType<Boolean> AGEABLE_BABY = new FlagType<Boolean>(AgeableWatcher.class, 0, false);
|
||||
|
||||
public static FlagType<Integer> AREA_EFFECT_COLOR = new FlagType<Integer>(AreaEffectCloudWatcher.class, 1,
|
||||
Color.BLACK.asRGB());
|
||||
|
||||
public static FlagType<Boolean> AREA_EFFECT_IGNORE_RADIUS = new FlagType<Boolean>(AreaEffectCloudWatcher.class, 2, false);
|
||||
|
||||
public static FlagType<Integer> AREA_EFFECT_PARTICLE = new FlagType<Integer>(AreaEffectCloudWatcher.class, 3, 0);
|
||||
|
||||
public static FlagType<Integer> AREA_EFFECT_PARTICLE_PARAM_1 = new FlagType<Integer>(AreaEffectCloudWatcher.class, 4, 0);
|
||||
|
||||
public static FlagType<Integer> AREA_EFFECT_PARTICLE_PARAM_2 = new FlagType<Integer>(AreaEffectCloudWatcher.class, 5, 0);
|
||||
|
||||
public static FlagType<Float> AREA_EFFECT_RADIUS = new FlagType<Float>(AreaEffectCloudWatcher.class, 0, 0F);
|
||||
|
||||
public static FlagType<Vector> ARMORSTAND_BODY = new FlagType<Vector>(ArmorStandWatcher.class, 2, new Vector());
|
||||
|
||||
public static FlagType<Vector> ARMORSTAND_HEAD = new FlagType<Vector>(ArmorStandWatcher.class, 1, new Vector());
|
||||
|
||||
public static FlagType<Vector> ARMORSTAND_LEFT_ARM = new FlagType<Vector>(ArmorStandWatcher.class, 3, new Vector());
|
||||
|
||||
public static FlagType<Vector> ARMORSTAND_LEFT_LEG = new FlagType<Vector>(ArmorStandWatcher.class, 5, new Vector());
|
||||
|
||||
public static FlagType<Byte> ARMORSTAND_META = new FlagType<Byte>(ArmorStandWatcher.class, 0, (byte) 0);
|
||||
|
||||
public static FlagType<Vector> ARMORSTAND_RIGHT_ARM = new FlagType<Vector>(ArmorStandWatcher.class, 4, new Vector());
|
||||
|
||||
public static FlagType<Vector> ARMORSTAND_RIGHT_LEG = new FlagType<Vector>(ArmorStandWatcher.class, 6, new Vector());
|
||||
|
||||
public static FlagType<Byte> ARROW_CRITICAL = new FlagType<Byte>(ArrowWatcher.class, 0, (byte) 0);
|
||||
|
||||
public static FlagType<Byte> BAT_HANGING = new FlagType<Byte>(BatWatcher.class, 0, (byte) 1);
|
||||
|
||||
public static FlagType<Boolean> BLAZE_BLAZING = new FlagType<Boolean>(BlazeWatcher.class, 0, false);
|
||||
|
||||
public static FlagType<Float> BOAT_DAMAGE = new FlagType<Float>(BoatWatcher.class, 2, 40F);
|
||||
|
||||
public static FlagType<Integer> BOAT_DIRECTION = new FlagType<Integer>(BoatWatcher.class, 1, 0);
|
||||
|
||||
public static FlagType<Integer> BOAT_LAST_HIT = new FlagType<Integer>(BoatWatcher.class, 0, 0);
|
||||
|
||||
public static FlagType<Boolean> BOAT_LEFT_PADDLING = new FlagType<Boolean>(BoatWatcher.class, 5, false);
|
||||
|
||||
public static FlagType<Boolean> BOAT_RIGHT_PADDLING = new FlagType<Boolean>(BoatWatcher.class, 4, false);
|
||||
|
||||
public static FlagType<Integer> BOAT_TYPE = new FlagType<Integer>(BoatWatcher.class, 3, 0);
|
||||
|
||||
public static FlagType<Boolean> CREEPER_IGNITED = new FlagType<Boolean>(CreeperWatcher.class, 2, false);
|
||||
|
||||
public static FlagType<Boolean> CREEPER_POWERED = new FlagType<Boolean>(CreeperWatcher.class, 1, false);
|
||||
|
||||
public static FlagType<Integer> CREEPER_STATE = new FlagType<Integer>(CreeperWatcher.class, 0, -1);
|
||||
|
||||
public static FlagType<ItemStack> DROPPED_ITEM = new FlagType<ItemStack>(DroppedItemWatcher.class, 0,
|
||||
new ItemStack(Material.AIR));
|
||||
|
||||
public static FlagType<Optional> ENDER_CRYSTAL_BEAM = new FlagType<Optional>(EnderCrystalWatcher.class, 0, Optional.absent());
|
||||
|
||||
public static FlagType<Boolean> ENDER_CRYSTAL_PLATE = new FlagType<Boolean>(EnderCrystalWatcher.class, 1, false);
|
||||
|
||||
public static FlagType<Integer> ENDERDRAGON_PHASE = new FlagType<Integer>(EnderDragonWatcher.class, 0, 0);
|
||||
|
||||
public static FlagType<Boolean> ENDERMAN_AGRESSIVE = new FlagType<Boolean>(EndermanWatcher.class, 1, false);
|
||||
|
||||
public static FlagType<Optional<Integer>> ENDERMAN_ITEM = new FlagType<Optional<Integer>>(EndermanWatcher.class, 0,
|
||||
Optional.of(1));
|
||||
|
||||
public static FlagType<Integer> ENTITY_AIR_TICKS = new FlagType<Integer>(FlagWatcher.class, 1, 0);
|
||||
|
||||
public static FlagType<String> ENTITY_CUSTOM_NAME = new FlagType<String>(FlagWatcher.class, 2, "");
|
||||
|
||||
public static FlagType<Boolean> ENTITY_CUSTOM_NAME_VISIBLE = new FlagType<Boolean>(FlagWatcher.class, 3, false);
|
||||
|
||||
public static FlagType<Byte> ENTITY_META = new FlagType<Byte>(FlagWatcher.class, 0, (byte) 0);
|
||||
|
||||
public static FlagType<Boolean> ENTITY_NO_GRAVITY = new FlagType<Boolean>(FlagWatcher.class, 5, false);
|
||||
|
||||
public static FlagType<Boolean> ENTITY_SILENT = new FlagType<Boolean>(FlagWatcher.class, 4, false);
|
||||
|
||||
public static FlagType<BlockPosition> FALLING_BLOCK_POSITION = new FlagType<BlockPosition>(FallingBlockWatcher.class, 0,
|
||||
BlockPosition.ORIGIN);
|
||||
|
||||
public static FlagType<Optional<ItemStack>> FIREWORK_ITEM = new FlagType<Optional<ItemStack>>(FireworkWatcher.class, 0,
|
||||
Optional.<ItemStack> absent());
|
||||
|
||||
public static FlagType<Integer> FISHING_HOOK = new FlagType<Integer>(FishingHookWatcher.class, 0, 0);
|
||||
|
||||
public static FlagType<Boolean> GHAST_AGRESSIVE = new FlagType<Boolean>(GhastWatcher.class, 0, false);
|
||||
|
||||
public static FlagType<Byte> GUARDIAN_FLAG = new FlagType<Byte>(GuardianWatcher.class, 0, (byte) 0);
|
||||
|
||||
public static FlagType<Integer> GUARDIAN_TARGET = new FlagType<Integer>(GuardianWatcher.class, 1, 0);
|
||||
|
||||
public static FlagType<Integer> HORSE_ARMOR = new FlagType<Integer>(HorseWatcher.class, 4, 0);
|
||||
|
||||
public static FlagType<Integer> HORSE_COLOR = new FlagType<Integer>(HorseWatcher.class, 2, 0);
|
||||
|
||||
public static FlagType<Byte> HORSE_META = new FlagType<Byte>(HorseWatcher.class, 0, (byte) 0);
|
||||
|
||||
public static FlagType<Optional<UUID>> HORSE_OWNER = new FlagType<Optional<UUID>>(HorseWatcher.class, 3,
|
||||
Optional.<UUID> absent());
|
||||
|
||||
public static FlagType<Integer> HORSE_VARIANT = new FlagType<Integer>(HorseWatcher.class, 1, 0);
|
||||
|
||||
public static FlagType<Byte> INSENTIENT_META = new FlagType<Byte>(InsentientWatcher.class, 0, (byte) 0);
|
||||
|
||||
public static FlagType<Byte> IRON_GOLEM_PLAYER_CREATED = new FlagType<Byte>(IronGolemWatcher.class, 0, (byte) 0);
|
||||
|
||||
public static FlagType<Optional<ItemStack>> ITEMFRAME_ITEM = new FlagType<Optional<ItemStack>>(ItemFrameWatcher.class, 0,
|
||||
Optional.<ItemStack> absent());
|
||||
|
||||
public static FlagType<Integer> ITEMFRAME_ROTATION = new FlagType<Integer>(ItemFrameWatcher.class, 1, 0);
|
||||
|
||||
public static FlagType<Integer> LIVING_ARROWS = new FlagType<Integer>(LivingWatcher.class, 4, 0);
|
||||
|
||||
public static FlagType<Byte> LIVING_HAND = new FlagType<Byte>(LivingWatcher.class, 0, (byte) 0);
|
||||
|
||||
public static FlagType<Float> LIVING_HEALTH = new FlagType<Float>(LivingWatcher.class, 1, 0F);
|
||||
|
||||
public static FlagType<Boolean> LIVING_POTION_AMBIENT = new FlagType<Boolean>(LivingWatcher.class, 3, false);
|
||||
|
||||
public static FlagType<Integer> LIVING_POTIONS = new FlagType<Integer>(LivingWatcher.class, 2, 0);
|
||||
|
||||
public static FlagType<Integer> MINECART_BLOCK = new FlagType<Integer>(MinecartWatcher.class, 3, 0);
|
||||
|
||||
public static FlagType<Boolean> MINECART_BLOCK_VISIBLE = new FlagType<Boolean>(MinecartWatcher.class, 5, false);
|
||||
|
||||
public static FlagType<Integer> MINECART_BLOCK_Y = new FlagType<Integer>(MinecartWatcher.class, 4, 0);
|
||||
|
||||
public static FlagType<Integer> MINECART_SHAKING_DIRECTION = new FlagType<Integer>(MinecartWatcher.class, 1, 1);
|
||||
|
||||
public static FlagType<Float> MINECART_SHAKING_MULITPLIER = new FlagType<Float>(MinecartWatcher.class, 2, 0F);
|
||||
|
||||
public static FlagType<Integer> MINECART_SHAKING_POWER = new FlagType<Integer>(MinecartWatcher.class, 0, 0);
|
||||
|
||||
public static FlagType<Integer> OCELOT_TYPE = new FlagType<Integer>(OcelotWatcher.class, 0, 0);
|
||||
|
||||
public static FlagType<Boolean> PIG_SADDLED = new FlagType<Boolean>(PigWatcher.class, 0, false);
|
||||
|
||||
public static FlagType<Float> PLAYER_ABSORPTION = new FlagType<Float>(PlayerWatcher.class, 0, 0F);
|
||||
|
||||
public static FlagType<Byte> PLAYER_HAND = new FlagType<Byte>(PlayerWatcher.class, 3, (byte) 0);
|
||||
|
||||
public static FlagType<Integer> PLAYER_SCORE = new FlagType<Integer>(PlayerWatcher.class, 1, 0);
|
||||
|
||||
public static FlagType<Byte> PLAYER_SKIN = new FlagType<Byte>(PlayerWatcher.class, 2, (byte) 0);
|
||||
|
||||
public static FlagType<Integer> RABBIT_TYPE = new FlagType<Integer>(RabbitWatcher.class, 0, 0);
|
||||
|
||||
public static FlagType<Byte> SHEEP_WOOL = new FlagType<Byte>(SheepWatcher.class, 0, (byte) 0);
|
||||
|
||||
public static FlagType<Optional<BlockPosition>> SHULKER_ATTACHED = new FlagType<Optional<BlockPosition>>(ShulkerWatcher.class,
|
||||
1, Optional.<BlockPosition> absent());
|
||||
|
||||
public static FlagType<BlockFace> SHULKER_FACING = new FlagType<BlockFace>(ShulkerWatcher.class, 0, BlockFace.DOWN);
|
||||
|
||||
public static FlagType<Byte> SHULKER_PEEKING = new FlagType<Byte>(ShulkerWatcher.class, 2, (byte) 0);
|
||||
|
||||
public static FlagType<Boolean> SKELETON_SWING_ARMS = new FlagType<Boolean>(SkeletonWatcher.class, 1, false);
|
||||
|
||||
public static FlagType<Integer> SKELETON_TYPE = new FlagType<Integer>(SkeletonWatcher.class, 0, 0);
|
||||
|
||||
public static FlagType<Integer> SLIME_SIZE = new FlagType<Integer>(SlimeWatcher.class, 0, 0);
|
||||
|
||||
public static FlagType<Byte> SNOWMAN_HAT = new FlagType<Byte>(SnowmanWatcher.class, 0, (byte) 1);
|
||||
|
||||
public static FlagType<Byte> SPIDER_CLIMB = new FlagType<Byte>(SpiderWatcher.class, 0, (byte) 0);
|
||||
|
||||
public static FlagType<Optional<ItemStack>> SPLASH_POTION_ITEM = new FlagType<Optional<ItemStack>>(SplashPotionWatcher.class,
|
||||
1, Optional.of(new ItemStack(Material.SPLASH_POTION))); // Yeah, the '1' isn't a bug. No idea why but MC thinks
|
||||
// there's a '0' already.
|
||||
|
||||
public static FlagType<Optional<ItemStack>> SPLASH_POTION_ITEM_BAD = new FlagType<Optional<ItemStack>>(
|
||||
SplashPotionWatcher.class, 0, Optional.of(new ItemStack(Material.SPLASH_POTION))); // Yeah, the '1' isn't a bug. No
|
||||
// idea why but MC thinks there's a
|
||||
// '0' already.
|
||||
|
||||
public static FlagType<Byte> TAMEABLE_META = new FlagType<Byte>(TameableWatcher.class, 0, (byte) 0);
|
||||
|
||||
public static FlagType<Optional<UUID>> TAMEABLE_OWNER = new FlagType<Optional<UUID>>(TameableWatcher.class, 1,
|
||||
Optional.<UUID> absent());
|
||||
|
||||
public static FlagType<Integer> TIPPED_ARROW_COLOR = new FlagType<Integer>(ArrowWatcher.class, 1, Color.WHITE.asRGB());
|
||||
|
||||
public static FlagType<Integer> TNT_FUSE_TICKS = new FlagType<Integer>(TNTWatcher.class, 0, Integer.MAX_VALUE);
|
||||
|
||||
public static FlagType<Integer> VILLAGER_PROFESSION = new FlagType<Integer>(VillagerWatcher.class, 0, 0);
|
||||
|
||||
public static FlagType<Boolean> WITCH_AGGRESSIVE = new FlagType<Boolean>(WitchWatcher.class, 0, false);
|
||||
|
||||
public static FlagType<Integer> WITHER_INVUL = new FlagType<Integer>(WitherWatcher.class, 3, 0);
|
||||
|
||||
public static FlagType<Integer> WITHER_TARGET_1 = new FlagType<Integer>(WitherWatcher.class, 0, 0);
|
||||
|
||||
public static FlagType<Integer> WITHER_TARGET_2 = new FlagType<Integer>(WitherWatcher.class, 1, 0);
|
||||
|
||||
public static FlagType<Integer> WITHER_TARGET_3 = new FlagType<Integer>(WitherWatcher.class, 2, 0);
|
||||
|
||||
public static FlagType<Boolean> WITHERSKULL_BLUE = new FlagType<Boolean>(WitherSkullWatcher.class, 0, false);
|
||||
|
||||
public static FlagType<Boolean> WOLF_BEGGING = new FlagType<Boolean>(WolfWatcher.class, 1, false);
|
||||
|
||||
public static FlagType<Integer> WOLF_COLLAR = new FlagType<Integer>(WolfWatcher.class, 2, 14);
|
||||
|
||||
public static FlagType<Float> WOLF_DAMAGE = new FlagType<Float>(WolfWatcher.class, 0, 0F);
|
||||
|
||||
public static FlagType<Boolean> ZOMBIE_AGGRESSIVE = new FlagType<Boolean>(ZombieWatcher.class, 3, false);
|
||||
|
||||
public static FlagType<Boolean> ZOMBIE_BABY = new FlagType<Boolean>(ZombieWatcher.class, 0, false);
|
||||
|
||||
public static FlagType<Integer> ZOMBIE_PROFESSION = new FlagType<Integer>(ZombieWatcher.class, 1, 0);
|
||||
|
||||
public static FlagType<Boolean> ZOMBIE_SHAKING = new FlagType<Boolean>(ZombieWatcher.class, 2, false);
|
||||
|
||||
static
|
||||
{
|
||||
for (FlagType flagType : values())
|
||||
{
|
||||
if (flagType.getFlagWatcher() == FlagWatcher.class)
|
||||
continue;
|
||||
|
||||
flagType._index += getNoIndexes(flagType.getFlagWatcher().getSuperclass());
|
||||
|
||||
}
|
||||
|
||||
// Simple verification for the dev that he's setting up the FlagType's properly.
|
||||
// All flag types should be from 0 to <Max Number> with no empty numbers.
|
||||
// All flag types should never occur twice.
|
||||
|
||||
HashMap<Class, Integer> maxValues = new HashMap<Class, Integer>();
|
||||
|
||||
for (FlagType type : values())
|
||||
{
|
||||
if (maxValues.containsKey(type.getFlagWatcher()) && maxValues.get(type.getFlagWatcher()) > type.getIndex())
|
||||
continue;
|
||||
|
||||
maxValues.put(type.getFlagWatcher(), type.getIndex());
|
||||
}
|
||||
|
||||
for (Entry<Class, Integer> entry : maxValues.entrySet())
|
||||
{
|
||||
loop:
|
||||
|
||||
for (int i = 0; i < entry.getValue(); i++)
|
||||
{
|
||||
FlagType found = null;
|
||||
|
||||
for (FlagType type : values())
|
||||
{
|
||||
if (type.getIndex() != i)
|
||||
continue;
|
||||
|
||||
if (!type.getFlagWatcher().isAssignableFrom(entry.getKey()))
|
||||
continue;
|
||||
|
||||
if (found != null)
|
||||
{
|
||||
System.err.println(entry.getKey().getSimpleName() + " has multiple FlagType's registered for the index "
|
||||
+ i + " (" + type.getFlagWatcher().getSimpleName() + ", " + found.getFlagWatcher().getSimpleName()
|
||||
+ ")");
|
||||
continue loop;
|
||||
}
|
||||
|
||||
found = type;
|
||||
}
|
||||
|
||||
if (found != null)
|
||||
continue;
|
||||
|
||||
System.err.println(entry.getKey().getSimpleName() + " has no FlagType registered for the index " + i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static FlagType getFlag(Class<? extends FlagWatcher> watcherClass, int flagNo)
|
||||
{
|
||||
for (FlagType type : values())
|
||||
{
|
||||
if (type.getIndex() != flagNo)
|
||||
continue;
|
||||
|
||||
if (!type.getFlagWatcher().isAssignableFrom(watcherClass))
|
||||
continue;
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static ArrayList<FlagType> getFlags(Class<? extends FlagWatcher> watcherClass)
|
||||
{
|
||||
ArrayList<FlagType> list = new ArrayList<FlagType>();
|
||||
|
||||
for (FlagType type : values())
|
||||
{
|
||||
if (!type.getFlagWatcher().isAssignableFrom(watcherClass))
|
||||
continue;
|
||||
|
||||
list.add(type);
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
private static int getNoIndexes(Class c)
|
||||
{
|
||||
int found = 0;
|
||||
|
||||
for (FlagType type : values())
|
||||
{
|
||||
if (type.getFlagWatcher() != c)
|
||||
continue;
|
||||
|
||||
found++;
|
||||
}
|
||||
|
||||
if (c != FlagWatcher.class)
|
||||
{
|
||||
found += getNoIndexes(c.getSuperclass());
|
||||
}
|
||||
|
||||
return found;
|
||||
}
|
||||
|
||||
public static FlagType[] values()
|
||||
{
|
||||
return _values;
|
||||
}
|
||||
|
||||
private Y _defaultValue;
|
||||
private int _index;
|
||||
private Class<? extends FlagWatcher> _watcher;
|
||||
|
||||
private FlagType(Class<? extends FlagWatcher> watcher, int index, Y defaultValue)
|
||||
{
|
||||
_index = index;
|
||||
_watcher = watcher;
|
||||
_defaultValue = defaultValue;
|
||||
|
||||
_values = Arrays.copyOf(_values, _values.length + 1);
|
||||
_values[_values.length - 1] = this;
|
||||
}
|
||||
|
||||
public Y getDefault()
|
||||
{
|
||||
return _defaultValue;
|
||||
}
|
||||
|
||||
public Class<? extends FlagWatcher> getFlagWatcher()
|
||||
{
|
||||
return _watcher;
|
||||
}
|
||||
|
||||
public int getIndex()
|
||||
{
|
||||
return _index;
|
||||
}
|
||||
}
|
||||
|
@ -32,9 +32,9 @@ public class FlagWatcher
|
||||
/**
|
||||
* These are the entity values I need to add else it could crash them..
|
||||
*/
|
||||
private HashMap<FlagType, Object> backupEntityValues = new HashMap<>();
|
||||
private HashMap<Integer, Object> backupEntityValues = new HashMap<>();
|
||||
private TargetedDisguise disguise;
|
||||
private HashMap<FlagType, Object> entityValues = new HashMap<>();
|
||||
private HashMap<Integer, Object> entityValues = new HashMap<>();
|
||||
private EntityEquipment equipment;
|
||||
private boolean hasDied;
|
||||
private HashSet<Integer> modifiedEntityAnimations = new HashSet<>();
|
||||
@ -77,7 +77,7 @@ public class FlagWatcher
|
||||
cloned = new FlagWatcher(getDisguise());
|
||||
}
|
||||
|
||||
cloned.entityValues = (HashMap<FlagType, Object>) entityValues.clone();
|
||||
cloned.entityValues = (HashMap<Integer, Object>) entityValues.clone();
|
||||
cloned.equipment = ReflectionManager.createEntityEquipment(cloned.getDisguise().getEntity());
|
||||
cloned.modifiedEntityAnimations = (HashSet<Integer>) modifiedEntityAnimations.clone();
|
||||
cloned.addEntityAnimations = addEntityAnimations;
|
||||
@ -158,7 +158,7 @@ public class FlagWatcher
|
||||
if (sendAllCustom)
|
||||
{
|
||||
// Its sending the entire meta data. Better add the custom meta
|
||||
for (FlagType id : entityValues.keySet())
|
||||
for (Integer id : entityValues.keySet())
|
||||
{
|
||||
if (sentValues.contains(id))
|
||||
{
|
||||
@ -172,8 +172,7 @@ public class FlagWatcher
|
||||
continue;
|
||||
}
|
||||
|
||||
WrappedWatchableObject watch = new WrappedWatchableObject(
|
||||
ReflectionManager.createDataWatcherItem(id.getIndex(), value));
|
||||
WrappedWatchableObject watch = new WrappedWatchableObject(ReflectionManager.createDataWatcherItem(id, value));
|
||||
|
||||
newList.add(watch);
|
||||
}
|
||||
@ -245,7 +244,7 @@ public class FlagWatcher
|
||||
|
||||
private boolean getEntityFlag(int byteValue)
|
||||
{
|
||||
return ((byte) getValue(FlagType.ENTITY_META) & 1 << byteValue) != 0;
|
||||
return (getValue(FlagType.ENTITY_META) & 1 << byteValue) != 0;
|
||||
}
|
||||
|
||||
public EntityEquipment getEquipment()
|
||||
@ -293,14 +292,14 @@ public class FlagWatcher
|
||||
return null;
|
||||
}
|
||||
|
||||
protected <Y> Y getValue(FlagType<Y> no)
|
||||
protected <Y> Y getValue(FlagType<Y> flagType)
|
||||
{
|
||||
if (entityValues.containsKey(no))
|
||||
if (entityValues.containsKey(flagType.getIndex()))
|
||||
{
|
||||
return (Y) entityValues.get(no);
|
||||
return (Y) entityValues.get(flagType.getIndex());
|
||||
}
|
||||
|
||||
return no.getDefault();
|
||||
return flagType.getDefault();
|
||||
}
|
||||
|
||||
public List<WrappedWatchableObject> getWatchableObjects()
|
||||
@ -318,9 +317,9 @@ public class FlagWatcher
|
||||
return getCustomName() != null;
|
||||
}
|
||||
|
||||
protected boolean hasValue(int no)
|
||||
protected boolean hasValue(FlagType no)
|
||||
{
|
||||
return entityValues.containsKey(no);
|
||||
return entityValues.containsKey(no.getIndex());
|
||||
}
|
||||
|
||||
public boolean isBurning()
|
||||
@ -377,7 +376,7 @@ public class FlagWatcher
|
||||
{
|
||||
watchableObjects = new ArrayList<>();
|
||||
|
||||
for (int i = 0; i <= 31; i++)
|
||||
for (int i = 0; i <= 31; i++)// TODO
|
||||
{
|
||||
WrappedWatchableObject watchable = null;
|
||||
|
||||
@ -468,7 +467,7 @@ public class FlagWatcher
|
||||
|
||||
protected void setBackupValue(FlagType no, Object value)
|
||||
{
|
||||
backupEntityValues.put(no, value);
|
||||
backupEntityValues.put(no.getIndex(), value);
|
||||
}
|
||||
|
||||
public void setBurning(boolean setBurning)
|
||||
@ -653,7 +652,7 @@ public class FlagWatcher
|
||||
|
||||
protected <Y> void setValue(FlagType<Y> id, Y value)
|
||||
{
|
||||
entityValues.put(id, value);
|
||||
entityValues.put(id.getIndex(), value);
|
||||
|
||||
if (!DisguiseConfig.isMetadataPacketsEnabled())
|
||||
{
|
||||
|
@ -3,7 +3,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class AgeableWatcher extends LivingWatcher
|
||||
public class AgeableWatcher extends InsentientWatcher
|
||||
{
|
||||
|
||||
public AgeableWatcher(Disguise disguise)
|
||||
|
@ -1,60 +1,58 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import java.awt.Color;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
|
||||
/**
|
||||
* @author Navid
|
||||
*/
|
||||
public class AreaEffectCloudWatcher extends FlagWatcher
|
||||
{
|
||||
|
||||
public AreaEffectCloudWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public float getRadius()
|
||||
{
|
||||
return getValue(FlagType.AREA_EFFECT_RADIUS);
|
||||
}
|
||||
|
||||
public int getColor()
|
||||
{
|
||||
return getValue(FlagType.AREA_EFFECT_COLOR);
|
||||
}
|
||||
|
||||
public boolean isIgnoreRadius()
|
||||
{
|
||||
return getValue(FlagType.AREA_EFFECT_IGNORE_RADIUS);
|
||||
}
|
||||
|
||||
public int getParticleId()
|
||||
{
|
||||
return getValue(FlagType.AREA_EFFECT_PARTICLE);
|
||||
}
|
||||
|
||||
public void setRadius(float radius)
|
||||
{
|
||||
setValue(FlagType.AREA_EFFECT_RADIUS, radius);
|
||||
}
|
||||
|
||||
public void setColor(int color)
|
||||
{
|
||||
setValue(FlagType.AREA_EFFECT_COLOR, color);
|
||||
}
|
||||
|
||||
public void setIgnoreRadius(boolean ignore)
|
||||
{
|
||||
setValue(FlagType.AREA_EFFECT_IGNORE_RADIUS, ignore);
|
||||
}
|
||||
|
||||
public void setParticleId(int particleId)
|
||||
{
|
||||
setValue(FlagType.AREA_EFFECT_PARTICLE, particleId);
|
||||
}
|
||||
|
||||
}
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
|
||||
/**
|
||||
* @author Navid
|
||||
*/
|
||||
public class AreaEffectCloudWatcher extends FlagWatcher
|
||||
{
|
||||
|
||||
public AreaEffectCloudWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public float getRadius()
|
||||
{
|
||||
return getValue(FlagType.AREA_EFFECT_RADIUS);
|
||||
}
|
||||
|
||||
public int getColor()
|
||||
{
|
||||
return getValue(FlagType.AREA_EFFECT_COLOR);
|
||||
}
|
||||
|
||||
public boolean isIgnoreRadius()
|
||||
{
|
||||
return getValue(FlagType.AREA_EFFECT_IGNORE_RADIUS);
|
||||
}
|
||||
|
||||
public int getParticleId()
|
||||
{
|
||||
return getValue(FlagType.AREA_EFFECT_PARTICLE);
|
||||
}
|
||||
|
||||
public void setRadius(float radius)
|
||||
{
|
||||
setValue(FlagType.AREA_EFFECT_RADIUS, radius);
|
||||
}
|
||||
|
||||
public void setColor(int color)
|
||||
{
|
||||
setValue(FlagType.AREA_EFFECT_COLOR, color);
|
||||
}
|
||||
|
||||
public void setIgnoreRadius(boolean ignore)
|
||||
{
|
||||
setValue(FlagType.AREA_EFFECT_IGNORE_RADIUS, ignore);
|
||||
}
|
||||
|
||||
public void setParticleId(int particleId)
|
||||
{
|
||||
setValue(FlagType.AREA_EFFECT_PARTICLE, particleId);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,91 +1,166 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class ArmorStandWatcher extends LivingWatcher
|
||||
{
|
||||
|
||||
public ArmorStandWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
private boolean getArmorStandFlag(int value)
|
||||
{
|
||||
return (getValue(FlagType.ARMORSTAND_META) & value) != 0;
|
||||
}
|
||||
|
||||
public boolean isNoBasePlate()
|
||||
{
|
||||
return getArmorStandFlag(8);
|
||||
}
|
||||
|
||||
public boolean isNoGravity()
|
||||
{
|
||||
return getArmorStandFlag(2);
|
||||
}
|
||||
|
||||
public boolean isShowArms()
|
||||
{
|
||||
return getArmorStandFlag(4);
|
||||
}
|
||||
|
||||
public boolean isSmall()
|
||||
{
|
||||
return getArmorStandFlag(1);
|
||||
}
|
||||
|
||||
public boolean isMarker()
|
||||
{
|
||||
return getArmorStandFlag(10);
|
||||
}
|
||||
|
||||
private void setArmorStandFlag(int value, boolean isTrue)
|
||||
{
|
||||
byte b1 = (byte) getValue(FlagType.ARMORSTAND_META);
|
||||
|
||||
if (isTrue)
|
||||
{
|
||||
b1 = (byte) (b1 | value);
|
||||
}
|
||||
else
|
||||
{
|
||||
b1 = (byte) (b1 & value);
|
||||
}
|
||||
|
||||
setValue(FlagType.ARMORSTAND_META, b1);
|
||||
sendData(FlagType.ARMORSTAND_META);
|
||||
}
|
||||
|
||||
public void setNoBasePlate(boolean noBasePlate)
|
||||
{
|
||||
setArmorStandFlag(8, noBasePlate);
|
||||
sendData(FlagType.ARMORSTAND_META);
|
||||
}
|
||||
|
||||
public void setNoGravity(boolean noGravity)
|
||||
{
|
||||
setArmorStandFlag(2, noGravity);
|
||||
sendData(FlagType.ARMORSTAND_META);
|
||||
}
|
||||
|
||||
public void setShowArms(boolean showArms)
|
||||
{
|
||||
setArmorStandFlag(4, showArms);
|
||||
sendData(FlagType.ARMORSTAND_META);
|
||||
}
|
||||
|
||||
public void setSmall(boolean isSmall)
|
||||
{
|
||||
setArmorStandFlag(1, isSmall);
|
||||
sendData(FlagType.ARMORSTAND_META);
|
||||
}
|
||||
|
||||
public void setMarker(boolean isMarker)
|
||||
{
|
||||
setArmorStandFlag(10, isMarker);
|
||||
sendData(FlagType.ARMORSTAND_META);
|
||||
}
|
||||
|
||||
}
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class ArmorStandWatcher extends LivingWatcher
|
||||
{
|
||||
public ArmorStandWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
private boolean getArmorStandFlag(int value)
|
||||
{
|
||||
return (getValue(FlagType.ARMORSTAND_META) & value) != 0;
|
||||
}
|
||||
|
||||
public Vector getBody()
|
||||
{
|
||||
return getPose(FlagType.ARMORSTAND_BODY);
|
||||
}
|
||||
|
||||
public Vector getHead()
|
||||
{
|
||||
return getPose(FlagType.ARMORSTAND_HEAD);
|
||||
}
|
||||
|
||||
public Vector getLeftArm()
|
||||
{
|
||||
return getPose(FlagType.ARMORSTAND_LEFT_ARM);
|
||||
}
|
||||
|
||||
public Vector getLeftLeg()
|
||||
{
|
||||
return getPose(FlagType.ARMORSTAND_LEFT_LEG);
|
||||
}
|
||||
|
||||
private Vector getPose(FlagType<Vector> type)
|
||||
{
|
||||
if (!hasValue(type))
|
||||
setValue(type, new Vector());
|
||||
|
||||
return getValue(type);
|
||||
}
|
||||
|
||||
public Vector getRightArm()
|
||||
{
|
||||
return getPose(FlagType.ARMORSTAND_RIGHT_ARM);
|
||||
}
|
||||
|
||||
public Vector getRightLeg()
|
||||
{
|
||||
return getPose(FlagType.ARMORSTAND_RIGHT_LEG);
|
||||
}
|
||||
|
||||
public boolean isMarker()
|
||||
{
|
||||
return getArmorStandFlag(10);
|
||||
}
|
||||
|
||||
public boolean isNoBasePlate()
|
||||
{
|
||||
return getArmorStandFlag(8);
|
||||
}
|
||||
|
||||
public boolean isNoGravity()
|
||||
{
|
||||
return getArmorStandFlag(2);
|
||||
}
|
||||
|
||||
public boolean isShowArms()
|
||||
{
|
||||
return getArmorStandFlag(4);
|
||||
}
|
||||
|
||||
public boolean isSmall()
|
||||
{
|
||||
return getArmorStandFlag(1);
|
||||
}
|
||||
|
||||
private void setArmorStandFlag(int value, boolean isTrue)
|
||||
{
|
||||
byte b1 = (byte) getValue(FlagType.ARMORSTAND_META);
|
||||
|
||||
if (isTrue)
|
||||
{
|
||||
b1 = (byte) (b1 | value);
|
||||
}
|
||||
else
|
||||
{
|
||||
b1 = (byte) (b1 & value);
|
||||
}
|
||||
|
||||
setValue(FlagType.ARMORSTAND_META, b1);
|
||||
sendData(FlagType.ARMORSTAND_META);
|
||||
}
|
||||
|
||||
public void setBody(Vector vector)
|
||||
{
|
||||
setPose(FlagType.ARMORSTAND_BODY, vector);
|
||||
}
|
||||
|
||||
public void setHead(Vector vector)
|
||||
{
|
||||
setPose(FlagType.ARMORSTAND_HEAD, vector);
|
||||
}
|
||||
|
||||
public void setLeftArm(Vector vector)
|
||||
{
|
||||
setPose(FlagType.ARMORSTAND_LEFT_ARM, vector);
|
||||
}
|
||||
|
||||
public void setLeftLeg(Vector vector)
|
||||
{
|
||||
setPose(FlagType.ARMORSTAND_LEFT_LEG, vector);
|
||||
}
|
||||
|
||||
public void setMarker(boolean isMarker)
|
||||
{
|
||||
setArmorStandFlag(10, isMarker);
|
||||
sendData(FlagType.ARMORSTAND_META);
|
||||
}
|
||||
|
||||
public void setNoBasePlate(boolean noBasePlate)
|
||||
{
|
||||
setArmorStandFlag(8, noBasePlate);
|
||||
sendData(FlagType.ARMORSTAND_META);
|
||||
}
|
||||
|
||||
public void setNoGravity(boolean noGravity)
|
||||
{
|
||||
setArmorStandFlag(2, noGravity);
|
||||
sendData(FlagType.ARMORSTAND_META);
|
||||
}
|
||||
|
||||
private void setPose(FlagType type, Vector vector)
|
||||
{
|
||||
setValue(type, vector);
|
||||
sendData(type);
|
||||
}
|
||||
|
||||
public void setRightArm(Vector vector)
|
||||
{
|
||||
setPose(FlagType.ARMORSTAND_RIGHT_ARM, vector);
|
||||
}
|
||||
|
||||
public void setRightLeg(Vector vector)
|
||||
{
|
||||
setPose(FlagType.ARMORSTAND_RIGHT_LEG, vector);
|
||||
}
|
||||
|
||||
public void setShowArms(boolean showArms)
|
||||
{
|
||||
setArmorStandFlag(4, showArms);
|
||||
sendData(FlagType.ARMORSTAND_META);
|
||||
}
|
||||
|
||||
public void setSmall(boolean isSmall)
|
||||
{
|
||||
setArmorStandFlag(1, isSmall);
|
||||
sendData(FlagType.ARMORSTAND_META);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,26 +1,24 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
|
||||
public class ArrowWatcher extends FlagWatcher
|
||||
{
|
||||
|
||||
public ArrowWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public boolean isCritical()
|
||||
{
|
||||
return (byte) getValue(FlagType.ARROW_CRITICAL) == 1;
|
||||
}
|
||||
|
||||
public void setCritical(boolean critical)
|
||||
{
|
||||
setValue(FlagType.ARROW_CRITICAL, (byte) (critical ? 1 : 0));
|
||||
sendData(FlagType.ARROW_CRITICAL);
|
||||
}
|
||||
|
||||
}
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
|
||||
public class ArrowWatcher extends FlagWatcher
|
||||
{
|
||||
public ArrowWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public boolean isCritical()
|
||||
{
|
||||
return (byte) getValue(FlagType.ARROW_CRITICAL) == 1;
|
||||
}
|
||||
|
||||
public void setCritical(boolean critical)
|
||||
{
|
||||
setValue(FlagType.ARROW_CRITICAL, (byte) (critical ? 1 : 0));
|
||||
sendData(FlagType.ARROW_CRITICAL);
|
||||
}
|
||||
}
|
||||
|
@ -1,26 +1,26 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class BatWatcher extends LivingWatcher
|
||||
{
|
||||
|
||||
public BatWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
|
||||
setHanging(false);
|
||||
}
|
||||
|
||||
public boolean isHanging()
|
||||
{
|
||||
return ((byte) getValue(FlagType.BAT_HANGING)) == 1;
|
||||
}
|
||||
|
||||
public void setHanging(boolean hanging)
|
||||
{
|
||||
setValue(FlagType.BAT_HANGING, hanging ? (byte) 1 : (byte) 0);
|
||||
sendData(FlagType.BAT_HANGING);
|
||||
}
|
||||
}
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class BatWatcher extends InsentientWatcher
|
||||
{
|
||||
|
||||
public BatWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
|
||||
setHanging(false);
|
||||
}
|
||||
|
||||
public boolean isHanging()
|
||||
{
|
||||
return ((byte) getValue(FlagType.BAT_HANGING)) == 1;
|
||||
}
|
||||
|
||||
public void setHanging(boolean hanging)
|
||||
{
|
||||
setValue(FlagType.BAT_HANGING, hanging ? (byte) 1 : (byte) 0);
|
||||
sendData(FlagType.BAT_HANGING);
|
||||
}
|
||||
}
|
||||
|
@ -1,24 +1,24 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class BlazeWatcher extends LivingWatcher
|
||||
{
|
||||
public BlazeWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public boolean isBlazing()
|
||||
{
|
||||
return getValue(FlagType.BLAZE_BLAZING);
|
||||
}
|
||||
|
||||
public void setBlazing(boolean isBlazing)
|
||||
{
|
||||
setValue(FlagType.BLAZE_BLAZING, isBlazing);
|
||||
sendData(FlagType.BLAZE_BLAZING);
|
||||
}
|
||||
|
||||
}
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class BlazeWatcher extends InsentientWatcher
|
||||
{
|
||||
public BlazeWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public boolean isBlazing()
|
||||
{
|
||||
return getValue(FlagType.BLAZE_BLAZING);
|
||||
}
|
||||
|
||||
public void setBlazing(boolean isBlazing)
|
||||
{
|
||||
setValue(FlagType.BLAZE_BLAZING, isBlazing);
|
||||
sendData(FlagType.BLAZE_BLAZING);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,28 +1,64 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
|
||||
public class BoatWatcher extends FlagWatcher
|
||||
{
|
||||
|
||||
// TODO: Add stuff for new boat values
|
||||
|
||||
public BoatWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public float getDamage()
|
||||
{
|
||||
return getValue(FlagType.BOAT_DAMAGE);
|
||||
}
|
||||
|
||||
public void setDamage(float dmg)
|
||||
{
|
||||
setValue(FlagType.BOAT_DAMAGE, dmg);
|
||||
sendData(FlagType.BOAT_DAMAGE);
|
||||
}
|
||||
|
||||
}
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import org.bukkit.TreeSpecies;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
|
||||
public class BoatWatcher extends FlagWatcher
|
||||
{
|
||||
public BoatWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
|
||||
setBoatType(TreeSpecies.values()[new Random().nextInt(6)]);
|
||||
}
|
||||
|
||||
public float getDamage()
|
||||
{
|
||||
return getValue(FlagType.BOAT_DAMAGE);
|
||||
}
|
||||
|
||||
public void setDamage(float dmg)
|
||||
{
|
||||
setValue(FlagType.BOAT_DAMAGE, dmg);
|
||||
sendData(FlagType.BOAT_DAMAGE);
|
||||
}
|
||||
|
||||
public void setRightPaddling(boolean rightPaddling)
|
||||
{
|
||||
setValue(FlagType.BOAT_RIGHT_PADDLING, rightPaddling);
|
||||
sendData(FlagType.BOAT_RIGHT_PADDLING);
|
||||
}
|
||||
|
||||
public void setLeftPaddling(boolean leftPaddling)
|
||||
{
|
||||
setValue(FlagType.BOAT_LEFT_PADDLING, leftPaddling);
|
||||
sendData(FlagType.BOAT_LEFT_PADDLING);
|
||||
}
|
||||
|
||||
public boolean isRightPaddling()
|
||||
{
|
||||
return getValue(FlagType.BOAT_RIGHT_PADDLING);
|
||||
}
|
||||
|
||||
public boolean isLeftPaddling()
|
||||
{
|
||||
return getValue(FlagType.BOAT_LEFT_PADDLING);
|
||||
}
|
||||
|
||||
public void setBoatType(TreeSpecies boatType)
|
||||
{
|
||||
setValue(FlagType.BOAT_TYPE, (int) boatType.getData());
|
||||
sendData(FlagType.BOAT_TYPE);
|
||||
}
|
||||
|
||||
public TreeSpecies getBoatType()
|
||||
{
|
||||
return TreeSpecies.getByData(getValue(FlagType.BOAT_TYPE).byteValue());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,36 +1,36 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class CreeperWatcher extends LivingWatcher
|
||||
{
|
||||
|
||||
public CreeperWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public boolean isIgnited()
|
||||
{
|
||||
return (boolean) getValue(FlagType.CREEPER_IGNITED);
|
||||
}
|
||||
|
||||
public boolean isPowered()
|
||||
{
|
||||
return (boolean) getValue(FlagType.CREEPER_POWERED);
|
||||
}
|
||||
|
||||
public void setIgnited(boolean ignited)
|
||||
{
|
||||
setValue(FlagType.CREEPER_IGNITED, ignited);
|
||||
sendData(FlagType.CREEPER_IGNITED);
|
||||
}
|
||||
|
||||
public void setPowered(boolean powered)
|
||||
{
|
||||
setValue(FlagType.CREEPER_POWERED, powered);
|
||||
sendData(FlagType.CREEPER_POWERED);
|
||||
}
|
||||
|
||||
}
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class CreeperWatcher extends InsentientWatcher
|
||||
{
|
||||
|
||||
public CreeperWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public boolean isIgnited()
|
||||
{
|
||||
return (boolean) getValue(FlagType.CREEPER_IGNITED);
|
||||
}
|
||||
|
||||
public boolean isPowered()
|
||||
{
|
||||
return (boolean) getValue(FlagType.CREEPER_POWERED);
|
||||
}
|
||||
|
||||
public void setIgnited(boolean ignited)
|
||||
{
|
||||
setValue(FlagType.CREEPER_IGNITED, ignited);
|
||||
sendData(FlagType.CREEPER_IGNITED);
|
||||
}
|
||||
|
||||
public void setPowered(boolean powered)
|
||||
{
|
||||
setValue(FlagType.CREEPER_POWERED, powered);
|
||||
sendData(FlagType.CREEPER_POWERED);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,29 +1,28 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
|
||||
//TODO: Add support for custom items instead of just stone
|
||||
public class DroppedItemWatcher extends FlagWatcher
|
||||
{
|
||||
|
||||
public DroppedItemWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public ItemStack getItemStack()
|
||||
{
|
||||
return getValue(FlagType.DROPPED_ITEM);
|
||||
}
|
||||
|
||||
public void setItemStack(ItemStack item)
|
||||
{
|
||||
setValue(FlagType.DROPPED_ITEM, item);
|
||||
sendData(FlagType.DROPPED_ITEM);
|
||||
}
|
||||
}
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
|
||||
//TODO: Add support for custom items instead of just stone
|
||||
public class DroppedItemWatcher extends FlagWatcher
|
||||
{
|
||||
|
||||
public DroppedItemWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public ItemStack getItemStack()
|
||||
{
|
||||
return getValue(FlagType.DROPPED_ITEM);
|
||||
}
|
||||
|
||||
public void setItemStack(ItemStack item)
|
||||
{
|
||||
setValue(FlagType.DROPPED_ITEM, item);
|
||||
sendData(FlagType.DROPPED_ITEM);
|
||||
}
|
||||
}
|
||||
|
@ -1,27 +1,27 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
/**
|
||||
* @author Navid
|
||||
*/
|
||||
public class EnderDragonWatcher extends LivingWatcher
|
||||
{
|
||||
|
||||
public EnderDragonWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public int getPhase()
|
||||
{
|
||||
return getValue(FlagType.ENDERDRAGON_PHASE);
|
||||
}
|
||||
|
||||
public void setPhase(int phase)
|
||||
{
|
||||
setValue(FlagType.ENDERDRAGON_PHASE, phase);
|
||||
sendData(FlagType.ENDERDRAGON_PHASE);
|
||||
}
|
||||
}
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
/**
|
||||
* @author Navid
|
||||
*/
|
||||
public class EnderDragonWatcher extends InsentientWatcher
|
||||
{
|
||||
|
||||
public EnderDragonWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public int getPhase()
|
||||
{
|
||||
return getValue(FlagType.ENDERDRAGON_PHASE);
|
||||
}
|
||||
|
||||
public void setPhase(int phase)
|
||||
{
|
||||
setValue(FlagType.ENDERDRAGON_PHASE, phase);
|
||||
sendData(FlagType.ENDERDRAGON_PHASE);
|
||||
}
|
||||
}
|
||||
|
@ -1,68 +1,68 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import com.google.common.base.Optional;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
import me.libraryaddict.disguise.utilities.ReflectionManager;
|
||||
|
||||
public class EndermanWatcher extends LivingWatcher
|
||||
{
|
||||
|
||||
public EndermanWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getItemInMainHand()
|
||||
{
|
||||
Optional<Integer> value = getValue(FlagType.ENDERMAN_ITEM);
|
||||
|
||||
if (value.isPresent())
|
||||
{
|
||||
Pair<Integer, Integer> pair = ReflectionManager.getFromCombinedId(value.get());
|
||||
int id = pair.getLeft();
|
||||
int data = pair.getRight();
|
||||
|
||||
return new ItemStack(id, 1, (short) data);
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setItemInMainHand(ItemStack itemstack)
|
||||
{
|
||||
setItemInMainHand(itemstack.getTypeId(), itemstack.getDurability());
|
||||
}
|
||||
|
||||
public void setItemInMainHand(int typeId)
|
||||
{
|
||||
setItemInMainHand(typeId, 0);
|
||||
}
|
||||
|
||||
public void setItemInMainHand(int typeId, int data)
|
||||
{
|
||||
int combined = ReflectionManager.getCombinedId(typeId, data);
|
||||
|
||||
setValue(FlagType.ENDERMAN_ITEM, Optional.of(combined));
|
||||
}
|
||||
|
||||
public boolean isAggressive()
|
||||
{
|
||||
return getValue(FlagType.ENDERMAN_AGRESSIVE);
|
||||
}
|
||||
|
||||
public void setAggressive(boolean isAggressive)
|
||||
{
|
||||
setValue(FlagType.ENDERMAN_AGRESSIVE, isAggressive);
|
||||
sendData(FlagType.ENDERMAN_AGRESSIVE);
|
||||
}
|
||||
|
||||
}
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import com.google.common.base.Optional;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
import me.libraryaddict.disguise.utilities.ReflectionManager;
|
||||
|
||||
public class EndermanWatcher extends InsentientWatcher
|
||||
{
|
||||
|
||||
public EndermanWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getItemInMainHand()
|
||||
{
|
||||
Optional<Integer> value = getValue(FlagType.ENDERMAN_ITEM);
|
||||
|
||||
if (value.isPresent())
|
||||
{
|
||||
Pair<Integer, Integer> pair = ReflectionManager.getFromCombinedId(value.get());
|
||||
int id = pair.getLeft();
|
||||
int data = pair.getRight();
|
||||
|
||||
return new ItemStack(id, 1, (short) data);
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setItemInMainHand(ItemStack itemstack)
|
||||
{
|
||||
setItemInMainHand(itemstack.getTypeId(), itemstack.getDurability());
|
||||
}
|
||||
|
||||
public void setItemInMainHand(int typeId)
|
||||
{
|
||||
setItemInMainHand(typeId, 0);
|
||||
}
|
||||
|
||||
public void setItemInMainHand(int typeId, int data)
|
||||
{
|
||||
int combined = ReflectionManager.getCombinedId(typeId, data);
|
||||
|
||||
setValue(FlagType.ENDERMAN_ITEM, Optional.of(combined));
|
||||
}
|
||||
|
||||
public boolean isAggressive()
|
||||
{
|
||||
return getValue(FlagType.ENDERMAN_AGRESSIVE);
|
||||
}
|
||||
|
||||
public void setAggressive(boolean isAggressive)
|
||||
{
|
||||
setValue(FlagType.ENDERMAN_AGRESSIVE, isAggressive);
|
||||
sendData(FlagType.ENDERMAN_AGRESSIVE);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,43 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import com.google.common.base.Optional;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
|
||||
public class FireworkWatcher extends FlagWatcher
|
||||
{
|
||||
public FireworkWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public ItemStack getFirework()
|
||||
{
|
||||
if (getValue(FlagType.FIREWORK_ITEM) == null)
|
||||
{
|
||||
return new ItemStack(Material.AIR);
|
||||
}
|
||||
|
||||
return (ItemStack) getValue(FlagType.FIREWORK_ITEM).get();
|
||||
}
|
||||
|
||||
public void setFirework(ItemStack newItem)
|
||||
{
|
||||
if (newItem == null)
|
||||
{
|
||||
newItem = new ItemStack(Material.AIR);
|
||||
}
|
||||
|
||||
newItem = newItem.clone();
|
||||
newItem.setAmount(1);
|
||||
|
||||
setValue(FlagType.FIREWORK_ITEM, Optional.<ItemStack> of(newItem));
|
||||
sendData(FlagType.FIREWORK_ITEM);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
|
||||
public class FishingHookWatcher extends FlagWatcher
|
||||
{
|
||||
public FishingHookWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public void setHooked(int hookedId)
|
||||
{
|
||||
setValue(FlagType.FISHING_HOOK, hookedId + 1);
|
||||
sendData(FlagType.FISHING_HOOK);
|
||||
}
|
||||
|
||||
public int getHooked()
|
||||
{
|
||||
int hooked = getValue(FlagType.FISHING_HOOK);
|
||||
|
||||
if (hooked > 0)
|
||||
hooked--;
|
||||
|
||||
return hooked;
|
||||
}
|
||||
}
|
@ -1,25 +1,25 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class GhastWatcher extends LivingWatcher
|
||||
{
|
||||
|
||||
public GhastWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public boolean isAggressive()
|
||||
{
|
||||
return getValue(FlagType.GHAST_AGRESSIVE);
|
||||
}
|
||||
|
||||
public void setAggressive(boolean isAggressive)
|
||||
{
|
||||
setValue(FlagType.GHAST_AGRESSIVE, isAggressive);
|
||||
sendData(FlagType.GHAST_AGRESSIVE);
|
||||
}
|
||||
|
||||
}
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class GhastWatcher extends InsentientWatcher
|
||||
{
|
||||
|
||||
public GhastWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public boolean isAggressive()
|
||||
{
|
||||
return getValue(FlagType.GHAST_AGRESSIVE);
|
||||
}
|
||||
|
||||
public void setAggressive(boolean isAggressive)
|
||||
{
|
||||
setValue(FlagType.GHAST_AGRESSIVE, isAggressive);
|
||||
sendData(FlagType.GHAST_AGRESSIVE);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,101 +1,101 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class GuardianWatcher extends LivingWatcher
|
||||
{
|
||||
|
||||
public GuardianWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this guardian targetting someone?
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public boolean isTarget()
|
||||
{
|
||||
return ((int) getValue(FlagType.GUARDIAN_TARGET)) != 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Shoot a beam at the given entityId.
|
||||
*
|
||||
* @param entityId
|
||||
*/
|
||||
public void setTarget(int entityId)
|
||||
{
|
||||
setValue(FlagType.GUARDIAN_TARGET, entityId);
|
||||
sendData(FlagType.GUARDIAN_TARGET);
|
||||
}
|
||||
|
||||
public void setTarget(Entity entity)
|
||||
{
|
||||
setTarget(entity == null ? 0 : entity.getEntityId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Shoot a beam at the given player name.
|
||||
*
|
||||
* @param playername
|
||||
*/
|
||||
public void setTarget(String playername)
|
||||
{
|
||||
Player player = Bukkit.getPlayer(playername);
|
||||
|
||||
if (player == null)
|
||||
return;
|
||||
|
||||
setValue(FlagType.GUARDIAN_TARGET, player.getEntityId());
|
||||
sendData(FlagType.GUARDIAN_TARGET);
|
||||
}
|
||||
|
||||
public boolean isRetractingSpikes()
|
||||
{
|
||||
return isGuardianFlag(2);
|
||||
}
|
||||
|
||||
public void setRetractingSpikes(boolean isRetracting)
|
||||
{
|
||||
setGuardianFlag(2, isRetracting);
|
||||
}
|
||||
|
||||
public boolean isElder()
|
||||
{
|
||||
return isGuardianFlag(4);
|
||||
}
|
||||
|
||||
public void setElder(boolean isGuardian)
|
||||
{
|
||||
setGuardianFlag(4, isGuardian);
|
||||
}
|
||||
|
||||
protected boolean isGuardianFlag(int no)
|
||||
{
|
||||
return (getValue(FlagType.GUARDIAN_FLAG) & no) != 0;
|
||||
}
|
||||
|
||||
protected void setGuardianFlag(int no, boolean flag)
|
||||
{
|
||||
byte b0 = getValue(FlagType.GUARDIAN_FLAG);
|
||||
|
||||
if (flag)
|
||||
{
|
||||
setValue(FlagType.GUARDIAN_FLAG, (byte) (b0 | no));
|
||||
}
|
||||
else
|
||||
{
|
||||
setValue(FlagType.GUARDIAN_FLAG, (byte) (b0 & -(no + 1)));
|
||||
}
|
||||
|
||||
sendData(FlagType.GUARDIAN_FLAG);
|
||||
}
|
||||
|
||||
}
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class GuardianWatcher extends InsentientWatcher
|
||||
{
|
||||
|
||||
public GuardianWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this guardian targetting someone?
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public boolean isTarget()
|
||||
{
|
||||
return ((int) getValue(FlagType.GUARDIAN_TARGET)) != 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Shoot a beam at the given entityId.
|
||||
*
|
||||
* @param entityId
|
||||
*/
|
||||
public void setTarget(int entityId)
|
||||
{
|
||||
setValue(FlagType.GUARDIAN_TARGET, entityId);
|
||||
sendData(FlagType.GUARDIAN_TARGET);
|
||||
}
|
||||
|
||||
public void setTarget(Entity entity)
|
||||
{
|
||||
setTarget(entity == null ? 0 : entity.getEntityId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Shoot a beam at the given player name.
|
||||
*
|
||||
* @param playername
|
||||
*/
|
||||
public void setTarget(String playername)
|
||||
{
|
||||
Player player = Bukkit.getPlayer(playername);
|
||||
|
||||
if (player == null)
|
||||
return;
|
||||
|
||||
setValue(FlagType.GUARDIAN_TARGET, player.getEntityId());
|
||||
sendData(FlagType.GUARDIAN_TARGET);
|
||||
}
|
||||
|
||||
public boolean isRetractingSpikes()
|
||||
{
|
||||
return isGuardianFlag(2);
|
||||
}
|
||||
|
||||
public void setRetractingSpikes(boolean isRetracting)
|
||||
{
|
||||
setGuardianFlag(2, isRetracting);
|
||||
}
|
||||
|
||||
public boolean isElder()
|
||||
{
|
||||
return isGuardianFlag(4);
|
||||
}
|
||||
|
||||
public void setElder(boolean isGuardian)
|
||||
{
|
||||
setGuardianFlag(4, isGuardian);
|
||||
}
|
||||
|
||||
protected boolean isGuardianFlag(int no)
|
||||
{
|
||||
return (getValue(FlagType.GUARDIAN_FLAG) & no) != 0;
|
||||
}
|
||||
|
||||
protected void setGuardianFlag(int no, boolean flag)
|
||||
{
|
||||
byte b0 = getValue(FlagType.GUARDIAN_FLAG);
|
||||
|
||||
if (flag)
|
||||
{
|
||||
setValue(FlagType.GUARDIAN_FLAG, (byte) (b0 | no));
|
||||
}
|
||||
else
|
||||
{
|
||||
setValue(FlagType.GUARDIAN_FLAG, (byte) (b0 & -(no + 1)));
|
||||
}
|
||||
|
||||
sendData(FlagType.GUARDIAN_FLAG);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,233 +1,232 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Horse.Color;
|
||||
import org.bukkit.entity.Horse.Style;
|
||||
import org.bukkit.entity.Horse.Variant;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import com.google.common.base.Optional;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
|
||||
public class HorseWatcher extends AgeableWatcher
|
||||
{
|
||||
|
||||
public HorseWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
|
||||
setStyle(Style.values()[DisguiseUtilities.random.nextInt(Style.values().length)]);
|
||||
setColor(Color.values()[DisguiseUtilities.random.nextInt(Color.values().length)]);
|
||||
}
|
||||
|
||||
public Variant getVariant()
|
||||
{
|
||||
return Variant.values()[getValue(FlagType.HORSE_VARIANT)];
|
||||
}
|
||||
|
||||
public void setVariant(Variant variant)
|
||||
{
|
||||
setVariant(variant.ordinal());
|
||||
}
|
||||
|
||||
public void setVariant(int variant)
|
||||
{
|
||||
if (variant < 0 || variant > 4)
|
||||
{
|
||||
variant = 0; // Crashing people is mean
|
||||
}
|
||||
|
||||
setValue(FlagType.HORSE_VARIANT, variant);
|
||||
sendData(FlagType.HORSE_VARIANT);
|
||||
}
|
||||
|
||||
public Color getColor()
|
||||
{
|
||||
return Color.values()[((Integer) getValue(FlagType.HORSE_COLOR) & 0xFF)];
|
||||
}
|
||||
|
||||
public ItemStack getHorseArmor()
|
||||
{
|
||||
int horseValue = getHorseArmorAsInt();
|
||||
|
||||
switch (horseValue)
|
||||
{
|
||||
case 1:
|
||||
return new ItemStack(Material.IRON_BARDING);
|
||||
case 2:
|
||||
return new ItemStack(Material.GOLD_BARDING);
|
||||
case 3:
|
||||
return new ItemStack(Material.DIAMOND_BARDING);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
protected int getHorseArmorAsInt()
|
||||
{
|
||||
return getValue(FlagType.HORSE_ARMOR);
|
||||
}
|
||||
|
||||
public Optional<UUID> getOwner()
|
||||
{
|
||||
return getValue(FlagType.HORSE_OWNER);
|
||||
}
|
||||
|
||||
public Style getStyle()
|
||||
{
|
||||
return Style.values()[(getValue(FlagType.HORSE_STYLE) >>> 8)];
|
||||
}
|
||||
|
||||
public boolean hasChest()
|
||||
{
|
||||
return isHorseFlag(8);
|
||||
}
|
||||
|
||||
public boolean isBreedable()
|
||||
{
|
||||
return isHorseFlag(16);
|
||||
}
|
||||
|
||||
public boolean isGrazing()
|
||||
{
|
||||
return isHorseFlag(32);
|
||||
}
|
||||
|
||||
public boolean isMouthOpen()
|
||||
{
|
||||
return isHorseFlag(128);
|
||||
}
|
||||
|
||||
public boolean isRearing()
|
||||
{
|
||||
return isHorseFlag(64);
|
||||
}
|
||||
|
||||
public boolean isSaddled()
|
||||
{
|
||||
return isHorseFlag(4);
|
||||
}
|
||||
|
||||
public boolean isTamed()
|
||||
{
|
||||
return isHorseFlag(2);
|
||||
}
|
||||
|
||||
private boolean isHorseFlag(int i)
|
||||
{
|
||||
return (getHorseFlag() & i) != 0;
|
||||
}
|
||||
|
||||
private byte getHorseFlag()
|
||||
{
|
||||
return getValue(FlagType.HORSE_META);
|
||||
}
|
||||
|
||||
public void setCanBreed(boolean breed)
|
||||
{
|
||||
setHorseFlag(16, breed);
|
||||
}
|
||||
|
||||
public void setCarryingChest(boolean chest)
|
||||
{
|
||||
setHorseFlag(8, chest);
|
||||
}
|
||||
|
||||
public void setColor(Color color)
|
||||
{
|
||||
setValue(FlagType.HORSE_COLOR, color.ordinal() & 0xFF | getStyle().ordinal() << 8);
|
||||
sendData(FlagType.HORSE_COLOR);
|
||||
}
|
||||
|
||||
private void setHorseFlag(int i, boolean flag)
|
||||
{
|
||||
byte j = getValue(FlagType.HORSE_META);
|
||||
|
||||
if (flag)
|
||||
{
|
||||
setValue(FlagType.HORSE_META, (byte) (j | i));
|
||||
}
|
||||
else
|
||||
{
|
||||
setValue(FlagType.HORSE_META, (byte) (j & ~i));
|
||||
}
|
||||
|
||||
sendData(FlagType.HORSE_META);
|
||||
}
|
||||
|
||||
public void setGrazing(boolean grazing)
|
||||
{
|
||||
setHorseFlag(32, grazing);
|
||||
}
|
||||
|
||||
protected void setHorseArmor(int armor)
|
||||
{
|
||||
setValue(FlagType.HORSE_ARMOR, armor);
|
||||
sendData(FlagType.HORSE_ARMOR);
|
||||
}
|
||||
|
||||
public void setHorseArmor(ItemStack item)
|
||||
{
|
||||
int value = 0;
|
||||
|
||||
if (item != null)
|
||||
{
|
||||
Material mat = item.getType();
|
||||
|
||||
if (mat == Material.IRON_BARDING)
|
||||
{
|
||||
value = 1;
|
||||
}
|
||||
else if (mat == Material.GOLD_BARDING)
|
||||
{
|
||||
value = 2;
|
||||
}
|
||||
else if (mat == Material.DIAMOND_BARDING)
|
||||
{
|
||||
value = 3;
|
||||
}
|
||||
}
|
||||
|
||||
setHorseArmor(value);
|
||||
}
|
||||
|
||||
public void setMouthOpen(boolean mouthOpen)
|
||||
{
|
||||
setHorseFlag(128, mouthOpen);
|
||||
}
|
||||
|
||||
public void setOwner(UUID uuid)
|
||||
{
|
||||
setValue(FlagType.HORSE_OWNER, Optional.of(uuid));
|
||||
sendData(FlagType.HORSE_OWNER);
|
||||
}
|
||||
|
||||
public void setRearing(boolean rear)
|
||||
{
|
||||
setHorseFlag(64, rear);
|
||||
}
|
||||
|
||||
public void setSaddled(boolean saddled)
|
||||
{
|
||||
setHorseFlag(4, saddled);
|
||||
}
|
||||
|
||||
public void setStyle(Style style)
|
||||
{
|
||||
setValue(FlagType.HORSE_STYLE, getColor().ordinal() & 0xFF | style.ordinal() << 8);
|
||||
sendData(FlagType.HORSE_STYLE);
|
||||
}
|
||||
|
||||
public void setTamed(boolean tamed)
|
||||
{
|
||||
setHorseFlag(2, tamed);
|
||||
}
|
||||
|
||||
}
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Horse.Color;
|
||||
import org.bukkit.entity.Horse.Style;
|
||||
import org.bukkit.entity.Horse.Variant;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import com.google.common.base.Optional;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
|
||||
public class HorseWatcher extends AgeableWatcher
|
||||
{
|
||||
public HorseWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
|
||||
setStyle(Style.values()[DisguiseUtilities.random.nextInt(Style.values().length)]);
|
||||
setColor(Color.values()[DisguiseUtilities.random.nextInt(Color.values().length)]);
|
||||
}
|
||||
|
||||
public Variant getVariant()
|
||||
{
|
||||
return Variant.values()[getValue(FlagType.HORSE_VARIANT)];
|
||||
}
|
||||
|
||||
public void setVariant(Variant variant)
|
||||
{
|
||||
setVariant(variant.ordinal());
|
||||
}
|
||||
|
||||
public void setVariant(int variant)
|
||||
{
|
||||
if (variant < 0 || variant > 4)
|
||||
{
|
||||
variant = 0; // Crashing people is mean
|
||||
}
|
||||
|
||||
setValue(FlagType.HORSE_VARIANT, variant);
|
||||
sendData(FlagType.HORSE_VARIANT);
|
||||
}
|
||||
|
||||
public Color getColor()
|
||||
{
|
||||
return Color.values()[((Integer) getValue(FlagType.HORSE_COLOR) & 0xFF)];
|
||||
}
|
||||
|
||||
public ItemStack getHorseArmor()
|
||||
{
|
||||
int horseValue = getHorseArmorAsInt();
|
||||
|
||||
switch (horseValue)
|
||||
{
|
||||
case 1:
|
||||
return new ItemStack(Material.IRON_BARDING);
|
||||
case 2:
|
||||
return new ItemStack(Material.GOLD_BARDING);
|
||||
case 3:
|
||||
return new ItemStack(Material.DIAMOND_BARDING);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
protected int getHorseArmorAsInt()
|
||||
{
|
||||
return getValue(FlagType.HORSE_ARMOR);
|
||||
}
|
||||
|
||||
public Optional<UUID> getOwner()
|
||||
{
|
||||
return getValue(FlagType.HORSE_OWNER);
|
||||
}
|
||||
|
||||
public Style getStyle()
|
||||
{
|
||||
return Style.values()[(getValue(FlagType.HORSE_COLOR) >>> 8)];
|
||||
}
|
||||
|
||||
public boolean hasChest()
|
||||
{
|
||||
return isHorseFlag(8);
|
||||
}
|
||||
|
||||
public boolean isBreedable()
|
||||
{
|
||||
return isHorseFlag(16);
|
||||
}
|
||||
|
||||
public boolean isGrazing()
|
||||
{
|
||||
return isHorseFlag(32);
|
||||
}
|
||||
|
||||
public boolean isMouthOpen()
|
||||
{
|
||||
return isHorseFlag(128);
|
||||
}
|
||||
|
||||
public boolean isRearing()
|
||||
{
|
||||
return isHorseFlag(64);
|
||||
}
|
||||
|
||||
public boolean isSaddled()
|
||||
{
|
||||
return isHorseFlag(4);
|
||||
}
|
||||
|
||||
public boolean isTamed()
|
||||
{
|
||||
return isHorseFlag(2);
|
||||
}
|
||||
|
||||
private boolean isHorseFlag(int i)
|
||||
{
|
||||
return (getHorseFlag() & i) != 0;
|
||||
}
|
||||
|
||||
private byte getHorseFlag()
|
||||
{
|
||||
return getValue(FlagType.HORSE_META);
|
||||
}
|
||||
|
||||
public void setCanBreed(boolean breed)
|
||||
{
|
||||
setHorseFlag(16, breed);
|
||||
}
|
||||
|
||||
public void setCarryingChest(boolean chest)
|
||||
{
|
||||
setHorseFlag(8, chest);
|
||||
}
|
||||
|
||||
public void setColor(Color color)
|
||||
{
|
||||
setValue(FlagType.HORSE_COLOR, color.ordinal() & 0xFF | getStyle().ordinal() << 8);
|
||||
sendData(FlagType.HORSE_COLOR);
|
||||
}
|
||||
|
||||
private void setHorseFlag(int i, boolean flag)
|
||||
{
|
||||
byte j = getValue(FlagType.HORSE_META);
|
||||
|
||||
if (flag)
|
||||
{
|
||||
setValue(FlagType.HORSE_META, (byte) (j | i));
|
||||
}
|
||||
else
|
||||
{
|
||||
setValue(FlagType.HORSE_META, (byte) (j & ~i));
|
||||
}
|
||||
|
||||
sendData(FlagType.HORSE_META);
|
||||
}
|
||||
|
||||
public void setGrazing(boolean grazing)
|
||||
{
|
||||
setHorseFlag(32, grazing);
|
||||
}
|
||||
|
||||
protected void setHorseArmor(int armor)
|
||||
{
|
||||
setValue(FlagType.HORSE_ARMOR, armor);
|
||||
sendData(FlagType.HORSE_ARMOR);
|
||||
}
|
||||
|
||||
public void setHorseArmor(ItemStack item)
|
||||
{
|
||||
int value = 0;
|
||||
|
||||
if (item != null)
|
||||
{
|
||||
Material mat = item.getType();
|
||||
|
||||
if (mat == Material.IRON_BARDING)
|
||||
{
|
||||
value = 1;
|
||||
}
|
||||
else if (mat == Material.GOLD_BARDING)
|
||||
{
|
||||
value = 2;
|
||||
}
|
||||
else if (mat == Material.DIAMOND_BARDING)
|
||||
{
|
||||
value = 3;
|
||||
}
|
||||
}
|
||||
|
||||
setHorseArmor(value);
|
||||
}
|
||||
|
||||
public void setMouthOpen(boolean mouthOpen)
|
||||
{
|
||||
setHorseFlag(128, mouthOpen);
|
||||
}
|
||||
|
||||
public void setOwner(UUID uuid)
|
||||
{
|
||||
setValue(FlagType.HORSE_OWNER, Optional.of(uuid));
|
||||
sendData(FlagType.HORSE_OWNER);
|
||||
}
|
||||
|
||||
public void setRearing(boolean rear)
|
||||
{
|
||||
setHorseFlag(64, rear);
|
||||
}
|
||||
|
||||
public void setSaddled(boolean saddled)
|
||||
{
|
||||
setHorseFlag(4, saddled);
|
||||
}
|
||||
|
||||
public void setStyle(Style style)
|
||||
{
|
||||
setValue(FlagType.HORSE_COLOR, getColor().ordinal() & 0xFF | style.ordinal() << 8);
|
||||
sendData(FlagType.HORSE_COLOR);
|
||||
}
|
||||
|
||||
public void setTamed(boolean tamed)
|
||||
{
|
||||
setHorseFlag(2, tamed);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,63 +1,55 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class InsentientWatcher extends LivingWatcher
|
||||
{
|
||||
public InsentientWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public void setLeftHanded(boolean leftHanded)
|
||||
{
|
||||
setRightHanded(!leftHanded);
|
||||
}
|
||||
|
||||
public void setRightHanded(boolean rightHanded)
|
||||
{
|
||||
setInsentientFlag(2, rightHanded);
|
||||
sendData(FlagType.INSENTIENT_META);
|
||||
}
|
||||
|
||||
public boolean isRightHanded()
|
||||
{
|
||||
return getInsentientFlag(2);
|
||||
}
|
||||
|
||||
public boolean isLeftHanded()
|
||||
{
|
||||
return !isRightHanded();
|
||||
}
|
||||
|
||||
public boolean isAI()
|
||||
{
|
||||
return getInsentientFlag(1);
|
||||
}
|
||||
|
||||
public void setAI(boolean ai)
|
||||
{
|
||||
setInsentientFlag(1, ai);
|
||||
sendData(FlagType.INSENTIENT_META);
|
||||
}
|
||||
|
||||
private void setInsentientFlag(int i, boolean flag)
|
||||
{
|
||||
byte b0 = (byte) getValue(FlagType.INSENTIENT_META);
|
||||
|
||||
if (flag)
|
||||
{
|
||||
setValue(FlagType.INSENTIENT_META, (byte) (b0 | 1 << i));
|
||||
}
|
||||
else
|
||||
{
|
||||
setValue(FlagType.INSENTIENT_META, (byte) (b0 & (~1 << i)));
|
||||
}
|
||||
}
|
||||
|
||||
private boolean getInsentientFlag(int i)
|
||||
{
|
||||
return ((byte) getValue(FlagType.PLAYER_SKIN) & 1 << i) != 0;
|
||||
}
|
||||
}
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import org.bukkit.inventory.MainHand;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class InsentientWatcher extends LivingWatcher
|
||||
{
|
||||
public InsentientWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public void setMainHand(MainHand mainHand)
|
||||
{
|
||||
setInsentientFlag(2, mainHand == MainHand.RIGHT);
|
||||
sendData(FlagType.INSENTIENT_META);
|
||||
}
|
||||
|
||||
public MainHand getMainHand()
|
||||
{
|
||||
return getInsentientFlag(2) ? MainHand.RIGHT : MainHand.LEFT;
|
||||
}
|
||||
|
||||
public boolean isAI()
|
||||
{
|
||||
return getInsentientFlag(1);
|
||||
}
|
||||
|
||||
public void setAI(boolean ai)
|
||||
{
|
||||
setInsentientFlag(1, ai);
|
||||
sendData(FlagType.INSENTIENT_META);
|
||||
}
|
||||
|
||||
private void setInsentientFlag(int i, boolean flag)
|
||||
{
|
||||
byte b0 = (byte) getValue(FlagType.INSENTIENT_META);
|
||||
|
||||
if (flag)
|
||||
{
|
||||
setValue(FlagType.INSENTIENT_META, (byte) (b0 | 1 << i));
|
||||
}
|
||||
else
|
||||
{
|
||||
setValue(FlagType.INSENTIENT_META, (byte) (b0 & (~1 << i)));
|
||||
}
|
||||
}
|
||||
|
||||
private boolean getInsentientFlag(int i)
|
||||
{
|
||||
return ((byte) getValue(FlagType.PLAYER_SKIN) & 1 << i) != 0;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,12 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
|
||||
public class IronGolemWatcher extends InsentientWatcher
|
||||
{
|
||||
public IronGolemWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
}
|
@ -1,53 +1,54 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
|
||||
public class ItemFrameWatcher extends FlagWatcher
|
||||
{
|
||||
|
||||
public ItemFrameWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public ItemStack getItem()
|
||||
{
|
||||
if (getValue(FlagType.ITEMFRAME_ITEM) == null)
|
||||
{
|
||||
return new ItemStack(Material.AIR);
|
||||
}
|
||||
|
||||
return (ItemStack) getValue(FlagType.ITEMFRAME_ITEM);
|
||||
}
|
||||
|
||||
public int getRotation()
|
||||
{
|
||||
return getValue(FlagType.ITEMFRAME_ROTATION);
|
||||
}
|
||||
|
||||
public void setItem(ItemStack newItem)
|
||||
{
|
||||
if (newItem == null)
|
||||
{
|
||||
newItem = new ItemStack(Material.AIR);
|
||||
}
|
||||
|
||||
newItem = newItem.clone();
|
||||
newItem.setAmount(1);
|
||||
|
||||
setValue(FlagType.ITEMFRAME_ITEM, newItem);
|
||||
sendData(FlagType.ITEMFRAME_ITEM);
|
||||
}
|
||||
|
||||
public void setRotation(int rotation)
|
||||
{
|
||||
setValue(FlagType.ITEMFRAME_ROTATION, (byte) (rotation % 4));
|
||||
sendData(FlagType.ITEMFRAME_ROTATION);
|
||||
}
|
||||
|
||||
}
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import com.google.common.base.Optional;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
|
||||
public class ItemFrameWatcher extends FlagWatcher
|
||||
{
|
||||
public ItemFrameWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public ItemStack getItem()
|
||||
{
|
||||
if (getValue(FlagType.ITEMFRAME_ITEM) == null)
|
||||
{
|
||||
return new ItemStack(Material.AIR);
|
||||
}
|
||||
|
||||
return (ItemStack) getValue(FlagType.ITEMFRAME_ITEM).get();
|
||||
}
|
||||
|
||||
public int getRotation()
|
||||
{
|
||||
return getValue(FlagType.ITEMFRAME_ROTATION);
|
||||
}
|
||||
|
||||
public void setItem(ItemStack newItem)
|
||||
{
|
||||
if (newItem == null)
|
||||
{
|
||||
newItem = new ItemStack(Material.AIR);
|
||||
}
|
||||
|
||||
newItem = newItem.clone();
|
||||
newItem.setAmount(1);
|
||||
|
||||
setValue(FlagType.ITEMFRAME_ITEM, Optional.<ItemStack> of(newItem));
|
||||
sendData(FlagType.ITEMFRAME_ITEM);
|
||||
}
|
||||
|
||||
public void setRotation(int rotation)
|
||||
{
|
||||
setValue(FlagType.ITEMFRAME_ROTATION, rotation % 4);
|
||||
sendData(FlagType.ITEMFRAME_ROTATION);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.MainHand;
|
||||
|
||||
import com.comphenix.protocol.PacketType.Play.Server;
|
||||
import com.comphenix.protocol.ProtocolLibrary;
|
||||
@ -34,6 +35,17 @@ public class PlayerWatcher extends LivingWatcher
|
||||
return watcher;
|
||||
}
|
||||
|
||||
public void setMainHand(MainHand mainHand)
|
||||
{
|
||||
setValue(FlagType.PLAYER_HAND, (byte) mainHand.ordinal());
|
||||
sendData(FlagType.PLAYER_HAND);
|
||||
}
|
||||
|
||||
public MainHand getMainHand()
|
||||
{
|
||||
return MainHand.values()[getValue(FlagType.PLAYER_HAND)];
|
||||
}
|
||||
|
||||
public BlockFace getSleepingDirection()
|
||||
{
|
||||
if (sleepingDirection == null)
|
||||
|
@ -1,52 +1,61 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import org.bukkit.block.BlockFace;
|
||||
|
||||
import com.comphenix.protocol.wrappers.BlockPosition;
|
||||
import com.google.common.base.Optional;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
|
||||
/**
|
||||
* @author Navid
|
||||
*/
|
||||
// TODO: Add the appropriate data values to this class
|
||||
public class ShulkerWatcher extends LivingWatcher
|
||||
{
|
||||
|
||||
public ShulkerWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public BlockFace getFacingDirection()
|
||||
{
|
||||
return BlockFace.UP;
|
||||
}
|
||||
|
||||
public void setFacingDirection()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public Optional<BlockPosition> getAttachmentPosition()
|
||||
{
|
||||
return Optional.absent();
|
||||
}
|
||||
|
||||
public void setAttachmentPosition(BlockPosition pos)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public byte getShieldHeight()
|
||||
{
|
||||
return 0x00;
|
||||
}
|
||||
|
||||
public void setShieldHeight()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import org.bukkit.block.BlockFace;
|
||||
|
||||
import com.comphenix.protocol.wrappers.BlockPosition;
|
||||
import com.google.common.base.Optional;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
/**
|
||||
* @author Navid
|
||||
*/
|
||||
public class ShulkerWatcher extends InsentientWatcher
|
||||
{
|
||||
|
||||
public ShulkerWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public BlockFace getFacingDirection()
|
||||
{
|
||||
return getValue(FlagType.SHULKER_FACING);
|
||||
}
|
||||
|
||||
public void setFacingDirection(BlockFace face)
|
||||
{
|
||||
setValue(FlagType.SHULKER_FACING, face);
|
||||
sendData(FlagType.SHULKER_FACING);
|
||||
}
|
||||
|
||||
public BlockPosition getAttachmentPosition()
|
||||
{
|
||||
return getValue(FlagType.SHULKER_ATTACHED).get();
|
||||
}
|
||||
|
||||
public void setAttachmentPosition(BlockPosition pos)
|
||||
{
|
||||
setValue(FlagType.SHULKER_ATTACHED, Optional.of(pos));
|
||||
sendData(FlagType.SHULKER_ATTACHED);
|
||||
}
|
||||
|
||||
public int getShieldHeight()
|
||||
{
|
||||
return getValue(FlagType.SHULKER_PEEKING);
|
||||
}
|
||||
|
||||
public void setShieldHeight(int newHeight)
|
||||
{
|
||||
if (newHeight < 0)
|
||||
newHeight = 0;
|
||||
|
||||
if (newHeight > 127)
|
||||
newHeight = 127;
|
||||
|
||||
setValue(FlagType.SHULKER_PEEKING, (byte) newHeight);
|
||||
sendData(FlagType.SHULKER_PEEKING);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,28 +1,39 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import org.bukkit.entity.Skeleton.SkeletonType;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
/**
|
||||
* @author Navid
|
||||
*/
|
||||
public class SkeletonWatcher extends LivingWatcher
|
||||
{
|
||||
public SkeletonWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public void setType(SkeletonType type)
|
||||
{
|
||||
setValue(FlagType.SKELETON_TYPE, type.ordinal());
|
||||
sendData(FlagType.SKELETON_TYPE);
|
||||
}
|
||||
|
||||
public SkeletonType getType()
|
||||
{
|
||||
return SkeletonType.values()[getValue(FlagType.SKELETON_TYPE)];
|
||||
}
|
||||
}
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import org.bukkit.entity.Skeleton.SkeletonType;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
/**
|
||||
* @author Navid
|
||||
*/
|
||||
public class SkeletonWatcher extends InsentientWatcher
|
||||
{
|
||||
public SkeletonWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public void setSwingArms(boolean swingingArms)
|
||||
{
|
||||
setValue(FlagType.SKELETON_SWING_ARMS, swingingArms);
|
||||
sendData(FlagType.SKELETON_SWING_ARMS);
|
||||
}
|
||||
|
||||
public boolean isSwingArms()
|
||||
{
|
||||
return getValue(FlagType.SKELETON_SWING_ARMS);
|
||||
}
|
||||
|
||||
public void setType(SkeletonType type)
|
||||
{
|
||||
setValue(FlagType.SKELETON_TYPE, type.ordinal());
|
||||
sendData(FlagType.SKELETON_TYPE);
|
||||
}
|
||||
|
||||
public SkeletonType getType()
|
||||
{
|
||||
return SkeletonType.values()[getValue(FlagType.SKELETON_TYPE)];
|
||||
}
|
||||
}
|
||||
|
@ -1,32 +1,32 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
|
||||
public class SlimeWatcher extends LivingWatcher
|
||||
{
|
||||
|
||||
public SlimeWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
setSize(DisguiseUtilities.random.nextInt(4) + 1);
|
||||
}
|
||||
|
||||
public int getSize()
|
||||
{
|
||||
return (int) getValue(FlagType.SLIME_SIZE);
|
||||
}
|
||||
|
||||
public void setSize(int size)
|
||||
{
|
||||
if (size <= 0 || size >= 128)
|
||||
{
|
||||
size = 1;
|
||||
}
|
||||
|
||||
setValue(FlagType.SLIME_SIZE, size);
|
||||
sendData(FlagType.SLIME_SIZE);
|
||||
}
|
||||
|
||||
}
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
|
||||
public class SlimeWatcher extends InsentientWatcher
|
||||
{
|
||||
|
||||
public SlimeWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
setSize(DisguiseUtilities.random.nextInt(4) + 1);
|
||||
}
|
||||
|
||||
public int getSize()
|
||||
{
|
||||
return (int) getValue(FlagType.SLIME_SIZE);
|
||||
}
|
||||
|
||||
public void setSize(int size)
|
||||
{
|
||||
if (size <= 0 || size >= 128)
|
||||
{
|
||||
size = 1;
|
||||
}
|
||||
|
||||
setValue(FlagType.SLIME_SIZE, size);
|
||||
sendData(FlagType.SLIME_SIZE);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,23 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class SnowmanWatcher extends InsentientWatcher
|
||||
{
|
||||
public SnowmanWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public void setHat(boolean hat)
|
||||
{
|
||||
setValue(FlagType.SNOWMAN_HAT, (byte) (hat ? 1 : 0));
|
||||
sendData(FlagType.SNOWMAN_HAT);
|
||||
}
|
||||
|
||||
public boolean isHat()
|
||||
{
|
||||
return getValue(FlagType.SNOWMAN_HAT) == 1;
|
||||
}
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class SpiderWatcher extends InsentientWatcher
|
||||
{
|
||||
public SpiderWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public void setClimbing(boolean climbing)
|
||||
{
|
||||
setValue(FlagType.SPIDER_CLIMB, (byte) (climbing ? 1 : 0));
|
||||
sendData(FlagType.SPIDER_CLIMB);
|
||||
}
|
||||
|
||||
public boolean isClimbing()
|
||||
{
|
||||
return getValue(FlagType.SPIDER_CLIMB) == (byte) 1;
|
||||
}
|
||||
}
|
@ -1,40 +1,56 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
|
||||
public class SplashPotionWatcher extends FlagWatcher
|
||||
{
|
||||
private int potionId;
|
||||
|
||||
public SplashPotionWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SplashPotionWatcher clone(Disguise disguise)
|
||||
{
|
||||
SplashPotionWatcher watcher = (SplashPotionWatcher) super.clone(disguise);
|
||||
watcher.setPotionId(getPotionId());
|
||||
|
||||
return watcher;
|
||||
}
|
||||
|
||||
public int getPotionId()
|
||||
{
|
||||
return potionId;
|
||||
}
|
||||
|
||||
public void setPotionId(int newPotionId)
|
||||
{
|
||||
this.potionId = newPotionId;
|
||||
|
||||
if (getDisguise().getEntity() != null && getDisguise().getWatcher() == this)
|
||||
{
|
||||
DisguiseUtilities.refreshTrackers(getDisguise());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import com.google.common.base.Optional;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
|
||||
public class SplashPotionWatcher extends FlagWatcher
|
||||
{
|
||||
private int potionId;
|
||||
|
||||
public SplashPotionWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SplashPotionWatcher clone(Disguise disguise)
|
||||
{
|
||||
SplashPotionWatcher watcher = (SplashPotionWatcher) super.clone(disguise);
|
||||
watcher.setPotionId(getPotionId());
|
||||
|
||||
return watcher;
|
||||
}
|
||||
|
||||
public int getPotionId()
|
||||
{
|
||||
return potionId;
|
||||
}
|
||||
|
||||
public void setSplashPotion(ItemStack item)
|
||||
{
|
||||
setValue(FlagType.SPLASH_POTION_ITEM, Optional.of(item));
|
||||
sendData(FlagType.SPLASH_POTION_ITEM);
|
||||
}
|
||||
|
||||
public ItemStack getSplashPotion()
|
||||
{
|
||||
return getValue(FlagType.SPLASH_POTION_ITEM).get();
|
||||
}
|
||||
|
||||
public void setPotionId(int newPotionId)
|
||||
{
|
||||
this.potionId = newPotionId;
|
||||
|
||||
if (getDisguise().getEntity() != null && getDisguise().getWatcher() == this)
|
||||
{
|
||||
DisguiseUtilities.refreshTrackers(getDisguise());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,11 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
|
||||
public class SquidWatcher extends InsentientWatcher
|
||||
{
|
||||
public SquidWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
|
||||
public class TNTWatcher extends FlagWatcher
|
||||
{
|
||||
public TNTWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
}
|
@ -1,37 +1,37 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import org.bukkit.Color;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
|
||||
/**
|
||||
* @author Navid
|
||||
*/
|
||||
public class TippedArrowWatcher extends ArrowWatcher
|
||||
{
|
||||
|
||||
public TippedArrowWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
|
||||
int r = DisguiseUtilities.random.nextInt(256);
|
||||
int g = DisguiseUtilities.random.nextInt(256);
|
||||
int b = DisguiseUtilities.random.nextInt(256);
|
||||
|
||||
setColor(Color.fromRGB(r, g, b));
|
||||
}
|
||||
|
||||
public Color getColor()
|
||||
{
|
||||
int color = (int) getValue(FlagType.TIPPED_ARROW_COLOR);
|
||||
return Color.fromRGB(color);
|
||||
}
|
||||
|
||||
public void setColor(Color color)
|
||||
{
|
||||
setValue(FlagType.TIPPED_ARROW_COLOR, color.asRGB());
|
||||
sendData(FlagType.TIPPED_ARROW_COLOR);
|
||||
}
|
||||
}
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import org.bukkit.Color;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
|
||||
/**
|
||||
* @author Navid
|
||||
*/
|
||||
public class TippedArrowWatcher extends ArrowWatcher
|
||||
{
|
||||
|
||||
public TippedArrowWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
|
||||
int r = DisguiseUtilities.random.nextInt(256);
|
||||
int g = DisguiseUtilities.random.nextInt(256);
|
||||
int b = DisguiseUtilities.random.nextInt(256);
|
||||
|
||||
setColor(Color.fromRGB(r, g, b));
|
||||
}
|
||||
|
||||
public Color getColor()
|
||||
{
|
||||
int color = (int) getValue(FlagType.TIPPED_ARROW_COLOR);
|
||||
return Color.fromRGB(color);
|
||||
}
|
||||
|
||||
public void setColor(Color color)
|
||||
{
|
||||
setValue(FlagType.TIPPED_ARROW_COLOR, color.asRGB());
|
||||
sendData(FlagType.TIPPED_ARROW_COLOR);
|
||||
}
|
||||
}
|
||||
|
@ -1,28 +1,28 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
/**
|
||||
* @author Navid
|
||||
*/
|
||||
public class WitchWatcher extends LivingWatcher
|
||||
{
|
||||
|
||||
public WitchWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public boolean isAggressive()
|
||||
{
|
||||
return (boolean) getValue(FlagType.WITCH_AGGRESSIVE);
|
||||
}
|
||||
|
||||
public void setAggressive(boolean aggressive)
|
||||
{
|
||||
setValue(FlagType.WITCH_AGGRESSIVE, aggressive);
|
||||
sendData(FlagType.WITCH_AGGRESSIVE);
|
||||
}
|
||||
|
||||
}
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
/**
|
||||
* @author Navid
|
||||
*/
|
||||
public class WitchWatcher extends InsentientWatcher
|
||||
{
|
||||
|
||||
public WitchWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public boolean isAggressive()
|
||||
{
|
||||
return (boolean) getValue(FlagType.WITCH_AGGRESSIVE);
|
||||
}
|
||||
|
||||
public void setAggressive(boolean aggressive)
|
||||
{
|
||||
setValue(FlagType.WITCH_AGGRESSIVE, aggressive);
|
||||
sendData(FlagType.WITCH_AGGRESSIVE);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,58 +1,58 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import java.security.InvalidParameterException;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class WitherWatcher extends LivingWatcher
|
||||
{
|
||||
|
||||
public WitherWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the amount of time this Wither is invulnerable for
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public int getInvulnerability()
|
||||
{
|
||||
return (int) getValue(FlagType.WITHER_INVUL);
|
||||
}
|
||||
|
||||
public int[] getTargets()
|
||||
{
|
||||
return new int[]
|
||||
{
|
||||
getValue(FlagType.WITHER_TARGET_1), getValue(FlagType.WITHER_TARGET_2), getValue(FlagType.WITHER_TARGET_3)
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the amount of time this Wither is invulnerable for
|
||||
*/
|
||||
public void setInvulnerability(int invulnerability)
|
||||
{
|
||||
setValue(FlagType.WITHER_INVUL, invulnerability);
|
||||
sendData(FlagType.WITHER_INVUL);
|
||||
}
|
||||
|
||||
public void setTargets(int... targets)
|
||||
{
|
||||
if (targets.length != 3)
|
||||
{
|
||||
throw new InvalidParameterException(
|
||||
ChatColor.RED + "Expected 3 numbers for wither setTargets. Received " + targets.length);
|
||||
}
|
||||
setValue(FlagType.WITHER_TARGET_1, targets[0]);
|
||||
setValue(FlagType.WITHER_TARGET_2, targets[1]);
|
||||
setValue(FlagType.WITHER_TARGET_3, targets[2]);
|
||||
sendData(FlagType.WITHER_TARGET_1, FlagType.WITHER_TARGET_2, FlagType.WITHER_TARGET_3);
|
||||
}
|
||||
|
||||
}
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import java.security.InvalidParameterException;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class WitherWatcher extends InsentientWatcher
|
||||
{
|
||||
|
||||
public WitherWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the amount of time this Wither is invulnerable for
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public int getInvulnerability()
|
||||
{
|
||||
return (int) getValue(FlagType.WITHER_INVUL);
|
||||
}
|
||||
|
||||
public int[] getTargets()
|
||||
{
|
||||
return new int[]
|
||||
{
|
||||
getValue(FlagType.WITHER_TARGET_1), getValue(FlagType.WITHER_TARGET_2), getValue(FlagType.WITHER_TARGET_3)
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the amount of time this Wither is invulnerable for
|
||||
*/
|
||||
public void setInvulnerability(int invulnerability)
|
||||
{
|
||||
setValue(FlagType.WITHER_INVUL, invulnerability);
|
||||
sendData(FlagType.WITHER_INVUL);
|
||||
}
|
||||
|
||||
public void setTargets(int... targets)
|
||||
{
|
||||
if (targets.length != 3)
|
||||
{
|
||||
throw new InvalidParameterException(
|
||||
ChatColor.RED + "Expected 3 numbers for wither setTargets. Received " + targets.length);
|
||||
}
|
||||
setValue(FlagType.WITHER_TARGET_1, targets[0]);
|
||||
setValue(FlagType.WITHER_TARGET_2, targets[1]);
|
||||
setValue(FlagType.WITHER_TARGET_3, targets[2]);
|
||||
sendData(FlagType.WITHER_TARGET_1, FlagType.WITHER_TARGET_2, FlagType.WITHER_TARGET_3);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,106 +1,106 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import org.bukkit.entity.Villager.Profession;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class ZombieWatcher extends LivingWatcher
|
||||
{
|
||||
|
||||
public ZombieWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public boolean isAdult()
|
||||
{
|
||||
return !isBaby();
|
||||
}
|
||||
|
||||
public boolean isBaby()
|
||||
{
|
||||
return getValue(FlagType.ZOMBIE_BABY);
|
||||
}
|
||||
|
||||
public boolean isShaking()
|
||||
{
|
||||
return getValue(FlagType.ZOMBIE_SHAKING);
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this zombie a villager?
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public boolean isVillager()
|
||||
{
|
||||
return ((int) getValue(FlagType.ZOMBIE_PROFESSION)) != 0;
|
||||
}
|
||||
|
||||
public boolean isAggressive()
|
||||
{
|
||||
return (boolean) getValue(FlagType.ZOMBIE_AGGRESSIVE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Only returns a valid value if this zombie is a villager.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public Profession getProfession()
|
||||
{
|
||||
return Profession.values()[getValue(FlagType.ZOMBIE_PROFESSION)];
|
||||
}
|
||||
|
||||
public void setAdult()
|
||||
{
|
||||
setBaby(false);
|
||||
}
|
||||
|
||||
public void setBaby()
|
||||
{
|
||||
setBaby(true);
|
||||
}
|
||||
|
||||
public void setBaby(boolean baby)
|
||||
{
|
||||
setValue(FlagType.ZOMBIE_BABY, baby);
|
||||
sendData(FlagType.ZOMBIE_BABY);
|
||||
}
|
||||
|
||||
public void setShaking(boolean shaking)
|
||||
{
|
||||
setValue(FlagType.ZOMBIE_SHAKING, shaking);
|
||||
sendData(FlagType.ZOMBIE_SHAKING);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the profession of this zombie, in turn turning it into a Zombie Villager
|
||||
*
|
||||
* @param id
|
||||
*/
|
||||
public void setProfession(int id)
|
||||
{
|
||||
setValue(FlagType.ZOMBIE_PROFESSION, id);
|
||||
sendData(FlagType.ZOMBIE_PROFESSION);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the profession of this zombie, in turn turning it into a Zombie Villager
|
||||
*
|
||||
* @param profession
|
||||
*/
|
||||
public void setProfession(Profession profession)
|
||||
{
|
||||
setValue(FlagType.ZOMBIE_PROFESSION, profession.ordinal());
|
||||
sendData(FlagType.ZOMBIE_PROFESSION);
|
||||
}
|
||||
|
||||
public void setAggressive(boolean handsup)
|
||||
{
|
||||
setValue(FlagType.ZOMBIE_AGGRESSIVE, handsup);
|
||||
sendData(FlagType.ZOMBIE_AGGRESSIVE);
|
||||
}
|
||||
|
||||
}
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import org.bukkit.entity.Villager.Profession;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class ZombieWatcher extends InsentientWatcher
|
||||
{
|
||||
|
||||
public ZombieWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public boolean isAdult()
|
||||
{
|
||||
return !isBaby();
|
||||
}
|
||||
|
||||
public boolean isBaby()
|
||||
{
|
||||
return getValue(FlagType.ZOMBIE_BABY);
|
||||
}
|
||||
|
||||
public boolean isShaking()
|
||||
{
|
||||
return getValue(FlagType.ZOMBIE_SHAKING);
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this zombie a villager?
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public boolean isVillager()
|
||||
{
|
||||
return ((int) getValue(FlagType.ZOMBIE_PROFESSION)) != 0;
|
||||
}
|
||||
|
||||
public boolean isAggressive()
|
||||
{
|
||||
return (boolean) getValue(FlagType.ZOMBIE_AGGRESSIVE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Only returns a valid value if this zombie is a villager.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public Profession getProfession()
|
||||
{
|
||||
return Profession.values()[getValue(FlagType.ZOMBIE_PROFESSION)];
|
||||
}
|
||||
|
||||
public void setAdult()
|
||||
{
|
||||
setBaby(false);
|
||||
}
|
||||
|
||||
public void setBaby()
|
||||
{
|
||||
setBaby(true);
|
||||
}
|
||||
|
||||
public void setBaby(boolean baby)
|
||||
{
|
||||
setValue(FlagType.ZOMBIE_BABY, baby);
|
||||
sendData(FlagType.ZOMBIE_BABY);
|
||||
}
|
||||
|
||||
public void setShaking(boolean shaking)
|
||||
{
|
||||
setValue(FlagType.ZOMBIE_SHAKING, shaking);
|
||||
sendData(FlagType.ZOMBIE_SHAKING);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the profession of this zombie, in turn turning it into a Zombie Villager
|
||||
*
|
||||
* @param id
|
||||
*/
|
||||
public void setProfession(int id)
|
||||
{
|
||||
setValue(FlagType.ZOMBIE_PROFESSION, id);
|
||||
sendData(FlagType.ZOMBIE_PROFESSION);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the profession of this zombie, in turn turning it into a Zombie Villager
|
||||
*
|
||||
* @param profession
|
||||
*/
|
||||
public void setProfession(Profession profession)
|
||||
{
|
||||
setValue(FlagType.ZOMBIE_PROFESSION, profession.ordinal());
|
||||
sendData(FlagType.ZOMBIE_PROFESSION);
|
||||
}
|
||||
|
||||
public void setAggressive(boolean handsup)
|
||||
{
|
||||
setValue(FlagType.ZOMBIE_AGGRESSIVE, handsup);
|
||||
sendData(FlagType.ZOMBIE_AGGRESSIVE);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -3,7 +3,6 @@ package me.libraryaddict.disguise.utilities;
|
||||
import java.util.HashMap;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class DisguiseValues
|
||||
{
|
||||
@ -40,11 +39,6 @@ public class DisguiseValues
|
||||
return values.get(type);
|
||||
}
|
||||
|
||||
public static HashMap<FlagType, Object> getMetaValues(DisguiseType type)
|
||||
{
|
||||
return getDisguiseValues(type).getMetaValues();
|
||||
}
|
||||
|
||||
public static Class getNmsEntityClass(DisguiseType type)
|
||||
{
|
||||
return getDisguiseValues(type).getNmsEntityClass();
|
||||
@ -54,7 +48,6 @@ public class DisguiseValues
|
||||
private FakeBoundingBox babyBox;
|
||||
private float[] entitySize;
|
||||
private double maxHealth;
|
||||
private HashMap<FlagType, Object> metaValues = new HashMap<>();
|
||||
private Class nmsEntityClass;
|
||||
|
||||
public DisguiseValues(DisguiseType type, Class classType, int entitySize, double maxHealth)
|
||||
@ -84,11 +77,6 @@ public class DisguiseValues
|
||||
return maxHealth;
|
||||
}
|
||||
|
||||
public HashMap<FlagType, Object> getMetaValues()
|
||||
{
|
||||
return metaValues;
|
||||
}
|
||||
|
||||
public Class getNmsEntityClass()
|
||||
{
|
||||
return nmsEntityClass;
|
||||
@ -108,9 +96,4 @@ public class DisguiseValues
|
||||
{
|
||||
this.entitySize = size;
|
||||
}
|
||||
|
||||
public void setMetaValue(FlagType id, Object value)
|
||||
{
|
||||
metaValues.put(id, value);
|
||||
}
|
||||
}
|
||||
|
@ -16,6 +16,7 @@ import com.comphenix.protocol.events.PacketAdapter;
|
||||
import com.comphenix.protocol.events.PacketContainer;
|
||||
import com.comphenix.protocol.events.PacketEvent;
|
||||
import com.comphenix.protocol.reflect.StructureModifier;
|
||||
|
||||
import me.libraryaddict.disguise.DisguiseAPI;
|
||||
import me.libraryaddict.disguise.LibsDisguises;
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
|
Loading…
Reference in New Issue
Block a user