diff --git a/pom.xml b/pom.xml
index 4e3a5f3..cfed251 100644
--- a/pom.xml
+++ b/pom.xml
@@ -62,6 +62,10 @@
papermc
https://repo.papermc.io/repository/maven-public/
+
+ jitpack.io
+ https://jitpack.io
+
@@ -76,5 +80,11 @@
postgresql
42.6.0
+
+ com.github.BlueMap-Minecraft
+ BlueMapAPI
+ v2.6.2
+ provided
+
diff --git a/src/main/java/cn/lunadeer/dominion/BlueMapConnect.java b/src/main/java/cn/lunadeer/dominion/BlueMapConnect.java
new file mode 100644
index 0000000..d0cf04e
--- /dev/null
+++ b/src/main/java/cn/lunadeer/dominion/BlueMapConnect.java
@@ -0,0 +1,64 @@
+package cn.lunadeer.dominion;
+
+import cn.lunadeer.dominion.dtos.DominionDTO;
+import com.flowpowered.math.vector.Vector2d;
+import de.bluecolored.bluemap.api.BlueMapAPI;
+import de.bluecolored.bluemap.api.BlueMapMap;
+import de.bluecolored.bluemap.api.markers.ExtrudeMarker;
+import de.bluecolored.bluemap.api.markers.MarkerSet;
+import de.bluecolored.bluemap.api.math.Color;
+import de.bluecolored.bluemap.api.math.Shape;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+public class BlueMapConnect {
+ public static void render() {
+ if (!Dominion.config.getBlueMap()) {
+ return;
+ }
+ BlueMapAPI.getInstance().ifPresent(api -> {
+ for (Map.Entry> world_dominions : Cache.instance.getWorldDominions().entrySet()) {
+ api.getWorld(world_dominions.getKey()).ifPresent(world -> {
+ MarkerSet markerSet = MarkerSet.builder()
+ .label("Dominion")
+ .build();
+
+ for (DominionDTO dominion : world_dominions.getValue()) {
+ Collection vectors = new ArrayList<>();
+ vectors.add(new Vector2d(dominion.getX1(), dominion.getZ1()));
+ vectors.add(new Vector2d(dominion.getX2(), dominion.getZ1()));
+ vectors.add(new Vector2d(dominion.getX2(), dominion.getZ2()));
+ vectors.add(new Vector2d(dominion.getX1(), dominion.getZ2()));
+ Shape shape = new Shape(vectors);
+ double x = vectors.iterator().next().getX();
+ double z = vectors.iterator().next().getY();
+ double y = dominion.getY1();
+
+ Color line = new Color(0, 191, 255, 0.8F);
+ Color fill = new Color(0, 191, 255, 0.2F);
+ if (dominion.getParentDomId() != -1) { // for children dominion
+ line = new Color(240, 230, 140, 0.8F);
+ fill = new Color(240, 230, 140, 0.2F);
+ }
+ ExtrudeMarker marker = ExtrudeMarker.builder()
+ .label(dominion.getName())
+ .position(x, y, z)
+ .shape(shape, dominion.getY1(), dominion.getY2())
+ .lineColor(line)
+ .fillColor(fill)
+ .build();
+ markerSet.getMarkers()
+ .put(dominion.getName(), marker);
+ }
+
+ for (BlueMapMap map : world.getMaps()) {
+ map.getMarkerSets().put(world_dominions.getKey() + "-" + markerSet.getLabel(), markerSet);
+ }
+ });
+ }
+ });
+ }
+}
diff --git a/src/main/java/cn/lunadeer/dominion/Cache.java b/src/main/java/cn/lunadeer/dominion/Cache.java
index d2185d0..a893c36 100644
--- a/src/main/java/cn/lunadeer/dominion/Cache.java
+++ b/src/main/java/cn/lunadeer/dominion/Cache.java
@@ -30,6 +30,7 @@ public class Cache {
}
world_dominions.get(d.getWorld()).add(d);
}
+ BlueMapConnect.render();
}
/**
@@ -155,6 +156,10 @@ public class Cache {
z >= dominion.getZ1() && z <= dominion.getZ2();
}
+ public Map> getWorldDominions() {
+ return world_dominions;
+ }
+
public static Cache instance;
private Map> world_dominions; // 所有领地
private Map> player_uuid_to_privilege; // 玩家所有的特权
diff --git a/src/main/java/cn/lunadeer/dominion/utils/ConfigManager.java b/src/main/java/cn/lunadeer/dominion/utils/ConfigManager.java
index d83c19d..e43b46b 100644
--- a/src/main/java/cn/lunadeer/dominion/utils/ConfigManager.java
+++ b/src/main/java/cn/lunadeer/dominion/utils/ConfigManager.java
@@ -24,6 +24,7 @@ public class ConfigManager {
_max_x = _file.getInt("MaxX", 128);
_max_y = _file.getInt("MaxY", 64);
_max_z = _file.getInt("MaxZ", 128);
+ _blue_map = _file.getBoolean("BlueMap", true);
}
public Boolean isDebug() {
@@ -107,6 +108,16 @@ public class ConfigManager {
_plugin.saveConfig();
}
+ public Boolean getBlueMap() {
+ return _blue_map;
+ }
+
+ public void setBlueMap(Boolean blue_map) {
+ _blue_map = blue_map;
+ _file.set("BlueMap", blue_map);
+ _plugin.saveConfig();
+ }
+
private final Dominion _plugin;
private FileConfiguration _file;
@@ -123,4 +134,6 @@ public class ConfigManager {
private Integer _max_x;
private Integer _max_y;
private Integer _max_z;
+
+ private Boolean _blue_map;
}
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index fe67947..38fe2c2 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -10,4 +10,6 @@ MaxX: 128
MaxY: 64
MaxZ: 128
+BlueMap: true
+
Debug: false
\ No newline at end of file