NOT FINISHED: Current progress, updated upstream
This commit is contained in:
		
					parent
					
						
							
								0af7fd4996
							
						
					
				
			
			
				commit
				
					
						9ce19f0321
					
				
			
		
					 30 changed files with 174 additions and 287 deletions
				
			
		| 
						 | 
					@ -10,11 +10,11 @@ of giving the player experience points.
 | 
				
			||||||
Both an API To standalone mend, and apply mending logic to .giveExp has been added.
 | 
					Both an API To standalone mend, and apply mending logic to .giveExp has been added.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
diff --git a/src/main/java/net/minecraft/server/EnchantmentManager.java b/src/main/java/net/minecraft/server/EnchantmentManager.java
 | 
					diff --git a/src/main/java/net/minecraft/server/EnchantmentManager.java b/src/main/java/net/minecraft/server/EnchantmentManager.java
 | 
				
			||||||
index 98300d0a2..f714dc326 100644
 | 
					index 3204d94c5..e4ed9e206 100644
 | 
				
			||||||
--- a/src/main/java/net/minecraft/server/EnchantmentManager.java
 | 
					--- a/src/main/java/net/minecraft/server/EnchantmentManager.java
 | 
				
			||||||
+++ b/src/main/java/net/minecraft/server/EnchantmentManager.java
 | 
					+++ b/src/main/java/net/minecraft/server/EnchantmentManager.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ public class EnchantmentManager {
 | 
					@@ -0,0 +0,0 @@ public class EnchantmentManager {
 | 
				
			||||||
         return getEnchantmentLevel(Enchantments.D, itemstack) > 0;
 | 
					         return getEnchantmentLevel(Enchantments.F, itemstack) > 0;
 | 
				
			||||||
     }
 | 
					     }
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
+    public static ItemStack getRandomEquippedItemWithEnchant(Enchantment enchantment, EntityLiving entityliving) { return b(enchantment, entityliving); } // Paper - OBFHELPER
 | 
					+    public static ItemStack getRandomEquippedItemWithEnchant(Enchantment enchantment, EntityLiving entityliving) { return b(enchantment, entityliving); } // Paper - OBFHELPER
 | 
				
			||||||
| 
						 | 
					@ -22,63 +22,37 @@ index 98300d0a2..f714dc326 100644
 | 
				
			||||||
         List list = enchantment.a(entityliving);
 | 
					         List list = enchantment.a(entityliving);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
diff --git a/src/main/java/net/minecraft/server/Enchantments.java b/src/main/java/net/minecraft/server/Enchantments.java
 | 
					diff --git a/src/main/java/net/minecraft/server/Enchantments.java b/src/main/java/net/minecraft/server/Enchantments.java
 | 
				
			||||||
index 35e87eb1c..74a6a4f60 100644
 | 
					index 0f4aad20f..3a5263fd9 100644
 | 
				
			||||||
--- a/src/main/java/net/minecraft/server/Enchantments.java
 | 
					--- a/src/main/java/net/minecraft/server/Enchantments.java
 | 
				
			||||||
+++ b/src/main/java/net/minecraft/server/Enchantments.java
 | 
					+++ b/src/main/java/net/minecraft/server/Enchantments.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ public class Enchantments {
 | 
					@@ -0,0 +0,0 @@ public class Enchantments {
 | 
				
			||||||
     public static final Enchantment ARROW_INFINITE = a("infinity");
 | 
					     public static final Enchantment D = a("impaling");
 | 
				
			||||||
     public static final Enchantment LUCK = a("luck_of_the_sea");
 | 
					     public static final Enchantment E = a("riptide");
 | 
				
			||||||
     public static final Enchantment LURE = a("lure");
 | 
					     public static final Enchantment F = a("channeling");
 | 
				
			||||||
-    public static final Enchantment C = a("mending");
 | 
					-    public static final Enchantment G = a("mending");
 | 
				
			||||||
+    public static final Enchantment C = a("mending"); public static final Enchantment MENDING = C; // Paper - OBFHELPER
 | 
					+    public static final Enchantment G = a("mending");public static final Enchantment MENDING = G; // Paper - OBFHELPER
 | 
				
			||||||
     public static final Enchantment D = a("vanishing_curse");
 | 
					     public static final Enchantment H = a("vanishing_curse");
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
     @Nullable
 | 
					     @Nullable
 | 
				
			||||||
diff --git a/src/main/java/net/minecraft/server/EntityExperienceOrb.java b/src/main/java/net/minecraft/server/EntityExperienceOrb.java
 | 
					diff --git a/src/main/java/net/minecraft/server/EntityExperienceOrb.java b/src/main/java/net/minecraft/server/EntityExperienceOrb.java
 | 
				
			||||||
index ff5cc74ba..1c59fd966 100644
 | 
					index a87ef5fb8..b8bfc7577 100644
 | 
				
			||||||
--- a/src/main/java/net/minecraft/server/EntityExperienceOrb.java
 | 
					--- a/src/main/java/net/minecraft/server/EntityExperienceOrb.java
 | 
				
			||||||
+++ b/src/main/java/net/minecraft/server/EntityExperienceOrb.java
 | 
					+++ b/src/main/java/net/minecraft/server/EntityExperienceOrb.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ public class EntityExperienceOrb extends Entity {
 | 
					@@ -0,0 +0,0 @@ public class EntityExperienceOrb extends Entity {
 | 
				
			||||||
         }
 | 
					         }
 | 
				
			||||||
     }
 | 
					     }
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
+    public int durToXp(int i) { return c(i); } // Paper OBFHELPER
 | 
					+    public int durToXp(int i) { return b(i); } // Paper OBFHELPER
 | 
				
			||||||
     private int c(int i) {
 | 
					     private int b(int i) {
 | 
				
			||||||
         return i / 2;
 | 
					         return i / 2;
 | 
				
			||||||
     }
 | 
					     }
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
+    public int xpToDur(int i) { return d(i); } // Paper OBFHELPER
 | 
					+    public int xpToDur(int i) { return c(i); } // Paper OBFHELPER
 | 
				
			||||||
     private int d(int i) {
 | 
					     private int c(int i) {
 | 
				
			||||||
         return i * 2;
 | 
					         return i * 2;
 | 
				
			||||||
     }
 | 
					     }
 | 
				
			||||||
diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java
 | 
					 | 
				
			||||||
index d666088f2..f6b802dc8 100644
 | 
					 | 
				
			||||||
--- a/src/main/java/net/minecraft/server/ItemStack.java
 | 
					 | 
				
			||||||
+++ b/src/main/java/net/minecraft/server/ItemStack.java
 | 
					 | 
				
			||||||
@@ -0,0 +0,0 @@ public final class ItemStack {
 | 
					 | 
				
			||||||
     private Item item;
 | 
					 | 
				
			||||||
     private NBTTagCompound tag;
 | 
					 | 
				
			||||||
     private boolean g;
 | 
					 | 
				
			||||||
-    private int damage;
 | 
					 | 
				
			||||||
+    private int damage; public void setDamage(int i) { this.damage = i; } // Paper - OBFHELPER
 | 
					 | 
				
			||||||
     private EntityItemFrame i;
 | 
					 | 
				
			||||||
     private Block j;
 | 
					 | 
				
			||||||
     private boolean k;
 | 
					 | 
				
			||||||
@@ -0,0 +0,0 @@ public final class ItemStack {
 | 
					 | 
				
			||||||
         return this.getItem().k();
 | 
					 | 
				
			||||||
     }
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
+    public boolean hasDamage() { return h(); } // Paper OBFHELPER
 | 
					 | 
				
			||||||
     public boolean h() {
 | 
					 | 
				
			||||||
         return this.f() && this.damage > 0;
 | 
					 | 
				
			||||||
     }
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
+    public int getDamage() { return i(); } // Paper OBFHELPER
 | 
					 | 
				
			||||||
     public int i() {
 | 
					 | 
				
			||||||
         return this.damage;
 | 
					 | 
				
			||||||
     }
 | 
					 | 
				
			||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
 | 
					diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
 | 
				
			||||||
index d69784386..77c50ba14 100644
 | 
					index 9f9002dd8..c2cd5ac4b 100644
 | 
				
			||||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
 | 
					--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
 | 
				
			||||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
 | 
					+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
 | 
					@@ -0,0 +0,0 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,7 +5,7 @@ Subject: [PATCH] Add PlayerJumpEvent
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java
 | 
					diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java
 | 
				
			||||||
index 85e617979..8cf082d2e 100644
 | 
					index f08c0ba60..1b944abea 100644
 | 
				
			||||||
--- a/src/main/java/net/minecraft/server/EntityHuman.java
 | 
					--- a/src/main/java/net/minecraft/server/EntityHuman.java
 | 
				
			||||||
+++ b/src/main/java/net/minecraft/server/EntityHuman.java
 | 
					+++ b/src/main/java/net/minecraft/server/EntityHuman.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ public abstract class EntityHuman extends EntityLiving {
 | 
					@@ -0,0 +0,0 @@ public abstract class EntityHuman extends EntityLiving {
 | 
				
			||||||
| 
						 | 
					@ -17,7 +17,7 @@ index 85e617979..8cf082d2e 100644
 | 
				
			||||||
         super.cG();
 | 
					         super.cG();
 | 
				
			||||||
         this.a(StatisticList.JUMP);
 | 
					         this.a(StatisticList.JUMP);
 | 
				
			||||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
					diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
				
			||||||
index 128b2beb5..2255b8ccb 100644
 | 
					index bf549bfed..25c38f3bb 100644
 | 
				
			||||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
					--- a/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
				
			||||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
					+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ import org.bukkit.inventory.CraftingInventory;
 | 
					@@ -0,0 +0,0 @@ import org.bukkit.inventory.CraftingInventory;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,7 +5,7 @@ Subject: [PATCH] Add UnknownCommandEvent
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
index 3b10c5e61..46f86359c 100644
 | 
					index 9fe7c6a0d..69cfe5c4d 100644
 | 
				
			||||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ import org.bukkit.craftbukkit.util.Versioning;
 | 
					@@ -0,0 +0,0 @@ import org.bukkit.craftbukkit.util.Versioning;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,7 +20,7 @@ index ea6fcb39f..dbafef023 100644
 | 
				
			||||||
+    }
 | 
					+    }
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
index f3dfd65d6..6c611c0df 100644
 | 
					index 1b6a849e2..470e334f7 100644
 | 
				
			||||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
 | 
					@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -33,7 +33,7 @@ index f13534917..85c7a96c5 100644
 | 
				
			||||||
         } else {
 | 
					         } else {
 | 
				
			||||||
             String[] astring1 = astring;
 | 
					             String[] astring1 = astring;
 | 
				
			||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
index 2bcd1c3ca..a36192362 100644
 | 
					index 06b59657f..6c7151536 100644
 | 
				
			||||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
 | 
					@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,7 +6,7 @@ Subject: [PATCH] Allow Reloading of Command Aliases
 | 
				
			||||||
Reload the aliases stored in commands.yml
 | 
					Reload the aliases stored in commands.yml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
index a36192362..f3dfd65d6 100644
 | 
					index 6c7151536..1b6a849e2 100644
 | 
				
			||||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
 | 
					@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,7 +6,7 @@ Subject: [PATCH] Allow Reloading of Custom Permissions
 | 
				
			||||||
https://github.com/PaperMC/Paper/issues/49
 | 
					https://github.com/PaperMC/Paper/issues/49
 | 
				
			||||||
 | 
					
 | 
				
			||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
index 6dae117ac..5ffb335f5 100644
 | 
					index 4db5aacc4..1c9637ff7 100644
 | 
				
			||||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
 | 
					@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,46 +14,40 @@ completion, such as offline players.
 | 
				
			||||||
Also adds isCommand and getLocation to the sync TabCompleteEvent
 | 
					Also adds isCommand and getLocation to the sync TabCompleteEvent
 | 
				
			||||||
 | 
					
 | 
				
			||||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
					diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
				
			||||||
index e01013efd..74a665142 100644
 | 
					index d47805962..ea29b1b2a 100644
 | 
				
			||||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
					--- a/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
				
			||||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
					+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
 | 
					@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
 | 
				
			||||||
         // CraftBukkit end
 | 
					 | 
				
			||||||
     }
 | 
					     }
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
-    public void a(PacketPlayInTabComplete packetplayintabcomplete) {
 | 
					     public void a(PacketPlayInTabComplete packetplayintabcomplete) {
 | 
				
			||||||
-        PlayerConnectionUtils.ensureMainThread(packetplayintabcomplete, this, this.player.x());
 | 
					-        PlayerConnectionUtils.ensureMainThread(packetplayintabcomplete, this, this.player.getWorldServer());
 | 
				
			||||||
+    // Paper start - async tab completion
 | 
					+        // PlayerConnectionUtils.ensureMainThread(packetplayintabcomplete, this, this.player.getWorldServer()); // Paper - run this async
 | 
				
			||||||
+    public void a(PacketPlayInTabComplete packet) {
 | 
					 | 
				
			||||||
         // CraftBukkit start
 | 
					         // CraftBukkit start
 | 
				
			||||||
         if (chatSpamField.addAndGet(this, 10) > 500 && !this.minecraftServer.getPlayerList().isOp(this.player.getProfile())) {
 | 
					         if (chatSpamField.addAndGet(this, 5) > 500 && !this.minecraftServer.getPlayerList().isOp(this.player.getProfile())) {
 | 
				
			||||||
-            this.disconnect(new ChatMessage("disconnect.spam", new Object[0]));
 | 
					-            this.disconnect(new ChatMessage("disconnect.spam", new Object[0]));
 | 
				
			||||||
+            minecraftServer.postToMainThread(() -> this.disconnect(new ChatMessage("disconnect.spam", new Object[0])));
 | 
					+            minecraftServer.postToMainThread(() -> this.disconnect(new ChatMessage("disconnect.spam", new Object[0]))); // Paper
 | 
				
			||||||
             return;
 | 
					             return;
 | 
				
			||||||
         }
 | 
					         }
 | 
				
			||||||
         // CraftBukkit end
 | 
					-        // CraftBukkit end
 | 
				
			||||||
-        ArrayList arraylist = Lists.newArrayList();
 | 
					-        ParseResults parseresults = this.minecraftServer.getCommandDispatcher().a().parse(packetplayintabcomplete.c(), this.player.getCommandListener());
 | 
				
			||||||
-        Iterator iterator = this.minecraftServer.tabCompleteCommand(this.player, packetplayintabcomplete.a(), packetplayintabcomplete.b(), packetplayintabcomplete.c()).iterator();
 | 
					+        // Paper start
 | 
				
			||||||
 
 | 
					 | 
				
			||||||
-        while (iterator.hasNext()) {
 | 
					 | 
				
			||||||
-            String s = (String) iterator.next();
 | 
					 | 
				
			||||||
+        com.destroystokyo.paper.event.server.AsyncTabCompleteEvent event;
 | 
					+        com.destroystokyo.paper.event.server.AsyncTabCompleteEvent event;
 | 
				
			||||||
+        java.util.List<String> completions = new ArrayList<>();
 | 
					+        java.util.List<String> completions = new java.util.ArrayList<>();
 | 
				
			||||||
+        BlockPosition blockpos = packet.b();
 | 
					+        String buffer = packetplayintabcomplete.c();
 | 
				
			||||||
+        String buffer = packet.a();
 | 
					 | 
				
			||||||
+        boolean isCommand = buffer.startsWith("/") || packet.c();
 | 
					 | 
				
			||||||
+        event = new com.destroystokyo.paper.event.server.AsyncTabCompleteEvent(this.getPlayer(), completions,
 | 
					+        event = new com.destroystokyo.paper.event.server.AsyncTabCompleteEvent(this.getPlayer(), completions,
 | 
				
			||||||
+            buffer, isCommand, blockpos != null ? MCUtil.toLocation(player.world, blockpos) : null);
 | 
					+                buffer, true, null);
 | 
				
			||||||
+        event.callEvent();
 | 
					+        event.callEvent();
 | 
				
			||||||
+        completions = event.isCancelled() ? com.google.common.collect.ImmutableList.of() : event.getCompletions();
 | 
					+        completions = event.isCancelled() ? com.google.common.collect.ImmutableList.of() : event.getCompletions();
 | 
				
			||||||
+        if (event.isCancelled() || event.isHandled()) {
 | 
					+        if (event.isCancelled() || event.isHandled()) {
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
+            // Still fire sync event with the provided completions, if someone is listening
 | 
					+            // Still fire sync event with the provided completions, if someone is listening
 | 
				
			||||||
+            if (!event.isCancelled() && org.bukkit.event.server.TabCompleteEvent.getHandlerList().getRegisteredListeners().length > 0) {
 | 
					+            if (!event.isCancelled() && org.bukkit.event.server.TabCompleteEvent.getHandlerList().getRegisteredListeners().length > 0) {
 | 
				
			||||||
+                java.util.List<String> finalCompletions = completions;
 | 
					+                java.util.List<String> finalCompletions = completions;
 | 
				
			||||||
+                Waitable<java.util.List<String>> syncCompletions = new Waitable<java.util.List<String>>() {
 | 
					+                Waitable<java.util.List<String>> syncCompletions = new Waitable<java.util.List<String>>() {
 | 
				
			||||||
+                    @Override
 | 
					+                    @Override
 | 
				
			||||||
+                    protected java.util.List<String> evaluate() {
 | 
					+                    protected java.util.List<String> evaluate() {
 | 
				
			||||||
+                        org.bukkit.event.server.TabCompleteEvent syncEvent = new org.bukkit.event.server.TabCompleteEvent(PlayerConnection.this.getPlayer(), buffer, finalCompletions, isCommand, blockpos != null ? MCUtil.toLocation(player.world, blockpos) : null);
 | 
					+                        org.bukkit.event.server.TabCompleteEvent syncEvent = new org.bukkit.event.server.TabCompleteEvent(PlayerConnection.this.getPlayer(), buffer, finalCompletions, true, null);
 | 
				
			||||||
+                        return syncEvent.callEvent() ? syncEvent.getCompletions() : com.google.common.collect.ImmutableList.of();
 | 
					+                        return syncEvent.callEvent() ? syncEvent.getCompletions() : com.google.common.collect.ImmutableList.of();
 | 
				
			||||||
+                    }
 | 
					+                    }
 | 
				
			||||||
+                };
 | 
					+                };
 | 
				
			||||||
| 
						 | 
					@ -64,33 +58,42 @@ index e01013efd..74a665142 100644
 | 
				
			||||||
+                    e1.printStackTrace();
 | 
					+                    e1.printStackTrace();
 | 
				
			||||||
+                }
 | 
					+                }
 | 
				
			||||||
+            }
 | 
					+            }
 | 
				
			||||||
 
 | 
					+            java.util.List<String> otherSuggestions = completions;
 | 
				
			||||||
-            arraylist.add(s);
 | 
					+            minecraftServer.postToMainThread(() -> sendSuggestions(packetplayintabcomplete, otherSuggestions));
 | 
				
			||||||
+            this.player.playerConnection.sendPacket(new PacketPlayOutTabComplete(completions.toArray(new String[completions.size()])));
 | 
					 | 
				
			||||||
+            return;
 | 
					+            return;
 | 
				
			||||||
         }
 | 
					+        }
 | 
				
			||||||
-
 | 
					+        minecraftServer.postToMainThread(() -> sendSuggestions(packetplayintabcomplete, null));
 | 
				
			||||||
-        this.player.playerConnection.sendPacket(new PacketPlayOutTabComplete((String[]) arraylist.toArray(new String[arraylist.size()])));
 | 
					+    }
 | 
				
			||||||
+        minecraftServer.postToMainThread(() -> {
 | 
					+    public void sendSuggestions(PacketPlayInTabComplete packetplayintabcomplete, java.util.List<String> otherSuggestions) {
 | 
				
			||||||
+            java.util.List<String> syncCompletions = this.minecraftServer.tabCompleteCommand(this.player, buffer, blockpos, isCommand);
 | 
					 
 | 
				
			||||||
+            this.player.playerConnection.sendPacket(new PacketPlayOutTabComplete(syncCompletions.toArray(new String[syncCompletions.size()])));
 | 
					-        this.minecraftServer.getCommandDispatcher().a().getCompletionSuggestions(parseresults).thenAccept((suggestions) -> {
 | 
				
			||||||
+        });
 | 
					-            if (((Suggestions) suggestions).isEmpty()) return; // CraftBukkit - don't send through empty suggestions - prevents [<args>] from showing for plugins with nothing more to offer
 | 
				
			||||||
+        // Paper end
 | 
					-            this.networkManager.sendPacket(new PacketPlayOutTabComplete(packetplayintabcomplete.b(), (Suggestions) suggestions)); // CraftBukkit - decompile error
 | 
				
			||||||
 | 
					+        ParseResults parseresults = this.minecraftServer.getCommandDispatcher().a().parse(packetplayintabcomplete.c(), this.player.getCommandListener());
 | 
				
			||||||
 | 
					+        //noinspection unchecked
 | 
				
			||||||
 | 
					+        java.util.concurrent.CompletableFuture<Suggestions> completionSuggestions = this.minecraftServer.getCommandDispatcher().a().getCompletionSuggestions(parseresults);
 | 
				
			||||||
 | 
					+        completionSuggestions.thenAccept((Suggestions suggestions) -> {
 | 
				
			||||||
 | 
					+            if (otherSuggestions != null && !otherSuggestions.isEmpty()) {
 | 
				
			||||||
 | 
					+                com.mojang.brigadier.suggestion.SuggestionsBuilder builder = new com.mojang.brigadier.suggestion.SuggestionsBuilder(packetplayintabcomplete.c(), packetplayintabcomplete.b());
 | 
				
			||||||
 | 
					+                otherSuggestions.forEach(builder::suggest);
 | 
				
			||||||
 | 
					+                suggestions.getList().addAll(builder.build().getList());
 | 
				
			||||||
 | 
					+            }
 | 
				
			||||||
 | 
					+            // Paper end
 | 
				
			||||||
 | 
					+            if (suggestions.isEmpty()) return; // CraftBukkit - don't send through empty suggestions - prevents [<args>] from showing for plugins with nothing more to offer
 | 
				
			||||||
 | 
					+            this.networkManager.sendPacket(new PacketPlayOutTabComplete(packetplayintabcomplete.b(), suggestions)); // CraftBukkit - decompile error
 | 
				
			||||||
 | 
					         });
 | 
				
			||||||
     }
 | 
					     }
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
     public void a(PacketPlayInSettings packetplayinsettings) {
 | 
					 | 
				
			||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
index 2dd7ed96a..e86c16755 100644
 | 
					index 0ef1186b9..d605e5792 100644
 | 
				
			||||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
 | 
					@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
 | 
				
			||||||
         } else {
 | 
					 | 
				
			||||||
             offers = tabCompleteChat(player, message);
 | 
					             offers = tabCompleteChat(player, message);
 | 
				
			||||||
         }
 | 
					         }
 | 
				
			||||||
-
 | 
					 
 | 
				
			||||||
-        TabCompleteEvent tabEvent = new TabCompleteEvent(player, message, offers);
 | 
					-        TabCompleteEvent tabEvent = new TabCompleteEvent(player, message, offers);
 | 
				
			||||||
+        
 | 
					+        TabCompleteEvent tabEvent = new TabCompleteEvent(player, message, offers, message.startsWith("/") || forceCommand, pos != null ? MCUtil.toLocation(((CraftWorld) player.getWorld()).getHandle(), new BlockPosition(pos)) : null); // Paper
 | 
				
			||||||
+        TabCompleteEvent tabEvent = new TabCompleteEvent(player, message, offers, message.startsWith("/") || forceCommand, pos != null ? MCUtil.toLocation(((CraftWorld) player.getWorld()).getHandle(), pos) : null); // Paper
 | 
					 | 
				
			||||||
         getPluginManager().callEvent(tabEvent);
 | 
					         getPluginManager().callEvent(tabEvent);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
         return tabEvent.isCancelled() ? Collections.EMPTY_LIST : tabEvent.getCompletions();
 | 
					         return tabEvent.isCancelled() ? Collections.EMPTY_LIST : tabEvent.getCompletions();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,7 +5,7 @@ Subject: [PATCH] Avoid NPE in PathfinderGoalTempt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
diff --git a/src/main/java/net/minecraft/server/PathfinderGoalTempt.java b/src/main/java/net/minecraft/server/PathfinderGoalTempt.java
 | 
					diff --git a/src/main/java/net/minecraft/server/PathfinderGoalTempt.java b/src/main/java/net/minecraft/server/PathfinderGoalTempt.java
 | 
				
			||||||
index 188825d19..8004f3a3f 100644
 | 
					index 154202700..64b1ac71b 100644
 | 
				
			||||||
--- a/src/main/java/net/minecraft/server/PathfinderGoalTempt.java
 | 
					--- a/src/main/java/net/minecraft/server/PathfinderGoalTempt.java
 | 
				
			||||||
+++ b/src/main/java/net/minecraft/server/PathfinderGoalTempt.java
 | 
					+++ b/src/main/java/net/minecraft/server/PathfinderGoalTempt.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ public class PathfinderGoalTempt extends PathfinderGoal {
 | 
					@@ -0,0 +0,0 @@ public class PathfinderGoalTempt extends PathfinderGoal {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -486,7 +486,7 @@ index a47a51a41..4c476f757 100644
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
         private UserCacheEntry(GameProfile gameprofile, Date date) {
 | 
					         private UserCacheEntry(GameProfile gameprofile, Date date) {
 | 
				
			||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
index 46f86359c..26bbb0265 100644
 | 
					index 69cfe5c4d..0ef1186b9 100644
 | 
				
			||||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ import org.bukkit.craftbukkit.util.CraftNamespacedKey;
 | 
					@@ -0,0 +0,0 @@ import org.bukkit.craftbukkit.util.CraftNamespacedKey;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,25 +4,6 @@ Date: Sat, 4 Apr 2015 23:17:52 -0400
 | 
				
			||||||
Subject: [PATCH] Complete resource pack API
 | 
					Subject: [PATCH] Complete resource pack API
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
					 | 
				
			||||||
index 27c255c8d..2cc277e4f 100644
 | 
					 | 
				
			||||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
					 | 
				
			||||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
					 | 
				
			||||||
@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
     }
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
-    public void a(PacketPlayInResourcePackStatus packetplayinresourcepackstatus) {}
 | 
					 | 
				
			||||||
+    public void a(PacketPlayInResourcePackStatus packetplayinresourcepackstatus) {
 | 
					 | 
				
			||||||
+        // Paper start;
 | 
					 | 
				
			||||||
+        final PlayerResourcePackStatusEvent.Status status = PlayerResourcePackStatusEvent.Status.values()[packetplayinresourcepackstatus.status.ordinal()];
 | 
					 | 
				
			||||||
+        this.getPlayer().setResourcePackStatus(status);
 | 
					 | 
				
			||||||
+        this.server.getPluginManager().callEvent(new PlayerResourcePackStatusEvent(getPlayer(), status));
 | 
					 | 
				
			||||||
+        // Paper end
 | 
					 | 
				
			||||||
+    }
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
     public void a(PacketPlayInBoatMove packetplayinboatmove) {
 | 
					 | 
				
			||||||
         PlayerConnectionUtils.ensureMainThread(packetplayinboatmove, this, this.player.getWorldServer());
 | 
					 | 
				
			||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
 | 
					diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
 | 
				
			||||||
index aacf8ea7f..f6a7f08f9 100644
 | 
					index aacf8ea7f..f6a7f08f9 100644
 | 
				
			||||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
 | 
					--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,7 +8,7 @@ Vanilla already had this limited, make it configurable.
 | 
				
			||||||
Limit how much exploration lags the server
 | 
					Limit how much exploration lags the server
 | 
				
			||||||
 | 
					
 | 
				
			||||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
 | 
					diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
 | 
				
			||||||
index 535a8d3ed..e3ff78180 100644
 | 
					index 33743f8fd..49f282332 100644
 | 
				
			||||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
 | 
					--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
 | 
				
			||||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
 | 
					+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
 | 
					@@ -0,0 +0,0 @@ public class PaperWorldConfig {
 | 
				
			||||||
| 
						 | 
					@ -26,7 +26,7 @@ index 535a8d3ed..e3ff78180 100644
 | 
				
			||||||
+    }
 | 
					+    }
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
 | 
					diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
 | 
				
			||||||
index 4af557321..6ee9f6cfb 100644
 | 
					index bfe2d03a5..9fd07f859 100644
 | 
				
			||||||
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
 | 
					--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
 | 
				
			||||||
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
 | 
					+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ public class PlayerChunkMap {
 | 
					@@ -0,0 +0,0 @@ public class PlayerChunkMap {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,85 @@
 | 
				
			||||||
 | 
					From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: Aikar <aikar@aikar.co>
 | 
				
			||||||
 | 
					Date: Sat, 13 Sep 2014 23:14:43 -0400
 | 
				
			||||||
 | 
					Subject: [PATCH] Configurable Keep Spawn Loaded range per world
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This lets you disable it for some worlds and lower it for others.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
 | 
				
			||||||
 | 
					index eb09be512..6ac58e5ec 100644
 | 
				
			||||||
 | 
					--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
 | 
				
			||||||
 | 
					+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
 | 
				
			||||||
 | 
					@@ -0,0 +0,0 @@ public class PaperWorldConfig {
 | 
				
			||||||
 | 
					         grassUpdateRate = Math.max(0, getInt("grass-spread-tick-rate", grassUpdateRate));
 | 
				
			||||||
 | 
					         log("Grass Spread Tick Rate: " + grassUpdateRate);
 | 
				
			||||||
 | 
					     }
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+    public short keepLoadedRange;
 | 
				
			||||||
 | 
					+    private void keepLoadedRange() {
 | 
				
			||||||
 | 
					+        keepLoadedRange = (short) (getInt("keep-spawn-loaded-range", Math.min(spigotConfig.viewDistance, 8)) * 16);
 | 
				
			||||||
 | 
					+        log( "Keep Spawn Loaded Range: " + (keepLoadedRange/16));
 | 
				
			||||||
 | 
					+    }
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
 | 
				
			||||||
 | 
					index 1027b0588..b7aa9e869 100644
 | 
				
			||||||
 | 
					--- a/src/main/java/net/minecraft/server/MinecraftServer.java
 | 
				
			||||||
 | 
					+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
 | 
				
			||||||
 | 
					@@ -0,0 +0,0 @@ public abstract class MinecraftServer implements IAsyncTaskHandler, IMojangStati
 | 
				
			||||||
 | 
					             ArrayList arraylist = Lists.newArrayList();
 | 
				
			||||||
 | 
					             Set set = Sets.newConcurrentHashSet();
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-            for (int i = -192; i <= 192 && this.isRunning(); i += 16) {
 | 
				
			||||||
 | 
					-                for (int j = -192; j <= 192 && this.isRunning(); j += 16) {
 | 
				
			||||||
 | 
					+            // Paper start
 | 
				
			||||||
 | 
					+            short radius = worldserver.paperConfig.keepLoadedRange;
 | 
				
			||||||
 | 
					+            for (int i = -radius; i <= radius && this.isRunning(); i += 16) {
 | 
				
			||||||
 | 
					+                for (int j = -radius; j <= radius && this.isRunning(); j += 16) {
 | 
				
			||||||
 | 
					+                    // Paper end
 | 
				
			||||||
 | 
					                     arraylist.add(new ChunkCoordIntPair(blockposition.getX() + i >> 4, blockposition.getZ() + j >> 4));
 | 
				
			||||||
 | 
					                 }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
 | 
				
			||||||
 | 
					index e42a334bc..d15afd595 100644
 | 
				
			||||||
 | 
					--- a/src/main/java/net/minecraft/server/World.java
 | 
				
			||||||
 | 
					+++ b/src/main/java/net/minecraft/server/World.java
 | 
				
			||||||
 | 
					@@ -0,0 +0,0 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
 | 
				
			||||||
 | 
					         int k = i * 16 + 8 - blockposition.getX();
 | 
				
			||||||
 | 
					         int l = j * 16 + 8 - blockposition.getZ();
 | 
				
			||||||
 | 
					         boolean flag = true;
 | 
				
			||||||
 | 
					+        short keepLoadedRange = paperConfig.keepLoadedRange; // Paper
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-        return k >= -128 && k <= 128 && l >= -128 && l <= 128 && this.keepSpawnInMemory; // CraftBukkit - Added 'this.keepSpawnInMemory'
 | 
				
			||||||
 | 
					+        return k >= -keepLoadedRange && k <= keepLoadedRange && l >= -keepLoadedRange && l <= keepLoadedRange && this.keepSpawnInMemory; // CraftBukkit - Added 'this.keepSpawnInMemory' // Paper - Re-add range var
 | 
				
			||||||
 | 
					     }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					     public void a(Packet<?> packet) {
 | 
				
			||||||
 | 
					diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
 | 
					index f90dc11f2..06b59657f 100644
 | 
				
			||||||
 | 
					--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
 | 
					+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
 | 
					@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
 | 
				
			||||||
 | 
					         System.out.println("Preparing start region for level " + (console.worlds.size() - 1) + " (Seed: " + internal.getSeed() + ")");
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					         if (internal.getWorld().getKeepSpawnInMemory()) {
 | 
				
			||||||
 | 
					-            short short1 = 196;
 | 
				
			||||||
 | 
					+            short short1 = internal.paperConfig.keepLoadedRange; // Paper
 | 
				
			||||||
 | 
					             long i = System.currentTimeMillis();
 | 
				
			||||||
 | 
					             for (int j = -short1; j <= short1; j += 16) {
 | 
				
			||||||
 | 
					                 for (int k = -short1; k <= short1; k += 16) {
 | 
				
			||||||
 | 
					diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
 | 
				
			||||||
 | 
					index 4df849eef..9d88b9ddb 100644
 | 
				
			||||||
 | 
					--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
 | 
				
			||||||
 | 
					+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
 | 
				
			||||||
 | 
					@@ -0,0 +0,0 @@ public class CraftWorld implements World {
 | 
				
			||||||
 | 
					         int chunkCoordX = chunkcoordinates.getX() >> 4;
 | 
				
			||||||
 | 
					         int chunkCoordZ = chunkcoordinates.getZ() >> 4;
 | 
				
			||||||
 | 
					         // Cycle through the 25x25 Chunks around it to load/unload the chunks.
 | 
				
			||||||
 | 
					-        for (int x = -12; x <= 12; x++) {
 | 
				
			||||||
 | 
					-            for (int z = -12; z <= 12; z++) {
 | 
				
			||||||
 | 
					+        int radius = world.paperConfig.keepLoadedRange / 16; // Paper
 | 
				
			||||||
 | 
					+        for (int x = -radius; x <= radius; x++) { // Paper
 | 
				
			||||||
 | 
					+            for (int z = -radius; z <= radius; z++) { // Paper
 | 
				
			||||||
 | 
					                 if (keepLoaded) {
 | 
				
			||||||
 | 
					                     loadChunk(chunkCoordX + x, chunkCoordZ + z);
 | 
				
			||||||
 | 
					                 } else {
 | 
				
			||||||
 | 
					--
 | 
				
			||||||
| 
						 | 
					@ -1,110 +0,0 @@
 | 
				
			||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
 | 
					 | 
				
			||||||
From: Aikar <aikar@aikar.co>
 | 
					 | 
				
			||||||
Date: Mon, 1 Jan 2018 16:10:24 -0500
 | 
					 | 
				
			||||||
Subject: [PATCH] Configurable Max Chunk Gens per Tick
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Limit the number of generations that can occur in a single tick, forcing them
 | 
					 | 
				
			||||||
to be spread out more.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Defaulting to 10 as an average generation is going to be 3-6ms, which means 10 will
 | 
					 | 
				
			||||||
likely cause the server to lose TPS, but constrain how much.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
This should result in no noticeable speed reduction in generation for servers not
 | 
					 | 
				
			||||||
lagging, and let larger servers reduce this value according to their own desires.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
 | 
					 | 
				
			||||||
index e3ff78180..0ddf826f9 100644
 | 
					 | 
				
			||||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
 | 
					 | 
				
			||||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
 | 
					 | 
				
			||||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
 | 
					 | 
				
			||||||
         }
 | 
					 | 
				
			||||||
         log("Max Chunk Sends Per Tick: " + maxChunkSendsPerTick);
 | 
					 | 
				
			||||||
     }
 | 
					 | 
				
			||||||
+
 | 
					 | 
				
			||||||
+    public int maxChunkGensPerTick = 10;
 | 
					 | 
				
			||||||
+    private void maxChunkGensPerTick() {
 | 
					 | 
				
			||||||
+        maxChunkGensPerTick = getInt("max-chunk-gens-per-tick", maxChunkGensPerTick);
 | 
					 | 
				
			||||||
+        if (maxChunkGensPerTick <= 0) {
 | 
					 | 
				
			||||||
+            maxChunkGensPerTick = Integer.MAX_VALUE;
 | 
					 | 
				
			||||||
+            log("Max Chunk Gens Per Tick: Unlimited (NOT RECOMMENDED)");
 | 
					 | 
				
			||||||
+        } else {
 | 
					 | 
				
			||||||
+            log("Max Chunk Gens Per Tick: " + maxChunkGensPerTick);
 | 
					 | 
				
			||||||
+        }
 | 
					 | 
				
			||||||
+    }
 | 
					 | 
				
			||||||
+
 | 
					 | 
				
			||||||
 }
 | 
					 | 
				
			||||||
diff --git a/src/main/java/net/minecraft/server/PlayerChunk.java b/src/main/java/net/minecraft/server/PlayerChunk.java
 | 
					 | 
				
			||||||
index 395386f29..baf72404e 100644
 | 
					 | 
				
			||||||
--- a/src/main/java/net/minecraft/server/PlayerChunk.java
 | 
					 | 
				
			||||||
+++ b/src/main/java/net/minecraft/server/PlayerChunk.java
 | 
					 | 
				
			||||||
@@ -0,0 +0,0 @@ public class PlayerChunk {
 | 
					 | 
				
			||||||
     private boolean done;
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
     // CraftBukkit start - add fields
 | 
					 | 
				
			||||||
+    boolean chunkExists; // Paper
 | 
					 | 
				
			||||||
     private boolean loadInProgress = false;
 | 
					 | 
				
			||||||
     private Runnable loadedRunnable = new Runnable() {
 | 
					 | 
				
			||||||
         public void run() {
 | 
					 | 
				
			||||||
@@ -0,0 +0,0 @@ public class PlayerChunk {
 | 
					 | 
				
			||||||
         // CraftBukkit start
 | 
					 | 
				
			||||||
         loadInProgress = true;
 | 
					 | 
				
			||||||
         this.chunk = playerchunkmap.getWorld().getChunkProviderServer().getChunkAt(i, j, loadedRunnable, false);
 | 
					 | 
				
			||||||
+        this.chunkExists = this.chunk != null || ChunkIOExecutor.hasQueuedChunkLoad(playerChunkMap.getWorld(), i, j); // Paper
 | 
					 | 
				
			||||||
         markChunkUsed(); // Paper - delay chunk unloads
 | 
					 | 
				
			||||||
         // CraftBukkit end
 | 
					 | 
				
			||||||
     }
 | 
					 | 
				
			||||||
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
 | 
					 | 
				
			||||||
index 6ee9f6cfb..99652ae3e 100644
 | 
					 | 
				
			||||||
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
 | 
					 | 
				
			||||||
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
 | 
					 | 
				
			||||||
@@ -0,0 +0,0 @@ public class PlayerChunkMap {
 | 
					 | 
				
			||||||
             // Spigot start
 | 
					 | 
				
			||||||
             org.spigotmc.SlackActivityAccountant activityAccountant = this.world.getMinecraftServer().slackActivityAccountant;
 | 
					 | 
				
			||||||
             activityAccountant.startActivity(0.5);
 | 
					 | 
				
			||||||
+            int chunkGensAllowed = world.paperConfig.maxChunkGensPerTick; // Paper
 | 
					 | 
				
			||||||
             // Spigot end
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
             Iterator iterator1 = this.h.iterator();
 | 
					 | 
				
			||||||
@@ -0,0 +0,0 @@ public class PlayerChunkMap {
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
                 if (playerchunk1.f() == null) {
 | 
					 | 
				
			||||||
                     boolean flag = playerchunk1.a(PlayerChunkMap.b);
 | 
					 | 
				
			||||||
+                    // Paper start
 | 
					 | 
				
			||||||
+                    if (flag && !playerchunk1.chunkExists && chunkGensAllowed-- <= 0) {
 | 
					 | 
				
			||||||
+                        continue;
 | 
					 | 
				
			||||||
+                    }
 | 
					 | 
				
			||||||
+                    // Paper end
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
                     if (playerchunk1.a(flag)) {
 | 
					 | 
				
			||||||
                         iterator1.remove();
 | 
					 | 
				
			||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOExecutor.java b/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOExecutor.java
 | 
					 | 
				
			||||||
index 9aaca21a7..f50d55c8e 100644
 | 
					 | 
				
			||||||
--- a/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOExecutor.java
 | 
					 | 
				
			||||||
+++ b/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOExecutor.java
 | 
					 | 
				
			||||||
@@ -0,0 +0,0 @@ public class ChunkIOExecutor {
 | 
					 | 
				
			||||||
     public static void tick() {
 | 
					 | 
				
			||||||
         instance.finishActive();
 | 
					 | 
				
			||||||
     }
 | 
					 | 
				
			||||||
+
 | 
					 | 
				
			||||||
+    // Paper start
 | 
					 | 
				
			||||||
+    public static boolean hasQueuedChunkLoad(World world, int x, int z) {
 | 
					 | 
				
			||||||
+        return instance.hasTask(new QueuedChunk(x, z, null, world, null));
 | 
					 | 
				
			||||||
+    }
 | 
					 | 
				
			||||||
+    // Paper end
 | 
					 | 
				
			||||||
 }
 | 
					 | 
				
			||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/util/AsynchronousExecutor.java b/src/main/java/org/bukkit/craftbukkit/util/AsynchronousExecutor.java
 | 
					 | 
				
			||||||
index 193c3621c..cf1258c55 100644
 | 
					 | 
				
			||||||
--- a/src/main/java/org/bukkit/craftbukkit/util/AsynchronousExecutor.java
 | 
					 | 
				
			||||||
+++ b/src/main/java/org/bukkit/craftbukkit/util/AsynchronousExecutor.java
 | 
					 | 
				
			||||||
@@ -0,0 +0,0 @@ public final class AsynchronousExecutor<P, T, C, E extends Throwable> {
 | 
					 | 
				
			||||||
     public void setActiveThreads(final int coreSize) {
 | 
					 | 
				
			||||||
         pool.setCorePoolSize(coreSize);
 | 
					 | 
				
			||||||
     }
 | 
					 | 
				
			||||||
+
 | 
					 | 
				
			||||||
+    // Paper start
 | 
					 | 
				
			||||||
+    public boolean hasTask(P parameter) throws IllegalStateException {
 | 
					 | 
				
			||||||
+        return tasks.get(parameter) != null;
 | 
					 | 
				
			||||||
+    }
 | 
					 | 
				
			||||||
+    // Paper end
 | 
					 | 
				
			||||||
 }
 | 
					 | 
				
			||||||
--
 | 
					 | 
				
			||||||
| 
						 | 
					@ -23,7 +23,7 @@ index cf06f8ac3..2001175bf 100644
 | 
				
			||||||
+    }
 | 
					+    }
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
					diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
				
			||||||
index c09620b37..aa7c019ab 100644
 | 
					index e9ce81bfc..c757881b7 100644
 | 
				
			||||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
					--- a/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
				
			||||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
					+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
 | 
					@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,46 +0,0 @@
 | 
				
			||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
 | 
					 | 
				
			||||||
From: Shane Freeder <theboyetronic@gmail.com>
 | 
					 | 
				
			||||||
Date: Mon, 18 Dec 2017 07:26:56 +0000
 | 
					 | 
				
			||||||
Subject: [PATCH] Don't blindly send unlit chunks when lighting updates are
 | 
					 | 
				
			||||||
 allowed
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Spigot, by default, disables several mechanisms around how chunks are
 | 
					 | 
				
			||||||
lit, if ever, which has forced them to always send chunks before vanilla
 | 
					 | 
				
			||||||
would consider them ready to send, causing for lots of issues around
 | 
					 | 
				
			||||||
lighting glitches.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Shamefully, the amount of work to relight chunks can be detremental
 | 
					 | 
				
			||||||
to some servers, meaning that forcibily disabling light updates can
 | 
					 | 
				
			||||||
cause major performance issues.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
as such, we make a compromise; if this "feature" is disabled, we will
 | 
					 | 
				
			||||||
only send chunks which are actually ready to be sent, otherwise, we
 | 
					 | 
				
			||||||
will always send chunks.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
 | 
					 | 
				
			||||||
index cb33cf902..87d0d426f 100644
 | 
					 | 
				
			||||||
--- a/src/main/java/net/minecraft/server/Chunk.java
 | 
					 | 
				
			||||||
+++ b/src/main/java/net/minecraft/server/Chunk.java
 | 
					 | 
				
			||||||
@@ -0,0 +0,0 @@ public class Chunk {
 | 
					 | 
				
			||||||
     // Paper end
 | 
					 | 
				
			||||||
     private boolean done;
 | 
					 | 
				
			||||||
     private boolean lit;
 | 
					 | 
				
			||||||
-    private boolean r;
 | 
					 | 
				
			||||||
+    private boolean r; private boolean isTicked() { return r; }; // Paper - OBFHELPER
 | 
					 | 
				
			||||||
     private boolean s;
 | 
					 | 
				
			||||||
     private boolean t;
 | 
					 | 
				
			||||||
     private long lastSaved;
 | 
					 | 
				
			||||||
@@ -0,0 +0,0 @@ public class Chunk {
 | 
					 | 
				
			||||||
          * We cannot unfortunately do this lighting stage during chunk gen as it appears to put a lot more noticeable load on the server, than when it is done at play time.
 | 
					 | 
				
			||||||
          * For now at least we will simply send all chunks, in accordance with pre 1.7 behaviour.
 | 
					 | 
				
			||||||
          */
 | 
					 | 
				
			||||||
-        return true;
 | 
					 | 
				
			||||||
+        // Paper Start
 | 
					 | 
				
			||||||
+        // if randomLightUpdates are disabled, we should always return true, otherwise chunks may never send
 | 
					 | 
				
			||||||
+        // to the client due to not being lit, otherwise retain standard behavior and only send properly lit chunks.
 | 
					 | 
				
			||||||
+        return !this.world.spigotConfig.randomLightUpdates || (this.isTicked() && this.done && this.lit);
 | 
					 | 
				
			||||||
+        // Paper End
 | 
					 | 
				
			||||||
         // Spigot End
 | 
					 | 
				
			||||||
     }
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
--
 | 
					 | 
				
			||||||
| 
						 | 
					@ -14,7 +14,7 @@ big slowdown in execution but throwing an exception at same time to raise awaren
 | 
				
			||||||
that it is happening so that plugin authors can fix their code to stop executing commands async.
 | 
					that it is happening so that plugin authors can fix their code to stop executing commands async.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
					diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
				
			||||||
index 2adb21e55..27c255c8d 100644
 | 
					index c2eb3a58d..9c27966ea 100644
 | 
				
			||||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
					--- a/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
				
			||||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
					+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
 | 
					@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
 | 
				
			||||||
| 
						 | 
					@ -48,12 +48,12 @@ index 2adb21e55..27c255c8d 100644
 | 
				
			||||||
         } else if (this.player.getChatFlags() == EntityHuman.EnumChatVisibility.SYSTEM) {
 | 
					         } else if (this.player.getChatFlags() == EntityHuman.EnumChatVisibility.SYSTEM) {
 | 
				
			||||||
             // Do nothing, this is coming from a plugin
 | 
					             // Do nothing, this is coming from a plugin
 | 
				
			||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
index 2055bf7de..29344593a 100644
 | 
					index 6e152fe17..d637199ca 100644
 | 
				
			||||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
 | 
					@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
 | 
				
			||||||
         Validate.notNull(sender, "Sender cannot be null");
 | 
					 | 
				
			||||||
         Validate.notNull(commandLine, "CommandLine cannot be null");
 | 
					         Validate.notNull(commandLine, "CommandLine cannot be null");
 | 
				
			||||||
 | 
					         org.spigotmc.AsyncCatcher.catchOp( "command dispatch" ); // Spigot
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
+        // Paper Start
 | 
					+        // Paper Start
 | 
				
			||||||
+        if (!org.spigotmc.AsyncCatcher.shuttingDown && !Bukkit.isPrimaryThread()) {
 | 
					+        if (!org.spigotmc.AsyncCatcher.shuttingDown && !Bukkit.isPrimaryThread()) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,10 +8,10 @@ Plugins can cancel this if they want to ensure experience orbs do not lose impor
 | 
				
			||||||
metadata such as spawn reason, or conditionally move data from source to target.
 | 
					metadata such as spawn reason, or conditionally move data from source to target.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
 | 
					diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
 | 
				
			||||||
index 39b90fb4c..c0816b9f8 100644
 | 
					index 069ba83db..ee061d693 100644
 | 
				
			||||||
--- a/src/main/java/net/minecraft/server/World.java
 | 
					--- a/src/main/java/net/minecraft/server/World.java
 | 
				
			||||||
+++ b/src/main/java/net/minecraft/server/World.java
 | 
					+++ b/src/main/java/net/minecraft/server/World.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
 | 
					@@ -0,0 +0,0 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
 | 
				
			||||||
                 for (Entity e : entities) {
 | 
					                 for (Entity e : entities) {
 | 
				
			||||||
                     if (e instanceof EntityExperienceOrb) {
 | 
					                     if (e instanceof EntityExperienceOrb) {
 | 
				
			||||||
                         EntityExperienceOrb loopItem = (EntityExperienceOrb) e;
 | 
					                         EntityExperienceOrb loopItem = (EntityExperienceOrb) e;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,7 +5,7 @@ Subject: [PATCH] Expose server CommandMap
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
index 29344593a..32a05ca18 100644
 | 
					index d637199ca..703d38f0c 100644
 | 
				
			||||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
 | 
					@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,7 +5,7 @@ Subject: [PATCH] Fix block break desync
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
					diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
				
			||||||
index b69c194bb..25e3d6423 100644
 | 
					index a7132427a..32c99085f 100644
 | 
				
			||||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
					--- a/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
				
			||||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
					+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
 | 
					@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -148,7 +148,7 @@ index 4889a82a2..2e691b9f6 100644
 | 
				
			||||||
                     }
 | 
					                     }
 | 
				
			||||||
                     lastTick = curTime;
 | 
					                     lastTick = curTime;
 | 
				
			||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
index 28f6cdf96..2055bf7de 100644
 | 
					index 34a07a7e7..6e152fe17 100644
 | 
				
			||||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
 | 
					@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,7 +7,7 @@ This will take a Bukkit ItemStack and run it through any conversions a server pr
 | 
				
			||||||
to ensure it meets latest minecraft expectations.
 | 
					to ensure it meets latest minecraft expectations.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
 | 
					diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
 | 
				
			||||||
index e305d663a..503dd5827 100644
 | 
					index 59d2685dc..27a264f54 100644
 | 
				
			||||||
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
 | 
					--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
 | 
				
			||||||
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
 | 
					+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ public final class CraftItemFactory implements ItemFactory {
 | 
					@@ -0,0 +0,0 @@ public final class CraftItemFactory implements ItemFactory {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,7 +8,7 @@ Currently the server only supports the English language. To override this,
 | 
				
			||||||
You must replace the language file embedded in the server jar.
 | 
					You must replace the language file embedded in the server jar.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
 | 
					diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
 | 
				
			||||||
index 503dd5827..73785830f 100644
 | 
					index 27a264f54..6fc0ce050 100644
 | 
				
			||||||
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
 | 
					--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
 | 
				
			||||||
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
 | 
					+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ public final class CraftItemFactory implements ItemFactory {
 | 
					@@ -0,0 +0,0 @@ public final class CraftItemFactory implements ItemFactory {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -576,7 +576,7 @@ index c7f5cba2d..330ea4e72 100644
 | 
				
			||||||
         this.world = new CraftWorld((WorldServer) this, gen, env);
 | 
					         this.world = new CraftWorld((WorldServer) this, gen, env);
 | 
				
			||||||
         this.ticksPerAnimalSpawns = this.getServer().getTicksPerAnimalSpawns(); // CraftBukkit
 | 
					         this.ticksPerAnimalSpawns = this.getServer().getTicksPerAnimalSpawns(); // CraftBukkit
 | 
				
			||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
index 8b118e81e..dad2dc959 100644
 | 
					index ce5ebcc54..88766d30d 100644
 | 
				
			||||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
 | 
					@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,16 +6,16 @@ Subject: [PATCH] PlayerPickupExperienceEvent
 | 
				
			||||||
Allows plugins to cancel a player picking up an experience orb
 | 
					Allows plugins to cancel a player picking up an experience orb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
diff --git a/src/main/java/net/minecraft/server/EntityExperienceOrb.java b/src/main/java/net/minecraft/server/EntityExperienceOrb.java
 | 
					diff --git a/src/main/java/net/minecraft/server/EntityExperienceOrb.java b/src/main/java/net/minecraft/server/EntityExperienceOrb.java
 | 
				
			||||||
index d567ad4a5..ff5cc74ba 100644
 | 
					index 79d80596d..a87ef5fb8 100644
 | 
				
			||||||
--- a/src/main/java/net/minecraft/server/EntityExperienceOrb.java
 | 
					--- a/src/main/java/net/minecraft/server/EntityExperienceOrb.java
 | 
				
			||||||
+++ b/src/main/java/net/minecraft/server/EntityExperienceOrb.java
 | 
					+++ b/src/main/java/net/minecraft/server/EntityExperienceOrb.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ public class EntityExperienceOrb extends Entity {
 | 
					@@ -0,0 +0,0 @@ public class EntityExperienceOrb extends Entity {
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
     public void d(EntityHuman entityhuman) {
 | 
					     public void d(EntityHuman entityhuman) {
 | 
				
			||||||
         if (!this.world.isClientSide) {
 | 
					         if (!this.world.isClientSide) {
 | 
				
			||||||
-            if (this.c == 0 && entityhuman.bD == 0) {
 | 
					-            if (this.c == 0 && entityhuman.bJ == 0) {
 | 
				
			||||||
+            if (this.c == 0 && entityhuman.bD == 0 && new com.destroystokyo.paper.event.player.PlayerPickupExperienceEvent(((EntityPlayer) entityhuman).getBukkitEntity(), (org.bukkit.entity.ExperienceOrb) this.getBukkitEntity()).callEvent()) { // Paper
 | 
					+            if (this.c == 0 && entityhuman.bJ == 0 && new com.destroystokyo.paper.event.player.PlayerPickupExperienceEvent(((EntityPlayer) entityhuman).getBukkitEntity(), (org.bukkit.entity.ExperienceOrb) this.getBukkitEntity()).callEvent()) { // Paper
 | 
				
			||||||
                 entityhuman.bD = 2;
 | 
					                 entityhuman.bJ = 2;
 | 
				
			||||||
                 entityhuman.receive(this, 1);
 | 
					                 entityhuman.receive(this, 1);
 | 
				
			||||||
                 ItemStack itemstack = EnchantmentManager.b(Enchantments.C, (EntityLiving) entityhuman);
 | 
					                 ItemStack itemstack = EnchantmentManager.b(Enchantments.G, (EntityLiving) entityhuman);
 | 
				
			||||||
--
 | 
					--
 | 
				
			||||||
| 
						 | 
					@ -7,7 +7,7 @@ Metadata is not meant to persist reload as things break badly with non primitive
 | 
				
			||||||
This will remove metadata on reload so it does not crash everything if a plugin uses it.
 | 
					This will remove metadata on reload so it does not crash everything if a plugin uses it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
index 5ffb335f5..f98f355dd 100644
 | 
					index 1c9637ff7..f90dc11f2 100644
 | 
				
			||||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
 | 
					@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -989,7 +989,7 @@ index ac6d8cc6e..d975c2ccf 100644
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
     }
 | 
					     }
 | 
				
			||||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
					diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
				
			||||||
index 227bc857e..2adb21e55 100644
 | 
					index 749be86fe..c2eb3a58d 100644
 | 
				
			||||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
					--- a/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
				
			||||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
					+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ import org.bukkit.inventory.CraftingInventory;
 | 
					@@ -0,0 +0,0 @@ import org.bukkit.inventory.CraftingInventory;
 | 
				
			||||||
| 
						 | 
					@ -1380,7 +1380,7 @@ index 784289c0d..d7f86bf76 100644
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
     // CraftBukkit start
 | 
					     // CraftBukkit start
 | 
				
			||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
index dad2dc959..88ea651ba 100644
 | 
					index 88766d30d..d33f237b7 100644
 | 
				
			||||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
 | 
					@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -310,7 +310,7 @@ index 5e833c378..0f39fa49f 100644
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
         this.k = new GameProfileBanList(PlayerList.a);
 | 
					         this.k = new GameProfileBanList(PlayerList.a);
 | 
				
			||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
index 6c611c0df..3b10c5e61 100644
 | 
					index 470e334f7..9fe7c6a0d 100644
 | 
				
			||||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
					+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ import java.nio.ByteBuffer;
 | 
					@@ -0,0 +0,0 @@ import java.nio.ByteBuffer;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1 +1 @@
 | 
				
			||||||
Subproject commit a71d06a0c8426f7d1d23f9e76ea6cdf47b666db5
 | 
					Subproject commit de019a35f009518bbabb3f39383e374cf8aae799
 | 
				
			||||||
| 
						 | 
					@ -1 +1 @@
 | 
				
			||||||
Subproject commit 11bdb291b30fed321b346668a4b5e4ddf45229b6
 | 
					Subproject commit 83d9d09afb65204de4f6050c4033d482dd2a0d6a
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue