From 517426304ac9d87399766bf0cd77737ae8125914 Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Thu, 15 Feb 2024 10:55:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86blue=20map=E6=B8=B2?= =?UTF-8?q?=E6=9F=93=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 10 +++ .../cn/lunadeer/dominion/BlueMapConnect.java | 64 +++++++++++++++++++ src/main/java/cn/lunadeer/dominion/Cache.java | 5 ++ .../dominion/utils/ConfigManager.java | 13 ++++ src/main/resources/config.yml | 2 + 5 files changed, 94 insertions(+) create mode 100644 src/main/java/cn/lunadeer/dominion/BlueMapConnect.java 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