Fix enderman disguise

This commit is contained in:
libraryaddict 2016-06-28 15:01:17 +12:00
parent 11a26a36c0
commit dedc043558
2 changed files with 29 additions and 11 deletions

View File

@ -13,6 +13,7 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import com.comphenix.protocol.wrappers.BlockPosition; import com.comphenix.protocol.wrappers.BlockPosition;
import com.comphenix.protocol.wrappers.WrappedBlockData;
import com.google.common.base.Optional; import com.google.common.base.Optional;
import me.libraryaddict.disguise.disguisetypes.watchers.AgeableWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.AgeableWatcher;
@ -128,8 +129,8 @@ public class FlagType<Y>
public static FlagType<Boolean> ENDERMAN_AGRESSIVE = new FlagType<Boolean>(EndermanWatcher.class, 1, false); public static FlagType<Boolean> ENDERMAN_AGRESSIVE = new FlagType<Boolean>(EndermanWatcher.class, 1, false);
public static FlagType<Optional<Integer>> ENDERMAN_ITEM = new FlagType<Optional<Integer>>(EndermanWatcher.class, 0, public static FlagType<Optional<WrappedBlockData>> ENDERMAN_ITEM = new FlagType<Optional<WrappedBlockData>>(
Optional.of(1)); EndermanWatcher.class, 0, Optional.<WrappedBlockData> absent());
public static FlagType<Integer> ENTITY_AIR_TICKS = new FlagType<Integer>(FlagWatcher.class, 1, 0); public static FlagType<Integer> ENTITY_AIR_TICKS = new FlagType<Integer>(FlagWatcher.class, 1, 0);

View File

@ -1,13 +1,13 @@
package me.libraryaddict.disguise.disguisetypes.watchers; package me.libraryaddict.disguise.disguisetypes.watchers;
import org.apache.commons.lang3.tuple.Pair; import org.bukkit.Material;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import com.comphenix.protocol.wrappers.WrappedBlockData;
import com.google.common.base.Optional; import com.google.common.base.Optional;
import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.Disguise;
import me.libraryaddict.disguise.disguisetypes.FlagType; import me.libraryaddict.disguise.disguisetypes.FlagType;
import me.libraryaddict.disguise.utilities.ReflectionManager;
public class EndermanWatcher extends InsentientWatcher public class EndermanWatcher extends InsentientWatcher
{ {
@ -20,13 +20,13 @@ public class EndermanWatcher extends InsentientWatcher
@Override @Override
public ItemStack getItemInMainHand() public ItemStack getItemInMainHand()
{ {
Optional<Integer> value = getValue(FlagType.ENDERMAN_ITEM); Optional<WrappedBlockData> value = getValue(FlagType.ENDERMAN_ITEM);
if (value.isPresent()) if (value.isPresent())
{ {
Pair<Integer, Integer> pair = ReflectionManager.getFromCombinedId(value.get()); WrappedBlockData pair = value.get();
int id = pair.getLeft(); Material id = pair.getType();
int data = pair.getRight(); int data = pair.getData();
return new ItemStack(id, 1, (short) data); return new ItemStack(id, 1, (short) data);
} }
@ -42,16 +42,33 @@ public class EndermanWatcher extends InsentientWatcher
setItemInMainHand(itemstack.getTypeId(), itemstack.getDurability()); setItemInMainHand(itemstack.getTypeId(), itemstack.getDurability());
} }
@Deprecated
public void setItemInMainHand(int typeId) public void setItemInMainHand(int typeId)
{ {
setItemInMainHand(typeId, 0); setItemInMainHand(typeId, 0);
} }
public void setItemInMainHand(Material type)
{
setItemInMainHand(type, 0);
}
public void setItemInMainHand(Material type, int data)
{
Optional<WrappedBlockData> optional;
if (type == null)
optional = Optional.<WrappedBlockData> absent();
else
optional = Optional.<WrappedBlockData> of(WrappedBlockData.createData(type, data));
setValue(FlagType.ENDERMAN_ITEM, optional);
}
@Deprecated
public void setItemInMainHand(int typeId, int data) public void setItemInMainHand(int typeId, int data)
{ {
int combined = ReflectionManager.getCombinedId(typeId, data); setItemInMainHand(Material.getMaterial(typeId), data);
setValue(FlagType.ENDERMAN_ITEM, Optional.of(combined));
} }
public boolean isAggressive() public boolean isAggressive()