Updated to 1.13.1 and other changes
Updated error/debug output Changed quote splitter to use regex Updated default values for metadata to better replicate a normal entity Fixed typo, removed unused calls Fixed arrows gaining particles TippedArrows will now show a random color instead of aqua AreaEffectCloud will now show a random color AreaEffectCloud's color methods now uses color not int Added org.bukkit.Color to the disguise parameters available as RGB or name Added new method ParticlesColor to LivingWatcher Fixed LivingWatcher's potion effect particles
This commit is contained in:
parent
2b94217aae
commit
cc9dfe6bab
4
pom.xml
4
pom.xml
@ -43,12 +43,12 @@
|
||||
<dependency>
|
||||
<groupId>org.spigotmc</groupId>
|
||||
<artifactId>spigot-api</artifactId>
|
||||
<version>1.13-R0.1-SNAPSHOT</version>
|
||||
<version>1.13.1-R0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.spigotmc</groupId>
|
||||
<artifactId>spigot</artifactId>
|
||||
<version>1.13-R0.1-SNAPSHOT</version>
|
||||
<version>1.13.1-R0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
@ -453,10 +453,6 @@ public class LibsDisguises extends JavaPlugin {
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (nmsEntityName != null) {
|
||||
nmsClass = ReflectionManager.getNmsClass("Entity" + nmsEntityName);
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
@ -506,6 +502,7 @@ public class LibsDisguises extends JavaPlugin {
|
||||
|
||||
WrappedDataWatcher watcher = WrappedDataWatcher.getEntityWatcher(bukkitEntity);
|
||||
ArrayList<MetaIndex> indexes = MetaIndex.getFlags(disguiseType.getWatcherClass());
|
||||
boolean loggedName = false;
|
||||
|
||||
for (WrappedWatchableObject watch : watcher.getWatchableObjects()) {
|
||||
MetaIndex flagType = MetaIndex.getFlag(watcherClass, watch.getIndex());
|
||||
@ -522,14 +519,25 @@ public class LibsDisguises extends JavaPlugin {
|
||||
Object ourValue = ReflectionManager.convertInvalidMeta(flagType.getDefault());
|
||||
Object nmsValue = ReflectionManager.convertInvalidMeta(watch.getValue());
|
||||
|
||||
if (ourValue != nmsValue &&
|
||||
((ourValue == null || nmsValue == null) || ourValue.getClass() != nmsValue.getClass())) {
|
||||
getLogger().severe("[MetaIndex mismatch for " + disguiseType + "! Index: " + watch.getIndex());
|
||||
getLogger().severe("MetaIndex: " + flagType.getDefault() + " (" +
|
||||
flagType.getDefault().getClass() + ") (" + nmsEntity.getClass() + ") & " +
|
||||
watcherClass.getSimpleName());
|
||||
if (ourValue.getClass() != nmsValue.getClass()) {
|
||||
if (!loggedName) {
|
||||
getLogger().severe(StringUtils.repeat("=", 20));
|
||||
getLogger().severe("MetaIndex mismatch! Disguise " + disguiseType + ", Entity " +
|
||||
nmsEntityName);
|
||||
loggedName = true;
|
||||
}
|
||||
|
||||
getLogger().severe(StringUtils.repeat("-", 20));
|
||||
getLogger().severe("Index: " + watch.getIndex() + " | " +
|
||||
flagType.getFlagWatcher().getSimpleName() + " | " + MetaIndex.getName(flagType));
|
||||
Object flagDefault = flagType.getDefault();
|
||||
|
||||
getLogger().severe("LibsDisguises: " + flagDefault + " (" + flagDefault.getClass() + ")");
|
||||
getLogger().severe("LibsDisguises Converted: " + ourValue + " (" + ourValue.getClass() + ")");
|
||||
getLogger().severe("Minecraft: " + watch.getRawValue() + " (" + watch.getRawValue().getClass() +
|
||||
")");
|
||||
getLogger().severe("Minecraft Converted: " + nmsValue + " (" + nmsValue.getClass() + ")");
|
||||
getLogger().severe(StringUtils.repeat("-", 20));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -33,7 +33,7 @@ public class MetaIndex<Y> {
|
||||
public static MetaIndex<Particle> AREA_EFFECT_PARTICLE = new MetaIndex<>(AreaEffectCloudWatcher.class, 3,
|
||||
Particle.SPELL_MOB);
|
||||
|
||||
public static MetaIndex<Float> AREA_EFFECT_RADIUS = new MetaIndex<>(AreaEffectCloudWatcher.class, 0, 0F);
|
||||
public static MetaIndex<Float> AREA_EFFECT_RADIUS = new MetaIndex<>(AreaEffectCloudWatcher.class, 0, 3F);
|
||||
|
||||
public static MetaIndex<Vector3F> ARMORSTAND_BODY = new MetaIndex<>(ArmorStandWatcher.class, 2,
|
||||
new Vector3F(0, 0, 0));
|
||||
@ -42,28 +42,30 @@ public class MetaIndex<Y> {
|
||||
new Vector3F(0, 0, 0));
|
||||
|
||||
public static MetaIndex<Vector3F> ARMORSTAND_LEFT_ARM = new MetaIndex<>(ArmorStandWatcher.class, 3,
|
||||
new Vector3F(0, 0, 0));
|
||||
new Vector3F(-10, 0, -10));
|
||||
|
||||
public static MetaIndex<Vector3F> ARMORSTAND_LEFT_LEG = new MetaIndex<>(ArmorStandWatcher.class, 5,
|
||||
new Vector3F(0, 0, 0));
|
||||
new Vector3F(-1, 0, -1));
|
||||
|
||||
public static MetaIndex<Byte> ARMORSTAND_META = new MetaIndex<>(ArmorStandWatcher.class, 0, (byte) 0);
|
||||
|
||||
public static MetaIndex<Vector3F> ARMORSTAND_RIGHT_ARM = new MetaIndex<>(ArmorStandWatcher.class, 4,
|
||||
new Vector3F(0, 0, 0));
|
||||
new Vector3F(-15, 0, 10));
|
||||
|
||||
public static MetaIndex<Vector3F> ARMORSTAND_RIGHT_LEG = new MetaIndex<>(ArmorStandWatcher.class, 6,
|
||||
new Vector3F(0, 0, 0));
|
||||
new Vector3F(1, 0, 1));
|
||||
|
||||
public static MetaIndex<Byte> ARROW_CRITICAL = new MetaIndex<>(ArrowWatcher.class, 0, (byte) 0);
|
||||
|
||||
public static MetaIndex<Optional<UUID>> ARROW_UUID = new MetaIndex<>(ArrowWatcher.class, 1, Optional.empty());
|
||||
|
||||
public static MetaIndex<Byte> BAT_HANGING = new MetaIndex<>(BatWatcher.class, 0, (byte) 1);
|
||||
|
||||
public static MetaIndex<Byte> BLAZE_BLAZING = new MetaIndex<>(BlazeWatcher.class, 0, (byte) 0);
|
||||
|
||||
public static MetaIndex<Float> BOAT_DAMAGE = new MetaIndex<>(BoatWatcher.class, 2, 40F);
|
||||
public static MetaIndex<Float> BOAT_DAMAGE = new MetaIndex<>(BoatWatcher.class, 2, 0F);
|
||||
|
||||
public static MetaIndex<Integer> BOAT_DIRECTION = new MetaIndex<>(BoatWatcher.class, 1, 0);
|
||||
public static MetaIndex<Integer> BOAT_DIRECTION = new MetaIndex<>(BoatWatcher.class, 1, 1);
|
||||
|
||||
public static MetaIndex<Integer> BOAT_LAST_HIT = new MetaIndex<>(BoatWatcher.class, 0, 0);
|
||||
|
||||
@ -89,21 +91,21 @@ public class MetaIndex<Y> {
|
||||
public static MetaIndex<Integer> DOLPHIN_BREATH = new MetaIndex<>(DolphinWatcher.class, 2, 2400);
|
||||
|
||||
public static MetaIndex<ItemStack> DROPPED_ITEM = new MetaIndex<>(DroppedItemWatcher.class, 0,
|
||||
new ItemStack(Material.STONE));
|
||||
new ItemStack(Material.AIR));
|
||||
|
||||
public static MetaIndex<Optional<BlockPosition>> ENDER_CRYSTAL_BEAM = new MetaIndex<>(EnderCrystalWatcher.class, 0,
|
||||
Optional.empty());
|
||||
|
||||
public static MetaIndex<Boolean> ENDER_CRYSTAL_PLATE = new MetaIndex<>(EnderCrystalWatcher.class, 1, false);
|
||||
public static MetaIndex<Boolean> ENDER_CRYSTAL_PLATE = new MetaIndex<>(EnderCrystalWatcher.class, 1, true);
|
||||
|
||||
public static MetaIndex<Integer> ENDERD_RAGON_PHASE = new MetaIndex<>(EnderDragonWatcher.class, 0, 0);
|
||||
public static MetaIndex<Integer> ENDER_DRAGON_PHASE = new MetaIndex<>(EnderDragonWatcher.class, 0, 10);
|
||||
|
||||
public static MetaIndex<Boolean> ENDERMAN_AGRESSIVE = new MetaIndex<>(EndermanWatcher.class, 1, false);
|
||||
|
||||
public static MetaIndex<Optional<WrappedBlockData>> ENDERMAN_ITEM = new MetaIndex<>(EndermanWatcher.class, 0,
|
||||
Optional.empty());
|
||||
|
||||
public static MetaIndex<Integer> ENTITY_AIR_TICKS = new MetaIndex<>(FlagWatcher.class, 1, 0);
|
||||
public static MetaIndex<Integer> ENTITY_AIR_TICKS = new MetaIndex<>(FlagWatcher.class, 1, 300);
|
||||
|
||||
public static MetaIndex<Optional<WrappedChatComponent>> ENTITY_CUSTOM_NAME = new MetaIndex<>(FlagWatcher.class, 2,
|
||||
Optional.empty());
|
||||
@ -120,7 +122,7 @@ public class MetaIndex<Y> {
|
||||
BlockPosition.ORIGIN);
|
||||
|
||||
public static MetaIndex<ItemStack> FIREWORK_ITEM = new MetaIndex<>(FireworkWatcher.class, 0,
|
||||
new ItemStack(Material.AIR));
|
||||
new ItemStack(Material.FIREWORK_ROCKET));
|
||||
|
||||
public static MetaIndex<Boolean> FISH_FROM_BUCKET = new MetaIndex<>(FishWatcher.class, 0, false);
|
||||
|
||||
@ -169,9 +171,9 @@ public class MetaIndex<Y> {
|
||||
|
||||
public static MetaIndex<Integer> LIVING_POTIONS = new MetaIndex<>(LivingWatcher.class, 2, 0);
|
||||
|
||||
public static MetaIndex<Integer> LLAMA_CARPET = new MetaIndex<>(LlamaWatcher.class, 1, 0);
|
||||
public static MetaIndex<Integer> LLAMA_CARPET = new MetaIndex<>(LlamaWatcher.class, 1, -1);
|
||||
|
||||
public static MetaIndex<Integer> LLAMA_COLOR = new MetaIndex<>(LlamaWatcher.class, 2, -1);
|
||||
public static MetaIndex<Integer> LLAMA_COLOR = new MetaIndex<>(LlamaWatcher.class, 2, 0);
|
||||
|
||||
public static MetaIndex<Integer> LLAMA_STRENGTH = new MetaIndex<>(LlamaWatcher.class, 0, 0);
|
||||
|
||||
@ -179,7 +181,7 @@ public class MetaIndex<Y> {
|
||||
|
||||
public static MetaIndex<Boolean> MINECART_BLOCK_VISIBLE = new MetaIndex<>(MinecartWatcher.class, 5, false);
|
||||
|
||||
public static MetaIndex<Integer> MINECART_BLOCK_Y = new MetaIndex<>(MinecartWatcher.class, 4, 0);
|
||||
public static MetaIndex<Integer> MINECART_BLOCK_Y = new MetaIndex<>(MinecartWatcher.class, 4, 6);
|
||||
|
||||
public static MetaIndex<Integer> MINECART_SHAKING_DIRECTION = new MetaIndex<>(MinecartWatcher.class, 1, 1);
|
||||
|
||||
@ -229,7 +231,7 @@ public class MetaIndex<Y> {
|
||||
public static MetaIndex<Optional<BlockPosition>> SHULKER_ATTACHED = new MetaIndex<>(ShulkerWatcher.class, 1,
|
||||
Optional.empty());
|
||||
|
||||
public static MetaIndex<Byte> SHULKER_COLOR = new MetaIndex<>(ShulkerWatcher.class, 3, (byte) 10);
|
||||
public static MetaIndex<Byte> SHULKER_COLOR = new MetaIndex<>(ShulkerWatcher.class, 3, (byte) 16);
|
||||
|
||||
public static MetaIndex<Direction> SHULKER_FACING = new MetaIndex<>(ShulkerWatcher.class, 0, Direction.DOWN);
|
||||
|
||||
@ -237,21 +239,21 @@ public class MetaIndex<Y> {
|
||||
|
||||
public static MetaIndex<Boolean> SKELETON_SWING_ARMS = new MetaIndex<>(SkeletonWatcher.class, 0, false);
|
||||
|
||||
public static MetaIndex<Integer> SLIME_SIZE = new MetaIndex<>(SlimeWatcher.class, 0, 0);
|
||||
public static MetaIndex<Integer> SLIME_SIZE = new MetaIndex<>(SlimeWatcher.class, 0, 1);
|
||||
|
||||
public static MetaIndex<Byte> SNOWMAN_DERP = new MetaIndex<>(SnowmanWatcher.class, 0, (byte) 16);
|
||||
|
||||
public static MetaIndex<Byte> SPIDER_CLIMB = new MetaIndex<>(SpiderWatcher.class, 0, (byte) 0);
|
||||
|
||||
public static MetaIndex<ItemStack> SPLASH_POTION_ITEM;
|
||||
public static MetaIndex<ItemStack> SPLASH_POTION_ITEM = new MetaIndex<>(SplashPotionWatcher.class, 0,
|
||||
new ItemStack(Material.SPLASH_POTION));
|
||||
|
||||
public static MetaIndex<Byte> TAMEABLE_META = new MetaIndex<>(TameableWatcher.class, 0, (byte) 0);
|
||||
|
||||
public static MetaIndex<Optional<UUID>> TAMEABLE_OWNER = new MetaIndex<>(TameableWatcher.class, 1,
|
||||
Optional.empty());
|
||||
|
||||
public static MetaIndex<Integer> TIPPED_ARROW_COLOR = new MetaIndex<>(TippedArrowWatcher.class, 0,
|
||||
Color.WHITE.asRGB());
|
||||
public static MetaIndex<Integer> TIPPED_ARROW_COLOR = new MetaIndex<>(TippedArrowWatcher.class, 0, -1);
|
||||
|
||||
public static MetaIndex<Integer> TNT_FUSE_TICKS = new MetaIndex<>(TNTWatcher.class, 0, Integer.MAX_VALUE);
|
||||
|
||||
@ -293,7 +295,7 @@ public class MetaIndex<Y> {
|
||||
|
||||
public static MetaIndex<Integer> WOLF_COLLAR = new MetaIndex<>(WolfWatcher.class, 2, 14);
|
||||
|
||||
public static MetaIndex<Float> WOLF_DAMAGE = new MetaIndex<>(WolfWatcher.class, 0, 0F);
|
||||
public static MetaIndex<Float> WOLF_DAMAGE = new MetaIndex<>(WolfWatcher.class, 0, 1F);
|
||||
|
||||
public static MetaIndex<Boolean> ZOMBIE_AGGRESSIVE = new MetaIndex<>(ZombieWatcher.class, 2, false);
|
||||
|
||||
@ -308,14 +310,6 @@ public class MetaIndex<Y> {
|
||||
public static MetaIndex<Boolean> ZOMBIE_VILLAGER_SHAKING = new MetaIndex<>(ZombieVillagerWatcher.class, 0, false);
|
||||
|
||||
static {
|
||||
try {
|
||||
SPLASH_POTION_ITEM = new MetaIndex<>(SplashPotionWatcher.class, 0,
|
||||
new ItemStack(Material.valueOf("SPLASH_POTION")));
|
||||
}
|
||||
catch (Exception ex) {
|
||||
SPLASH_POTION_ITEM = new MetaIndex<>(SplashPotionWatcher.class, 0, new ItemStack(Material.POTION));
|
||||
}
|
||||
|
||||
setValues();
|
||||
orderMetaIndexes();
|
||||
}
|
||||
@ -486,6 +480,24 @@ public class MetaIndex<Y> {
|
||||
return _values;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static String getName(MetaIndex metaIndex) {
|
||||
try {
|
||||
for (Field field : MetaIndex.class.getFields()) {
|
||||
if (field.get(null) != metaIndex) {
|
||||
continue;
|
||||
}
|
||||
|
||||
return field.getName();
|
||||
}
|
||||
}
|
||||
catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void addMetaIndexes(MetaIndex... metaIndexes) {
|
||||
_values = Arrays.copyOf(values(), values().length + metaIndexes.length);
|
||||
|
||||
|
@ -3,6 +3,8 @@ package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import org.apache.commons.lang.math.RandomUtils;
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.Particle;
|
||||
|
||||
/**
|
||||
@ -13,21 +15,13 @@ public class AreaEffectCloudWatcher extends FlagWatcher {
|
||||
public AreaEffectCloudWatcher(Disguise disguise) {
|
||||
super(disguise);
|
||||
|
||||
setRadius(1);
|
||||
setColor(Color.fromRGB(RandomUtils.nextInt(256), RandomUtils.nextInt(256), RandomUtils.nextInt(256)));
|
||||
}
|
||||
|
||||
public float getRadius() {
|
||||
return getData(MetaIndex.AREA_EFFECT_RADIUS);
|
||||
}
|
||||
|
||||
public int getColor() {
|
||||
return getData(MetaIndex.AREA_EFFECT_CLOUD_COLOR);
|
||||
}
|
||||
|
||||
public boolean isIgnoreRadius() {
|
||||
return getData(MetaIndex.AREA_EFFECT_IGNORE_RADIUS);
|
||||
}
|
||||
|
||||
public void setRadius(float radius) {
|
||||
if (radius > 30)
|
||||
radius = 30;
|
||||
@ -36,11 +30,20 @@ public class AreaEffectCloudWatcher extends FlagWatcher {
|
||||
sendData(MetaIndex.AREA_EFFECT_RADIUS);
|
||||
}
|
||||
|
||||
public void setColor(int color) {
|
||||
setData(MetaIndex.AREA_EFFECT_CLOUD_COLOR, color);
|
||||
public Color getColor() {
|
||||
int color = getData(MetaIndex.AREA_EFFECT_CLOUD_COLOR);
|
||||
return Color.fromRGB(color);
|
||||
}
|
||||
|
||||
public void setColor(Color color) {
|
||||
setData(MetaIndex.AREA_EFFECT_CLOUD_COLOR, color.asRGB());
|
||||
sendData(MetaIndex.AREA_EFFECT_CLOUD_COLOR);
|
||||
}
|
||||
|
||||
public boolean isIgnoreRadius() {
|
||||
return getData(MetaIndex.AREA_EFFECT_IGNORE_RADIUS);
|
||||
}
|
||||
|
||||
public void setIgnoreRadius(boolean ignore) {
|
||||
setData(MetaIndex.AREA_EFFECT_IGNORE_RADIUS, ignore);
|
||||
sendData(MetaIndex.AREA_EFFECT_IGNORE_RADIUS);
|
||||
|
@ -10,7 +10,7 @@ public class ArrowWatcher extends FlagWatcher {
|
||||
}
|
||||
|
||||
public boolean isCritical() {
|
||||
return (byte) getData(MetaIndex.ARROW_CRITICAL) == 1;
|
||||
return getData(MetaIndex.ARROW_CRITICAL) == 1;
|
||||
}
|
||||
|
||||
public void setCritical(boolean critical) {
|
||||
|
@ -16,12 +16,12 @@ public class EnderDragonWatcher extends InsentientWatcher
|
||||
|
||||
public int getPhase()
|
||||
{
|
||||
return getData(MetaIndex.ENDERD_RAGON_PHASE);
|
||||
return getData(MetaIndex.ENDER_DRAGON_PHASE);
|
||||
}
|
||||
|
||||
public void setPhase(int phase)
|
||||
{
|
||||
setData(MetaIndex.ENDERD_RAGON_PHASE, phase);
|
||||
sendData(MetaIndex.ENDERD_RAGON_PHASE);
|
||||
setData(MetaIndex.ENDER_DRAGON_PHASE, phase);
|
||||
sendData(MetaIndex.ENDER_DRAGON_PHASE);
|
||||
}
|
||||
}
|
||||
|
@ -1,71 +1,38 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
|
||||
import com.comphenix.protocol.PacketType.Play.Server;
|
||||
import com.comphenix.protocol.ProtocolLibrary;
|
||||
import com.comphenix.protocol.events.PacketContainer;
|
||||
import com.comphenix.protocol.wrappers.WrappedAttribute;
|
||||
import com.comphenix.protocol.wrappers.WrappedAttribute.Builder;
|
||||
|
||||
import me.libraryaddict.disguise.DisguiseAPI;
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
import me.libraryaddict.disguise.utilities.ReflectionManager;
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
||||
public class LivingWatcher extends FlagWatcher {
|
||||
static Map<Integer, Object> list = new HashMap<>();
|
||||
static Method getId;
|
||||
|
||||
static {
|
||||
try {
|
||||
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);
|
||||
list.put(id, next);
|
||||
}
|
||||
}
|
||||
catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private double maxHealth;
|
||||
private boolean maxHealthSet;
|
||||
private HashSet<Integer> potionEffects = new HashSet<>();
|
||||
private HashSet<String> potionEffects = new HashSet<>();
|
||||
|
||||
public LivingWatcher(Disguise disguise) {
|
||||
super(disguise);
|
||||
}
|
||||
|
||||
public void addPotionEffect(PotionEffectType potionEffect) {
|
||||
if (!hasPotionEffect(potionEffect)) {
|
||||
removePotionEffect(potionEffect);
|
||||
potionEffects.add(potionEffect.getId());
|
||||
|
||||
sendPotionEffects();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public LivingWatcher clone(Disguise disguise) {
|
||||
LivingWatcher clone = (LivingWatcher) super.clone(disguise);
|
||||
clone.potionEffects = (HashSet<Integer>) potionEffects.clone();
|
||||
clone.potionEffects = (HashSet<String>) potionEffects.clone();
|
||||
clone.maxHealth = maxHealth;
|
||||
clone.maxHealthSet = maxHealthSet;
|
||||
|
||||
@ -73,7 +40,7 @@ public class LivingWatcher extends FlagWatcher {
|
||||
}
|
||||
|
||||
public float getHealth() {
|
||||
return (float) getData(MetaIndex.LIVING_HEALTH);
|
||||
return getData(MetaIndex.LIVING_HEALTH);
|
||||
}
|
||||
|
||||
public double getMaxHealth() {
|
||||
@ -81,53 +48,75 @@ public class LivingWatcher extends FlagWatcher {
|
||||
}
|
||||
|
||||
public boolean isPotionParticlesAmbient() {
|
||||
return (boolean) getData(MetaIndex.LIVING_POTION_AMBIENT);
|
||||
return getData(MetaIndex.LIVING_POTION_AMBIENT);
|
||||
}
|
||||
|
||||
public Color getParticlesColor() {
|
||||
int color = getData(MetaIndex.LIVING_POTIONS);
|
||||
return Color.fromRGB(color);
|
||||
}
|
||||
|
||||
public void setParticlesColor(Color color) {
|
||||
potionEffects.clear();
|
||||
|
||||
setData(MetaIndex.LIVING_POTIONS, color.asRGB());
|
||||
sendData(MetaIndex.LIVING_POTIONS);
|
||||
}
|
||||
|
||||
private int getPotions() {
|
||||
int m = 3694022;
|
||||
|
||||
if (potionEffects.isEmpty()) {
|
||||
return m;
|
||||
return 0;
|
||||
}
|
||||
|
||||
float f1 = 0.0F;
|
||||
float f2 = 0.0F;
|
||||
float f3 = 0.0F;
|
||||
float f4 = 0.0F;
|
||||
try {
|
||||
for (int localMobEffect : potionEffects) {
|
||||
int n = (Integer) getId.invoke(null, list.get(localMobEffect));
|
||||
f1 += (n >> 16 & 0xFF) / 255.0F;
|
||||
f2 += (n >> 8 & 0xFF) / 255.0F;
|
||||
f3 += (n & 0xFF) / 255.0F;
|
||||
f4 += 1.0F;
|
||||
}
|
||||
}
|
||||
catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
ArrayList<Color> colors = new ArrayList<>();
|
||||
|
||||
for (String typeId : potionEffects) {
|
||||
PotionEffectType type = PotionEffectType.getByName(typeId);
|
||||
|
||||
if (type == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
f1 = f1 / f4 * 255.0F;
|
||||
f2 = f2 / f4 * 255.0F;
|
||||
f3 = f3 / f4 * 255.0F;
|
||||
Color color = type.getColor();
|
||||
|
||||
return (int) f1 << 16 | (int) f2 << 8 | (int) f3;
|
||||
if (color == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
colors.add(color);
|
||||
}
|
||||
|
||||
if (colors.isEmpty()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
Color color = colors.remove(0);
|
||||
|
||||
return color.mixColors(colors.toArray(new Color[0])).asRGB();
|
||||
}
|
||||
|
||||
public boolean hasPotionEffect(PotionEffectType type) {
|
||||
return potionEffects.contains(type.getId());
|
||||
return potionEffects.contains(type.getName());
|
||||
}
|
||||
|
||||
public boolean isMaxHealthSet() {
|
||||
return maxHealthSet;
|
||||
}
|
||||
|
||||
public void removePotionEffect(PotionEffectType type) {
|
||||
if (potionEffects.contains(type.getId())) {
|
||||
potionEffects.remove(type.getId());
|
||||
public void addPotionEffect(PotionEffectType potionEffect) {
|
||||
if (!hasPotionEffect(potionEffect)) {
|
||||
potionEffects.add(potionEffect.getName());
|
||||
}
|
||||
|
||||
sendPotionEffects();
|
||||
}
|
||||
|
||||
public void removePotionEffect(PotionEffectType potionEffect) {
|
||||
if (hasPotionEffect(potionEffect)) {
|
||||
potionEffects.remove(potionEffect.getId());
|
||||
}
|
||||
|
||||
sendPotionEffects();
|
||||
}
|
||||
|
||||
public void setPotionParticlesAmbient(boolean particles) {
|
||||
|
@ -1,26 +1,26 @@
|
||||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
import org.apache.commons.lang.math.RandomUtils;
|
||||
import org.bukkit.Color;
|
||||
|
||||
/**
|
||||
* @author Navid
|
||||
*/
|
||||
public class TippedArrowWatcher extends ArrowWatcher {
|
||||
|
||||
public TippedArrowWatcher(Disguise disguise) {
|
||||
super(disguise);
|
||||
|
||||
int r = DisguiseUtilities.random.nextInt(256);
|
||||
int g = DisguiseUtilities.random.nextInt(256);
|
||||
int b = DisguiseUtilities.random.nextInt(256);
|
||||
|
||||
setColor(Color.fromRGB(r, g, b));
|
||||
if (getDisguise().getType() != DisguiseType.ARROW) {
|
||||
setColor(Color.fromRGB(RandomUtils.nextInt(256), RandomUtils.nextInt(256), RandomUtils.nextInt(256)));
|
||||
}
|
||||
}
|
||||
|
||||
public Color getColor() {
|
||||
int color = (int) getData(MetaIndex.TIPPED_ARROW_COLOR);
|
||||
int color = getData(MetaIndex.TIPPED_ARROW_COLOR);
|
||||
return Color.fromRGB(color);
|
||||
}
|
||||
|
||||
|
@ -17,10 +17,12 @@ import org.bukkit.util.EulerAngle;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Objects;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class DisguiseParser {
|
||||
public static class DisguiseParseException extends Exception {
|
||||
@ -435,41 +437,15 @@ public class DisguiseParser {
|
||||
* Splits a string while respecting quotes
|
||||
*/
|
||||
public static String[] split(String string) {
|
||||
String[] strings = ChatColor.translateAlternateColorCodes('&', string).split(" ");
|
||||
Matcher matcher = Pattern.compile("\"(?:\"(?=\\S)|\\\\\"|[^\"])*(?:[^\\\\]\"(?=\\s|$))|\\S+").matcher(string);
|
||||
|
||||
ArrayList<String> list = new ArrayList<>();
|
||||
StringBuilder builder = new StringBuilder();
|
||||
List<String> list = new ArrayList<>();
|
||||
|
||||
for (String s : strings) {
|
||||
String a = s.replaceAll("\\\\", "");
|
||||
|
||||
if (builder.length() != 0 || s.startsWith("\"")) {
|
||||
if (builder.length() != 0)
|
||||
builder.append(' ');
|
||||
|
||||
String append;
|
||||
|
||||
if (s.startsWith("\""))
|
||||
builder.append(s.substring(1));
|
||||
else if (a.endsWith("\"") && !a.endsWith("\\\""))
|
||||
builder.append(s.substring(0, s.length() - 1));
|
||||
else
|
||||
builder.append(s);
|
||||
|
||||
if (a.endsWith("\"") && !a.endsWith("\\\"")) {
|
||||
list.add(builder.toString());
|
||||
builder = new StringBuilder();
|
||||
}
|
||||
} else {
|
||||
list.add(s);
|
||||
}
|
||||
while (matcher.find()) {
|
||||
list.add(matcher.group());
|
||||
}
|
||||
|
||||
if (builder.length() != 0) {
|
||||
list.addAll(Arrays.asList(("\"" + builder.toString()).split(" ")));
|
||||
}
|
||||
|
||||
return list.toArray(new String[list.size()]);
|
||||
return list.toArray(new String[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -844,6 +820,29 @@ public class DisguiseParser {
|
||||
} else if (param == Ocelot.Type.class) {
|
||||
// Parse to ocelot type
|
||||
value = callValueOf(param, valueString, methodName);
|
||||
} else if (param == Color.class) {
|
||||
Class cl = Class.forName("org.bukkit.Color");
|
||||
|
||||
try {
|
||||
value = cl.getField(valueString.toUpperCase()).get(null);
|
||||
}
|
||||
catch (Exception ex) {
|
||||
try {
|
||||
String[] split = valueString.split(",");
|
||||
|
||||
if (split.length == 1) {
|
||||
value = Color.fromRGB(Integer.parseInt(split[0]));
|
||||
} else if (split.length == 3) {
|
||||
value = Color.fromRGB(Integer.parseInt(split[0]), Integer.parseInt(split[1]),
|
||||
Integer.parseInt(split[2]));
|
||||
} else {
|
||||
throw new Exception();
|
||||
}
|
||||
}
|
||||
catch (Exception ex2) {
|
||||
throw parseToException(param, valueString, methodName);
|
||||
}
|
||||
}
|
||||
} else if (param.getSimpleName().equals("TreeSpecies")) {
|
||||
// Parse to tree species
|
||||
value = callValueOf(param, valueString, methodName);
|
||||
@ -915,7 +914,9 @@ public class DisguiseParser {
|
||||
try {
|
||||
String[] split = valueString.split(",");
|
||||
|
||||
assert split.length == 3;
|
||||
if (split.length != 3) {
|
||||
throw new Exception();
|
||||
}
|
||||
|
||||
value = new BlockPosition(Integer.parseInt(split[0]), Integer.parseInt(split[1]),
|
||||
Integer.parseInt(split[2]));
|
||||
|
@ -857,8 +857,7 @@ public class DisguiseUtilities {
|
||||
gson = gsonBuilder.create();
|
||||
|
||||
try {
|
||||
Object server = ReflectionManager.getNmsMethod("MinecraftServer", "getServer").invoke(null);
|
||||
Object world = ((List) server.getClass().getField("worlds").get(server)).get(0);
|
||||
Object world = ReflectionManager.getWorldServer(Bukkit.getWorlds().get(0));
|
||||
Class chunkClass = ReflectionManager.getNmsClass("Chunk");
|
||||
Object bedChunk = null;
|
||||
|
||||
@ -883,8 +882,10 @@ public class DisguiseUtilities {
|
||||
.newInstance(0, true);
|
||||
|
||||
Class blockClass = ReflectionManager.getNmsClass("Block");
|
||||
Object REGISTRY = ReflectionManager.getNmsField("IRegistry", "BLOCK").get(null);
|
||||
Object minecraftKey = ReflectionManager.createMinecraftKey("white_bed");
|
||||
|
||||
Object block = blockClass.getMethod("getByName", String.class).invoke(null, "white_bed");
|
||||
Object block = REGISTRY.getClass().getMethod("get", minecraftKey.getClass()).invoke(REGISTRY, minecraftKey);
|
||||
Object blockData = ReflectionManager.getNmsMethod(blockClass, "getBlockData").invoke(block);
|
||||
Method method = null;
|
||||
|
||||
|
@ -14,6 +14,7 @@ import org.bukkit.potion.PotionEffectType;
|
||||
import org.bukkit.util.EulerAngle;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.*;
|
||||
|
||||
@ -154,6 +155,25 @@ public class ReflectionFlagWatchers {
|
||||
new ParamInfo(TropicalFish.Pattern.class, "Pattern", "Patterns of a tropical fish");
|
||||
new ParamInfo(DyeColor.class, "DyeColor", "Dye colors of many different colors");
|
||||
|
||||
try {
|
||||
ArrayList<String> colors = new ArrayList<>();
|
||||
Class cl = Class.forName("org.bukkit.Color");
|
||||
|
||||
for (Field field : cl.getFields()) {
|
||||
if (field.getType() != cl) {
|
||||
continue;
|
||||
}
|
||||
|
||||
colors.add(field.getName());
|
||||
}
|
||||
|
||||
new ParamInfo(Color.class, "Color", "Colors that can also be defined through RGB",
|
||||
colors.toArray(new String[0]));
|
||||
}
|
||||
catch (ClassNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
ArrayList<String> potionEnums = new ArrayList<>();
|
||||
|
||||
for (PotionEffectType effectType : PotionEffectType.values()) {
|
||||
|
@ -927,6 +927,16 @@ public class ReflectionManager {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Object createMinecraftKey(String name) {
|
||||
try{
|
||||
return getNmsClass("MinecraftKey").getConstructor(String.class).newInstance(name);
|
||||
}catch(Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static int getEntityType(Object nmsEntity) {
|
||||
try {
|
||||
Field entityTypesField = null;
|
||||
@ -936,9 +946,9 @@ public class ReflectionManager {
|
||||
continue;
|
||||
|
||||
Object entityType = method.invoke(nmsEntity);
|
||||
Class typesClass = getNmsClass("EntityTypes");
|
||||
Class typesClass = getNmsClass("IRegistry");
|
||||
|
||||
Object registry = typesClass.getField("REGISTRY").get(null);
|
||||
Object registry = typesClass.getField("ENTITY_TYPE").get(null);
|
||||
|
||||
return (int) registry.getClass().getMethod("a", Object.class).invoke(registry, entityType);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user