From 82377746392f3f6321fd0a94a4ef3f2d08cc0a7e Mon Sep 17 00:00:00 2001 From: Aikar Date: Sun, 24 Feb 2013 13:37:20 +1100 Subject: [PATCH] Try new way of handling maps in frames --- ...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 000000000..e70cccbd8 --- /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 +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 playersToUpdate = new java.util.ArrayList(); // 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 bc67a0dc5..000000000 --- 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 -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 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 13873822b..ee2fd4788 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 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 d8bcd1d82..69c5e74d4 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 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 775f9416a..0a6d322e7 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 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 cb2650983..6db7d56c3 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 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 0cee6506b..91c3d8a19 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 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);