diff --git a/build.gradle.kts b/build.gradle.kts index b3d6b87..9e77112 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -19,7 +19,7 @@ repositories { } dependencies { - compileOnly("net.thenextlvl.protect:api:1.0.1") + compileOnly("net.thenextlvl.protect:api:3.0.3") compileOnly("io.papermc.paper:paper-api:1.21.5-R0.1-SNAPSHOT") compileOnly("com.intellectualsites.plotsquared:plotsquared-core") compileOnly("com.sk89q.worldedit:worldedit-core:7.3.0-SNAPSHOT") diff --git a/src/main/java/net/thenextlvl/redprotect/listener/AreaRedstoneListener.java b/src/main/java/net/thenextlvl/redprotect/listener/AreaRedstoneListener.java index 206400e..d40d83c 100644 --- a/src/main/java/net/thenextlvl/redprotect/listener/AreaRedstoneListener.java +++ b/src/main/java/net/thenextlvl/redprotect/listener/AreaRedstoneListener.java @@ -1,6 +1,7 @@ package net.thenextlvl.redprotect.listener; import net.thenextlvl.protect.area.Area; +import net.thenextlvl.protect.area.AreaProvider; import net.thenextlvl.redprotect.RedProtect; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -12,16 +13,20 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.WeakHashMap; public class AreaRedstoneListener implements Listener { - private static final HashMap AREA_STATES = new HashMap<>(); + private static final Map AREA_STATES = new WeakHashMap<>(); private static final List BLOCKED_AREAS = new ArrayList<>(); + private final AreaProvider areaProvider; private final JavaPlugin plugin; public AreaRedstoneListener(JavaPlugin plugin) { + this.areaProvider = Objects.requireNonNull(plugin.getServer().getServicesManager().load(AreaProvider.class)); this.plugin = plugin; } @@ -31,8 +36,8 @@ public void onRedstone(BlockRedstoneEvent event) { var location = event.getBlock().getLocation(); var area = area(location); if (area == null) return; - long time = RedProtect.config().clockDisableTime(); - long updates = RedProtect.config().updatesPerState(); + var time = RedProtect.config.clockDisableTime(); + var updates = RedProtect.config.updatesPerState(); Bukkit.getScheduler().runTaskLater(plugin, () -> decreaseState(area), time); if (increaseState(area) < updates) return; event.setNewCurrent(0); @@ -42,25 +47,25 @@ public void onRedstone(BlockRedstoneEvent event) { Bukkit.getScheduler().runTaskLater(plugin, () -> BLOCKED_AREAS.remove(area), time); } - public static int increaseState(Area area) { + public int increaseState(Area area) { return setState(area, getState(area) + 1); } - public static void decreaseState(Area area) { + public void decreaseState(Area area) { setState(area, getState(area) - 1); } - public static int setState(Area area, int state) { + public int setState(Area area, int state) { if (state <= 0) AREA_STATES.remove(area); else AREA_STATES.put(area, state); return getState(area); } - public static int getState(Area area) { + public int getState(Area area) { return AREA_STATES.getOrDefault(area, 0); } - private static @Nullable Area area(Location location) { - return location.getWorld() != null ? Area.highestArea(location) : null; + private @Nullable Area area(Location location) { + return location.getWorld() != null ? areaProvider.getArea(location) : null; } } diff --git a/src/main/java/net/thenextlvl/redprotect/listener/PlotRedstoneListener.java b/src/main/java/net/thenextlvl/redprotect/listener/PlotRedstoneListener.java index 85d17bc..79ee749 100644 --- a/src/main/java/net/thenextlvl/redprotect/listener/PlotRedstoneListener.java +++ b/src/main/java/net/thenextlvl/redprotect/listener/PlotRedstoneListener.java @@ -31,8 +31,8 @@ public void onRedstone(BlockRedstoneEvent event) { var location = event.getBlock().getLocation(); var plot = plot(location); if (plot == null) return; - var time = RedProtect.config().clockDisableTime(); - var updates = RedProtect.config().updatesPerState(); + var time = RedProtect.config.clockDisableTime(); + var updates = RedProtect.config.updatesPerState(); Bukkit.getScheduler().runTaskLater(plugin, () -> decreaseState(plot), time); if (increaseState(plot) < updates) return; event.setNewCurrent(0);