diff --git a/config.yml b/config.yml
index 8078b74b..3adfda0a 100644
--- a/config.yml
+++ b/config.yml
@@ -19,6 +19,7 @@ UpdateGameProfiles: true
# Entities - Are entities disguises saved (This is everything that's not a player)
# If you are using the dev builds, place your premium version of Lib's Disguises.jar inside the LibsDisguises folder
# This will enable premium only features for the dev builds.
+# The saved disguises are saved in a json file format inside the plugin folder, there will be no other formats
SaveDisguises:
Players: false
Entities: false
diff --git a/pom.xml b/pom.xml
index 7ae3e549..6b056352 100644
--- a/pom.xml
+++ b/pom.xml
@@ -43,12 +43,12 @@
org.spigotmc
spigot-api
- 1.11-R0.1-SNAPSHOT
+ 1.12-R0.1-SNAPSHOT
org.spigotmc
spigot
- 1.11-R0.1-SNAPSHOT
+ 1.12-R0.1-SNAPSHOT
diff --git a/src/me/libraryaddict/disguise/LibsDisguises.java b/src/me/libraryaddict/disguise/LibsDisguises.java
index b3b9f7a7..a684fe8a 100644
--- a/src/me/libraryaddict/disguise/LibsDisguises.java
+++ b/src/me/libraryaddict/disguise/LibsDisguises.java
@@ -4,6 +4,7 @@ import java.io.File;
import java.io.IOException;
import java.lang.reflect.Field;
+import me.libraryaddict.disguise.disguisetypes.watchers.*;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.PluginCommand;
@@ -41,18 +42,6 @@ import me.libraryaddict.disguise.commands.UndisguiseRadiusCommand;
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
-import me.libraryaddict.disguise.disguisetypes.watchers.AgeableWatcher;
-import me.libraryaddict.disguise.disguisetypes.watchers.ArrowWatcher;
-import me.libraryaddict.disguise.disguisetypes.watchers.GuardianWatcher;
-import me.libraryaddict.disguise.disguisetypes.watchers.InsentientWatcher;
-import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher;
-import me.libraryaddict.disguise.disguisetypes.watchers.MinecartWatcher;
-import me.libraryaddict.disguise.disguisetypes.watchers.SkeletonWatcher;
-import me.libraryaddict.disguise.disguisetypes.watchers.SlimeWatcher;
-import me.libraryaddict.disguise.disguisetypes.watchers.SpiderWatcher;
-import me.libraryaddict.disguise.disguisetypes.watchers.TNTWatcher;
-import me.libraryaddict.disguise.disguisetypes.watchers.TameableWatcher;
-import me.libraryaddict.disguise.disguisetypes.watchers.ZombieWatcher;
import me.libraryaddict.disguise.utilities.DisguiseSound;
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
import me.libraryaddict.disguise.utilities.DisguiseValues;
@@ -77,15 +66,6 @@ public class LibsDisguises extends JavaPlugin {
return;
}
- try {
- ReflectionManager.getNmsClass("EntityEvoker").getName();
- }
- catch (Exception ex) {
- System.err.println("[LibsDisguises] Lib's Disguises failed to startup, outdated server!");
- System.err.println("[LibsDisguises] This plugin does not offer backwards support!");
- return;
- }
-
instance = this;
saveDefaultConfig();
@@ -131,6 +111,7 @@ public class LibsDisguises extends JavaPlugin {
metrics.start();
}
catch (IOException e) {
+ // Don't print error
}
}
@@ -166,10 +147,11 @@ public class LibsDisguises extends JavaPlugin {
private void registerValues() {
for (DisguiseType disguiseType : DisguiseType.values()) {
if (disguiseType.getEntityType() == null) {
+ System.out.println("EntityType for " + disguiseType.name() + " not found");
continue;
}
- Class watcherClass = null;
+ Class watcherClass;
try {
switch (disguiseType) {
@@ -206,6 +188,10 @@ public class LibsDisguises extends JavaPlugin {
case STRAY:
watcherClass = SkeletonWatcher.class;
break;
+ case ILLUSIONER:
+ case EVOKER:
+ watcherClass = IllagerWizardWatcher.class;
+ break;
default:
watcherClass = Class.forName("me.libraryaddict.disguise.disguisetypes.watchers." + toReadable(
disguiseType.name()) + "Watcher");
@@ -289,6 +275,10 @@ public class LibsDisguises extends JavaPlugin {
case ARROW:
case SPECTRAL_ARROW:
nmsEntityName = "TippedArrow";
+ break;
+ case ILLUSIONER:
+ nmsEntityName = "IllagerIllusioner";
+ break;
default:
break;
}
@@ -354,7 +344,6 @@ public class LibsDisguises extends JavaPlugin {
System.err.println(
"Value is " + watch.getRawValue() + " (" + watch.getRawValue().getClass() + ") (" + nmsEntity.getClass() + ") & " + watcherClass.getSimpleName() + " which doesn't match up with " + flagType.getDefault().getClass());
System.err.println("Lib's Disguises will continue to load, but this will not work properly!");
- continue;
}
}
diff --git a/src/me/libraryaddict/disguise/commands/DisguiseModifyRadiusCommand.java b/src/me/libraryaddict/disguise/commands/DisguiseModifyRadiusCommand.java
index 1f268959..ed7db55d 100644
--- a/src/me/libraryaddict/disguise/commands/DisguiseModifyRadiusCommand.java
+++ b/src/me/libraryaddict/disguise/commands/DisguiseModifyRadiusCommand.java
@@ -1,24 +1,5 @@
package me.libraryaddict.disguise.commands;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-
-import org.apache.commons.lang.StringUtils;
-import org.bukkit.Bukkit;
-import org.bukkit.ChatColor;
-import org.bukkit.Location;
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandSender;
-import org.bukkit.command.TabCompleter;
-import org.bukkit.craftbukkit.v1_11_R1.command.CraftBlockCommandSender;
-import org.bukkit.entity.Entity;
-import org.bukkit.entity.EntityType;
-import org.bukkit.entity.Player;
-
import me.libraryaddict.disguise.DisguiseAPI;
import me.libraryaddict.disguise.disguisetypes.Disguise;
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
@@ -28,6 +9,20 @@ import me.libraryaddict.disguise.utilities.DisguiseParser.DisguiseParseException
import me.libraryaddict.disguise.utilities.DisguiseParser.DisguisePerm;
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers;
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers.ParamInfo;
+import org.apache.commons.lang.StringUtils;
+import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
+import org.bukkit.Location;
+import org.bukkit.command.BlockCommandSender;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
+import org.bukkit.command.TabCompleter;
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.EntityType;
+import org.bukkit.entity.Player;
+
+import java.lang.reflect.Method;
+import java.util.*;
public class DisguiseModifyRadiusCommand extends DisguiseBaseCommand implements TabCompleter {
private int maxRadius = 30;
@@ -49,7 +44,7 @@ public class DisguiseModifyRadiusCommand extends DisguiseBaseCommand implements
center = ((Player) sender).getLocation();
}
else {
- center = ((CraftBlockCommandSender) sender).getBlock().getLocation().add(0.5, 0, 0.5);
+ center = ((BlockCommandSender) sender).getBlock().getLocation().add(0.5, 0, 0.5);
}
return center.getWorld().getNearbyEntities(center, radius, radius, radius);
diff --git a/src/me/libraryaddict/disguise/commands/DisguiseRadiusCommand.java b/src/me/libraryaddict/disguise/commands/DisguiseRadiusCommand.java
index 195646c0..62c9d4ca 100644
--- a/src/me/libraryaddict/disguise/commands/DisguiseRadiusCommand.java
+++ b/src/me/libraryaddict/disguise/commands/DisguiseRadiusCommand.java
@@ -1,24 +1,5 @@
package me.libraryaddict.disguise.commands;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-
-import org.apache.commons.lang.StringUtils;
-import org.bukkit.Bukkit;
-import org.bukkit.ChatColor;
-import org.bukkit.Location;
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandSender;
-import org.bukkit.command.TabCompleter;
-import org.bukkit.craftbukkit.v1_11_R1.command.CraftBlockCommandSender;
-import org.bukkit.entity.Entity;
-import org.bukkit.entity.EntityType;
-import org.bukkit.entity.LivingEntity;
-import org.bukkit.entity.Player;
-
import me.libraryaddict.disguise.DisguiseAPI;
import me.libraryaddict.disguise.DisguiseConfig;
import me.libraryaddict.disguise.disguisetypes.Disguise;
@@ -30,6 +11,24 @@ import me.libraryaddict.disguise.utilities.DisguiseParser.DisguiseParseException
import me.libraryaddict.disguise.utilities.DisguiseParser.DisguisePerm;
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers;
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers.ParamInfo;
+import org.apache.commons.lang.StringUtils;
+import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
+import org.bukkit.Location;
+import org.bukkit.command.BlockCommandSender;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
+import org.bukkit.command.TabCompleter;
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.EntityType;
+import org.bukkit.entity.LivingEntity;
+import org.bukkit.entity.Player;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCompleter {
private int maxRadius = 30;
@@ -72,8 +71,9 @@ public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCom
Collections.sort(classes);
- sender.sendMessage(ChatColor.DARK_GREEN + "EntityTypes usable are: " + ChatColor.GREEN
- + StringUtils.join(classes, ChatColor.DARK_GREEN + ", " + ChatColor.GREEN) + ChatColor.DARK_GREEN + ".");
+ sender.sendMessage(
+ ChatColor.DARK_GREEN + "EntityTypes usable are: " + ChatColor.GREEN + StringUtils.join(classes,
+ ChatColor.DARK_GREEN + ", " + ChatColor.GREEN) + ChatColor.DARK_GREEN + ".");
return true;
}
@@ -105,11 +105,10 @@ public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCom
}
if (args.length == starting + 1) {
- sender.sendMessage(ChatColor.RED + "You need to supply a disguise as well as the radius"
- + (starting != 0 ? " and EntityType" : ""));
+ sender.sendMessage(ChatColor.RED + "You need to supply a disguise as well as the radius" + (starting != 0 ?
+ " and EntityType" : ""));
return true;
- }
- else if (args.length < 2) {
+ } else if (args.length < 2) {
sender.sendMessage(ChatColor.RED + "You need to supply a radius as well as the disguise");
return true;
}
@@ -122,7 +121,8 @@ public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCom
int radius = Integer.parseInt(args[starting]);
if (radius > maxRadius) {
- sender.sendMessage(ChatColor.RED + "Limited radius to " + maxRadius + "! Don't want to make too much lag right?");
+ sender.sendMessage(
+ ChatColor.RED + "Limited radius to " + maxRadius + "! Don't want to make too much lag right?");
radius = maxRadius;
}
@@ -158,9 +158,8 @@ public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCom
if (sender instanceof Player) {
center = ((Player) sender).getLocation();
- }
- else {
- center = ((CraftBlockCommandSender) sender).getBlock().getLocation().add(0.5, 0, 0.5);
+ } else {
+ center = ((BlockCommandSender) sender).getBlock().getLocation().add(0.5, 0, 0.5);
}
for (Entity entity : center.getWorld().getNearbyEntities(center, radius, radius, radius)) {
@@ -169,8 +168,7 @@ public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCom
}
if (type != null ? entity.getType() == type : entityClass.isAssignableFrom(entity.getClass())) {
- if (disguise.isMiscDisguise() && !DisguiseConfig.isMiscDisguisesForLivingEnabled()
- && entity instanceof LivingEntity) {
+ if (disguise.isMiscDisguise() && !DisguiseConfig.isMiscDisguisesForLivingEnabled() && entity instanceof LivingEntity) {
miscDisguises++;
continue;
}
@@ -196,14 +194,13 @@ public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCom
if (disguisedEntitys > 0) {
sender.sendMessage(ChatColor.RED + "Successfully disguised " + disguisedEntitys + " entities!");
- }
- else {
+ } else {
sender.sendMessage(ChatColor.RED + "Couldn't find any entities to disguise!");
}
if (miscDisguises > 0) {
- sender.sendMessage(ChatColor.RED + "Failed to disguise " + miscDisguises
- + " entities because the option to disguise a living entity as a non-living has been disabled in the config");
+ sender.sendMessage(
+ ChatColor.RED + "Failed to disguise " + miscDisguises + " entities because the option to disguise a living entity as a non-living has been disabled in the config");
}
return true;
@@ -244,8 +241,7 @@ public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCom
for (String type : getAllowedDisguises(perms)) {
tabs.add(type);
}
- }
- else {
+ } else {
DisguisePerm disguiseType = DisguiseParser.getDisguisePerm(args[starting]);
@@ -256,13 +252,12 @@ public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCom
for (Player player : Bukkit.getOnlinePlayers()) {
tabs.add(player.getName());
}
- }
- else {
+ } else {
ArrayList usedOptions = new ArrayList();
for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) {
- for (int i = disguiseType.getType() == DisguiseType.PLAYER ? starting + 2
- : starting + 1; i < args.length; i++) {
+ for (int i = disguiseType.getType() == DisguiseType.PLAYER ? starting + 2 :
+ starting + 1; i < args.length; i++) {
String arg = args[i];
if (!method.getName().equalsIgnoreCase(arg))
@@ -288,8 +283,7 @@ public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCom
for (String e : info.getEnums(origArgs[origArgs.length - 1])) {
tabs.add(e);
}
- }
- else {
+ } else {
if (info.getParamClass() == String.class) {
for (Player player : Bukkit.getOnlinePlayers()) {
tabs.add(player.getName());
@@ -301,7 +295,8 @@ public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCom
if (addMethods) {
// If this is a method, add. Else if it can be a param of the previous argument, add.
- for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) {
+ for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods(
+ disguiseType.getWatcherClass())) {
tabs.add(method.getName());
}
}
@@ -316,31 +311,34 @@ public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCom
* Send the player the information
*/
@Override
- protected void sendCommandUsage(CommandSender sender, HashMap, Boolean>> map) {
+ protected void sendCommandUsage(CommandSender sender,
+ HashMap, Boolean>> map) {
ArrayList allowedDisguises = getAllowedDisguises(map);
- sender.sendMessage(ChatColor.DARK_GREEN + "Disguise all entities in a radius! Caps at " + maxRadius + " blocks!");
- sender.sendMessage(ChatColor.DARK_GREEN + "You can use the disguises: " + ChatColor.GREEN
- + StringUtils.join(allowedDisguises, ChatColor.RED + ", " + ChatColor.GREEN));
+ sender.sendMessage(
+ ChatColor.DARK_GREEN + "Disguise all entities in a radius! Caps at " + maxRadius + " blocks!");
+ sender.sendMessage(ChatColor.DARK_GREEN + "You can use the disguises: " + ChatColor.GREEN + StringUtils.join(
+ allowedDisguises, ChatColor.RED + ", " + ChatColor.GREEN));
String optional = ChatColor.DARK_GREEN + "(" + ChatColor.GREEN + "Optional" + ChatColor.DARK_GREEN + ")";
if (allowedDisguises.contains("player")) {
- sender.sendMessage((ChatColor.DARK_GREEN + "/disguiseradius player ")
- .replace("<", "<" + ChatColor.GREEN).replace(">", ChatColor.DARK_GREEN + ">"));
+ sender.sendMessage(
+ (ChatColor.DARK_GREEN + "/disguiseradius player ").replace(
+ "<", "<" + ChatColor.GREEN).replace(">", ChatColor.DARK_GREEN + ">"));
}
- sender.sendMessage((ChatColor.DARK_GREEN + "/disguiseradius ").replace("<", "<" + ChatColor.GREEN).replace(">", ChatColor.DARK_GREEN + ">"));
+ sender.sendMessage(
+ (ChatColor.DARK_GREEN + "/disguiseradius ").replace(
+ "<", "<" + ChatColor.GREEN).replace(">", ChatColor.DARK_GREEN + ">"));
if (allowedDisguises.contains("dropped_item") || allowedDisguises.contains("falling_block")) {
- sender.sendMessage((ChatColor.DARK_GREEN + "/disguiseradius ")
- .replace("<", "<" + ChatColor.GREEN).replace(">", ChatColor.DARK_GREEN + ">"));
+ sender.sendMessage(
+ (ChatColor.DARK_GREEN + "/disguiseradius ").replace(
+ "<", "<" + ChatColor.GREEN).replace(">", ChatColor.DARK_GREEN + ">"));
}
sender.sendMessage(
ChatColor.DARK_GREEN + "See the EntityType's usable by " + ChatColor.GREEN + "/disguiseradius EntityTypes");
}
-
}
diff --git a/src/me/libraryaddict/disguise/commands/LibsDisguisesCommand.java b/src/me/libraryaddict/disguise/commands/LibsDisguisesCommand.java
index 9351fb6f..6595db29 100644
--- a/src/me/libraryaddict/disguise/commands/LibsDisguisesCommand.java
+++ b/src/me/libraryaddict/disguise/commands/LibsDisguisesCommand.java
@@ -4,8 +4,7 @@ import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
-import me.libraryaddict.disguise.utilities.DisguiseUtilities;
-import me.libraryaddict.disguise.utilities.LibVersion;
+import me.libraryaddict.disguise.utilities.LibsVersion;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
@@ -59,7 +58,7 @@ public class LibsDisguisesCommand implements CommandExecutor, TabCompleter {
+ "/libsdisguises reload" + ChatColor.DARK_GREEN
+ " to reload the config. All disguises will be blown by doing this.");
- if (LibVersion.isPremium()) {
+ if (LibsVersion.isPremium()) {
sender.sendMessage(ChatColor.DARK_GREEN + "This server supports the plugin developer!");
}
}
diff --git a/src/me/libraryaddict/disguise/disguisetypes/DisguiseType.java b/src/me/libraryaddict/disguise/disguisetypes/DisguiseType.java
index aa21bbc4..a721c64c 100644
--- a/src/me/libraryaddict/disguise/disguisetypes/DisguiseType.java
+++ b/src/me/libraryaddict/disguise/disguisetypes/DisguiseType.java
@@ -3,6 +3,7 @@ package me.libraryaddict.disguise.disguisetypes;
import org.apache.commons.lang.StringUtils;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
+import org.omg.CORBA.UNKNOWN;
public enum DisguiseType {
AREA_EFFECT_CLOUD(3, 0),
@@ -71,6 +72,8 @@ public enum DisguiseType {
HUSK,
+ ILLUSIONER,
+
IRON_GOLEM,
ITEM_FRAME(71),
@@ -105,6 +108,8 @@ public enum DisguiseType {
PAINTING,
+ PARROT,
+
PIG,
PIG_ZOMBIE,
@@ -212,7 +217,6 @@ public enum DisguiseType {
DisguiseType disguiseType = getType(entity.getType());
return disguiseType;
-
}
public static DisguiseType getType(EntityType entityType) {
@@ -235,16 +239,16 @@ public enum DisguiseType {
int value = ints[i];
switch (i) {
- case 0:
- objectId = value;
+ case 0:
+ objectId = value;
- break;
- case 1:
- defaultData = value;
+ break;
+ case 1:
+ defaultData = value;
- break;
- default:
- break;
+ break;
+ default:
+ break;
}
}
}
@@ -267,7 +271,7 @@ public enum DisguiseType {
/**
* The object type send in packets when spawning a misc entity. Otherwise, -1.
- *
+ *
* @return
*/
public int getObjectId() {
@@ -276,7 +280,7 @@ public enum DisguiseType {
/**
* The TYPE id of this entity. Different from the Object Id send in spawn packets when spawning miscs.
- *
+ *
* @return
*/
public int getTypeId() {
diff --git a/src/me/libraryaddict/disguise/disguisetypes/FlagWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/FlagWatcher.java
index 6c99666b..0a859225 100644
--- a/src/me/libraryaddict/disguise/disguisetypes/FlagWatcher.java
+++ b/src/me/libraryaddict/disguise/disguisetypes/FlagWatcher.java
@@ -5,8 +5,6 @@ import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.reflect.StructureModifier;
import com.comphenix.protocol.wrappers.WrappedDataWatcher;
-import com.comphenix.protocol.wrappers.WrappedGameProfile;
-import com.comphenix.protocol.wrappers.WrappedSignedProperty;
import com.comphenix.protocol.wrappers.WrappedWatchableObject;
import me.libraryaddict.disguise.DisguiseAPI;
import me.libraryaddict.disguise.DisguiseConfig;
@@ -19,7 +17,6 @@ import org.bukkit.inventory.EntityEquipment;
import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.ItemStack;
-import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.*;
@@ -224,6 +221,9 @@ public class FlagWatcher {
}
protected Y getData(MetaIndex flagType) {
+ if (flagType == null)
+ return null;
+
if (entityValues.containsKey(flagType.getIndex())) {
return (Y) entityValues.get(flagType.getIndex());
}
@@ -244,6 +244,9 @@ public class FlagWatcher {
}
protected boolean hasValue(MetaIndex no) {
+ if (no == null)
+ return false;
+
return entityValues.containsKey(no.getIndex());
}
@@ -316,6 +319,9 @@ public class FlagWatcher {
List list = new ArrayList<>();
for (MetaIndex data : dataValues) {
+ if (data == null)
+ continue;
+
if (!entityValues.containsKey(data.getIndex()) || entityValues.get(data.getIndex()) == null) {
continue;
}
@@ -370,6 +376,9 @@ public class FlagWatcher {
}
protected void setBackupValue(MetaIndex no, Object value) {
+ if (no == null)
+ return;
+
backupEntityValues.put(no.getIndex(), value);
}
@@ -518,6 +527,9 @@ public class FlagWatcher {
}
protected void setData(MetaIndex id, Y value) {
+ if (id == null)
+ return;
+
if (value == null && id.getDefault() instanceof ItemStack)
throw new IllegalArgumentException("Cannot use null ItemStacks");
diff --git a/src/me/libraryaddict/disguise/disguisetypes/MetaIndex.java b/src/me/libraryaddict/disguise/disguisetypes/MetaIndex.java
index 5c2b4584..cb63abe8 100644
--- a/src/me/libraryaddict/disguise/disguisetypes/MetaIndex.java
+++ b/src/me/libraryaddict/disguise/disguisetypes/MetaIndex.java
@@ -4,6 +4,8 @@ import com.comphenix.protocol.wrappers.BlockPosition;
import com.comphenix.protocol.wrappers.EnumWrappers.Direction;
import com.comphenix.protocol.wrappers.Vector3F;
import com.comphenix.protocol.wrappers.WrappedBlockData;
+import com.comphenix.protocol.wrappers.nbt.NbtCompound;
+import com.comphenix.protocol.wrappers.nbt.NbtFactory;
import com.google.common.base.Optional;
import me.libraryaddict.disguise.disguisetypes.watchers.*;
import org.bukkit.Color;
@@ -104,7 +106,9 @@ public class MetaIndex {
public static MetaIndex ENTITY_SILENT = new MetaIndex<>(FlagWatcher.class, 4, false);
- public static MetaIndex EVOKER_SPELL_TICKS = new MetaIndex<>(EvokerWatcher.class, 0, (byte) 0);
+ public static MetaIndex ILLAGER_SPELL_TICKS = new MetaIndex<>(IllagerWizardWatcher.class, 0, (byte) 0);
+
+ public static MetaIndex ILLAGER_META = new MetaIndex<>(IllagerWatcher.class, 0, (byte) 0);
public static MetaIndex FALLING_BLOCK_POSITION = new MetaIndex<>(FallingBlockWatcher.class, 0,
BlockPosition.ORIGIN);
@@ -173,6 +177,8 @@ public class MetaIndex {
public static MetaIndex OCELOT_TYPE = new MetaIndex<>(OcelotWatcher.class, 0, 0);
+ public static MetaIndex PARROT_VARIANT = new MetaIndex<>(ParrotWatcher.class, 0, 0);
+
public static MetaIndex PIG_SADDLED = new MetaIndex<>(PigWatcher.class, 0, false);
public static MetaIndex PIG_UNKNOWN = new MetaIndex<>(PigWatcher.class, 1, 0);
@@ -185,6 +191,12 @@ public class MetaIndex {
public static MetaIndex PLAYER_SKIN = new MetaIndex<>(PlayerWatcher.class, 2, (byte) 127);
+ public static MetaIndex PLAYER_LEFT_SHOULDER_ENTITY = new MetaIndex<>(PlayerWatcher.class, 4,
+ NbtFactory.ofCompound("None"));
+
+ public static MetaIndex PLAYER_RIGHT_SHOULDER_ENTITY = new MetaIndex<>(PlayerWatcher.class, 5,
+ NbtFactory.ofCompound("None"));
+
public static MetaIndex POLAR_BEAR_STANDING = new MetaIndex<>(PolarBearWatcher.class, 0, false);
public static MetaIndex RABBIT_TYPE = new MetaIndex<>(RabbitWatcher.class, 0, 0);
@@ -261,13 +273,55 @@ public class MetaIndex {
public static MetaIndex ZOMBIE_VILLAGER_SHAKING = new MetaIndex<>(ZombieVillagerWatcher.class, 0, false);
static {
+ setValues();
+ }
+
+ public static void fillInBlankIndexes() {
+ ArrayList>> list = new ArrayList<>();
+
+ for (MetaIndex index : values()) {
+ Entry> entry = null;
+
+ for (Entry e : list) {
+ if (e.getKey() != index.getFlagWatcher())
+ continue;
+
+ entry = e;
+ break;
+ }
+
+ if (entry == null) {
+ entry = new AbstractMap.SimpleEntry(index.getFlagWatcher(), new ArrayList());
+ list.add(entry);
+ }
+
+ entry.getValue().add(index);
+ }
+
+ for (Entry> entry : list) {
+ Collections.sort(entry.getValue(), new Comparator() {
+ @Override
+ public int compare(MetaIndex o1, MetaIndex o2) {
+ return o1.getIndex() - o2.getIndex();
+ }
+ });
+
+ for (MetaIndex ind : entry.getValue()) {
+ ind._index = entry.getValue().indexOf(ind);
+ }
+ }
+ }
+
+ public static void orderMetaIndexes() {
for (MetaIndex flagType : values()) {
if (flagType.getFlagWatcher() == FlagWatcher.class)
continue;
flagType._index += getNoIndexes(flagType.getFlagWatcher().getSuperclass());
}
+ }
+ public static void validateMetadata() {
// Simple verification for the dev that he's setting up the FlagType's properly.
// All flag types should be from 0 to with no empty numbers.
// All flag types should never occur twice.
@@ -384,6 +438,44 @@ public class MetaIndex {
return _values;
}
+ public static void setValues() {
+ try {
+ _values = new MetaIndex[0];
+
+ for (Field field : MetaIndex.class.getFields()) {
+ if (field.getType() != MetaIndex.class)
+ continue;
+
+ MetaIndex index = (MetaIndex) field.get(null);
+
+ if (index == null)
+ continue;
+
+ _values = Arrays.copyOf(_values, _values.length + 1);
+ _values[_values.length - 1] = index;
+ }
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static void setMetaIndex(String name, MetaIndex metaIndex) {
+ try {
+ Field field = MetaIndex.class.getField(name);
+ MetaIndex index = (MetaIndex) field.get(null);
+
+ field.set(null, metaIndex);
+ }
+ catch (NoSuchFieldException ex) {
+ System.out.println("The field '" + name + "' doesn't exist in MetaIndex!");
+ Thread.dumpStack();
+ }
+ catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+
private Y _defaultValue;
private int _index;
private Class extends FlagWatcher> _watcher;
@@ -392,9 +484,6 @@ public class MetaIndex {
_index = index;
_watcher = watcher;
_defaultValue = defaultValue;
-
- _values = Arrays.copyOf(_values, _values.length + 1);
- _values[_values.length - 1] = this;
}
public Y getDefault() {
diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/IllagerWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/IllagerWatcher.java
new file mode 100644
index 00000000..b1e530eb
--- /dev/null
+++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/IllagerWatcher.java
@@ -0,0 +1,12 @@
+package me.libraryaddict.disguise.disguisetypes.watchers;
+
+import me.libraryaddict.disguise.disguisetypes.Disguise;
+
+/**
+ * Created by libraryaddict on 9/06/2017.
+ */
+public class IllagerWatcher extends InsentientWatcher {
+ public IllagerWatcher(Disguise disguise) {
+ super(disguise);
+ }
+}
diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/EvokerWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/IllagerWizardWatcher.java
similarity index 51%
rename from src/me/libraryaddict/disguise/disguisetypes/watchers/EvokerWatcher.java
rename to src/me/libraryaddict/disguise/disguisetypes/watchers/IllagerWizardWatcher.java
index 866e60f4..af486886 100644
--- a/src/me/libraryaddict/disguise/disguisetypes/watchers/EvokerWatcher.java
+++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/IllagerWizardWatcher.java
@@ -1,20 +1,20 @@
-package me.libraryaddict.disguise.disguisetypes.watchers;
-
-import me.libraryaddict.disguise.disguisetypes.Disguise;
-import me.libraryaddict.disguise.disguisetypes.MetaIndex;
-
-public class EvokerWatcher extends InsentientWatcher {
-
- public EvokerWatcher(Disguise disguise) {
- super(disguise);
- }
-
- public void setSpellTicks(int spellTicks) {
- setData(MetaIndex.EVOKER_SPELL_TICKS, (byte) spellTicks);
- sendData(MetaIndex.EVOKER_SPELL_TICKS);
- }
-
- public int getSpellTicks() {
- return getData(MetaIndex.EVOKER_SPELL_TICKS);
- }
-}
+package me.libraryaddict.disguise.disguisetypes.watchers;
+
+import me.libraryaddict.disguise.disguisetypes.Disguise;
+import me.libraryaddict.disguise.disguisetypes.MetaIndex;
+
+public class IllagerWizardWatcher extends IllagerWatcher {
+
+ public IllagerWizardWatcher(Disguise disguise) {
+ super(disguise);
+ }
+
+ public void setSpellTicks(int spellTicks) {
+ setData(MetaIndex.ILLAGER_SPELL_TICKS, (byte) spellTicks);
+ sendData(MetaIndex.ILLAGER_SPELL_TICKS);
+ }
+
+ public int getSpellTicks() {
+ return getData(MetaIndex.ILLAGER_SPELL_TICKS);
+ }
+}
diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/ParrotWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/ParrotWatcher.java
new file mode 100644
index 00000000..8aaa40fe
--- /dev/null
+++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/ParrotWatcher.java
@@ -0,0 +1,23 @@
+package me.libraryaddict.disguise.disguisetypes.watchers;
+
+import me.libraryaddict.disguise.disguisetypes.Disguise;
+import me.libraryaddict.disguise.disguisetypes.MetaIndex;
+import org.bukkit.entity.Parrot;
+
+/**
+ * Created by libraryaddict on 9/06/2017.
+ */
+public class ParrotWatcher extends TameableWatcher {
+ public ParrotWatcher(Disguise disguise) {
+ super(disguise);
+ }
+
+ public Parrot.Variant getVariant() {
+ return Parrot.Variant.values()[getData(MetaIndex.PARROT_VARIANT)];
+ }
+
+ public void setVariant(Parrot.Variant variant) {
+ setData(MetaIndex.PARROT_VARIANT, variant.ordinal());
+ sendData(MetaIndex.PARROT_VARIANT);
+ }
+}
diff --git a/src/me/libraryaddict/disguise/utilities/DisguiseParser.java b/src/me/libraryaddict/disguise/utilities/DisguiseParser.java
index 4645496d..2df4ca8f 100644
--- a/src/me/libraryaddict/disguise/utilities/DisguiseParser.java
+++ b/src/me/libraryaddict/disguise/utilities/DisguiseParser.java
@@ -10,11 +10,7 @@ import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.block.BlockFace;
import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Ageable;
-import org.bukkit.entity.Animals;
-import org.bukkit.entity.EntityType;
-import org.bukkit.entity.Llama;
-import org.bukkit.entity.Monster;
+import org.bukkit.entity.*;
import org.bukkit.inventory.ItemStack;
import org.bukkit.permissions.PermissionAttachmentInfo;
import org.bukkit.potion.PotionEffectType;
@@ -23,7 +19,6 @@ import com.comphenix.protocol.wrappers.BlockPosition;
import com.comphenix.protocol.wrappers.WrappedGameProfile;
import me.libraryaddict.disguise.DisguiseConfig;
-import me.libraryaddict.disguise.commands.DisguiseBaseCommand;
import me.libraryaddict.disguise.disguisetypes.AnimalColor;
import me.libraryaddict.disguise.disguisetypes.Disguise;
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
@@ -444,7 +439,7 @@ public class DisguiseParser {
}
}
- private static boolean isNumeric(String string) {
+ private static boolean isInteger(String string) {
try {
Integer.parseInt(string);
return true;
@@ -463,7 +458,6 @@ public class DisguiseParser {
* @param args
* @param permissionMap
* @return
- * @throws DisguiseBaseCommand.DisguiseParseException
* @throws java.lang.IllegalAccessException
* @throws java.lang.reflect.InvocationTargetException
*/
@@ -576,13 +570,13 @@ public class DisguiseParser {
// If the first arg is a number
if (args[1].contains(":")) {
String[] split = args[1].split(":");
- if (isNumeric(split[1])) {
+ if (isInteger(split[1])) {
secondArg = split[1];
}
args[1] = split[0];
}
- if (isNumeric(args[1])) {
+ if (isInteger(args[1])) {
miscId = Integer.parseInt(args[1]);
} else {
if (disguisePerm.getType() == DisguiseType.FALLING_BLOCK || disguisePerm.getType() == DisguiseType.DROPPED_ITEM) {
@@ -614,7 +608,7 @@ public class DisguiseParser {
}
toSkip++;
// If they also defined a data value
- if (args.length > 2 && secondArg == null && isNumeric(args[2])) {
+ if (args.length > 2 && secondArg == null && isInteger(args[2])) {
secondArg = args[2];
toSkip++;
}
@@ -706,7 +700,7 @@ public class DisguiseParser {
if (valueString != null) {
if (int.class == param) {
// Parse to integer
- if (isNumeric(valueString)) {
+ if (isInteger(valueString)) {
value = Integer.parseInt(valueString);
} else {
throw parseToException("number", valueString, methodName);
@@ -806,7 +800,8 @@ public class DisguiseParser {
// Parse to potion effect
try {
PotionEffectType potionType = PotionEffectType.getByName(valueString.toUpperCase());
- if (potionType == null && isNumeric(valueString)) {
+
+ if (potionType == null && isInteger(valueString)) {
potionType = PotionEffectType.getById(Integer.parseInt(valueString));
}
@@ -878,6 +873,8 @@ public class DisguiseParser {
catch (Exception ex) {
throw parseToException("three numbers Number,Number,Number", valueString, methodName);
}
+ } else if (param.getName().equals("org.bukkit.entity.Parrot$Variant")) {
+ value = callValueOf(param, valueString, methodName, "a parrot color");
}
}
@@ -949,7 +946,7 @@ public class DisguiseParser {
int itemId = -1;
- if (isNumeric(split[0])) {
+ if (isInteger(split[0])) {
itemId = Integer.parseInt(split[0]);
} else {
try {
@@ -963,7 +960,7 @@ public class DisguiseParser {
short itemDura = 0;
if (split.length > 1) {
- if (isNumeric(split[1])) {
+ if (isInteger(split[1])) {
itemDura = Short.parseShort(split[1]);
} else {
throw parseToException("item ID:Durability combo", string, "%s");
diff --git a/src/me/libraryaddict/disguise/utilities/DisguiseSound.java b/src/me/libraryaddict/disguise/utilities/DisguiseSound.java
index 865b6460..ad120d3f 100644
--- a/src/me/libraryaddict/disguise/utilities/DisguiseSound.java
+++ b/src/me/libraryaddict/disguise/utilities/DisguiseSound.java
@@ -69,6 +69,10 @@ public enum DisguiseSound {
Sound.ENTITY_HORSE_STEP_WOOD, Sound.ENTITY_HORSE_ARMOR, Sound.ENTITY_HORSE_LAND, Sound.ENTITY_HORSE_JUMP,
Sound.ENTITY_HORSE_ANGRY),
+ ILLUSIONER("entity.illusion_illager.hurt", null, "entity.illusion_illager.death", "entity.illusion_illager.ambient",
+ "entity.illusion_illager.cast_spell", "entity.illusion_illager" + ".prepare_blindness",
+ "entity.illusion_illager.prepare_mirror", "entity.illusion_illager.mirror_move"),
+
IRON_GOLEM(Sound.ENTITY_IRONGOLEM_HURT, Sound.ENTITY_IRONGOLEM_STEP, Sound.ENTITY_IRONGOLEM_DEATH,
Sound.ENTITY_IRONGOLEM_ATTACK),
@@ -84,13 +88,28 @@ public enum DisguiseSound {
OCELOT(Sound.ENTITY_CAT_HURT, Sound.BLOCK_GRASS_STEP, Sound.ENTITY_CAT_HURT, Sound.ENTITY_CAT_AMBIENT,
Sound.ENTITY_CAT_PURR, Sound.ENTITY_CAT_PURREOW),
+ PARROT("entity.parrot.hurt", "entity.parrot.step", "entity.parrot.death", "entity.parrot.ambient",
+ "entity.parrot.eat", "entity.parrot.fly", "entity.parrot.imitate.blaze", "entity.parrot.imitate.creeper",
+ "entity.parrot.imitate.elder_guardian", "entity.parrot.imitate.enderdragon",
+ "entity.parrot.imitate.enderman", "entity.parrot.imitate.endermite",
+ "entity.parrot.imitate.evocation_illager", "entity.parrot.imitate.ghast", "entity.parrot.imitate.husk",
+ "entity.parrot.imitate.illusion_illager", "entity.parrot.imitate.magmacube",
+ "entity.parrot.imitate.polar_bear", "entity.parrot.imitate.shulker", "entity.parrot.imitate.silverfish",
+ "entity.parrot.imitate.skeleton", "entity.parrot.imitate.slime", "entity.parrot.imitate.spider",
+ "entity.parrot.imitate.stray", "entity.parrot.imitate.vex", "entity.parrot.imitate.vindication_illager",
+ "entity.parrot.imitate.witch", "entity.parrot.imitate.wither", "entity.parrot.imitate.wither_skeleton",
+ "entity.parrot.imitate.wolf", "entity.parrot.imitate.zombie", "entity.parrot.imitate.zombie_pigman",
+ "entity.parrot.imitate.zombie_villager"),
+
PIG(Sound.ENTITY_PIG_HURT, Sound.ENTITY_PIG_STEP, Sound.ENTITY_PIG_DEATH, Sound.ENTITY_PIG_AMBIENT),
PIG_ZOMBIE(Sound.ENTITY_ZOMBIE_PIG_HURT, null, Sound.ENTITY_ZOMBIE_PIG_DEATH, Sound.ENTITY_ZOMBIE_PIG_AMBIENT,
Sound.ENTITY_ZOMBIE_PIG_ANGRY),
PLAYER(Sound.ENTITY_PLAYER_HURT,
- new Sound[]{Sound.BLOCK_STONE_STEP, Sound.BLOCK_GRASS_STEP, Sound.BLOCK_ANVIL_STEP, Sound.BLOCK_CLOTH_STEP, Sound.BLOCK_GLASS_STEP, Sound.BLOCK_GRAVEL_STEP, Sound.BLOCK_LADDER_STEP, Sound.BLOCK_METAL_STEP, Sound.BLOCK_SAND_STEP, Sound.BLOCK_SLIME_STEP, Sound.BLOCK_SNOW_STEP, Sound.BLOCK_WOOD_STEP},
+ new Sound[]{Sound.BLOCK_STONE_STEP, Sound.BLOCK_GRASS_STEP, Sound.BLOCK_ANVIL_STEP, Sound.BLOCK_CLOTH_STEP,
+ Sound.BLOCK_GLASS_STEP, Sound.BLOCK_GRAVEL_STEP, Sound.BLOCK_LADDER_STEP, Sound.BLOCK_METAL_STEP,
+ Sound.BLOCK_SAND_STEP, Sound.BLOCK_SLIME_STEP, Sound.BLOCK_SNOW_STEP, Sound.BLOCK_WOOD_STEP},
Sound.ENTITY_PLAYER_DEATH, null),
RABBIT(Sound.ENTITY_RABBIT_HURT, Sound.ENTITY_RABBIT_JUMP, Sound.ENTITY_RABBIT_DEATH, Sound.ENTITY_RABBIT_AMBIENT),
diff --git a/src/me/libraryaddict/disguise/utilities/DisguiseUtilities.java b/src/me/libraryaddict/disguise/utilities/DisguiseUtilities.java
index 3265a963..cd1d0e19 100644
--- a/src/me/libraryaddict/disguise/utilities/DisguiseUtilities.java
+++ b/src/me/libraryaddict/disguise/utilities/DisguiseUtilities.java
@@ -12,7 +12,6 @@ import com.comphenix.protocol.wrappers.WrappedDataWatcher;
import com.comphenix.protocol.wrappers.WrappedGameProfile;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
-import com.mojang.authlib.GameProfile;
import com.mojang.authlib.properties.PropertyMap;
import me.libraryaddict.disguise.DisguiseAPI;
import me.libraryaddict.disguise.DisguiseConfig;
@@ -24,6 +23,8 @@ import me.libraryaddict.disguise.disguisetypes.watchers.AgeableWatcher;
import me.libraryaddict.disguise.disguisetypes.watchers.PlayerWatcher;
import me.libraryaddict.disguise.disguisetypes.watchers.ZombieWatcher;
import me.libraryaddict.disguise.utilities.PacketsManager.LibsPackets;
+import me.libraryaddict.disguise.utilities.backwards.BackwardMethods;
+import me.libraryaddict.disguise.utilities.backwards.BackwardsSupport;
import me.libraryaddict.disguise.utilities.json.*;
import org.bukkit.*;
import org.bukkit.block.BlockFace;
@@ -46,8 +47,6 @@ import java.io.File;
import java.io.FileReader;
import java.io.PrintWriter;
import java.lang.reflect.*;
-import java.net.URL;
-import java.net.URLClassLoader;
import java.util.*;
import java.util.regex.Pattern;
@@ -74,6 +73,7 @@ public class DisguiseUtilities {
private static File profileCache = new File("plugins/LibsDisguises/GameProfiles"), savedDisguises = new File(
"plugins/LibsDisguises/SavedDisguises");
private static Gson gson;
+ private static BackwardMethods methods;
public static void saveDisguises() {
Iterator> itel = disguisesInUse.values().iterator();
@@ -132,7 +132,7 @@ public class DisguiseUtilities {
}
public static void saveDisguises(UUID owningEntity, Disguise[] disguise) {
- if (!LibVersion.isPremium())
+ if (!LibsVersion.isPremium())
return;
try {
@@ -171,7 +171,7 @@ public class DisguiseUtilities {
}
public static Disguise[] getSavedDisguises(UUID entityUUID, boolean remove) {
- if (!isSavedDisguise(entityUUID) || !LibVersion.isPremium())
+ if (!isSavedDisguise(entityUUID) || !LibsVersion.isPremium())
return new Disguise[0];
File disguiseFile = new File(savedDisguises, entityUUID.toString());
@@ -773,6 +773,7 @@ public class DisguiseUtilities {
public static void init(LibsDisguises disguises) {
libsDisguises = disguises;
+ methods = BackwardsSupport.getMethods();
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(MetaIndex.class, new SerializerMetaIndex());
@@ -848,7 +849,7 @@ public class DisguiseUtilities {
savedDisguiseList.add(UUID.fromString(key));
}
- LibVersion.check(libsDisguises);
+ LibsVersion.check(libsDisguises);
}
public static boolean isDisguiseInUse(Disguise disguise) {
diff --git a/src/me/libraryaddict/disguise/utilities/LibVersion.java b/src/me/libraryaddict/disguise/utilities/LibsVersion.java
similarity index 86%
rename from src/me/libraryaddict/disguise/utilities/LibVersion.java
rename to src/me/libraryaddict/disguise/utilities/LibsVersion.java
index 0b0cbd8f..9475de82 100644
--- a/src/me/libraryaddict/disguise/utilities/LibVersion.java
+++ b/src/me/libraryaddict/disguise/utilities/LibsVersion.java
@@ -10,7 +10,7 @@ import java.net.URLClassLoader;
/**
* Created by libraryaddict on 2/06/2017.
*/
-public class LibVersion {
+public class LibsVersion {
/**
* If you're seriously going to modify this to get the premium stuff for free, can you at least not
* distribute it? You didn't pay for it despite how cheap it is. You spend $8 on a trip to McDonalds
@@ -39,7 +39,12 @@ public class LibVersion {
thisPluginIsPaidFor = isPremium();
if (!isPremium() && disguises.getDescription().getVersion().contains("SNAPSHOT")) {
- for (File file : new File("plugins/LibsDisguises/").listFiles()) {
+ File[] files = new File("plugins/LibsDisguises/").listFiles();
+
+ if (files == null)
+ return;
+
+ for (File file : files) {
if (!file.isFile())
continue;
@@ -48,7 +53,7 @@ public class LibVersion {
try {
ClassLoader cl = new URLClassLoader(new URL[]{file.toURI().toURL()});
- Class c = cl.loadClass(LibVersion.class.getName());
+ Class c = cl.loadClass(LibsVersion.class.getName());
Method m = c.getMethod("isPremium");
thisPluginIsPaidFor = (Boolean) m.invoke(null);
@@ -56,10 +61,6 @@ public class LibVersion {
if (isPremium())
break;
}
- catch (ClassNotFoundException ex) {
- if (disguises.getDescription().getVersion().contains("9.3.0-SNAPSHOT"))
- thisPluginIsPaidFor = true;
- }
catch (Exception ex) {
// Don't print off errors
}
diff --git a/src/me/libraryaddict/disguise/utilities/ReflectionFlagWatchers.java b/src/me/libraryaddict/disguise/utilities/ReflectionFlagWatchers.java
index ba23b7ba..0406ca7b 100644
--- a/src/me/libraryaddict/disguise/utilities/ReflectionFlagWatchers.java
+++ b/src/me/libraryaddict/disguise/utilities/ReflectionFlagWatchers.java
@@ -7,16 +7,13 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
+import com.mysql.fabric.xmlrpc.base.Param;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Art;
import org.bukkit.Material;
import org.bukkit.TreeSpecies;
import org.bukkit.block.BlockFace;
-import org.bukkit.entity.Horse;
-import org.bukkit.entity.Llama;
-import org.bukkit.entity.Ocelot;
-import org.bukkit.entity.Rabbit;
-import org.bukkit.entity.Villager;
+import org.bukkit.entity.*;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffectType;
@@ -37,9 +34,7 @@ public class ReflectionFlagWatchers {
private String description;
public ParamInfo(Class paramClass, String name, String description) {
-
- this.name = name;
- this.description = description;
+ this(name, description);
this.paramClass = paramClass;
Enum[] enums = (Enum[]) paramClass.getEnumConstants();
@@ -51,24 +46,37 @@ public class ReflectionFlagWatchers {
this.enums[i] = enums[i].name();
}
}
+
+ paramList.add(this);
+ }
+
+ private ParamInfo(String name, String description) {
+ this.name = name;
+ this.description = description;
+ }
+
+ public ParamInfo(String className, String name, String description) throws ClassNotFoundException {
+ this(Class.forName(className), name, description);
}
public ParamInfo(Class paramClass, Enum[] enums, String name, String description) {
- this.name = name;
+ this(name, description);
this.enums = new String[enums.length];
- this.description = description;
this.paramClass = paramClass;
for (int i = 0; i < enums.length; i++) {
this.enums[i] = enums[i].name();
}
+
+ paramList.add(this);
}
public ParamInfo(Class paramClass, String name, String description, String[] enums) {
- this.name = name;
+ this(name, description);
this.enums = enums;
- this.description = description;
this.paramClass = paramClass;
+
+ paramList.add(this);
}
public boolean isEnums() {
@@ -92,7 +100,7 @@ public class ReflectionFlagWatchers {
}
}
- private static ArrayList paramList = new ArrayList();
+ private static ArrayList paramList = new ArrayList<>();
public static ArrayList getParamInfos() {
return paramList;
@@ -131,19 +139,29 @@ public class ReflectionFlagWatchers {
}
static {
- paramList.add(new ParamInfo(AnimalColor.class, "Animal Color", "View all the colors you can use for an animal color"));
- paramList.add(new ParamInfo(Art.class, "Art", "View all the paintings you can use for a painting disguise"));
- paramList.add(new ParamInfo(Llama.Color.class, "Llama Color", "View all the colors you can use for a llama color"));
- paramList.add(new ParamInfo(Horse.Color.class, "Horse Color", "View all the colors you can use for a horses color"));
- paramList.add(new ParamInfo(Ocelot.Type.class, "Ocelot Type", "View all the ocelot types you can use for ocelots"));
- paramList.add(new ParamInfo(Villager.Profession.class, "Villager Profession",
- "View all the professions you can set on a villager"));
- paramList.add(new ParamInfo(BlockFace.class, Arrays.copyOf(BlockFace.values(), 5), "Direction",
- "View the five directions usable on player setSleeping disguise"));
- paramList.add(new ParamInfo(Rabbit.Type.class, "Rabbit Type", "View the kinds of rabbits you can turn into"));
- paramList.add(new ParamInfo(TreeSpecies.class, "Tree Species", "View the different types of tree species"));
+ new ParamInfo(AnimalColor.class, "Animal Color", "View all the colors you can use for an animal color");
+ new ParamInfo(Art.class, "Art", "View all the paintings you can use for a painting disguise");
- ArrayList potionEnums = new ArrayList();
+ new ParamInfo(Llama.Color.class, "Llama Color", "View all the colors you can use for a llama color");
+
+ new ParamInfo(Horse.Color.class, "Horse Color", "View all the colors you can use for a horses color");
+
+ new ParamInfo(Ocelot.Type.class, "Ocelot Type", "View all the ocelot types you can use for ocelots");
+ new ParamInfo(Villager.Profession.class, "Villager Profession",
+ "View all the professions you can set on a villager");
+ new ParamInfo(BlockFace.class, Arrays.copyOf(BlockFace.values(), 5), "Direction",
+ "View the five directions usable on player setSleeping disguise");
+ new ParamInfo(Rabbit.Type.class, "Rabbit Type", "View the kinds of rabbits you can turn into");
+ new ParamInfo(TreeSpecies.class, "Tree Species", "View the different types of tree species");
+
+ try {
+ new ParamInfo("org.bukkit.entity.Parrot$Variant", "Parrot Variant",
+ "View the different colors a parrot can be");
+ }
+ catch (ClassNotFoundException ex) {// Dont handle
+ }
+
+ ArrayList potionEnums = new ArrayList<>();
for (PotionEffectType effectType : PotionEffectType.values()) {
if (effectType == null)
@@ -157,16 +175,17 @@ public class ReflectionFlagWatchers {
materials[i] = Material.values()[i].name();
}
- paramList.add(new ParamInfo(ItemStack.class, "Item (id:damage)", "An ItemStack compromised of ID:Durability", materials));
+ new ParamInfo(ItemStack.class, "Item (id:damage)", "An ItemStack compromised of ID:Durability", materials);
- paramList.add(new ParamInfo(ItemStack[].class, "Four ItemStacks (id:damage,id:damage..)",
- "Four ItemStacks seperated by an ,", materials) {
+ new ParamInfo(ItemStack[].class, "Four ItemStacks (id:damage,id:damage..)", "Four ItemStacks seperated by an ,",
+ materials) {
@Override
public String[] getEnums(String tabComplete) {
- String beginning = tabComplete.substring(0, tabComplete.contains(",") ? tabComplete.lastIndexOf(",") + 1 : 0);
+ String beginning = tabComplete.substring(0,
+ tabComplete.contains(",") ? tabComplete.lastIndexOf(",") + 1 : 0);
String end = tabComplete.substring(tabComplete.contains(",") ? tabComplete.lastIndexOf(",") + 1 : 0);
- ArrayList toReturn = new ArrayList();
+ ArrayList toReturn = new ArrayList<>();
for (String material : super.getEnums("")) {
if (!material.toLowerCase().startsWith(end.toLowerCase()))
@@ -177,23 +196,22 @@ public class ReflectionFlagWatchers {
return toReturn.toArray(new String[0]);
}
+ };
- });
+ new ParamInfo(PotionEffectType.class, "Potion Effect", "View all the potion effects you can add",
+ potionEnums.toArray(new String[0]));
+ new ParamInfo(String.class, "Text", "A line of text");
+ new ParamInfo(boolean.class, "True/False", "True or False", new String[]{"true", "false"});
+ new ParamInfo(int.class, "Number", "A whole number, no decimcals");
+ new ParamInfo(double.class, "Number", "A number which can have decimals");
+ new ParamInfo(float.class, "Number", "A number which can have decimals");
- paramList.add(new ParamInfo(PotionEffectType.class, "Potion Effect", "View all the potion effects you can add",
- potionEnums.toArray(new String[0])));
- paramList.add(new ParamInfo(String.class, "Text", "A line of text"));
- paramList.add(new ParamInfo(boolean.class, "True/False", "True or False", new String[] {
- "true", "false"
- }));
- paramList.add(new ParamInfo(int.class, "Number", "A whole number, no decimcals"));
- paramList.add(new ParamInfo(double.class, "Number", "A number which can have decimals"));
- paramList.add(new ParamInfo(float.class, "Number", "A number which can have decimals"));
- paramList.add(new ParamInfo(Horse.Style.class, "Horse Style", "Horse style which is the patterns on the horse"));
- paramList.add(new ParamInfo(int[].class, "number,number,number...", "Numbers seperated by an ,"));
- paramList.add(new ParamInfo(BlockPosition.class, "Block Position (num,num,num)", "Three numbers seperated by an ,"));
- paramList.add(new ParamInfo(GameProfile.class, "GameProfile",
- "Get the gameprofile here https://sessionserver.mojang.com/session/minecraft/profile/PLAYER_UUID_GOES_HERE?unsigned=false"));
+ new ParamInfo(Horse.Style.class, "Horse Style", "Horse style which is the patterns on the horse");
+ new ParamInfo(int[].class, "number,number,number...", "Numbers seperated by an ,");
+
+ new ParamInfo(BlockPosition.class, "Block Position (num,num,num)", "Three numbers seperated by an ,");
+ new ParamInfo(GameProfile.class, "GameProfile",
+ "Get the gameprofile here https://sessionserver.mojang.com/session/minecraft/profile/PLAYER_UUID_GOES_HERE?unsigned=false");
Collections.sort(paramList, new Comparator() {
@Override
@@ -213,27 +231,21 @@ public class ReflectionFlagWatchers {
if (method.getParameterTypes().length != 1) {
itel.remove();
- }
- else if (method.getName().startsWith("get")) {
+ } else if (method.getName().startsWith("get")) {
itel.remove();
- }
- else if (method.getAnnotation(Deprecated.class) != null) {
+ } else if (method.getAnnotation(Deprecated.class) != null) {
itel.remove();
- }
- else if (getParamInfo(method.getParameterTypes()[0]) == null) {
+ } else if (getParamInfo(method.getParameterTypes()[0]) == null) {
itel.remove();
- }
- else if (!method.getReturnType().equals(Void.TYPE)) {
+ } else if (!method.getReturnType().equals(Void.TYPE)) {
itel.remove();
- }
- else if (method.getName().equals("removePotionEffect")) {
+ } else if (method.getName().equals("removePotionEffect")) {
itel.remove();
}
}
- for (String methodName : new String[] {
- "setViewSelfDisguise", "setHideHeldItemFromSelf", "setHideArmorFromSelf", "setHearSelfDisguise", "setHidePlayer"
- }) {
+ for (String methodName : new String[]{"setViewSelfDisguise", "setHideHeldItemFromSelf", "setHideArmorFromSelf",
+ "setHearSelfDisguise", "setHidePlayer"}) {
try {
methods.add(Disguise.class.getMethod(methodName, boolean.class));
}
diff --git a/src/me/libraryaddict/disguise/utilities/ReflectionManager.java b/src/me/libraryaddict/disguise/utilities/ReflectionManager.java
index f6cfc3b8..4dc53e56 100644
--- a/src/me/libraryaddict/disguise/utilities/ReflectionManager.java
+++ b/src/me/libraryaddict/disguise/utilities/ReflectionManager.java
@@ -1,47 +1,30 @@
package me.libraryaddict.disguise.utilities;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.UUID;
-import java.util.regex.Pattern;
-
+import com.comphenix.protocol.wrappers.*;
+import com.comphenix.protocol.wrappers.EnumWrappers.Direction;
+import com.comphenix.protocol.wrappers.WrappedDataWatcher.Registry;
+import com.comphenix.protocol.wrappers.WrappedDataWatcher.Serializer;
+import com.comphenix.protocol.wrappers.WrappedDataWatcher.WrappedDataWatcherObject;
+import com.comphenix.protocol.wrappers.nbt.NbtBase;
+import com.comphenix.protocol.wrappers.nbt.NbtCompound;
+import com.comphenix.protocol.wrappers.nbt.NbtFactory;
+import com.comphenix.protocol.wrappers.nbt.NbtWrapper;
+import com.google.common.base.Optional;
+import com.google.gson.Gson;
+import me.libraryaddict.disguise.disguisetypes.DisguiseType;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
-import org.bukkit.Art;
-import org.bukkit.Bukkit;
-import org.bukkit.Location;
-import org.bukkit.Material;
-import org.bukkit.Sound;
-import org.bukkit.World;
-import org.bukkit.entity.Ambient;
-import org.bukkit.entity.Entity;
-import org.bukkit.entity.LivingEntity;
-import org.bukkit.entity.Monster;
-import org.bukkit.entity.Player;
+import org.bukkit.*;
+import org.bukkit.entity.*;
import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
-import com.comphenix.protocol.wrappers.BlockPosition;
-import com.comphenix.protocol.wrappers.EnumWrappers.Direction;
-import com.comphenix.protocol.wrappers.MinecraftKey;
-import com.comphenix.protocol.wrappers.Vector3F;
-import com.comphenix.protocol.wrappers.WrappedBlockData;
-import com.comphenix.protocol.wrappers.WrappedDataWatcher.Registry;
-import com.comphenix.protocol.wrappers.WrappedDataWatcher.Serializer;
-import com.comphenix.protocol.wrappers.WrappedDataWatcher.WrappedDataWatcherObject;
-import com.comphenix.protocol.wrappers.WrappedGameProfile;
-import com.comphenix.protocol.wrappers.WrappedSignedProperty;
-import com.comphenix.protocol.wrappers.WrappedWatchableObject;
-import com.google.common.base.Optional;
-import com.google.gson.Gson;
-
-import me.libraryaddict.disguise.disguisetypes.DisguiseType;
+import java.lang.reflect.*;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.UUID;
+import java.util.regex.Pattern;
public class ReflectionManager {
private static final String bukkitVersion = Bukkit.getServer().getClass().getName().split("\\.")[3];
@@ -863,6 +846,8 @@ public class ReflectionManager {
return getNmsItem((ItemStack) value);
} else if (value instanceof Double)
return ((Double) value).floatValue();
+ else if (value instanceof NbtCompound)
+ return ((NbtWrapper)value).getHandle();
return value;
}
diff --git a/src/me/libraryaddict/disguise/utilities/backwards/BackwardMethods.java b/src/me/libraryaddict/disguise/utilities/backwards/BackwardMethods.java
new file mode 100644
index 00000000..b6da500c
--- /dev/null
+++ b/src/me/libraryaddict/disguise/utilities/backwards/BackwardMethods.java
@@ -0,0 +1,11 @@
+package me.libraryaddict.disguise.utilities.backwards;
+
+/**
+ * Created by libraryaddict on 8/06/2017.
+ */
+public class BackwardMethods {
+
+ public boolean isOrderedIndexes() {
+ return true;
+ }
+}
diff --git a/src/me/libraryaddict/disguise/utilities/backwards/BackwardsSupport.java b/src/me/libraryaddict/disguise/utilities/backwards/BackwardsSupport.java
new file mode 100644
index 00000000..fcb2332e
--- /dev/null
+++ b/src/me/libraryaddict/disguise/utilities/backwards/BackwardsSupport.java
@@ -0,0 +1,56 @@
+package me.libraryaddict.disguise.utilities.backwards;
+
+import me.libraryaddict.disguise.disguisetypes.MetaIndex;
+import me.libraryaddict.disguise.utilities.ReflectionManager;
+import me.libraryaddict.disguise.utilities.backwards.metadata.Version_1_1;
+
+import java.lang.reflect.Field;
+
+/**
+ * Created by libraryaddict on 8/06/2017.
+ */
+public class BackwardsSupport {
+ public static BackwardMethods getMethods() {
+ try {
+ String version = ReflectionManager.getBukkitVersion();
+
+ if (version.equals("v1_11_R1")) {
+ return setupMetadata(Version_1_1.class);
+ }
+
+ return setupMetadata(BackwardMethods.class);
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ return null;
+ }
+
+ private static BackwardMethods setupMetadata(Class extends BackwardMethods> backwardsClass) {
+ try {
+ BackwardMethods backwards = backwardsClass.newInstance();
+
+ for (Field field : backwards.getClass().getFields()) {
+ if (field.getType() != MetaIndex.class)
+ continue;
+
+ MetaIndex.setMetaIndex(field.getName(), (MetaIndex) field.get(backwards));
+ }
+
+ MetaIndex.setValues();
+
+ if (backwards.isOrderedIndexes()) {
+ MetaIndex.fillInBlankIndexes();
+ MetaIndex.orderMetaIndexes();
+ }
+
+ return backwards;
+ }
+ catch (Exception ex) {
+ ex.printStackTrace();
+ }
+
+ return null;
+ }
+}
diff --git a/src/me/libraryaddict/disguise/utilities/backwards/metadata/Version_1_1.java b/src/me/libraryaddict/disguise/utilities/backwards/metadata/Version_1_1.java
new file mode 100644
index 00000000..ac4edfc3
--- /dev/null
+++ b/src/me/libraryaddict/disguise/utilities/backwards/metadata/Version_1_1.java
@@ -0,0 +1,18 @@
+package me.libraryaddict.disguise.utilities.backwards.metadata;
+
+import com.comphenix.protocol.wrappers.nbt.NbtCompound;
+import com.comphenix.protocol.wrappers.nbt.NbtFactory;
+import me.libraryaddict.disguise.disguisetypes.MetaIndex;
+import me.libraryaddict.disguise.disguisetypes.watchers.PlayerWatcher;
+import me.libraryaddict.disguise.utilities.backwards.BackwardMethods;
+
+/**
+ * Created by libraryaddict on 8/06/2017.
+ * Supports 1.11.0 1.11.1 and 1.11.2
+ */
+public class Version_1_1 extends BackwardMethods {
+ private MetaIndex ILLAGER_META;
+ private MetaIndex PARROT_VARIANT;
+ private MetaIndex PLAYER_LEFT_SHOULDER_ENTITY;
+ private MetaIndex PLAYER_RIGHT_SHOULDER_ENTITY;
+}
diff --git a/src/me/libraryaddict/disguise/utilities/packetlisteners/PacketListenerSounds.java b/src/me/libraryaddict/disguise/utilities/packetlisteners/PacketListenerSounds.java
index 8b20d295..244e1fda 100644
--- a/src/me/libraryaddict/disguise/utilities/packetlisteners/PacketListenerSounds.java
+++ b/src/me/libraryaddict/disguise/utilities/packetlisteners/PacketListenerSounds.java
@@ -27,29 +27,24 @@ import me.libraryaddict.disguise.utilities.DisguiseSound.SoundType;
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
import me.libraryaddict.disguise.utilities.ReflectionManager;
-public class PacketListenerSounds extends PacketAdapter
-{
+public class PacketListenerSounds extends PacketAdapter {
/**
* This is a fix for the stupidity that is
* "I can't separate the sounds from the sounds the player heard, and the sounds of the entity tracker heard"
*/
private static boolean cancelSound;
- public PacketListenerSounds(LibsDisguises plugin)
- {
+ public PacketListenerSounds(LibsDisguises plugin) {
super(plugin, ListenerPriority.NORMAL, Server.NAMED_SOUND_EFFECT, Server.ENTITY_STATUS);
}
@Override
- public void onPacketSending(PacketEvent event)
- {
- if (event.isCancelled())
- {
+ public void onPacketSending(PacketEvent event) {
+ if (event.isCancelled()) {
return;
}
- if (event.isAsync())
- {
+ if (event.isAsync()) {
return;
}
@@ -62,20 +57,15 @@ public class PacketListenerSounds extends PacketAdapter
Player observer = event.getPlayer();
- if (event.getPacketType() == Server.NAMED_SOUND_EFFECT)
- {
+ if (event.getPacketType() == Server.NAMED_SOUND_EFFECT) {
SoundType soundType = null;
- int[] soundCords = new int[]
- {
- (Integer) mods.read(2), (Integer) mods.read(3), (Integer) mods.read(4)
- };
+ int[] soundCords = new int[]{(Integer) mods.read(2), (Integer) mods.read(3), (Integer) mods.read(4)};
int chunkX = (int) Math.floor((soundCords[0] / 8D) / 16D);
int chunkZ = (int) Math.floor((soundCords[2] / 8D) / 16D);
- if (!observer.getWorld().isChunkLoaded(chunkX, chunkZ))
- {
+ if (!observer.getWorld().isChunkLoaded(chunkX, chunkZ)) {
return;
}
@@ -87,87 +77,68 @@ public class PacketListenerSounds extends PacketAdapter
String soundEffect = ReflectionManager.convertSoundEffectToString(mods.read(0));
Entity[] entities = observer.getWorld().getChunkAt(chunkX, chunkZ).getEntities();
- for (Entity entity : entities)
- {
+ for (Entity entity : entities) {
Disguise entityDisguise = DisguiseAPI.getDisguise(observer, entity);
- if (entityDisguise != null)
- {
+ if (entityDisguise != null) {
Location loc = entity.getLocation();
- int[] entCords = new int[]
- {
- (int) (loc.getX() * 8), (int) (loc.getY() * 8), (int) (loc.getZ() * 8)
- };
+ int[] entCords = new int[]{(int) (loc.getX() * 8), (int) (loc.getY() * 8), (int) (loc.getZ() * 8)};
- if (soundCords[0] != entCords[0] || soundCords[1] != entCords[1] || soundCords[2] != entCords[2])
- {
+ if (soundCords[0] != entCords[0] || soundCords[1] != entCords[1] || soundCords[2] != entCords[2]) {
continue;
}
entitySound = DisguiseSound.getType(entity.getType().name());
- if (entitySound == null)
- {
+ if (entitySound == null) {
continue;
}
Object obj = null;
- if (entity instanceof LivingEntity)
- {
- try
- {
+ if (entity instanceof LivingEntity) {
+ try {
// Use reflection so that this works for either int or double methods
obj = LivingEntity.class.getMethod("getHealth").invoke(entity);
- if (obj instanceof Double ? (Double) obj == 0 : (Integer) obj == 0)
- {
+ if (obj instanceof Double ? (Double) obj == 0 : (Integer) obj == 0) {
soundType = SoundType.DEATH;
- }
- else
- {
+ } else {
obj = null;
}
}
- catch (Exception e)
- {
+ catch (Exception e) {
e.printStackTrace();
}
}
- if (obj == null)
- {
+ if (obj == null) {
boolean hasInvun = false;
Object nmsEntity = ReflectionManager.getNmsEntity(entity);
- try
- {
- if (entity instanceof LivingEntity)
- {
- hasInvun = ReflectionManager.getNmsField("Entity", "noDamageTicks")
- .getInt(nmsEntity) == ReflectionManager.getNmsField("EntityLiving", "maxNoDamageTicks")
- .getInt(nmsEntity);
- }
- else
- {
+ try {
+ if (entity instanceof LivingEntity) {
+ hasInvun = ReflectionManager.getNmsField("Entity", "noDamageTicks").getInt(
+ nmsEntity) == ReflectionManager.getNmsField("EntityLiving",
+ "maxNoDamageTicks").getInt(nmsEntity);
+ } else {
Class clazz = ReflectionManager.getNmsClass("DamageSource");
- hasInvun = (Boolean) ReflectionManager.getNmsMethod("Entity", "isInvulnerable", clazz)
- .invoke(nmsEntity, ReflectionManager.getNmsField(clazz, "GENERIC").get(null));
+ hasInvun = (Boolean) ReflectionManager.getNmsMethod("Entity", "isInvulnerable",
+ clazz).invoke(nmsEntity,
+ ReflectionManager.getNmsField(clazz, "GENERIC").get(null));
}
}
- catch (Exception ex)
- {
+ catch (Exception ex) {
ex.printStackTrace();
}
soundType = entitySound.getType(soundEffect, !hasInvun);
}
- if (soundType != null)
- {
+ if (soundType != null) {
disguise = entityDisguise;
disguisedEntity = entity;
break;
@@ -175,9 +146,7 @@ public class PacketListenerSounds extends PacketAdapter
}
}
- if (disguise != null && disguise.isSoundsReplaced()
- && (disguise.isSelfDisguiseSoundsReplaced() || disguisedEntity != observer))
- {
+ if (disguise != null && disguise.isSoundsReplaced() && (disguise.isSelfDisguiseSoundsReplaced() || disguisedEntity != observer)) {
String sound = null;
DisguiseSound dSound = DisguiseSound.getType(disguise.getType().name());
@@ -185,92 +154,71 @@ public class PacketListenerSounds extends PacketAdapter
if (dSound != null)
sound = dSound.getSound(soundType);
- if (sound == null)
- {
+ if (sound == null) {
event.setCancelled(true);
- }
- else
- {
- if (sound.equals("step.grass"))
- {
- try
- {
+ } else {
+ if (sound.equals("step.grass")) {
+ try {
int typeId = observer.getWorld().getBlockTypeIdAt((int) Math.floor(soundCords[0] / 8D),
(int) Math.floor(soundCords[1] / 8D), (int) Math.floor(soundCords[2] / 8D));
- Object block = ReflectionManager.getNmsMethod("RegistryMaterials", "getId", int.class)
- .invoke(ReflectionManager.getNmsField("Block", "REGISTRY").get(null), typeId);
+ Object block = ReflectionManager.getNmsMethod("RegistryMaterials", "getId",
+ int.class).invoke(ReflectionManager.getNmsField("Block", "REGISTRY").get(null),
+ typeId);
- if (block != null)
- {
+ if (block != null) {
Object step = ReflectionManager.getNmsField("Block", "stepSound").get(block);
mods.write(0, ReflectionManager.getNmsMethod(step.getClass(), "d").invoke(step));
mods.write(1, ReflectionManager.getSoundCategory(disguise.getType()));
}
}
- catch (Exception ex)
- {
+ catch (Exception ex) {
ex.printStackTrace();
}
// There is no else statement. Because seriously. This should never be null. Unless
// someone is
// sending fake sounds. In which case. Why cancel it.
- }
- else
- {
+ } else {
mods.write(0, ReflectionManager.getCraftSoundEffect(sound));
mods.write(1, ReflectionManager.getSoundCategory(disguise.getType()));
// Time to change the pitch and volume
- if (soundType == SoundType.HURT || soundType == SoundType.DEATH || soundType == SoundType.IDLE)
- {
+ if (soundType == SoundType.HURT || soundType == SoundType.DEATH || soundType == SoundType.IDLE) {
// If the volume is the default
- if (mods.read(5).equals(entitySound.getDamageAndIdleSoundVolume()))
- {
+ if (mods.read(5).equals(entitySound.getDamageAndIdleSoundVolume())) {
mods.write(5, dSound.getDamageAndIdleSoundVolume());
}
// Here I assume its the default pitch as I can't calculate if its real.
- if (disguise instanceof MobDisguise && disguisedEntity instanceof LivingEntity
- && ((MobDisguise) disguise).doesDisguiseAge())
- {
+ if (disguise instanceof MobDisguise && disguisedEntity instanceof LivingEntity && ((MobDisguise) disguise).doesDisguiseAge()) {
boolean baby = false;
- if (disguisedEntity instanceof Zombie)
- {
+ if (disguisedEntity instanceof Zombie) {
baby = ((Zombie) disguisedEntity).isBaby();
- }
- else if (disguisedEntity instanceof Ageable)
- {
+ } else if (disguisedEntity instanceof Ageable) {
baby = !((Ageable) disguisedEntity).isAdult();
}
- if (((MobDisguise) disguise).isAdult() == baby)
- {
+ if (((MobDisguise) disguise).isAdult() == baby) {
float pitch = (Float) mods.read(6);
- if (baby)
- {
+ if (baby) {
// If the pitch is not the expected
if (pitch > 97 || pitch < 111)
return;
- pitch = (DisguiseUtilities.random.nextFloat() - DisguiseUtilities.random.nextFloat())
- * 0.2F + 1.5F;
+ pitch = (DisguiseUtilities.random.nextFloat() - DisguiseUtilities.random.nextFloat()) * 0.2F + 1.5F;
// Min = 1.5
// Cap = 97.5
// Max = 1.7
// Cap = 110.5
- }
- else
- {
+ } else {
// If the pitch is not the expected
if (pitch >= 63 || pitch <= 76)
return;
- pitch = (DisguiseUtilities.random.nextFloat() - DisguiseUtilities.random.nextFloat())
- * 0.2F + 1.0F;
+ pitch = (DisguiseUtilities.random.nextFloat() - DisguiseUtilities.random.nextFloat()) * 0.2F + 1.0F;
// Min = 1
// Cap = 63
// Max = 1.2
@@ -292,11 +240,8 @@ public class PacketListenerSounds extends PacketAdapter
}
}
}
- }
- else if (event.getPacketType() == Server.ENTITY_STATUS)
- {
- if ((byte) mods.read(1) != 2)
- {
+ } else if (event.getPacketType() == Server.ENTITY_STATUS) {
+ if ((byte) mods.read(1) != 2) {
return;
}
@@ -305,9 +250,7 @@ public class PacketListenerSounds extends PacketAdapter
Disguise disguise = DisguiseAPI.getDisguise(observer, entity);
- if (disguise != null && !disguise.getType().isPlayer()
- && (disguise.isSelfDisguiseSoundsReplaced() || entity != event.getPlayer()))
- {
+ if (disguise != null && !disguise.getType().isPlayer() && (disguise.isSelfDisguiseSoundsReplaced() || entity != event.getPlayer())) {
DisguiseSound disSound = DisguiseSound.getType(entity.getType().name());
if (disSound == null)
@@ -316,37 +259,28 @@ public class PacketListenerSounds extends PacketAdapter
SoundType soundType = null;
Object obj = null;
- if (entity instanceof LivingEntity)
- {
- try
- {
+ if (entity instanceof LivingEntity) {
+ try {
obj = LivingEntity.class.getMethod("getHealth").invoke(entity);
- if (obj instanceof Double ? (Double) obj == 0 : (Integer) obj == 0)
- {
+ if (obj instanceof Double ? (Double) obj == 0 : (Integer) obj == 0) {
soundType = SoundType.DEATH;
- }
- else
- {
+ } else {
obj = null;
}
}
- catch (Exception e)
- {
+ catch (Exception e) {
e.printStackTrace();
}
}
- if (obj == null)
- {
+ if (obj == null) {
soundType = SoundType.HURT;
}
- if (disSound.getSound(soundType) == null
- || (disguise.isSelfDisguiseSoundsReplaced() && entity == event.getPlayer()))
- {
- if (disguise.isSelfDisguiseSoundsReplaced() && entity == event.getPlayer())
- {
+ if (disSound.getSound(
+ soundType) == null || (disguise.isSelfDisguiseSoundsReplaced() && entity == event.getPlayer())) {
+ if (disguise.isSelfDisguiseSoundsReplaced() && entity == event.getPlayer()) {
cancelSound = !cancelSound;
if (cancelSound)
@@ -355,12 +289,10 @@ public class PacketListenerSounds extends PacketAdapter
disSound = DisguiseSound.getType(disguise.getType().name());
- if (disSound != null)
- {
+ if (disSound != null) {
String sound = disSound.getSound(soundType);
- if (sound != null)
- {
+ if (sound != null) {
Location loc = entity.getLocation();
PacketContainer packet = new PacketContainer(Server.NAMED_SOUND_EFFECT);
@@ -378,14 +310,10 @@ public class PacketListenerSounds extends PacketAdapter
float pitch;
- if (disguise instanceof MobDisguise && !((MobDisguise) disguise).isAdult())
- {
- pitch = (DisguiseUtilities.random.nextFloat() - DisguiseUtilities.random.nextFloat()) * 0.2F
- + 1.5F;
- }
- else
- pitch = (DisguiseUtilities.random.nextFloat() - DisguiseUtilities.random.nextFloat()) * 0.2F
- + 1.0F;
+ if (disguise instanceof MobDisguise && !((MobDisguise) disguise).isAdult()) {
+ pitch = (DisguiseUtilities.random.nextFloat() - DisguiseUtilities.random.nextFloat()) * 0.2F + 1.5F;
+ } else
+ pitch = (DisguiseUtilities.random.nextFloat() - DisguiseUtilities.random.nextFloat()) * 0.2F + 1.0F;
if (disguise.getType() == DisguiseType.BAT)
pitch *= 95F;
@@ -400,12 +328,10 @@ public class PacketListenerSounds extends PacketAdapter
mods.write(6, (int) pitch);
- try
- {
+ try {
ProtocolLibrary.getProtocolManager().sendServerPacket(observer, packet, false);
}
- catch (InvocationTargetException e)
- {
+ catch (InvocationTargetException e) {
e.printStackTrace();
}
}