Skip to content

Commit

Permalink
Cache entities spawned in arena for removal
Browse files Browse the repository at this point in the history
  • Loading branch information
Realizedd committed Apr 5, 2022
1 parent 771c88e commit c22dfc7
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,24 +6,17 @@
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Queue;
import java.util.Set;
import java.util.function.Consumer;
import lombok.Getter;
import me.realized.de.arenaregen.ArenaRegen;
import me.realized.de.arenaregen.config.Config;
import me.realized.de.arenaregen.nms.NMS;
import me.realized.de.arenaregen.util.BlockInfo;
import me.realized.de.arenaregen.util.Callback;
import me.realized.de.arenaregen.util.Pair;
import me.realized.de.arenaregen.util.Position;
import me.realized.duels.api.Duels;
import me.realized.duels.api.arena.Arena;

import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.Location;
Expand All @@ -37,6 +30,17 @@
import org.bukkit.entity.Item;
import org.bukkit.scheduler.BukkitRunnable;

import lombok.Getter;
import me.realized.de.arenaregen.ArenaRegen;
import me.realized.de.arenaregen.config.Config;
import me.realized.de.arenaregen.nms.NMS;
import me.realized.de.arenaregen.util.BlockInfo;
import me.realized.de.arenaregen.util.Callback;
import me.realized.de.arenaregen.util.Pair;
import me.realized.de.arenaregen.util.Position;
import me.realized.duels.api.Duels;
import me.realized.duels.api.arena.Arena;

public class ResetZone {

@Getter
Expand All @@ -59,6 +63,9 @@ public class ResetZone {
@Getter
private Set<ChunkLoc> chunks = new HashSet<>();

@Getter
private List<Entity> spawnedEntities = new ArrayList<>();

ResetZone(final ArenaRegen extension, final Duels api, final Arena arena, final File folder, final Location first, final Location second) {
this.api = api;
this.handler = extension.getHandler();
Expand Down Expand Up @@ -242,7 +249,7 @@ public void reset(final Callback onDone) {
task.runTaskTimer(api, 1L, 1L);
}

private boolean contains(final Location location) {
public boolean contains(final Location location) {
return min.getWorld().equals(location.getWorld())
&& min.getBlockX() <= location.getBlockX() && location.getBlockX() <= max.getBlockX()
&& min.getBlockY() <= location.getBlockY() && location.getBlockY() <= max.getBlockY()
Expand Down Expand Up @@ -298,24 +305,8 @@ public void run() {
final Block block = min.getWorld().getBlockAt(x, y, z);
final Position position = new Position(block);
final BlockInfo info = blocks.get(position);
final Chunk chunk = block.getChunk();
final ChunkLoc chunkLoc = new ChunkLoc(chunk);

if (!chunks.contains(chunkLoc)) {
chunks.add(chunkLoc);

for (final Entity entity : chunk.getEntities()) {
if (config.isRemoveDroppedItems() && entity instanceof Item) {
entity.remove();
continue;
}

if (config.getRemoveEntities().stream().anyMatch(type -> entity.getType().name().equalsIgnoreCase(type))) {
entity.remove();
}
}
}

chunks.add(new ChunkLoc(block.getChunk()));

if (info == null) {
// If no stored information is available (= air) but block is not air, set to air
if (block.getType() != Material.AIR) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
import me.realized.duels.api.event.arena.ArenaRemoveEvent;
import me.realized.duels.api.event.match.MatchEndEvent;
import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Item;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
Expand All @@ -27,6 +29,8 @@
import org.bukkit.event.block.BlockIgniteEvent.IgniteCause;
import org.bukkit.event.block.LeavesDecayEvent;
import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.event.entity.EntitySpawnEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.world.ChunkUnloadEvent;

public class ResetZoneManager {
Expand Down Expand Up @@ -125,6 +129,21 @@ public void on(final ChunkUnloadEvent event) {
}
}

@EventHandler
public void on(final PlayerDeathEvent event) {
final Arena arena = arenaManager.get(event.getEntity());
final ResetZone zone;

if (arena == null || (zone = get(arena.getName())) == null) {
return;
}

zone.getSpawnedEntities().removeIf(entity -> {
entity.remove();
return true;
});
}

@EventHandler
public void on(final MatchEndEvent event) {
final Arena arena = event.getMatch().getArena();
Expand All @@ -134,6 +153,7 @@ public void on(final MatchEndEvent event) {
return;
}

zone.getSpawnedEntities().clear();
zone.reset(null);
}

Expand Down Expand Up @@ -207,6 +227,26 @@ public void on(final LeavesDecayEvent event) {

event.setCancelled(true);
}

@EventHandler(priority = EventPriority. HIGHEST, ignoreCancelled = true)
public void on(final EntitySpawnEvent event) {
if (config.getRemoveEntities().isEmpty()) {
return;
}

final Entity entity = event.getEntity();

if (!(entity instanceof Item) && !config.getRemoveEntities().contains(entity.getType().name().toUpperCase())) {
return;
}

for (final ResetZone zone : getZones()) {
if (zone.contains(event.getLocation())) {
zone.getSpawnedEntities().add(entity);
break;
}
}
}
}

private class BlockExplodeListener implements Listener {
Expand Down

0 comments on commit c22dfc7

Please sign in to comment.