Skip to content

Commit 965a67b

Browse files
committed
Move to EntityUtil
1 parent f41ac02 commit 965a67b

8 files changed

Lines changed: 190 additions & 180 deletions

File tree

DeathMessagesLegacy/src/main/java/dev/mrshawn/deathmessages/listeners/EntityDamageByEntity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public class EntityDamageByEntity implements Listener {
3030
@EventHandler
3131
public void entityDamageByEntity(EntityDamageByEntityEvent e) {
3232
// Get the damager of ender crystal
33-
Util.CrystalDeathContext crystalDeathContext = Util.loadCrystalDamager(e.getEntity(), e.getDamager());
33+
EntityUtil.CrystalDeathContext crystalDeathContext = EntityUtil.loadCrystalDamager(e.getEntity(), e.getDamager());
3434

3535
if (e.getEntity() instanceof Player) {
3636
Player p = (Player) e.getEntity();

DeathMessagesLegacy/src/main/java/dev/mrshawn/deathmessages/listeners/OnInteract.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dev.mrshawn.deathmessages.listeners;
22

3+
import dev.mrshawn.deathmessages.utils.EntityUtil;
34
import dev.mrshawn.deathmessages.utils.MaterialUtil;
45
import dev.mrshawn.deathmessages.utils.Util;
56
import org.bukkit.Material;
@@ -23,12 +24,12 @@ public void onInteract(PlayerInteractEvent e) {
2324
World.Environment environment = getBlock.getWorld().getEnvironment();
2425
if (environment.equals(World.Environment.NETHER) || environment.equals(World.Environment.THE_END)) {
2526
if (getBlock.getType().name().endsWith("BED") || getBlock.getType().name().endsWith("BED_BLOCK")) {
26-
Util.getExplosionNearbyEffected(e.getPlayer(), getBlock);
27+
EntityUtil.getExplosionNearbyEffected(e.getPlayer(), getBlock);
2728
}
2829
} else if (Util.isNewerAndEqual(16, 0)) {
2930
if (!getBlock.getWorld().getEnvironment().equals(World.Environment.NETHER)) {
3031
if (getBlock.getType().equals(Material.RESPAWN_ANCHOR)) {
31-
Util.getExplosionNearbyEffected(e.getPlayer(), getBlock);
32+
EntityUtil.getExplosionNearbyEffected(e.getPlayer(), getBlock);
3233
}
3334
}
3435
}

DeathMessagesLegacy/src/main/java/dev/mrshawn/deathmessages/utils/EntityUtil.java

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,30 @@
11
package dev.mrshawn.deathmessages.utils;
22

3+
import dev.mrshawn.deathmessages.api.EntityCtx;
4+
import dev.mrshawn.deathmessages.api.ExplosionManager;
5+
import dev.mrshawn.deathmessages.api.PlayerCtx;
6+
import dev.mrshawn.deathmessages.api.events.DMBlockExplodeEvent;
37
import dev.mrshawn.deathmessages.config.Messages;
8+
import dev.mrshawn.deathmessages.enums.MobType;
49
import net.kyori.adventure.text.Component;
510
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
11+
import org.bukkit.Bukkit;
12+
import org.bukkit.block.Block;
13+
import org.bukkit.entity.EnderCrystal;
614
import org.bukkit.entity.Entity;
15+
import org.bukkit.entity.LivingEntity;
16+
import org.bukkit.entity.Player;
17+
import org.bukkit.entity.Projectile;
718
import org.bukkit.entity.Tameable;
19+
import org.bukkit.projectiles.ProjectileSource;
20+
import org.bukkit.util.BoundingBox;
821

22+
import java.util.ArrayList;
923
import java.util.Arrays;
24+
import java.util.Collection;
1025
import java.util.List;
26+
import java.util.Objects;
27+
import java.util.UUID;
1128

1229
public class EntityUtil {
1330

@@ -132,4 +149,98 @@ public static String getName(Entity e) {
132149
return null;
133150
}
134151
*/
152+
153+
public static void getExplosionNearbyEffected(Player p, Block b) {
154+
List<UUID> effected = new ArrayList<>();
155+
Collection<Entity> getNearby = Util.isNewerAndEqual(13, 0)
156+
? b.getWorld().getNearbyEntities(BoundingBox.of(b).expand(24)) // TODO: make it configurable
157+
: b.getWorld().getNearbyEntities(b.getLocation(), 24, 24, 24);
158+
159+
getNearby.forEach(ent -> {
160+
if (ent instanceof Player) {
161+
PlayerCtx playerCtx = PlayerCtx.of(ent.getUniqueId());
162+
if (playerCtx != null) {
163+
effected.add(ent.getUniqueId());
164+
playerCtx.setLastEntityDamager(p);
165+
}
166+
} else {
167+
EntityCtx entityCtx = EntityCtx.of(ent.getUniqueId());
168+
if (entityCtx != null) {
169+
effected.add(ent.getUniqueId());
170+
171+
PlayerCtx playerCtx = PlayerCtx.of(p.getUniqueId());
172+
if (playerCtx != null) {
173+
entityCtx.setLastPlayerDamager(playerCtx);
174+
}
175+
} else {
176+
EntityCtx.create(new EntityCtx(ent, MobType.VANILLA));
177+
}
178+
}
179+
}
180+
);
181+
182+
new ExplosionManager(p.getUniqueId(), b.getType(), b.getLocation(), effected);
183+
DMBlockExplodeEvent explodeEvent = new DMBlockExplodeEvent(p, b);
184+
Bukkit.getPluginManager().callEvent(explodeEvent);
185+
}
186+
187+
public static CrystalDeathContext loadCrystalDamager(Entity entity, Entity damager) {
188+
// Scenario 1
189+
// Player clicked (damaged) crystal
190+
// I didn't consider the scenario about entity clicked crystal, idk if it's needed?
191+
if (entity instanceof EnderCrystal && damager instanceof Player) {
192+
return new CrystalDeathContext(entity.getUniqueId(), (Player) damager);
193+
}
194+
// Scenario 2
195+
// The crystal is triggered by a projectile when pass through (player A / LivingEntity -> projectile -> crystal -> Player A/B / Entity)
196+
else if (entity instanceof EnderCrystal && damager instanceof Projectile) {
197+
ProjectileSource shooter = ((Projectile) damager).getShooter();
198+
if (shooter instanceof LivingEntity) {
199+
return new CrystalDeathContext(entity.getUniqueId(), (LivingEntity) shooter);
200+
}
201+
}
202+
203+
return new CrystalDeathContext(Util.NIL_UUID, null);
204+
}
205+
206+
// K: EndCrystal UUID
207+
// V: Causing Entity instance
208+
public static final class CrystalDeathContext {
209+
private final UUID uuid;
210+
private final LivingEntity entity;
211+
212+
public CrystalDeathContext(UUID uuid, LivingEntity entity) {
213+
this.uuid = uuid;
214+
this.entity = entity;
215+
}
216+
217+
public UUID uuid() {
218+
return uuid;
219+
}
220+
221+
public LivingEntity entity() {
222+
return entity;
223+
}
224+
225+
@Override
226+
public boolean equals(Object obj) {
227+
if (obj == this) return true;
228+
if (obj == null || obj.getClass() != this.getClass()) return false;
229+
CrystalDeathContext that = (CrystalDeathContext) obj;
230+
return this.uuid == that.uuid &&
231+
Objects.equals(this.entity, that.entity);
232+
}
233+
234+
@Override
235+
public int hashCode() {
236+
return Objects.hash(uuid, entity);
237+
}
238+
239+
@Override
240+
public String toString() {
241+
return "CrystalDeathContext[" +
242+
"uuid=" + uuid + ", " +
243+
"entity=" + entity + ']';
244+
}
245+
}
135246
}

DeathMessagesLegacy/src/main/java/dev/mrshawn/deathmessages/utils/Util.java

Lines changed: 0 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
11
package dev.mrshawn.deathmessages.utils;
22

33
import dev.mrshawn.deathmessages.DeathMessages;
4-
import dev.mrshawn.deathmessages.api.EntityCtx;
5-
import dev.mrshawn.deathmessages.api.ExplosionManager;
64
import dev.mrshawn.deathmessages.api.PlayerCtx;
7-
import dev.mrshawn.deathmessages.api.events.DMBlockExplodeEvent;
85
import dev.mrshawn.deathmessages.config.Messages;
96
import dev.mrshawn.deathmessages.config.Settings;
107
import dev.mrshawn.deathmessages.config.files.Config;
118
import dev.mrshawn.deathmessages.config.files.FileStore;
12-
import dev.mrshawn.deathmessages.enums.MobType;
139
import dev.mrshawn.deathmessages.hooks.CommonVanishPluginExtension;
1410
import net.kyori.adventure.audience.Audience;
1511
import net.kyori.adventure.text.Component;
@@ -19,22 +15,14 @@
1915
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
2016
import org.bukkit.Bukkit;
2117
import org.bukkit.World;
22-
import org.bukkit.block.Block;
23-
import org.bukkit.entity.EnderCrystal;
2418
import org.bukkit.entity.Entity;
25-
import org.bukkit.entity.LivingEntity;
2619
import org.bukkit.entity.Player;
27-
import org.bukkit.entity.Projectile;
2820
import org.bukkit.event.Listener;
2921
import org.bukkit.plugin.PluginManager;
3022
import org.bukkit.potion.PotionEffectType;
31-
import org.bukkit.projectiles.ProjectileSource;
32-
import org.bukkit.util.BoundingBox;
3323

3424
import java.util.ArrayList;
35-
import java.util.Collection;
3625
import java.util.List;
37-
import java.util.Objects;
3826
import java.util.UUID;
3927
import java.util.concurrent.ThreadLocalRandom;
4028
import java.util.regex.Matcher;
@@ -133,100 +121,6 @@ public static void registerEvents(Listener... listeners) {
133121
}
134122
}
135123

136-
public static void getExplosionNearbyEffected(Player p, Block b) {
137-
List<UUID> effected = new ArrayList<>();
138-
Collection<Entity> getNearby = isNewerAndEqual(13, 0)
139-
? b.getWorld().getNearbyEntities(BoundingBox.of(b).expand(24)) // TODO: make it configurable
140-
: b.getWorld().getNearbyEntities(b.getLocation(), 24, 24, 24);
141-
142-
getNearby.forEach(ent -> {
143-
if (ent instanceof Player) {
144-
PlayerCtx playerCtx = PlayerCtx.of(ent.getUniqueId());
145-
if (playerCtx != null) {
146-
effected.add(ent.getUniqueId());
147-
playerCtx.setLastEntityDamager(p);
148-
}
149-
} else {
150-
EntityCtx entityCtx = EntityCtx.of(ent.getUniqueId());
151-
if (entityCtx != null) {
152-
effected.add(ent.getUniqueId());
153-
154-
PlayerCtx playerCtx = PlayerCtx.of(p.getUniqueId());
155-
if (playerCtx != null) {
156-
entityCtx.setLastPlayerDamager(playerCtx);
157-
}
158-
} else {
159-
EntityCtx.create(new EntityCtx(ent, MobType.VANILLA));
160-
}
161-
}
162-
}
163-
);
164-
165-
new ExplosionManager(p.getUniqueId(), b.getType(), b.getLocation(), effected);
166-
DMBlockExplodeEvent explodeEvent = new DMBlockExplodeEvent(p, b);
167-
Bukkit.getPluginManager().callEvent(explodeEvent);
168-
}
169-
170-
public static CrystalDeathContext loadCrystalDamager(Entity entity, Entity damager) {
171-
// Scenario 1
172-
// Player clicked (damaged) crystal
173-
// I didn't consider the scenario about entity clicked crystal, idk if it's needed?
174-
if (entity instanceof EnderCrystal && damager instanceof Player) {
175-
return new CrystalDeathContext(entity.getUniqueId(), (Player) damager);
176-
}
177-
// Scenario 2
178-
// The crystal is triggered by a projectile when pass through (player A / LivingEntity -> projectile -> crystal -> Player A/B / Entity)
179-
else if (entity instanceof EnderCrystal && damager instanceof Projectile) {
180-
ProjectileSource shooter = ((Projectile) damager).getShooter();
181-
if (shooter instanceof LivingEntity) {
182-
return new CrystalDeathContext(entity.getUniqueId(), (LivingEntity) shooter);
183-
}
184-
}
185-
186-
return new CrystalDeathContext(Util.NIL_UUID, null);
187-
}
188-
189-
// K: EndCrystal UUID
190-
// V: Causing Entity instance
191-
public static class CrystalDeathContext {
192-
private final UUID uuid;
193-
private final LivingEntity entity;
194-
195-
public CrystalDeathContext(UUID uuid, LivingEntity entity) {
196-
this.uuid = uuid;
197-
this.entity = entity;
198-
}
199-
200-
public UUID uuid() {
201-
return uuid;
202-
}
203-
204-
public LivingEntity entity() {
205-
return entity;
206-
}
207-
208-
@Override
209-
public boolean equals(Object obj) {
210-
if (obj == this) return true;
211-
if (obj == null || obj.getClass() != this.getClass()) return false;
212-
CrystalDeathContext that = (CrystalDeathContext) obj;
213-
return Objects.equals(this.uuid, that.uuid) &&
214-
Objects.equals(this.entity, that.entity);
215-
}
216-
217-
@Override
218-
public int hashCode() {
219-
return Objects.hash(uuid, entity);
220-
}
221-
222-
@Override
223-
public String toString() {
224-
return "CrystalDeathContext[" +
225-
"uuid=" + uuid + ", " +
226-
"entity=" + entity + ']';
227-
}
228-
}
229-
230124
public static List<World> getBroadcastWorlds(Entity e) {
231125
List<World> broadcastWorlds = new ArrayList<>();
232126

DeathMessagesModern/src/main/java/dev/mrshawn/deathmessages/listeners/EntityDamageByEntity.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import dev.mrshawn.deathmessages.config.EntityDeathMessages;
77
import dev.mrshawn.deathmessages.enums.MobType;
88
import dev.mrshawn.deathmessages.utils.EntityUtil;
9-
import dev.mrshawn.deathmessages.utils.Util;
109
import org.bukkit.configuration.ConfigurationSection;
1110
import org.bukkit.entity.AreaEffectCloud;
1211
import org.bukkit.entity.EnderCrystal;
@@ -30,7 +29,7 @@ public class EntityDamageByEntity implements Listener {
3029
@EventHandler
3130
public void entityDamageByEntity(EntityDamageByEntityEvent e) {
3231
// Get the damager of ender crystal
33-
Util.CrystalDeathContext crystalDeathContext = Util.loadCrystalDamager(e.getEntity(), e.getDamager());
32+
EntityUtil.CrystalDeathContext crystalDeathContext = EntityUtil.loadCrystalDamager(e.getEntity(), e.getDamager());
3433

3534
if (e.getEntity() instanceof Player) {
3635
Player p = (Player) e.getEntity();

DeathMessagesModern/src/main/java/dev/mrshawn/deathmessages/listeners/OnInteract.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package dev.mrshawn.deathmessages.listeners;
22

3+
import dev.mrshawn.deathmessages.utils.EntityUtil;
34
import dev.mrshawn.deathmessages.utils.MaterialUtil;
4-
import dev.mrshawn.deathmessages.utils.Util;
55
import org.bukkit.Material;
66
import org.bukkit.World;
77
import org.bukkit.block.Block;
@@ -23,12 +23,12 @@ public void onInteract(PlayerInteractEvent e) {
2323
World.Environment environment = getBlock.getWorld().getEnvironment();
2424
if (environment.equals(World.Environment.NETHER) || environment.equals(World.Environment.THE_END)) {
2525
if (getBlock.getType().name().endsWith("BED") || getBlock.getType().name().endsWith("BED_BLOCK")) {
26-
Util.getExplosionNearbyEffected(e.getPlayer(), getBlock);
26+
EntityUtil.getExplosionNearbyEffected(e.getPlayer(), getBlock);
2727
}
2828
} else {
2929
if (!getBlock.getWorld().getEnvironment().equals(World.Environment.NETHER)) {
3030
if (getBlock.getType().equals(Material.RESPAWN_ANCHOR)) {
31-
Util.getExplosionNearbyEffected(e.getPlayer(), getBlock);
31+
EntityUtil.getExplosionNearbyEffected(e.getPlayer(), getBlock);
3232
}
3333
}
3434
}

0 commit comments

Comments
 (0)