Current work
This commit is contained in:
parent
8e255c5ccf
commit
e751cf4582
4
pom.xml
4
pom.xml
@ -42,12 +42,12 @@
|
||||
<dependency>
|
||||
<groupId>org.spigotmc</groupId>
|
||||
<artifactId>spigot-api</artifactId>
|
||||
<version>1.9.4-R0.1-SNAPSHOT</version>
|
||||
<version>1.10-R0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.spigotmc</groupId>
|
||||
<artifactId>spigot</artifactId>
|
||||
<version>1.9.4-R0.1-SNAPSHOT</version>
|
||||
<version>1.10-R0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
@ -30,6 +30,7 @@ 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;
|
||||
@ -299,7 +300,18 @@ public class LibsDisguises extends JavaPlugin
|
||||
|
||||
for (WrappedWatchableObject watch : watcher.getWatchableObjects())
|
||||
{
|
||||
disguiseValues.setMetaValue(watch.getIndex(), watch.getValue());
|
||||
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();
|
||||
|
@ -6,6 +6,7 @@ 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;
|
||||
@ -782,134 +783,15 @@ public abstract class Disguise
|
||||
*/
|
||||
private void setupWatcher()
|
||||
{
|
||||
HashMap<Integer, Object> disguiseValues = DisguiseValues.getMetaValues(getType());
|
||||
HashMap<Integer, Object> entityValues = DisguiseValues.getMetaValues(DisguiseType.getType(getEntity().getType()));
|
||||
HashMap<FlagType, Object> disguiseValues = DisguiseValues.getMetaValues(getType());
|
||||
HashMap<FlagType, Object> entityValues = DisguiseValues.getMetaValues(DisguiseType.getType(getEntity().getType()));
|
||||
|
||||
// Start from 2 as they ALL share 0 and 1
|
||||
for (int dataNo = 0; dataNo <= 31; dataNo++)
|
||||
for (Entry<FlagType, Object> entry : entityValues.entrySet())
|
||||
{
|
||||
// STEP 1. Find out if the watcher has set data on it.
|
||||
// If the watcher already set a metadata on this
|
||||
if (getWatcher().hasValue(dataNo))
|
||||
{
|
||||
// Better check that the value is stable.
|
||||
// To check this, I'm going to check if there exists a default value
|
||||
// Then I'm going to check if the watcher value is the same as the default value.
|
||||
if (disguiseValues.containsKey(dataNo))
|
||||
{
|
||||
// Now check if they are the same class, or both null.
|
||||
if (disguiseValues.get(dataNo) == null || getWatcher().getValue(dataNo, null) == null)
|
||||
{
|
||||
if (disguiseValues.get(dataNo) == null && getWatcher().getValue(dataNo, null) == null)
|
||||
{
|
||||
// They are both null. Idk what this means really.
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else if (getWatcher().getValue(dataNo, null).getClass() == disguiseValues.get(dataNo).getClass())
|
||||
{
|
||||
// The classes are the same. The client "shouldn't" crash.
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// STEP 2. As the watcher has not set data on it, check if I need to set the default data.
|
||||
// If neither of them touch it
|
||||
if (!entityValues.containsKey(dataNo) && !disguiseValues.containsKey(dataNo))
|
||||
{
|
||||
if (disguiseValues.containsKey(entry.getKey()))
|
||||
continue;
|
||||
}
|
||||
|
||||
// If the disguise has this, but not the entity. Then better set it!
|
||||
if (!entityValues.containsKey(dataNo) && disguiseValues.containsKey(dataNo))
|
||||
{
|
||||
getWatcher().setBackupValue(dataNo, disguiseValues.get(dataNo));
|
||||
continue;
|
||||
}
|
||||
|
||||
// Else if the disguise doesn't have it. But the entity does. Better remove it!
|
||||
if (entityValues.containsKey(dataNo) && !disguiseValues.containsKey(dataNo))
|
||||
{
|
||||
getWatcher().setBackupValue(dataNo, null);
|
||||
continue;
|
||||
}
|
||||
|
||||
Object eObj = entityValues.get(dataNo);
|
||||
Object dObj = disguiseValues.get(dataNo);
|
||||
|
||||
if (eObj == null || dObj == null)
|
||||
{
|
||||
if (eObj == null && dObj == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
getWatcher().setBackupValue(dataNo, dObj);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (eObj.getClass() != dObj.getClass())
|
||||
{
|
||||
getWatcher().setBackupValue(dataNo, dObj);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Since they both share it. With the same classes. Time to check if its from something they extend.
|
||||
// Better make this clear before I compare the values because some default values are different!
|
||||
// Entity is 0 & 1 - But we aint gonna be checking that
|
||||
// EntityAgeable is 11
|
||||
// EntityInsentient is 10
|
||||
// EntityLiving is 5 & 6 & 7 & 8 & 9
|
||||
// Lets use switch
|
||||
Class baseClass = null;
|
||||
|
||||
switch (dataNo)
|
||||
{
|
||||
case 5:
|
||||
case 6:
|
||||
case 7:
|
||||
case 8:
|
||||
case 9:
|
||||
baseClass = ReflectionManager.getNmsClass("EntityLiving");
|
||||
break;
|
||||
case 10:
|
||||
baseClass = ReflectionManager.getNmsClass("EntityInsentient");
|
||||
break;
|
||||
case 11:
|
||||
baseClass = ReflectionManager.getNmsClass("EntityAgeable");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
Class nmsEntityClass = ReflectionManager.getNmsEntity(getEntity()).getClass();
|
||||
Class nmsDisguiseClass = DisguiseValues.getNmsEntityClass(getType());
|
||||
|
||||
if (nmsDisguiseClass != null)
|
||||
{
|
||||
// If they both extend the same base class. They OBVIOUSLY share the same datavalue. Right..?
|
||||
if (baseClass != null && baseClass.isAssignableFrom(nmsDisguiseClass)
|
||||
&& baseClass.isAssignableFrom(nmsEntityClass))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// So they don't extend a basic class.
|
||||
// Maybe if I check that they extend each other..
|
||||
// Seeing as I only store the finished forms of entitys. This should raise no problems and allow for more shared
|
||||
// datawatchers.
|
||||
if (nmsEntityClass.isAssignableFrom(nmsDisguiseClass) || nmsDisguiseClass.isAssignableFrom(nmsEntityClass))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// Well I can't find a reason I should leave it alone. They will probably conflict.
|
||||
// Time to set the value to the disguises value so no conflicts!
|
||||
getWatcher().setBackupValue(dataNo, disguiseValues.get(dataNo));
|
||||
getWatcher().setBackupValue(entry.getKey(), entry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -337,7 +337,7 @@ public enum DisguiseType
|
||||
return objectId;
|
||||
}
|
||||
|
||||
public Class getWatcherClass()
|
||||
public Class<? extends FlagWatcher> getWatcherClass()
|
||||
{
|
||||
return watcherClass;
|
||||
}
|
||||
|
260
src/me/libraryaddict/disguise/disguisetypes/FlagType.java
Normal file
260
src/me/libraryaddict/disguise/disguisetypes/FlagType.java
Normal file
@ -0,0 +1,260 @@
|
||||
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;
|
||||
}
|
||||
}
|
@ -28,16 +28,15 @@ import me.libraryaddict.disguise.utilities.ReflectionManager;
|
||||
|
||||
public class FlagWatcher
|
||||
{
|
||||
|
||||
private boolean addEntityAnimations = DisguiseConfig.isEntityAnimationsAdded();
|
||||
/**
|
||||
* These are the entity values I need to add else it could crash them..
|
||||
*/
|
||||
private HashMap<Integer, Object> backupEntityValues = new HashMap<>();
|
||||
private HashMap<FlagType, Object> backupEntityValues = new HashMap<>();
|
||||
private TargetedDisguise disguise;
|
||||
private HashMap<Integer, Object> entityValues = new HashMap<>();
|
||||
private boolean hasDied;
|
||||
private HashMap<FlagType, Object> entityValues = new HashMap<>();
|
||||
private EntityEquipment equipment;
|
||||
private boolean hasDied;
|
||||
private HashSet<Integer> modifiedEntityAnimations = new HashSet<>();
|
||||
private List<WrappedWatchableObject> watchableObjects;
|
||||
|
||||
@ -78,7 +77,7 @@ public class FlagWatcher
|
||||
cloned = new FlagWatcher(getDisguise());
|
||||
}
|
||||
|
||||
cloned.entityValues = (HashMap<Integer, Object>) entityValues.clone();
|
||||
cloned.entityValues = (HashMap<FlagType, Object>) entityValues.clone();
|
||||
cloned.equipment = ReflectionManager.createEntityEquipment(cloned.getDisguise().getEntity());
|
||||
cloned.modifiedEntityAnimations = (HashSet<Integer>) modifiedEntityAnimations.clone();
|
||||
cloned.addEntityAnimations = addEntityAnimations;
|
||||
@ -159,7 +158,7 @@ public class FlagWatcher
|
||||
if (sendAllCustom)
|
||||
{
|
||||
// Its sending the entire meta data. Better add the custom meta
|
||||
for (int id : entityValues.keySet())
|
||||
for (FlagType id : entityValues.keySet())
|
||||
{
|
||||
if (sentValues.contains(id))
|
||||
{
|
||||
@ -173,7 +172,8 @@ public class FlagWatcher
|
||||
continue;
|
||||
}
|
||||
|
||||
WrappedWatchableObject watch = new WrappedWatchableObject(ReflectionManager.createDataWatcherItem(id, value));
|
||||
WrappedWatchableObject watch = new WrappedWatchableObject(
|
||||
ReflectionManager.createDataWatcherItem(id.getIndex(), value));
|
||||
|
||||
newList.add(watch);
|
||||
}
|
||||
@ -235,7 +235,7 @@ public class FlagWatcher
|
||||
|
||||
public String getCustomName()
|
||||
{
|
||||
return (String) getValue(2, null);
|
||||
return (String) getValue(FlagType.ENTITY_CUSTOM_NAME);
|
||||
}
|
||||
|
||||
protected TargetedDisguise getDisguise()
|
||||
@ -245,7 +245,12 @@ public class FlagWatcher
|
||||
|
||||
private boolean getEntityFlag(int byteValue)
|
||||
{
|
||||
return ((byte) getValue(0, (byte) 0) & 1 << byteValue) != 0;
|
||||
return ((byte) getValue(FlagType.ENTITY_META) & 1 << byteValue) != 0;
|
||||
}
|
||||
|
||||
public EntityEquipment getEquipment()
|
||||
{
|
||||
return equipment;
|
||||
}
|
||||
|
||||
public ItemStack getItemInMainHand()
|
||||
@ -264,19 +269,38 @@ public class FlagWatcher
|
||||
return equipment.getItemInOffHand();
|
||||
}
|
||||
|
||||
public EntityEquipment getEquipment()
|
||||
public ItemStack getItemStack(EquipmentSlot slot)
|
||||
{
|
||||
return equipment;
|
||||
if (equipment == null)
|
||||
return null;
|
||||
|
||||
switch (slot)
|
||||
{
|
||||
case CHEST:
|
||||
return equipment.getChestplate();
|
||||
case FEET:
|
||||
return equipment.getBoots();
|
||||
case HAND:
|
||||
return equipment.getItemInMainHand();
|
||||
case HEAD:
|
||||
return equipment.getHelmet();
|
||||
case LEGS:
|
||||
return equipment.getLeggings();
|
||||
case OFF_HAND:
|
||||
return equipment.getItemInOffHand();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
protected <Y> Y getValue(int no, Y backup)
|
||||
protected <Y> Y getValue(FlagType<Y> no)
|
||||
{
|
||||
if (entityValues.containsKey(no))
|
||||
{
|
||||
return (Y) entityValues.get(no);
|
||||
}
|
||||
|
||||
return backup;
|
||||
return no.getDefault();
|
||||
}
|
||||
|
||||
public List<WrappedWatchableObject> getWatchableObjects()
|
||||
@ -299,9 +323,14 @@ public class FlagWatcher
|
||||
return entityValues.containsKey(no);
|
||||
}
|
||||
|
||||
public boolean isBurning()
|
||||
{
|
||||
return getEntityFlag(0);
|
||||
}
|
||||
|
||||
public boolean isCustomNameVisible()
|
||||
{
|
||||
return (boolean) getValue(3, false);
|
||||
return getValue(FlagType.ENTITY_CUSTOM_NAME_VISIBLE);
|
||||
}
|
||||
|
||||
public boolean isEntityAnimationsAdded()
|
||||
@ -309,9 +338,29 @@ public class FlagWatcher
|
||||
return addEntityAnimations;
|
||||
}
|
||||
|
||||
public boolean isBurning()
|
||||
public boolean isFlyingWithElytra()
|
||||
{
|
||||
return getEntityFlag(0);
|
||||
return getEntityFlag(7);
|
||||
}
|
||||
|
||||
public boolean isGlowing()
|
||||
{
|
||||
return getEntityFlag(6);
|
||||
}
|
||||
|
||||
public boolean isInvisible()
|
||||
{
|
||||
return getEntityFlag(5);
|
||||
}
|
||||
|
||||
public boolean isNoGravity()
|
||||
{
|
||||
return getValue(FlagType.ENTITY_NO_GRAVITY);
|
||||
}
|
||||
|
||||
public boolean isRightClicking()
|
||||
{
|
||||
return getEntityFlag(4);
|
||||
}
|
||||
|
||||
public boolean isSneaking()
|
||||
@ -324,26 +373,6 @@ public class FlagWatcher
|
||||
return getEntityFlag(3);
|
||||
}
|
||||
|
||||
public boolean isRightClicking()
|
||||
{
|
||||
return getEntityFlag(4);
|
||||
}
|
||||
|
||||
public boolean isInvisible()
|
||||
{
|
||||
return getEntityFlag(5);
|
||||
}
|
||||
|
||||
public boolean isGlowing()
|
||||
{
|
||||
return getEntityFlag(6);
|
||||
}
|
||||
|
||||
public boolean isFlyingWithElytra()
|
||||
{
|
||||
return getEntityFlag(7);
|
||||
}
|
||||
|
||||
public void rebuildWatchableObjects()
|
||||
{
|
||||
watchableObjects = new ArrayList<>();
|
||||
@ -368,7 +397,7 @@ public class FlagWatcher
|
||||
}
|
||||
}
|
||||
|
||||
protected void sendData(int... dataValues)
|
||||
protected void sendData(FlagType... dataValues)
|
||||
{
|
||||
if (!DisguiseAPI.isDisguiseInUse(getDisguise()) || getDisguise().getWatcher() != this)
|
||||
{
|
||||
@ -377,7 +406,7 @@ public class FlagWatcher
|
||||
|
||||
List<WrappedWatchableObject> list = new ArrayList<>();
|
||||
|
||||
for (int data : dataValues)
|
||||
for (FlagType data : dataValues)
|
||||
{
|
||||
if (!entityValues.containsKey(data) || entityValues.get(data) == null)
|
||||
{
|
||||
@ -386,7 +415,7 @@ public class FlagWatcher
|
||||
|
||||
Object value = entityValues.get(data);
|
||||
|
||||
if (isEntityAnimationsAdded() && DisguiseConfig.isMetadataPacketsEnabled() && data == 0)
|
||||
if (isEntityAnimationsAdded() && DisguiseConfig.isMetadataPacketsEnabled() && data == FlagType.ENTITY_META)
|
||||
{
|
||||
if (!PacketsManager.isStaticMetadataDisguiseType(disguise))
|
||||
{
|
||||
@ -395,7 +424,8 @@ public class FlagWatcher
|
||||
}
|
||||
}
|
||||
|
||||
WrappedWatchableObject watch = new WrappedWatchableObject(ReflectionManager.createDataWatcherItem(data, value));
|
||||
WrappedWatchableObject watch = new WrappedWatchableObject(
|
||||
ReflectionManager.createDataWatcherItem(data.getIndex(), value));
|
||||
|
||||
list.add(watch);
|
||||
}
|
||||
@ -436,7 +466,7 @@ public class FlagWatcher
|
||||
setItemStack(EquipmentSlot.FEET, itemstack[3]);
|
||||
}
|
||||
|
||||
protected void setBackupValue(int no, Object value)
|
||||
protected void setBackupValue(FlagType no, Object value)
|
||||
{
|
||||
backupEntityValues.put(no, value);
|
||||
}
|
||||
@ -445,7 +475,7 @@ public class FlagWatcher
|
||||
{
|
||||
setEntityFlag(0, setBurning);
|
||||
|
||||
sendData(0);
|
||||
sendData(FlagType.ENTITY_META);
|
||||
}
|
||||
|
||||
public void setCustomName(String name)
|
||||
@ -455,48 +485,48 @@ public class FlagWatcher
|
||||
name = name.substring(0, 64);
|
||||
}
|
||||
|
||||
setValue(2, name);
|
||||
sendData(2);
|
||||
setValue(FlagType.ENTITY_CUSTOM_NAME, name);
|
||||
sendData(FlagType.ENTITY_CUSTOM_NAME);
|
||||
}
|
||||
|
||||
public void setCustomNameVisible(boolean display)
|
||||
{
|
||||
setValue(3, display);
|
||||
sendData(3);
|
||||
setValue(FlagType.ENTITY_CUSTOM_NAME_VISIBLE, display);
|
||||
sendData(FlagType.ENTITY_CUSTOM_NAME_VISIBLE);
|
||||
}
|
||||
|
||||
private void setEntityFlag(int byteValue, boolean flag)
|
||||
{
|
||||
modifiedEntityAnimations.add(byteValue);
|
||||
|
||||
byte b0 = (byte) getValue(0, (byte) 0);
|
||||
byte b0 = (byte) getValue(FlagType.ENTITY_META);
|
||||
|
||||
if (flag)
|
||||
{
|
||||
setValue(0, (byte) (b0 | 1 << byteValue));
|
||||
setValue(FlagType.ENTITY_META, (byte) (b0 | 1 << byteValue));
|
||||
}
|
||||
else
|
||||
{
|
||||
setValue(0, (byte) (b0 & ~(1 << byteValue)));
|
||||
setValue(FlagType.ENTITY_META, (byte) (b0 & ~(1 << byteValue)));
|
||||
}
|
||||
}
|
||||
|
||||
public void setInvisible(boolean setInvis)
|
||||
{
|
||||
setEntityFlag(5, setInvis);
|
||||
sendData(0);
|
||||
}
|
||||
|
||||
public void setGlowing(boolean glowing)
|
||||
{
|
||||
setEntityFlag(6, glowing);
|
||||
sendData(0);
|
||||
}
|
||||
|
||||
public void setFlyingWithElytra(boolean flying)
|
||||
{
|
||||
setEntityFlag(7, flying);
|
||||
sendData(0);
|
||||
sendData(FlagType.ENTITY_META);
|
||||
}
|
||||
|
||||
public void setGlowing(boolean glowing)
|
||||
{
|
||||
setEntityFlag(6, glowing);
|
||||
sendData(FlagType.ENTITY_META);
|
||||
}
|
||||
|
||||
public void setInvisible(boolean setInvis)
|
||||
{
|
||||
setEntityFlag(5, setInvis);
|
||||
sendData(FlagType.ENTITY_META);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -520,6 +550,34 @@ public class FlagWatcher
|
||||
setItemStack(EquipmentSlot.OFF_HAND, itemstack);
|
||||
}
|
||||
|
||||
private void setItemStack(EntityEquipment equipment, EquipmentSlot slot, ItemStack itemStack)
|
||||
{
|
||||
if (equipment == null)
|
||||
return;
|
||||
|
||||
switch (slot)
|
||||
{
|
||||
case CHEST:
|
||||
equipment.setChestplate(itemStack);
|
||||
break;
|
||||
case FEET:
|
||||
equipment.setBoots(itemStack);
|
||||
break;
|
||||
case HAND:
|
||||
equipment.setItemInMainHand(itemStack);
|
||||
break;
|
||||
case HEAD:
|
||||
equipment.setHelmet(itemStack);
|
||||
break;
|
||||
case LEGS:
|
||||
equipment.setLeggings(itemStack);
|
||||
break;
|
||||
case OFF_HAND:
|
||||
equipment.setItemInOffHand(itemStack);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void setItemStack(EquipmentSlot slot, ItemStack itemStack)
|
||||
{
|
||||
if (equipment == null)
|
||||
@ -569,77 +627,31 @@ public class FlagWatcher
|
||||
}
|
||||
}
|
||||
|
||||
private void setItemStack(EntityEquipment equipment, EquipmentSlot slot, ItemStack itemStack)
|
||||
public void setNoGravity(boolean noGravity)
|
||||
{
|
||||
if (equipment == null)
|
||||
return;
|
||||
|
||||
switch (slot)
|
||||
{
|
||||
case CHEST:
|
||||
equipment.setChestplate(itemStack);
|
||||
break;
|
||||
case FEET:
|
||||
equipment.setBoots(itemStack);
|
||||
break;
|
||||
case HAND:
|
||||
equipment.setItemInMainHand(itemStack);
|
||||
break;
|
||||
case HEAD:
|
||||
equipment.setHelmet(itemStack);
|
||||
break;
|
||||
case LEGS:
|
||||
equipment.setLeggings(itemStack);
|
||||
break;
|
||||
case OFF_HAND:
|
||||
equipment.setItemInOffHand(itemStack);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public ItemStack getItemStack(EquipmentSlot slot)
|
||||
{
|
||||
if (equipment == null)
|
||||
return null;
|
||||
|
||||
switch (slot)
|
||||
{
|
||||
case CHEST:
|
||||
return equipment.getChestplate();
|
||||
case FEET:
|
||||
return equipment.getBoots();
|
||||
case HAND:
|
||||
return equipment.getItemInMainHand();
|
||||
case HEAD:
|
||||
return equipment.getHelmet();
|
||||
case LEGS:
|
||||
return equipment.getLeggings();
|
||||
case OFF_HAND:
|
||||
return equipment.getItemInOffHand();
|
||||
}
|
||||
|
||||
return null;
|
||||
setValue(FlagType.ENTITY_NO_GRAVITY, noGravity);
|
||||
sendData(FlagType.ENTITY_NO_GRAVITY);
|
||||
}
|
||||
|
||||
public void setRightClicking(boolean setRightClicking)
|
||||
{
|
||||
setEntityFlag(4, setRightClicking);
|
||||
sendData(0);
|
||||
sendData(FlagType.ENTITY_META);
|
||||
}
|
||||
|
||||
public void setSneaking(boolean setSneaking)
|
||||
{
|
||||
setEntityFlag(1, setSneaking);
|
||||
sendData(0);
|
||||
sendData(FlagType.ENTITY_META);
|
||||
}
|
||||
|
||||
public void setSprinting(boolean setSprinting)
|
||||
{
|
||||
setEntityFlag(3, setSprinting);
|
||||
sendData(0);
|
||||
sendData(FlagType.ENTITY_META);
|
||||
}
|
||||
|
||||
protected void setValue(int id, Object value)
|
||||
protected <Y> void setValue(FlagType<Y> id, Y value)
|
||||
{
|
||||
entityValues.put(id, value);
|
||||
|
||||
|
@ -2,7 +2,6 @@ package me.libraryaddict.disguise.disguisetypes;
|
||||
|
||||
public enum RabbitType
|
||||
{
|
||||
|
||||
BLACK(2), BROWN(0), GOLD(4), KILLER_BUNNY(99), PATCHES(3), PEPPER(5), WHITE(1);
|
||||
|
||||
public static RabbitType getType(int id)
|
||||
|
@ -1,6 +1,7 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class AgeableWatcher extends LivingWatcher
|
||||
{
|
||||
@ -17,7 +18,7 @@ public class AgeableWatcher extends LivingWatcher
|
||||
|
||||
public boolean isBaby()
|
||||
{
|
||||
return (boolean) getValue(11, false);
|
||||
return getValue(FlagType.AGEABLE_BABY);
|
||||
}
|
||||
|
||||
public void setAdult()
|
||||
@ -32,8 +33,8 @@ public class AgeableWatcher extends LivingWatcher
|
||||
|
||||
public void setBaby(boolean isBaby)
|
||||
{
|
||||
setValue(11, isBaby);
|
||||
sendData(11);
|
||||
setValue(FlagType.AGEABLE_BABY, isBaby);
|
||||
sendData(FlagType.AGEABLE_BABY);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -3,48 +3,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 class AreaEffectCloudWatcher extends FlagWatcher
|
||||
{
|
||||
|
||||
public AreaEffectCloudWatcher(Disguise disguise) {
|
||||
public AreaEffectCloudWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public float getRadius() {
|
||||
return (float) getValue(5, 0f);
|
||||
public float getRadius()
|
||||
{
|
||||
return getValue(FlagType.AREA_EFFECT_RADIUS);
|
||||
}
|
||||
|
||||
public int getColor() {
|
||||
return (int) getValue(6, Color.BLACK.getRGB());
|
||||
public int getColor()
|
||||
{
|
||||
return getValue(FlagType.AREA_EFFECT_COLOR);
|
||||
}
|
||||
|
||||
public boolean isIgnoreRadius() {
|
||||
return (boolean) getValue(7, false);
|
||||
public boolean isIgnoreRadius()
|
||||
{
|
||||
return getValue(FlagType.AREA_EFFECT_IGNORE_RADIUS);
|
||||
}
|
||||
|
||||
public int getParticleId() {
|
||||
return (int) getValue(8, 0);
|
||||
public int getParticleId()
|
||||
{
|
||||
return getValue(FlagType.AREA_EFFECT_PARTICLE);
|
||||
}
|
||||
|
||||
public void setRadius(float radius) {
|
||||
setValue(5, radius);
|
||||
public void setRadius(float radius)
|
||||
{
|
||||
setValue(FlagType.AREA_EFFECT_RADIUS, radius);
|
||||
}
|
||||
|
||||
public void setColor(int color) {
|
||||
setValue(6, color);
|
||||
public void setColor(int color)
|
||||
{
|
||||
setValue(FlagType.AREA_EFFECT_COLOR, color);
|
||||
}
|
||||
|
||||
public void setIgnoreRadius(boolean ignore) {
|
||||
setValue(7, ignore);
|
||||
public void setIgnoreRadius(boolean ignore)
|
||||
{
|
||||
setValue(FlagType.AREA_EFFECT_IGNORE_RADIUS, ignore);
|
||||
}
|
||||
|
||||
public void setParticleId(int particleId) {
|
||||
setValue(8, particleId);
|
||||
public void setParticleId(int particleId)
|
||||
{
|
||||
setValue(FlagType.AREA_EFFECT_PARTICLE, particleId);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class ArmorStandWatcher extends LivingWatcher
|
||||
{
|
||||
@ -12,7 +13,7 @@ public class ArmorStandWatcher extends LivingWatcher
|
||||
|
||||
private boolean getArmorStandFlag(int value)
|
||||
{
|
||||
return (getValue(10, 0) & value) != 0;
|
||||
return (getValue(FlagType.ARMORSTAND_META) & value) != 0;
|
||||
}
|
||||
|
||||
public boolean isNoBasePlate()
|
||||
@ -42,7 +43,8 @@ public class ArmorStandWatcher extends LivingWatcher
|
||||
|
||||
private void setArmorStandFlag(int value, boolean isTrue)
|
||||
{
|
||||
byte b1 = (byte) getValue(10, (byte) 0);
|
||||
byte b1 = (byte) getValue(FlagType.ARMORSTAND_META);
|
||||
|
||||
if (isTrue)
|
||||
{
|
||||
b1 = (byte) (b1 | value);
|
||||
@ -51,38 +53,39 @@ public class ArmorStandWatcher extends LivingWatcher
|
||||
{
|
||||
b1 = (byte) (b1 & value);
|
||||
}
|
||||
setValue(10, b1);
|
||||
sendData(10);
|
||||
|
||||
setValue(FlagType.ARMORSTAND_META, b1);
|
||||
sendData(FlagType.ARMORSTAND_META);
|
||||
}
|
||||
|
||||
public void setNoBasePlate(boolean noBasePlate)
|
||||
{
|
||||
setArmorStandFlag(8, noBasePlate);
|
||||
sendData(10);
|
||||
sendData(FlagType.ARMORSTAND_META);
|
||||
}
|
||||
|
||||
public void setNoGravity(boolean noGravity)
|
||||
{
|
||||
setArmorStandFlag(2, noGravity);
|
||||
sendData(10);
|
||||
sendData(FlagType.ARMORSTAND_META);
|
||||
}
|
||||
|
||||
public void setShowArms(boolean showArms)
|
||||
{
|
||||
setArmorStandFlag(4, showArms);
|
||||
sendData(10);
|
||||
sendData(FlagType.ARMORSTAND_META);
|
||||
}
|
||||
|
||||
public void setSmall(boolean isSmall)
|
||||
{
|
||||
setArmorStandFlag(1, isSmall);
|
||||
sendData(10);
|
||||
sendData(FlagType.ARMORSTAND_META);
|
||||
}
|
||||
|
||||
public void setMarker(boolean isMarker)
|
||||
{
|
||||
setArmorStandFlag(10, isMarker);
|
||||
sendData(10);
|
||||
sendData(FlagType.ARMORSTAND_META);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,21 +1,26 @@
|
||||
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 class ArrowWatcher extends FlagWatcher
|
||||
{
|
||||
|
||||
public ArrowWatcher(Disguise disguise) {
|
||||
public ArrowWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public boolean isCritical() {
|
||||
return (byte) getValue(5, (byte) 0) == 1;
|
||||
public boolean isCritical()
|
||||
{
|
||||
return (byte) getValue(FlagType.ARROW_CRITICAL) == 1;
|
||||
}
|
||||
|
||||
public void setCritical(boolean critical) {
|
||||
setValue(5, (byte) (critical ? 1 : 0));
|
||||
sendData(5);
|
||||
public void setCritical(boolean critical)
|
||||
{
|
||||
setValue(FlagType.ARROW_CRITICAL, (byte) (critical ? 1 : 0));
|
||||
sendData(FlagType.ARROW_CRITICAL);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,20 +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 class BatWatcher extends LivingWatcher
|
||||
{
|
||||
|
||||
public BatWatcher(Disguise disguise) {
|
||||
public BatWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
|
||||
setHanging(false);
|
||||
}
|
||||
|
||||
public boolean isHanging() {
|
||||
return ((byte)getValue(11, (byte) 1)) == 1;
|
||||
public boolean isHanging()
|
||||
{
|
||||
return ((byte) getValue(FlagType.BAT_HANGING)) == 1;
|
||||
}
|
||||
|
||||
public void setHanging(boolean hanging) {
|
||||
setValue(11, hanging ? (byte) 1 : (byte) 0);
|
||||
sendData(11);
|
||||
public void setHanging(boolean hanging)
|
||||
{
|
||||
setValue(FlagType.BAT_HANGING, hanging ? (byte) 1 : (byte) 0);
|
||||
sendData(FlagType.BAT_HANGING);
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class BlazeWatcher extends LivingWatcher
|
||||
{
|
||||
@ -11,13 +12,13 @@ public class BlazeWatcher extends LivingWatcher
|
||||
|
||||
public boolean isBlazing()
|
||||
{
|
||||
return (boolean) getValue(11, false);
|
||||
return getValue(FlagType.BLAZE_BLAZING);
|
||||
}
|
||||
|
||||
public void setBlazing(boolean isBlazing)
|
||||
{
|
||||
setValue(11, isBlazing);
|
||||
sendData(11);
|
||||
setValue(FlagType.BLAZE_BLAZING, isBlazing);
|
||||
sendData(FlagType.BLAZE_BLAZING);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
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
|
||||
@ -15,13 +16,13 @@ public class BoatWatcher extends FlagWatcher
|
||||
|
||||
public float getDamage()
|
||||
{
|
||||
return getValue(7, 40F);
|
||||
return getValue(FlagType.BOAT_DAMAGE);
|
||||
}
|
||||
|
||||
public void setDamage(float dmg)
|
||||
{
|
||||
setValue(7, dmg);
|
||||
sendData(7);
|
||||
setValue(FlagType.BOAT_DAMAGE, dmg);
|
||||
sendData(FlagType.BOAT_DAMAGE);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,29 +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 class CreeperWatcher extends LivingWatcher
|
||||
{
|
||||
|
||||
public CreeperWatcher(Disguise disguise) {
|
||||
public CreeperWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public boolean isIgnited() {
|
||||
return (boolean) getValue(13, false);
|
||||
public boolean isIgnited()
|
||||
{
|
||||
return (boolean) getValue(FlagType.CREEPER_IGNITED);
|
||||
}
|
||||
|
||||
public boolean isPowered() {
|
||||
return (boolean) getValue(12, false);
|
||||
public boolean isPowered()
|
||||
{
|
||||
return (boolean) getValue(FlagType.CREEPER_POWERED);
|
||||
}
|
||||
|
||||
public void setIgnited(boolean ignited) {
|
||||
setValue(13, ignited);
|
||||
sendData(13);
|
||||
public void setIgnited(boolean ignited)
|
||||
{
|
||||
setValue(FlagType.CREEPER_IGNITED, ignited);
|
||||
sendData(FlagType.CREEPER_IGNITED);
|
||||
}
|
||||
|
||||
public void setPowered(boolean powered) {
|
||||
setValue(12, powered);
|
||||
sendData(12);
|
||||
public void setPowered(boolean powered)
|
||||
{
|
||||
setValue(FlagType.CREEPER_POWERED, powered);
|
||||
sendData(FlagType.CREEPER_POWERED);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,23 +1,29 @@
|
||||
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 class DroppedItemWatcher extends FlagWatcher
|
||||
{
|
||||
|
||||
public DroppedItemWatcher(Disguise disguise) {
|
||||
public DroppedItemWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public ItemStack getItemStack() {
|
||||
return (ItemStack) getValue(5, new ItemStack(1));
|
||||
public ItemStack getItemStack()
|
||||
{
|
||||
return getValue(FlagType.DROPPED_ITEM);
|
||||
}
|
||||
|
||||
public void setItemStack(ItemStack item) {
|
||||
setValue(5, item);
|
||||
sendData(5);
|
||||
public void setItemStack(ItemStack item)
|
||||
{
|
||||
setValue(FlagType.DROPPED_ITEM, item);
|
||||
sendData(FlagType.DROPPED_ITEM);
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ import com.comphenix.protocol.wrappers.BlockPosition;
|
||||
import com.google.common.base.Optional;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
|
||||
/**
|
||||
@ -18,24 +19,24 @@ public class EnderCrystalWatcher extends FlagWatcher
|
||||
|
||||
public void setBeamTarget(BlockPosition position)
|
||||
{
|
||||
setValue(5, Optional.of(position));
|
||||
sendData(5);
|
||||
setValue(FlagType.ENDER_CRYSTAL_BEAM, Optional.of(position));
|
||||
sendData(FlagType.ENDER_CRYSTAL_BEAM);
|
||||
}
|
||||
|
||||
public Optional<BlockPosition> getBeamTarget()
|
||||
{
|
||||
return (Optional) getValue(5, Optional.absent());
|
||||
return getValue(FlagType.ENDER_CRYSTAL_BEAM);
|
||||
}
|
||||
|
||||
public void setShowBottom(boolean bool)
|
||||
{
|
||||
setValue(6, bool);
|
||||
sendData(6);
|
||||
setValue(FlagType.ENDER_CRYSTAL_PLATE, bool);
|
||||
sendData(FlagType.ENDER_CRYSTAL_PLATE);
|
||||
}
|
||||
|
||||
public boolean isShowBottom()
|
||||
{
|
||||
return (boolean) getValue(6, false);
|
||||
return getValue(FlagType.ENDER_CRYSTAL_PLATE);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,22 +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 class EnderDragonWatcher extends LivingWatcher
|
||||
{
|
||||
|
||||
public EnderDragonWatcher(Disguise disguise) {
|
||||
public EnderDragonWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public int getPhase() {
|
||||
return (int) getValue(11, 0);
|
||||
public int getPhase()
|
||||
{
|
||||
return getValue(FlagType.ENDERDRAGON_PHASE);
|
||||
}
|
||||
|
||||
public void setPhase(int phase) {
|
||||
setValue(11, phase);
|
||||
sendData(11);
|
||||
public void setPhase(int phase)
|
||||
{
|
||||
setValue(FlagType.ENDERDRAGON_PHASE, phase);
|
||||
sendData(FlagType.ENDERDRAGON_PHASE);
|
||||
}
|
||||
}
|
||||
|
@ -6,48 +6,63 @@ 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 class EndermanWatcher extends LivingWatcher
|
||||
{
|
||||
|
||||
public EndermanWatcher(Disguise disguise) {
|
||||
public EndermanWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getItemInMainHand() {
|
||||
Optional<Integer> value = (Optional<Integer>) getValue(11, Optional.of(1));
|
||||
if (value.isPresent()) {
|
||||
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 {
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setItemInMainHand(ItemStack itemstack) {
|
||||
public void setItemInMainHand(ItemStack itemstack)
|
||||
{
|
||||
setItemInMainHand(itemstack.getTypeId(), itemstack.getDurability());
|
||||
}
|
||||
|
||||
public void setItemInMainHand(int typeId) {
|
||||
public void setItemInMainHand(int typeId)
|
||||
{
|
||||
setItemInMainHand(typeId, 0);
|
||||
}
|
||||
|
||||
public void setItemInMainHand(int typeId, int data) {
|
||||
public void setItemInMainHand(int typeId, int data)
|
||||
{
|
||||
int combined = ReflectionManager.getCombinedId(typeId, data);
|
||||
setValue(11, Optional.of(combined));
|
||||
|
||||
setValue(FlagType.ENDERMAN_ITEM, Optional.of(combined));
|
||||
}
|
||||
|
||||
public boolean isAggressive() {
|
||||
return (boolean) getValue(12, false);
|
||||
public boolean isAggressive()
|
||||
{
|
||||
return getValue(FlagType.ENDERMAN_AGRESSIVE);
|
||||
}
|
||||
|
||||
public void setAggressive(boolean isAggressive) {
|
||||
setValue(12, isAggressive);
|
||||
sendData(12);
|
||||
public void setAggressive(boolean isAggressive)
|
||||
{
|
||||
setValue(FlagType.ENDERMAN_AGRESSIVE, isAggressive);
|
||||
sendData(FlagType.ENDERMAN_AGRESSIVE);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -8,31 +8,40 @@ import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
|
||||
public class FallingBlockWatcher extends FlagWatcher {
|
||||
|
||||
public class FallingBlockWatcher extends FlagWatcher
|
||||
{
|
||||
private ItemStack block;
|
||||
|
||||
public FallingBlockWatcher(Disguise disguise) {
|
||||
public FallingBlockWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
@Override
|
||||
public FallingBlockWatcher clone(Disguise disguise) {
|
||||
public FallingBlockWatcher clone(Disguise disguise)
|
||||
{
|
||||
FallingBlockWatcher watcher = (FallingBlockWatcher) super.clone(disguise);
|
||||
watcher.setBlock(getBlock());
|
||||
|
||||
return watcher;
|
||||
}
|
||||
|
||||
public ItemStack getBlock() {
|
||||
public ItemStack getBlock()
|
||||
{
|
||||
return block;
|
||||
}
|
||||
|
||||
public void setBlock(ItemStack block) {
|
||||
public void setBlock(ItemStack block)
|
||||
{
|
||||
this.block = block;
|
||||
if (block.getType() == null || block.getType() == Material.AIR) {
|
||||
|
||||
if (block.getType() == null || block.getType() == Material.AIR)
|
||||
{
|
||||
block.setType(Material.STONE);
|
||||
}
|
||||
if (DisguiseAPI.isDisguiseInUse(getDisguise()) && getDisguise().getWatcher() == this) {
|
||||
|
||||
if (DisguiseAPI.isDisguiseInUse(getDisguise()) && getDisguise().getWatcher() == this)
|
||||
{
|
||||
DisguiseUtilities.refreshTrackers(getDisguise());
|
||||
}
|
||||
}
|
||||
|
@ -1,20 +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 class GhastWatcher extends LivingWatcher
|
||||
{
|
||||
|
||||
public GhastWatcher(Disguise disguise) {
|
||||
public GhastWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public boolean isAggressive() {
|
||||
return (boolean) getValue(11, false);
|
||||
public boolean isAggressive()
|
||||
{
|
||||
return getValue(FlagType.GHAST_AGRESSIVE);
|
||||
}
|
||||
|
||||
public void setAggressive(boolean isAggressive) {
|
||||
setValue(11, isAggressive);
|
||||
sendData(11);
|
||||
public void setAggressive(boolean isAggressive)
|
||||
{
|
||||
setValue(FlagType.GHAST_AGRESSIVE, isAggressive);
|
||||
sendData(FlagType.GHAST_AGRESSIVE);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,72 +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 class GuardianWatcher extends LivingWatcher
|
||||
{
|
||||
|
||||
public GuardianWatcher(Disguise disguise) {
|
||||
public GuardianWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this guardian targetting someone?
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public boolean isTarget() {
|
||||
return ((int)getValue(12, 0)) != 0;
|
||||
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(12, entityId);
|
||||
sendData(12);
|
||||
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) {
|
||||
public void setTarget(String playername)
|
||||
{
|
||||
Player player = Bukkit.getPlayer(playername);
|
||||
if (player == null) return;
|
||||
setValue(12, player.getEntityId());
|
||||
sendData(12);
|
||||
|
||||
if (player == null)
|
||||
return;
|
||||
|
||||
setValue(FlagType.GUARDIAN_TARGET, player.getEntityId());
|
||||
sendData(FlagType.GUARDIAN_TARGET);
|
||||
}
|
||||
|
||||
public boolean isRetractingSpikes() {
|
||||
public boolean isRetractingSpikes()
|
||||
{
|
||||
return isGuardianFlag(2);
|
||||
}
|
||||
|
||||
public void setRetractingSpikes(boolean isRetracting) {
|
||||
public void setRetractingSpikes(boolean isRetracting)
|
||||
{
|
||||
setGuardianFlag(2, isRetracting);
|
||||
}
|
||||
|
||||
public boolean isElder() {
|
||||
public boolean isElder()
|
||||
{
|
||||
return isGuardianFlag(4);
|
||||
}
|
||||
|
||||
public void setElder(boolean isGuardian) {
|
||||
public void setElder(boolean isGuardian)
|
||||
{
|
||||
setGuardianFlag(4, isGuardian);
|
||||
}
|
||||
|
||||
protected boolean isGuardianFlag(int no) {
|
||||
return ((byte) getValue(11, (byte) 0) & no) != 0;
|
||||
protected boolean isGuardianFlag(int no)
|
||||
{
|
||||
return (getValue(FlagType.GUARDIAN_FLAG) & no) != 0;
|
||||
}
|
||||
|
||||
protected void setGuardianFlag(int no, boolean flag) {
|
||||
byte b0 = (byte) getValue(11, (byte) 0);
|
||||
if (flag) {
|
||||
setValue(11, (byte) (b0 | no));
|
||||
} else {
|
||||
setValue(11, (byte) (b0 & -(no + 1)));
|
||||
protected void setGuardianFlag(int no, boolean flag)
|
||||
{
|
||||
byte b0 = getValue(FlagType.GUARDIAN_FLAG);
|
||||
|
||||
if (flag)
|
||||
{
|
||||
setValue(FlagType.GUARDIAN_FLAG, (byte) (b0 | no));
|
||||
}
|
||||
sendData(11);
|
||||
else
|
||||
{
|
||||
setValue(FlagType.GUARDIAN_FLAG, (byte) (b0 & -(no + 1)));
|
||||
}
|
||||
|
||||
sendData(FlagType.GUARDIAN_FLAG);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ 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
|
||||
@ -19,13 +20,14 @@ 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()[(int) getValue(13, 0)];
|
||||
return Variant.values()[getValue(FlagType.HORSE_VARIANT)];
|
||||
}
|
||||
|
||||
public void setVariant(Variant variant)
|
||||
@ -39,45 +41,48 @@ public class HorseWatcher extends AgeableWatcher
|
||||
{
|
||||
variant = 0; // Crashing people is mean
|
||||
}
|
||||
setValue(13, variant);
|
||||
sendData(13);
|
||||
|
||||
setValue(FlagType.HORSE_VARIANT, variant);
|
||||
sendData(FlagType.HORSE_VARIANT);
|
||||
}
|
||||
|
||||
public Color getColor()
|
||||
{
|
||||
return Color.values()[((Integer) getValue(14, 0) & 0xFF)];
|
||||
return Color.values()[((Integer) getValue(FlagType.HORSE_COLOR) & 0xFF)];
|
||||
}
|
||||
|
||||
public ItemStack getHorseArmor()
|
||||
{
|
||||
int horseValue = getHorseArmorAsInt();
|
||||
|
||||
switch (horseValue)
|
||||
{
|
||||
case 1:
|
||||
return new ItemStack(Material.getMaterial("IRON_BARDING"));
|
||||
return new ItemStack(Material.IRON_BARDING);
|
||||
case 2:
|
||||
return new ItemStack(Material.getMaterial("GOLD_BARDING"));
|
||||
return new ItemStack(Material.GOLD_BARDING);
|
||||
case 3:
|
||||
return new ItemStack(Material.getMaterial("DIAMOND_BARDING"));
|
||||
return new ItemStack(Material.DIAMOND_BARDING);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
protected int getHorseArmorAsInt()
|
||||
{
|
||||
return (int) getValue(16, 0);
|
||||
return getValue(FlagType.HORSE_ARMOR);
|
||||
}
|
||||
|
||||
public Optional<UUID> getOwner()
|
||||
{
|
||||
return getValue(15, Optional.<UUID> absent());
|
||||
return getValue(FlagType.HORSE_OWNER);
|
||||
}
|
||||
|
||||
public Style getStyle()
|
||||
{
|
||||
return Style.values()[((int) getValue(14, 0) >>> 8)];
|
||||
return Style.values()[(getValue(FlagType.HORSE_STYLE) >>> 8)];
|
||||
}
|
||||
|
||||
public boolean hasChest()
|
||||
@ -122,7 +127,7 @@ public class HorseWatcher extends AgeableWatcher
|
||||
|
||||
private byte getHorseFlag()
|
||||
{
|
||||
return (byte) getValue(12, (byte) 0);
|
||||
return getValue(FlagType.HORSE_META);
|
||||
}
|
||||
|
||||
public void setCanBreed(boolean breed)
|
||||
@ -137,22 +142,24 @@ public class HorseWatcher extends AgeableWatcher
|
||||
|
||||
public void setColor(Color color)
|
||||
{
|
||||
setValue(14, color.ordinal() & 0xFF | getStyle().ordinal() << 8);
|
||||
sendData(14);
|
||||
setValue(FlagType.HORSE_COLOR, color.ordinal() & 0xFF | getStyle().ordinal() << 8);
|
||||
sendData(FlagType.HORSE_COLOR);
|
||||
}
|
||||
|
||||
private void setHorseFlag(int i, boolean flag)
|
||||
{
|
||||
byte j = (byte) getValue(12, (byte) 0);
|
||||
byte j = getValue(FlagType.HORSE_META);
|
||||
|
||||
if (flag)
|
||||
{
|
||||
setValue(12, (byte) (j | i));
|
||||
setValue(FlagType.HORSE_META, (byte) (j | i));
|
||||
}
|
||||
else
|
||||
{
|
||||
setValue(12, (byte) (j & ~i));
|
||||
setValue(FlagType.HORSE_META, (byte) (j & ~i));
|
||||
}
|
||||
sendData(12);
|
||||
|
||||
sendData(FlagType.HORSE_META);
|
||||
}
|
||||
|
||||
public void setGrazing(boolean grazing)
|
||||
@ -162,16 +169,18 @@ public class HorseWatcher extends AgeableWatcher
|
||||
|
||||
protected void setHorseArmor(int armor)
|
||||
{
|
||||
setValue(16, armor);
|
||||
sendData(16);
|
||||
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;
|
||||
@ -185,6 +194,7 @@ public class HorseWatcher extends AgeableWatcher
|
||||
value = 3;
|
||||
}
|
||||
}
|
||||
|
||||
setHorseArmor(value);
|
||||
}
|
||||
|
||||
@ -195,8 +205,8 @@ public class HorseWatcher extends AgeableWatcher
|
||||
|
||||
public void setOwner(UUID uuid)
|
||||
{
|
||||
setValue(15, Optional.of(uuid));
|
||||
sendData(15);
|
||||
setValue(FlagType.HORSE_OWNER, Optional.of(uuid));
|
||||
sendData(FlagType.HORSE_OWNER);
|
||||
}
|
||||
|
||||
public void setRearing(boolean rear)
|
||||
@ -211,8 +221,8 @@ public class HorseWatcher extends AgeableWatcher
|
||||
|
||||
public void setStyle(Style style)
|
||||
{
|
||||
setValue(14, getColor().ordinal() & 0xFF | style.ordinal() << 8);
|
||||
sendData(14);
|
||||
setValue(FlagType.HORSE_STYLE, getColor().ordinal() & 0xFF | style.ordinal() << 8);
|
||||
sendData(FlagType.HORSE_STYLE);
|
||||
}
|
||||
|
||||
public void setTamed(boolean tamed)
|
||||
|
@ -0,0 +1,63 @@
|
||||
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;
|
||||
}
|
||||
}
|
@ -1,40 +1,53 @@
|
||||
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 class ItemFrameWatcher extends FlagWatcher
|
||||
{
|
||||
|
||||
public ItemFrameWatcher(Disguise disguise) {
|
||||
public ItemFrameWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public ItemStack getItem() {
|
||||
if (getValue(5, null) == null) {
|
||||
return new ItemStack(0);
|
||||
public ItemStack getItem()
|
||||
{
|
||||
if (getValue(FlagType.ITEMFRAME_ITEM) == null)
|
||||
{
|
||||
return new ItemStack(Material.AIR);
|
||||
}
|
||||
return (ItemStack) getValue(5, null);
|
||||
|
||||
return (ItemStack) getValue(FlagType.ITEMFRAME_ITEM);
|
||||
}
|
||||
|
||||
public int getRotation() {
|
||||
return (int) getValue(6, 0);
|
||||
public int getRotation()
|
||||
{
|
||||
return getValue(FlagType.ITEMFRAME_ROTATION);
|
||||
}
|
||||
|
||||
public void setItem(ItemStack newItem) {
|
||||
if (newItem == null) {
|
||||
newItem = new ItemStack(0);
|
||||
public void setItem(ItemStack newItem)
|
||||
{
|
||||
if (newItem == null)
|
||||
{
|
||||
newItem = new ItemStack(Material.AIR);
|
||||
}
|
||||
|
||||
newItem = newItem.clone();
|
||||
newItem.setAmount(1);
|
||||
setValue(5, newItem);
|
||||
sendData(5);
|
||||
|
||||
setValue(FlagType.ITEMFRAME_ITEM, newItem);
|
||||
sendData(FlagType.ITEMFRAME_ITEM);
|
||||
}
|
||||
|
||||
public void setRotation(int rotation) {
|
||||
setValue(6, (byte) (rotation % 4));
|
||||
sendData(6);
|
||||
public void setRotation(int rotation)
|
||||
{
|
||||
setValue(FlagType.ITEMFRAME_ROTATION, (byte) (rotation % 4));
|
||||
sendData(FlagType.ITEMFRAME_ROTATION);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -20,13 +20,13 @@ import com.comphenix.protocol.wrappers.WrappedAttribute.Builder;
|
||||
|
||||
import me.libraryaddict.disguise.DisguiseAPI;
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
import me.libraryaddict.disguise.utilities.ReflectionManager;
|
||||
|
||||
public class LivingWatcher extends FlagWatcher
|
||||
{
|
||||
|
||||
static Map<Integer, Object> list = new HashMap<>();
|
||||
static Method getId;
|
||||
|
||||
@ -36,6 +36,7 @@ public class LivingWatcher extends FlagWatcher
|
||||
{
|
||||
getId = ReflectionManager.getNmsMethod("MobEffectList", "getId", ReflectionManager.getNmsClass("MobEffectList"));
|
||||
Object REGISTRY = ReflectionManager.getNmsField("MobEffectList", "REGISTRY").get(null);
|
||||
|
||||
for (Object next : ((Iterable) REGISTRY))
|
||||
{
|
||||
int id = (int) getId.invoke(null, next);
|
||||
@ -81,7 +82,7 @@ public class LivingWatcher extends FlagWatcher
|
||||
|
||||
public float getHealth()
|
||||
{
|
||||
return (float) getValue(6, 0F);
|
||||
return (float) getValue(FlagType.LIVING_HEALTH);
|
||||
}
|
||||
|
||||
public double getMaxHealth()
|
||||
@ -91,7 +92,7 @@ public class LivingWatcher extends FlagWatcher
|
||||
|
||||
public boolean isPotionParticlesAmbient()
|
||||
{
|
||||
return (boolean) getValue(8, false);
|
||||
return (boolean) getValue(FlagType.LIVING_POTION_AMBIENT);
|
||||
}
|
||||
|
||||
private int getPotions()
|
||||
@ -151,31 +152,31 @@ public class LivingWatcher extends FlagWatcher
|
||||
|
||||
public void setPotionParticlesAmbient(boolean particles)
|
||||
{
|
||||
setValue(8, particles);
|
||||
sendData(8);
|
||||
setValue(FlagType.LIVING_POTION_AMBIENT, particles);
|
||||
sendData(FlagType.LIVING_POTION_AMBIENT);
|
||||
}
|
||||
|
||||
private void sendPotionEffects()
|
||||
{
|
||||
setValue(7, getPotions());
|
||||
sendData(7);
|
||||
setValue(FlagType.LIVING_POTIONS, getPotions());
|
||||
sendData(FlagType.LIVING_POTIONS);
|
||||
}
|
||||
|
||||
public void setHealth(float health)
|
||||
{
|
||||
setValue(6, health);
|
||||
sendData(6);
|
||||
setValue(FlagType.LIVING_HEALTH, health);
|
||||
sendData(FlagType.LIVING_HEALTH);
|
||||
}
|
||||
|
||||
public int getArrowsSticking()
|
||||
{
|
||||
return (int) getValue(9, 0);
|
||||
return (int) getValue(FlagType.LIVING_ARROWS);
|
||||
}
|
||||
|
||||
public void setArrowsSticking(int arrowsNo)
|
||||
{
|
||||
setValue(9, arrowsNo);
|
||||
sendData(9);
|
||||
setValue(FlagType.LIVING_ARROWS, arrowsNo);
|
||||
sendData(FlagType.LIVING_ARROWS);
|
||||
}
|
||||
|
||||
public void setMaxHealth(double newHealth)
|
||||
|
@ -3,6 +3,7 @@ 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;
|
||||
|
||||
public class MinecartWatcher extends FlagWatcher
|
||||
@ -15,39 +16,42 @@ public class MinecartWatcher extends FlagWatcher
|
||||
|
||||
public ItemStack getBlockInCart()
|
||||
{
|
||||
int id = (int) getValue(8, 0) & 0xffff;
|
||||
int data = (int) getValue(8, 0) >> 16;
|
||||
int id = (int) getValue(FlagType.MINECART_BLOCK) & 0xffff;
|
||||
int data = (int) getValue(FlagType.MINECART_BLOCK) >> 16;
|
||||
|
||||
return new ItemStack(id, 1, (short) data);
|
||||
}
|
||||
|
||||
public int getBlockYOffset()
|
||||
{
|
||||
return (int) getValue(9, 0);
|
||||
return (int) getValue(FlagType.MINECART_BLOCK_Y);
|
||||
}
|
||||
|
||||
public boolean isViewBlockInCart()
|
||||
{
|
||||
return (boolean) getValue(10, false);
|
||||
return (boolean) getValue(FlagType.MINECART_BLOCK_VISIBLE);
|
||||
}
|
||||
|
||||
public void setBlockInCart(ItemStack item)
|
||||
{
|
||||
int id = item.getTypeId();
|
||||
int data = item.getDurability();
|
||||
setValue(8, id & 0xffff | data << 16);
|
||||
setValue(10, true); // Show block
|
||||
sendData(8, 10);
|
||||
|
||||
setValue(FlagType.MINECART_BLOCK, id & 0xffff | data << 16);
|
||||
setValue(FlagType.MINECART_BLOCK_VISIBLE, true); // Show block
|
||||
|
||||
sendData(FlagType.MINECART_BLOCK);
|
||||
}
|
||||
|
||||
public void setBlockOffset(int i)
|
||||
{
|
||||
setValue(9, i);
|
||||
sendData(9);
|
||||
setValue(FlagType.MINECART_BLOCK_Y, i);
|
||||
sendData(FlagType.MINECART_BLOCK_Y);
|
||||
}
|
||||
|
||||
public void setViewBlockInCart(boolean viewBlock)
|
||||
{
|
||||
setValue(10, viewBlock);
|
||||
sendData(10);
|
||||
setValue(FlagType.MINECART_BLOCK_VISIBLE, viewBlock);
|
||||
sendData(FlagType.MINECART_BLOCK_VISIBLE);
|
||||
}
|
||||
}
|
||||
|
@ -4,19 +4,24 @@ import org.bukkit.entity.Ocelot;
|
||||
import org.bukkit.entity.Ocelot.Type;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class OcelotWatcher extends TameableWatcher {
|
||||
public class OcelotWatcher extends TameableWatcher
|
||||
{
|
||||
|
||||
public OcelotWatcher(Disguise disguise) {
|
||||
public OcelotWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public Type getType() {
|
||||
return Ocelot.Type.getType((int) getValue(14, 0));
|
||||
public Type getType()
|
||||
{
|
||||
return Ocelot.Type.getType(getValue(FlagType.OCELOT_TYPE));
|
||||
}
|
||||
|
||||
public void setType(Type newType) {
|
||||
setValue(14, newType.getId());
|
||||
sendData(14);
|
||||
public void setType(Type newType)
|
||||
{
|
||||
setValue(FlagType.OCELOT_TYPE, newType.getId());
|
||||
sendData(FlagType.OCELOT_TYPE);
|
||||
}
|
||||
}
|
||||
|
@ -6,28 +6,36 @@ import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
|
||||
public class PaintingWatcher extends FlagWatcher {
|
||||
public class PaintingWatcher extends FlagWatcher
|
||||
{
|
||||
|
||||
private Art painting;
|
||||
|
||||
public PaintingWatcher(Disguise disguise) {
|
||||
public PaintingWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PaintingWatcher clone(Disguise disguise) {
|
||||
public PaintingWatcher clone(Disguise disguise)
|
||||
{
|
||||
PaintingWatcher watcher = (PaintingWatcher) super.clone(disguise);
|
||||
watcher.setArt(getArt());
|
||||
|
||||
return watcher;
|
||||
}
|
||||
|
||||
public Art getArt() {
|
||||
public Art getArt()
|
||||
{
|
||||
return painting;
|
||||
}
|
||||
|
||||
public void setArt(Art newPainting) {
|
||||
public void setArt(Art newPainting)
|
||||
{
|
||||
this.painting = newPainting;
|
||||
if (getDisguise().getEntity() != null && getDisguise().getWatcher() == this) {
|
||||
|
||||
if (getDisguise().getEntity() != null && getDisguise().getWatcher() == this)
|
||||
{
|
||||
DisguiseUtilities.refreshTrackers(getDisguise());
|
||||
}
|
||||
}
|
||||
|
@ -1,19 +1,24 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class PigWatcher extends AgeableWatcher {
|
||||
public class PigWatcher extends AgeableWatcher
|
||||
{
|
||||
|
||||
public PigWatcher(Disguise disguise) {
|
||||
public PigWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public boolean isSaddled() {
|
||||
return (boolean) getValue(12, false);
|
||||
public boolean isSaddled()
|
||||
{
|
||||
return (boolean) getValue(FlagType.PIG_SADDLED);
|
||||
}
|
||||
|
||||
public void setSaddled(boolean isSaddled) {
|
||||
setValue(12, isSaddled);
|
||||
sendData(12);
|
||||
public void setSaddled(boolean isSaddled)
|
||||
{
|
||||
setValue(FlagType.PIG_SADDLED, isSaddled);
|
||||
sendData(FlagType.PIG_SADDLED);
|
||||
}
|
||||
}
|
||||
|
@ -12,6 +12,7 @@ import com.comphenix.protocol.wrappers.WrappedGameProfile;
|
||||
import me.libraryaddict.disguise.DisguiseAPI;
|
||||
import me.libraryaddict.disguise.DisguiseConfig;
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
import me.libraryaddict.disguise.disguisetypes.PlayerDisguise;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
|
||||
@ -60,7 +61,7 @@ public class PlayerWatcher extends LivingWatcher
|
||||
|
||||
private boolean isSkinFlag(int i)
|
||||
{
|
||||
return ((byte) getValue(12, (byte) 0) & 1 << i) != 0;
|
||||
return ((byte) getValue(FlagType.PLAYER_SKIN) & 1 << i) != 0;
|
||||
}
|
||||
|
||||
public boolean isCapeEnabled()
|
||||
@ -101,43 +102,50 @@ public class PlayerWatcher extends LivingWatcher
|
||||
public void setCapeEnabled(boolean enabled)
|
||||
{
|
||||
setSkinFlags(1, enabled);
|
||||
sendData(12);
|
||||
|
||||
sendData(FlagType.PLAYER_SKIN);
|
||||
}
|
||||
|
||||
public void setJackedEnabled(boolean enabled)
|
||||
{
|
||||
setSkinFlags(2, enabled);
|
||||
sendData(12);
|
||||
|
||||
sendData(FlagType.PLAYER_SKIN);
|
||||
}
|
||||
|
||||
public void setLeftSleeveEnabled(boolean enabled)
|
||||
{
|
||||
setSkinFlags(3, enabled);
|
||||
sendData(12);
|
||||
|
||||
sendData(FlagType.PLAYER_SKIN);
|
||||
}
|
||||
|
||||
public void setRightSleeveEnabled(boolean enabled)
|
||||
{
|
||||
setSkinFlags(4, enabled);
|
||||
sendData(12);
|
||||
|
||||
sendData(FlagType.PLAYER_SKIN);
|
||||
}
|
||||
|
||||
public void setLeftPantsEnabled(boolean enabled)
|
||||
{
|
||||
setSkinFlags(5, enabled);
|
||||
sendData(12);
|
||||
|
||||
sendData(FlagType.PLAYER_SKIN);
|
||||
}
|
||||
|
||||
public void setRightPantsEnabled(boolean enabled)
|
||||
{
|
||||
setSkinFlags(6, enabled);
|
||||
sendData(12);
|
||||
|
||||
sendData(FlagType.PLAYER_SKIN);
|
||||
}
|
||||
|
||||
public void setHatEnabled(boolean enabled)
|
||||
{
|
||||
setSkinFlags(7, enabled);
|
||||
sendData(12);
|
||||
|
||||
sendData(FlagType.PLAYER_SKIN);
|
||||
}
|
||||
|
||||
public boolean isSleeping()
|
||||
@ -232,14 +240,15 @@ public class PlayerWatcher extends LivingWatcher
|
||||
|
||||
private void setSkinFlags(int i, boolean flag)
|
||||
{
|
||||
byte b0 = (byte) getValue(12, (byte) 0);
|
||||
byte b0 = (byte) getValue(FlagType.PLAYER_SKIN);
|
||||
|
||||
if (flag)
|
||||
{
|
||||
setValue(12, (byte) (b0 | 1 << i));
|
||||
setValue(FlagType.PLAYER_SKIN, (byte) (b0 | 1 << i));
|
||||
}
|
||||
else
|
||||
{
|
||||
setValue(12, (byte) (b0 & (~1 << i)));
|
||||
setValue(FlagType.PLAYER_SKIN, (byte) (b0 & (~1 << i)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,23 +1,28 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
import me.libraryaddict.disguise.disguisetypes.RabbitType;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
|
||||
public class RabbitWatcher extends AgeableWatcher {
|
||||
public class RabbitWatcher extends AgeableWatcher
|
||||
{
|
||||
|
||||
public RabbitWatcher(Disguise disguise) {
|
||||
public RabbitWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
setType(RabbitType.values()[DisguiseUtilities.random.nextInt(RabbitType.values().length)]);
|
||||
}
|
||||
|
||||
public RabbitType getType() {
|
||||
return RabbitType.getType((int) getValue(18, 0));
|
||||
public RabbitType getType()
|
||||
{
|
||||
return RabbitType.getType((int) getValue(FlagType.RABBIT_TYPE));
|
||||
}
|
||||
|
||||
public void setType(RabbitType type) {
|
||||
setValue(12, type.getTypeId());
|
||||
sendData(12);
|
||||
public void setType(RabbitType type)
|
||||
{
|
||||
setValue(FlagType.RABBIT_TYPE, type.getTypeId());
|
||||
sendData(FlagType.RABBIT_TYPE);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -4,39 +4,54 @@ import org.bukkit.DyeColor;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.AnimalColor;
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class SheepWatcher extends AgeableWatcher {
|
||||
public class SheepWatcher extends AgeableWatcher
|
||||
{
|
||||
|
||||
public SheepWatcher(Disguise disguise) {
|
||||
public SheepWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
setValue(12, (byte) 0);
|
||||
|
||||
setValue(FlagType.SHEEP_WOOL, (byte) 0);
|
||||
}
|
||||
|
||||
public AnimalColor getColor() {
|
||||
return AnimalColor.getColor(((int) getValue(12, (byte) 0) & 15));
|
||||
public AnimalColor getColor()
|
||||
{
|
||||
return AnimalColor.getColor(((int) getValue(FlagType.SHEEP_WOOL) & 15));
|
||||
}
|
||||
|
||||
public boolean isSheared() {
|
||||
return ((byte) getValue(12, (byte) 0) & 16) != 0;
|
||||
public boolean isSheared()
|
||||
{
|
||||
return ((byte) getValue(FlagType.SHEEP_WOOL) & 16) != 0;
|
||||
}
|
||||
|
||||
public void setColor(AnimalColor color) {
|
||||
public void setColor(AnimalColor color)
|
||||
{
|
||||
setColor(DyeColor.getByWoolData((byte) color.getId()));
|
||||
}
|
||||
|
||||
public void setColor(DyeColor color) {
|
||||
byte b0 = (byte) getValue(12, (byte) 0);
|
||||
setValue(12, (byte) (b0 & 240 | color.getWoolData() & 15));
|
||||
sendData(12);
|
||||
public void setColor(DyeColor color)
|
||||
{
|
||||
byte b0 = (byte) getValue(FlagType.SHEEP_WOOL);
|
||||
|
||||
setValue(FlagType.SHEEP_WOOL, (byte) (b0 & 240 | color.getWoolData() & 15));
|
||||
sendData(FlagType.SHEEP_WOOL);
|
||||
}
|
||||
|
||||
public void setSheared(boolean flag) {
|
||||
byte b0 = (byte) getValue(12, (byte) 0);
|
||||
if (flag) {
|
||||
setValue(12, (byte) (b0 | 16));
|
||||
} else {
|
||||
setValue(12, (byte) (b0 & -17));
|
||||
public void setSheared(boolean flag)
|
||||
{
|
||||
byte b0 = (byte) getValue(FlagType.SHEEP_WOOL);
|
||||
|
||||
if (flag)
|
||||
{
|
||||
setValue(FlagType.SHEEP_WOOL, (byte) (b0 | 16));
|
||||
}
|
||||
sendData(12);
|
||||
else
|
||||
{
|
||||
setValue(FlagType.SHEEP_WOOL, (byte) (b0 & -17));
|
||||
}
|
||||
|
||||
sendData(FlagType.SHEEP_WOOL);
|
||||
}
|
||||
}
|
||||
|
@ -10,34 +10,42 @@ import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
/**
|
||||
* @author Navid
|
||||
*/
|
||||
//TODO: Add the appropriate data values to this class
|
||||
public class ShulkerWatcher extends LivingWatcher {
|
||||
// TODO: Add the appropriate data values to this class
|
||||
public class ShulkerWatcher extends LivingWatcher
|
||||
{
|
||||
|
||||
public ShulkerWatcher(Disguise disguise) {
|
||||
public ShulkerWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public BlockFace getFacingDirection() {
|
||||
public BlockFace getFacingDirection()
|
||||
{
|
||||
return BlockFace.UP;
|
||||
}
|
||||
|
||||
public void setFacingDirection() {
|
||||
public void setFacingDirection()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public Optional<BlockPosition> getAttachmentPosition() {
|
||||
public Optional<BlockPosition> getAttachmentPosition()
|
||||
{
|
||||
return Optional.absent();
|
||||
}
|
||||
|
||||
public void setAttachmentPosition(BlockPosition pos) {
|
||||
public void setAttachmentPosition(BlockPosition pos)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public byte getShieldHeight() {
|
||||
public byte getShieldHeight()
|
||||
{
|
||||
return 0x00;
|
||||
}
|
||||
|
||||
public void setShieldHeight() {
|
||||
public void setShieldHeight()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
@ -3,22 +3,26 @@ 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) {
|
||||
public class SkeletonWatcher extends LivingWatcher
|
||||
{
|
||||
public SkeletonWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public void setType(SkeletonType type) {
|
||||
setValue(11, type.getId());
|
||||
sendData(11);
|
||||
public void setType(SkeletonType type)
|
||||
{
|
||||
setValue(FlagType.SKELETON_TYPE, type.ordinal());
|
||||
sendData(FlagType.SKELETON_TYPE);
|
||||
}
|
||||
|
||||
public SkeletonType getType() {
|
||||
return SkeletonType.getType((int) getValue(11, SkeletonType.NORMAL.getId()));
|
||||
public SkeletonType getType()
|
||||
{
|
||||
return SkeletonType.values()[getValue(FlagType.SKELETON_TYPE)];
|
||||
}
|
||||
}
|
||||
|
@ -1,25 +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 class SlimeWatcher extends LivingWatcher
|
||||
{
|
||||
|
||||
public SlimeWatcher(Disguise disguise) {
|
||||
public SlimeWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
setSize(DisguiseUtilities.random.nextInt(4) + 1);
|
||||
}
|
||||
|
||||
public int getSize() {
|
||||
return (int) getValue(11, 1);
|
||||
public int getSize()
|
||||
{
|
||||
return (int) getValue(FlagType.SLIME_SIZE);
|
||||
}
|
||||
|
||||
public void setSize(int size) {
|
||||
if (size <= 0 || size >= 128) {
|
||||
public void setSize(int size)
|
||||
{
|
||||
if (size <= 0 || size >= 128)
|
||||
{
|
||||
size = 1;
|
||||
}
|
||||
setValue(11, size);
|
||||
sendData(11);
|
||||
|
||||
setValue(FlagType.SLIME_SIZE, size);
|
||||
sendData(FlagType.SLIME_SIZE);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -4,28 +4,35 @@ import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
|
||||
public class SplashPotionWatcher extends FlagWatcher {
|
||||
|
||||
public class SplashPotionWatcher extends FlagWatcher
|
||||
{
|
||||
private int potionId;
|
||||
|
||||
public SplashPotionWatcher(Disguise disguise) {
|
||||
public SplashPotionWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SplashPotionWatcher clone(Disguise disguise) {
|
||||
public SplashPotionWatcher clone(Disguise disguise)
|
||||
{
|
||||
SplashPotionWatcher watcher = (SplashPotionWatcher) super.clone(disguise);
|
||||
watcher.setPotionId(getPotionId());
|
||||
|
||||
return watcher;
|
||||
}
|
||||
|
||||
public int getPotionId() {
|
||||
public int getPotionId()
|
||||
{
|
||||
return potionId;
|
||||
}
|
||||
|
||||
public void setPotionId(int newPotionId) {
|
||||
public void setPotionId(int newPotionId)
|
||||
{
|
||||
this.potionId = newPotionId;
|
||||
if (getDisguise().getEntity() != null && getDisguise().getWatcher() == this) {
|
||||
|
||||
if (getDisguise().getEntity() != null && getDisguise().getWatcher() == this)
|
||||
{
|
||||
DisguiseUtilities.refreshTrackers(getDisguise());
|
||||
}
|
||||
}
|
||||
|
@ -5,10 +5,10 @@ import java.util.UUID;
|
||||
import com.google.common.base.Optional;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class TameableWatcher extends AgeableWatcher
|
||||
{
|
||||
|
||||
public TameableWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
@ -16,7 +16,7 @@ public class TameableWatcher extends AgeableWatcher
|
||||
|
||||
public Optional<UUID> getOwner()
|
||||
{
|
||||
return getValue(13, Optional.<UUID> absent());
|
||||
return getValue(FlagType.TAMEABLE_OWNER);
|
||||
}
|
||||
|
||||
public boolean isSitting()
|
||||
@ -31,27 +31,29 @@ public class TameableWatcher extends AgeableWatcher
|
||||
|
||||
protected boolean isTameableFlag(int no)
|
||||
{
|
||||
return ((byte) getValue(12, (byte) 0) & no) != 0;
|
||||
return ((byte) getValue(FlagType.TAMEABLE_META) & no) != 0;
|
||||
}
|
||||
|
||||
protected void setTameableFlag(int no, boolean flag)
|
||||
{
|
||||
byte value = (byte) getValue(12, (byte) 0);
|
||||
byte value = (byte) getValue(FlagType.TAMEABLE_META);
|
||||
|
||||
if (flag)
|
||||
{
|
||||
setValue(12, (byte) (value | no));
|
||||
setValue(FlagType.TAMEABLE_META, (byte) (value | no));
|
||||
}
|
||||
else
|
||||
{
|
||||
setValue(12, (byte) (value & -(no + 1)));
|
||||
setValue(FlagType.TAMEABLE_META, (byte) (value & -(no + 1)));
|
||||
}
|
||||
sendData(12);
|
||||
|
||||
sendData(FlagType.TAMEABLE_META);
|
||||
}
|
||||
|
||||
public void setOwner(UUID owner)
|
||||
{
|
||||
setValue(13, Optional.of(owner));
|
||||
sendData(13);
|
||||
setValue(FlagType.TAMEABLE_OWNER, Optional.of(owner));
|
||||
sendData(FlagType.TAMEABLE_OWNER);
|
||||
}
|
||||
|
||||
public void setSitting(boolean sitting)
|
||||
|
@ -3,28 +3,35 @@ 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 class TippedArrowWatcher extends ArrowWatcher
|
||||
{
|
||||
|
||||
public TippedArrowWatcher(Disguise disguise) {
|
||||
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(5, Color.WHITE.asRGB());
|
||||
public Color getColor()
|
||||
{
|
||||
int color = (int) getValue(FlagType.TIPPED_ARROW_COLOR);
|
||||
return Color.fromRGB(color);
|
||||
}
|
||||
|
||||
public void setColor(Color color) {
|
||||
setValue(5, color.asRGB());
|
||||
sendData(5);
|
||||
public void setColor(Color color)
|
||||
{
|
||||
setValue(FlagType.TIPPED_ARROW_COLOR, color.asRGB());
|
||||
sendData(FlagType.TIPPED_ARROW_COLOR);
|
||||
}
|
||||
}
|
||||
|
@ -3,25 +3,31 @@ package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
import org.bukkit.entity.Villager.Profession;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
|
||||
public class VillagerWatcher extends AgeableWatcher {
|
||||
public class VillagerWatcher extends AgeableWatcher
|
||||
{
|
||||
|
||||
public VillagerWatcher(Disguise disguise) {
|
||||
public VillagerWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
setProfession(Profession.values()[DisguiseUtilities.random.nextInt(Profession.values().length)]);
|
||||
}
|
||||
|
||||
public Profession getProfession() {
|
||||
return Profession.getProfession((int) getValue(16, 0));
|
||||
public Profession getProfession()
|
||||
{
|
||||
return Profession.values()[getValue(FlagType.VILLAGER_PROFESSION)];
|
||||
}
|
||||
|
||||
public void setProfession(int professionId) {
|
||||
setValue(12, professionId);
|
||||
sendData(12);
|
||||
public void setProfession(int professionId)
|
||||
{
|
||||
setValue(FlagType.VILLAGER_PROFESSION, professionId);
|
||||
sendData(FlagType.VILLAGER_PROFESSION);
|
||||
}
|
||||
|
||||
public void setProfession(Profession newProfession) {
|
||||
setProfession(newProfession.getId());
|
||||
public void setProfession(Profession newProfession)
|
||||
{
|
||||
setProfession(newProfession.ordinal());
|
||||
}
|
||||
}
|
||||
|
@ -1,24 +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 class WitchWatcher extends LivingWatcher
|
||||
{
|
||||
|
||||
public WitchWatcher(Disguise disguise) {
|
||||
public WitchWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
|
||||
public boolean isAggressive() {
|
||||
return (boolean) getValue(11, false);
|
||||
public boolean isAggressive()
|
||||
{
|
||||
return (boolean) getValue(FlagType.WITCH_AGGRESSIVE);
|
||||
}
|
||||
|
||||
public void setAggressive(boolean aggressive) {
|
||||
setValue(11, aggressive);
|
||||
sendData(11);
|
||||
public void setAggressive(boolean aggressive)
|
||||
{
|
||||
setValue(FlagType.WITCH_AGGRESSIVE, aggressive);
|
||||
sendData(FlagType.WITCH_AGGRESSIVE);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,21 +1,26 @@
|
||||
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 WitherSkullWatcher extends FlagWatcher {
|
||||
public class WitherSkullWatcher extends FlagWatcher
|
||||
{
|
||||
|
||||
public WitherSkullWatcher(Disguise disguise) {
|
||||
public WitherSkullWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public boolean isBlue() {
|
||||
return (boolean) getValue(5, false);
|
||||
public boolean isBlue()
|
||||
{
|
||||
return (boolean) getValue(FlagType.WITHERSKULL_BLUE);
|
||||
}
|
||||
|
||||
public void setBlue(boolean blue) {
|
||||
setValue(5, blue);
|
||||
sendData(5);
|
||||
public void setBlue(boolean blue)
|
||||
{
|
||||
setValue(FlagType.WITHERSKULL_BLUE, blue);
|
||||
sendData(FlagType.WITHERSKULL_BLUE);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -5,42 +5,54 @@ 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 class WitherWatcher extends LivingWatcher
|
||||
{
|
||||
|
||||
public WitherWatcher(Disguise disguise) {
|
||||
public WitherWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the amount of time this Wither is invulnerable for
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public int getInvulnerability() {
|
||||
return (int) getValue(14, 0);
|
||||
public int getInvulnerability()
|
||||
{
|
||||
return (int) getValue(FlagType.WITHER_INVUL);
|
||||
}
|
||||
|
||||
public int[] getTargets() {
|
||||
return new int[]{(Integer) getValue(11, 0), (Integer) getValue(12, 0), (Integer) getValue(13, 0)};
|
||||
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(14, invulnerability);
|
||||
sendData(14);
|
||||
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);
|
||||
public void setTargets(int... targets)
|
||||
{
|
||||
if (targets.length != 3)
|
||||
{
|
||||
throw new InvalidParameterException(
|
||||
ChatColor.RED + "Expected 3 numbers for wither setTargets. Received " + targets.length);
|
||||
}
|
||||
setValue(11, targets[0]);
|
||||
setValue(12, targets[1]);
|
||||
setValue(13, targets[2]);
|
||||
sendData(11, 12, 13);
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -4,63 +4,82 @@ import org.bukkit.DyeColor;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.AnimalColor;
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class WolfWatcher extends TameableWatcher {
|
||||
public class WolfWatcher extends TameableWatcher
|
||||
{
|
||||
|
||||
public WolfWatcher(Disguise disguise) {
|
||||
public WolfWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public AnimalColor getCollarColor() {
|
||||
return AnimalColor.getColor((int) getValue(16, 14));
|
||||
public AnimalColor getCollarColor()
|
||||
{
|
||||
return AnimalColor.getColor(getValue(FlagType.WOLF_COLLAR));
|
||||
}
|
||||
|
||||
/**
|
||||
* Used for tail rotation.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public float getDamageTaken() {
|
||||
return (float) getValue(14, 0);
|
||||
public float getDamageTaken()
|
||||
{
|
||||
return (float) getValue(FlagType.WOLF_DAMAGE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Used for tail rotation.
|
||||
*
|
||||
* @param damage
|
||||
*/
|
||||
public void setDamageTaken(float damage) {
|
||||
setValue(14, damage);
|
||||
sendData(14);
|
||||
public void setDamageTaken(float damage)
|
||||
{
|
||||
setValue(FlagType.WOLF_DAMAGE, damage);
|
||||
sendData(FlagType.WOLF_DAMAGE);
|
||||
}
|
||||
|
||||
public boolean isBegging() {
|
||||
return (boolean) getValue(15, false);
|
||||
public boolean isBegging()
|
||||
{
|
||||
return (boolean) getValue(FlagType.WOLF_BEGGING);
|
||||
}
|
||||
|
||||
public void setBegging(boolean begging) {
|
||||
setValue(15, begging);
|
||||
sendData(15);
|
||||
public void setBegging(boolean begging)
|
||||
{
|
||||
setValue(FlagType.WOLF_BEGGING, begging);
|
||||
sendData(FlagType.WOLF_BEGGING);
|
||||
}
|
||||
|
||||
public boolean isAngry() {
|
||||
public boolean isAngry()
|
||||
{
|
||||
return isTameableFlag(2);
|
||||
}
|
||||
|
||||
public void setAngry(boolean angry) {
|
||||
public void setAngry(boolean angry)
|
||||
{
|
||||
setTameableFlag(2, angry);
|
||||
}
|
||||
|
||||
public void setCollarColor(AnimalColor color) {
|
||||
public void setCollarColor(AnimalColor color)
|
||||
{
|
||||
setCollarColor(DyeColor.getByWoolData((byte) color.getId()));
|
||||
}
|
||||
|
||||
public void setCollarColor(DyeColor newColor) {
|
||||
if (!isTamed()) {
|
||||
public void setCollarColor(DyeColor newColor)
|
||||
{
|
||||
if (!isTamed())
|
||||
{
|
||||
setTamed(true);
|
||||
}
|
||||
if (newColor.getWoolData() != getCollarColor().getId()) {
|
||||
setValue(16, (int) newColor.getDyeData());
|
||||
sendData(16);
|
||||
|
||||
if (newColor.getWoolData() == getCollarColor().getId())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
setValue(FlagType.WOLF_COLLAR, (int) newColor.getDyeData());
|
||||
sendData(FlagType.WOLF_COLLAR);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -3,87 +3,104 @@ 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 class ZombieWatcher extends LivingWatcher
|
||||
{
|
||||
|
||||
public ZombieWatcher(Disguise disguise) {
|
||||
public ZombieWatcher(Disguise disguise)
|
||||
{
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public boolean isAdult() {
|
||||
public boolean isAdult()
|
||||
{
|
||||
return !isBaby();
|
||||
}
|
||||
|
||||
public boolean isBaby() {
|
||||
return (boolean) getValue(11, false);
|
||||
public boolean isBaby()
|
||||
{
|
||||
return getValue(FlagType.ZOMBIE_BABY);
|
||||
}
|
||||
|
||||
public boolean isShaking() {
|
||||
return (boolean) getValue(14, false);
|
||||
public boolean isShaking()
|
||||
{
|
||||
return getValue(FlagType.ZOMBIE_SHAKING);
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this zombie a villager?
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public boolean isVillager() {
|
||||
return ((int)getValue(12, 0)) != 0;
|
||||
public boolean isVillager()
|
||||
{
|
||||
return ((int) getValue(FlagType.ZOMBIE_PROFESSION)) != 0;
|
||||
}
|
||||
|
||||
public boolean isAggressive() {
|
||||
return (boolean) getValue(14, false);
|
||||
public boolean isAggressive()
|
||||
{
|
||||
return (boolean) getValue(FlagType.ZOMBIE_AGGRESSIVE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Only returns a valid value if this zombie
|
||||
* is a villager.
|
||||
* Only returns a valid value if this zombie is a villager.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public Profession getProfession() {
|
||||
return Profession.getProfession((int) getValue(12, 0));
|
||||
public Profession getProfession()
|
||||
{
|
||||
return Profession.values()[getValue(FlagType.ZOMBIE_PROFESSION)];
|
||||
}
|
||||
|
||||
public void setAdult() {
|
||||
public void setAdult()
|
||||
{
|
||||
setBaby(false);
|
||||
}
|
||||
|
||||
public void setBaby() {
|
||||
public void setBaby()
|
||||
{
|
||||
setBaby(true);
|
||||
}
|
||||
|
||||
public void setBaby(boolean baby) {
|
||||
setValue(11, baby);
|
||||
sendData(11);
|
||||
public void setBaby(boolean baby)
|
||||
{
|
||||
setValue(FlagType.ZOMBIE_BABY, baby);
|
||||
sendData(FlagType.ZOMBIE_BABY);
|
||||
}
|
||||
|
||||
public void setShaking(boolean shaking) {
|
||||
setValue(13, (byte) (shaking ? 1 : 0));
|
||||
sendData(13);
|
||||
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
|
||||
* Sets the profession of this zombie, in turn turning it into a Zombie Villager
|
||||
*
|
||||
* @param id
|
||||
*/
|
||||
public void setProfession(int id) {
|
||||
setValue(12, id);
|
||||
sendData(12);
|
||||
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
|
||||
* Sets the profession of this zombie, in turn turning it into a Zombie Villager
|
||||
*
|
||||
* @param profession
|
||||
*/
|
||||
public void setProfession(Profession profession) {
|
||||
setValue(12, profession.getId());
|
||||
sendData(12);
|
||||
public void setProfession(Profession profession)
|
||||
{
|
||||
setValue(FlagType.ZOMBIE_PROFESSION, profession.ordinal());
|
||||
sendData(FlagType.ZOMBIE_PROFESSION);
|
||||
}
|
||||
|
||||
public void setAggressive(boolean handsup) {
|
||||
setValue(14, handsup);
|
||||
sendData(14);
|
||||
public void setAggressive(boolean handsup)
|
||||
{
|
||||
setValue(FlagType.ZOMBIE_AGGRESSIVE, handsup);
|
||||
sendData(FlagType.ZOMBIE_AGGRESSIVE);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -57,7 +57,6 @@ import me.libraryaddict.disguise.disguisetypes.watchers.ZombieWatcher;
|
||||
|
||||
public class DisguiseUtilities
|
||||
{
|
||||
|
||||
public static final Random random = new Random();
|
||||
/**
|
||||
* This is a list of names which was called by other plugins. As such, don't remove from the gameProfiles as its the duty of
|
||||
@ -359,30 +358,30 @@ public class DisguiseUtilities
|
||||
{
|
||||
Object entityTrackerEntry = ReflectionManager.getEntityTrackerEntry(disguise.getEntity());
|
||||
|
||||
if (entityTrackerEntry != null)
|
||||
{
|
||||
Set trackedPlayers = (Set) ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers")
|
||||
.get(entityTrackerEntry);
|
||||
if (entityTrackerEntry == null)
|
||||
return;
|
||||
|
||||
// If the tracker exists. Remove himself from his tracker
|
||||
trackedPlayers = (Set) new HashSet(trackedPlayers).clone(); // Copy before iterating to prevent
|
||||
// ConcurrentModificationException
|
||||
Set trackedPlayers = (Set) ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers")
|
||||
.get(entityTrackerEntry);
|
||||
|
||||
PacketContainer destroyPacket = new PacketContainer(Server.ENTITY_DESTROY);
|
||||
// If the tracker exists. Remove himself from his tracker
|
||||
trackedPlayers = (Set) new HashSet(trackedPlayers).clone(); // Copy before iterating to prevent
|
||||
// ConcurrentModificationException
|
||||
|
||||
destroyPacket.getIntegerArrays().write(0, new int[]
|
||||
{
|
||||
disguise.getEntity().getEntityId()
|
||||
});
|
||||
PacketContainer destroyPacket = new PacketContainer(Server.ENTITY_DESTROY);
|
||||
|
||||
for (Object p : trackedPlayers)
|
||||
destroyPacket.getIntegerArrays().write(0, new int[]
|
||||
{
|
||||
Player player = (Player) ReflectionManager.getBukkitEntity(p);
|
||||
disguise.getEntity().getEntityId()
|
||||
});
|
||||
|
||||
if (player == disguise.getEntity() || disguise.canSee(player))
|
||||
{
|
||||
ProtocolLibrary.getProtocolManager().sendServerPacket(player, destroyPacket);
|
||||
}
|
||||
for (Object p : trackedPlayers)
|
||||
{
|
||||
Player player = (Player) ReflectionManager.getBukkitEntity(p);
|
||||
|
||||
if (player == disguise.getEntity() || disguise.canSee(player))
|
||||
{
|
||||
ProtocolLibrary.getProtocolManager().sendServerPacket(player, destroyPacket);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -664,6 +663,7 @@ public class DisguiseUtilities
|
||||
for (Object p : trackedPlayers)
|
||||
{
|
||||
Player player = (Player) ReflectionManager.getBukkitEntity(p);
|
||||
|
||||
if (((TargetedDisguise) disguise).canSee(player))
|
||||
{
|
||||
players.add(player);
|
||||
@ -919,48 +919,48 @@ public class DisguiseUtilities
|
||||
{
|
||||
final Object entityTrackerEntry = ReflectionManager.getEntityTrackerEntry(disguise.getEntity());
|
||||
|
||||
if (entityTrackerEntry != null)
|
||||
if (entityTrackerEntry == null)
|
||||
return;
|
||||
|
||||
Set trackedPlayers = (Set) ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers")
|
||||
.get(entityTrackerEntry);
|
||||
|
||||
Method clear = ReflectionManager.getNmsMethod("EntityTrackerEntry", "clear",
|
||||
ReflectionManager.getNmsClass("EntityPlayer"));
|
||||
|
||||
final Method updatePlayer = ReflectionManager.getNmsMethod("EntityTrackerEntry", "updatePlayer",
|
||||
ReflectionManager.getNmsClass("EntityPlayer"));
|
||||
|
||||
trackedPlayers = (Set) new HashSet(trackedPlayers).clone(); // Copy before iterating to prevent
|
||||
// ConcurrentModificationException
|
||||
for (final Object p : trackedPlayers)
|
||||
{
|
||||
Set trackedPlayers = (Set) ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers")
|
||||
.get(entityTrackerEntry);
|
||||
Player pl = (Player) ReflectionManager.getBukkitEntity(p);
|
||||
|
||||
Method clear = ReflectionManager.getNmsMethod("EntityTrackerEntry", "clear",
|
||||
ReflectionManager.getNmsClass("EntityPlayer"));
|
||||
if (!player.equalsIgnoreCase((pl).getName()))
|
||||
continue;
|
||||
|
||||
final Method updatePlayer = ReflectionManager.getNmsMethod("EntityTrackerEntry", "updatePlayer",
|
||||
ReflectionManager.getNmsClass("EntityPlayer"));
|
||||
clear.invoke(entityTrackerEntry, p);
|
||||
|
||||
trackedPlayers = (Set) new HashSet(trackedPlayers).clone(); // Copy before iterating to prevent
|
||||
// ConcurrentModificationException
|
||||
for (final Object p : trackedPlayers)
|
||||
ProtocolLibrary.getProtocolManager().sendServerPacket(pl, destroyPacket);
|
||||
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(libsDisguises, new Runnable()
|
||||
{
|
||||
Player pl = (Player) ReflectionManager.getBukkitEntity(p);
|
||||
|
||||
if (player.equalsIgnoreCase((pl).getName()))
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
clear.invoke(entityTrackerEntry, p);
|
||||
|
||||
ProtocolLibrary.getProtocolManager().sendServerPacket(pl, destroyPacket);
|
||||
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(libsDisguises, new Runnable()
|
||||
try
|
||||
{
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
try
|
||||
{
|
||||
updatePlayer.invoke(entityTrackerEntry, p);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
ex.printStackTrace(System.out);
|
||||
}
|
||||
}
|
||||
}, 2);
|
||||
break;
|
||||
updatePlayer.invoke(entityTrackerEntry, p);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
ex.printStackTrace(System.out);
|
||||
}
|
||||
}
|
||||
}
|
||||
}, 2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package me.libraryaddict.disguise.utilities;
|
||||
import java.util.HashMap;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagType;
|
||||
|
||||
public class DisguiseValues
|
||||
{
|
||||
@ -39,7 +40,7 @@ public class DisguiseValues
|
||||
return values.get(type);
|
||||
}
|
||||
|
||||
public static HashMap<Integer, Object> getMetaValues(DisguiseType type)
|
||||
public static HashMap<FlagType, Object> getMetaValues(DisguiseType type)
|
||||
{
|
||||
return getDisguiseValues(type).getMetaValues();
|
||||
}
|
||||
@ -53,7 +54,7 @@ public class DisguiseValues
|
||||
private FakeBoundingBox babyBox;
|
||||
private float[] entitySize;
|
||||
private double maxHealth;
|
||||
private HashMap<Integer, Object> metaValues = new HashMap<>();
|
||||
private HashMap<FlagType, Object> metaValues = new HashMap<>();
|
||||
private Class nmsEntityClass;
|
||||
|
||||
public DisguiseValues(DisguiseType type, Class classType, int entitySize, double maxHealth)
|
||||
@ -83,7 +84,7 @@ public class DisguiseValues
|
||||
return maxHealth;
|
||||
}
|
||||
|
||||
public HashMap<Integer, Object> getMetaValues()
|
||||
public HashMap<FlagType, Object> getMetaValues()
|
||||
{
|
||||
return metaValues;
|
||||
}
|
||||
@ -108,7 +109,7 @@ public class DisguiseValues
|
||||
this.entitySize = size;
|
||||
}
|
||||
|
||||
public void setMetaValue(int id, Object value)
|
||||
public void setMetaValue(FlagType id, Object value)
|
||||
{
|
||||
metaValues.put(id, value);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user