如何创建具有特定ID的MapView?

时间:2017-06-26 15:21:15

标签: java minecraft bukkit

我知道可以使用Bukkit.getServer().createMap(Bukkit.getWorld("world"));创建地图,但是这会创建一个包含第一个可用ID的地图。假设我想创建一个id为10000的地图。当我尝试使用Bukkit.getServer().getMap(10000);时,它返回null,因为这个地图不存在。

如何使用特定ID创建MapView?

1 个答案:

答案 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,所以如果此方法从现在开始不再有一些更新,我不会感到惊讶。