diff --git a/Spigot-Server-Patches/Add-SentientNPC-Interface-to-Entities.patch b/Spigot-Server-Patches/Add-SentientNPC-Interface-to-Entities.patch index 501db244c5..84faabaaca 100644 --- a/Spigot-Server-Patches/Add-SentientNPC-Interface-to-Entities.patch +++ b/Spigot-Server-Patches/Add-SentientNPC-Interface-to-Entities.patch @@ -160,23 +160,4 @@ index 6bf30c834..3768b9573 100644 public CraftSlime(CraftServer server, EntitySlime entity) { super(server, entity); -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWaterMob.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWaterMob.java -index ee21d7b6e..f67dff38f 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWaterMob.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWaterMob.java -@@ -0,0 +0,0 @@ - package org.bukkit.craftbukkit.entity; - -+import com.destroystokyo.paper.entity.CraftSentientNPC; - import net.minecraft.server.EntityWaterAnimal; - - import org.bukkit.craftbukkit.CraftServer; - import org.bukkit.entity.LivingEntity; - import org.bukkit.entity.WaterMob; - --public class CraftWaterMob extends CraftLivingEntity implements WaterMob { -+public class CraftWaterMob extends CraftLivingEntity implements WaterMob, CraftSentientNPC { // Paper - - public CraftWaterMob(CraftServer server, EntityWaterAnimal entity) { - super(server, entity); -- \ No newline at end of file diff --git a/Spigot-Server-Patches/Add-config-to-disable-ender-dragon-legacy-check.patch b/Spigot-Server-Patches/Add-config-to-disable-ender-dragon-legacy-check.patch index deb77c9189..0ca219acf5 100644 --- a/Spigot-Server-Patches/Add-config-to-disable-ender-dragon-legacy-check.patch +++ b/Spigot-Server-Patches/Add-config-to-disable-ender-dragon-legacy-check.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add config to disable ender dragon legacy check diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -index 99ad40fa3..06c54690f 100644 +index 650addb84..b2855f3ca 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 { @@ -19,7 +19,7 @@ index 99ad40fa3..06c54690f 100644 + } } diff --git a/src/main/java/net/minecraft/server/EnderDragonBattle.java b/src/main/java/net/minecraft/server/EnderDragonBattle.java -index ce0dcbc68..286069746 100644 +index a20d54ee3..48bcda0f5 100644 --- a/src/main/java/net/minecraft/server/EnderDragonBattle.java +++ b/src/main/java/net/minecraft/server/EnderDragonBattle.java @@ -0,0 +0,0 @@ public class EnderDragonBattle { @@ -37,7 +37,7 @@ index ce0dcbc68..286069746 100644 private EnumDragonRespawn p; @@ -0,0 +0,0 @@ public class EnderDragonBattle { public EnderDragonBattle(WorldServer worldserver, NBTTagCompound nbttagcompound) { - this.c = (BossBattleServer) (new BossBattleServer(new ChatMessage("entity.EnderDragon.name", new Object[0]), BossBattle.BarColor.PINK, BossBattle.BarStyle.PROGRESS)).setPlayMusic(true).c(true); + this.c = (BossBattleServer) (new BossBattleServer(new ChatMessage("entity.minecraft.ender_dragon", new Object[0]), BossBattle.BarColor.PINK, BossBattle.BarStyle.PROGRESS)).setPlayMusic(true).c(true); this.e = Lists.newArrayList(); - this.n = true; + // Paper start diff --git a/Spigot-Server-Patches/Allow-spawning-Item-entities-with-World.spawnEntity.patch b/Spigot-Server-Patches/Allow-spawning-Item-entities-with-World.spawnEntity.patch index 7e29a379ca..8747174807 100644 --- a/Spigot-Server-Patches/Allow-spawning-Item-entities-with-World.spawnEntity.patch +++ b/Spigot-Server-Patches/Allow-spawning-Item-entities-with-World.spawnEntity.patch @@ -8,7 +8,7 @@ This API has more capabilities than .dropItem with the Consumer function Item can be set inside of the Consumer pre spawn function. diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 36dd8ad60..e88846bb5 100644 +index 3ee663293..65ad8e588 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -0,0 +0,0 @@ public class CraftWorld implements World { diff --git a/Spigot-Server-Patches/Avoid-Chunk-Lookups-for-Entity-TileEntity-Current-Ch.patch b/Spigot-Server-Patches/Avoid-Chunk-Lookups-for-Entity-TileEntity-Current-Ch.patch index f19c72debb..eb97d75404 100644 --- a/Spigot-Server-Patches/Avoid-Chunk-Lookups-for-Entity-TileEntity-Current-Ch.patch +++ b/Spigot-Server-Patches/Avoid-Chunk-Lookups-for-Entity-TileEntity-Current-Ch.patch @@ -10,59 +10,58 @@ to the object directly on the Entity/TileEntity object we can directly grab. Use that local value instead to reduce lookups in many hot places. diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index 3e80825f7..4a94fd5a6 100644 +index 2612d4207..b3cdc0b7d 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java -@@ -0,0 +0,0 @@ public class Chunk { - // Spigot end +@@ -0,0 +0,0 @@ public class Chunk implements IChunkAccess { + ((HeightMap) this.heightMap.get(heightmap_type)).a(along); } + public void removeEntity(Entity entity) { b(entity); } // Paper - OBFHELPER public void b(Entity entity) { - this.a(entity, entity.ac); + this.a(entity, entity.af); } diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index c0816b9f8..52adee880 100644 +index ee061d693..1b9013ab4 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 IBlockAccess { +@@ -0,0 +0,0 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose int j; // Paper start - Set based removal lists - for (Entity e : this.f) { + for (Entity e : this.g) { + /* j = e.getChunkZ(); int k = e.getChunkX(); - if (e.isAddedToChunk() && this.isChunkLoaded(k, j, true)) { + if (e.inChunk && this.isChunkLoaded(k, j, true)) { this.getChunkAt(k, j).b(e); - } + }*/ -+ Chunk chunk = e.isAddedToChunk() ? e.getCurrentChunk() : null; ++ Chunk chunk = e.inChunk ? e.getCurrentChunk() : null; + if (chunk != null) chunk.removeEntity(e); } - for (Entity e : this.f) { -@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess { - this.methodProfiler.b(); + for (Entity e : this.g) { +@@ -0,0 +0,0 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose + this.methodProfiler.e(); this.methodProfiler.a("remove"); if (entity.dead) { + // Paper start + /* - j = entity.ab; - int l = entity.ad; + j = entity.ae; + int l = entity.ag; -- if (entity.aa && this.isChunkLoaded(j, l, true)) { -+ /*if (entity.aa && this.isChunkLoaded(j, l, true)) { + if (entity.inChunk && this.isChunkLoaded(j, l, true)) { this.getChunkAt(j, l).b(entity); - } + }*/ -+ Chunk chunk = entity.isAddedToChunk() ? entity.getCurrentChunk() : null; ++ Chunk chunk = entity.inChunk ? entity.getCurrentChunk() : null; + if (chunk != null) chunk.removeEntity(entity); + // Paper end guardEntityList = false; // Spigot this.entityList.remove(this.tickPosition--); // CraftBukkit - Use field for loop variable -@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess { +@@ -0,0 +0,0 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose BlockPosition blockposition = tileentity.getPosition(); // Paper start - Skip ticking in chunks scheduled for unload @@ -71,7 +70,7 @@ index c0816b9f8..52adee880 100644 boolean shouldTick = chunk != null; if(this.paperConfig.skipEntityTickingInChunksScheduledForUnload) shouldTick = shouldTick && !chunk.isUnloading() && chunk.scheduledForUnload == null; -@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess { +@@ -0,0 +0,0 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose tilesThisCycle--; this.tileEntityListTick.remove(tileTickPosition--); //this.tileEntityList.remove(tileentity); // Paper - remove unused list diff --git a/Spigot-Server-Patches/Cleanup-allocated-favicon-ByteBuf.patch b/Spigot-Server-Patches/Cleanup-allocated-favicon-ByteBuf.patch deleted file mode 100644 index 8860e4e1ef..0000000000 --- a/Spigot-Server-Patches/Cleanup-allocated-favicon-ByteBuf.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Shane Freeder -Date: Tue, 3 Jul 2018 19:14:38 +0100 -Subject: [PATCH] Cleanup allocated favicon ByteBuf - -Cleanups a bytebuffer which was allocated during the encoding of the -favicon to be sent to the client. - -diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index f82e22b23..0399a48e1 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 ICommandListener, Runnable, IAs - - if (file.isFile()) { - ByteBuf bytebuf = Unpooled.buffer(); -+ ByteBuf bytebuf1 = null; // Paper - cleanup favicon bytebuf - - try { - BufferedImage bufferedimage = ImageIO.read(file); -@@ -0,0 +0,0 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs - Validate.validState(bufferedimage.getWidth() == 64, "Must be 64 pixels wide", new Object[0]); - Validate.validState(bufferedimage.getHeight() == 64, "Must be 64 pixels high", new Object[0]); - ImageIO.write(bufferedimage, "PNG", new ByteBufOutputStream(bytebuf)); -- ByteBuf bytebuf1 = Base64.encode(bytebuf); -+ /*ByteBuf */ bytebuf1 = Base64.encode(bytebuf); // Paper - cleanup favicon bytebuf - - serverping.setFavicon("data:image/png;base64," + bytebuf1.toString(StandardCharsets.UTF_8)); - } catch (Exception exception) { - MinecraftServer.LOGGER.error("Couldn\'t load server icon", exception); - } finally { - bytebuf.release(); -+ // Paper start - cleanup favicon bytebuf -+ if (bytebuf1 != null) { -+ bytebuf1.release(); -+ } -+ // Paper end - cleanup favicon bytebuf - } - } - --- \ No newline at end of file diff --git a/Spigot-Server-Patches/Configurable-Alternative-LootPool-Luck-Formula.patch b/Spigot-Server-Patches/Configurable-Alternative-LootPool-Luck-Formula.patch index bbee8849bb..e59224f458 100644 --- a/Spigot-Server-Patches/Configurable-Alternative-LootPool-Luck-Formula.patch +++ b/Spigot-Server-Patches/Configurable-Alternative-LootPool-Luck-Formula.patch @@ -53,7 +53,7 @@ index b602bbf12..62bce1806 100644 + } } diff --git a/src/main/java/net/minecraft/server/LotoSelectorEntry.java b/src/main/java/net/minecraft/server/LotoSelectorEntry.java -index b2860555d..b5544bcf3 100644 +index a540167d6..d8a882191 100644 --- a/src/main/java/net/minecraft/server/LotoSelectorEntry.java +++ b/src/main/java/net/minecraft/server/LotoSelectorEntry.java @@ -0,0 +0,0 @@ import java.util.Random; diff --git a/Spigot-Server-Patches/Configurable-Bed-Search-Radius.patch b/Spigot-Server-Patches/Configurable-Bed-Search-Radius.patch index db32ec9841..14d0689ab3 100644 --- a/Spigot-Server-Patches/Configurable-Bed-Search-Radius.patch +++ b/Spigot-Server-Patches/Configurable-Bed-Search-Radius.patch @@ -10,7 +10,7 @@ player at their bed should it of became obstructed. Defaults to vanilla 1. diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -index 06c54690f..50416f40a 100644 +index b2855f3ca..d30a8ff6c 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 { @@ -30,13 +30,16 @@ index 06c54690f..50416f40a 100644 + } } diff --git a/src/main/java/net/minecraft/server/BlockBed.java b/src/main/java/net/minecraft/server/BlockBed.java -index 9346bddff..f1a107991 100644 +index 6832eaac5..b9cb59fa7 100644 --- a/src/main/java/net/minecraft/server/BlockBed.java +++ b/src/main/java/net/minecraft/server/BlockBed.java @@ -0,0 +0,0 @@ public class BlockBed extends BlockFacingHorizontal implements ITileEntity { + @Nullable - public static BlockPosition a(World world, BlockPosition blockposition, int i) { - EnumDirection enumdirection = (EnumDirection) world.getType(blockposition).get(BlockBed.FACING); + public static BlockPosition a(IBlockAccess iblockaccess, BlockPosition blockposition, int i) { ++ World world = (World) iblockaccess; ++ + EnumDirection enumdirection = (EnumDirection) iblockaccess.getType(blockposition).get(BlockBed.FACING); + // Paper - replace whole method + int radius = world.paperConfig.bedSearchRadius; + for (int r = 1; r <= radius; r++) { @@ -93,10 +96,10 @@ index 9346bddff..f1a107991 100644 + return null;*/ // Paper } -+ protected static boolean isSafeRespawn(World world, BlockPosition blockposition) { // Paper - OBFHELPER + behavior improvement -+ return b(world, blockposition) && world.getType(blockposition.down()).getMaterial().isBuildable(); // Paper - ensure solid block ++ protected static boolean isSafeRespawn(IBlockAccess iblockaccess, BlockPosition blockposition) { // Paper - OBFHELPER + behavior improvement ++ return a(iblockaccess, blockposition) && iblockaccess.getType(blockposition.down()).getMaterial().isBuildable(); // Paper - ensure solid block + } - protected static boolean b(World world, BlockPosition blockposition) { - return world.getType(blockposition.down()).q() && !world.getType(blockposition).getMaterial().isBuildable() && !world.getType(blockposition.up()).getMaterial().isBuildable(); + protected static boolean a(IBlockAccess iblockaccess, BlockPosition blockposition) { + return iblockaccess.getType(blockposition.down()).q() && !iblockaccess.getType(blockposition).getMaterial().isBuildable() && !iblockaccess.getType(blockposition.up()).getMaterial().isBuildable(); } -- \ No newline at end of file diff --git a/Spigot-Server-Patches/Configurable-sprint-interruption-on-attack.patch b/Spigot-Server-Patches/Configurable-sprint-interruption-on-attack.patch index a53b643e0a..b7842d6892 100644 --- a/Spigot-Server-Patches/Configurable-sprint-interruption-on-attack.patch +++ b/Spigot-Server-Patches/Configurable-sprint-interruption-on-attack.patch @@ -19,7 +19,7 @@ index 830b99cd7..87d2dd131 100644 + } } diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java -index 02f5d61c8..fc5263f08 100644 +index 65f4ea6cc..a766a1467 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 { diff --git a/Spigot-Server-Patches/Don-t-load-chunks-for-villager-door-checks.patch b/Spigot-Server-Patches/Don-t-load-chunks-for-villager-door-checks.patch index aa6c36b8e6..7a006f8d5b 100644 --- a/Spigot-Server-Patches/Don-t-load-chunks-for-villager-door-checks.patch +++ b/Spigot-Server-Patches/Don-t-load-chunks-for-villager-door-checks.patch @@ -5,39 +5,20 @@ Subject: [PATCH] Don't load chunks for villager door checks This avoids villages spam loading chunks sync -diff --git a/src/main/java/net/minecraft/server/PersistentVillage.java b/src/main/java/net/minecraft/server/PersistentVillage.java -index 01f7cee38..a3aa9f82e 100644 ---- a/src/main/java/net/minecraft/server/PersistentVillage.java -+++ b/src/main/java/net/minecraft/server/PersistentVillage.java -@@ -0,0 +0,0 @@ public class PersistentVillage extends PersistentBase { - } - - private boolean f(BlockPosition blockposition) { -- IBlockData iblockdata = this.world.getType(blockposition); -+ // Paper start -+ IBlockData iblockdata = this.world.getTypeIfLoaded(blockposition); -+ if (iblockdata == null) { -+ return false; -+ } -+ // Paper end - Block block = iblockdata.getBlock(); - - return block instanceof BlockDoor ? iblockdata.getMaterial() == Material.WOOD : false; diff --git a/src/main/java/net/minecraft/server/Village.java b/src/main/java/net/minecraft/server/Village.java -index 2eb33a986..9f1867ddd 100644 +index dfcabb83a..22fe23e8e 100644 --- a/src/main/java/net/minecraft/server/Village.java +++ b/src/main/java/net/minecraft/server/Village.java @@ -0,0 +0,0 @@ public class Village { - } - private boolean f(BlockPosition blockposition) { -- IBlockData iblockdata = this.a.getType(blockposition); + private boolean g(BlockPosition blockposition) { + IBlockData iblockdata = this.a.getType(blockposition); + // Paper start -+ IBlockData iblockdata = this.a.getTypeIfLoaded(blockposition); -+ if (iblockdata == null) { ++ if (!this.a.isChunkLoaded(blockposition.getX() >> 4, blockposition.getZ() >> 4, true )) { + return false; + } + // Paper end ++ Block block = iblockdata.getBlock(); return block instanceof BlockDoor ? iblockdata.getMaterial() == Material.WOOD : false; diff --git a/Spigot-Server-Patches/Enderman.teleportRandomly.patch b/Spigot-Server-Patches/Enderman.teleportRandomly.patch index 0a27e064ec..fc8467ab80 100644 --- a/Spigot-Server-Patches/Enderman.teleportRandomly.patch +++ b/Spigot-Server-Patches/Enderman.teleportRandomly.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Enderman.teleportRandomly() Ability to trigger the vanilla "teleport randomly" mechanic of an enderman. diff --git a/src/main/java/net/minecraft/server/EntityEnderman.java b/src/main/java/net/minecraft/server/EntityEnderman.java -index a9020083d..a5b517ba9 100644 +index e5eb0189d..df94b4ca9 100644 --- a/src/main/java/net/minecraft/server/EntityEnderman.java +++ b/src/main/java/net/minecraft/server/EntityEnderman.java @@ -0,0 +0,0 @@ public class EntityEnderman extends EntityMonster { diff --git a/Spigot-Server-Patches/EndermanAttackPlayerEvent.patch b/Spigot-Server-Patches/EndermanAttackPlayerEvent.patch index 6768b10812..4712b74597 100644 --- a/Spigot-Server-Patches/EndermanAttackPlayerEvent.patch +++ b/Spigot-Server-Patches/EndermanAttackPlayerEvent.patch @@ -8,7 +8,7 @@ Allow control over whether or not an enderman aggros a player. This allows you to override/extend the pumpkin/stare logic. diff --git a/src/main/java/net/minecraft/server/EntityEnderman.java b/src/main/java/net/minecraft/server/EntityEnderman.java -index 4f8dd320f..2472edfc9 100644 +index df94b4ca9..f2fcba3d9 100644 --- a/src/main/java/net/minecraft/server/EntityEnderman.java +++ b/src/main/java/net/minecraft/server/EntityEnderman.java @@ -0,0 +0,0 @@ public class EntityEnderman extends EntityMonster { @@ -26,5 +26,5 @@ index 4f8dd320f..2472edfc9 100644 + // Paper end ItemStack itemstack = (ItemStack) entityhuman.inventory.armor.get(3); - if (itemstack.getItem() == Item.getItemOf(Blocks.PUMPKIN)) { + if (itemstack.getItem() == Blocks.CARVED_PUMPKIN.getItem()) { -- \ No newline at end of file diff --git a/Spigot-Server-Patches/EndermanEscapeEvent.patch b/Spigot-Server-Patches/EndermanEscapeEvent.patch index b51b2e660a..3fad2bb843 100644 --- a/Spigot-Server-Patches/EndermanEscapeEvent.patch +++ b/Spigot-Server-Patches/EndermanEscapeEvent.patch @@ -8,17 +8,14 @@ Fires an event anytime an enderman intends to teleport away from the player You may cancel this, enabling ranged attacks to damage the enderman for example. diff --git a/src/main/java/net/minecraft/server/EntityEnderman.java b/src/main/java/net/minecraft/server/EntityEnderman.java -index 96e29539b..a9020083d 100644 +index 96e29539b..e5eb0189d 100644 --- a/src/main/java/net/minecraft/server/EntityEnderman.java +++ b/src/main/java/net/minecraft/server/EntityEnderman.java @@ -0,0 +0,0 @@ package net.minecraft.server; import java.util.Optional; -+import com.destroystokyo.paper.event.entity.EndermanEscapeEvent; -+import com.google.common.base.Function; -+import com.google.common.base.Predicate; -+ ++import com.destroystokyo.paper.event.entity.EndermanEscapeEvent; // Paper import java.util.Random; import java.util.UUID; import java.util.function.Function; diff --git a/Spigot-Server-Patches/EntityShootBowEvent-consumeArrow-and-getArrowItem-AP.patch b/Spigot-Server-Patches/EntityShootBowEvent-consumeArrow-and-getArrowItem-AP.patch index 52d266b0b6..c811624e4d 100644 --- a/Spigot-Server-Patches/EntityShootBowEvent-consumeArrow-and-getArrowItem-AP.patch +++ b/Spigot-Server-Patches/EntityShootBowEvent-consumeArrow-and-getArrowItem-AP.patch @@ -6,7 +6,7 @@ Subject: [PATCH] EntityShootBowEvent consumeArrow and getArrowItem API Adds ability to get what arrow was shot, and control if it should be consumed. diff --git a/src/main/java/net/minecraft/server/EntitySkeletonAbstract.java b/src/main/java/net/minecraft/server/EntitySkeletonAbstract.java -index b92cf8e62..8f4b63c8d 100644 +index c2bc8060a..1ae967d1c 100644 --- a/src/main/java/net/minecraft/server/EntitySkeletonAbstract.java +++ b/src/main/java/net/minecraft/server/EntitySkeletonAbstract.java @@ -0,0 +0,0 @@ public abstract class EntitySkeletonAbstract extends EntityMonster implements IR @@ -19,7 +19,7 @@ index b92cf8e62..8f4b63c8d 100644 event.getProjectile().remove(); return; diff --git a/src/main/java/net/minecraft/server/ItemBow.java b/src/main/java/net/minecraft/server/ItemBow.java -index e943f8054..327d31e19 100644 +index 4aa3b6249..c8fc18045 100644 --- a/src/main/java/net/minecraft/server/ItemBow.java +++ b/src/main/java/net/minecraft/server/ItemBow.java @@ -0,0 +0,0 @@ public class ItemBow extends Item { @@ -51,14 +51,14 @@ index e943f8054..327d31e19 100644 @@ -0,0 +0,0 @@ public class ItemBow extends Item { } - world.a((EntityHuman) null, entityhuman.locX, entityhuman.locY, entityhuman.locZ, SoundEffects.w, SoundCategory.PLAYERS, 1.0F, 1.0F / (ItemBow.j.nextFloat() * 0.4F + 1.2F) + f * 0.5F); + world.a((EntityHuman) null, entityhuman.locX, entityhuman.locY, entityhuman.locZ, SoundEffects.ENTITY_ARROW_SHOOT, SoundCategory.PLAYERS, 1.0F, 1.0F / (ItemBow.k.nextFloat() * 0.4F + 1.2F) + f * 0.5F); - if (!flag1 && !entityhuman.abilities.canInstantlyBuild) { + if (!flag1 && !entityhuman.abilities.canInstantlyBuild && consumeArrow) { // Paper itemstack1.subtract(1); if (itemstack1.isEmpty()) { entityhuman.inventory.f(itemstack1); diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 5f816e44f..9b19c055d 100644 +index 3f9a66002..77973c1e8 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/Expand-Explosions-API.patch b/Spigot-Server-Patches/Expand-Explosions-API.patch index ea863ce2f0..feb26a7b8c 100644 --- a/Spigot-Server-Patches/Expand-Explosions-API.patch +++ b/Spigot-Server-Patches/Expand-Explosions-API.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Expand Explosions API Add Entity as a Source capability, and add more API choices, and on Location. diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index e88846bb5..e2da30d88 100644 +index 65ad8e588..0640ca094 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -0,0 +0,0 @@ public class CraftWorld implements World { diff --git a/Spigot-Server-Patches/Expand-World.spawnParticle-API-and-add-Builder.patch b/Spigot-Server-Patches/Expand-World.spawnParticle-API-and-add-Builder.patch index 120b04cd15..6995e40531 100644 --- a/Spigot-Server-Patches/Expand-World.spawnParticle-API-and-add-Builder.patch +++ b/Spigot-Server-Patches/Expand-World.spawnParticle-API-and-add-Builder.patch @@ -9,31 +9,35 @@ the standard API is to send the packet to everyone in the world, which is ineffe This adds a new Builder API which is much friendlier to use. diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java -index c06158e02..49019d54d 100644 +index c5da2cde3..4ac2d39c5 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java @@ -0,0 +0,0 @@ public class WorldServer extends World implements IAsyncTaskHandler { - sendParticles(null, enumparticle, flag, d0, d1, d2, i, d3, d4, d5, d6, aint); + // CraftBukkit - visibility api support + return sendParticles(null, t0, d0, d1, d2, i, d3, d4, d5, d6); } - +- + // Paper start - Particle API Expansion - public void sendParticles(EntityPlayer sender, EnumParticle enumparticle, boolean flag, double d0, double d1, double d2, int i, double d3, double d4, double d5, double d6, int... aint) { -+ sendParticles(this.players, sender, enumparticle, flag, d0, d1, d2, i, d3, d4, d5, d6, aint); ++ // TODO: rework this, "flag" should probably be exposed as it was before + public int sendParticles(EntityPlayer sender, T t0, double d0, double d1, double d2, int i, double d3, double d4, double d5, double d6) { ++ return sendParticles(this.players, sender, t0, d0, d1, d2, i, d3, d5, d5, d6); + } -+ public void sendParticles(List receivers, EntityPlayer sender, EnumParticle enumparticle, boolean flag, double d0, double d1, double d2, int i, double d3, double d4, double d5, double d6, int... aint) { ++ ++ public int sendParticles(List receivers, EntityPlayer sender, T t0, double d0, double d1, double d2, int i, double d3, double d4, double d5, double d6) { + // Paper end // CraftBukkit end - PacketPlayOutWorldParticles packetplayoutworldparticles = new PacketPlayOutWorldParticles(enumparticle, flag, (float) d0, (float) d1, (float) d2, (float) d3, (float) d4, (float) d5, (float) d6, i, aint); + PacketPlayOutWorldParticles packetplayoutworldparticles = new PacketPlayOutWorldParticles(t0, false, (float) d0, (float) d1, (float) d2, (float) d3, (float) d4, (float) d5, (float) d6, i); + int j = 0; -- for (int j = 0; j < this.players.size(); ++j) { -- EntityPlayer entityplayer = (EntityPlayer) this.players.get(j); +- for (int k = 0; k < this.players.size(); ++k) { +- EntityPlayer entityplayer = (EntityPlayer) this.players.get(k); + for (EntityHuman entityhuman : receivers) { // Paper - Particle API Expansion + EntityPlayer entityplayer = (EntityPlayer) entityhuman; // Paper - Particle API Expansion if (sender != null && !entityplayer.getBukkitEntity().canSee(sender.getBukkitEntity())) continue; // CraftBukkit - BlockPosition blockposition = entityplayer.getChunkCoordinates(); - double d7 = blockposition.distanceSquared(d0, d1, d2); + + if (this.a(entityplayer, false, d0, d1, d2, packetplayoutworldparticles)) { diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 568a50ec4..36dd8ad60 100644 +index 817e29474..3ee663293 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -0,0 +0,0 @@ public class CraftWorld implements World { @@ -41,6 +45,7 @@ index 568a50ec4..36dd8ad60 100644 } + // Paper start - Particle API Expansion ++ // TODO: Add back extended? @Override - public void spawnParticle(Particle particle, double x, double y, double z, int count, double offsetX, double offsetY, double offsetZ, double extra, T data) { + public void spawnParticle(Particle particle, List receivers, Player sender, double x, double y, double z, int count, double offsetX, double offsetY, double offsetZ, double extra, T data) { @@ -52,7 +57,7 @@ index 568a50ec4..36dd8ad60 100644 - null, // Sender + receivers == null ? getHandle().players : receivers.stream().map(player -> ((CraftPlayer) player).getHandle()).collect(java.util.stream.Collectors.toList()), // Paper - Particle API Expansion + sender != null ? ((CraftPlayer) sender).getHandle() : null, // Sender // Paper - Particle API Expansion - CraftParticle.toNMS(particle), // Particle - true, // Extended range + CraftParticle.toNMS(particle, data), // Particle x, y, z, // Position + count, // Count -- \ No newline at end of file diff --git a/Spigot-Server-Patches/Fire-EntityShootBowEvent-for-Illusioner.patch b/Spigot-Server-Patches/Fire-EntityShootBowEvent-for-Illusioner.patch index 9c87cee148..c357141d8d 100644 --- a/Spigot-Server-Patches/Fire-EntityShootBowEvent-for-Illusioner.patch +++ b/Spigot-Server-Patches/Fire-EntityShootBowEvent-for-Illusioner.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Fire EntityShootBowEvent for Illusioner diff --git a/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java b/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java -index e03650448..ad81bd059 100644 +index d03fa6318..16c3be42e 100644 --- a/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java +++ b/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java @@ -0,0 +0,0 @@ public class EntityIllagerIllusioner extends EntityIllagerWizard implements IRan @@ -22,10 +22,10 @@ index e03650448..ad81bd059 100644 + if (event.getProjectile() == entityarrow.getBukkitEntity()) { + this.world.addEntity(entityarrow); + } - this.a(SoundEffects.gW, 1.0F, 1.0F / (this.getRandom().nextFloat() * 0.4F + 0.8F)); + this.a(SoundEffects.ENTITY_SKELETON_SHOOT, 1.0F, 1.0F / (this.getRandom().nextFloat() * 0.4F + 0.8F)); - this.world.addEntity(entityarrow); + // Paper end } - protected EntityArrow r(float f) { + protected EntityArrow v(float f) { -- \ No newline at end of file diff --git a/Spigot-Server-Patches/Fix-CraftEntity-hashCode.patch b/Spigot-Server-Patches/Fix-CraftEntity-hashCode.patch index 8dc73385a8..1f876b6e22 100644 --- a/Spigot-Server-Patches/Fix-CraftEntity-hashCode.patch +++ b/Spigot-Server-Patches/Fix-CraftEntity-hashCode.patch @@ -21,7 +21,7 @@ check is essentially the same as this.getHandle() == other.getHandle() However, replaced it too to make it clearer of intent. diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index bf7e6ed3f..47edc0494 100644 +index 6d4dc539c..7da6a25f1 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -0,0 +0,0 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { diff --git a/Spigot-Server-Patches/Ignore-Missing-Recipes-in-RecipeBook-to-avoid-data-e.patch b/Spigot-Server-Patches/Ignore-Missing-Recipes-in-RecipeBook-to-avoid-data-e.patch index 7308494e82..32f57fa2b4 100644 --- a/Spigot-Server-Patches/Ignore-Missing-Recipes-in-RecipeBook-to-avoid-data-e.patch +++ b/Spigot-Server-Patches/Ignore-Missing-Recipes-in-RecipeBook-to-avoid-data-e.patch @@ -6,36 +6,32 @@ Subject: [PATCH] Ignore Missing Recipes in RecipeBook to avoid data errors This code was causing NPE's in saving player data, potentially related to reloads. diff --git a/src/main/java/net/minecraft/server/RecipeBookServer.java b/src/main/java/net/minecraft/server/RecipeBookServer.java -index 7eecdc9da..f65e74ebd 100644 +index 71d6c4552..893f67094 100644 --- a/src/main/java/net/minecraft/server/RecipeBookServer.java +++ b/src/main/java/net/minecraft/server/RecipeBookServer.java @@ -0,0 +0,0 @@ public class RecipeBookServer extends RecipeBook { while (iterator.hasNext()) { - IRecipe irecipe = (IRecipe) iterator.next(); + MinecraftKey minecraftkey = (MinecraftKey) iterator.next(); -- nbttaglist.add(new NBTTagString(((MinecraftKey) CraftingManager.recipes.b(irecipe)).toString())); +- nbttaglist.add((NBTBase) (new NBTTagString(minecraftkey.toString()))); + // Paper start - ignore missing recipes -+ MinecraftKey key = CraftingManager.recipes.b(irecipe); -+ if (key == null) continue; -+ nbttaglist.add(new NBTTagString(key.toString())); ++ IRecipe recipe = this.h.a(minecraftkey); ++ if (recipe == null) continue; ++ nbttaglist.add(new NBTTagString(minecraftkey.toString())) + // Paper end } nbttagcompound.set("recipes", nbttaglist); @@ -0,0 +0,0 @@ public class RecipeBookServer extends RecipeBook { - Iterator iterator1 = this.e().iterator(); - while (iterator1.hasNext()) { -- IRecipe irecipe1 = (IRecipe) iterator1.next(); -+ // Paper start - ignore missing recipes -+ IRecipe irecipe = (IRecipe) iterator1.next(); + MinecraftKey minecraftkey1 = (MinecraftKey) iterator1.next(); -- nbttaglist1.add(new NBTTagString(((MinecraftKey) CraftingManager.recipes.b(irecipe1)).toString())); -+ MinecraftKey key = CraftingManager.recipes.b(irecipe); -+ if (key == null) continue; -+ nbttaglist1.add(new NBTTagString(key.toString())); ++ // Paper start - ignore missing recipes ++ IRecipe recipe = this.h.a(minecraftkey1); ++ if (recipe == null) continue; + // Paper end ++ + nbttaglist1.add((NBTBase) (new NBTTagString(minecraftkey1.toString()))); } - nbttagcompound.set("toBeDisplayed", nbttaglist1); -- \ No newline at end of file diff --git a/Spigot-Server-Patches/Implement-EntityKnockbackByEntityEvent.patch b/Spigot-Server-Patches/Implement-EntityKnockbackByEntityEvent.patch index 8656aab515..a86bc3dd84 100644 --- a/Spigot-Server-Patches/Implement-EntityKnockbackByEntityEvent.patch +++ b/Spigot-Server-Patches/Implement-EntityKnockbackByEntityEvent.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Implement EntityKnockbackByEntityEvent This event is called when an entity receives knockback by another entity. diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 65bc19b17..156bf8ee0 100644 +index 1932d38a8..1d7b9c525 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 { diff --git a/Spigot-Server-Patches/Implement-EntityTeleportEndGatewayEvent.patch b/Spigot-Server-Patches/Implement-EntityTeleportEndGatewayEvent.patch index 59c0553db7..f57eceaaaf 100644 --- a/Spigot-Server-Patches/Implement-EntityTeleportEndGatewayEvent.patch +++ b/Spigot-Server-Patches/Implement-EntityTeleportEndGatewayEvent.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Implement EntityTeleportEndGatewayEvent diff --git a/src/main/java/net/minecraft/server/TileEntityEndGateway.java b/src/main/java/net/minecraft/server/TileEntityEndGateway.java -index ecbc48b0c..557f06017 100644 +index c3d30dc94..fd9be7574 100644 --- a/src/main/java/net/minecraft/server/TileEntityEndGateway.java +++ b/src/main/java/net/minecraft/server/TileEntityEndGateway.java @@ -0,0 +0,0 @@ public class TileEntityEndGateway extends TileEntityEnderPortal implements ITick @@ -28,5 +28,5 @@ index ecbc48b0c..557f06017 100644 + // Paper end - EntityTeleportEndGatewayEvent } - this.h(); + this.f(); -- \ No newline at end of file diff --git a/Spigot-Server-Patches/Implement-World.getEntity-UUID-API.patch b/Spigot-Server-Patches/Implement-World.getEntity-UUID-API.patch index 704ddbda8e..5fa2786672 100644 --- a/Spigot-Server-Patches/Implement-World.getEntity-UUID-API.patch +++ b/Spigot-Server-Patches/Implement-World.getEntity-UUID-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Implement World.getEntity(UUID) API diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index e2da30d88..210e3bc4e 100644 +index 0640ca094..6705864a7 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -0,0 +0,0 @@ public class CraftWorld implements World { diff --git a/Spigot-Server-Patches/Improve-ProjectileHitEvent-to-include-the-BlockFace-.patch b/Spigot-Server-Patches/Improve-ProjectileHitEvent-to-include-the-BlockFace-.patch index 6aa4ca7209..f0cbacf3a5 100644 --- a/Spigot-Server-Patches/Improve-ProjectileHitEvent-to-include-the-BlockFace-.patch +++ b/Spigot-Server-Patches/Improve-ProjectileHitEvent-to-include-the-BlockFace-.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Improve ProjectileHitEvent to include the BlockFace where the diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 9b19c055d..248873fb4 100644 +index 77973c1e8..c129e8629 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/InventoryCloseEvent-Reason-API.patch b/Spigot-Server-Patches/InventoryCloseEvent-Reason-API.patch index 4be14de8b1..6e0c2f4b66 100644 --- a/Spigot-Server-Patches/InventoryCloseEvent-Reason-API.patch +++ b/Spigot-Server-Patches/InventoryCloseEvent-Reason-API.patch @@ -7,10 +7,10 @@ Allows you to determine why an inventory was closed, enabling plugin developers to "confirm" things based on if it was player triggered close or not. diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index 8c96e7318..3e80825f7 100644 +index f31524eb0..2612d4207 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java -@@ -0,0 +0,0 @@ public class Chunk { +@@ -0,0 +0,0 @@ public class Chunk implements IChunkAccess { { if ( h instanceof org.bukkit.craftbukkit.entity.CraftHumanEntity ) { @@ -19,7 +19,7 @@ index 8c96e7318..3e80825f7 100644 } } } -@@ -0,0 +0,0 @@ public class Chunk { +@@ -0,0 +0,0 @@ public class Chunk implements IChunkAccess { { if ( h instanceof org.bukkit.craftbukkit.entity.CraftHumanEntity ) { @@ -29,12 +29,12 @@ index 8c96e7318..3e80825f7 100644 } } diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java -index 0b51903e2..aa0b27f0e 100644 +index a766a1467..cbf663573 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 { - - super.B_(); + this.df(); + super.tick(); if (!this.world.isClientSide && this.activeContainer != null && !this.activeContainer.canUse(this)) { - this.closeInventory(); + this.closeInventory(org.bukkit.event.inventory.InventoryCloseEvent.Reason.CANT_USE); // Paper @@ -56,7 +56,7 @@ index 0b51903e2..aa0b27f0e 100644 this.activeContainer = this.defaultContainer; } diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java -index cce3f98da..4ff505cfa 100644 +index c91caf578..59dc239b8 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 { @@ -78,7 +78,7 @@ index cce3f98da..4ff505cfa 100644 // CraftBukkit end @@ -0,0 +0,0 @@ public class EntityPlayer extends EntityHuman implements ICrafting { - this.a((new ChatMessage("container.spectatorCantOpen", new Object[0])).setChatModifier((new ChatModifier()).setColor(EnumChatFormat.RED)), true); + this.a((new ChatMessage("container.spectatorCantOpen", new Object[0])).a(EnumChatFormat.RED), true); } else { if (this.activeContainer != this.defaultContainer) { - this.closeInventory(); @@ -107,27 +107,27 @@ index cce3f98da..4ff505cfa 100644 + CraftEventFactory.handleInventoryCloseEvent(this, reason); // CraftBukkit + // Paper end this.playerConnection.sendPacket(new PacketPlayOutCloseWindow(this.activeContainer.windowId)); - this.r(); + this.m(); } diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index 36833b961..a54203c56 100644 +index 5fe01e7ef..4ed107eac 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 { - PlayerConnectionUtils.ensureMainThread(packetplayinclosewindow, this, this.player.x()); + PlayerConnectionUtils.ensureMainThread(packetplayinclosewindow, this, this.player.getWorldServer()); if (this.player.isFrozen()) return; // CraftBukkit - CraftEventFactory.handleInventoryCloseEvent(this.player); // CraftBukkit + CraftEventFactory.handleInventoryCloseEvent(this.player, org.bukkit.event.inventory.InventoryCloseEvent.Reason.PLAYER); // CraftBukkit // Paper - this.player.r(); + this.player.m(); } diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java -index b478f385a..eaaa54acd 100644 +index c1de6564a..d397c6c74 100644 --- a/src/main/java/net/minecraft/server/PlayerList.java +++ b/src/main/java/net/minecraft/server/PlayerList.java @@ -0,0 +0,0 @@ public abstract class PlayerList { - entityplayer.b(StatisticList.f); + entityplayer.a(StatisticList.LEAVE_GAME); // CraftBukkit start - Quitting must be before we do final save of data, in case plugins need to modify it - org.bukkit.craftbukkit.event.CraftEventFactory.handleInventoryCloseEvent(entityplayer); @@ -136,7 +136,7 @@ index b478f385a..eaaa54acd 100644 PlayerQuitEvent playerQuitEvent = new PlayerQuitEvent(cserver.getPlayer(entityplayer), "\u00A7e" + entityplayer.getName() + " left the game"); cserver.getPluginManager().callEvent(playerQuitEvent); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java -index d85b5defc..05ca403e8 100644 +index 4b9ecb4a6..b602a5d1b 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java @@ -0,0 +0,0 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity { @@ -155,7 +155,7 @@ index d85b5defc..05ca403e8 100644 public boolean isBlocking() { return getHandle().isBlocking(); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index c0f4cec4d..6cbf429ff 100644 +index 3b76c7080..79ade89c5 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 { @@ -168,7 +168,7 @@ index c0f4cec4d..6cbf429ff 100644 // Check if the fromWorld and toWorld are the same. diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 248873fb4..cce4acc0b 100644 +index c129e8629..81ba63bab 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/ItemStack-getMaxItemUseDuration.patch b/Spigot-Server-Patches/ItemStack-getMaxItemUseDuration.patch index 9d41164ccd..85ca27f00c 100644 --- a/Spigot-Server-Patches/ItemStack-getMaxItemUseDuration.patch +++ b/Spigot-Server-Patches/ItemStack-getMaxItemUseDuration.patch @@ -6,19 +6,19 @@ Subject: [PATCH] ItemStack#getMaxItemUseDuration Allows you to determine how long it takes to use a usable/consumable item diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java -index f6b802dc8..6521bb508 100644 +index be6205275..a4a5058da 100644 --- a/src/main/java/net/minecraft/server/ItemStack.java +++ b/src/main/java/net/minecraft/server/ItemStack.java @@ -0,0 +0,0 @@ public final class ItemStack { this.getItem().b(this, world, entityhuman); } -+ public int getItemUseMaxDuration() { return m(); } // Paper - OBFHELPER - public int m() { - return this.getItem().e(this); ++ public int getItemUseMaxDuration() { return k(); } // Paper - OBFHELPER + public int k() { + return this.getItem().c(this); } diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java -index aa99254ff..be6589dbf 100644 +index b1e0d6185..03f611518 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java @@ -0,0 +0,0 @@ public final class CraftItemStack extends ItemStack { diff --git a/Spigot-Server-Patches/LivingEntity-Hand-Raised-Item-Use-API.patch b/Spigot-Server-Patches/LivingEntity-Hand-Raised-Item-Use-API.patch index a84f046650..b34e8d283b 100644 --- a/Spigot-Server-Patches/LivingEntity-Hand-Raised-Item-Use-API.patch +++ b/Spigot-Server-Patches/LivingEntity-Hand-Raised-Item-Use-API.patch @@ -6,29 +6,29 @@ Subject: [PATCH] LivingEntity Hand Raised/Item Use API How long an entity has raised hands to charge an attack or use an item diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 156bf8ee0..14637be49 100644 +index 1d7b9c525..6036915a8 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 ItemStack getActiveItem() { return cJ(); } // Paper - OBFHELPER - public ItemStack cJ() { ++ public ItemStack getActiveItem() { return cV(); } // Paper - OBFHELPER + public ItemStack cV() { return this.activeItem; } -+ public int getItemUseRemainingTime() { return cK(); } // Paper - OBFHELPER - public int cK() { - return this.bp; ++ public int getItemUseRemainingTime() { return cW(); } // Paper - OBFHELPER + public int cW() { + return this.bu; } -+ public int getHandRaisedTime() { return cL(); } // Paper - OBFHELPER - public int cL() { - return this.isHandRaised() ? this.activeItem.m() - this.cK() : 0; ++ public int getHandRaisedTime() { return cX(); } // Paper - OBFHELPER + public int cX() { + return this.isHandRaised() ? this.activeItem.k() - this.cW() : 0; } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index 14fb474f7..9c750efc7 100644 +index 0237ac769..8b3659c82 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -0,0 +0,0 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { diff --git a/Spigot-Server-Patches/MC-99321-Dont-check-for-blocked-double-chest-for-hop.patch b/Spigot-Server-Patches/MC-99321-Dont-check-for-blocked-double-chest-for-hop.patch deleted file mode 100644 index 28e2c26a90..0000000000 --- a/Spigot-Server-Patches/MC-99321-Dont-check-for-blocked-double-chest-for-hop.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Aikar -Date: Wed, 24 Jan 2018 20:06:39 -0500 -Subject: [PATCH] MC-99321 - Dont check for blocked double chest for hoppers - etc - -This is a source of MAJOR lag for hoppers, as well as a gameplay bug. - -This removes the necessity to disable the cat on chest behavior to improve performance. - -now performance will be improved even if you have cat chest detection on. - -diff --git a/src/main/java/net/minecraft/server/BlockChest.java b/src/main/java/net/minecraft/server/BlockChest.java -index 633c75ffe..68cdd3970 100644 ---- a/src/main/java/net/minecraft/server/BlockChest.java -+++ b/src/main/java/net/minecraft/server/BlockChest.java -@@ -0,0 +0,0 @@ public class BlockChest extends BlockTileEntity implements IFluidSource, IFluidC - - if (blockpropertychesttype1 != BlockPropertyChestType.SINGLE && blockpropertychesttype != blockpropertychesttype1 && iblockdata1.get(BlockChest.FACING) == iblockdata.get(BlockChest.FACING)) { - if (!flag && this.a(world, blockposition1)) { -+ //if (!flag && this.e(world, blockposition1)) { // Paper - check for allowBlocked flag - MC-99321 - return null; - } - --- \ No newline at end of file diff --git a/Spigot-Server-Patches/Make-shield-blocking-delay-configurable.patch b/Spigot-Server-Patches/Make-shield-blocking-delay-configurable.patch index 418aed1f30..2059ddfcb4 100644 --- a/Spigot-Server-Patches/Make-shield-blocking-delay-configurable.patch +++ b/Spigot-Server-Patches/Make-shield-blocking-delay-configurable.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Make shield blocking delay configurable diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -index 03a9a96fc..99ad40fa3 100644 +index 5a9c68e4f..650addb84 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 { @@ -19,20 +19,20 @@ index 03a9a96fc..99ad40fa3 100644 + } } diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 9adcabd4f..65bc19b17 100644 +index 401410b87..1932d38a8 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 { if (this.isHandRaised() && !this.activeItem.isEmpty()) { Item item = this.activeItem.getItem(); -- return item.f(this.activeItem) != EnumAnimation.BLOCK ? false : item.e(this.activeItem) - this.bp >= 5; -+ return item.f(this.activeItem) != EnumAnimation.BLOCK ? false : item.e(this.activeItem) - this.bp >= getShieldBlockingDelay(); // Paper - shieldBlockingDelay +- return item.d(this.activeItem) != EnumAnimation.BLOCK ? false : item.c(this.activeItem) - this.bu >= 5; ++ return item.d(this.activeItem) != EnumAnimation.BLOCK ? false : item.c(this.activeItem) - this.bu >= getShieldBlockingDelay(); // Paper - shieldBlockingDelay } else { return false; } @@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity { - public boolean cS() { + public boolean de() { return true; } + @@ -49,7 +49,7 @@ index 9adcabd4f..65bc19b17 100644 + // Paper end } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index a7b076377..14fb474f7 100644 +index 487bb9ece..0237ac769 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -0,0 +0,0 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { diff --git a/Spigot-Server-Patches/Player.setPlayerProfile-API.patch b/Spigot-Server-Patches/Player.setPlayerProfile-API.patch index 6e424eab61..74c45ce213 100644 --- a/Spigot-Server-Patches/Player.setPlayerProfile-API.patch +++ b/Spigot-Server-Patches/Player.setPlayerProfile-API.patch @@ -6,7 +6,7 @@ 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 4fb300468..02f5d61c8 100644 +index 4fb300468..65f4ea6cc 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 { @@ -14,7 +14,7 @@ index 4fb300468..02f5d61c8 100644 protected float ca = 0.02F; private int g; - private final GameProfile h; -+ private final GameProfile h; public void setProfile(GameProfile profile) { this.h = profile; } // Paper - OBFHELPER ++ private GameProfile h; public void setProfile(GameProfile profile) { this.h = profile; } // Paper - OBFHELPER private ItemStack cd; private final ItemCooldown ce; @Nullable diff --git a/Spigot-Server-Patches/PlayerReadyArrowEvent.patch b/Spigot-Server-Patches/PlayerReadyArrowEvent.patch index a4917870fd..c58b63e3aa 100644 --- a/Spigot-Server-Patches/PlayerReadyArrowEvent.patch +++ b/Spigot-Server-Patches/PlayerReadyArrowEvent.patch @@ -7,7 +7,7 @@ Called when a player is firing a bow and the server is choosing an arrow to use. Plugins can skip selection of certain arrows and control which is used. diff --git a/src/main/java/net/minecraft/server/ItemBow.java b/src/main/java/net/minecraft/server/ItemBow.java -index 327d31e19..44e7be58e 100644 +index c8fc18045..de0d80361 100644 --- a/src/main/java/net/minecraft/server/ItemBow.java +++ b/src/main/java/net/minecraft/server/ItemBow.java @@ -0,0 +0,0 @@ @@ -18,23 +18,23 @@ index 327d31e19..44e7be58e 100644 public class ItemBow extends Item { @@ -0,0 +0,0 @@ public class ItemBow extends Item { - }); + // CraftBukkit end } - private ItemStack a(EntityHuman entityhuman) { -- if (this.d(entityhuman.b(EnumHand.OFF_HAND))) { +- if (this.e_(entityhuman.b(EnumHand.OFF_HAND))) { + private ItemStack a(EntityHuman entityhuman, ItemStack bow) { // Paper -+ if (this.d(entityhuman, bow, entityhuman.b(EnumHand.OFF_HAND))) { // Paper ++ if (this.e_(entityhuman, bow, entityhuman.b(EnumHand.OFF_HAND))) { // Paper return entityhuman.b(EnumHand.OFF_HAND); -- } else if (this.d(entityhuman.b(EnumHand.MAIN_HAND))) { -+ } else if (this.d(entityhuman, bow, entityhuman.b(EnumHand.MAIN_HAND))) { // Paper +- } else if (this.e_(entityhuman.b(EnumHand.MAIN_HAND))) { ++ } else if (this.e_(entityhuman, bow, entityhuman.b(EnumHand.MAIN_HAND))) { return entityhuman.b(EnumHand.MAIN_HAND); } else { for (int i = 0; i < entityhuman.inventory.getSize(); ++i) { ItemStack itemstack = entityhuman.inventory.getItem(i); -- if (this.d(itemstack)) { -+ if (this.d(entityhuman, bow, itemstack)) { // Paper +- if (this.e_(itemstack)) { ++ if (this.e_(entityhuman, bow, itemstack)) { return itemstack; } } @@ -42,10 +42,10 @@ index 327d31e19..44e7be58e 100644 } } -- protected boolean d(ItemStack itemstack) { +- protected boolean e_(ItemStack itemstack) { - return itemstack.getItem() instanceof ItemArrow; + // Paper start -+ protected boolean d(EntityHuman player, ItemStack bow, ItemStack itemstack) { ++ protected boolean e_(EntityHuman player, ItemStack bow, ItemStack itemstack) { + return itemstack.getItem() instanceof ItemArrow && ( + !(player instanceof EntityPlayer) || + new com.destroystokyo.paper.event.player.PlayerReadyArrowEvent( diff --git a/Spigot-Server-Patches/Print-Error-details-when-failing-to-save-player-data.patch b/Spigot-Server-Patches/Print-Error-details-when-failing-to-save-player-data.patch index 4f0f40e3cd..de39da0b87 100644 --- a/Spigot-Server-Patches/Print-Error-details-when-failing-to-save-player-data.patch +++ b/Spigot-Server-Patches/Print-Error-details-when-failing-to-save-player-data.patch @@ -5,14 +5,14 @@ Subject: [PATCH] Print Error details when failing to save player data diff --git a/src/main/java/net/minecraft/server/WorldNBTStorage.java b/src/main/java/net/minecraft/server/WorldNBTStorage.java -index 4e33cc2f2..4bb6f600d 100644 +index cbfdb3cf7..9a243010d 100644 --- a/src/main/java/net/minecraft/server/WorldNBTStorage.java +++ b/src/main/java/net/minecraft/server/WorldNBTStorage.java @@ -0,0 +0,0 @@ public class WorldNBTStorage implements IDataManager, IPlayerFileData { file.renameTo(file1); } catch (Exception exception) { -- WorldNBTStorage.b.warn("Failed to save player data for {}", entityhuman.getName()); +- WorldNBTStorage.b.warn("Failed to save player data for {}", entityhuman.getDisplayName().getString()); + WorldNBTStorage.b.error("Failed to save player data for {}", entityhuman.getName(), exception); // Paper } diff --git a/Spigot-Server-Patches/Properly-remove-entities-on-dimension-teleport.patch b/Spigot-Server-Patches/Properly-remove-entities-on-dimension-teleport.patch index 24aba42aba..897cba5442 100644 --- a/Spigot-Server-Patches/Properly-remove-entities-on-dimension-teleport.patch +++ b/Spigot-Server-Patches/Properly-remove-entities-on-dimension-teleport.patch @@ -22,10 +22,10 @@ requirement, but plugins (such as my own) use this method to trigger a "reload" of the entity on the client. diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 7b17c32bb..d03e7c24f 100644 +index cd1639e26..ea42800ae 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 ICommandListener, KeyedObject { // Paper +@@ -0,0 +0,0 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke } // CraftBukkit end */ @@ -35,7 +35,7 @@ index 7b17c32bb..d03e7c24f 100644 this.world.methodProfiler.a("reposition"); /* CraftBukkit start - Handled in calculateTarget diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java -index 49019d54d..9fe5c4406 100644 +index 4ac2d39c5..d6d3ffa6f 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java @@ -0,0 +0,0 @@ public class WorldServer extends World implements IAsyncTaskHandler { diff --git a/Spigot-Server-Patches/RangedEntity-API.patch b/Spigot-Server-Patches/RangedEntity-API.patch index fbc618217f..4900b527bb 100644 --- a/Spigot-Server-Patches/RangedEntity-API.patch +++ b/Spigot-Server-Patches/RangedEntity-API.patch @@ -32,7 +32,7 @@ index 000000000..696660b08 + } +} diff --git a/src/main/java/net/minecraft/server/IRangedEntity.java b/src/main/java/net/minecraft/server/IRangedEntity.java -index a8af5917c..ba8b47c02 100644 +index 4fd69850f..7fe65b7c2 100644 --- a/src/main/java/net/minecraft/server/IRangedEntity.java +++ b/src/main/java/net/minecraft/server/IRangedEntity.java @@ -0,0 +0,0 @@ package net.minecraft.server; @@ -42,9 +42,8 @@ index a8af5917c..ba8b47c02 100644 - void a(EntityLiving entityliving, float f); + void a(EntityLiving entityliving, float f); default void rangedAttack(EntityLiving entityliving, float f) { a(entityliving, f); } // Paper OBF HELPER -- void p(boolean flag); -+ -+ void p(boolean flag); default void setChargingAttack(boolean flag) { p(flag); } // Paper OBF HELPER +- void s(boolean flag); ++ void s(boolean flag); default void setChargingAttack(boolean flag) { s(flag); } // Paper OBF HELPER } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java index 2ec1af8be..f31d3eed3 100644 diff --git a/Spigot-Server-Patches/Refresh-player-inventory-when-cancelling-PlayerInter.patch b/Spigot-Server-Patches/Refresh-player-inventory-when-cancelling-PlayerInter.patch index a5f973a77b..c0414b6c6f 100644 --- a/Spigot-Server-Patches/Refresh-player-inventory-when-cancelling-PlayerInter.patch +++ b/Spigot-Server-Patches/Refresh-player-inventory-when-cancelling-PlayerInter.patch @@ -16,7 +16,7 @@ Refresh the player inventory when PlayerInteractEntityEvent is cancelled to avoid this problem. diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index a54203c56..cc1152739 100644 +index 4ed107eac..472f40709 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 { diff --git a/Spigot-Server-Patches/Unset-Ignited-flag-on-cancel-of-Explosion-Event.patch b/Spigot-Server-Patches/Unset-Ignited-flag-on-cancel-of-Explosion-Event.patch index 166c8f2701..915f9a6173 100644 --- a/Spigot-Server-Patches/Unset-Ignited-flag-on-cancel-of-Explosion-Event.patch +++ b/Spigot-Server-Patches/Unset-Ignited-flag-on-cancel-of-Explosion-Event.patch @@ -6,20 +6,20 @@ Subject: [PATCH] Unset Ignited flag on cancel of Explosion Event Otherwise the creeper infinite explodes diff --git a/src/main/java/net/minecraft/server/EntityCreeper.java b/src/main/java/net/minecraft/server/EntityCreeper.java -index 8098d4d9f..67ba72fc1 100644 +index f37169d73..86935f70a 100644 --- a/src/main/java/net/minecraft/server/EntityCreeper.java +++ b/src/main/java/net/minecraft/server/EntityCreeper.java @@ -0,0 +0,0 @@ public class EntityCreeper extends EntityMonster { private static final DataWatcherObject a = DataWatcher.a(EntityCreeper.class, DataWatcherRegistry.b); - private static final DataWatcherObject b = DataWatcher.a(EntityCreeper.class, DataWatcherRegistry.h); -- private static final DataWatcherObject c = DataWatcher.a(EntityCreeper.class, DataWatcherRegistry.h); -+ private static final DataWatcherObject c = DataWatcher.a(EntityCreeper.class, DataWatcherRegistry.h); private static final DataWatcherObject isIgnitedDW = c; // Paper OBFHELPER - private int bx; + private static final DataWatcherObject b = DataWatcher.a(EntityCreeper.class, DataWatcherRegistry.i); +- private static final DataWatcherObject c = DataWatcher.a(EntityCreeper.class, DataWatcherRegistry.i); ++ private static final DataWatcherObject c = DataWatcher.a(EntityCreeper.class, DataWatcherRegistry.i);private static final DataWatcherObject isIgnitedDW = c; // Paper OBFHELPER + private int bC; private int fuseTicks; - public int maxFuseTicks = 30; // PAIL private -> public + public int maxFuseTicks = 30; @@ -0,0 +0,0 @@ public class EntityCreeper extends EntityMonster { - this.ds(); + this.dF(); } else { fuseTicks = 0; + this.datawatcher.set(isIgnitedDW, Boolean.valueOf(false)); // Paper diff --git a/Spigot-Server-Patches/Vex-getOwner-API.patch b/Spigot-Server-Patches/Vex-getOwner-API.patch index 5ebda04880..348082cc62 100644 --- a/Spigot-Server-Patches/Vex-getOwner-API.patch +++ b/Spigot-Server-Patches/Vex-getOwner-API.patch @@ -6,15 +6,15 @@ Subject: [PATCH] Vex#getOwner API Get's the NPC that summoned this Vex diff --git a/src/main/java/net/minecraft/server/EntityVex.java b/src/main/java/net/minecraft/server/EntityVex.java -index a0abaf431..673c3ff3c 100644 +index 897d7c681..ba1109e03 100644 --- a/src/main/java/net/minecraft/server/EntityVex.java +++ b/src/main/java/net/minecraft/server/EntityVex.java @@ -0,0 +0,0 @@ public class EntityVex extends EntityMonster { } -+ public EntityInsentient getOwner() { return p(); } // Paper - OBFHELPER - public EntityInsentient p() { ++ public EntityInsentient getOwner() { return l(); } // Paper - OBFHELPER + public EntityInsentient l() { return this.b; } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java diff --git a/Spigot-Server-Patches/WitchConsumePotionEvent.patch b/Spigot-Server-Patches/WitchConsumePotionEvent.patch index 79873ca6c4..b8def6d503 100644 --- a/Spigot-Server-Patches/WitchConsumePotionEvent.patch +++ b/Spigot-Server-Patches/WitchConsumePotionEvent.patch @@ -6,7 +6,7 @@ Subject: [PATCH] WitchConsumePotionEvent Fires when a witch consumes the potion in their hand diff --git a/src/main/java/net/minecraft/server/EntityWitch.java b/src/main/java/net/minecraft/server/EntityWitch.java -index ffe72e037..3a00a37eb 100644 +index 71d8b6f8f..cf0669589 100644 --- a/src/main/java/net/minecraft/server/EntityWitch.java +++ b/src/main/java/net/minecraft/server/EntityWitch.java @@ -0,0 +0,0 @@ public class EntityWitch extends EntityMonster implements IRangedEntity { diff --git a/Spigot-Server-Patches/WitchReadyPotionEvent.patch b/Spigot-Server-Patches/WitchReadyPotionEvent.patch index d79e8be78f..d2385c4fd3 100644 --- a/Spigot-Server-Patches/WitchReadyPotionEvent.patch +++ b/Spigot-Server-Patches/WitchReadyPotionEvent.patch @@ -5,7 +5,7 @@ Subject: [PATCH] WitchReadyPotionEvent diff --git a/src/main/java/net/minecraft/server/EntityWitch.java b/src/main/java/net/minecraft/server/EntityWitch.java -index bf029ad1c..035aa4a90 100644 +index 59f3f4404..45b6e2b7b 100644 --- a/src/main/java/net/minecraft/server/EntityWitch.java +++ b/src/main/java/net/minecraft/server/EntityWitch.java @@ -0,0 +0,0 @@ public class EntityWitch extends EntityMonster implements IRangedEntity { @@ -18,7 +18,7 @@ index bf029ad1c..035aa4a90 100644 + org.bukkit.inventory.ItemStack bukkitStack = com.destroystokyo.paper.event.entity.WitchReadyPotionEvent.process((org.bukkit.entity.Witch) this.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(potion)); + this.setSlot(EnumItemSlot.MAINHAND, org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(bukkitStack)); + // Paper end - this.bx = this.getItemInMainHand().m(); + this.bC = this.getItemInMainHand().k(); this.a(true); - this.world.a((EntityHuman) null, this.locX, this.locY, this.locZ, SoundEffects.iz, this.bK(), 1.0F, 0.8F + this.random.nextFloat() * 0.4F); + this.world.a((EntityHuman) null, this.locX, this.locY, this.locZ, SoundEffects.ENTITY_WITCH_DRINK, this.bV(), 1.0F, 0.8F + this.random.nextFloat() * 0.4F); -- \ No newline at end of file diff --git a/Spigot-Server-Patches/WitchThrowPotionEvent.patch b/Spigot-Server-Patches/WitchThrowPotionEvent.patch index 37c305a858..9beb930235 100644 --- a/Spigot-Server-Patches/WitchThrowPotionEvent.patch +++ b/Spigot-Server-Patches/WitchThrowPotionEvent.patch @@ -6,11 +6,11 @@ Subject: [PATCH] WitchThrowPotionEvent Fired when a witch throws a potion at a player diff --git a/src/main/java/net/minecraft/server/EntityWitch.java b/src/main/java/net/minecraft/server/EntityWitch.java -index 3a00a37eb..bf029ad1c 100644 +index cf0669589..59f3f4404 100644 --- a/src/main/java/net/minecraft/server/EntityWitch.java +++ b/src/main/java/net/minecraft/server/EntityWitch.java @@ -0,0 +0,0 @@ public class EntityWitch extends EntityMonster implements IRangedEntity { - potionregistry = Potions.I; + potionregistry = Potions.M; } - EntityPotion entitypotion = new EntityPotion(this.world, this, PotionUtil.a(new ItemStack(Items.SPLASH_POTION), potionregistry));