From 006da500e9152c399eb4f1b5e872124aaa3135bb Mon Sep 17 00:00:00 2001
From: Spigot <noreply+git-spigot@papermc.io>
Date: Sun, 24 Feb 2013 13:37:20 +1100
Subject: [PATCH] Try new way of handling maps in frames

By: Aikar <aikar@aikar.co>
---
 ...nd-maps-in-item-frames-upon-tracking.patch | 89 +++++++++++++++++++
 ...less-often-to-combat-the-lag-they-ca.patch | 64 -------------
 ...n-Range-This-feature-gives-3-new-con.patch | 10 +--
 ...5-Infrequently-send-tab-list-updates.patch | 12 +--
 ...-the-Metrics-system-to-be-closer-to-.patch |  6 +-
 .../0029-Watchdog-Thread.patch                | 10 +--
 CraftBukkit-Patches/0030-Netty.patch          |  6 +-
 7 files changed, 111 insertions(+), 86 deletions(-)
 create mode 100644 CraftBukkit-Patches/0021-Only-send-maps-in-item-frames-upon-tracking.patch
 delete mode 100644 CraftBukkit-Patches/0021-Send-maps-a-lot-less-often-to-combat-the-lag-they-ca.patch

diff --git a/CraftBukkit-Patches/0021-Only-send-maps-in-item-frames-upon-tracking.patch b/CraftBukkit-Patches/0021-Only-send-maps-in-item-frames-upon-tracking.patch
new file mode 100644
index 0000000000..e70cccbd8c
--- /dev/null
+++ b/CraftBukkit-Patches/0021-Only-send-maps-in-item-frames-upon-tracking.patch
@@ -0,0 +1,89 @@
+From d2a991ef24ccf92299160afc6a56128eed966733 Mon Sep 17 00:00:00 2001
+From: Aikar <aikar@aikar.co>
+Date: Tue, 19 Feb 2013 17:26:20 -0500
+Subject: [PATCH] Only send maps in item frames upon tracking
+
+Maps in item frames are full of bugs.
+1) It sends an update of the Maps data to ALL players in the world, not just the players tracking it.
+2) It sends an update EVERY tick, not every 10 ticks as intended.
+
+To optimize performance of maps in item frames, we will only send it once a player tracks the ItemFrame until it completes, then that player will not receive more updates.
+
+This means cursors will not dynamically update, but the map data should refresh every time the player moves away then back.
+---
+ .../net/minecraft/server/EntityTrackerEntry.java   | 25 ++++++++++++++++------
+ 1 file changed, 19 insertions(+), 6 deletions(-)
+
+diff --git a/src/main/java/net/minecraft/server/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/EntityTrackerEntry.java
+index a026c4c..75c146d 100644
+--- a/src/main/java/net/minecraft/server/EntityTrackerEntry.java
++++ b/src/main/java/net/minecraft/server/EntityTrackerEntry.java
+@@ -36,6 +36,7 @@ public class EntityTrackerEntry {
+     public boolean n = false;
+     public Set trackedPlayers = new HashSet();
+ 
++    public List<EntityPlayer> playersToUpdate = new java.util.ArrayList<EntityPlayer>(); // Spigot
+     public EntityTrackerEntry(Entity entity, int i, int j, boolean flag) {
+         this.tracker = entity;
+         this.b = i;
+@@ -73,17 +74,17 @@ public class EntityTrackerEntry {
+             this.broadcast(new Packet39AttachEntity(this.tracker, this.tracker.vehicle));
+         }
+ 
+-        if (this.tracker instanceof EntityItemFrame && this.m % 10 == 0) {
++        if (this.tracker instanceof EntityItemFrame) { // Spigot - has to be ran every tick for general frames or they may pop off?
+             EntityItemFrame i4 = (EntityItemFrame) this.tracker;
+             ItemStack i5 = i4.i();
+ 
+-            if (i5 != null && i5.getItem() instanceof ItemWorldMap) {
++            if (this.m++ % 10 == 0 && i5 != null && i5.getItem() instanceof ItemWorldMap && playersToUpdate.size() > 0) { // Spigot
+                 WorldMap i7 = Item.MAP.getSavedMap(i5, this.tracker.world);
+-                Iterator j0 = list.iterator();
++                Iterator j0 = playersToUpdate.iterator(); // Spigot
+ 
+                 while (j0.hasNext()) {
+-                    EntityHuman j1 = (EntityHuman) j0.next();
+-                    EntityPlayer j2 = (EntityPlayer) j1;
++                    //EntityHuman j1 = (EntityHuman) j0.next(); // Spigot - unused
++                    EntityPlayer j2 = (EntityPlayer) j0.next(); // Spigot
+ 
+                     i7.a(j2, i5);
+                     if (j2.playerConnection.lowPriorityCount() <= 5) {
+@@ -91,7 +92,7 @@ public class EntityTrackerEntry {
+ 
+                         if (j3 != null) {
+                             j2.playerConnection.sendPacket(j3);
+-                        }
++                        } else { j0.remove(); } // Spigot
+                     }
+                 }
+             }
+@@ -329,6 +330,17 @@ public class EntityTrackerEntry {
+                         }
+                     }
+ 
++                    // Spigot start - add player to list to receive initial map updates.
++                    if (this.tracker instanceof EntityItemFrame) {
++                        EntityItemFrame i4 = (EntityItemFrame) this.tracker;
++                        ItemStack i5 = i4.i();
++
++                        if (i5 != null && i5.getItem() instanceof ItemWorldMap) {
++                            this.playersToUpdate.add(entityplayer);
++                        }
++                    }
++                    // Spigot end
++
+                     if (this.tracker instanceof EntityHuman) {
+                         EntityHuman entityhuman = (EntityHuman) this.tracker;
+ 
+@@ -355,6 +367,7 @@ public class EntityTrackerEntry {
+                 }
+             } else if (this.trackedPlayers.contains(entityplayer)) {
+                 this.trackedPlayers.remove(entityplayer);
++                this.playersToUpdate.remove(entityplayer); // Spigot
+                 entityplayer.removeQueue.add(Integer.valueOf(this.tracker.id));
+             }
+         }
+-- 
+1.8.1-rc2
+
diff --git a/CraftBukkit-Patches/0021-Send-maps-a-lot-less-often-to-combat-the-lag-they-ca.patch b/CraftBukkit-Patches/0021-Send-maps-a-lot-less-often-to-combat-the-lag-they-ca.patch
deleted file mode 100644
index bc67a0dc58..0000000000
--- a/CraftBukkit-Patches/0021-Send-maps-a-lot-less-often-to-combat-the-lag-they-ca.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-From 2a34593e2cd2cff381e8d6d6e1a1427221cd24c4 Mon Sep 17 00:00:00 2001
-From: md_5 <md_5@live.com.au>
-Date: Sat, 2 Feb 2013 19:40:53 +1100
-Subject: [PATCH] Send maps a lot less often to combat the lag they cause.
-
----
- src/main/java/net/minecraft/server/EntityTrackerEntry.java | 2 +-
- src/main/java/org/bukkit/craftbukkit/CraftServer.java      | 1 +
- src/main/java/org/bukkit/craftbukkit/Spigot.java           | 1 +
- src/main/resources/configurations/bukkit.yml               | 1 +
- 4 files changed, 4 insertions(+), 1 deletion(-)
-
-diff --git a/src/main/java/net/minecraft/server/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/EntityTrackerEntry.java
-index a026c4c..27a548f 100644
---- a/src/main/java/net/minecraft/server/EntityTrackerEntry.java
-+++ b/src/main/java/net/minecraft/server/EntityTrackerEntry.java
-@@ -73,7 +73,7 @@ public class EntityTrackerEntry {
-             this.broadcast(new Packet39AttachEntity(this.tracker, this.tracker.vehicle));
-         }
- 
--        if (this.tracker instanceof EntityItemFrame && this.m % 10 == 0) {
-+        if (this.tracker instanceof EntityItemFrame && this.m % tracker.world.getServer().mapSendInterval == 0) {
-             EntityItemFrame i4 = (EntityItemFrame) this.tracker;
-             ItemStack i5 = i4.i();
- 
-diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-index 1a3cc03..6c7fa4f 100644
---- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-@@ -179,6 +179,7 @@ public final class CraftServer implements Server {
-     public boolean ipFilter = false;
-     public boolean commandComplete = true;
-     public List<String> spamGuardExclusions;
-+    public int mapSendInterval = 10000;
-     // Spigot end
- 
-     static {
-diff --git a/src/main/java/org/bukkit/craftbukkit/Spigot.java b/src/main/java/org/bukkit/craftbukkit/Spigot.java
-index 3bfeb49..5827820 100644
---- a/src/main/java/org/bukkit/craftbukkit/Spigot.java
-+++ b/src/main/java/org/bukkit/craftbukkit/Spigot.java
-@@ -12,6 +12,7 @@ public class Spigot {
-         server.ipFilter = configuration.getBoolean("settings.filter-unsafe-ips", false);
-         server.commandComplete = configuration.getBoolean("settings.command-complete", true);
-         server.spamGuardExclusions = configuration.getStringList("settings.spam-exclusions");
-+        server.mapSendInterval = configuration.getInt("settings.map-send-interval", server.mapSendInterval);
- 
-         server.orebfuscatorEnabled = configuration.getBoolean("orebfuscator.enable", false);
-         server.orebfuscatorEngineMode = configuration.getInt("orebfuscator.engine-mode", 1);
-diff --git a/src/main/resources/configurations/bukkit.yml b/src/main/resources/configurations/bukkit.yml
-index 78e9a66..548f7c1 100644
---- a/src/main/resources/configurations/bukkit.yml
-+++ b/src/main/resources/configurations/bukkit.yml
-@@ -31,6 +31,7 @@ settings:
-     command-complete: true
-     spam-exclusions:
-        - /skill
-+    map-send-interval: 10000
- world-settings:
-     default:
-         growth-chunks-per-tick: 650
--- 
-1.8.1-rc2
-
diff --git a/CraftBukkit-Patches/0024-Entity-Activation-Range-This-feature-gives-3-new-con.patch b/CraftBukkit-Patches/0024-Entity-Activation-Range-This-feature-gives-3-new-con.patch
index 13873822b6..ee2fd4788c 100644
--- a/CraftBukkit-Patches/0024-Entity-Activation-Range-This-feature-gives-3-new-con.patch
+++ b/CraftBukkit-Patches/0024-Entity-Activation-Range-This-feature-gives-3-new-con.patch
@@ -1,4 +1,4 @@
-From 4cbd04e5c966b8ac72ca363ddb9f5c21307ffc0d Mon Sep 17 00:00:00 2001
+From 45fe88e1961a395c0330f1056ef602444cb963eb Mon Sep 17 00:00:00 2001
 From: Aikar <aikar@aikar.co>
 Date: Sat, 16 Feb 2013 19:45:09 +1100
 Subject: [PATCH] Entity Activation Range# This feature gives 3 new
@@ -123,7 +123,7 @@ index 21bd64a..a083ae4 100644
  
      public Block getBlockAt(int x, int y, int z) {
 diff --git a/src/main/java/org/bukkit/craftbukkit/Spigot.java b/src/main/java/org/bukkit/craftbukkit/Spigot.java
-index 1ead152..a5b05ed 100644
+index ad65bca..bc28d7b 100644
 --- a/src/main/java/org/bukkit/craftbukkit/Spigot.java
 +++ b/src/main/java/org/bukkit/craftbukkit/Spigot.java
 @@ -1,7 +1,10 @@
@@ -137,7 +137,7 @@ index 1ead152..a5b05ed 100644
  
  public class Spigot {
  
-@@ -27,5 +30,151 @@ public class Spigot {
+@@ -26,5 +29,151 @@ public class Spigot {
          if (server.chunkGCPeriod == 0) {
              server.getLogger().severe("[Spigot] You should not disable chunk-gc, unexpected behaviour may occur!");
          }
@@ -309,10 +309,10 @@ index bb0c191..6a4a05e 100644
      }
  }
 diff --git a/src/main/resources/configurations/bukkit.yml b/src/main/resources/configurations/bukkit.yml
-index 548f7c1..eea3265 100644
+index 78e9a66..54e28db 100644
 --- a/src/main/resources/configurations/bukkit.yml
 +++ b/src/main/resources/configurations/bukkit.yml
-@@ -47,6 +47,9 @@ world-settings:
+@@ -46,6 +46,9 @@ world-settings:
          sugar-growth-modifier: 100
          tree-growth-modifier: 100
          mushroom-growth-modifier: 100
diff --git a/CraftBukkit-Patches/0025-Infrequently-send-tab-list-updates.patch b/CraftBukkit-Patches/0025-Infrequently-send-tab-list-updates.patch
index d8bcd1d821..69c5e74d48 100644
--- a/CraftBukkit-Patches/0025-Infrequently-send-tab-list-updates.patch
+++ b/CraftBukkit-Patches/0025-Infrequently-send-tab-list-updates.patch
@@ -1,4 +1,4 @@
-From fea4d2a2bb5531b602f0026fd9a34524dea9c142 Mon Sep 17 00:00:00 2001
+From d8bd72d1293a2c074efa2dc4f5093a3d6f0a8351 Mon Sep 17 00:00:00 2001
 From: md_5 <md_5@live.com.au>
 Date: Sat, 16 Feb 2013 19:05:15 +1100
 Subject: [PATCH] Infrequently send tab list updates.
@@ -36,7 +36,7 @@ index d13fa19..3fc66aa 100644
  
      public void sendAll(Packet packet) {
 diff --git a/src/main/java/org/bukkit/craftbukkit/Spigot.java b/src/main/java/org/bukkit/craftbukkit/Spigot.java
-index a5b05ed..8c67fc3 100644
+index bc28d7b..dafbbc7 100644
 --- a/src/main/java/org/bukkit/craftbukkit/Spigot.java
 +++ b/src/main/java/org/bukkit/craftbukkit/Spigot.java
 @@ -7,6 +7,7 @@ import org.bukkit.configuration.file.YamlConfiguration;
@@ -47,7 +47,7 @@ index a5b05ed..8c67fc3 100644
  
      public static void initialize(CraftServer server, SimpleCommandMap commandMap, YamlConfiguration configuration) {
          commandMap.register("bukkit", new org.bukkit.craftbukkit.command.TicksPerSecondCommand("tps"));
-@@ -31,6 +32,7 @@ public class Spigot {
+@@ -30,6 +31,7 @@ public class Spigot {
              server.getLogger().severe("[Spigot] You should not disable chunk-gc, unexpected behaviour may occur!");
          }
  
@@ -56,13 +56,13 @@ index a5b05ed..8c67fc3 100644
  
      /**
 diff --git a/src/main/resources/configurations/bukkit.yml b/src/main/resources/configurations/bukkit.yml
-index eea3265..a35f3dd 100644
+index 54e28db..26e6566 100644
 --- a/src/main/resources/configurations/bukkit.yml
 +++ b/src/main/resources/configurations/bukkit.yml
-@@ -32,6 +32,7 @@ settings:
+@@ -31,6 +31,7 @@ settings:
+     command-complete: true
      spam-exclusions:
         - /skill
-     map-send-interval: 10000
 +    tab-ping: false
  world-settings:
      default:
diff --git a/CraftBukkit-Patches/0028-Metrics.-Rewrite-the-Metrics-system-to-be-closer-to-.patch b/CraftBukkit-Patches/0028-Metrics.-Rewrite-the-Metrics-system-to-be-closer-to-.patch
index 775f9416a2..0a6d322e7c 100644
--- a/CraftBukkit-Patches/0028-Metrics.-Rewrite-the-Metrics-system-to-be-closer-to-.patch
+++ b/CraftBukkit-Patches/0028-Metrics.-Rewrite-the-Metrics-system-to-be-closer-to-.patch
@@ -1,4 +1,4 @@
-From 7e2dbccd84dfb0f01457e1ba3f0db86ad86fe2c8 Mon Sep 17 00:00:00 2001
+From 2f462a8b4cf8db8ad8b18e93707fafecfe20a1e2 Mon Sep 17 00:00:00 2001
 From: md_5 <md_5@live.com.au>
 Date: Sat, 23 Feb 2013 08:58:35 +1100
 Subject: [PATCH] Metrics. Rewrite the Metrics system to be closer to the
@@ -11,7 +11,7 @@ Subject: [PATCH] Metrics. Rewrite the Metrics system to be closer to the
  create mode 100644 src/main/java/org/spigotmc/Metrics.java
 
 diff --git a/src/main/java/org/bukkit/craftbukkit/Spigot.java b/src/main/java/org/bukkit/craftbukkit/Spigot.java
-index 8c67fc3..5729cd6 100644
+index dafbbc7..8c3cda5 100644
 --- a/src/main/java/org/bukkit/craftbukkit/Spigot.java
 +++ b/src/main/java/org/bukkit/craftbukkit/Spigot.java
 @@ -1,13 +1,19 @@
@@ -34,7 +34,7 @@ index 8c67fc3..5729cd6 100644
  
      public static void initialize(CraftServer server, SimpleCommandMap commandMap, YamlConfiguration configuration) {
          commandMap.register("bukkit", new org.bukkit.craftbukkit.command.TicksPerSecondCommand("tps"));
-@@ -33,6 +39,15 @@ public class Spigot {
+@@ -32,6 +38,15 @@ public class Spigot {
          }
  
          tabPing = configuration.getBoolean("settings.tab-ping", tabPing);
diff --git a/CraftBukkit-Patches/0029-Watchdog-Thread.patch b/CraftBukkit-Patches/0029-Watchdog-Thread.patch
index cb26509830..6db7d56c3c 100644
--- a/CraftBukkit-Patches/0029-Watchdog-Thread.patch
+++ b/CraftBukkit-Patches/0029-Watchdog-Thread.patch
@@ -1,4 +1,4 @@
-From 3cf07f7a095e0a3e6f751b7fe275416ed8d6fa9a Mon Sep 17 00:00:00 2001
+From cd8026eec14b1b342f20cfad6f6f72cf4ef5d9a3 Mon Sep 17 00:00:00 2001
 From: md_5 <md_5@live.com.au>
 Date: Sat, 23 Feb 2013 12:33:20 +1100
 Subject: [PATCH] Watchdog Thread.
@@ -33,7 +33,7 @@ index 128016f..3a6b620 100644
                  this.isStopped = true;
              } catch (Throwable throwable1) {
 diff --git a/src/main/java/org/bukkit/craftbukkit/Spigot.java b/src/main/java/org/bukkit/craftbukkit/Spigot.java
-index 5729cd6..68c1b42 100644
+index 8c3cda5..5a96c86 100644
 --- a/src/main/java/org/bukkit/craftbukkit/Spigot.java
 +++ b/src/main/java/org/bukkit/craftbukkit/Spigot.java
 @@ -1,5 +1,6 @@
@@ -65,9 +65,9 @@ index 5729cd6..68c1b42 100644
  
          server.whitelistMessage = configuration.getString("settings.whitelist-message", server.whitelistMessage);
          server.stopMessage = configuration.getString("settings.stop-message", server.stopMessage);
-@@ -26,12 +31,21 @@ public class Spigot {
+@@ -25,12 +30,21 @@ public class Spigot {
+         server.commandComplete = configuration.getBoolean("settings.command-complete", true);
          server.spamGuardExclusions = configuration.getStringList("settings.spam-exclusions");
-         server.mapSendInterval = configuration.getInt("settings.map-send-interval", server.mapSendInterval);
  
 +        int configVersion = configuration.getInt("config-version");
 +        switch (configVersion) {
@@ -88,7 +88,7 @@ index 5729cd6..68c1b42 100644
          }
  
          if (server.chunkGCPeriod == 0) {
-@@ -194,4 +208,63 @@ public class Spigot {
+@@ -193,4 +207,63 @@ public class Spigot {
          return (entity instanceof EntityArrow && !((EntityArrow) entity).inGround);
  
      }
diff --git a/CraftBukkit-Patches/0030-Netty.patch b/CraftBukkit-Patches/0030-Netty.patch
index 0cee6506b5..91c3d8a194 100644
--- a/CraftBukkit-Patches/0030-Netty.patch
+++ b/CraftBukkit-Patches/0030-Netty.patch
@@ -1,4 +1,4 @@
-From 0afe6bde8bccf04189ddb6775d60bcfa0e3b8025 Mon Sep 17 00:00:00 2001
+From 6ef28f7cbf0936ddb73d5ae8fde5e9b043070e74 Mon Sep 17 00:00:00 2001
 From: md_5 <md_5@live.com.au>
 Date: Thu, 14 Feb 2013 17:32:20 +1100
 Subject: [PATCH] Netty
@@ -222,7 +222,7 @@ index 58d30eb..e4e5049 100644
          // CraftBukkit end
          this.pendingConnection = pendingconnection;
 diff --git a/src/main/java/org/bukkit/craftbukkit/Spigot.java b/src/main/java/org/bukkit/craftbukkit/Spigot.java
-index 68c1b42..6c54638 100644
+index 5a96c86..eb02e56 100644
 --- a/src/main/java/org/bukkit/craftbukkit/Spigot.java
 +++ b/src/main/java/org/bukkit/craftbukkit/Spigot.java
 @@ -18,6 +18,8 @@ public class Spigot {
@@ -234,7 +234,7 @@ index 68c1b42..6c54638 100644
  
      public static void initialize(CraftServer server, SimpleCommandMap commandMap, YamlConfiguration configuration) {
          commandMap.register("bukkit", new org.bukkit.craftbukkit.command.TicksPerSecondCommand("tps"));
-@@ -54,6 +56,12 @@ public class Spigot {
+@@ -53,6 +55,12 @@ public class Spigot {
  
          tabPing = configuration.getBoolean("settings.tab-ping", tabPing);