Fix some disguise methods not working

This commit is contained in:
libraryaddict 2021-06-07 20:00:05 +12:00
parent 4bc046f4e3
commit 43aa37a9ec
2 changed files with 24 additions and 3 deletions

View File

@ -18,4 +18,10 @@ public class WatcherMethod {
private final Class returnType;
private final Class param;
private final boolean randomDefault;
@Override
public String toString() {
return "WatcherMethod{" + "watcherClass=" + watcherClass + ", method=" + method + ", name='" + name + '\'' + ", returnType=" + returnType + ", param=" +
param + ", randomDefault=" + randomDefault + '}';
}
}

View File

@ -8,6 +8,7 @@ import me.libraryaddict.disguise.disguisetypes.Disguise;
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
import me.libraryaddict.disguise.disguisetypes.PlayerDisguise;
import me.libraryaddict.disguise.disguisetypes.watchers.PlayerWatcher;
import me.libraryaddict.disguise.utilities.params.ParamInfoManager;
import me.libraryaddict.disguise.utilities.parser.WatcherMethod;
import me.libraryaddict.disguise.utilities.reflection.ReflectionManager;
@ -106,7 +107,8 @@ public class DisguiseMethods {
methods.add(m);
if (m.getName().startsWith("get") || m.getName().startsWith("has") || param == null || param == Void.TYPE || ParamInfoManager.getParamInfo(m) == null) {
if (m.getName().startsWith("get") || m.getName().startsWith("has") || param == null || param == Void.TYPE ||
ParamInfoManager.getParamInfo(m) == null) {
continue;
}
@ -122,6 +124,7 @@ public class DisguiseMethods {
try {
Class cl = boolean.class;
Class disguiseClass = Disguise.class;
boolean randomDefault = false;
switch (methodName) {
case "setExpires":
@ -136,8 +139,9 @@ public class DisguiseMethods {
case "setBossBarStyle":
cl = BarStyle.class;
break;
case "setSoundGroup":
case "setDisguiseName":
randomDefault = true;
case "setSoundGroup":
cl = String.class;
break;
case "setDeadmau5Ears":
@ -151,9 +155,20 @@ public class DisguiseMethods {
try {
WatcherMethod method = new WatcherMethod(disguiseClass,
MethodHandles.publicLookup().findVirtual(disguiseClass, methodName, MethodType.methodType(returnType, cl)), methodName,
null, cl, false);
null, cl, randomDefault);
methods.add(method);
watcherMethods.computeIfAbsent(disguiseClass == Disguise.class ? FlagWatcher.class : PlayerWatcher.class, (a) -> new ArrayList<>())
.add(method);
String getName = (cl == boolean.class ? "is" : "get") + methodName.substring(3);
WatcherMethod getMethod = new WatcherMethod(disguiseClass,
MethodHandles.publicLookup().findVirtual(disguiseClass, getName, MethodType.methodType(cl)), getName, cl, null,
randomDefault);
methods.add(getMethod);
break;
} catch (NoSuchMethodException ex) {
if (returnType == disguiseClass) {