我知道可以使用Bukkit.getServer().createMap(Bukkit.getWorld("world"));
创建地图,但是这会创建一个包含第一个可用ID的地图。假设我想创建一个id为10000的地图。当我尝试使用Bukkit.getServer().getMap(10000);
时,它返回null,因为这个地图不存在。
如何使用特定ID创建MapView?
答案 0 :(得分:0)
它很难看但它有效:
import net.minecraft.server.v1_11_R1.WorldMap;
import net.minecraft.server.v1_11_R1.WorldServer;
public static MapView createMap(World world, int id) {
WorldServer ws = ((CraftWorld) world).getHandle();
String name = "map_" + id;
WorldMap map = new WorldMap(name);
map.scale = 3;
map.a(ws.getWorldData().b(), ws.getWorldData().d(), map.scale);
map.map = (byte) ws.dimension;
map.c();
ws.getServer().getServer().worlds.get(0).a(name, map);
MapInitializeEvent event = new MapInitializeEvent(map.mapView);
Bukkit.getServer().getPluginManager().callEvent(event);
return map.mapView;
}
仅在Spigot 1.11.2上测试过,但此方法适用于其他一些版本。我刚刚修改了NMS现有代码以使用自定义ID。
这是相当低级别的NMS,所以如果此方法从现在开始不再有一些更新,我不会感到惊讶。