diff --git a/src/com/massivecraft/massivecore/MassiveCore.java b/src/com/massivecraft/massivecore/MassiveCore.java index f45aa01b..f5d02490 100644 --- a/src/com/massivecraft/massivecore/MassiveCore.java +++ b/src/com/massivecraft/massivecore/MassiveCore.java @@ -87,6 +87,7 @@ import com.massivecraft.massivecore.mson.MsonEvent; import com.massivecraft.massivecore.nms.NmsBasics; import com.massivecraft.massivecore.nms.NmsBoard; import com.massivecraft.massivecore.nms.NmsChat; +import com.massivecraft.massivecore.nms.NmsEntityDamageEvent; import com.massivecraft.massivecore.nms.NmsEntityGet; import com.massivecraft.massivecore.nms.NmsItemStackCreate; import com.massivecraft.massivecore.nms.NmsItemStackCreate17R4P; @@ -262,6 +263,7 @@ public class MassiveCore extends MassivePlugin NmsBasics.class, NmsBoard.class, NmsChat.class, + NmsEntityDamageEvent.class, NmsEntityGet.class, NmsItemStackCreate.class, NmsItemStackTooltip.class, diff --git a/src/com/massivecraft/massivecore/command/type/RegistryType.java b/src/com/massivecraft/massivecore/command/type/RegistryType.java index cfe7a9bd..1b839807 100644 --- a/src/com/massivecraft/massivecore/command/type/RegistryType.java +++ b/src/com/massivecraft/massivecore/command/type/RegistryType.java @@ -25,6 +25,7 @@ import com.massivecraft.massivecore.command.type.container.TypeMap; import com.massivecraft.massivecore.command.type.container.TypeSet; import com.massivecraft.massivecore.command.type.enumeration.TypeBiome; import com.massivecraft.massivecore.command.type.enumeration.TypeChatColor; +import com.massivecraft.massivecore.command.type.enumeration.TypeDamageModifier; import com.massivecraft.massivecore.command.type.enumeration.TypeDifficulty; import com.massivecraft.massivecore.command.type.enumeration.TypeDyeColor; import com.massivecraft.massivecore.command.type.enumeration.TypeEntityType; @@ -221,6 +222,7 @@ public class RegistryType try { register(TypeRabbitType.get()); + register(TypeDamageModifier.get()); } catch (Throwable t) { diff --git a/src/com/massivecraft/massivecore/command/type/enumeration/TypeDamageModifier.java b/src/com/massivecraft/massivecore/command/type/enumeration/TypeDamageModifier.java new file mode 100644 index 00000000..8cededfb --- /dev/null +++ b/src/com/massivecraft/massivecore/command/type/enumeration/TypeDamageModifier.java @@ -0,0 +1,18 @@ +package com.massivecraft.massivecore.command.type.enumeration; + +import org.bukkit.event.entity.EntityDamageEvent.DamageModifier; + +public class TypeDamageModifier extends TypeEnum +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static TypeDamageModifier i = new TypeDamageModifier(); + public static TypeDamageModifier get() { return i; } + public TypeDamageModifier() + { + super(DamageModifier.class); + } + +} diff --git a/src/com/massivecraft/massivecore/nms/NmsEntityDamageEvent.java b/src/com/massivecraft/massivecore/nms/NmsEntityDamageEvent.java new file mode 100644 index 00000000..4319a4f8 --- /dev/null +++ b/src/com/massivecraft/massivecore/nms/NmsEntityDamageEvent.java @@ -0,0 +1,70 @@ +package com.massivecraft.massivecore.nms; + +import java.util.Map; + +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageModifier; + +import com.google.common.base.Function; +import com.massivecraft.massivecore.mixin.Mixin; + +public class NmsEntityDamageEvent extends Mixin +{ + // -------------------------------------------- // + // DEFAULT + // -------------------------------------------- // + + private static NmsEntityDamageEvent d = new NmsEntityDamageEvent().setAlternatives( + NmsEntityDamageEvent17R4P.class + ); + + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static NmsEntityDamageEvent i = d; + public static NmsEntityDamageEvent get() { return i; } + + // -------------------------------------------- // + // ACCESS > ORIGINALS + // -------------------------------------------- // + + public Map getOriginals(EntityDamageEvent event) + { + throw this.notImplemented(); + } + + public void setOriginals(EntityDamageEvent event, Map originals) + { + throw this.notImplemented(); + } + + // -------------------------------------------- // + // ACCESS > MODIFIERS + // -------------------------------------------- // + + public Map getModifiers(EntityDamageEvent event) + { + throw this.notImplemented(); + } + + public void setModifiers(EntityDamageEvent event, Map modifiers) + { + throw this.notImplemented(); + } + + // -------------------------------------------- // + // ACCESS > FUNCTIONS + // -------------------------------------------- // + + public Map> getFunctions(EntityDamageEvent event) + { + throw this.notImplemented(); + } + + public void setModifierFunctions(EntityDamageEvent event, Map> functions) + { + throw this.notImplemented(); + } + +} diff --git a/src/com/massivecraft/massivecore/nms/NmsEntityDamageEvent17R4P.java b/src/com/massivecraft/massivecore/nms/NmsEntityDamageEvent17R4P.java new file mode 100644 index 00000000..c0f49484 --- /dev/null +++ b/src/com/massivecraft/massivecore/nms/NmsEntityDamageEvent17R4P.java @@ -0,0 +1,97 @@ +package com.massivecraft.massivecore.nms; + +import java.lang.reflect.Field; +import java.util.Map; + +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageModifier; +import com.google.common.base.Function; +import com.massivecraft.massivecore.util.ReflectionUtil; + +public class NmsEntityDamageEvent17R4P extends NmsEntityDamageEvent +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static NmsEntityDamageEvent17R4P i = new NmsEntityDamageEvent17R4P(); + public static NmsEntityDamageEvent17R4P get() { return i; } + + // -------------------------------------------- // + // FIELDS + // -------------------------------------------- // + + // org.bukkit.event.entity.EntityDamageEvent + private Class classEntityDamageEvent; + + // org.bukkit.event.entity.EntityDamageEvent#originals + private Field fieldEntityDamageEventOriginals; + + // org.bukkit.event.entity.EntityDamageEvent#modifiers + private Field fieldEntityDamageEventModifiers; + + // org.bukkit.event.entity.EntityDamageEvent#modifierFunctions + private Field fieldEntityDamageEventFunctions; + + // -------------------------------------------- // + // SETUP + // -------------------------------------------- // + + @Override + public void setup() throws Throwable + { + this.classEntityDamageEvent = EntityDamageEvent.class; + this.fieldEntityDamageEventOriginals = ReflectionUtil.getField(this.classEntityDamageEvent, "originals"); + this.fieldEntityDamageEventModifiers = ReflectionUtil.getField(this.classEntityDamageEvent, "modifiers"); + this.fieldEntityDamageEventFunctions = ReflectionUtil.getField(this.classEntityDamageEvent, "modifierFunctions"); + } + + // -------------------------------------------- // + // ACCESS > ORIGINALS + // -------------------------------------------- // + + @Override + public Map getOriginals(EntityDamageEvent event) + { + return ReflectionUtil.getField(this.fieldEntityDamageEventOriginals, event); + } + + @Override + public void setOriginals(EntityDamageEvent event, Map originals) + { + ReflectionUtil.setField(this.fieldEntityDamageEventOriginals, event, originals); + } + + // -------------------------------------------- // + // ACCESS > MODIFIERS + // -------------------------------------------- // + + @Override + public Map getModifiers(EntityDamageEvent event) + { + return ReflectionUtil.getField(this.fieldEntityDamageEventModifiers, event); + } + + @Override + public void setModifiers(EntityDamageEvent event, Map modifiers) + { + ReflectionUtil.setField(this.fieldEntityDamageEventModifiers, event, modifiers); + } + + // -------------------------------------------- // + // ACCESS > FUNCTIONS + // -------------------------------------------- // + + @Override + public Map> getFunctions(EntityDamageEvent event) + { + return ReflectionUtil.getField(this.fieldEntityDamageEventFunctions, event); + } + + @Override + public void setModifierFunctions(EntityDamageEvent event, Map> functions) + { + ReflectionUtil.setField(this.fieldEntityDamageEventFunctions, event, functions); + } + +}