From 3d19f011e90579c46413760fc78ec7f269b229bc Mon Sep 17 00:00:00 2001 From: md_5 Date: Tue, 5 Feb 2019 21:29:03 +1100 Subject: [PATCH] SPIGOT-4608: Improve quality of MapMeta APIs --- .../org/bukkit/craftbukkit/CraftServer.java | 2 +- .../craftbukkit/inventory/CraftMetaMap.java | 19 +++++++++++++++++++ .../bukkit/craftbukkit/util/Commodore.java | 7 +++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java index 5e2d2b6526..ba8fd38926 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -1244,7 +1244,7 @@ public final class CraftServer implements Server { @Override @Deprecated - public CraftMapView getMap(short id) { + public CraftMapView getMap(int id) { PersistentCollection collection = console.getWorldServer(DimensionManager.OVERWORLD).worldMaps; WorldMap worldmap = (WorldMap) collection.get(DimensionManager.OVERWORLD, WorldMap::new, "map_" + id); if (worldmap == null) { diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaMap.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaMap.java index 5f075f6566..e5b1a73023 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaMap.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaMap.java @@ -6,12 +6,15 @@ import net.minecraft.server.NBTTagCompound; import net.minecraft.server.NBTTagInt; import net.minecraft.server.NBTTagString; +import org.bukkit.Bukkit; import org.bukkit.Color; import org.bukkit.Material; import org.bukkit.configuration.serialization.DelegateDeserialization; import org.bukkit.craftbukkit.inventory.CraftMetaItem.SerializableMeta; import org.bukkit.inventory.meta.MapMeta; +import org.bukkit.map.MapView; +import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; import org.bukkit.craftbukkit.util.CraftMagicNumbers; @@ -147,6 +150,22 @@ class CraftMetaMap extends CraftMetaItem implements MapMeta { this.mapId = id; } + @Override + public boolean hasMapView() { + return mapId != null; + } + + @Override + public MapView getMapView() { + Preconditions.checkState(hasMapView(), "Item does not have map associated - check hasMapView() first!"); + return Bukkit.getMap(mapId); + } + + @Override + public void setMapView(MapView map) { + this.mapId = (map != null) ? map.getId() : null; + } + boolean hasScaling() { return scaling != SCALING_EMPTY; } diff --git a/src/main/java/org/bukkit/craftbukkit/util/Commodore.java b/src/main/java/org/bukkit/craftbukkit/util/Commodore.java index 875b4f77c3..dd57c5c323 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/Commodore.java +++ b/src/main/java/org/bukkit/craftbukkit/util/Commodore.java @@ -206,6 +206,13 @@ public class Commodore super.visitMethodInsn( opcode, owner, name, "()I", itf ); return; } + // SPIGOT-4608 + if ( (owner.equals( "org/bukkit/Bukkit" ) || owner.equals( "org/bukkit/Server" ) ) && name.equals( "getMap" ) && desc.equals( "(Lorg/bukkit/map/MapView;)S" ) ) + { + // Should be same size on stack so just call other method + super.visitMethodInsn( opcode, owner, name, "(Lorg/bukkit/map/MapView;)I", itf ); + return; + } if ( modern ) {