2024-02-15 10:55:08 +08:00
|
|
|
package cn.lunadeer.dominion;
|
|
|
|
|
|
|
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
2024-02-16 16:44:19 +08:00
|
|
|
import cn.lunadeer.dominion.utils.XLogger;
|
2024-02-15 10:55:08 +08:00
|
|
|
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;
|
|
|
|
}
|
2024-02-16 16:44:19 +08:00
|
|
|
try {
|
|
|
|
BlueMapAPI.getInstance().ifPresent(api -> {
|
|
|
|
for (Map.Entry<String, List<Integer>> world_dominions : Cache.instance.getWorldDominions().entrySet()) {
|
|
|
|
api.getWorld(world_dominions.getKey()).ifPresent(world -> {
|
|
|
|
MarkerSet markerSet = MarkerSet.builder()
|
|
|
|
.label("Dominion")
|
|
|
|
.build();
|
2024-02-15 10:55:08 +08:00
|
|
|
|
2024-02-16 16:44:19 +08:00
|
|
|
for (Integer id : world_dominions.getValue()) {
|
|
|
|
DominionDTO dominion = Cache.instance.getDominion(id);
|
|
|
|
Collection<Vector2d> vectors = new ArrayList<>();
|
2024-02-23 15:16:43 +08:00
|
|
|
vectors.add(new Vector2d(dominion.getX1() + 0.001, dominion.getZ1() + 0.001));
|
|
|
|
vectors.add(new Vector2d(dominion.getX2() - 0.001, dominion.getZ1() + 0.001));
|
|
|
|
vectors.add(new Vector2d(dominion.getX2() - 0.001, dominion.getZ2() - 0.001));
|
|
|
|
vectors.add(new Vector2d(dominion.getX1() + 0.001, dominion.getZ2() - 0.001));
|
2024-02-16 16:44:19 +08:00
|
|
|
Shape shape = new Shape(vectors);
|
|
|
|
double x = vectors.iterator().next().getX();
|
|
|
|
double z = vectors.iterator().next().getY();
|
|
|
|
double y = dominion.getY1();
|
2024-02-15 10:55:08 +08:00
|
|
|
|
2024-02-16 16:44:19 +08:00
|
|
|
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)
|
2024-02-23 15:16:43 +08:00
|
|
|
.shape(shape, dominion.getY1() + 0.001f, dominion.getY2() - 0.001f)
|
2024-02-16 16:44:19 +08:00
|
|
|
.lineColor(line)
|
|
|
|
.fillColor(fill)
|
|
|
|
.build();
|
|
|
|
markerSet.getMarkers()
|
|
|
|
.put(dominion.getName(), marker);
|
2024-02-15 10:55:08 +08:00
|
|
|
}
|
|
|
|
|
2024-02-16 16:44:19 +08:00
|
|
|
for (BlueMapMap map : world.getMaps()) {
|
|
|
|
map.getMarkerSets().put(world_dominions.getKey() + "-" + markerSet.getLabel(), markerSet);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
});
|
|
|
|
} catch (NoClassDefFoundError e) {
|
|
|
|
XLogger.warn("无法连接 BlueMap 插件,如果你不打算使用卫星地图渲染建议前往配置文件关闭此功能以避免下方的报错。");
|
|
|
|
XLogger.err(e.getMessage());
|
|
|
|
}
|
2024-02-15 10:55:08 +08:00
|
|
|
}
|
|
|
|
}
|