From 0712a5c5ff48a9a42bb9b4281ad6f7225210bf82 Mon Sep 17 00:00:00 2001 From: Antony Riley Date: Fri, 5 Jun 2015 09:43:14 +0300 Subject: [PATCH] Fix map decorations to store UUIDs internally. --- .../0155-map-decoration-fix.patch | 125 ++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 CraftBukkit-Patches/0155-map-decoration-fix.patch diff --git a/CraftBukkit-Patches/0155-map-decoration-fix.patch b/CraftBukkit-Patches/0155-map-decoration-fix.patch new file mode 100644 index 0000000000..b0fbac20e6 --- /dev/null +++ b/CraftBukkit-Patches/0155-map-decoration-fix.patch @@ -0,0 +1,125 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Antony Riley +Date: Sun, 26 Apr 2015 02:14:13 +0300 +Subject: [PATCH] map decoration fix + + +diff --git a/src/main/java/net/minecraft/server/EntityItemFrame.java b/src/main/java/net/minecraft/server/EntityItemFrame.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/server/EntityItemFrame.java ++++ b/src/main/java/net/minecraft/server/EntityItemFrame.java +@@ -0,0 +0,0 @@ + package net.minecraft.server; + ++import java.util.UUID; ++import org.apache.commons.codec.Charsets; ++ + public class EntityItemFrame extends EntityHanging { + + private float c = 1.0F; +@@ -0,0 +0,0 @@ public class EntityItemFrame extends EntityHanging { + if (itemstack.getItem() == Items.FILLED_MAP) { + WorldMap worldmap = ((ItemWorldMap) itemstack.getItem()).getSavedMap(itemstack, this.world); + +- worldmap.decorations.remove("frame-" + this.getId()); ++ worldmap.decorations.remove(UUID.nameUUIDFromBytes(("frame-" + this.getId()).getBytes(Charsets.US_ASCII))); // Spigot + } + + itemstack.a((EntityItemFrame) null); +diff --git a/src/main/java/net/minecraft/server/WorldMap.java b/src/main/java/net/minecraft/server/WorldMap.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/server/WorldMap.java ++++ b/src/main/java/net/minecraft/server/WorldMap.java +@@ -0,0 +0,0 @@ + package net.minecraft.server; + ++import com.google.common.base.Charsets; + import com.google.common.collect.Lists; + import com.google.common.collect.Maps; + import java.util.Iterator; +@@ -0,0 +0,0 @@ public class WorldMap extends PersistentBase { + public byte[] colors = new byte[16384]; + public List g = Lists.newArrayList(); + public Map i = Maps.newHashMap(); // Spigot +- public Map decorations = Maps.newLinkedHashMap(); ++ public Map decorations = Maps.newLinkedHashMap(); // Spigot + + // CraftBukkit start + public final CraftMapView mapView; +@@ -0,0 +0,0 @@ public class WorldMap extends PersistentBase { + } + + if (!entityhuman.inventory.c(itemstack)) { +- this.decorations.remove(entityhuman.getName()); ++ this.decorations.remove(entityhuman.getUniqueID()); // Spigot + } + + for (int i = 0; i < this.g.size(); ++i) { +@@ -0,0 +0,0 @@ public class WorldMap extends PersistentBase { + + if (!worldmap_worldmaphumantracker1.trackee.dead && (worldmap_worldmaphumantracker1.trackee.inventory.c(itemstack) || itemstack.y())) { + if (!itemstack.y() && worldmap_worldmaphumantracker1.trackee.dimension == this.map) { +- this.a(0, worldmap_worldmaphumantracker1.trackee.world, worldmap_worldmaphumantracker1.trackee.getName(), worldmap_worldmaphumantracker1.trackee.locX, worldmap_worldmaphumantracker1.trackee.locZ, (double) worldmap_worldmaphumantracker1.trackee.yaw); ++ this.a(0, worldmap_worldmaphumantracker1.trackee.world, worldmap_worldmaphumantracker1.trackee.getUniqueID(), worldmap_worldmaphumantracker1.trackee.locX, worldmap_worldmaphumantracker1.trackee.locZ, (double) worldmap_worldmaphumantracker1.trackee.yaw); // Spigot + } + } else { + this.i.remove(worldmap_worldmaphumantracker1.trackee); +@@ -0,0 +0,0 @@ public class WorldMap extends PersistentBase { + EntityItemFrame entityitemframe = itemstack.z(); + BlockPosition blockposition = entityitemframe.getBlockPosition(); + +- this.a(1, entityhuman.world, "frame-" + entityitemframe.getId(), (double) blockposition.getX(), (double) blockposition.getZ(), (double) (entityitemframe.direction.b() * 90)); ++ this.a(1, entityhuman.world, UUID.nameUUIDFromBytes(("frame-" + entityitemframe.getId()).getBytes(Charsets.US_ASCII)), (double) blockposition.getX(), (double) blockposition.getZ(), (double) (entityitemframe.direction.b() * 90)); // Spigot + } + + if (itemstack.hasTag() && itemstack.getTag().hasKeyOfType("Decorations", 9)) { +@@ -0,0 +0,0 @@ public class WorldMap extends PersistentBase { + for (int j = 0; j < nbttaglist.size(); ++j) { + NBTTagCompound nbttagcompound = nbttaglist.get(j); + +- if (!this.decorations.containsKey(nbttagcompound.getString("id"))) { +- this.a(nbttagcompound.getByte("type"), entityhuman.world, nbttagcompound.getString("id"), nbttagcompound.getDouble("x"), nbttagcompound.getDouble("z"), nbttagcompound.getDouble("rot")); ++ // Spigot - start ++ UUID uuid = UUID.nameUUIDFromBytes(nbttagcompound.getString("id").getBytes(Charsets.US_ASCII)); ++ if (!this.decorations.containsKey(uuid)) { ++ this.a(nbttagcompound.getByte("type"), entityhuman.world, uuid, nbttagcompound.getDouble("x"), nbttagcompound.getDouble("z"), nbttagcompound.getDouble("rot")); ++ // Spigot - end + } + } + } + + } + +- private void a(int i, World world, String s, double d0, double d1, double d2) { ++ private void a(int i, World world, UUID s, double d0, double d1, double d2) { + int j = 1 << this.scale; + float f = (float) (d0 - (double) this.centerX) / (float) j; + float f1 = (float) (d1 - (double) this.centerZ) / (float) j; +diff --git a/src/main/java/org/bukkit/craftbukkit/map/CraftMapRenderer.java b/src/main/java/org/bukkit/craftbukkit/map/CraftMapRenderer.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/org/bukkit/craftbukkit/map/CraftMapRenderer.java ++++ b/src/main/java/org/bukkit/craftbukkit/map/CraftMapRenderer.java +@@ -0,0 +0,0 @@ + package org.bukkit.craftbukkit.map; + ++import java.util.UUID; + import net.minecraft.server.WorldMap; + import net.minecraft.server.MapIcon; + +@@ -0,0 +0,0 @@ public class CraftMapRenderer extends MapRenderer { + cursors.removeCursor(cursors.getCursor(0)); + } + +- for (Object key : worldMap.decorations.keySet()) { ++ for (UUID key : worldMap.decorations.keySet()) { // Spigot string -> uuid. + // If this cursor is for a player check visibility with vanish system +- Player other = Bukkit.getPlayerExact((String) key); ++ Player other = Bukkit.getPlayer(key); // Spigot + if (other != null && !player.canSee(other)) { + continue; + } +- + + MapIcon decoration = (MapIcon) worldMap.decorations.get(key); + cursors.addCursor(decoration.getX(), decoration.getY(), (byte) (decoration.getRotation() & 15), decoration.getType()); +-- \ No newline at end of file