mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-30 16:19:03 +01:00
Fix map decorations to store UUIDs internally.
This commit is contained in:
parent
0730a13e5c
commit
0712a5c5ff
1 changed files with 125 additions and 0 deletions
125
CraftBukkit-Patches/0155-map-decoration-fix.patch
Normal file
125
CraftBukkit-Patches/0155-map-decoration-fix.patch
Normal file
|
@ -0,0 +1,125 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Antony Riley <antony@cyberiantiger.org>
|
||||
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<WorldMap.WorldMapHumanTracker> g = Lists.newArrayList();
|
||||
public Map<EntityHuman, WorldMap.WorldMapHumanTracker> i = Maps.newHashMap(); // Spigot
|
||||
- public Map<String, MapIcon> decorations = Maps.newLinkedHashMap();
|
||||
+ public Map<UUID, MapIcon> 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());
|
||||
--
|
Loading…
Reference in a new issue