添加了blue map渲染支持

This commit is contained in:
zhangyuheng 2024-02-15 10:55:08 +08:00
parent 52e87c6e79
commit 517426304a
5 changed files with 94 additions and 0 deletions

10
pom.xml
View File

@ -62,6 +62,10 @@
<id>papermc</id>
<url>https://repo.papermc.io/repository/maven-public/</url>
</repository>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<dependencies>
@ -76,5 +80,11 @@
<artifactId>postgresql</artifactId>
<version>42.6.0</version>
</dependency>
<dependency>
<groupId>com.github.BlueMap-Minecraft</groupId>
<artifactId>BlueMapAPI</artifactId>
<version>v2.6.2</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>

View File

@ -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<String, List<DominionDTO>> 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<Vector2d> 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);
}
});
}
});
}
}

View File

@ -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<String, List<DominionDTO>> getWorldDominions() {
return world_dominions;
}
public static Cache instance;
private Map<String, List<DominionDTO>> world_dominions; // 所有领地
private Map<UUID, Map<Integer, PlayerPrivilegeDTO>> player_uuid_to_privilege; // 玩家所有的特权

View File

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

View File

@ -10,4 +10,6 @@ MaxX: 128
MaxY: 64
MaxZ: 128
BlueMap: true
Debug: false