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);