64 lines
1.7 KiB
Java
64 lines
1.7 KiB
Java
package de.mrbesen.cppplugins;
|
|
|
|
import lombok.Getter;
|
|
import lombok.RequiredArgsConstructor;
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.event.Event;
|
|
|
|
import java.lang.reflect.Field;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
import java.util.logging.Logger;
|
|
|
|
@RequiredArgsConstructor
|
|
public class CppEvent {
|
|
|
|
@Getter
|
|
private final String name;
|
|
private Map<String, Object> data = new HashMap<>();
|
|
private static Logger log = Bukkit.getLogger();
|
|
|
|
public static CppEvent cppify(Event e) {
|
|
log.info("cppifying event: " + e.getClass().getSimpleName());
|
|
CppEvent cppe = new CppEvent(e.getClass().getSimpleName());
|
|
|
|
for(Field field : e.getClass().getDeclaredFields()) {
|
|
log.fine("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) {
|
|
log.info("uncppifying event: " + original.getClass().getSimpleName() + " values: " + cppe.data.size());
|
|
if(!original.getClass().getSimpleName().equals(cppe.name))
|
|
throw new IllegalArgumentException("CppEvent does not match original event type!");
|
|
|
|
for(Field field : original.getClass().getDeclaredFields()) {
|
|
log.fine("try to set Field: " + field.getName());
|
|
|
|
Object value = cppe.data.get(field.getName());
|
|
if(value == null) {
|
|
log.fine("Data not available - skip");
|
|
continue;
|
|
}
|
|
log.fine("value: " + value);
|
|
|
|
if(!field.isAccessible()) field.setAccessible(true);
|
|
|
|
try {
|
|
field.set(original, value);
|
|
} catch (IllegalAccessException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
}
|