From 23eb35c8b3ff3ab164570c972217b5bc22c50ed1 Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Wed, 10 Jul 2024 11:56:22 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Edynmap=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 12 ++- src/main/java/cn/lunadeer/dominion/Cache.java | 4 +- .../java/cn/lunadeer/dominion/Dominion.java | 8 +- .../lunadeer/dominion/commands/Operator.java | 5 +- .../lunadeer/dominion/dtos/DominionDTO.java | 4 + .../dominion/managers/ConfigManager.java | 11 +-- .../dominion/{ => utils}/BlueMapConnect.java | 10 +-- .../dominion/utils/DynmapConnect.java | 88 +++++++++++++++++++ .../cn/lunadeer/dominion/utils/MapRender.java | 31 +++++++ src/main/resources/config.yml | 3 +- src/main/resources/plugin.yml | 3 +- 11 files changed, 159 insertions(+), 20 deletions(-) rename src/main/java/cn/lunadeer/dominion/{ => utils}/BlueMapConnect.java (97%) create mode 100644 src/main/java/cn/lunadeer/dominion/utils/DynmapConnect.java create mode 100644 src/main/java/cn/lunadeer/dominion/utils/MapRender.java diff --git a/pom.xml b/pom.xml index b428b68..2598102 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ cn.lunadeer Dominion - 1.35.9-beta + 1.35.9-dynmap-beta jar Dominion @@ -70,6 +70,10 @@ lunadeer-repo https://ssl.lunadeer.cn:14454/repository/maven-snapshots/ + + MikeRepo + https://repo.mikeprimm.com/ + @@ -95,5 +99,11 @@ snakeyaml 2.0 + + us.dynmap + dynmap-api + 3.4-beta-3 + provided + diff --git a/src/main/java/cn/lunadeer/dominion/Cache.java b/src/main/java/cn/lunadeer/dominion/Cache.java index 5b64aea..3c65ab4 100644 --- a/src/main/java/cn/lunadeer/dominion/Cache.java +++ b/src/main/java/cn/lunadeer/dominion/Cache.java @@ -1,6 +1,8 @@ package cn.lunadeer.dominion; import cn.lunadeer.dominion.dtos.*; +import cn.lunadeer.dominion.utils.BlueMapConnect; +import cn.lunadeer.dominion.utils.MapRender; import cn.lunadeer.dominion.utils.ResMigration; import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.ParticleRender; @@ -90,7 +92,7 @@ public class Cache { count = 1; } } - BlueMapConnect.render(); + MapRender.render(); recheckPlayerState = true; _last_update_dominion.set(System.currentTimeMillis()); XLogger.debug("loadDominionsExecution cost: %d ms for %d dominions" diff --git a/src/main/java/cn/lunadeer/dominion/Dominion.java b/src/main/java/cn/lunadeer/dominion/Dominion.java index 9f9c899..b895667 100644 --- a/src/main/java/cn/lunadeer/dominion/Dominion.java +++ b/src/main/java/cn/lunadeer/dominion/Dominion.java @@ -1,11 +1,13 @@ package cn.lunadeer.dominion; -import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO; import cn.lunadeer.dominion.events.EnvironmentEvents; import cn.lunadeer.dominion.events.PlayerEvents; import cn.lunadeer.dominion.events.SelectPointEvents; import cn.lunadeer.dominion.managers.ConfigManager; import cn.lunadeer.dominion.managers.DatabaseTables; +import cn.lunadeer.dominion.utils.BlueMapConnect; +import cn.lunadeer.dominion.utils.DynmapConnect; +import cn.lunadeer.dominion.utils.MapRender; import cn.lunadeer.minecraftpluginutils.*; import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager; import cn.lunadeer.minecraftpluginutils.databse.DatabaseType; @@ -13,6 +15,7 @@ import cn.lunadeer.minecraftpluginutils.scui.CuiManager; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.plugin.java.JavaPlugin; +import org.dynmap.DynmapCommonAPIListener; import java.util.HashMap; import java.util.Map; @@ -72,7 +75,8 @@ public final class Dominion extends JavaPlugin { XLogger.info(" |_____/ \\___/|_| |_| |_|_|_| |_|_|\\___/|_| |_|"); XLogger.info(" "); - Scheduler.runTaskLaterAsync(BlueMapConnect::render, 40 * 20); + if (config.getDynmap()) DynmapCommonAPIListener.register(new DynmapConnect()); // 注册 Dynmap API + Scheduler.runTaskLaterAsync(MapRender::render, 40 * 20); } @Override diff --git a/src/main/java/cn/lunadeer/dominion/commands/Operator.java b/src/main/java/cn/lunadeer/dominion/commands/Operator.java index 52650d5..41907b1 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/Operator.java +++ b/src/main/java/cn/lunadeer/dominion/commands/Operator.java @@ -1,9 +1,10 @@ package cn.lunadeer.dominion.commands; -import cn.lunadeer.dominion.BlueMapConnect; +import cn.lunadeer.dominion.utils.BlueMapConnect; import cn.lunadeer.dominion.Cache; import cn.lunadeer.dominion.Dominion; import cn.lunadeer.dominion.dtos.DominionDTO; +import cn.lunadeer.dominion.utils.MapRender; import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.Scheduler; import cn.lunadeer.minecraftpluginutils.XLogger; @@ -104,7 +105,7 @@ public class Operator { Notification.error(sender, e.getMessage()); } } - BlueMapConnect.renderMCA(mca_cords); + MapRender.renderMCA(mca_cords); Notification.info(sender, "MCA文件列表已导出到 %s", folder.getAbsolutePath()); }); } diff --git a/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java index 1490180..2d514b6 100644 --- a/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java +++ b/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java @@ -433,4 +433,8 @@ public class DominionDTO { public String getColor() { return (String) color.value; } + + public int getColorHex() { + return (getColorR() << 16) + (getColorG() << 8) + getColorB(); + } } diff --git a/src/main/java/cn/lunadeer/dominion/managers/ConfigManager.java b/src/main/java/cn/lunadeer/dominion/managers/ConfigManager.java index 9e396c0..ee7d324 100644 --- a/src/main/java/cn/lunadeer/dominion/managers/ConfigManager.java +++ b/src/main/java/cn/lunadeer/dominion/managers/ConfigManager.java @@ -48,7 +48,8 @@ public class ConfigManager { XLogger.err("Limit.SizeZ 尺寸不能小于 4,已重置为 128"); setLimitSizeZ(128); } - _blue_map = _file.getBoolean("BlueMap", true); + _blue_map = _file.getBoolean("BlueMap", false); + _dynmap = _file.getBoolean("Dynmap", false); _auto_clean_after_days = _file.getInt("AutoCleanAfterDays", 180); if (_auto_clean_after_days == 0) { XLogger.err("AutoCleanAfterDays 不能等于 0,已重置为 180"); @@ -98,6 +99,7 @@ public class ConfigManager { _file.set("Limit.SizeY", _limit_size_y); _file.set("Limit.SizeZ", _limit_size_z); _file.set("BlueMap", _blue_map); + _file.set("Dynmap", _dynmap); _file.set("AutoCleanAfterDays", _auto_clean_after_days); _file.set("Limit.MinY", _limit_min_y); _file.set("Limit.MaxY", _limit_max_y); @@ -220,10 +222,8 @@ public class ConfigManager { return _blue_map; } - public void setBlueMap(Boolean blue_map) { - _blue_map = blue_map; - _file.set("BlueMap", blue_map); - _plugin.saveConfig(); + public Boolean getDynmap() { + return _dynmap; } public Integer getAutoCleanAfterDays() { @@ -423,6 +423,7 @@ public class ConfigManager { private Boolean _limit_op_bypass; private Boolean _blue_map; + private Boolean _dynmap; private Integer _auto_clean_after_days; private Integer _limit_min_y; private Integer _limit_max_y; diff --git a/src/main/java/cn/lunadeer/dominion/BlueMapConnect.java b/src/main/java/cn/lunadeer/dominion/utils/BlueMapConnect.java similarity index 97% rename from src/main/java/cn/lunadeer/dominion/BlueMapConnect.java rename to src/main/java/cn/lunadeer/dominion/utils/BlueMapConnect.java index cee9369..c107c92 100644 --- a/src/main/java/cn/lunadeer/dominion/BlueMapConnect.java +++ b/src/main/java/cn/lunadeer/dominion/utils/BlueMapConnect.java @@ -1,5 +1,7 @@ -package cn.lunadeer.dominion; +package cn.lunadeer.dominion.utils; +import cn.lunadeer.dominion.Cache; +import cn.lunadeer.dominion.Dominion; import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.minecraftpluginutils.Scheduler; import cn.lunadeer.minecraftpluginutils.XLogger; @@ -15,9 +17,6 @@ import java.util.*; public class BlueMapConnect { public static void render() { - if (!Dominion.config.getBlueMap()) { - return; - } Scheduler.runTaskAsync(() -> { try { BlueMapAPI.getInstance().ifPresent(api -> { @@ -76,9 +75,6 @@ public class BlueMapConnect { } public static void renderMCA(Map> mca_files) { - if (!Dominion.config.getBlueMap()) { - return; - } Scheduler.runTaskAsync(() -> { try { BlueMapAPI.getInstance().ifPresent(api -> { diff --git a/src/main/java/cn/lunadeer/dominion/utils/DynmapConnect.java b/src/main/java/cn/lunadeer/dominion/utils/DynmapConnect.java new file mode 100644 index 0000000..865fe44 --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/utils/DynmapConnect.java @@ -0,0 +1,88 @@ +package cn.lunadeer.dominion.utils; + +import cn.lunadeer.dominion.dtos.DominionDTO; +import cn.lunadeer.minecraftpluginutils.Scheduler; +import cn.lunadeer.minecraftpluginutils.XLogger; +import com.flowpowered.math.vector.Vector2d; +import de.bluecolored.bluemap.api.math.Shape; +import org.dynmap.DynmapCommonAPI; +import org.dynmap.DynmapCommonAPIListener; +import org.dynmap.markers.AreaMarker; +import org.dynmap.markers.MarkerAPI; +import org.dynmap.markers.MarkerSet; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +public class DynmapConnect extends DynmapCommonAPIListener { + + public static DynmapConnect instance; + + private MarkerSet markerSet; + + @Override + public void apiEnabled(DynmapCommonAPI dynmapCommonAPI) { + MarkerAPI markerAPI = dynmapCommonAPI.getMarkerAPI(); + this.markerSet = markerAPI.getMarkerSet("dominion"); + if (this.markerSet == null) { + this.markerSet = markerAPI.createMarkerSet("dominion", "Dominion领地", null, false); + } + } + + public void setDominionMarker(DominionDTO dominion) { + String nameLabel = "
" + dominion.getName() + "
"; + double[] xx = {dominion.getX1(), dominion.getX2()}; + double[] zz = {dominion.getZ1(), dominion.getZ2()}; + AreaMarker marker = this.markerSet.createAreaMarker( + dominion.getId().toString(), + nameLabel, + true, + dominion.getWorld(), + xx, + zz, + false + ); + marker.setFillStyle(0.2, dominion.getColorHex()); + marker.setLineStyle(1, 0.8, dominion.getColorHex()); + XLogger.debug("Add dominion marker: " + dominion.getName()); + } + + public void setDominionMarkers(List dominions) { + Scheduler.runTaskAsync(() -> { + for (DominionDTO dominion : dominions) { + this.setDominionMarker(dominion); + } + }); + } + + public void setMCAMarkers(Map> mca_files) { + Scheduler.runTaskAsync(() -> { + for (Map.Entry> entry : mca_files.entrySet()) { + for (String file : entry.getValue()) { + String[] cords = file.split("\\."); + int world_x1 = Integer.parseInt(cords[1]) * 512; + int world_x2 = (Integer.parseInt(cords[1]) + 1) * 512; + int world_z1 = Integer.parseInt(cords[2]) * 512; + int world_z2 = (Integer.parseInt(cords[2]) + 1) * 512; + String nameLabel = "
" + file + "
"; + double[] xx = {world_x1, world_x2}; + double[] zz = {world_z1, world_z2}; + AreaMarker marker = this.markerSet.createAreaMarker( + file, + nameLabel, + true, + entry.getKey(), + xx, + zz, + false + ); + marker.setFillStyle(0.2, 0x00CC00); + marker.setLineStyle(1, 0.8, 0x00CC00); + } + } + }); + } + +} diff --git a/src/main/java/cn/lunadeer/dominion/utils/MapRender.java b/src/main/java/cn/lunadeer/dominion/utils/MapRender.java new file mode 100644 index 0000000..c2a9814 --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/utils/MapRender.java @@ -0,0 +1,31 @@ +package cn.lunadeer.dominion.utils; + +import cn.lunadeer.dominion.Cache; +import cn.lunadeer.dominion.Dominion; + +import java.util.List; +import java.util.Map; + +public class MapRender { + + public static void render() { + if (Dominion.config.getBlueMap()) { + BlueMapConnect.render(); + } + + if (Dominion.config.getDynmap()) { + DynmapConnect.instance.setDominionMarkers(Cache.instance.getDominions()); + } + } + + public static void renderMCA(Map> mca_files) { + if (Dominion.config.getBlueMap()) { + BlueMapConnect.renderMCA(mca_files); + } + + if (Dominion.config.getDynmap()) { + DynmapConnect.instance.setMCAMarkers(mca_files); + } + } + +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index a30669e..aa6d258 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -52,7 +52,8 @@ FlyPermissionNodes: # 是否允许玩家从 Residence 迁移领地数据 ResidenceMigration: false -BlueMap: true +BlueMap: false +Dynmap: false CheckUpdate: true diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 6aa760a..0ac2024 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -4,8 +4,9 @@ main: cn.lunadeer.dominion.Dominion api-version: '1.20' load: STARTUP folia-supported: true -loadbefore: +softdepend: - Vault + - dynmap commands: Dominion: description: 领地插件命令