Skip to content

Commit 60a0806

Browse files
committed
Add potion_splash event (Closes #791)
1 parent cce9d74 commit 60a0806

File tree

6 files changed

+129
-32
lines changed

6 files changed

+129
-32
lines changed

src/main/java/com/laytonsmith/abstraction/bukkit/entities/BukkitMCEntity.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,4 +322,18 @@ public boolean removeScoreboardTag(String tag) {
322322
return e.removeScoreboardTag(tag);
323323
}
324324

325+
@Override
326+
public String toString() {
327+
return e.toString();
328+
}
329+
330+
@Override
331+
public boolean equals(Object obj) {
332+
return obj instanceof BukkitMCEntity && e.equals(((BukkitMCEntity) obj).getHandle());
333+
}
334+
335+
@Override
336+
public int hashCode() {
337+
return e.hashCode();
338+
}
325339
}

src/main/java/com/laytonsmith/abstraction/bukkit/entities/BukkitMCEntityProjectileSource.java

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -55,19 +55,4 @@ public MCProjectile launchProjectile(MCEntityType projectile, Vector3D init) {
5555
return null;
5656
}
5757
}
58-
59-
@Override
60-
public String toString() {
61-
return eps.toString();
62-
}
63-
64-
@Override
65-
public int hashCode() {
66-
return eps.hashCode();
67-
}
68-
69-
@Override
70-
public boolean equals(Object obj) {
71-
return eps.equals(obj);
72-
}
7358
}

src/main/java/com/laytonsmith/abstraction/bukkit/events/BukkitEntityEvents.java

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.laytonsmith.abstraction.MCEntity;
77
import com.laytonsmith.abstraction.blocks.MCBlockData;
88
import com.laytonsmith.abstraction.bukkit.blocks.BukkitMCBlockData;
9+
import com.laytonsmith.abstraction.bukkit.entities.BukkitMCThrownPotion;
910
import com.laytonsmith.abstraction.entities.MCHanging;
1011
import com.laytonsmith.abstraction.entities.MCItem;
1112
import com.laytonsmith.abstraction.MCItemStack;
@@ -28,6 +29,7 @@
2829
import com.laytonsmith.abstraction.bukkit.entities.BukkitMCPlayer;
2930
import com.laytonsmith.abstraction.bukkit.entities.BukkitMCProjectile;
3031
import com.laytonsmith.abstraction.entities.MCFirework;
32+
import com.laytonsmith.abstraction.entities.MCThrownPotion;
3133
import com.laytonsmith.abstraction.enums.MCDamageCause;
3234
import com.laytonsmith.abstraction.enums.MCEntityType;
3335
import com.laytonsmith.abstraction.enums.MCEquipmentSlot;
@@ -112,9 +114,10 @@
112114
import org.bukkit.util.Vector;
113115

114116
import java.util.ArrayList;
115-
import java.util.HashSet;
117+
import java.util.HashMap;
116118
import java.util.List;
117-
import java.util.Set;
119+
import java.util.Map;
120+
118121
import org.bukkit.event.entity.EntityUnleashEvent;
119122

120123
public class BukkitEntityEvents {
@@ -289,13 +292,11 @@ public MCEntityType getEntityType() {
289292
}
290293

291294
@abstraction(type = Implementation.Type.BUKKIT)
292-
public static class BukkitMCPotionSplashEvent extends BukkitMCProjectileHitEvent
293-
implements MCPotionSplashEvent {
295+
public static class BukkitMCPotionSplashEvent implements MCPotionSplashEvent {
294296

295297
PotionSplashEvent pse;
296298

297299
public BukkitMCPotionSplashEvent(Event event) {
298-
super(event);
299300
pse = (PotionSplashEvent) event;
300301
}
301302

@@ -305,17 +306,17 @@ public Object _GetObject() {
305306
}
306307

307308
@Override
308-
public Set<MCLivingEntity> getAffectedEntities() {
309-
Set<MCLivingEntity> ret = new HashSet<>();
310-
for(LivingEntity le : pse.getAffectedEntities()) {
311-
ret.add((MCLivingEntity) BukkitConvertor.BukkitGetCorrectEntity(le));
312-
}
313-
return ret;
309+
public MCThrownPotion getEntity() {
310+
return new BukkitMCThrownPotion(pse.getEntity());
314311
}
315312

316313
@Override
317-
public double getIntensity(MCLivingEntity le) {
318-
return pse.getIntensity(((BukkitMCLivingEntity) le).asLivingEntity());
314+
public Map<MCLivingEntity, Double> getAffectedEntities() {
315+
Map<MCLivingEntity, Double> ret = new HashMap<>();
316+
for(LivingEntity le : pse.getAffectedEntities()) {
317+
ret.put(new BukkitMCLivingEntity(le), pse.getIntensity(le));
318+
}
319+
return ret;
319320
}
320321

321322
@Override

src/main/java/com/laytonsmith/abstraction/bukkit/events/drivers/BukkitEntityListener.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import com.laytonsmith.abstraction.bukkit.events.BukkitEntityEvents.BukkitMCPlayerInteractAtEntityEvent;
2424
import com.laytonsmith.abstraction.bukkit.events.BukkitEntityEvents.BukkitMCPlayerInteractEntityEvent;
2525
import com.laytonsmith.abstraction.bukkit.events.BukkitEntityEvents.BukkitMCPlayerPickupItemEvent;
26+
import com.laytonsmith.abstraction.bukkit.events.BukkitEntityEvents.BukkitMCPotionSplashEvent;
2627
import com.laytonsmith.abstraction.bukkit.events.BukkitEntityEvents.BukkitMCProjectileHitEvent;
2728
import com.laytonsmith.abstraction.bukkit.events.BukkitEntityEvents.BukkitMCProjectileLaunchEvent;
2829
import com.laytonsmith.abstraction.bukkit.events.BukkitEntityEvents.BukkitMCTargetEvent;
@@ -52,6 +53,7 @@
5253
import org.bukkit.event.entity.ItemDespawnEvent;
5354
import org.bukkit.event.entity.ItemSpawnEvent;
5455
import org.bukkit.event.entity.PlayerDeathEvent;
56+
import org.bukkit.event.entity.PotionSplashEvent;
5557
import org.bukkit.event.entity.ProjectileHitEvent;
5658
import org.bukkit.event.entity.ProjectileLaunchEvent;
5759
import org.bukkit.event.hanging.HangingBreakEvent;
@@ -222,4 +224,10 @@ public void onEntityUnleash(EntityUnleashEvent event) {
222224
BukkitMCEntityUnleashEvent epe = new BukkitMCEntityUnleashEvent(event);
223225
EventUtils.TriggerListener(Driver.ENTITY_UNLEASH, "entity_unleash", epe);
224226
}
227+
228+
@EventHandler(priority = EventPriority.LOWEST)
229+
public void onPotionSplash(PotionSplashEvent event) {
230+
BukkitMCPotionSplashEvent pse = new BukkitMCPotionSplashEvent(event);
231+
EventUtils.TriggerListener(Driver.POTION_SPLASH, "potion_splash", pse);
232+
}
225233
}
Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
package com.laytonsmith.abstraction.events;
22

3+
import com.laytonsmith.abstraction.entities.MCThrownPotion;
34
import com.laytonsmith.abstraction.MCLivingEntity;
4-
import java.util.Set;
5+
import com.laytonsmith.core.events.BindableEvent;
56

6-
public interface MCPotionSplashEvent extends MCProjectileHitEvent {
7+
import java.util.Map;
78

8-
Set<MCLivingEntity> getAffectedEntities();
9+
public interface MCPotionSplashEvent extends BindableEvent {
910

10-
double getIntensity(MCLivingEntity le);
11+
MCThrownPotion getEntity();
12+
13+
Map<MCLivingEntity, Double> getAffectedEntities();
1114

1215
void setIntensity(MCLivingEntity le, double intensity);
1316
}

src/main/java/com/laytonsmith/core/events/drivers/EntityEvents.java

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import com.laytonsmith.abstraction.blocks.MCBlockProjectileSource;
1818
import com.laytonsmith.abstraction.blocks.MCMaterial;
1919
import com.laytonsmith.abstraction.entities.MCFirework;
20+
import com.laytonsmith.abstraction.entities.MCThrownPotion;
2021
import com.laytonsmith.abstraction.enums.MCDamageCause;
2122
import com.laytonsmith.abstraction.enums.MCEntityType;
2223
import com.laytonsmith.abstraction.enums.MCEquipmentSlot;
@@ -47,6 +48,7 @@
4748
import com.laytonsmith.abstraction.events.MCPlayerInteractAtEntityEvent;
4849
import com.laytonsmith.abstraction.events.MCPlayerInteractEntityEvent;
4950
import com.laytonsmith.abstraction.events.MCPlayerPickupItemEvent;
51+
import com.laytonsmith.abstraction.events.MCPotionSplashEvent;
5052
import com.laytonsmith.abstraction.events.MCProjectileHitEvent;
5153
import com.laytonsmith.abstraction.events.MCProjectileLaunchEvent;
5254
import com.laytonsmith.annotations.api;
@@ -2295,4 +2297,88 @@ public Version since() {
22952297
return MSVersion.V3_3_4;
22962298
}
22972299
}
2300+
2301+
@api
2302+
public static class potion_splash extends AbstractEvent {
2303+
2304+
@Override
2305+
public String getName() {
2306+
return "potion_splash";
2307+
}
2308+
2309+
@Override
2310+
public String docs() {
2311+
return "{id: <string match> The splash potion entity uuid.}"
2312+
+ " Called when a splash potion lands."
2313+
+ " {id | entities: An associative array of living entities affected by the splash, where the key"
2314+
+ " is a UUID and the value is a double with a range of 0.0 - 1.0 for the intensity of the effect.}"
2315+
+ " {entities: Set an entity's intensity to 0 to make them unaffected.}";
2316+
}
2317+
2318+
@Override
2319+
public boolean matches(Map<String, Mixed> prefilter, BindableEvent event) throws PrefilterNonMatchException {
2320+
if(event instanceof MCPotionSplashEvent) {
2321+
MCPotionSplashEvent e = (MCPotionSplashEvent) event;
2322+
Prefilters.match(prefilter, "id", e.getEntity().getUniqueId().toString(), PrefilterType.STRING_MATCH);
2323+
return true;
2324+
}
2325+
return false;
2326+
}
2327+
2328+
@Override
2329+
public BindableEvent convert(CArray manualObject, Target t) {
2330+
return null;
2331+
}
2332+
2333+
@Override
2334+
public Map<String, Mixed> evaluate(BindableEvent e) throws EventException {
2335+
if(e instanceof MCPotionSplashEvent) {
2336+
MCPotionSplashEvent event = (MCPotionSplashEvent) e;
2337+
Target t = Target.UNKNOWN;
2338+
Map<String, Mixed> ret = evaluate_helper(e);
2339+
MCThrownPotion pot = event.getEntity();
2340+
2341+
ret.put("id", new CString(pot.getUniqueId().toString(), t));
2342+
CArray affected = CArray.GetAssociativeArray(t);
2343+
for(Map.Entry<MCLivingEntity, Double> entry : event.getAffectedEntities().entrySet()) {
2344+
affected.set(entry.getKey().getUniqueId().toString(), new CDouble(entry.getValue(), t), t);
2345+
}
2346+
ret.put("entities", affected);
2347+
return ret;
2348+
} else {
2349+
throw new EventException("Could not convert to MCPotionSplashEvent");
2350+
}
2351+
}
2352+
2353+
@Override
2354+
public Driver driver() {
2355+
return Driver.POTION_SPLASH;
2356+
}
2357+
2358+
@Override
2359+
public boolean modifyEvent(String key, Mixed value, BindableEvent event) {
2360+
if(event instanceof MCPotionSplashEvent) {
2361+
MCPotionSplashEvent splashEvent = (MCPotionSplashEvent) event;
2362+
Target t = value.getTarget();
2363+
2364+
if(key.equalsIgnoreCase("entities")) {
2365+
CArray array = ArgumentValidation.getArray(value, t);
2366+
if(!array.isAssociative()) {
2367+
throw new CRECastException("Expected array to be associative.", t);
2368+
}
2369+
for(String id : array.stringKeySet()) {
2370+
MCLivingEntity entity = Static.getLivingByUUID(Static.GetUUID(id, t), t);
2371+
splashEvent.setIntensity(entity, ArgumentValidation.getDouble(array.get(id, t), t));
2372+
}
2373+
return true;
2374+
}
2375+
}
2376+
return false;
2377+
}
2378+
2379+
@Override
2380+
public Version since() {
2381+
return MSVersion.V3_3_4;
2382+
}
2383+
}
22982384
}

0 commit comments

Comments
 (0)