CppPlugins/src/main/java/de/mrbesen/cppplugins/CppEvent.java

58 lines
1.5 KiB
Java

package de.mrbesen.cppplugins;
import lombok.RequiredArgsConstructor;
import org.bukkit.event.Event;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
@RequiredArgsConstructor
public class CppEvent {
private final String name;
Map<String, Object> data = new HashMap<>();
public static CppEvent cppify(Event e) {
System.out.println("cppifying event: " + e.getClass().getSimpleName());
CppEvent cppe = new CppEvent(e.getClass().getSimpleName());
for(Field field : e.getClass().getFields()) {
System.out.println("try to read Field: " + field.getName());
if(!field.isAccessible()) field.setAccessible(true);
try {
cppe.data.put(field.getName(), field.get(e));
} catch (IllegalAccessException ex) {
ex.printStackTrace();
}
}
return cppe;
}
public static void uncppify(CppEvent cppe, Event original) {
System.out.println("uncppifying event: " + original.getClass().getSimpleName());
if(!original.getClass().getSimpleName().equals(cppe.name))
throw new IllegalArgumentException("CppEvent does not match original event type!");
for(Field field : original.getClass().getFields()) {
System.out.println("try to set Field: " + field.getName());
if(!field.isAccessible()) field.setAccessible(true);
Object value = cppe.data.get(field.getName());
if(value == null) {
System.out.println("Data not available - skip");
continue;
}
try {
field.set(original, value);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
}