diff --git a/Spigot-Server-Patches/0196-PreCreatureSpawnEvent.patch b/Spigot-Server-Patches/0196-PreCreatureSpawnEvent.patch new file mode 100644 index 0000000000..9e679d52fe --- /dev/null +++ b/Spigot-Server-Patches/0196-PreCreatureSpawnEvent.patch @@ -0,0 +1,102 @@ +From da358531a943040a325275a457afe2a94571e7b1 Mon Sep 17 00:00:00 2001 +From: Aikar +Date: Sun, 14 Jan 2018 17:01:31 -0500 +Subject: [PATCH] PreCreatureSpawnEvent + +Adds an event to fire before an Entity is created, so that plugins that need to cancel +CreatureSpawnEvent can do so from this event instead. + +Cancelling CreatureSpawnEvent rapidly causes a lot of garbage collection and CPU waste +as it's done after the Entity object has been fully created. + +Mob Limiting plugins and blanket "ban this type of monster" plugins should use this event +instead and save a lot of server resources. + +See: https://github.com/PaperMC/Paper/issues/917 + +diff --git a/src/main/java/net/minecraft/server/EntityTypes.java b/src/main/java/net/minecraft/server/EntityTypes.java +index 9aed0d6b8..dce9e2fc1 100644 +--- a/src/main/java/net/minecraft/server/EntityTypes.java ++++ b/src/main/java/net/minecraft/server/EntityTypes.java +@@ -271,6 +271,7 @@ public class EntityTypes { + return this.bf; + } + ++ public final MinecraftKey getKey() { return this.g(); } // Paper - OBFHELPER + public MinecraftKey g() { + if (this.bg == null) { + MinecraftKey minecraftkey = IRegistry.ENTITY_TYPE.getKey(this); +diff --git a/src/main/java/net/minecraft/server/MobSpawnerAbstract.java b/src/main/java/net/minecraft/server/MobSpawnerAbstract.java +index d8ae336e9..bca0e3a2e 100644 +--- a/src/main/java/net/minecraft/server/MobSpawnerAbstract.java ++++ b/src/main/java/net/minecraft/server/MobSpawnerAbstract.java +@@ -103,6 +103,27 @@ public abstract class MobSpawnerAbstract { + double d4 = j >= 2 ? nbttaglist.h(1) : (double) (blockposition.getY() + world.random.nextInt(3) - 1); + double d5 = j >= 3 ? nbttaglist.h(2) : (double) blockposition.getZ() + (world.random.nextDouble() - world.random.nextDouble()) * (double) this.spawnRange + 0.5D; + ++ // Paper start ++ EntityTypes entityType = optional.get(); ++ String key = entityType.getKey().getKey(); ++ org.bukkit.entity.EntityType type = org.bukkit.entity.EntityType.fromName(key); ++ if (type != null) { ++ com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent event; ++ event = new com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent( ++ MCUtil.toLocation(world, d3, d4, d5), ++ type, ++ org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.SPAWNER ++ ); ++ if (!event.callEvent()) { ++ flag = true; ++ if (event.shouldAbortSpawn()) { ++ break; ++ } ++ continue; ++ } ++ } ++ // Paper end ++ + if (world.c(((EntityTypes) optional.get()).a(d3, d4, d5))) { + Entity entity = EntityTypes.a(nbttagcompound, world, (entity1) -> { + entity1.setPositionRotation(d3, d4, d5, entity1.yaw, entity1.pitch); +diff --git a/src/main/java/net/minecraft/server/SpawnerCreature.java b/src/main/java/net/minecraft/server/SpawnerCreature.java +index 7e58e4714..e5695c760 100644 +--- a/src/main/java/net/minecraft/server/SpawnerCreature.java ++++ b/src/main/java/net/minecraft/server/SpawnerCreature.java +@@ -38,7 +38,7 @@ public final class SpawnerCreature { + BiomeBase.BiomeMeta biomebase_biomemeta = null; + GroupDataEntity groupdataentity = null; + int l1 = MathHelper.f(Math.random() * 4.0D); +- int i2 = 0; ++ int i2 = 0; // Paper - force diff on name change + int j2 = 0; + + while (true) { +@@ -74,6 +74,25 @@ public final class SpawnerCreature { + if (entitypositiontypes_surface != null && a(entitypositiontypes_surface, (IWorldReader) world, (BlockPosition) blockposition_mutableblockposition, entitytypes) && world.c(entitytypes.a((double) f, (double) k, (double) f1))) { + EntityInsentient entityinsentient; + ++ // Paper start ++ com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent event; ++ EntityTypes cls = biomebase_biomemeta.b; ++ org.bukkit.entity.EntityType type = org.bukkit.entity.EntityType.fromName(cls.getKey().getKey()); ++ if (type != null) { ++ event = new com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent( ++ MCUtil.toLocation(world, blockposition_mutableblockposition), ++ type, SpawnReason.NATURAL ++ ); ++ if (!event.callEvent()) { ++ if (event.shouldAbortSpawn()) { ++ return; ++ } ++ ++i2; ++ continue; ++ } ++ } ++ // Paper end ++ + try { + Entity entity = entitytypes.a(world); + +-- +2.21.0 + diff --git a/Spigot-Server-Patches/0197-PlayerNaturallySpawnCreaturesEvent.patch b/Spigot-Server-Patches/0197-PlayerNaturallySpawnCreaturesEvent.patch new file mode 100644 index 0000000000..76d164eea4 --- /dev/null +++ b/Spigot-Server-Patches/0197-PlayerNaturallySpawnCreaturesEvent.patch @@ -0,0 +1,36 @@ +From 3755330b8b9222b50364f326b08619837d0865d2 Mon Sep 17 00:00:00 2001 +From: Aikar +Date: Sun, 14 Jan 2018 17:36:02 -0500 +Subject: [PATCH] PlayerNaturallySpawnCreaturesEvent + +This event can be used for when you want to exclude a certain player +from triggering monster spawns on a server. + +Also a highly more effecient way to blanket block spawns in a world + +diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java +index 89a00ff8d..3fab45aa9 100644 +--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java ++++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java +@@ -735,11 +735,16 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { + int chunkRange = world.spigotConfig.mobSpawnRange; + chunkRange = (chunkRange > world.spigotConfig.viewDistance) ? (byte) world.spigotConfig.viewDistance : chunkRange; + chunkRange = (chunkRange > 8) ? 8 : chunkRange; +- +- double blockRange = Math.pow(chunkRange << 4, 2); ++ final int finalChunkRange = chunkRange; // Paper for lambda below ++ //double blockRange = Math.pow(chunkRange << 4, 2); // Paper - use the range from the event + // Spigot end + + return this.y.a(chunkcoordintpair.pair()).noneMatch((entityplayer) -> { ++ // Paper start - ++ com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent event // TODO deal with int->byte on review (as well as the mess that this code is) ++ = new com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent(entityplayer.getBukkitEntity(), (byte)finalChunkRange); ++ final double blockRange = (double)((event.getSpawnRadius() << 4) * (event.getSpawnRadius() << 4)); ++ // Paper end + return !entityplayer.isSpectator() && a(chunkcoordintpair, (Entity) entityplayer) < blockRange; // Spigot + }); + } +-- +2.21.0 + diff --git a/Spigot-Server-Patches/0225-Add-setPlayerProfile-API-for-Skulls.patch b/Spigot-Server-Patches/0198-Add-setPlayerProfile-API-for-Skulls.patch similarity index 84% rename from Spigot-Server-Patches/0225-Add-setPlayerProfile-API-for-Skulls.patch rename to Spigot-Server-Patches/0198-Add-setPlayerProfile-API-for-Skulls.patch index 2cb4ac4a2c..2b799c64e2 100644 --- a/Spigot-Server-Patches/0225-Add-setPlayerProfile-API-for-Skulls.patch +++ b/Spigot-Server-Patches/0198-Add-setPlayerProfile-API-for-Skulls.patch @@ -1,4 +1,4 @@ -From 4391ebacd07855f754c975a03878cd52421ba6af Mon Sep 17 00:00:00 2001 +From 07ae0176d0b9c8fe33856a95e62d95d92412a2fd Mon Sep 17 00:00:00 2001 From: Aikar Date: Fri, 19 Jan 2018 00:36:25 -0500 Subject: [PATCH] Add setPlayerProfile API for Skulls @@ -7,7 +7,7 @@ This allows you to create already filled textures on Skulls to avoid texture loo which commonly cause rate limit issues with Mojang API diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftSkull.java b/src/main/java/org/bukkit/craftbukkit/block/CraftSkull.java -index 110e04597b..c260af11cd 100644 +index a4bc7f970..2dd2f476f 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftSkull.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftSkull.java @@ -1,5 +1,7 @@ @@ -18,7 +18,7 @@ index 110e04597b..c260af11cd 100644 import com.google.common.base.Preconditions; import com.mojang.authlib.GameProfile; import net.minecraft.server.MinecraftServer; -@@ -16,6 +18,7 @@ import org.bukkit.block.data.BlockData; +@@ -15,6 +17,7 @@ import org.bukkit.block.data.BlockData; import org.bukkit.block.data.Directional; import org.bukkit.block.data.Rotatable; import org.bukkit.craftbukkit.entity.CraftPlayer; @@ -26,7 +26,7 @@ index 110e04597b..c260af11cd 100644 public class CraftSkull extends CraftBlockEntityState implements Skull { -@@ -106,6 +109,20 @@ public class CraftSkull extends CraftBlockEntityState implement +@@ -105,6 +108,20 @@ public class CraftSkull extends CraftBlockEntityState implement } } @@ -48,28 +48,27 @@ index 110e04597b..c260af11cd 100644 public BlockFace getRotation() { BlockData blockData = getBlockData(); diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java -index 2ad3acf43b..87e51cf8ad 100644 +index f27053276..5c8e16c00 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java -@@ -2,6 +2,8 @@ package org.bukkit.craftbukkit.inventory; - +@@ -3,6 +3,8 @@ package org.bukkit.craftbukkit.inventory; + import com.google.common.collect.ImmutableMap.Builder; + import com.mojang.authlib.GameProfile; import java.util.Map; - +import com.destroystokyo.paper.profile.CraftPlayerProfile; +import com.destroystokyo.paper.profile.PlayerProfile; import net.minecraft.server.GameProfileSerializer; import net.minecraft.server.NBTBase; import net.minecraft.server.NBTTagCompound; -@@ -20,6 +22,8 @@ import org.bukkit.inventory.meta.SkullMeta; - import com.google.common.collect.ImmutableMap.Builder; - import com.mojang.authlib.GameProfile; +@@ -16,6 +18,7 @@ import org.bukkit.craftbukkit.inventory.CraftMetaItem.SerializableMeta; + import org.bukkit.craftbukkit.util.CraftMagicNumbers; + import org.bukkit.inventory.meta.SkullMeta; +import javax.annotation.Nullable; -+ @DelegateDeserialization(SerializableMeta.class) class CraftMetaSkull extends CraftMetaItem implements SkullMeta { -@@ -133,6 +137,19 @@ class CraftMetaSkull extends CraftMetaItem implements SkullMeta { +@@ -129,6 +132,19 @@ class CraftMetaSkull extends CraftMetaItem implements SkullMeta { return hasOwner() ? profile.getName() : null; } diff --git a/Spigot-Server-Patches/0226-Fill-Profile-Property-Events.patch b/Spigot-Server-Patches/0199-Fill-Profile-Property-Events.patch similarity index 95% rename from Spigot-Server-Patches/0226-Fill-Profile-Property-Events.patch rename to Spigot-Server-Patches/0199-Fill-Profile-Property-Events.patch index d2684ddb9f..1a2c0dbd48 100644 --- a/Spigot-Server-Patches/0226-Fill-Profile-Property-Events.patch +++ b/Spigot-Server-Patches/0199-Fill-Profile-Property-Events.patch @@ -1,4 +1,4 @@ -From e0ef1c07627248d2d678a1f2e78bd60b763dc9e6 Mon Sep 17 00:00:00 2001 +From 175fd070689b73c0be2c7d7048120abf4c50719f Mon Sep 17 00:00:00 2001 From: Aikar Date: Tue, 2 Jan 2018 00:31:26 -0500 Subject: [PATCH] Fill Profile Property Events @@ -11,7 +11,7 @@ If Mojang API does need to be hit, event fire so you can get the results. This is useful for implementing a ProfileCache for Player Skulls diff --git a/src/main/java/com/destroystokyo/paper/profile/PaperMinecraftSessionService.java b/src/main/java/com/destroystokyo/paper/profile/PaperMinecraftSessionService.java -index 4b2a67423f..61cfdf73c8 100644 +index 4b2a67423..61cfdf73c 100644 --- a/src/main/java/com/destroystokyo/paper/profile/PaperMinecraftSessionService.java +++ b/src/main/java/com/destroystokyo/paper/profile/PaperMinecraftSessionService.java @@ -1,5 +1,7 @@ diff --git a/Spigot-Server-Patches/0227-PlayerAdvancementCriterionGrantEvent.patch b/Spigot-Server-Patches/0200-PlayerAdvancementCriterionGrantEvent.patch similarity index 85% rename from Spigot-Server-Patches/0227-PlayerAdvancementCriterionGrantEvent.patch rename to Spigot-Server-Patches/0200-PlayerAdvancementCriterionGrantEvent.patch index b032fa2e92..2f14f6b965 100644 --- a/Spigot-Server-Patches/0227-PlayerAdvancementCriterionGrantEvent.patch +++ b/Spigot-Server-Patches/0200-PlayerAdvancementCriterionGrantEvent.patch @@ -1,14 +1,14 @@ -From 94c0804a6d6ad37906d49bd91e7313a06729d90a Mon Sep 17 00:00:00 2001 +From 9545982da8ce414d8e40563962799a070cdc2c27 Mon Sep 17 00:00:00 2001 From: BillyGalbreath Date: Fri, 19 Jan 2018 08:15:29 -0600 Subject: [PATCH] PlayerAdvancementCriterionGrantEvent diff --git a/src/main/java/net/minecraft/server/AdvancementDataPlayer.java b/src/main/java/net/minecraft/server/AdvancementDataPlayer.java -index 519bccdad0..c7ad71c5f3 100644 +index 71158ea8b..ddee2c030 100644 --- a/src/main/java/net/minecraft/server/AdvancementDataPlayer.java +++ b/src/main/java/net/minecraft/server/AdvancementDataPlayer.java -@@ -228,6 +228,12 @@ public class AdvancementDataPlayer { +@@ -276,6 +276,12 @@ public class AdvancementDataPlayer { boolean flag1 = advancementprogress.isDone(); if (advancementprogress.a(s)) { diff --git a/Spigot-Server-Patches/0228-Add-ArmorStand-Item-Meta.patch b/Spigot-Server-Patches/0201-Add-ArmorStand-Item-Meta.patch similarity index 95% rename from Spigot-Server-Patches/0228-Add-ArmorStand-Item-Meta.patch rename to Spigot-Server-Patches/0201-Add-ArmorStand-Item-Meta.patch index 6df74bf754..a1fb963c1f 100644 --- a/Spigot-Server-Patches/0228-Add-ArmorStand-Item-Meta.patch +++ b/Spigot-Server-Patches/0201-Add-ArmorStand-Item-Meta.patch @@ -1,4 +1,4 @@ -From 3bc7ef8b18050eb0254ac54927d8e0c3bd2ccd20 Mon Sep 17 00:00:00 2001 +From 3d8dc5bfef162c4777544c8d604a491225c3d81c Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Sat, 27 Jan 2018 17:04:14 -0500 Subject: [PATCH] Add ArmorStand Item Meta @@ -13,7 +13,7 @@ starting point for future additions in this area. Fixes GH-559 diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java -index 3a6e6f687d..6a86cb7eb4 100644 +index dd02fb95a..7c2c4ecc5 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java @@ -191,6 +191,8 @@ public final class CraftItemFactory implements ItemFactory { @@ -26,10 +26,10 @@ index 3a6e6f687d..6a86cb7eb4 100644 case CHEST: case TRAPPED_CHEST: diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java -index eeb2c5689e..69faeb9c09 100644 +index 6c00ca737..4d8013685 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java -@@ -404,6 +404,8 @@ public final class CraftItemStack extends ItemStack { +@@ -395,6 +395,8 @@ public final class CraftItemStack extends ItemStack { return new CraftMetaSpawnEgg(item.getTag()); case KNOWLEDGE_BOOK: return new CraftMetaKnowledgeBook(item.getTag()); @@ -40,7 +40,7 @@ index eeb2c5689e..69faeb9c09 100644 case TRAPPED_CHEST: diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaArmorStand.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaArmorStand.java new file mode 100644 -index 0000000000..c00b89c8d4 +index 000000000..c00b89c8d --- /dev/null +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaArmorStand.java @@ -0,0 +1,311 @@ @@ -356,10 +356,10 @@ index 0000000000..c00b89c8d4 + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java -index 2508cfcfa2..570f695d82 100644 +index b3f8249b0..9435136cc 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java -@@ -156,6 +156,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable { +@@ -157,6 +157,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta { .put(CraftMetaCharge.class, "FIREWORK_EFFECT") .put(CraftMetaKnowledgeBook.class, "KNOWLEDGE_BOOK") .put(CraftMetaTropicalFishBucket.class, "TROPICAL_FISH_BUCKET") @@ -367,7 +367,7 @@ index 2508cfcfa2..570f695d82 100644 .put(CraftMetaItem.class, "UNSPECIFIC") .build(); -@@ -1291,7 +1292,15 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable { +@@ -1391,7 +1392,15 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta { CraftMetaCharge.EXPLOSION.NBT, CraftMetaBlockState.BLOCK_ENTITY_TAG.NBT, CraftMetaKnowledgeBook.BOOK_RECIPES.NBT, @@ -385,18 +385,18 @@ index 2508cfcfa2..570f695d82 100644 } return HANDLED_TAGS; diff --git a/src/test/java/org/bukkit/craftbukkit/inventory/ItemMetaTest.java b/src/test/java/org/bukkit/craftbukkit/inventory/ItemMetaTest.java -index 5a2de14fa5..d4f4508cce 100644 +index 176b8f528..93c4e1239 100644 --- a/src/test/java/org/bukkit/craftbukkit/inventory/ItemMetaTest.java +++ b/src/test/java/org/bukkit/craftbukkit/inventory/ItemMetaTest.java -@@ -8,6 +8,7 @@ import java.util.Arrays; +@@ -6,6 +6,7 @@ import java.util.ArrayList; + import java.util.Arrays; import java.util.List; import java.util.UUID; - +import com.destroystokyo.paper.inventory.meta.ArmorStandMeta; // Paper import net.minecraft.server.Block; import net.minecraft.server.IRegistry; import net.minecraft.server.ITileEntity; -@@ -339,7 +340,18 @@ public class ItemMetaTest extends AbstractTestingBase { +@@ -335,7 +336,18 @@ public class ItemMetaTest extends AbstractTestingBase { cleanStack.setItemMeta(meta); return cleanStack; } diff --git a/Spigot-Server-Patches/0229-Extend-Player-Interact-cancellation.patch b/Spigot-Server-Patches/0202-Extend-Player-Interact-cancellation.patch similarity index 95% rename from Spigot-Server-Patches/0229-Extend-Player-Interact-cancellation.patch rename to Spigot-Server-Patches/0202-Extend-Player-Interact-cancellation.patch index b2319cd6f6..5dc16315a2 100644 --- a/Spigot-Server-Patches/0229-Extend-Player-Interact-cancellation.patch +++ b/Spigot-Server-Patches/0202-Extend-Player-Interact-cancellation.patch @@ -1,4 +1,4 @@ -From b023a389347d6f1fdffb80d751e7b4cd82acc382 Mon Sep 17 00:00:00 2001 +From c378827bab648bc642354104b0277b765275ce6f Mon Sep 17 00:00:00 2001 From: Shane Freeder Date: Sun, 11 Feb 2018 10:43:46 +0000 Subject: [PATCH] Extend Player Interact cancellation @@ -13,7 +13,7 @@ Update adjacent blocks of doors, double plants, pistons and beds when cancelling interaction. diff --git a/src/main/java/net/minecraft/server/PlayerInteractManager.java b/src/main/java/net/minecraft/server/PlayerInteractManager.java -index 6ae6afa339..07f9b8d2f7 100644 +index a7411c75a..f692da609 100644 --- a/src/main/java/net/minecraft/server/PlayerInteractManager.java +++ b/src/main/java/net/minecraft/server/PlayerInteractManager.java @@ -111,6 +111,11 @@ public class PlayerInteractManager { @@ -28,7 +28,7 @@ index 6ae6afa339..07f9b8d2f7 100644 // Update any tile entity data for this block TileEntity tileentity = this.world.getTileEntity(blockposition); if (tileentity != null) { -@@ -466,7 +471,25 @@ public class PlayerInteractManager { +@@ -443,7 +448,25 @@ public class PlayerInteractManager { ((EntityPlayer) entityhuman).playerConnection.sendPacket(new PacketPlayOutBlockChange(world, bottom ? blockposition.up() : blockposition.down())); } else if (iblockdata.getBlock() instanceof BlockCake) { ((EntityPlayer) entityhuman).getBukkitEntity().sendHealthUpdate(); // SPIGOT-1341 - reset health for cake diff --git a/Spigot-Server-Patches/0230-Tameable-getOwnerUniqueId-API.patch b/Spigot-Server-Patches/0203-Tameable-getOwnerUniqueId-API.patch similarity index 87% rename from Spigot-Server-Patches/0230-Tameable-getOwnerUniqueId-API.patch rename to Spigot-Server-Patches/0203-Tameable-getOwnerUniqueId-API.patch index 62add4a4e4..027ef87c82 100644 --- a/Spigot-Server-Patches/0230-Tameable-getOwnerUniqueId-API.patch +++ b/Spigot-Server-Patches/0203-Tameable-getOwnerUniqueId-API.patch @@ -1,4 +1,4 @@ -From 4493c2e352b6568517bae5413d36b6c8c06531c5 Mon Sep 17 00:00:00 2001 +From fbe1d515b22f27d9a619256afd81899fa198f1aa Mon Sep 17 00:00:00 2001 From: Aikar Date: Sat, 24 Feb 2018 01:14:55 -0500 Subject: [PATCH] Tameable#getOwnerUniqueId API @@ -7,7 +7,7 @@ This is faster if all you need is the UUID, as .getOwner() will cause an OfflinePlayer to be loaded from disk. diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractHorse.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractHorse.java -index e56bef3340..cc9d432e7f 100644 +index e56bef334..cc9d432e7 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractHorse.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractHorse.java @@ -83,6 +83,9 @@ public abstract class CraftAbstractHorse extends CraftAnimals implements Abstrac @@ -21,10 +21,10 @@ index e56bef3340..cc9d432e7f 100644 return getHandle().getOwnerUUID(); } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTameableAnimal.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTameableAnimal.java -index eaaebeab83..2e959321b5 100644 +index 2498fba31..0869cb091 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTameableAnimal.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTameableAnimal.java -@@ -18,6 +18,9 @@ public class CraftTameableAnimal extends CraftAnimals implements Tameable, Creat +@@ -17,6 +17,9 @@ public class CraftTameableAnimal extends CraftAnimals implements Tameable, Creat return (EntityTameableAnimal)super.getHandle(); } diff --git a/Spigot-Server-Patches/0231-Toggleable-player-crits-helps-mitigate-hacked-client.patch b/Spigot-Server-Patches/0204-Toggleable-player-crits-helps-mitigate-hacked-client.patch similarity index 76% rename from Spigot-Server-Patches/0231-Toggleable-player-crits-helps-mitigate-hacked-client.patch rename to Spigot-Server-Patches/0204-Toggleable-player-crits-helps-mitigate-hacked-client.patch index 1227509333..bc1d8a97c2 100644 --- a/Spigot-Server-Patches/0231-Toggleable-player-crits-helps-mitigate-hacked-client.patch +++ b/Spigot-Server-Patches/0204-Toggleable-player-crits-helps-mitigate-hacked-client.patch @@ -1,14 +1,14 @@ -From 0bef2f366cef39dcaf0a10707d705746496694b2 Mon Sep 17 00:00:00 2001 +From 083c75803c43b7f597b8f1b1b25b6f762535b908 Mon Sep 17 00:00:00 2001 From: MiniDigger Date: Sat, 10 Mar 2018 00:50:24 +0100 Subject: [PATCH] Toggleable player crits, helps mitigate hacked clients. diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -index 07a8ef697f..f68b8a4b05 100644 +index c3e61bdfe..32bfe0e46 100644 --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -@@ -191,6 +191,11 @@ public class PaperWorldConfig { +@@ -182,6 +182,11 @@ public class PaperWorldConfig { disableChestCatDetection = getBoolean("game-mechanics.disable-chest-cat-detection", false); } @@ -21,12 +21,12 @@ index 07a8ef697f..f68b8a4b05 100644 private void allChunksAreSlimeChunks() { allChunksAreSlimeChunks = getBoolean("all-chunks-are-slime-chunks", false); diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java -index 259f73f66e..1640098c35 100644 +index a30d88af8..58e2601ef 100644 --- a/src/main/java/net/minecraft/server/EntityHuman.java +++ b/src/main/java/net/minecraft/server/EntityHuman.java -@@ -1029,6 +1029,7 @@ public abstract class EntityHuman extends EntityLiving { +@@ -981,6 +981,7 @@ public abstract class EntityHuman extends EntityLiving { - boolean flag2 = flag && this.fallDistance > 0.0F && !this.onGround && !this.z_() && !this.isInWater() && !this.hasEffect(MobEffects.BLINDNESS) && !this.isPassenger() && entity instanceof EntityLiving; + boolean flag2 = flag && this.fallDistance > 0.0F && !this.onGround && !this.isClimbing() && !this.isInWater() && !this.hasEffect(MobEffects.BLINDNESS) && !this.isPassenger() && entity instanceof EntityLiving; + flag2 = flag2 && !world.paperConfig.disablePlayerCrits; // Paper flag2 = flag2 && !this.isSprinting(); diff --git a/Spigot-Server-Patches/0232-Fix-NPE-when-getting-location-from-InventoryEnderChe.patch b/Spigot-Server-Patches/0205-Fix-NPE-when-getting-location-from-InventoryEnderChe.patch similarity index 92% rename from Spigot-Server-Patches/0232-Fix-NPE-when-getting-location-from-InventoryEnderChe.patch rename to Spigot-Server-Patches/0205-Fix-NPE-when-getting-location-from-InventoryEnderChe.patch index 1b6681125c..afb5506a58 100644 --- a/Spigot-Server-Patches/0232-Fix-NPE-when-getting-location-from-InventoryEnderChe.patch +++ b/Spigot-Server-Patches/0205-Fix-NPE-when-getting-location-from-InventoryEnderChe.patch @@ -1,4 +1,4 @@ -From 85d587cafd70f53179e5748723089d875afe28c6 Mon Sep 17 00:00:00 2001 +From 59a62d526fd2db7cfe0976fa63bc0e2be2cd90d9 Mon Sep 17 00:00:00 2001 From: Shane Freeder Date: Sat, 10 Mar 2018 13:03:49 +0000 Subject: [PATCH] Fix NPE when getting location from InventoryEnderChest opened @@ -6,7 +6,7 @@ Subject: [PATCH] Fix NPE when getting location from InventoryEnderChest opened diff --git a/src/main/java/net/minecraft/server/InventoryEnderChest.java b/src/main/java/net/minecraft/server/InventoryEnderChest.java -index ac81d3f86b..f50bae0123 100644 +index 343670b20..6960ad433 100644 --- a/src/main/java/net/minecraft/server/InventoryEnderChest.java +++ b/src/main/java/net/minecraft/server/InventoryEnderChest.java @@ -5,7 +5,7 @@ import org.bukkit.inventory.InventoryHolder; diff --git a/Spigot-Server-Patches/0233-Prevent-Frosted-Ice-from-loading-holding-chunks.patch b/Spigot-Server-Patches/0206-Prevent-Frosted-Ice-from-loading-holding-chunks.patch similarity index 85% rename from Spigot-Server-Patches/0233-Prevent-Frosted-Ice-from-loading-holding-chunks.patch rename to Spigot-Server-Patches/0206-Prevent-Frosted-Ice-from-loading-holding-chunks.patch index 78cefbbdd4..9142a73f48 100644 --- a/Spigot-Server-Patches/0233-Prevent-Frosted-Ice-from-loading-holding-chunks.patch +++ b/Spigot-Server-Patches/0206-Prevent-Frosted-Ice-from-loading-holding-chunks.patch @@ -1,14 +1,14 @@ -From 4a099bffa3eb608b42cf27f5796a192910a17811 Mon Sep 17 00:00:00 2001 +From 4e2293389a9c1d4a8a4b6b9f082c383a33282a9d Mon Sep 17 00:00:00 2001 From: Aikar Date: Sat, 10 Mar 2018 16:33:15 -0500 Subject: [PATCH] Prevent Frosted Ice from loading/holding chunks diff --git a/src/main/java/net/minecraft/server/BlockIceFrost.java b/src/main/java/net/minecraft/server/BlockIceFrost.java -index 2c881be1ed..2c4bbc7890 100644 +index 39c3bbc9c..881dfb123 100644 --- a/src/main/java/net/minecraft/server/BlockIceFrost.java +++ b/src/main/java/net/minecraft/server/BlockIceFrost.java -@@ -25,7 +25,8 @@ public class BlockIceFrost extends BlockIce { +@@ -26,7 +26,8 @@ public class BlockIceFrost extends BlockIce { EnumDirection enumdirection = aenumdirection[j]; blockposition_pooledblockposition.g(blockposition).c(enumdirection); @@ -16,9 +16,9 @@ index 2c881be1ed..2c4bbc7890 100644 + IBlockData iblockdata1 = world.getTypeIfLoaded(blockposition_pooledblockposition); // Paper - don't load chunks + if (iblockdata1 == null) continue; // Paper - if (iblockdata1.getBlock() == this && !this.c(iblockdata1, world, blockposition_pooledblockposition)) { + if (iblockdata1.getBlock() == this && !this.e(iblockdata1, world, blockposition_pooledblockposition)) { world.getBlockTickList().a(blockposition_pooledblockposition, this, MathHelper.nextInt(random, world.paperConfig.frostedIceDelayMin, world.paperConfig.frostedIceDelayMax)); // Paper - use configurable min/max delay -@@ -87,7 +88,7 @@ public class BlockIceFrost extends BlockIce { +@@ -89,7 +90,7 @@ public class BlockIceFrost extends BlockIce { EnumDirection enumdirection = aenumdirection[l]; blockposition_pooledblockposition.g(blockposition).c(enumdirection); diff --git a/Spigot-Server-Patches/0234-Disable-Explicit-Network-Manager-Flushing.patch b/Spigot-Server-Patches/0207-Disable-Explicit-Network-Manager-Flushing.patch similarity index 90% rename from Spigot-Server-Patches/0234-Disable-Explicit-Network-Manager-Flushing.patch rename to Spigot-Server-Patches/0207-Disable-Explicit-Network-Manager-Flushing.patch index a4a936992a..c7a8ff693d 100644 --- a/Spigot-Server-Patches/0234-Disable-Explicit-Network-Manager-Flushing.patch +++ b/Spigot-Server-Patches/0207-Disable-Explicit-Network-Manager-Flushing.patch @@ -1,4 +1,4 @@ -From 1105176f71d6e381da53db34eb762f4b38fcf0b5 Mon Sep 17 00:00:00 2001 +From 6038b08ae7ea24cae5b4453e5e2401f06fe3763f Mon Sep 17 00:00:00 2001 From: Aikar Date: Sun, 11 Mar 2018 14:13:33 -0400 Subject: [PATCH] Disable Explicit Network Manager Flushing @@ -12,7 +12,7 @@ flushing on the netty event loop, so it won't do the flush on the main thread. Renable flushing by passing -Dpaper.explicit-flush=true diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java -index 2ff2549d0e..4a50aab512 100644 +index 5d5e23c18..6c5544807 100644 --- a/src/main/java/net/minecraft/server/NetworkManager.java +++ b/src/main/java/net/minecraft/server/NetworkManager.java @@ -65,6 +65,7 @@ public class NetworkManager extends SimpleChannelInboundHandler> { @@ -23,7 +23,7 @@ index 2ff2549d0e..4a50aab512 100644 // Paper end public NetworkManager(EnumProtocolDirection enumprotocoldirection) { -@@ -237,7 +238,7 @@ public class NetworkManager extends SimpleChannelInboundHandler> { +@@ -241,7 +242,7 @@ public class NetworkManager extends SimpleChannelInboundHandler> { } if (this.channel != null) { diff --git a/Spigot-Server-Patches/0235-Implement-extended-PaperServerListPingEvent.patch b/Spigot-Server-Patches/0208-Implement-extended-PaperServerListPingEvent.patch similarity index 92% rename from Spigot-Server-Patches/0235-Implement-extended-PaperServerListPingEvent.patch rename to Spigot-Server-Patches/0208-Implement-extended-PaperServerListPingEvent.patch index afc62b72f7..4aaa62d862 100644 --- a/Spigot-Server-Patches/0235-Implement-extended-PaperServerListPingEvent.patch +++ b/Spigot-Server-Patches/0208-Implement-extended-PaperServerListPingEvent.patch @@ -1,4 +1,4 @@ -From 57a34945bc749450dd4d4d4c80ffca262cc59ee3 Mon Sep 17 00:00:00 2001 +From 20af9903243aa2a49973b413011de18e113a4f92 Mon Sep 17 00:00:00 2001 From: Minecrell Date: Wed, 11 Oct 2017 15:56:26 +0200 Subject: [PATCH] Implement extended PaperServerListPingEvent @@ -6,7 +6,7 @@ Subject: [PATCH] Implement extended PaperServerListPingEvent diff --git a/src/main/java/com/destroystokyo/paper/network/PaperServerListPingEventImpl.java b/src/main/java/com/destroystokyo/paper/network/PaperServerListPingEventImpl.java new file mode 100644 -index 0000000000..c1a8e295b6 +index 000000000..c1a8e295b --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/network/PaperServerListPingEventImpl.java @@ -0,0 +1,31 @@ @@ -43,7 +43,7 @@ index 0000000000..c1a8e295b6 +} diff --git a/src/main/java/com/destroystokyo/paper/network/PaperStatusClient.java b/src/main/java/com/destroystokyo/paper/network/PaperStatusClient.java new file mode 100644 -index 0000000000..a2a409e635 +index 000000000..a2a409e63 --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/network/PaperStatusClient.java @@ -0,0 +1,11 @@ @@ -60,7 +60,7 @@ index 0000000000..a2a409e635 +} diff --git a/src/main/java/com/destroystokyo/paper/network/StandardPaperServerListPingEventImpl.java b/src/main/java/com/destroystokyo/paper/network/StandardPaperServerListPingEventImpl.java new file mode 100644 -index 0000000000..a85466bc7e +index 000000000..a85466bc7 --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/network/StandardPaperServerListPingEventImpl.java @@ -0,0 +1,112 @@ @@ -177,7 +177,7 @@ index 0000000000..a85466bc7e + +} diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 5517c5fe81..476a729ddf 100644 +index 27d0d818b..359ce72fc 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1,6 +1,7 @@ @@ -188,20 +188,20 @@ index 5517c5fe81..476a729ddf 100644 import com.google.common.base.Stopwatch; import com.google.common.collect.Lists; import com.google.common.collect.Maps; -@@ -939,7 +940,7 @@ public abstract class MinecraftServer implements IAsyncTaskHandler, IMojangStati - if (i - this.Y >= 5000000000L) { - this.Y = i; - this.m.setPlayerSample(new ServerPing.ServerPingPlayerSample(this.getMaxPlayers(), this.getPlayerCount())); +@@ -1037,7 +1038,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant= 5000000000L) { + this.Z = i; + this.serverPing.setPlayerSample(new ServerPing.ServerPingPlayerSample(this.getMaxPlayers(), this.getPlayerCount())); - GameProfile[] agameprofile = new GameProfile[Math.min(this.getPlayerCount(), 12)]; + GameProfile[] agameprofile = new GameProfile[Math.min(this.getPlayerCount(), org.spigotmc.SpigotConfig.playerSample)]; // Paper - int j = MathHelper.nextInt(this.n, 0, this.getPlayerCount() - agameprofile.length); + int j = MathHelper.nextInt(this.q, 0, this.getPlayerCount() - agameprofile.length); for (int k = 0; k < agameprofile.length; ++k) { diff --git a/src/main/java/net/minecraft/server/PacketStatusListener.java b/src/main/java/net/minecraft/server/PacketStatusListener.java -index c9edd289ac..8aa121e2f7 100644 +index b247a18b9..ba1c76c1a 100644 --- a/src/main/java/net/minecraft/server/PacketStatusListener.java +++ b/src/main/java/net/minecraft/server/PacketStatusListener.java -@@ -30,6 +30,8 @@ public class PacketStatusListener implements PacketStatusInListener { +@@ -32,6 +32,8 @@ public class PacketStatusListener implements PacketStatusInListener { this.networkManager.close(PacketStatusListener.a); } else { this.d = true; @@ -210,7 +210,7 @@ index c9edd289ac..8aa121e2f7 100644 // CraftBukkit start // this.networkManager.sendPacket(new PacketStatusOutServerInfo(this.minecraftServer.getServerPing())); final Object[] players = minecraftServer.getPlayerList().players.toArray(); -@@ -125,6 +127,9 @@ public class PacketStatusListener implements PacketStatusInListener { +@@ -127,6 +129,9 @@ public class PacketStatusListener implements PacketStatusInListener { ping.setServerInfo(new ServerPing.ServerData(minecraftServer.getServerModName() + " " + minecraftServer.getVersion(), version)); this.networkManager.sendPacket(new PacketStatusOutServerInfo(ping)); @@ -221,7 +221,7 @@ index c9edd289ac..8aa121e2f7 100644 // CraftBukkit end } diff --git a/src/main/java/net/minecraft/server/ServerPing.java b/src/main/java/net/minecraft/server/ServerPing.java -index aa125a52dc..ea52e89bd9 100644 +index aa125a52d..ea52e89bd 100644 --- a/src/main/java/net/minecraft/server/ServerPing.java +++ b/src/main/java/net/minecraft/server/ServerPing.java @@ -29,6 +29,7 @@ public class ServerPing { @@ -246,7 +246,7 @@ index aa125a52dc..ea52e89bd9 100644 this.c = agameprofile; } diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java -index 56f135f244..9c442dee24 100644 +index 0d827815c..062a24c3c 100644 --- a/src/main/java/org/spigotmc/SpigotConfig.java +++ b/src/main/java/org/spigotmc/SpigotConfig.java @@ -290,7 +290,7 @@ public class SpigotConfig @@ -254,7 +254,7 @@ index 56f135f244..9c442dee24 100644 private static void playerSample() { - playerSample = getInt( "settings.sample-count", 12 ); -+ playerSample = Math.max(getInt( "settings.sample-count", 12 ), 0); // Paper - Avoid negative counts ++ playerSample = Math.max( getInt( "settings.sample-count", 12 ), 0 ); // Paper - Avoid negative counts Bukkit.getLogger().log( Level.INFO, "Server Ping Player Sample Count: {0}", playerSample ); // Paper - Use logger } diff --git a/Spigot-Server-Patches/0236-Improved-Async-Task-Scheduler.patch b/Spigot-Server-Patches/0209-Improved-Async-Task-Scheduler.patch similarity index 90% rename from Spigot-Server-Patches/0236-Improved-Async-Task-Scheduler.patch rename to Spigot-Server-Patches/0209-Improved-Async-Task-Scheduler.patch index 4c672fcae8..f653a27b5e 100644 --- a/Spigot-Server-Patches/0236-Improved-Async-Task-Scheduler.patch +++ b/Spigot-Server-Patches/0209-Improved-Async-Task-Scheduler.patch @@ -1,4 +1,4 @@ -From 4d4337136116ff55f4f1f7cc6af8234d7bcdd382 Mon Sep 17 00:00:00 2001 +From c8cbb14ffc51c91d0746aa18089280993e7b0a0b Mon Sep 17 00:00:00 2001 From: Aikar Date: Fri, 16 Mar 2018 22:59:43 -0400 Subject: [PATCH] Improved Async Task Scheduler @@ -32,7 +32,7 @@ operations are decoupled from the sync tasks queue. diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncScheduler.java new file mode 100644 -index 0000000000..3c1992e212 +index 000000000..3c1992e21 --- /dev/null +++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncScheduler.java @@ -0,0 +1,122 @@ @@ -159,18 +159,10 @@ index 0000000000..3c1992e212 + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java -index 3ef79e3e94..3acfc07666 100644 +index 36eecb670..15f165d9b 100644 --- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java +++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java -@@ -17,7 +17,6 @@ import java.util.function.Consumer; - import java.util.logging.Level; - - import co.aikar.timings.MinecraftTimings; // Paper --import com.destroystokyo.paper.ServerSchedulerReportingWrapper; - import com.destroystokyo.paper.event.server.ServerExceptionEvent; - import com.destroystokyo.paper.exception.ServerSchedulerException; - import org.apache.commons.lang.Validate; -@@ -63,7 +62,7 @@ public class CraftScheduler implements BukkitScheduler { +@@ -62,7 +62,7 @@ public class CraftScheduler implements BukkitScheduler { /** * Main thread logic only */ @@ -179,7 +171,7 @@ index 3ef79e3e94..3acfc07666 100644 new Comparator() { public int compare(final CraftTask o1, final CraftTask o2) { int value = Long.compare(o1.getNextRun(), o2.getNextRun()); -@@ -79,21 +78,38 @@ public class CraftScheduler implements BukkitScheduler { +@@ -78,21 +78,38 @@ public class CraftScheduler implements BukkitScheduler { /** * These are tasks that are currently active. It's provided for 'viewing' the current state. */ @@ -223,7 +215,7 @@ index 3ef79e3e94..3acfc07666 100644 @Override public int scheduleSyncDelayedTask(final Plugin plugin, final Runnable task) { return this.scheduleSyncDelayedTask(plugin, task, 0L); -@@ -210,7 +226,7 @@ public class CraftScheduler implements BukkitScheduler { +@@ -209,7 +226,7 @@ public class CraftScheduler implements BukkitScheduler { } else if (period < CraftTask.NO_REPEATING) { period = CraftTask.NO_REPEATING; } @@ -232,7 +224,7 @@ index 3ef79e3e94..3acfc07666 100644 } @Override -@@ -226,6 +242,11 @@ public class CraftScheduler implements BukkitScheduler { +@@ -225,6 +242,11 @@ public class CraftScheduler implements BukkitScheduler { if (taskId <= 0) { return; } @@ -244,7 +236,7 @@ index 3ef79e3e94..3acfc07666 100644 CraftTask task = runners.get(taskId); if (task != null) { task.cancel0(); -@@ -266,6 +287,11 @@ public class CraftScheduler implements BukkitScheduler { +@@ -265,6 +287,11 @@ public class CraftScheduler implements BukkitScheduler { @Override public void cancelTasks(final Plugin plugin) { Validate.notNull(plugin, "Cannot cancel tasks of null plugin"); @@ -256,7 +248,7 @@ index 3ef79e3e94..3acfc07666 100644 final CraftTask task = new CraftTask( new Runnable() { public void run() { -@@ -304,6 +330,13 @@ public class CraftScheduler implements BukkitScheduler { +@@ -303,6 +330,13 @@ public class CraftScheduler implements BukkitScheduler { @Override public boolean isCurrentlyRunning(final int taskId) { @@ -270,7 +262,7 @@ index 3ef79e3e94..3acfc07666 100644 final CraftTask task = runners.get(taskId); if (task == null) { return false; -@@ -322,6 +355,11 @@ public class CraftScheduler implements BukkitScheduler { +@@ -321,6 +355,11 @@ public class CraftScheduler implements BukkitScheduler { if (taskId <= 0) { return false; } @@ -282,7 +274,7 @@ index 3ef79e3e94..3acfc07666 100644 for (CraftTask task = head.getNext(); task != null; task = task.getNext()) { if (task.getTaskId() == taskId) { return task.getPeriod() >= CraftTask.NO_REPEATING; // The task will run -@@ -333,6 +371,12 @@ public class CraftScheduler implements BukkitScheduler { +@@ -332,6 +371,12 @@ public class CraftScheduler implements BukkitScheduler { @Override public List getActiveWorkers() { @@ -295,7 +287,7 @@ index 3ef79e3e94..3acfc07666 100644 final ArrayList workers = new ArrayList(); for (final CraftTask taskObj : runners.values()) { // Iterator will be a best-effort (may fail to grab very new values) if called from an async thread -@@ -370,6 +414,11 @@ public class CraftScheduler implements BukkitScheduler { +@@ -369,6 +414,11 @@ public class CraftScheduler implements BukkitScheduler { pending.add(task); } } @@ -307,7 +299,7 @@ index 3ef79e3e94..3acfc07666 100644 return pending; } -@@ -377,6 +426,11 @@ public class CraftScheduler implements BukkitScheduler { +@@ -376,6 +426,11 @@ public class CraftScheduler implements BukkitScheduler { * This method is designed to never block or wait for locks; an immediate execution of all current tasks. */ public void mainThreadHeartbeat(final int currentTick) { @@ -319,7 +311,7 @@ index 3ef79e3e94..3acfc07666 100644 this.currentTick = currentTick; final List temp = this.temp; parsePending(); -@@ -413,7 +467,7 @@ public class CraftScheduler implements BukkitScheduler { +@@ -412,7 +467,7 @@ public class CraftScheduler implements BukkitScheduler { parsePending(); } else { //debugTail = debugTail.setNext(new CraftAsyncDebugger(currentTick + RECENT_TICKS, task.getOwner(), task.getTaskClass())); // Paper @@ -328,7 +320,7 @@ index 3ef79e3e94..3acfc07666 100644 // We don't need to parse pending // (async tasks must live with race-conditions if they attempt to cancel between these few lines of code) } -@@ -432,7 +486,7 @@ public class CraftScheduler implements BukkitScheduler { +@@ -431,7 +486,7 @@ public class CraftScheduler implements BukkitScheduler { //debugHead = debugHead.getNextHead(currentTick); // Paper } @@ -337,7 +329,7 @@ index 3ef79e3e94..3acfc07666 100644 final AtomicReference tail = this.tail; CraftTask tailTask = tail.get(); while (!tail.compareAndSet(tailTask, task)) { -@@ -441,7 +495,13 @@ public class CraftScheduler implements BukkitScheduler { +@@ -440,7 +495,13 @@ public class CraftScheduler implements BukkitScheduler { tailTask.setNext(task); } @@ -352,7 +344,7 @@ index 3ef79e3e94..3acfc07666 100644 task.setNextRun(currentTick + delay); addTask(task); return task; -@@ -460,8 +520,8 @@ public class CraftScheduler implements BukkitScheduler { +@@ -459,8 +520,8 @@ public class CraftScheduler implements BukkitScheduler { return ids.incrementAndGet(); } @@ -363,7 +355,7 @@ index 3ef79e3e94..3acfc07666 100644 CraftTask head = this.head; CraftTask task = head.getNext(); CraftTask lastTask = head; -@@ -480,7 +540,7 @@ public class CraftScheduler implements BukkitScheduler { +@@ -479,7 +540,7 @@ public class CraftScheduler implements BukkitScheduler { task.setNext(null); } this.head = lastTask; diff --git a/Spigot-Server-Patches/0237-Ability-to-change-PlayerProfile-in-AsyncPreLoginEven.patch b/Spigot-Server-Patches/0210-Ability-to-change-PlayerProfile-in-AsyncPreLoginEven.patch similarity index 92% rename from Spigot-Server-Patches/0237-Ability-to-change-PlayerProfile-in-AsyncPreLoginEven.patch rename to Spigot-Server-Patches/0210-Ability-to-change-PlayerProfile-in-AsyncPreLoginEven.patch index 4cf0859035..10f5b55d09 100644 --- a/Spigot-Server-Patches/0237-Ability-to-change-PlayerProfile-in-AsyncPreLoginEven.patch +++ b/Spigot-Server-Patches/0210-Ability-to-change-PlayerProfile-in-AsyncPreLoginEven.patch @@ -1,4 +1,4 @@ -From 86ea214e8c2c466d1c03fd9460031139d4747478 Mon Sep 17 00:00:00 2001 +From 45679906356d36c89d2031de68f3fb5a3bfb84dc Mon Sep 17 00:00:00 2001 From: Aikar Date: Sun, 18 Mar 2018 11:45:57 -0400 Subject: [PATCH] Ability to change PlayerProfile in AsyncPreLoginEvent @@ -6,7 +6,7 @@ Subject: [PATCH] Ability to change PlayerProfile in AsyncPreLoginEvent This will allow you to change the players name or skin on login. diff --git a/src/main/java/net/minecraft/server/LoginListener.java b/src/main/java/net/minecraft/server/LoginListener.java -index 15c01333e7..da5a7b3e92 100644 +index fe912e0eb..7c3b9c0b9 100644 --- a/src/main/java/net/minecraft/server/LoginListener.java +++ b/src/main/java/net/minecraft/server/LoginListener.java @@ -1,5 +1,7 @@ @@ -25,7 +25,7 @@ index 15c01333e7..da5a7b3e92 100644 import org.bukkit.craftbukkit.util.Waitable; import org.bukkit.event.player.AsyncPlayerPreLoginEvent; import org.bukkit.event.player.PlayerPreLoginEvent; -@@ -279,8 +282,16 @@ public class LoginListener implements PacketLoginInListener, ITickable { +@@ -282,8 +285,16 @@ public class LoginListener implements PacketLoginInListener { java.util.UUID uniqueId = i.getId(); final org.bukkit.craftbukkit.CraftServer server = LoginListener.this.server.server; diff --git a/Spigot-Server-Patches/0238-Call-PortalCreateEvent-for-exit-portals.patch b/Spigot-Server-Patches/0211-Call-PortalCreateEvent-for-exit-portals.patch similarity index 59% rename from Spigot-Server-Patches/0238-Call-PortalCreateEvent-for-exit-portals.patch rename to Spigot-Server-Patches/0211-Call-PortalCreateEvent-for-exit-portals.patch index 10ef931fd6..169f6db649 100644 --- a/Spigot-Server-Patches/0238-Call-PortalCreateEvent-for-exit-portals.patch +++ b/Spigot-Server-Patches/0211-Call-PortalCreateEvent-for-exit-portals.patch @@ -1,48 +1,14 @@ -From 37d51ffa6650f719bef1b2c76e3d612788df1d6f Mon Sep 17 00:00:00 2001 +From 3875cf67129d1cceb03e3c6500121465ad92985c Mon Sep 17 00:00:00 2001 From: MiniDigger Date: Sun, 18 Mar 2018 15:44:44 +0100 Subject: [PATCH] Call PortalCreateEvent for exit portals diff --git a/src/main/java/net/minecraft/server/PortalTravelAgent.java b/src/main/java/net/minecraft/server/PortalTravelAgent.java -index aca4071420..a24bd02d5b 100644 +index e7ca777c1..7807f7c41 100644 --- a/src/main/java/net/minecraft/server/PortalTravelAgent.java +++ b/src/main/java/net/minecraft/server/PortalTravelAgent.java -@@ -48,6 +48,9 @@ public class PortalTravelAgent { - byte b0 = 1; - byte b1 = 0; - -+ java.util.Collection bukkitBlocks = new java.util.HashSet<>(); // Paper -+ java.util.Map nmsBlocks = new java.util.LinkedHashMap<>(); // Paper -+ - for (int l = -2; l <= 2; ++l) { - for (int i1 = -2; i1 <= 2; ++i1) { - for (int j1 = -1; j1 < 3; ++j1) { -@@ -56,11 +59,22 @@ public class PortalTravelAgent { - int i2 = k + i1 * 0 - l * 1; - boolean flag2 = j1 < 0; - -- this.world.setTypeUpdate(new BlockPosition(k1, l1, i2), flag2 ? Blocks.OBSIDIAN.getBlockData() : Blocks.AIR.getBlockData()); -+ // Paper start -+ BlockPosition pos = new BlockPosition(k1, l1, i2); -+ nmsBlocks.put(pos, flag2 ? Blocks.OBSIDIAN.getBlockData() : Blocks.AIR.getBlockData()); -+ bukkitBlocks.add(this.world.getWorld().getBlockAt(pos.getX(), pos.getY(), pos.getZ())); -+ // Paper end - } - } - } - -+ // Paper start -+ org.bukkit.event.world.PortalCreateEvent event = new org.bukkit.event.world.PortalCreateEvent(bukkitBlocks, this.world.getWorld(), org.bukkit.event.world.PortalCreateEvent.CreateReason.OBC_DESTINATION); -+ if (event.callEvent()) { -+ nmsBlocks.forEach(this.world::setTypeUpdate); -+ } -+ // Paper end -+ - // CraftBukkit start - return new BlockPosition(i, k, k); - } -@@ -404,6 +418,9 @@ public class PortalTravelAgent { +@@ -259,6 +259,9 @@ public class PortalTravelAgent { l5 = -l5; } @@ -50,13 +16,13 @@ index aca4071420..a24bd02d5b 100644 + java.util.Map nmsBlocks = new java.util.LinkedHashMap<>(); // Paper + if (d0 < 0.0D) { - i1 = MathHelper.clamp(i1, 70, this.world.ab() - 10); + i1 = MathHelper.clamp(i1, 70, this.world.getHeight() - 10); j5 = i1; -@@ -416,8 +433,11 @@ public class PortalTravelAgent { +@@ -271,8 +274,11 @@ public class PortalTravelAgent { i4 = j2 + (i3 - 1) * l5 - k2 * k5; boolean flag1 = l2 < 0; -- blockposition_mutableblockposition.c(j3, l3, i4); +- blockposition_mutableblockposition.d(j3, l3, i4); - this.world.setTypeUpdate(blockposition_mutableblockposition, flag1 ? Blocks.OBSIDIAN.getBlockData() : Blocks.AIR.getBlockData()); + // Paper start + BlockPosition pos = new BlockPosition(j3, l3, i4); @@ -66,10 +32,10 @@ index aca4071420..a24bd02d5b 100644 } } } -@@ -427,7 +447,11 @@ public class PortalTravelAgent { +@@ -282,7 +288,11 @@ public class PortalTravelAgent { for (i3 = -1; i3 < 4; ++i3) { if (k2 == -1 || k2 == 2 || i3 == -1 || i3 == 3) { - blockposition_mutableblockposition.c(i5 + k2 * k5, j5 + i3, j2 + k2 * l5); + blockposition_mutableblockposition.d(i5 + k2 * k5, j5 + i3, j2 + k2 * l5); - this.world.setTypeAndData(blockposition_mutableblockposition, Blocks.OBSIDIAN.getBlockData(), 3); + // Paper start + BlockPosition pos = new BlockPosition(blockposition_mutableblockposition.getX(), blockposition_mutableblockposition.getY(), blockposition_mutableblockposition.getZ()); @@ -79,10 +45,10 @@ index aca4071420..a24bd02d5b 100644 } } } -@@ -437,10 +461,22 @@ public class PortalTravelAgent { +@@ -292,10 +302,22 @@ public class PortalTravelAgent { for (i3 = 0; i3 < 2; ++i3) { for (l2 = 0; l2 < 3; ++l2) { - blockposition_mutableblockposition.c(i5 + i3 * k5, j5 + l2, j2 + i3 * l5); + blockposition_mutableblockposition.d(i5 + i3 * k5, j5 + l2, j2 + i3 * l5); - this.world.setTypeAndData(blockposition_mutableblockposition, iblockdata, 18); + + // Paper start diff --git a/Spigot-Server-Patches/0239-Player.setPlayerProfile-API.patch b/Spigot-Server-Patches/0212-Player.setPlayerProfile-API.patch similarity index 76% rename from Spigot-Server-Patches/0239-Player.setPlayerProfile-API.patch rename to Spigot-Server-Patches/0212-Player.setPlayerProfile-API.patch index 7e752192d8..65509fb333 100644 --- a/Spigot-Server-Patches/0239-Player.setPlayerProfile-API.patch +++ b/Spigot-Server-Patches/0212-Player.setPlayerProfile-API.patch @@ -1,4 +1,4 @@ -From f4337f8ced9dcb58c32aec67ca2980286cdaa99c Mon Sep 17 00:00:00 2001 +From d8553987531b1251d0d2cc0d7746653a7611d19b Mon Sep 17 00:00:00 2001 From: Aikar Date: Sun, 18 Mar 2018 12:29:48 -0400 Subject: [PATCH] Player.setPlayerProfile API @@ -6,32 +6,32 @@ Subject: [PATCH] Player.setPlayerProfile API This can be useful for changing name or skins after a player has logged in. diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java -index 1640098c35..7f29d12771 100644 +index 58e2601ef..1df83d13a 100644 --- a/src/main/java/net/minecraft/server/EntityHuman.java +++ b/src/main/java/net/minecraft/server/EntityHuman.java -@@ -63,7 +63,7 @@ public abstract class EntityHuman extends EntityLiving { - protected int bZ; - protected float ca = 0.02F; - private int g; -- private final GameProfile h; -+ private GameProfile h; public void setProfile(GameProfile profile) { this.h = profile; } // Paper - OBFHELPER - private ItemStack cd; - private final ItemCooldown ce; +@@ -65,7 +65,7 @@ public abstract class EntityHuman extends EntityLiving { + protected int bR; + protected final float bS = 0.02F; + private int bU; +- private final GameProfile bV; ++ private GameProfile bV; public final void setProfile(final GameProfile profile) { this.bV = profile; } // Paper - OBFHELPER + private ItemStack bX; + private final ItemCooldown bY; @Nullable diff --git a/src/main/java/net/minecraft/server/LoginListener.java b/src/main/java/net/minecraft/server/LoginListener.java -index da5a7b3e92..c5801122dd 100644 +index 7c3b9c0b9..d4d752ddb 100644 --- a/src/main/java/net/minecraft/server/LoginListener.java +++ b/src/main/java/net/minecraft/server/LoginListener.java -@@ -37,7 +37,7 @@ public class LoginListener implements PacketLoginInListener, ITickable { +@@ -37,7 +37,7 @@ public class LoginListener implements PacketLoginInListener { public final NetworkManager networkManager; private LoginListener.EnumProtocolState g; private int h; - private GameProfile i; -+ private GameProfile i; private void setGameProfile(GameProfile profile) { i = profile; } private GameProfile getGameProfile() { return i; } // Paper - OBFHELPER ++ private GameProfile i; private void setGameProfile(final GameProfile profile) { this.i = profile; } private GameProfile getGameProfile() { return this.i; } // Paper - OBFHELPER private final String j; private SecretKey loginKey; private EntityPlayer l; -@@ -283,12 +283,12 @@ public class LoginListener implements PacketLoginInListener, ITickable { +@@ -286,12 +286,12 @@ public class LoginListener implements PacketLoginInListener { final org.bukkit.craftbukkit.CraftServer server = LoginListener.this.server.server; // Paper start @@ -48,7 +48,7 @@ index da5a7b3e92..c5801122dd 100644 uniqueId = i.getId(); // Paper end diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index e6dadde80f..66873e98fe 100644 +index bea3ddf31..1aff6cab9 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -1,6 +1,8 @@ @@ -60,38 +60,37 @@ index e6dadde80f..66873e98fe 100644 import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; import com.google.common.io.BaseEncoding; -@@ -1166,8 +1168,14 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1192,8 +1194,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player { hiddenPlayers.put(player.getUniqueId(), hidingPlugins); // Remove this player from the hidden player's EntityTrackerEntry -- EntityTracker tracker = ((WorldServer) entity.world).tracker; - EntityPlayer other = ((CraftPlayer) player).getHandle(); +- PlayerChunkMap tracker = ((WorldServer) entity.world).getChunkProvider().playerChunkMap; + // Paper start + EntityPlayer other = ((CraftPlayer) player).getHandle(); + unregisterPlayer(other); + } + private void unregisterPlayer(EntityPlayer other) { -+ EntityTracker tracker = ((WorldServer) entity.world).tracker; ++ PlayerChunkMap tracker = ((WorldServer) entity.world).getChunkProvider().playerChunkMap; + // Paper end -+ - EntityTrackerEntry entry = tracker.trackedEntities.get(other.getId()); + PlayerChunkMap.EntityTracker entry = tracker.trackedEntities.get(other.getId()); if (entry != null) { entry.clear(getHandle()); -@@ -1208,8 +1216,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1234,8 +1241,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } hiddenPlayers.remove(player.getUniqueId()); -- EntityTracker tracker = ((WorldServer) entity.world).tracker; +- PlayerChunkMap tracker = ((WorldServer) entity.world).getChunkProvider().playerChunkMap; + // Paper start EntityPlayer other = ((CraftPlayer) player).getHandle(); + registerPlayer(other); + } + private void registerPlayer(EntityPlayer other) { -+ EntityTracker tracker = ((WorldServer) entity.world).tracker; ++ PlayerChunkMap tracker = ((WorldServer) entity.world).getChunkProvider().playerChunkMap; + // Paper end getHandle().playerConnection.sendPacket(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, other)); -@@ -1218,6 +1231,46 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1244,6 +1256,46 @@ public class CraftPlayer extends CraftHumanEntity implements Player { entry.updatePlayer(getHandle()); } } @@ -124,7 +123,7 @@ index e6dadde80f..66873e98fe 100644 + reregisterPlayer(handle); + + //Respawn the player then update their position and selected slot -+ connection.sendPacket(new net.minecraft.server.PacketPlayOutRespawn(handle.dimension, handle.world.getDifficulty(), handle.world.getWorldData().getType(), handle.playerInteractManager.getGameMode())); ++ connection.sendPacket(new net.minecraft.server.PacketPlayOutRespawn(handle.dimension, handle.world.getWorldData().getType(), handle.playerInteractManager.getGameMode())); + handle.updateAbilities(); + connection.sendPacket(new net.minecraft.server.PacketPlayOutPosition(loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch(), new HashSet<>(), 0)); + net.minecraft.server.MinecraftServer.getServer().getPlayerList().updateClient(handle); diff --git a/Spigot-Server-Patches/0240-Fix-Dragon-Server-Crashes.patch b/Spigot-Server-Patches/0213-Fix-Dragon-Server-Crashes.patch similarity index 64% rename from Spigot-Server-Patches/0240-Fix-Dragon-Server-Crashes.patch rename to Spigot-Server-Patches/0213-Fix-Dragon-Server-Crashes.patch index 2a7a4f94e8..e3562a6fa7 100644 --- a/Spigot-Server-Patches/0240-Fix-Dragon-Server-Crashes.patch +++ b/Spigot-Server-Patches/0213-Fix-Dragon-Server-Crashes.patch @@ -1,4 +1,4 @@ -From dae72772a85c9b8252ab9d61ad0996e5b53dd994 Mon Sep 17 00:00:00 2001 +From ffe8cbd067c4fe4f42307a5356a6effdf74d2b94 Mon Sep 17 00:00:00 2001 From: Aikar Date: Wed, 21 Mar 2018 20:52:07 -0400 Subject: [PATCH] Fix Dragon Server Crashes @@ -7,17 +7,17 @@ If the dragon tries to find "ground" and hits a hole, or off edge, it will infinitely keep looking for non air and eventually crash. diff --git a/src/main/java/net/minecraft/server/DragonControllerLandedFlame.java b/src/main/java/net/minecraft/server/DragonControllerLandedFlame.java -index 1180e7bc11..1906bcfc96 100644 +index cfe84f4d4..4ab310cd6 100644 --- a/src/main/java/net/minecraft/server/DragonControllerLandedFlame.java +++ b/src/main/java/net/minecraft/server/DragonControllerLandedFlame.java -@@ -51,7 +51,7 @@ public class DragonControllerLandedFlame extends AbstractDragonControllerLanded - double d2 = this.a.bD.locY + (double) (this.a.bD.length / 2.0F); - BlockPosition.MutableBlockPosition blockposition_mutableblockposition = new BlockPosition.MutableBlockPosition(MathHelper.floor(d0), MathHelper.floor(d2), MathHelper.floor(d1)); +@@ -53,7 +53,7 @@ public class DragonControllerLandedFlame extends AbstractDragonControllerLanded + double d2 = this.a.bA.locY + (double) (this.a.bA.getHeight() / 2.0F); + BlockPosition.MutableBlockPosition blockposition_mutableblockposition = new BlockPosition.MutableBlockPosition(d0, d2, d1); - while (this.a.world.isEmpty(blockposition_mutableblockposition)) { + while (this.a.world.isEmpty(blockposition_mutableblockposition ) && d2 > 0) { // Paper --d2; - blockposition_mutableblockposition.c(MathHelper.floor(d0), MathHelper.floor(d2), MathHelper.floor(d1)); + blockposition_mutableblockposition.c(d0, d2, d1); } -- 2.21.0 diff --git a/Spigot-Server-Patches/0241-getPlayerUniqueId-API.patch b/Spigot-Server-Patches/0214-getPlayerUniqueId-API.patch similarity index 90% rename from Spigot-Server-Patches/0241-getPlayerUniqueId-API.patch rename to Spigot-Server-Patches/0214-getPlayerUniqueId-API.patch index a57db348d9..c7689dfa8f 100644 --- a/Spigot-Server-Patches/0241-getPlayerUniqueId-API.patch +++ b/Spigot-Server-Patches/0214-getPlayerUniqueId-API.patch @@ -1,4 +1,4 @@ -From a15ff921d068b1fd91c7153fb56cf872852d38cf Mon Sep 17 00:00:00 2001 +From 50f2f6e9b61b949b54283000b425ec12b2398ab1 Mon Sep 17 00:00:00 2001 From: Aikar Date: Thu, 22 Mar 2018 01:40:24 -0400 Subject: [PATCH] getPlayerUniqueId API @@ -9,10 +9,10 @@ In Offline Mode, will return an Offline UUID This is a more performant way to obtain a UUID for a name than loading an OfflinePlayer diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 8315f63775..268653acd1 100644 +index 2173f34fe..01ed56a2a 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1417,6 +1417,26 @@ public final class CraftServer implements Server { +@@ -1351,6 +1351,26 @@ public final class CraftServer implements Server { return recipients.size(); } diff --git a/Spigot-Server-Patches/0242-Make-player-data-saving-configurable.patch b/Spigot-Server-Patches/0215-Make-player-data-saving-configurable.patch similarity index 81% rename from Spigot-Server-Patches/0242-Make-player-data-saving-configurable.patch rename to Spigot-Server-Patches/0215-Make-player-data-saving-configurable.patch index 2a1ef107d2..01d345057f 100644 --- a/Spigot-Server-Patches/0242-Make-player-data-saving-configurable.patch +++ b/Spigot-Server-Patches/0215-Make-player-data-saving-configurable.patch @@ -1,14 +1,14 @@ -From 7400a595ae1c233ace959e015b466b112895ecd1 Mon Sep 17 00:00:00 2001 +From d3058492827153f44ddc06e920ba3b6424d59159 Mon Sep 17 00:00:00 2001 From: Mark Vainomaa Date: Mon, 26 Mar 2018 18:30:53 +0300 Subject: [PATCH] Make player data saving configurable diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java -index 2b5dde6d99..b85cd10437 100644 +index a9cf1b8e8..7fba61a6d 100644 --- a/src/main/java/com/destroystokyo/paper/PaperConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java -@@ -291,4 +291,13 @@ public class PaperConfig { +@@ -267,4 +267,13 @@ public class PaperConfig { private static void authenticationServersDownKickMessage() { authenticationServersDownKickMessage = Strings.emptyToNull(getString("messages.kick.authentication-servers-down", authenticationServersDownKickMessage)); } @@ -23,17 +23,17 @@ index 2b5dde6d99..b85cd10437 100644 + } } diff --git a/src/main/java/net/minecraft/server/WorldNBTStorage.java b/src/main/java/net/minecraft/server/WorldNBTStorage.java -index c4173c0aad..d5e21cc33c 100644 +index a0254d8e5..e60e10c57 100644 --- a/src/main/java/net/minecraft/server/WorldNBTStorage.java +++ b/src/main/java/net/minecraft/server/WorldNBTStorage.java -@@ -141,6 +141,7 @@ public class WorldNBTStorage implements IDataManager, IPlayerFileData { - } +@@ -138,6 +138,7 @@ public class WorldNBTStorage implements IPlayerFileData { + @Override public void save(EntityHuman entityhuman) { + if(!com.destroystokyo.paper.PaperConfig.savePlayerData) return; // Paper - Make player data saving configurable try { NBTTagCompound nbttagcompound = entityhuman.save(new NBTTagCompound()); - File file = new File(this.playerDir, entityhuman.bu() + ".dat.tmp"); + File file = new File(this.playerDir, entityhuman.getUniqueIDString() + ".dat.tmp"); -- 2.21.0 diff --git a/Spigot-Server-Patches/0243-Make-legacy-ping-handler-more-reliable.patch b/Spigot-Server-Patches/0216-Make-legacy-ping-handler-more-reliable.patch similarity index 97% rename from Spigot-Server-Patches/0243-Make-legacy-ping-handler-more-reliable.patch rename to Spigot-Server-Patches/0216-Make-legacy-ping-handler-more-reliable.patch index a708699bc2..f4f8775567 100644 --- a/Spigot-Server-Patches/0243-Make-legacy-ping-handler-more-reliable.patch +++ b/Spigot-Server-Patches/0216-Make-legacy-ping-handler-more-reliable.patch @@ -1,4 +1,4 @@ -From 7c84ab3fa1f74dec63abd7d7af1163e1d98f2d73 Mon Sep 17 00:00:00 2001 +From 2d7542f78a2a2e686c4777b782f5ef15576a4ac5 Mon Sep 17 00:00:00 2001 From: Minecrell Date: Wed, 11 Oct 2017 18:22:50 +0200 Subject: [PATCH] Make legacy ping handler more reliable @@ -28,12 +28,12 @@ respond to the request. [2]: https://netty.io/wiki/user-guide-for-4.x.html#wiki-h4-13 diff --git a/src/main/java/net/minecraft/server/LegacyPingHandler.java b/src/main/java/net/minecraft/server/LegacyPingHandler.java -index 204aa82298..2a99f34df6 100644 +index c8c5df7f9..9bc1cce3f 100644 --- a/src/main/java/net/minecraft/server/LegacyPingHandler.java +++ b/src/main/java/net/minecraft/server/LegacyPingHandler.java @@ -14,6 +14,7 @@ public class LegacyPingHandler extends ChannelInboundHandlerAdapter { - private static final Logger a = LogManager.getLogger(); + private static final Logger LOGGER = LogManager.getLogger(); private final ServerConnection b; + private ByteBuf buf; // Paper diff --git a/Spigot-Server-Patches/0223-PreCreatureSpawnEvent.patch b/Spigot-Server-Patches/0223-PreCreatureSpawnEvent.patch deleted file mode 100644 index da9bdd14f5..0000000000 --- a/Spigot-Server-Patches/0223-PreCreatureSpawnEvent.patch +++ /dev/null @@ -1,96 +0,0 @@ -From 4393dd1c81c81419675b7914dbd37b92a34352c0 Mon Sep 17 00:00:00 2001 -From: Aikar -Date: Sun, 14 Jan 2018 17:01:31 -0500 -Subject: [PATCH] PreCreatureSpawnEvent - -Adds an event to fire before an Entity is created, so that plugins that need to cancel -CreatureSpawnEvent can do so from this event instead. - -Cancelling CreatureSpawnEvent rapidly causes a lot of garbage collection and CPU waste -as it's done after the Entity object has been fully created. - -Mob Limiting plugins and blanket "ban this type of monster" plugins should use this event -instead and save a lot of server resources. - -See: https://github.com/PaperMC/Paper/issues/917 - -diff --git a/src/main/java/net/minecraft/server/MobSpawnerAbstract.java b/src/main/java/net/minecraft/server/MobSpawnerAbstract.java -index 027ba71918..eca3f85ad2 100644 ---- a/src/main/java/net/minecraft/server/MobSpawnerAbstract.java -+++ b/src/main/java/net/minecraft/server/MobSpawnerAbstract.java -@@ -1,6 +1,7 @@ - package net.minecraft.server; - - import com.google.common.collect.Lists; -+ - import java.util.Iterator; - import java.util.List; - import javax.annotation.Nullable; -@@ -94,6 +95,28 @@ public abstract class MobSpawnerAbstract { - double d3 = j >= 1 ? nbttaglist.k(0) : (double) blockposition.getX() + (world.random.nextDouble() - world.random.nextDouble()) * (double) this.spawnRange + 0.5D; - double d4 = j >= 2 ? nbttaglist.k(1) : (double) (blockposition.getY() + world.random.nextInt(3) - 1); - double d5 = j >= 3 ? nbttaglist.k(2) : (double) blockposition.getZ() + (world.random.nextDouble() - world.random.nextDouble()) * (double) this.spawnRange + 0.5D; -+ // Paper start -+ if (this.getMobName() == null) { -+ return; -+ } -+ String key = this.getMobName().getKey(); -+ org.bukkit.entity.EntityType type = org.bukkit.entity.EntityType.fromName(key); -+ if (type != null) { -+ com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent event; -+ event = new com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent( -+ MCUtil.toLocation(world, d3, d4, d5), -+ type, -+ org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.SPAWNER -+ ); -+ if (!event.callEvent()) { -+ flag = true; -+ if (event.shouldAbortSpawn()) { -+ break; -+ } -+ continue; -+ } -+ } -+ // Paper end - Entity entity = ChunkRegionLoader.a(nbttagcompound, world, d3, d4, d5, false); - - if (entity == null) { -diff --git a/src/main/java/net/minecraft/server/SpawnerCreature.java b/src/main/java/net/minecraft/server/SpawnerCreature.java -index 2aa0db5c22..b57616960e 100644 ---- a/src/main/java/net/minecraft/server/SpawnerCreature.java -+++ b/src/main/java/net/minecraft/server/SpawnerCreature.java -@@ -164,10 +164,30 @@ public final class SpawnerCreature { - - if (worldserver.a(enumcreaturetype, biomebase_biomemeta, (BlockPosition) blockposition_mutableblockposition)) { - EntityPositionTypes.Surface entitypositiontypes_surface = EntityPositionTypes.a(biomebase_biomemeta.b); -- - if (entitypositiontypes_surface != null && a(entitypositiontypes_surface, worldserver, blockposition_mutableblockposition, biomebase_biomemeta.b)) { - EntityInsentient entityinsentient; - -+ // Paper start -+ com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent event; -+ EntityTypes cls = biomebase_biomemeta.b; -+ org.bukkit.entity.EntityType type = EntityTypes.clsToTypeMap.get(cls); -+ if (type != null) { -+ event = new com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent( -+ MCUtil.toLocation(worldserver, blockposition_mutableblockposition), -+ type, SpawnReason.NATURAL -+ ); -+ if (!event.callEvent()) { -+ if (event.shouldAbortSpawn()) { -+ continue label137; // right above the iterator for c (Chunk Pos Set) -+ } -+ j1 += l2; -+ ++j4; -+ continue; -+ } -+ } -+ // Paper end -+ -+ - try { - entityinsentient = (EntityInsentient) biomebase_biomemeta.b.a((World) worldserver); - } catch (Exception exception) { --- -2.21.0 - diff --git a/Spigot-Server-Patches/0224-PlayerNaturallySpawnCreaturesEvent.patch b/Spigot-Server-Patches/0224-PlayerNaturallySpawnCreaturesEvent.patch deleted file mode 100644 index e23874f86b..0000000000 --- a/Spigot-Server-Patches/0224-PlayerNaturallySpawnCreaturesEvent.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 078b33cbd82794119f8708f500185e745e38c5ba Mon Sep 17 00:00:00 2001 -From: Aikar -Date: Sun, 14 Jan 2018 17:36:02 -0500 -Subject: [PATCH] PlayerNaturallySpawnCreaturesEvent - -This event can be used for when you want to exclude a certain player -from triggering monster spawns on a server. - -Also a highly more effecient way to blanket block spawns in a world - -diff --git a/src/main/java/net/minecraft/server/SpawnerCreature.java b/src/main/java/net/minecraft/server/SpawnerCreature.java -index b57616960e..e626165520 100644 ---- a/src/main/java/net/minecraft/server/SpawnerCreature.java -+++ b/src/main/java/net/minecraft/server/SpawnerCreature.java -@@ -47,6 +47,15 @@ public final class SpawnerCreature { - byte b0 = worldserver.spigotConfig.mobSpawnRange; - b0 = ( b0 > entityhuman.getViewDistance() ) ? (byte) entityhuman.getViewDistance() : b0; // Paper - Use player view distance API - b0 = ( b0 > 8 ) ? 8 : b0; -+ // Paper start -+ com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent event; -+ event = new com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent( -+ (org.bukkit.entity.Player) entityhuman.getBukkitEntity(), b0); -+ if (!event.callEvent()) { -+ continue; -+ } -+ b0 = event.getSpawnRadius(); -+ // Paperr end - - for (int i1 = -b0; i1 <= b0; ++i1) { - for (k = -b0; k <= b0; ++k) { --- -2.21.0 -