58 lines
1.5 KiB
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();
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|