From bcc44fadc6cd2f73ab159456cf210265f43fce43 Mon Sep 17 00:00:00 2001 From: cswhite2000 <18whitechristop@gmail.com> Date: Wed, 28 Jun 2017 00:41:39 -0700 Subject: [PATCH] Allow projectiles to apply kits when they hit players --- .../tc/oc/pgm/projectile/ProjectileDefinition.java | 13 ++++++++++++- .../tc/oc/pgm/projectile/ProjectileMatchModule.java | 6 ++++++ .../java/tc/oc/pgm/projectile/ProjectileModule.java | 6 +++++- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/PGM/src/main/java/tc/oc/pgm/projectile/ProjectileDefinition.java b/PGM/src/main/java/tc/oc/pgm/projectile/ProjectileDefinition.java index d1d60e5..7bb01a0 100644 --- a/PGM/src/main/java/tc/oc/pgm/projectile/ProjectileDefinition.java +++ b/PGM/src/main/java/tc/oc/pgm/projectile/ProjectileDefinition.java @@ -9,6 +9,7 @@ import java.time.Duration; import tc.oc.pgm.features.FeatureDefinition; import tc.oc.pgm.features.FeatureInfo; import tc.oc.pgm.filters.Filter; +import tc.oc.pgm.kits.Kit; @FeatureInfo(name = "projectile") public interface ProjectileDefinition extends FeatureDefinition { @@ -30,6 +31,8 @@ public interface ProjectileDefinition extends FeatureDefinition { Duration cooldown(); boolean throwable(); + + Kit kit(); } class ProjectileDefinitionImpl extends FeatureDefinition.Impl implements ProjectileDefinition { @@ -42,6 +45,7 @@ class ProjectileDefinitionImpl extends FeatureDefinition.Impl implements Project private @Inspect Filter destroyFilter; private @Inspect Duration coolDown; private @Inspect boolean throwable; + private @Inspect Kit kit; public ProjectileDefinitionImpl(@Nullable String name, @Nullable Double damage, @@ -51,7 +55,8 @@ class ProjectileDefinitionImpl extends FeatureDefinition.Impl implements Project List potion, Filter destroyFilter, Duration coolDown, - boolean throwable) { + boolean throwable, + Kit kit) { this.name = name; this.damage = damage; this.velocity = velocity; @@ -61,6 +66,7 @@ class ProjectileDefinitionImpl extends FeatureDefinition.Impl implements Project this.destroyFilter = destroyFilter; this.coolDown = coolDown; this.throwable = throwable; + this.kit = kit; } @Override @@ -108,4 +114,9 @@ class ProjectileDefinitionImpl extends FeatureDefinition.Impl implements Project public boolean throwable() { return throwable; } + + @Override + public Kit kit() { + return kit; + } } diff --git a/PGM/src/main/java/tc/oc/pgm/projectile/ProjectileMatchModule.java b/PGM/src/main/java/tc/oc/pgm/projectile/ProjectileMatchModule.java index aa34219..5671576 100644 --- a/PGM/src/main/java/tc/oc/pgm/projectile/ProjectileMatchModule.java +++ b/PGM/src/main/java/tc/oc/pgm/projectile/ProjectileMatchModule.java @@ -38,6 +38,12 @@ public class ProjectileMatchModule extends MatchModule implements Listener { if(projectileDefinition.damage() != null) { event.setDamage(projectileDefinition.damage()); } + + if (projectileDefinition.kit() != null) { + if (event.getEntity() instanceof Player) { + projectileDefinition.kit().apply(match.getPlayer((Player)event.getEntity())); + } + } } @EventHandler diff --git a/PGM/src/main/java/tc/oc/pgm/projectile/ProjectileModule.java b/PGM/src/main/java/tc/oc/pgm/projectile/ProjectileModule.java index 72e6f8c..4410da7 100644 --- a/PGM/src/main/java/tc/oc/pgm/projectile/ProjectileModule.java +++ b/PGM/src/main/java/tc/oc/pgm/projectile/ProjectileModule.java @@ -13,6 +13,8 @@ import java.time.Duration; import tc.oc.pgm.filters.Filter; import tc.oc.pgm.filters.parser.FilterParser; import tc.oc.pgm.kits.ItemParser; +import tc.oc.pgm.kits.Kit; +import tc.oc.pgm.kits.KitParser; import tc.oc.pgm.map.MapModule; import tc.oc.pgm.map.MapModuleContext; import tc.oc.pgm.map.MapModuleFactory; @@ -28,6 +30,7 @@ public class ProjectileModule implements MapModule { public @Nullable ProjectileModule parse(MapModuleContext context, Logger logger, Document doc) throws InvalidXMLException { final ItemParser itemParser = context.needModule(ItemParser.class); FilterParser filterParser = context.needModule(FilterParser.class); + KitParser kitParser = context.needModule(KitParser.class); for(Element projectileElement : XMLUtils.flattenElements(doc.getRootElement(), "projectiles", "projectile")) { String name = projectileElement.getAttributeValue("name"); @@ -39,8 +42,9 @@ public class ProjectileModule implements MapModule { Filter destroyFilter = filterParser.parseOptionalProperty(projectileElement, "destroy-filter").orElse(null); Duration coolDown = XMLUtils.parseDuration(projectileElement.getAttribute("cooldown")); boolean throwable = XMLUtils.parseBoolean(projectileElement.getAttribute("throwable"), true); + Kit kit = kitParser.parseOptionalProperty(projectileElement, "kit").orElse(null); - context.features().define(projectileElement, new ProjectileDefinitionImpl(name, damage, velocity, clickAction, entity, potionKit, destroyFilter, coolDown, throwable)); + context.features().define(projectileElement, new ProjectileDefinitionImpl(name, damage, velocity, clickAction, entity, potionKit, destroyFilter, coolDown, throwable, kit)); } return null;