From a06987ccf4099ec19f28e92efd989cc2bd792c74 Mon Sep 17 00:00:00 2001 From: tastybento Date: Sun, 13 Sep 2020 10:53:35 -0700 Subject: [PATCH] Adds ability to write key values back to the event from plugins --- .../bentobox/api/events/BentoBoxEvent.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/main/java/world/bentobox/bentobox/api/events/BentoBoxEvent.java b/src/main/java/world/bentobox/bentobox/api/events/BentoBoxEvent.java index e99c6e377..20a2c9b0d 100644 --- a/src/main/java/world/bentobox/bentobox/api/events/BentoBoxEvent.java +++ b/src/main/java/world/bentobox/bentobox/api/events/BentoBoxEvent.java @@ -2,6 +2,7 @@ package world.bentobox.bentobox.api.events; import java.beans.IntrospectionException; import java.beans.Introspector; +import java.lang.reflect.InvocationTargetException; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; @@ -71,4 +72,26 @@ public abstract class BentoBoxEvent extends Event { return Collections.emptyMap(); } } + + /** + * Set values back to the event. Use {@link #getKeyValues()} to obtain the map + * @param map - key value map (Name of key, value - object) + * @since 1.15.1 + */ + public void setKeyValues(Map map) { + try { + Arrays.stream(Introspector.getBeanInfo(this.getClass(), BentoBoxEvent.class).getPropertyDescriptors()) + // only get setters + .filter(pd -> Objects.nonNull(pd.getWriteMethod())) + .forEach(pd -> { // invoke method to set value + if (map.containsKey(pd.getName())) { + try { + pd.getWriteMethod().invoke(this, map.get(pd.getName())); + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { + e.printStackTrace(); + } + } + }); + } catch (IntrospectionException ignore) {} + } }