1
0
mirror of https://github.com/OvercastNetwork/ProjectAres.git synced 2025-04-11 22:56:08 +02:00

Allow projectiles to apply kits when they hit players

This commit is contained in:
cswhite2000 2017-06-28 00:41:39 -07:00
parent ae8a175eaa
commit bcc44fadc6
3 changed files with 23 additions and 2 deletions

View File

@ -9,6 +9,7 @@ import java.time.Duration;
import tc.oc.pgm.features.FeatureDefinition; import tc.oc.pgm.features.FeatureDefinition;
import tc.oc.pgm.features.FeatureInfo; import tc.oc.pgm.features.FeatureInfo;
import tc.oc.pgm.filters.Filter; import tc.oc.pgm.filters.Filter;
import tc.oc.pgm.kits.Kit;
@FeatureInfo(name = "projectile") @FeatureInfo(name = "projectile")
public interface ProjectileDefinition extends FeatureDefinition { public interface ProjectileDefinition extends FeatureDefinition {
@ -30,6 +31,8 @@ public interface ProjectileDefinition extends FeatureDefinition {
Duration cooldown(); Duration cooldown();
boolean throwable(); boolean throwable();
Kit kit();
} }
class ProjectileDefinitionImpl extends FeatureDefinition.Impl implements ProjectileDefinition { class ProjectileDefinitionImpl extends FeatureDefinition.Impl implements ProjectileDefinition {
@ -42,6 +45,7 @@ class ProjectileDefinitionImpl extends FeatureDefinition.Impl implements Project
private @Inspect Filter destroyFilter; private @Inspect Filter destroyFilter;
private @Inspect Duration coolDown; private @Inspect Duration coolDown;
private @Inspect boolean throwable; private @Inspect boolean throwable;
private @Inspect Kit kit;
public ProjectileDefinitionImpl(@Nullable String name, public ProjectileDefinitionImpl(@Nullable String name,
@Nullable Double damage, @Nullable Double damage,
@ -51,7 +55,8 @@ class ProjectileDefinitionImpl extends FeatureDefinition.Impl implements Project
List<PotionEffect> potion, List<PotionEffect> potion,
Filter destroyFilter, Filter destroyFilter,
Duration coolDown, Duration coolDown,
boolean throwable) { boolean throwable,
Kit kit) {
this.name = name; this.name = name;
this.damage = damage; this.damage = damage;
this.velocity = velocity; this.velocity = velocity;
@ -61,6 +66,7 @@ class ProjectileDefinitionImpl extends FeatureDefinition.Impl implements Project
this.destroyFilter = destroyFilter; this.destroyFilter = destroyFilter;
this.coolDown = coolDown; this.coolDown = coolDown;
this.throwable = throwable; this.throwable = throwable;
this.kit = kit;
} }
@Override @Override
@ -108,4 +114,9 @@ class ProjectileDefinitionImpl extends FeatureDefinition.Impl implements Project
public boolean throwable() { public boolean throwable() {
return throwable; return throwable;
} }
@Override
public Kit kit() {
return kit;
}
} }

View File

@ -38,6 +38,12 @@ public class ProjectileMatchModule extends MatchModule implements Listener {
if(projectileDefinition.damage() != null) { if(projectileDefinition.damage() != null) {
event.setDamage(projectileDefinition.damage()); event.setDamage(projectileDefinition.damage());
} }
if (projectileDefinition.kit() != null) {
if (event.getEntity() instanceof Player) {
projectileDefinition.kit().apply(match.getPlayer((Player)event.getEntity()));
}
}
} }
@EventHandler @EventHandler

View File

@ -13,6 +13,8 @@ import java.time.Duration;
import tc.oc.pgm.filters.Filter; import tc.oc.pgm.filters.Filter;
import tc.oc.pgm.filters.parser.FilterParser; import tc.oc.pgm.filters.parser.FilterParser;
import tc.oc.pgm.kits.ItemParser; 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.MapModule;
import tc.oc.pgm.map.MapModuleContext; import tc.oc.pgm.map.MapModuleContext;
import tc.oc.pgm.map.MapModuleFactory; 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 { public @Nullable ProjectileModule parse(MapModuleContext context, Logger logger, Document doc) throws InvalidXMLException {
final ItemParser itemParser = context.needModule(ItemParser.class); final ItemParser itemParser = context.needModule(ItemParser.class);
FilterParser filterParser = context.needModule(FilterParser.class); FilterParser filterParser = context.needModule(FilterParser.class);
KitParser kitParser = context.needModule(KitParser.class);
for(Element projectileElement : XMLUtils.flattenElements(doc.getRootElement(), "projectiles", "projectile")) { for(Element projectileElement : XMLUtils.flattenElements(doc.getRootElement(), "projectiles", "projectile")) {
String name = projectileElement.getAttributeValue("name"); String name = projectileElement.getAttributeValue("name");
@ -39,8 +42,9 @@ public class ProjectileModule implements MapModule {
Filter destroyFilter = filterParser.parseOptionalProperty(projectileElement, "destroy-filter").orElse(null); Filter destroyFilter = filterParser.parseOptionalProperty(projectileElement, "destroy-filter").orElse(null);
Duration coolDown = XMLUtils.parseDuration(projectileElement.getAttribute("cooldown")); Duration coolDown = XMLUtils.parseDuration(projectileElement.getAttribute("cooldown"));
boolean throwable = XMLUtils.parseBoolean(projectileElement.getAttribute("throwable"), true); 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; return null;