diff --git a/src/main/java/cn/lunadeer/dominion/Cache.java b/src/main/java/cn/lunadeer/dominion/Cache.java index f935736..c3a0180 100644 --- a/src/main/java/cn/lunadeer/dominion/Cache.java +++ b/src/main/java/cn/lunadeer/dominion/Cache.java @@ -5,6 +5,9 @@ import cn.lunadeer.dominion.dtos.Flag; import cn.lunadeer.dominion.dtos.GroupDTO; import cn.lunadeer.dominion.dtos.MemberDTO; import cn.lunadeer.dominion.utils.Particle; +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.Scheduler; @@ -91,7 +94,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 3ffb019..b895667 100644 --- a/src/main/java/cn/lunadeer/dominion/Dominion.java +++ b/src/main/java/cn/lunadeer/dominion/Dominion.java @@ -5,6 +5,9 @@ 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; @@ -12,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; @@ -71,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 d8ab40b..ebbae8f 100644 --- a/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java +++ b/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java @@ -428,4 +428,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..0b29086 --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/utils/DynmapConnect.java @@ -0,0 +1,94 @@ +package cn.lunadeer.dominion.utils; + +import cn.lunadeer.dominion.dtos.DominionDTO; +import cn.lunadeer.minecraftpluginutils.Scheduler; +import cn.lunadeer.minecraftpluginutils.XLogger; +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.List; +import java.util.Map; + +public class DynmapConnect extends DynmapCommonAPIListener { + + public static DynmapConnect instance; + + private MarkerSet markerSet_dominion; + private MarkerSet markerSet_mca; + + public DynmapConnect() { + instance = this; + } + + @Override + public void apiEnabled(DynmapCommonAPI dynmapCommonAPI) { + MarkerAPI markerAPI = dynmapCommonAPI.getMarkerAPI(); + this.markerSet_dominion = markerAPI.getMarkerSet("dominion"); + if (this.markerSet_dominion == null) { + this.markerSet_dominion = markerAPI.createMarkerSet("dominion", "Dominion领地", null, false); + } + if (this.markerSet_mca == null) { + this.markerSet_mca = markerAPI.createMarkerSet("mca", "MCA文件", 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_dominion.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(() -> { + this.markerSet_dominion.getAreaMarkers().forEach(AreaMarker::deleteMarker); + for (DominionDTO dominion : dominions) { + this.setDominionMarker(dominion); + } + }); + } + + public void setMCAMarkers(Map> mca_files) { + Scheduler.runTaskAsync(() -> { + this.markerSet_mca.getAreaMarkers().forEach(AreaMarker::deleteMarker); + 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_mca.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: 领地插件命令