Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
96 changes: 96 additions & 0 deletions patches/api/0426-Add-EntityExtinguishEvent.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Aurora <aurora@relanet.eu>
Date: Sat, 20 Mar 2021 18:14:24 +0100
Subject: [PATCH] Add EntityExtinguishEvent


diff --git a/src/main/java/io/papermc/paper/event/entity/EntityExtinguishEvent.java b/src/main/java/io/papermc/paper/event/entity/EntityExtinguishEvent.java
new file mode 100644
index 0000000000000000000000000000000000000000..cbeeb9f52e7886e4561b6e575a944ed0a78898c7
--- /dev/null
+++ b/src/main/java/io/papermc/paper/event/entity/EntityExtinguishEvent.java
@@ -0,0 +1,84 @@
+package io.papermc.paper.event.entity;
+
+import org.bukkit.entity.Entity;
+import org.bukkit.event.Cancellable;
+import org.bukkit.event.HandlerList;
+import org.bukkit.event.entity.EntityEvent;
+import org.jetbrains.annotations.ApiStatus;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Called when a burning {@link Entity} is extinguished.
+ */
+public class EntityExtinguishEvent extends EntityEvent implements Cancellable {
+ private static final HandlerList HANDLER_LIST = new HandlerList();
+ private final Cause cause;
+ private boolean cancelled;
+
+ @ApiStatus.Internal
+ public EntityExtinguishEvent(final @NotNull Entity entity, final @NotNull Cause cause) {
+ super(entity);
+ this.cause = cause;
+ }
+
+ @NotNull
+ public Cause getCause() {
+ return cause;
+ }
+
+ @Override
+ public void setCancelled(boolean cancelled) {
+ this.cancelled = cancelled;
+ }
+
+ @Override
+ public boolean isCancelled() {
+ return this.cancelled;
+ }
+
+ public enum Cause {
+ /**
+ * Extinguish caused by entity standing in water.
+ */
+ WATER,
+ /**
+ * Extinguish caused by entity standing in the rain.
+ */
+ RAIN,
+ /**
+ * Extinguish caused by entity standing in a bubble column.
+ */
+ BUBBLE_COLUMN,
+ /**
+ * Extinguish caused by entity standing in a cauldron with water.
+ */
+ CAULDRON,
+ /**
+ * Extinguish caused by entity dying.
+ */
+ DEATH,
+ /**
+ * Extinguish caused by fire ticks running out.
+ */
+ TIME,
+ /**
+ * Extinguish caused by standing in powdered snow.
+ */
+ POWDER_SNOW,
+ /**
+ * Extinguish caused by being splashed with a water bottle.
+ */
+ WATER_BOTTLE
+ }
+
+ @Override
+ @NotNull
+ public HandlerList getHandlers() {
+ return HANDLER_LIST;
+ }
+
+ @NotNull
+ public static HandlerList getHandlerList() {
+ return HANDLER_LIST;
+ }
+}
60 changes: 60 additions & 0 deletions patches/server/0872-Fix-a-bunch-of-vanilla-bugs.patch
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,18 @@ https://bugs.mojang.com/browse/MC-264285
https://bugs.mojang.com/browse/MC-84789
Fix wild wolves not considering bones interesting

https://bugs.mojang.com/browse/MC-245603
Fix powdered snow not extinguishing fire arrows

https://bugs.mojang.com/browse/MC-214647
Fix arrows not making a sound when extinguished

https://bugs.mojang.com/browse/MC-245680
Fix placing powdered snow on a flaming arrow not consuming it

== AT ==
public net/minecraft/world/entity/Entity playEntityOnFireExtinguishedSound()V

Co-authored-by: William Blake Galbreath <blake.galbreath@gmail.com>

diff --git a/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java b/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java
Expand Down Expand Up @@ -134,6 +146,18 @@ index 6cc9c28032cafd15d884223a01208ce6f027c151..14bbc86bbaad49b2af16f3b171eb667c
this.player.onUpdateAbilities();
this.player.server.getPlayerList().broadcastAll(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.UPDATE_GAME_MODE, this.player), this.player); // CraftBukkit
this.level.updateSleepingPlayerList();
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index 8b8237a4e8d29f8d4f432e4727d6302645286d0e..255e4818fe25ed59db88a5eb4b1b72f47c92e0a9 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -1841,6 +1841,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {

this.resetFallDistance();
this.wasTouchingWater = true;
+ if (this.getRemainingFireTicks() > 0 && this instanceof net.minecraft.world.entity.projectile.AbstractArrow) this.playEntityOnFireExtinguishedSound(); // Paper - fix MC-214647
this.clearFire();
} else {
this.wasTouchingWater = false;
diff --git a/src/main/java/net/minecraft/world/entity/Saddleable.java b/src/main/java/net/minecraft/world/entity/Saddleable.java
index effe4c4fb37fe13aece70cdef4966047d4719af9..7152674d3f3fb98198585cb5ece2bb88877345f9 100644
--- a/src/main/java/net/minecraft/world/entity/Saddleable.java
Expand Down Expand Up @@ -294,6 +318,25 @@ index f174094febfdfdc309f1b50877be60bae8a98156..5f407535298a31a34cfe114dd863fd6a
world.addFreshEntityWithPassengers(cat);
return 1;
}
diff --git a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
index 7226be19248a1ffb8ff2c89b55882529d33a6c0c..e1e6075778d54e7507c7e57c60db4747939dfa67 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
@@ -188,6 +188,14 @@ public abstract class AbstractArrow extends Projectile {
}

if (this.isInWaterOrRain() || iblockdata.is(Blocks.POWDER_SNOW)) {
+ // Paper start - fix MC-214647 & MC-245680
+ if (this.getRemainingFireTicks() > 0) {
+ this.playEntityOnFireExtinguishedSound();
+
+ if (iblockdata.is(Blocks.POWDER_SNOW) && org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this, blockposition, Blocks.AIR.defaultBlockState()))
+ this.level().destroyBlock(blockposition, false);
Comment thread
Warriorrrr marked this conversation as resolved.
+ }
+ // Paper end
this.clearFire();
}

diff --git a/src/main/java/net/minecraft/world/entity/raid/Raids.java b/src/main/java/net/minecraft/world/entity/raid/Raids.java
index 380afb885e85e4cf80e746d217033345a7514443..41457c9f27b18fa2734a6cca297ec5186470e82f 100644
--- a/src/main/java/net/minecraft/world/entity/raid/Raids.java
Expand Down Expand Up @@ -358,6 +401,23 @@ index 2932419b7ca3f066b1db329829af36ba31e17c65..e11eced0bf15dfecaf64f5e1c28e973c
if (!this.handleEntityOnFireInsideWithEvent(state, world, pos, entity)) { // Paper - fix powdered snow cauldron extinguishing entities
return;
}
diff --git a/src/main/java/net/minecraft/world/level/block/PowderSnowBlock.java b/src/main/java/net/minecraft/world/level/block/PowderSnowBlock.java
index 7e04ecba2a14be0f0d47c917368abd2a2bd64a05..be06dadba271bc6c60f1e94d5c37e9d5f07f841e 100644
--- a/src/main/java/net/minecraft/world/level/block/PowderSnowBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/PowderSnowBlock.java
@@ -77,6 +77,12 @@ public class PowderSnowBlock extends Block implements BucketPickup {
}
// CraftBukkit end
world.destroyBlock(pos, false);
+ // Paper start - fix MC-245603
+ if (entity instanceof net.minecraft.world.entity.projectile.AbstractArrow) {
+ entity.clearFire();
+ entity.playEntityOnFireExtinguishedSound(); // Manually play the extinguish sound, Entity#extinguishFire does this too but wasOnFire is false
+ }
+ // Paper end
}

entity.setSharedFlagOnFire(false);
diff --git a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
index 436290eaa0dab05a642b67b265117dbe5eceb8b7..5ccc419b904aec590c5624438da61ca6724b20d6 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ Subject: [PATCH] Fix EntityCombustEvent cancellation cant fully prevent


diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index e09a4ebbbcd2e3f55b8b764cbc36d72bc3092085..32093c96a22221f17411aaf260db071f27350966 100644
index 255e4818fe25ed59db88a5eb4b1b72f47c92e0a9..c96d8de5d32cc8802fbb9c3e4f5c6fa57deadcbc 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -3291,6 +3291,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
@@ -3292,6 +3292,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
pluginManager.callEvent(entityCombustEvent);
if (!entityCombustEvent.isCancelled()) {
this.setSecondsOnFire(entityCombustEvent.getDuration(), false);
Expand Down
4 changes: 2 additions & 2 deletions patches/server/0905-Player-Entity-Tracking-Events.patch
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ Subject: [PATCH] Player Entity Tracking Events


diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index 32093c96a22221f17411aaf260db071f27350966..58eb0a7be2e5b4dd2aba8aebc0f7a57ff1348135 100644
index c96d8de5d32cc8802fbb9c3e4f5c6fa57deadcbc..162d95e862da1a29abeeb3c9a2f157af0af59ae4 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -4018,9 +4018,21 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
@@ -4019,9 +4019,21 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
EnchantmentHelper.doPostDamageEffects(attacker, target);
}

Expand Down
4 changes: 2 additions & 2 deletions patches/server/0915-Improve-PortalEvents.patch
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ Subject: [PATCH] Improve PortalEvents


diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index 58eb0a7be2e5b4dd2aba8aebc0f7a57ff1348135..6fd0e3556f771464854bd8477163ced7b10b0fc4 100644
index 162d95e862da1a29abeeb3c9a2f157af0af59ae4..9e153cc6ff0299ca8b309d142886f92f989348fd 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -3674,7 +3674,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
@@ -3675,7 +3675,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
Location enter = bukkitEntity.getLocation();
Location exit = CraftLocation.toBukkit(exitPosition, exitWorldServer.getWorld());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1158,7 +1158,7 @@ index 8547e7ff2f1f5b7701fb0f3c3010c14601a5f83e..fff7ad7a45f310783ac96b44575ad3db
this.players.remove(entityplayer);
this.playersByName.remove(entityplayer.getScoreboardName().toLowerCase(java.util.Locale.ROOT)); // Spigot
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index c014fe8808f19195d8c26925227ff28bd6738039..ccc674a3da006fc3f6edd3b479eaa86c1cc67e90 100644
index 49a7c4e420bed0cf93b4ec62010237f29c762d49..8d601c04542c8b87d897e800a07ae80b227905f6 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -246,11 +246,23 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
Expand Down Expand Up @@ -1186,15 +1186,15 @@ index c014fe8808f19195d8c26925227ff28bd6738039..ccc674a3da006fc3f6edd3b479eaa86c
@Override
public CommandSender getBukkitSender(CommandSourceStack wrapper) {
return this.getBukkitEntity();
@@ -4656,6 +4668,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
@@ -4657,6 +4669,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
return;
}
// Paper end - rewrite chunk system
+ final boolean alreadyRemoved = this.removalReason != null;
if (this.removalReason == null) {
this.removalReason = reason;
}
@@ -4666,12 +4679,28 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
@@ -4667,12 +4680,28 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {

if (reason != RemovalReason.UNLOADED_TO_CHUNK) this.getPassengers().forEach(Entity::stopRiding); // Paper - chunk system - don't adjust passenger state when unloading, it's just not safe (and messes with our logic in entity chunk unload)
this.levelCallback.onRemove(reason);
Expand Down
Loading