From 1f6afb893441f3c9133648214bcc42bf642b67a1 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. --- ...f-ZombiePigmen-spawning-in-portal-bl.patch | 8 +- .../0155-map-decoration-fix.patch | 127 ++++++++++++++++++ 2 files changed, 131 insertions(+), 4 deletions(-) create mode 100644 CraftBukkit-Patches/0155-map-decoration-fix.patch diff --git a/CraftBukkit-Patches/0072-Allow-toggling-of-ZombiePigmen-spawning-in-portal-bl.patch b/CraftBukkit-Patches/0072-Allow-toggling-of-ZombiePigmen-spawning-in-portal-bl.patch index 79732653b..bfcdf5855 100644 --- a/CraftBukkit-Patches/0072-Allow-toggling-of-ZombiePigmen-spawning-in-portal-bl.patch +++ b/CraftBukkit-Patches/0072-Allow-toggling-of-ZombiePigmen-spawning-in-portal-bl.patch @@ -1,4 +1,4 @@ -From 0e03c1c520dd6f1085cdcaeca6ec2c3b15db0c95 Mon Sep 17 00:00:00 2001 +From 86ffba1e26fe732582e39d6f47274d35685793b7 Mon Sep 17 00:00:00 2001 From: Dmck2b Date: Mon, 20 Jan 2014 20:18:23 +0000 Subject: [PATCH] Allow toggling of ZombiePigmen spawning in portal blocks @@ -18,10 +18,10 @@ index 030f4e9..4dc40eb 100644 BlockPosition blockposition1; diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java -index 891812a..1971dbf 100644 +index 20800ed..a684d68 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java -@@ -259,4 +259,11 @@ public class SpigotWorldConfig +@@ -261,4 +261,11 @@ public class SpigotWorldConfig nerfSpawnerMobs = getBoolean( "nerf-spawner-mobs", false ); log( "Nerfing mobs spawned from spawners: " + nerfSpawnerMobs ); } @@ -34,5 +34,5 @@ index 891812a..1971dbf 100644 + } } -- -2.1.4 +1.9.1 diff --git a/CraftBukkit-Patches/0155-map-decoration-fix.patch b/CraftBukkit-Patches/0155-map-decoration-fix.patch new file mode 100644 index 000000000..ab072b0e7 --- /dev/null +++ b/CraftBukkit-Patches/0155-map-decoration-fix.patch @@ -0,0 +1,127 @@ +From c5d744d965a655960494d8627c0110271a3444d7 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 976de16..1008567 100644 +--- a/src/main/java/net/minecraft/server/EntityItemFrame.java ++++ b/src/main/java/net/minecraft/server/EntityItemFrame.java +@@ -1,5 +1,8 @@ + package net.minecraft.server; + ++import java.util.UUID; ++import org.apache.commons.codec.Charsets; ++ + public class EntityItemFrame extends EntityHanging { + + private float c = 1.0F; +@@ -85,7 +88,7 @@ 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 9772760..162b3a3 100644 +--- a/src/main/java/net/minecraft/server/WorldMap.java ++++ b/src/main/java/net/minecraft/server/WorldMap.java +@@ -1,5 +1,6 @@ + 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; +@@ -23,7 +24,7 @@ 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; +@@ -144,7 +145,7 @@ 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) { +@@ -152,7 +153,7 @@ 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); +@@ -164,7 +165,7 @@ 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)) { +@@ -173,15 +174,18 @@ 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 d56a291..ad47bdd 100644 +--- a/src/main/java/org/bukkit/craftbukkit/map/CraftMapRenderer.java ++++ b/src/main/java/org/bukkit/craftbukkit/map/CraftMapRenderer.java +@@ -1,5 +1,6 @@ + package org.bukkit.craftbukkit.map; + ++import java.util.UUID; + import net.minecraft.server.WorldMap; + import net.minecraft.server.MapIcon; + +@@ -34,13 +35,12 @@ 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()); +-- +1.9.1 +