2017-06-26 6 views
1

Ich weiß, dass es möglich ist, eine Karte mit Bukkit.getServer().createMap(Bukkit.getWorld("world")); zu erstellen, dies wird jedoch eine Karte mit der ersten verfügbaren ID erstellen. Nehmen wir an, ich möchte eine Karte mit der ID 10000 erstellen. Wenn ich versuche, Bukkit.getServer().getMap(10000); zu verwenden, gibt es null zurück, weil diese Zuordnung nicht vorhanden ist.Wie erstelle ich ein MapView mit einer bestimmten ID?

Wie erstellt man ein MapView mit einer bestimmten ID?

+0

Warum genau benötigen Sie diese Funktion? Going NMS wird nie empfohlen – Kerooker

+0

@Kerooker Ich erstelle eine Anzeige mit Bildern, die jede Minute aktualisiert. Ich möchte nicht riskieren, andere Karten zu überschreiben. Ich habe 10000 gewählt, weil benutzergenerierte Karten diese ID wahrscheinlich niemals erreichen. Warum empfehlen Sie NMS nicht? Ist es, weil es zwischen Versionen brechen kann oder ist es wegen etwas anderem? – nelson2tm

+0

Kann zwischen den Versionen brechen und ist schwer zu implementieren Performance-weise – Kerooker

Antwort

0

Es ist hässlich, aber es funktioniert:

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

Nur auf Spigot getestet 1.11.2 aber diese Methode sollte auf einigen anderen Versionen funktionieren. Ich habe gerade den vorhandenen NMS-Code geändert, um eine benutzerdefinierte ID zu verwenden.

Dies ist ziemlich niedrigen NMS, so würde ich nicht überrascht sein, wenn diese Methode nicht mehr funktioniert ein paar Updates von jetzt an.

+0

Dies wird nur eine Karte mit der nächsten verfügbaren ID machen, wie es tun würde, wenn Sie 'Bukkit.getServer(). CreateMap (Welt);' – nelson2tm

+0

@ nelson2tm Try Dies. Es funktioniert für mich auf 1.11.2, aber Sie müssen es jedes Mal testen, wenn Sie aktualisieren. – kmecpp

Verwandte Themen