Merge branch 'dynmap-impl'

# Conflicts:
#	pom.xml
#	src/main/java/cn/lunadeer/dominion/Cache.java
This commit is contained in:
zhangyuheng 2024-07-18 11:33:17 +08:00
commit 81e7cdd217
10 changed files with 155 additions and 18 deletions

View File

@ -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"

View File

@ -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

View File

@ -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());
});
}

View File

@ -428,4 +428,8 @@ public class DominionDTO {
public String getColor() {
return (String) color.value;
}
public int getColorHex() {
return (getColorR() << 16) + (getColorG() << 8) + getColorB();
}
}

View File

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

View File

@ -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<String, List<String>> mca_files) {
if (!Dominion.config.getBlueMap()) {
return;
}
Scheduler.runTaskAsync(() -> {
try {
BlueMapAPI.getInstance().ifPresent(api -> {

View File

@ -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 = "<div>" + dominion.getName() + "</div>";
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<DominionDTO> dominions) {
Scheduler.runTaskAsync(() -> {
this.markerSet_dominion.getAreaMarkers().forEach(AreaMarker::deleteMarker);
for (DominionDTO dominion : dominions) {
this.setDominionMarker(dominion);
}
});
}
public void setMCAMarkers(Map<String, List<String>> mca_files) {
Scheduler.runTaskAsync(() -> {
this.markerSet_mca.getAreaMarkers().forEach(AreaMarker::deleteMarker);
for (Map.Entry<String, List<String>> 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 = "<div>" + file + "</div>";
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);
}
}
});
}
}

View File

@ -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<String, List<String>> mca_files) {
if (Dominion.config.getBlueMap()) {
BlueMapConnect.renderMCA(mca_files);
}
if (Dominion.config.getDynmap()) {
DynmapConnect.instance.setMCAMarkers(mca_files);
}
}
}

View File

@ -52,7 +52,8 @@ FlyPermissionNodes:
# 是否允许玩家从 Residence 迁移领地数据
ResidenceMigration: false
BlueMap: true
BlueMap: false
Dynmap: false
CheckUpdate: true

View File

@ -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: 领地插件命令