From 272239b31b0e48ef8e4e8190eb48ff94d3f40a32 Mon Sep 17 00:00:00 2001 From: Dawson <30784509+funkemunky@users.noreply.github.com> Date: Wed, 21 Sep 2022 10:07:23 -0400 Subject: [PATCH] Scanning for actions added --- .../brighten/ac/data/info/CheckHandler.java | 85 +++++++++++++++++++ .../ac/handler/prediction/Iteration.java | 11 +++ .../ac/handler/prediction/MoveHandler.java | 6 ++ 3 files changed, 102 insertions(+) create mode 100644 src/main/java/dev/brighten/ac/handler/prediction/Iteration.java create mode 100644 src/main/java/dev/brighten/ac/handler/prediction/MoveHandler.java diff --git a/src/main/java/dev/brighten/ac/data/info/CheckHandler.java b/src/main/java/dev/brighten/ac/data/info/CheckHandler.java index 5b41641..5fd7e5c 100644 --- a/src/main/java/dev/brighten/ac/data/info/CheckHandler.java +++ b/src/main/java/dev/brighten/ac/data/info/CheckHandler.java @@ -6,11 +6,17 @@ import dev.brighten.ac.data.APlayer; import dev.brighten.ac.data.obj.ActionStore; import dev.brighten.ac.data.obj.CancellableActionStore; import dev.brighten.ac.data.obj.TimedActionStore; +import dev.brighten.ac.packet.wrapper.WPacket; import dev.brighten.ac.utils.Tuple; +import dev.brighten.ac.utils.reflections.types.WrappedClass; import dev.brighten.ac.utils.reflections.types.WrappedField; import lombok.RequiredArgsConstructor; +import net.minecraft.server.v1_8_R3.Packet; +import org.bukkit.Bukkit; import org.bukkit.event.Event; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; import java.util.*; @RequiredArgsConstructor @@ -113,6 +119,85 @@ public class CheckHandler { } } + public void registerActions(Object object) { + scanForActions(object.getClass()); + } + + private void scanForActions(Class clazz) { + WrappedClass wclass = new WrappedClass(clazz); + for (WrappedField field : wclass.getFields()) { + if(!WAction.class.isAssignableFrom(field.getType()) + && !WCancellable.class.isAssignableFrom(field.getType()) + && !WTimedAction.class.isAssignableFrom(field.getType())) continue; + + Type genericType = field.getField().getGenericType(); + Type type = null; + + if(genericType instanceof ParameterizedType) { + type = ((ParameterizedType) genericType).getActualTypeArguments()[0]; + } else type = genericType; + + if(type == null) { + Bukkit.getLogger().warning("Could not get type for field " + field.getField().getName() + + " in class " + clazz.getClass().getSimpleName()); + + continue; + } + + if(!Packet.class.isAssignableFrom((Class) type) + && !WPacket.class.isAssignableFrom((Class) type) + && !Event.class.isAssignableFrom((Class) type)) { + Bukkit.getLogger().warning("Type " + ((Class) type).getSimpleName() + " is not a valid type for field " + + field.getField().getName() + " in class " + clazz.getClass().getSimpleName()); + continue; + } + + if(field.getType().equals(WAction.class)) { + WAction action = field.get(clazz); + + synchronized (events) { + events.compute((Class)type, (packetClass, array) -> { + if (array == null) { + return new ActionStore[] {new ActionStore(action, wclass.getParent())}; + } else { + ActionStore[] newArray = Arrays.copyOf(array, array.length + 1); + newArray[array.length] = new ActionStore(action, wclass.getParent()); + return newArray; + } + }); + } + } else if(field.getType().equals(WTimedAction.class)) { //This will always be TimedAction + WTimedAction action = field.get(clazz); + + synchronized (eventsWithTimestamp) { + eventsWithTimestamp.compute((Class)type, (packetClass, array) -> { + if (array == null) { + return new TimedActionStore[] {new TimedActionStore(action, wclass.getParent())}; + } else { + TimedActionStore[] newArray = Arrays.copyOf(array, array.length + 1); + newArray[array.length] = new TimedActionStore(action, wclass.getParent()); + return newArray; + } + }); + } + } else if(field.getType().equals(WCancellable.class)) { + WCancellable action = field.get(clazz); + synchronized (cancellableEvents) { + cancellableEvents.compute((Class)type, (packetClass, array) -> { + if (array == null) { + return new CancellableActionStore[] + {new CancellableActionStore(action, wclass.getParent())}; + } else { + CancellableActionStore[] newArray = Arrays.copyOf(array, array.length + 1); + newArray[array.length] = new CancellableActionStore(action, wclass.getParent()); + return newArray; + } + }); + } + } + } + } + public void shutdown() { checks.clear(); events.clear(); diff --git a/src/main/java/dev/brighten/ac/handler/prediction/Iteration.java b/src/main/java/dev/brighten/ac/handler/prediction/Iteration.java new file mode 100644 index 0000000..3c6d960 --- /dev/null +++ b/src/main/java/dev/brighten/ac/handler/prediction/Iteration.java @@ -0,0 +1,11 @@ +package dev.brighten.ac.handler.prediction; + +import lombok.AllArgsConstructor; +import org.bukkit.Material; + +@AllArgsConstructor +public class Iteration { + public Material underMaterial, lastUnderMaterial; + public int f, s, fastMath; + public boolean sprinting, attack, using, sneaking, jumped; +} diff --git a/src/main/java/dev/brighten/ac/handler/prediction/MoveHandler.java b/src/main/java/dev/brighten/ac/handler/prediction/MoveHandler.java new file mode 100644 index 0000000..b84c208 --- /dev/null +++ b/src/main/java/dev/brighten/ac/handler/prediction/MoveHandler.java @@ -0,0 +1,6 @@ +package dev.brighten.ac.handler.prediction; + +public interface MoveHandler { + + void handle(); +}