Add the ability to negate options instead of giving options

This commit is contained in:
libraryaddict 2013-12-14 17:01:25 +13:00
parent 09458d8e65
commit d4461f7ade
3 changed files with 48 additions and 3 deletions

View File

@ -64,7 +64,7 @@
<version>3.0.0-SNAPSHOT</version>
</dependency>
</dependencies>
<version>7.8</version>
<version>7.8-SNAPSHOT</version>
<distributionManagement>
<repository>

View File

@ -193,8 +193,12 @@ public class LibsDisguises extends JavaPlugin {
}
}
DisguiseValues disguiseValues = new DisguiseValues(disguiseType, nmsEntity.getClass(), entitySize);
for (WrappedWatchableObject watch : WrappedDataWatcher.getEntityWatcher(bukkitEntity).getWatchableObjects())
for (WrappedWatchableObject watch : WrappedDataWatcher.getEntityWatcher(bukkitEntity).getWatchableObjects()) {
disguiseValues.setMetaValue(watch.getIndex(), watch.getValue());
// Uncomment when I need to find the new datawatcher values for a class..
// System.out.print("Disguise: " + disguiseType + ", ID: " + watch.getIndex() + ", Class: "
// + (watch.getValue() == null ? "null" : watch.getValue()) + ", Value: " + watch.getValue());
}
DisguiseSound sound = DisguiseSound.getType(disguiseType.name());
if (sound != null) {
Float soundStrength = ReflectionManager.getSoundModifier(nmsEntity);

View File

@ -4,6 +4,7 @@ import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import me.libraryaddict.disguise.disguisetypes.AnimalColor;
import me.libraryaddict.disguise.disguisetypes.Disguise;
@ -371,10 +372,50 @@ public abstract class BaseDisguiseCommand implements CommandExecutor {
return disguise;
}
/* private ArrayList<Method> getUsableMethods(DisguiseType disguiseType, CommandSender commandSender) {
ArrayList<Method> methods = getSettableMethods(disguiseType);
ArrayList<String> allowedDisguises = this.getAllowedDisguises(commandSender);
}
private ArrayList<Method> getSettableMethods(DisguiseType disguiseType) {
ArrayList<Method> methods = new ArrayList<Method>();
String[] acceptableParams = new String[] { "String", "boolean", "int", "float", "double", "AnimalColor", "ItemStack",
"ItemStack[]", "Style", "Color", "Type", "Profession", "PotionEffectType" };
try {
for (Method method : disguiseType.getWatcherClass().getMethods()) {
if (!method.getName().startsWith("get") && method.getParameterTypes().length == 1
&& method.getAnnotation(Deprecated.class) == null) {
Class c = method.getParameterTypes()[0];
for (String acceptable : acceptableParams) {
if (c.getSimpleName().equals(acceptable)) {
methods.add(method);
break;
}
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
return methods;
}*/// //
private void doCheck(HashSet<HashSet<String>> optionPermissions, HashSet<String> usedOptions) throws Exception {
if (!optionPermissions.isEmpty()) {
for (HashSet<String> perms : optionPermissions) {
if (!perms.containsAll(usedOptions)) {
HashSet<String> cloned = (HashSet<String>) perms.clone();
Iterator<String> itel = cloned.iterator();
while (itel.hasNext()) {
String perm = itel.next();
if (perm.startsWith("-")) {
if (usedOptions.contains(perm.substring(1))) {
throw new Exception(ChatColor.RED + "You do not have the permission to use the option "
+ perm.substring(1));
}
itel.remove();
}
}
if (cloned.size() == perms.size() && !cloned.containsAll(usedOptions)) {
throw new Exception(ChatColor.RED + "You do not have the permission to use the option "
+ usedOptions.toArray(new String[usedOptions.size()])[usedOptions.size() - 1]);
}