From 8cfdd708e9f8d5c3273dca433805d38b5e59a6fa Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sun, 5 May 2019 06:12:32 -0500 Subject: [PATCH] more 1.14 stuffs yay! --- .../Add-more-Zombie-API.patch | 66 ++---- ...event-players-from-moving-into-unloa.patch | 24 +-- Spigot-Server-Patches/Book-Size-Limits.patch | 13 +- .../Call-player-spectator-target-events.patch | 2 +- ...arseException-in-Entity-and-TE-names.patch | 2 +- ...t-allow-digging-into-unloaded-chunks.patch | 4 +- ...-after-profile-lookups-if-not-needed.patch | 2 +- .../Fix-SpongeAbsortEvent-handling.patch | 39 ++-- ...e-Dimension-NBT-field-in-Entity-data.patch | 2 +- .../Improve-death-events.patch | 194 +++++++++--------- ...lid-item-for-enchantment-checks-on-b.patch | 2 +- ...ault-permission-message-configurable.patch | 7 +- .../Optimize-World-Time-Updates.patch | 10 +- .../Optimize-redstone-algorithm.patch | 46 ++--- .../Reset-players-airTicks-on-respawn.patch | 8 +- ...store-custom-InventoryHolder-support.patch | 2 +- ...e-area-unicode-characters-from-signs.patch | 25 +-- .../Use-Vanilla-Minecart-Speeds.patch | 4 +- ...ble-thread-count-default-for-bootstr.patch | 24 +-- ...entity-dismount-during-teleportation.patch | 33 +-- 20 files changed, 241 insertions(+), 268 deletions(-) diff --git a/Spigot-Server-Patches/Add-more-Zombie-API.patch b/Spigot-Server-Patches/Add-more-Zombie-API.patch index 45eac78be3..83af0b7d85 100644 --- a/Spigot-Server-Patches/Add-more-Zombie-API.patch +++ b/Spigot-Server-Patches/Add-more-Zombie-API.patch @@ -5,27 +5,16 @@ Subject: [PATCH] Add more Zombie API diff --git a/src/main/java/net/minecraft/server/EntityZombie.java b/src/main/java/net/minecraft/server/EntityZombie.java -index 81cc0c3b33..24bc3e0f08 100644 +index 92d1cd851..f8baaea03 100644 --- a/src/main/java/net/minecraft/server/EntityZombie.java +++ b/src/main/java/net/minecraft/server/EntityZombie.java @@ -0,0 +0,0 @@ public class EntityZombie extends EntityMonster { - private final AttributeModifier babyModifier = new AttributeModifier(EntityZombie.a, "Baby speed boost", world.paperConfig.babyZombieMovementSpeed, 1); // Paper - Remove static - Make baby speed configurable - private static final DataWatcherObject bC = DataWatcher.a(EntityZombie.class, DataWatcherRegistry.i); - private static final DataWatcherObject bD = DataWatcher.a(EntityZombie.class, DataWatcherRegistry.b); -- private static final DataWatcherObject bE = DataWatcher.a(EntityZombie.class, DataWatcherRegistry.i); -- public static final DataWatcherObject DROWN_CONVERTING = DataWatcher.a(EntityZombie.class, DataWatcherRegistry.i); -+ private static final DataWatcherObject bE = DataWatcher.a(EntityZombie.class, DataWatcherRegistry.i); private static final DataWatcherObject armsRaised = bE; // Paper - OBFHELPER -+ public static final DataWatcherObject DROWN_CONVERTING = DataWatcher.a(EntityZombie.class, DataWatcherRegistry.i); private static final DataWatcherObject drowning = DROWN_CONVERTING; // Paper - OBFHELPER - private final PathfinderGoalBreakDoor bG; - private boolean bH; - private int bI; -@@ -0,0 +0,0 @@ public class EntityZombie extends EntityMonster { - private float bK; - private float bL; + private int bF; + public int drownedConversionTime; private int lastTick = MinecraftServer.currentTick; // CraftBukkit - add field + private boolean shouldBurnInDay = true; // Paper - public EntityZombie(EntityTypes entitytypes, World world) { + public EntityZombie(EntityTypes entitytypes, World world) { super(entitytypes, world); @@ -0,0 +0,0 @@ public class EntityZombie extends EntityMonster { this.getDataWatcher().register(EntityZombie.DROWN_CONVERTING, false); @@ -35,21 +24,6 @@ index 81cc0c3b33..24bc3e0f08 100644 public boolean isDrownConverting() { return (Boolean) this.getDataWatcher().get(EntityZombie.DROWN_CONVERTING); } - -+ public void setArmsRaised(boolean raised) { s(raised); } // Paper - OBFHELPER - public void s(boolean flag) { - this.getDataWatcher().set(EntityZombie.bE, flag); - } - -+ // Paper start -+ public boolean isArmsRaised() { -+ return ((Boolean) this.getDataWatcher().get(EntityZombie.armsRaised)).booleanValue(); -+ } -+ // Paper end -+ - public boolean dH() { - return this.bH; - } @@ -0,0 +0,0 @@ public class EntityZombie extends EntityMonster { this.getDataWatcher().set(EntityZombie.DROWN_CONVERTING, true); } @@ -57,21 +31,21 @@ index 81cc0c3b33..24bc3e0f08 100644 + // Paper start + public void stopDrowning() { + this.drownedConversionTime = -1; -+ this.getDataWatcher().set(EntityZombie.drowning, Boolean.valueOf(false)); ++ this.getDataWatcher().set(EntityZombie.DROWN_CONVERTING, false); + } + // Paper end + - protected void dE() { - this.a((EntityZombie) EntityTypes.DROWNED.create(world)); // Paper + protected void eb() { + this.b(EntityTypes.DROWNED); this.world.a((EntityHuman) null, 1040, new BlockPosition((int) this.locX, (int) this.locY, (int) this.locZ), 0); @@ -0,0 +0,0 @@ public class EntityZombie extends EntityMonster { } } -+ public boolean shouldBurnInDay() { return L_(); } // Paper - OBFHELPER - protected boolean L_() { ++ public boolean shouldBurnInDay() { return J_(); } // Paper - OBFHELPER + protected boolean J_() { - return true; -+ return shouldBurnInDay; // Paper ++ return shouldBurnInDay; } + // Paper start @@ -80,17 +54,17 @@ index 81cc0c3b33..24bc3e0f08 100644 + } + // Paper end + + @Override public boolean damageEntity(DamageSource damagesource, float f) { if (super.damageEntity(damagesource, f)) { - EntityLiving entityliving = this.getGoalTarget(); @@ -0,0 +0,0 @@ public class EntityZombie extends EntityMonster { - nbttagcompound.setBoolean("CanBreakDoors", this.dH()); - nbttagcompound.setInt("InWaterTime", this.isInWater() ? this.bI : -1); + nbttagcompound.setBoolean("CanBreakDoors", this.ef()); + nbttagcompound.setInt("InWaterTime", this.isInWater() ? this.bF : -1); nbttagcompound.setInt("DrownedConversionTime", this.isDrownConverting() ? this.drownedConversionTime : -1); + nbttagcompound.setBoolean("Paper.ShouldBurnInDay", shouldBurnInDay); // Paper } - public void a(NBTTagCompound nbttagcompound) { + @Override @@ -0,0 +0,0 @@ public class EntityZombie extends EntityMonster { if (nbttagcompound.hasKeyOfType("DrownedConversionTime", 99) && nbttagcompound.getInt("DrownedConversionTime") > -1) { this.startDrownedConversion(nbttagcompound.getInt("DrownedConversionTime")); @@ -103,9 +77,9 @@ index 81cc0c3b33..24bc3e0f08 100644 + // Paper end } - public void b(EntityLiving entityliving) { + @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java -index e93ecb076b..c516d34759 100644 +index c28ccd0d9..442befba8 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java @@ -0,0 +0,0 @@ public class CraftZombie extends CraftMonster implements Zombie { @@ -126,14 +100,6 @@ index e93ecb076b..c516d34759 100644 + getHandle().stopDrowning(); + } + -+ public void setArmsRaised(boolean raised) { -+ getHandle().setArmsRaised(raised); -+ } -+ -+ public boolean isArmsRaised() { -+ return getHandle().isArmsRaised(); -+ } -+ + public boolean shouldBurnInDay() { + return getHandle().shouldBurnInDay(); + } diff --git a/Spigot-Server-Patches/Add-option-to-prevent-players-from-moving-into-unloa.patch b/Spigot-Server-Patches/Add-option-to-prevent-players-from-moving-into-unloa.patch index 539322fed4..fdd1a6ffec 100644 --- a/Spigot-Server-Patches/Add-option-to-prevent-players-from-moving-into-unloa.patch +++ b/Spigot-Server-Patches/Add-option-to-prevent-players-from-moving-into-unloa.patch @@ -6,12 +6,12 @@ Subject: [PATCH] Add option to prevent players from moving into unloaded diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -index 2a912286b2..61ad2cef7b 100644 +index fb44fccc9..ad793ffa3 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 { - replacementBlocks = getList("anti-xray.replacement-blocks", Arrays.asList("stone", "planks")); - log("Anti-Xray: " + (antiXray ? "enabled" : "disabled") + " / Engine Mode: " + engineMode.getDescription() + " / Chunk Edge Mode: " + chunkEdgeMode.getDescription() + " / Up to " + ((maxChunkSectionIndex + 1) * 16) + " blocks / Update Radius: " + updateRadius); + this.armorStandTick = this.getBoolean("armor-stands-tick", this.armorStandTick); + log("ArmorStand ticking is " + (this.armorStandTick ? "enabled" : "disabled") + " by default"); } + + public boolean preventMovingIntoUnloadedChunks = false; @@ -20,24 +20,24 @@ index 2a912286b2..61ad2cef7b 100644 + } } diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index 9a96078004..4705dd2c68 100644 +index e59037211..16a7aba49 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 { +@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn { } speed *= 2f; // TODO: Get the speed of the vehicle instead of the player + // Paper start - Prevent moving into unloaded chunks -+ if (player.world.paperConfig.preventMovingIntoUnloadedChunks && !worldserver.isChunkLoaded((int) Math.floor(packetplayinvehiclemove.getX()) >> 4, (int) Math.floor(packetplayinvehiclemove.getZ()) >> 4, false)) { ++ if (player.world.paperConfig.preventMovingIntoUnloadedChunks && !worldserver.isChunkLoaded((int) Math.floor(packetplayinvehiclemove.getX()) >> 4, (int) Math.floor(packetplayinvehiclemove.getZ()) >> 4)) { + this.networkManager.sendPacket(new PacketPlayOutVehicleMove(entity)); + return; + } + // Paper end + - if (d10 - d9 > Math.max(100.0D, Math.pow((double) (org.spigotmc.SpigotConfig.movedTooQuicklyMultiplier * (float) i * speed), 2)) && (!this.minecraftServer.H() || !this.minecraftServer.G().equals(entity.getDisplayName().getString()))) { + if (d10 - d9 > Math.max(100.0D, Math.pow((double) (org.spigotmc.SpigotConfig.movedTooQuicklyMultiplier * (float) i * speed), 2)) && !this.isExemptPlayer()) { // CraftBukkit end PlayerConnection.LOGGER.warn("{} (vehicle of {}) moved too quickly! {},{},{}", entity.getDisplayName().getString(), this.player.getDisplayName().getString(), d6, d7, d8); -@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable { +@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn { double d1 = this.player.locY; double d2 = this.player.locZ; double d3 = this.player.locY; @@ -49,18 +49,18 @@ index 9a96078004..4705dd2c68 100644 float f = packetplayinflying.a(this.player.yaw); float f1 = packetplayinflying.b(this.player.pitch); double d7 = d4 - this.l; -@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable { +@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn { speed = player.abilities.walkSpeed * 10f; } + // Paper start - Prevent moving into unloaded chunks -+ if (player.world.paperConfig.preventMovingIntoUnloadedChunks && (this.player.locX != toX || this.player.locZ != toZ) && !worldserver.isChunkLoaded((int) Math.floor(toX) >> 4, (int) Math.floor(toZ) >> 4, false)) { ++ if (player.world.paperConfig.preventMovingIntoUnloadedChunks && (this.player.locX != toX || this.player.locZ != toZ) && !worldserver.isChunkLoaded((int) Math.floor(toX) >> 4, (int) Math.floor(toZ) >> 4)) { + this.internalTeleport(this.player.locX, this.player.locY, this.player.locZ, this.player.yaw, this.player.pitch, Collections.emptySet()); + return; + } + // Paper end + - if (!this.player.H() && (!this.player.getWorldServer().getGameRules().getBoolean("disableElytraMovementCheck") || !this.player.dc())) { - float f2 = this.player.dc() ? 300.0F : 100.0F; + if (!this.player.H() && (!this.player.getWorldServer().getGameRules().getBoolean("disableElytraMovementCheck") || !this.player.isGliding())) { + float f2 = this.player.isGliding() ? 300.0F : 100.0F; -- \ No newline at end of file diff --git a/Spigot-Server-Patches/Book-Size-Limits.patch b/Spigot-Server-Patches/Book-Size-Limits.patch index cb13f035f8..c753cf9716 100644 --- a/Spigot-Server-Patches/Book-Size-Limits.patch +++ b/Spigot-Server-Patches/Book-Size-Limits.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Book Size Limits Puts some limits on the size of books. diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java -index cac79686d8..c5b8354fa7 100644 +index ee282cb35..3d6101c4d 100644 --- a/src/main/java/com/destroystokyo/paper/PaperConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java @@ -0,0 +0,0 @@ public class PaperConfig { @@ -22,21 +22,20 @@ index cac79686d8..c5b8354fa7 100644 + } } diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index 0467a8feab..5c041c48fa 100644 +index 8d2b02894..15fb7ed60 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java -@@ -0,0 +0,0 @@ import java.util.Collections; - import java.util.Iterator; +@@ -0,0 +0,0 @@ import java.util.Iterator; + import java.util.Optional; import java.util.Set; import javax.annotation.Nullable; -+ +import org.apache.commons.lang3.StringEscapeUtils; import org.apache.commons.lang3.StringUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable { - } +@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn { + @Override public void a(PacketPlayInBEdit packetplayinbedit) { + // Paper start + ItemStack testStack = packetplayinbedit.b(); diff --git a/Spigot-Server-Patches/Call-player-spectator-target-events.patch b/Spigot-Server-Patches/Call-player-spectator-target-events.patch index 18179ae4c6..a7242c6f17 100644 --- a/Spigot-Server-Patches/Call-player-spectator-target-events.patch +++ b/Spigot-Server-Patches/Call-player-spectator-target-events.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Call player spectator target events diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java -index 634c30d93..d34daafda 100644 +index 332515128..8d18c51c9 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java @@ -0,0 +0,0 @@ public class EntityPlayer extends EntityHuman implements ICrafting { diff --git a/Spigot-Server-Patches/Catch-JsonParseException-in-Entity-and-TE-names.patch b/Spigot-Server-Patches/Catch-JsonParseException-in-Entity-and-TE-names.patch index 901b7bb59e..e57c3133d4 100644 --- a/Spigot-Server-Patches/Catch-JsonParseException-in-Entity-and-TE-names.patch +++ b/Spigot-Server-Patches/Catch-JsonParseException-in-Entity-and-TE-names.patch @@ -26,7 +26,7 @@ index 4b7aefb7a..9e568d5d1 100644 if (nbttagcompound.hasKeyOfType("TrackOutput", 1)) { diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 2dfa7d251..98d798abd 100644 +index 03e0e9e26..c9aa5ae16 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -0,0 +0,0 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke diff --git a/Spigot-Server-Patches/Don-t-allow-digging-into-unloaded-chunks.patch b/Spigot-Server-Patches/Don-t-allow-digging-into-unloaded-chunks.patch index 91c9508807..cad5081d79 100644 --- a/Spigot-Server-Patches/Don-t-allow-digging-into-unloaded-chunks.patch +++ b/Spigot-Server-Patches/Don-t-allow-digging-into-unloaded-chunks.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Don't allow digging into unloaded chunks diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index 4705dd2c68..0467a8feab 100644 +index 16a7aba49..8d2b02894 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 { +@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn { case START_DESTROY_BLOCK: case ABORT_DESTROY_BLOCK: case STOP_DESTROY_BLOCK: diff --git a/Spigot-Server-Patches/Don-t-sleep-after-profile-lookups-if-not-needed.patch b/Spigot-Server-Patches/Don-t-sleep-after-profile-lookups-if-not-needed.patch index 3c32659693..83275ab228 100644 --- a/Spigot-Server-Patches/Don-t-sleep-after-profile-lookups-if-not-needed.patch +++ b/Spigot-Server-Patches/Don-t-sleep-after-profile-lookups-if-not-needed.patch @@ -7,7 +7,7 @@ Mojang was sleeping even if we had no more requests to go after the current one finished, resulting in 100ms lost per profile lookup diff --git a/src/main/java/com/mojang/authlib/yggdrasil/YggdrasilGameProfileRepository.java b/src/main/java/com/mojang/authlib/yggdrasil/YggdrasilGameProfileRepository.java -index 71e48e87b4..23f1447cfc 100644 +index 71e48e87b..23f1447cf 100644 --- a/src/main/java/com/mojang/authlib/yggdrasil/YggdrasilGameProfileRepository.java +++ b/src/main/java/com/mojang/authlib/yggdrasil/YggdrasilGameProfileRepository.java @@ -0,0 +0,0 @@ public class YggdrasilGameProfileRepository implements GameProfileRepository { diff --git a/Spigot-Server-Patches/Fix-SpongeAbsortEvent-handling.patch b/Spigot-Server-Patches/Fix-SpongeAbsortEvent-handling.patch index bc2fefb7ec..949e002c8e 100644 --- a/Spigot-Server-Patches/Fix-SpongeAbsortEvent-handling.patch +++ b/Spigot-Server-Patches/Fix-SpongeAbsortEvent-handling.patch @@ -5,38 +5,35 @@ Subject: [PATCH] Fix SpongeAbsortEvent handling Only process drops when the block is actually going to be removed +diff --git a/src/main/java/net/minecraft/server/Block.java b/src/main/java/net/minecraft/server/Block.java +index 549c50de7..5e6609944 100644 +--- a/src/main/java/net/minecraft/server/Block.java ++++ b/src/main/java/net/minecraft/server/Block.java +@@ -0,0 +0,0 @@ public class Block implements IMaterial { + + iblockdata.dropNaturally(world, blockposition, ItemStack.a); + } +- ++ public static void dropNaturally(IBlockData iblockdata, World world, BlockPosition blockposition, @Nullable TileEntity tileentity) { a(iblockdata, world, blockposition, tileentity); } + public static void a(IBlockData iblockdata, World world, BlockPosition blockposition, @Nullable TileEntity tileentity) { + if (world instanceof WorldServer) { + a(iblockdata, (WorldServer) world, blockposition, tileentity).forEach((itemstack) -> { diff --git a/src/main/java/net/minecraft/server/BlockSponge.java b/src/main/java/net/minecraft/server/BlockSponge.java -index cbc8e8d139..cda6f2b732 100644 +index 4e281ce6d..6a64af71b 100644 --- a/src/main/java/net/minecraft/server/BlockSponge.java +++ b/src/main/java/net/minecraft/server/BlockSponge.java @@ -0,0 +0,0 @@ public class BlockSponge extends Block { - } else if (iblockdata.getBlock() instanceof BlockFluids) { // NOP } else if (material == Material.WATER_PLANT || material == Material.REPLACEABLE_WATER_PLANT) { -- iblockdata.a(world, blockposition2, 0); + TileEntity tileentity = iblockdata.getBlock().isTileEntity() ? world.getTileEntity(blockposition2) : null; +- +- a(iblockdata, world, blockposition2, tileentity); + // Paper start + if (block.getHandle().getMaterial() == Material.AIR) { -+ iblockdata.dropNaturally(world, blockposition2, 0); ++ dropNaturally(iblockdata, world, blockposition2, tileentity); + } + // Paper end } } world.setTypeAndData(blockposition2, block.getHandle(), block.getFlag()); -@@ -0,0 +0,0 @@ public class BlockSponge extends Block { - return i > 0; - } - } -+ -diff --git a/src/main/java/net/minecraft/server/IBlockData.java b/src/main/java/net/minecraft/server/IBlockData.java -index 08a5acb0ac..aa3547690a 100644 ---- a/src/main/java/net/minecraft/server/IBlockData.java -+++ b/src/main/java/net/minecraft/server/IBlockData.java -@@ -0,0 +0,0 @@ public interface IBlockData extends IBlockDataHolder { - this.getBlock().a(this, world, blockposition, entity); - } - -+ default void dropNaturally(World world, BlockPosition blockPosition, int i) { a(world, blockPosition, i);} // Paper - OBFHELPER - default void a(World world, BlockPosition blockposition, int i) { - this.dropNaturally(world, blockposition, 1.0F, i); - } -- \ No newline at end of file diff --git a/Spigot-Server-Patches/Ignore-Dimension-NBT-field-in-Entity-data.patch b/Spigot-Server-Patches/Ignore-Dimension-NBT-field-in-Entity-data.patch index 3f0b3e9eef..451a514068 100644 --- a/Spigot-Server-Patches/Ignore-Dimension-NBT-field-in-Entity-data.patch +++ b/Spigot-Server-Patches/Ignore-Dimension-NBT-field-in-Entity-data.patch @@ -14,7 +14,7 @@ DimensionManager set to the world it is being placed into. This fixes corrupt entities breaking chunk saving in custom worlds. diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 98d798abd..f5625fca3 100644 +index c9aa5ae16..464e1d2d9 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -0,0 +0,0 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke diff --git a/Spigot-Server-Patches/Improve-death-events.patch b/Spigot-Server-Patches/Improve-death-events.patch index 27bcca6d5e..45e5c717c1 100644 --- a/Spigot-Server-Patches/Improve-death-events.patch +++ b/Spigot-Server-Patches/Improve-death-events.patch @@ -15,7 +15,7 @@ items and experience which is otherwise only properly possible by using internal code. diff --git a/src/main/java/net/minecraft/server/CombatTracker.java b/src/main/java/net/minecraft/server/CombatTracker.java -index bbd5e2b2a8..19750ceed1 100644 +index 20db76abd..a148cd437 100644 --- a/src/main/java/net/minecraft/server/CombatTracker.java +++ b/src/main/java/net/minecraft/server/CombatTracker.java @@ -0,0 +0,0 @@ public class CombatTracker { @@ -27,7 +27,7 @@ index bbd5e2b2a8..19750ceed1 100644 int i = this.f ? 300 : 100; diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 90e0d9d453..c4d4775627 100644 +index 2dfa7d251..03e0e9e26 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -0,0 +0,0 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke @@ -45,22 +45,14 @@ index 90e0d9d453..c4d4775627 100644 + public void onKill(EntityLiving entityLiving) { this.b(entityLiving); } // Paper - OBFHELPER public void b(EntityLiving entityliving) {} - protected boolean i(double d0, double d1, double d2) { -@@ -0,0 +0,0 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke - return EnumPistonReaction.NORMAL; - } - -+ public SoundCategory getDeathSoundCategory() { return bV();} // Paper - OBFHELPER - public SoundCategory bV() { - return SoundCategory.NEUTRAL; - } + protected void i(double d0, double d1, double d2) { diff --git a/src/main/java/net/minecraft/server/EntityArmorStand.java b/src/main/java/net/minecraft/server/EntityArmorStand.java -index 2c54e3e34a..a5cc5e2842 100644 +index 7031dd0e4..f6dc96434 100644 --- a/src/main/java/net/minecraft/server/EntityArmorStand.java +++ b/src/main/java/net/minecraft/server/EntityArmorStand.java @@ -0,0 +0,0 @@ public class EntityArmorStand extends EntityLiving { - } + @Override public void killEntity() { - org.bukkit.craftbukkit.event.CraftEventFactory.callEntityDeathEvent(this, drops); // CraftBukkit - call event + org.bukkit.event.entity.EntityDeathEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityDeathEvent(this, drops); // CraftBukkit - call event // Paper - make cancellable @@ -69,26 +61,27 @@ index 2c54e3e34a..a5cc5e2842 100644 } diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 6367fdd469..3d1cdd6271 100644 +index 064703afe..bd8385cd5 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity { - public float aU; + public float aN; + public float aO; public EntityHuman killer; - public int lastDamageByPlayerTime; // Paper - public -- protected boolean killed; -+ protected boolean killed; protected void setDying(boolean dying) { this.killed = dying; } protected boolean isDying() { return this.killed; } // Paper - OBFHELPER +- protected int lastDamageByPlayerTime; ++ public int lastDamageByPlayerTime; // Paper - public + protected boolean killed; protected int ticksFarFromPlayer; - protected float aZ; - protected float ba; - protected float bb; - protected float bc; - protected float bd; -- protected int be; -+ protected int be; protected int getKillCount() { return this.be; } // Paper - OBFHELPER + protected float aT; +@@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity { + protected float aV; + protected float aW; + protected float aX; +- protected int aY; ++ protected int aY; protected int getKillCount() { return this.aY; } // Paper - OBFHELPER public float lastDamage; - protected boolean bg; - public float bh; + protected boolean jumping; + public float bb; @@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity { public boolean collides = true; public boolean canPickUpLoot; @@ -100,16 +93,16 @@ index 6367fdd469..3d1cdd6271 100644 @@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity { if (this.getHealth() <= 0.0F) { - if (!this.e(damagesource)) { -- SoundEffect soundeffect = this.cs(); + if (!this.f(damagesource)) { +- SoundEffect soundeffect = this.getSoundDeath(); + // Paper start - moved into CraftEventFactory event caller for cancellable death event -+ //SoundEffect soundeffect = this.cs(); ++ //SoundEffect soundeffect = this.getSoundDeath(); - if (flag1 && soundeffect != null) { -- this.a(soundeffect, this.cD(), this.cE()); +- this.a(soundeffect, this.getSoundVolume(), this.cU()); - } + //if (flag1 && soundeffect != null) { -+ // this.a(soundeffect, this.cD(), this.cE()); ++ // this.a(soundeffect, this.getSoundVolume(), this.cU()); + //} + this.silentDeath = !flag1; // mark entity as dying silently + // Paper end @@ -121,92 +114,105 @@ index 6367fdd469..3d1cdd6271 100644 this.c(damagesource); @@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity { Entity entity = damagesource.getEntity(); - EntityLiving entityliving = this.cv(); + EntityLiving entityliving = this.getKillingEntity(); -- if (this.be >= 0 && entityliving != null) { -- entityliving.a(this, this.be, damagesource); +- if (this.aY >= 0 && entityliving != null) { +- entityliving.a(this, this.aY, damagesource); - } -+ // Paper start - move down to make death event cancellable -+ //if (this.be >= 0 && entityliving != null) { -+ // entityliving.a(this, this.be, damagesource); -+ //} - +- - if (entity != null) { - entity.b(this); - } +- +- if (this.isSleeping()) { +- this.dy(); +- } +- ++ // Paper start - move down to make death event cancellable ++ //if (this.aY >= 0 && entityliving != null) { ++ // entityliving.a(this, this.aY, damagesource); ++ //} ++ // + //if (entity != null) { + // entity.b(this); + //} - ++ // ++ //if (this.isSleeping()) { ++ // this.dy(); ++ //} ++ // this.killed = true; - this.getCombatTracker().g(); + //this.getCombatTracker().g(); -+ -+ org.bukkit.event.entity.EntityDeathEvent deathEvent = null; -+ // Paper end if (!this.world.isClientSide) { - int i = 0; +- this.d(damagesource); ++ org.bukkit.event.entity.EntityDeathEvent deathEvent = this.d(damagesource); ++ if (deathEvent == null || deathEvent.isCancelled()) { ++ if (this.getKillCount() >= 0 && entityliving != null) { ++ entityliving.runKillTrigger(this, this.getKillCount(), damagesource); ++ } ++ if (entity != null) { ++ entity.onKill(this); ++ } ++ if (this.isSleeping()) { ++ this.dy(); ++ } ++ this.getCombatTracker().reset(); ++ } else { ++ this.killed = false; ++ this.setHealth((float) deathEvent.getReviveHealth()); ++ } ++ // Paper end ++ + boolean flag = false; + if (entityliving instanceof EntityWither) { @@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity { - - this.a(flag, i, damagesource); - // CraftBukkit start - Call death event -- CraftEventFactory.callEntityDeathEvent(this, this.drops); -+ deathEvent = CraftEventFactory.callEntityDeathEvent(this, this.drops); // Paper - cancellable death event - this.drops = new ArrayList(); - } else { -- CraftEventFactory.callEntityDeathEvent(this); -+ deathEvent = CraftEventFactory.callEntityDeathEvent(this); // Paper - cancellable death event - // CraftBukkit end - } - } - -- this.world.broadcastEntityEffect(this, (byte) 3); -+ // Paper start - cancellable death event -+ if (deathEvent == null || !deathEvent.isCancelled()) { -+ // triggers and stats got moved down -+ if (this.getKillCount() >= 0 && entityliving != null) { -+ entityliving.runKillTrigger(this, this.getKillCount(), damagesource); -+ } -+ -+ if (entity != null) { -+ entity.onKill(this); -+ } -+ -+ this.getCombatTracker().reset(); -+ this.setDying(true); -+ this.world.broadcastEntityEffect(this, (byte) 3); -+ } else { -+ this.setDying(false); // Paper - reset if cancelled -+ this.setHealth((float) deathEvent.getReviveHealth()); -+ } -+ // Paper end } } +- protected void d(DamageSource damagesource) { ++ protected org.bukkit.event.entity.EntityDeathEvent processDeath(DamageSource damagesource) { return d(damagesource); } ++ protected org.bukkit.event.entity.EntityDeathEvent d(DamageSource damagesource) { // Paper + Entity entity = damagesource.getEntity(); + int i; + @@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity { - return SoundEffects.ENTITY_GENERIC_HURT; + } + + boolean flag = this.lastDamageByPlayerTime > 0; +- ++ org.bukkit.event.entity.EntityDeathEvent deathEvent = null; // Paper + if (this.isDropExperience() && this.world.getGameRules().getBoolean("doMobLoot")) { + this.a(damagesource, flag); + this.dropDeathLoot(damagesource, i, flag); + // CraftBukkit start - Call death event +- CraftEventFactory.callEntityDeathEvent(this, this.drops); +- this.drops = new ArrayList(); ++ deathEvent = CraftEventFactory.callEntityDeathEvent(this, this.drops); // Paper ++ if (!deathEvent.isCancelled()) this.drops = new ArrayList(); // Paper + } else { +- CraftEventFactory.callEntityDeathEvent(this); ++ deathEvent = CraftEventFactory.callEntityDeathEvent(this); // Paper + // CraftBukkit end + } + +- this.cE(); ++ if (!deathEvent.isCancelled()) this.cE(); // Paper ++ return deathEvent; // Paper } -+ @Nullable public SoundEffect getDeathSoundEffect() { return cs();} // Paper - OBFHELPER - @Nullable - protected SoundEffect cs() { - return SoundEffects.ENTITY_GENERIC_DEATH; + protected void cE() {} @@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity { - - } - -+ public float getDeathSoundVolume() { return cD();} // Paper - OBFHELPER - protected float cD() { return 1.0F; } -+ public float getDeathSoundPitch() { return cE();} // Paper - OBFHELPER - protected float cE() { ++ public float getSoundPitch() { return cU();} // Paper - OBFHELPER + protected float cU() { return this.isBaby() ? (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.5F : (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F; } diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java -index dc72538de6..62feadc8af 100644 +index 634c30d93..332515128 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java @@ -0,0 +0,0 @@ public class EntityPlayer extends EntityHuman implements ICrafting { @@ -257,7 +263,7 @@ index dc72538de6..62feadc8af 100644 } } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftSound.java b/src/main/java/org/bukkit/craftbukkit/CraftSound.java -index 17fab031b4..ee8219e3ba 100644 +index 73cb64e09..9f317ff2e 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftSound.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftSound.java @@ -0,0 +0,0 @@ public enum CraftSound { @@ -284,7 +290,7 @@ index 17fab031b4..ee8219e3ba 100644 this.minecraftKey = minecraftKey; } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 7a918ea72f..8d32982c53 100644 +index d505af188..5f752784d 100644 --- a/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 { @@ -305,7 +311,7 @@ index 7a918ea72f..8d32982c53 100644 public void injectScaledMaxHealth(Collection collection, boolean force) { diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index e76862ef49..68e30185a2 100644 +index 50444ed94..46c05c398 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -0,0 +0,0 @@ public class CraftEventFactory { diff --git a/Spigot-Server-Patches/MC-136865-Use-valid-item-for-enchantment-checks-on-b.patch b/Spigot-Server-Patches/MC-136865-Use-valid-item-for-enchantment-checks-on-b.patch index 9d2ef52769..7266f5462e 100644 --- a/Spigot-Server-Patches/MC-136865-Use-valid-item-for-enchantment-checks-on-b.patch +++ b/Spigot-Server-Patches/MC-136865-Use-valid-item-for-enchantment-checks-on-b.patch @@ -13,7 +13,7 @@ keep the clone of the item used to a non empty value so it represents the item used. diff --git a/src/main/java/net/minecraft/server/PlayerInteractManager.java b/src/main/java/net/minecraft/server/PlayerInteractManager.java -index 22378b6bc8..5e595b62e5 100644 +index f692da609..5bc8bd7cd 100644 --- a/src/main/java/net/minecraft/server/PlayerInteractManager.java +++ b/src/main/java/net/minecraft/server/PlayerInteractManager.java @@ -0,0 +0,0 @@ public class PlayerInteractManager { diff --git a/Spigot-Server-Patches/Make-the-default-permission-message-configurable.patch b/Spigot-Server-Patches/Make-the-default-permission-message-configurable.patch index 7be2cc9cdd..fcbf442fce 100644 --- a/Spigot-Server-Patches/Make-the-default-permission-message-configurable.patch +++ b/Spigot-Server-Patches/Make-the-default-permission-message-configurable.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Make the default permission message configurable diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java -index c5b8354fa7..9f240c35d6 100644 +index 3d6101c4d..010d2a796 100644 --- a/src/main/java/com/destroystokyo/paper/PaperConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java @@ -0,0 +0,0 @@ import java.util.regex.Pattern; @@ -29,18 +29,19 @@ index c5b8354fa7..9f240c35d6 100644 private static void savePlayerData() { savePlayerData = getBoolean("settings.save-player-data", savePlayerData); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index af065bd705..9c5b79920f 100644 +index 15756014a..b05d7b0e8 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 { return com.destroystokyo.paper.PaperConfig.suggestPlayersWhenNullTabCompletions; } ++ @Override + public String getPermissionMessage() { + return com.destroystokyo.paper.PaperConfig.noPermissionMessage; + } + + @Override public com.destroystokyo.paper.profile.PlayerProfile createProfile(@Nonnull UUID uuid) { return createProfile(uuid, null); - } -- \ No newline at end of file diff --git a/Spigot-Server-Patches/Optimize-World-Time-Updates.patch b/Spigot-Server-Patches/Optimize-World-Time-Updates.patch index f9a70d7999..31b7dc4e2b 100644 --- a/Spigot-Server-Patches/Optimize-World-Time-Updates.patch +++ b/Spigot-Server-Patches/Optimize-World-Time-Updates.patch @@ -8,12 +8,12 @@ the updates per world, so that we can re-use the same packet object for every player unless they have per-player time enabled. diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 236fbafeb5..ce39ea09e8 100644 +index e6054dddb..e90cf0629 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 +@@ -0,0 +0,0 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant> q = Maps.newEnumMap(ImmutableMap.of(EnumDirection.NORTH, BlockRedstoneWire.NORTH, EnumDirection.EAST, BlockRedstoneWire.EAST, EnumDirection.SOUTH, BlockRedstoneWire.SOUTH, EnumDirection.WEST, BlockRedstoneWire.WEST)); - protected static final VoxelShape[] r = new VoxelShape[] { Block.a(3.0D, 0.0D, 3.0D, 13.0D, 1.0D, 13.0D), Block.a(3.0D, 0.0D, 3.0D, 13.0D, 1.0D, 16.0D), Block.a(0.0D, 0.0D, 3.0D, 13.0D, 1.0D, 13.0D), Block.a(0.0D, 0.0D, 3.0D, 13.0D, 1.0D, 16.0D), Block.a(3.0D, 0.0D, 0.0D, 13.0D, 1.0D, 13.0D), Block.a(3.0D, 0.0D, 0.0D, 13.0D, 1.0D, 16.0D), Block.a(0.0D, 0.0D, 0.0D, 13.0D, 1.0D, 13.0D), Block.a(0.0D, 0.0D, 0.0D, 13.0D, 1.0D, 16.0D), Block.a(3.0D, 0.0D, 3.0D, 16.0D, 1.0D, 13.0D), Block.a(3.0D, 0.0D, 3.0D, 16.0D, 1.0D, 16.0D), Block.a(0.0D, 0.0D, 3.0D, 16.0D, 1.0D, 13.0D), Block.a(0.0D, 0.0D, 3.0D, 16.0D, 1.0D, 16.0D), Block.a(3.0D, 0.0D, 0.0D, 16.0D, 1.0D, 13.0D), Block.a(3.0D, 0.0D, 0.0D, 16.0D, 1.0D, 16.0D), Block.a(0.0D, 0.0D, 0.0D, 16.0D, 1.0D, 13.0D), Block.a(0.0D, 0.0D, 0.0D, 16.0D, 1.0D, 16.0D)}; -+ public boolean canProvidePower() { return this.s; } // Paper - OBFHELPER -+ public void setCanProvidePower(boolean value) { this.s = value; } // Paper - OBFHELPER - private boolean s = true; -+ private Set getBlocksNeedingUpdate() { return this.t; } // Paper - OBFHELPER - private final Set t = Sets.newHashSet(); + public static final BlockStateInteger POWER = BlockProperties.as; + public static final Map> f = Maps.newEnumMap(ImmutableMap.of(EnumDirection.NORTH, BlockRedstoneWire.NORTH, EnumDirection.EAST, BlockRedstoneWire.EAST, EnumDirection.SOUTH, BlockRedstoneWire.SOUTH, EnumDirection.WEST, BlockRedstoneWire.WEST)); + protected static final VoxelShape[] g = new VoxelShape[] { Block.a(3.0D, 0.0D, 3.0D, 13.0D, 1.0D, 13.0D), Block.a(3.0D, 0.0D, 3.0D, 13.0D, 1.0D, 16.0D), Block.a(0.0D, 0.0D, 3.0D, 13.0D, 1.0D, 13.0D), Block.a(0.0D, 0.0D, 3.0D, 13.0D, 1.0D, 16.0D), Block.a(3.0D, 0.0D, 0.0D, 13.0D, 1.0D, 13.0D), Block.a(3.0D, 0.0D, 0.0D, 13.0D, 1.0D, 16.0D), Block.a(0.0D, 0.0D, 0.0D, 13.0D, 1.0D, 13.0D), Block.a(0.0D, 0.0D, 0.0D, 13.0D, 1.0D, 16.0D), Block.a(3.0D, 0.0D, 3.0D, 16.0D, 1.0D, 13.0D), Block.a(3.0D, 0.0D, 3.0D, 16.0D, 1.0D, 16.0D), Block.a(0.0D, 0.0D, 3.0D, 16.0D, 1.0D, 13.0D), Block.a(0.0D, 0.0D, 3.0D, 16.0D, 1.0D, 16.0D), Block.a(3.0D, 0.0D, 0.0D, 16.0D, 1.0D, 13.0D), Block.a(3.0D, 0.0D, 0.0D, 16.0D, 1.0D, 16.0D), Block.a(0.0D, 0.0D, 0.0D, 16.0D, 1.0D, 13.0D), Block.a(0.0D, 0.0D, 0.0D, 16.0D, 1.0D, 16.0D)}; ++ public boolean canProvidePower() { return this.h; } // Paper - OBFHELPER ++ public void setCanProvidePower(boolean value) { this.h = value; } // Paper - OBFHELPER + private boolean h = true; ++ private Set getBlocksNeedingUpdate() { return this.i; } // Paper - OBFHELPER + private final Set i = Sets.newHashSet(); public BlockRedstoneWire(Block.Info block_info) { @@ -0,0 +0,0 @@ public class BlockRedstoneWire extends Block { - return iblockdata1.q() || iblockdata1.getBlock() == Blocks.GLOWSTONE; + return Block.d(iblockdata1, iworldreader, blockposition1, EnumDirection.UP) || iblockdata1.getBlock() == Blocks.HOPPER; } + // Paper start - Optimize redstone @@ -1093,10 +1093,10 @@ index 2e30270bb7..72d2617071 100644 + // Paper end private IBlockData a(World world, BlockPosition blockposition, IBlockData iblockdata) { iblockdata = this.b(world, blockposition, iblockdata); - List list = Lists.newArrayList(this.t); + List list = Lists.newArrayList(this.i); @@ -0,0 +0,0 @@ public class BlockRedstoneWire extends Block { - - public void onPlace(IBlockData iblockdata, World world, BlockPosition blockposition, IBlockData iblockdata1) { + @Override + public void onPlace(IBlockData iblockdata, World world, BlockPosition blockposition, IBlockData iblockdata1, boolean flag) { if (iblockdata1.getBlock() != iblockdata.getBlock() && !world.isClientSide) { - this.a(world, blockposition, iblockdata); + this.updateSurroundingRedstone(world, blockposition, iblockdata, null); // Paper - Optimize redstone @@ -1113,19 +1113,19 @@ index 2e30270bb7..72d2617071 100644 EnumDirection enumdirection1; @@ -0,0 +0,0 @@ public class BlockRedstoneWire extends Block { - public void doPhysics(IBlockData iblockdata, World world, BlockPosition blockposition, Block block, BlockPosition blockposition1) { + public void doPhysics(IBlockData iblockdata, World world, BlockPosition blockposition, Block block, BlockPosition blockposition1, boolean flag) { if (!world.isClientSide) { if (iblockdata.canPlace(world, blockposition)) { - this.a(world, blockposition, iblockdata); + this.updateSurroundingRedstone(world, blockposition, iblockdata, blockposition1); // Paper - Optimize redstone } else { - iblockdata.a(world, blockposition, 0); - world.setAir(blockposition); + c(iblockdata, world, blockposition); + world.a(blockposition, false); diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 027bb64acc..645af17a58 100644 +index c917c39b9..17401ea28 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 IEntityAccess, GeneratorAccess, IIBlockAc +@@ -0,0 +0,0 @@ public abstract class World implements IIBlockAccess, GeneratorAccess, AutoClose } @@ -1133,12 +1133,12 @@ index 027bb64acc..645af17a58 100644 public void a(BlockPosition blockposition, Block block, BlockPosition blockposition1) { if (!this.isClientSide) { IBlockData iblockdata = this.getType(blockposition); -@@ -0,0 +0,0 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc +@@ -0,0 +0,0 @@ public abstract class World implements IIBlockAccess, GeneratorAccess, AutoClose return this.getBlockFacePower(blockposition.down(), EnumDirection.DOWN) > 0 ? true : (this.getBlockFacePower(blockposition.up(), EnumDirection.UP) > 0 ? true : (this.getBlockFacePower(blockposition.north(), EnumDirection.NORTH) > 0 ? true : (this.getBlockFacePower(blockposition.south(), EnumDirection.SOUTH) > 0 ? true : (this.getBlockFacePower(blockposition.west(), EnumDirection.WEST) > 0 ? true : this.getBlockFacePower(blockposition.east(), EnumDirection.EAST) > 0)))); } -+ public int isBlockIndirectlyGettingPowered(BlockPosition pos) { return u(pos); } // Paper - OBFHELPER - public int u(BlockPosition blockposition) { ++ public int isBlockIndirectlyGettingPowered(BlockPosition pos) { return r(pos); } // Paper - OBFHELPER + public int r(BlockPosition blockposition) { int i = 0; EnumDirection[] aenumdirection = World.a; -- \ No newline at end of file diff --git a/Spigot-Server-Patches/Reset-players-airTicks-on-respawn.patch b/Spigot-Server-Patches/Reset-players-airTicks-on-respawn.patch index 5500168f93..ebbdecb00c 100644 --- a/Spigot-Server-Patches/Reset-players-airTicks-on-respawn.patch +++ b/Spigot-Server-Patches/Reset-players-airTicks-on-respawn.patch @@ -5,20 +5,20 @@ Subject: [PATCH] Reset players airTicks on respawn diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index de45e3c7a8..f745ed8fee 100644 +index 464e1d2d9..4bdeba399 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -0,0 +0,0 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke } -- public int bf() { -+ public int getMaxAirTicks() { return bf(); } public int bf() { // Paper - OBF HELPER +- public int bo() { ++ public int getMaxAirTicks() { return bo(); } public int bo() { return 300; } diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java -index f1b7353cf8..5b1bbc7724 100644 +index 8d18c51c9..c71e4dfbe 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java @@ -0,0 +0,0 @@ public class EntityPlayer extends EntityHuman implements ICrafting { diff --git a/Spigot-Server-Patches/Restore-custom-InventoryHolder-support.patch b/Spigot-Server-Patches/Restore-custom-InventoryHolder-support.patch index 1171946a35..c09cf31066 100644 --- a/Spigot-Server-Patches/Restore-custom-InventoryHolder-support.patch +++ b/Spigot-Server-Patches/Restore-custom-InventoryHolder-support.patch @@ -17,7 +17,7 @@ will always work as intended in the past, those without will create implementati based inventories. diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/util/CraftInventoryCreator.java b/src/main/java/org/bukkit/craftbukkit/inventory/util/CraftInventoryCreator.java -index 23389743d5..d25928e094 100644 +index 9957ed040..ae280dd40 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/util/CraftInventoryCreator.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/util/CraftInventoryCreator.java @@ -0,0 +0,0 @@ public final class CraftInventoryCreator { diff --git a/Spigot-Server-Patches/Strip-private-area-unicode-characters-from-signs.patch b/Spigot-Server-Patches/Strip-private-area-unicode-characters-from-signs.patch index 05188f88ee..7a130d3e15 100644 --- a/Spigot-Server-Patches/Strip-private-area-unicode-characters-from-signs.patch +++ b/Spigot-Server-Patches/Strip-private-area-unicode-characters-from-signs.patch @@ -20,12 +20,12 @@ think of no reason to use it. Fixes GH-1571 diff --git a/src/main/java/net/minecraft/server/TileEntitySign.java b/src/main/java/net/minecraft/server/TileEntitySign.java -index 458d1561d0..c2bcbbbab9 100644 +index 9de03a24c..4165c6d11 100644 --- a/src/main/java/net/minecraft/server/TileEntitySign.java +++ b/src/main/java/net/minecraft/server/TileEntitySign.java -@@ -0,0 +0,0 @@ public class TileEntitySign extends TileEntity implements ICommandListener { - private EntityHuman g; - private final String[] h = new String[4]; +@@ -0,0 +0,0 @@ public class TileEntitySign extends TileEntity implements ICommandListener { // + private final String[] k = new String[4]; + private EnumColor l; + // Paper start - Strip invalid unicode from signs on load + private static final boolean keepInvalidUnicode = Boolean.getBoolean("Paper.keepInvalidUnicode"); // Allow people to keep their bad unicode if they really want it @@ -34,11 +34,12 @@ index 458d1561d0..c2bcbbbab9 100644 + public TileEntitySign() { super(TileEntityTypes.SIGN); - } -@@ -0,0 +0,0 @@ public class TileEntitySign extends TileEntity implements ICommandListener { - } + this.l = EnumColor.BLACK; +@@ -0,0 +0,0 @@ public class TileEntitySign extends TileEntity implements ICommandListener { // // CraftBukkit end + nbttagcompound.setString("Color", this.l.b()); ++ + // Paper start - Only remove private area unicode once + if (this.privateUnicodeRemoved) { + nbttagcompound.setBoolean("Paper.RemovedPrivateUnicode", true); @@ -48,9 +49,9 @@ index 458d1561d0..c2bcbbbab9 100644 return nbttagcompound; } -@@ -0,0 +0,0 @@ public class TileEntitySign extends TileEntity implements ICommandListener { - this.isEditable = false; +@@ -0,0 +0,0 @@ public class TileEntitySign extends TileEntity implements ICommandListener { // super.load(nbttagcompound); + this.l = EnumColor.a(nbttagcompound.getString("Color"), EnumColor.BLACK); + // Paper start - Keep track, only do it once per sign + this.privateUnicodeRemoved = nbttagcompound.getBoolean("Paper.RemovedPrivateUnicode"); @@ -60,7 +61,7 @@ index 458d1561d0..c2bcbbbab9 100644 // CraftBukkit start - Add an option to convert signs correctly // This is done with a flag instead of all the time because // we have no way to tell whether a sign is from 1.7.10 or 1.8 -@@ -0,0 +0,0 @@ public class TileEntitySign extends TileEntity implements ICommandListener { +@@ -0,0 +0,0 @@ public class TileEntitySign extends TileEntity implements ICommandListener { // s = "\"\""; } @@ -80,8 +81,8 @@ index 458d1561d0..c2bcbbbab9 100644 try { //IChatBaseComponent ichatbasecomponent = IChatBaseComponent.ChatSerializer.a(s); // Paper - move down - the old format might throw a json error -@@ -0,0 +0,0 @@ public class TileEntitySign extends TileEntity implements ICommandListener { - this.h[i] = null; +@@ -0,0 +0,0 @@ public class TileEntitySign extends TileEntity implements ICommandListener { // + this.k[i] = null; } + if (ranUnicodeRemoval) this.privateUnicodeRemoved = true; // Paper - Flag to write NBT diff --git a/Spigot-Server-Patches/Use-Vanilla-Minecart-Speeds.patch b/Spigot-Server-Patches/Use-Vanilla-Minecart-Speeds.patch index d48da16f30..9ebf49c77d 100644 --- a/Spigot-Server-Patches/Use-Vanilla-Minecart-Speeds.patch +++ b/Spigot-Server-Patches/Use-Vanilla-Minecart-Speeds.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Use Vanilla Minecart Speeds CraftBukkit changed the values on flying speed, restore back to vanilla diff --git a/src/main/java/net/minecraft/server/EntityMinecartAbstract.java b/src/main/java/net/minecraft/server/EntityMinecartAbstract.java -index 0f531e7d42..8e773edc54 100644 +index 6fc332dbf..828a8711d 100644 --- a/src/main/java/net/minecraft/server/EntityMinecartAbstract.java +++ b/src/main/java/net/minecraft/server/EntityMinecartAbstract.java -@@ -0,0 +0,0 @@ public abstract class EntityMinecartAbstract extends Entity implements INamableT +@@ -0,0 +0,0 @@ public abstract class EntityMinecartAbstract extends Entity { private double derailedX = 0.5; private double derailedY = 0.5; private double derailedZ = 0.5; diff --git a/Spigot-Server-Patches/Use-more-reasonable-thread-count-default-for-bootstr.patch b/Spigot-Server-Patches/Use-more-reasonable-thread-count-default-for-bootstr.patch index d0620b7dfd..52e0246e3f 100644 --- a/Spigot-Server-Patches/Use-more-reasonable-thread-count-default-for-bootstr.patch +++ b/Spigot-Server-Patches/Use-more-reasonable-thread-count-default-for-bootstr.patch @@ -4,17 +4,17 @@ Date: Tue, 23 Oct 2018 23:14:38 -0400 Subject: [PATCH] Use more reasonable thread count default for bootstrap -diff --git a/src/main/java/net/minecraft/server/DataConverterRegistry.java b/src/main/java/net/minecraft/server/DataConverterRegistry.java -index ee40bccf63..db9af361d6 100644 ---- a/src/main/java/net/minecraft/server/DataConverterRegistry.java -+++ b/src/main/java/net/minecraft/server/DataConverterRegistry.java -@@ -0,0 +0,0 @@ public class DataConverterRegistry { +diff --git a/src/main/java/net/minecraft/server/SystemUtils.java b/src/main/java/net/minecraft/server/SystemUtils.java +index 706040212..d5d8f7eb8 100644 +--- a/src/main/java/net/minecraft/server/SystemUtils.java ++++ b/src/main/java/net/minecraft/server/SystemUtils.java +@@ -0,0 +0,0 @@ public class SystemUtils { + } - a(datafixerbuilder); - // CraftBukkit start -- ForkJoinPool pool = new ForkJoinPool(Integer.getInteger("net.minecraft.server.DataConverterRegistry.bootstrapThreads", Math.min(Runtime.getRuntime().availableProcessors(), 2))); -+ ForkJoinPool pool = new ForkJoinPool(Integer.getInteger("net.minecraft.server.DataConverterRegistry.bootstrapThreads", Math.min(6, Math.max(Runtime.getRuntime().availableProcessors() - 2, 2)))); // Paper - use more reasonable default - 2 is hard minimum to avoid using unlimited threads - DataFixer fixer = datafixerbuilder.build(pool); - pool.shutdown(); - return fixer; + private static ExecutorService k() { +- int i = MathHelper.clamp(Runtime.getRuntime().availableProcessors() - 1, 1, 7); ++ int i = Math.min(6, Math.max(Runtime.getRuntime().availableProcessors() - 2, 2)); // Paper - use more reasonable default - 2 is hard minimum to avoid using unlimited threads + Object object; + + if (i <= 0) { -- \ No newline at end of file diff --git a/Spigot-Server-Patches/force-entity-dismount-during-teleportation.patch b/Spigot-Server-Patches/force-entity-dismount-during-teleportation.patch index fca070af66..a9375ba0e1 100644 --- a/Spigot-Server-Patches/force-entity-dismount-during-teleportation.patch +++ b/Spigot-Server-Patches/force-entity-dismount-during-teleportation.patch @@ -20,7 +20,7 @@ this is going to be the best soultion all around. Improvements/suggestions welcome! diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index f745ed8fee..a678dc89c8 100644 +index 4bdeba399..dec531ab7 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -0,0 +0,0 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke @@ -72,56 +72,59 @@ index f745ed8fee..a678dc89c8 100644 if (event.isCancelled()) { return false; diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java -index 4bbf577523..f5d9b4abc2 100644 +index f17c1c54b..e811a2917 100644 --- a/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 { return -0.35D; } +- @Override - public void stopRiding() { - super.stopRiding(); + // Paper start -+ public void stopRiding() { stopRiding(false); } -+ public void stopRiding(boolean suppressCancellation) { -+ // Paper end ++ @Override public void stopRiding() { stopRiding(false); } ++ @Override public void stopRiding(boolean suppressCancellation) { ++ // Paper end + super.stopRiding(suppressCancellation); // Paper - suppress - this.k = 0; + this.j = 0; } diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 14f1029687..4d5459d24f 100644 +index bd8385cd5..868b44a4b 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity { - return ((Byte) this.datawatcher.get(EntityLiving.aw) & 4) != 0; + return ((Byte) this.datawatcher.get(EntityLiving.ar) & 4) != 0; } +- @Override - public void stopRiding() { + // Paper start -+ public void stopRiding() { stopRiding(false); } -+ public void stopRiding(boolean suppressCancellation) { ++ @Override public void stopRiding() { stopRiding(false); } ++ @Override public void stopRiding(boolean suppressCancellation) { + // Paper end Entity entity = this.getVehicle(); - super.stopRiding(); + super.stopRiding(suppressCancellation); // Paper - suppress if (entity != null && entity != this.getVehicle() && !this.world.isClientSide) { - this.A(entity); + this.B(entity); } diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java -index 5b1bbc7724..57c6455bd8 100644 +index c71e4dfbe..71ad35f71 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java @@ -0,0 +0,0 @@ public class EntityPlayer extends EntityHuman implements ICrafting { } } +- @Override - public void stopRiding() { + // Paper start -+ public void stopRiding() { stopRiding(false); } -+ public void stopRiding(boolean suppressCancellation) { -+ // paper end ++ @Override public void stopRiding() { stopRiding(false); } ++ @Override public void stopRiding(boolean suppressCancellation) { ++ // paper end Entity entity = this.getVehicle(); - super.stopRiding();