aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0457-PortalCreateEvent-needs-to-know-its-entity.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0457-PortalCreateEvent-needs-to-know-its-entity.patch')
-rw-r--r--patches/server/0457-PortalCreateEvent-needs-to-know-its-entity.patch138
1 files changed, 138 insertions, 0 deletions
diff --git a/patches/server/0457-PortalCreateEvent-needs-to-know-its-entity.patch b/patches/server/0457-PortalCreateEvent-needs-to-know-its-entity.patch
new file mode 100644
index 0000000000..f8591215a4
--- /dev/null
+++ b/patches/server/0457-PortalCreateEvent-needs-to-know-its-entity.patch
@@ -0,0 +1,138 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Mariell Hoversholm <[email protected]>
+Date: Fri, 21 Aug 2020 20:57:54 +0200
+Subject: [PATCH] PortalCreateEvent needs to know its entity
+
+
+diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java
+index abaafcff3f7a5e710319c93313a4ecf9874b7ef8..a9707ecebb175663acb0f7285c759d938c5dae8b 100644
+--- a/src/main/java/net/minecraft/world/item/ItemStack.java
++++ b/src/main/java/net/minecraft/world/item/ItemStack.java
+@@ -457,7 +457,7 @@ public final class ItemStack {
+ net.minecraft.world.level.block.state.BlockState block = world.getBlockState(newblockposition);
+
+ if (!(block.getBlock() instanceof BaseEntityBlock)) { // Containers get placed automatically
+- block.getBlock().onPlace(block, world, newblockposition, oldBlock, true);
++ block.getBlock().onPlace(block, world, newblockposition, oldBlock, true, context); // Paper - pass context
+ }
+
+ world.notifyAndUpdatePhysics(newblockposition, null, oldBlock, block, world.getBlockState(newblockposition), updateFlag, 512); // send null chunk as chunk.k() returns false by this point
+diff --git a/src/main/java/net/minecraft/world/level/block/BaseFireBlock.java b/src/main/java/net/minecraft/world/level/block/BaseFireBlock.java
+index 2bc31c28d0d5469476699b69efa6e07325f2a852..4066dd6a638cf2186c628905915f635326442b3e 100644
+--- a/src/main/java/net/minecraft/world/level/block/BaseFireBlock.java
++++ b/src/main/java/net/minecraft/world/level/block/BaseFireBlock.java
+@@ -138,20 +138,23 @@ public abstract class BaseFireBlock extends Block {
+ super.entityInside(state, world, pos, entity);
+ }
+
++ // Paper start - ItemActionContext param
++ @Override public void onPlace(BlockState state, Level world, BlockPos pos, BlockState oldState, boolean notify) { this.onPlace(state, world, pos, oldState, notify, null); }
+ @Override
+- public void onPlace(BlockState state, Level world, BlockPos pos, BlockState oldState, boolean notify) {
+- if (!oldState.is(state.getBlock())) {
++ public void onPlace(BlockState iblockdata, Level world, BlockPos blockposition, BlockState iblockdata1, boolean flag, net.minecraft.world.item.context.UseOnContext itemActionContext) {
++ // Paper end
++ if (!iblockdata1.is(iblockdata.getBlock())) {
+ if (BaseFireBlock.inPortalDimension(world)) {
+- Optional<PortalShape> optional = PortalShape.findEmptyPortalShape(world, pos, Direction.Axis.X);
++ Optional<PortalShape> optional = PortalShape.findEmptyPortalShape(world, blockposition, Direction.Axis.X);
+
+ if (optional.isPresent()) {
+- ((PortalShape) optional.get()).createPortalBlocks();
++ ((PortalShape) optional.get()).createPortalBlocks(itemActionContext); // Paper - pass ItemActionContext param
+ return;
+ }
+ }
+
+- if (!state.canSurvive(world, pos)) {
+- this.fireExtinguished(world, pos); // CraftBukkit - fuel block broke
++ if (!iblockdata.canSurvive(world, blockposition)) {
++ fireExtinguished(world, blockposition); // CraftBukkit - fuel block broke
+ }
+
+ }
+diff --git a/src/main/java/net/minecraft/world/level/block/FireBlock.java b/src/main/java/net/minecraft/world/level/block/FireBlock.java
+index 8c6edd032c927f7d1e04e944b4ce5598d71cdd81..7f88b910dfd0303f69b4fd1c7918a401c1f369f2 100644
+--- a/src/main/java/net/minecraft/world/level/block/FireBlock.java
++++ b/src/main/java/net/minecraft/world/level/block/FireBlock.java
+@@ -13,6 +13,7 @@ import net.minecraft.server.level.ServerLevel;
+ import net.minecraft.tags.BiomeTags;
+ import net.minecraft.util.RandomSource;
+ import net.minecraft.world.item.context.BlockPlaceContext;
++import net.minecraft.world.item.context.UseOnContext;
+ import net.minecraft.world.level.BlockGetter;
+ import net.minecraft.world.level.GameRules;
+ import net.minecraft.world.level.Level;
+@@ -361,9 +362,11 @@ public class FireBlock extends BaseFireBlock {
+ }
+
+ @Override
+- public void onPlace(BlockState state, Level world, BlockPos pos, BlockState oldState, boolean notify) {
+- super.onPlace(state, world, pos, oldState, notify);
+- world.scheduleTick(pos, (Block) this, FireBlock.getFireTickDelay(world.random));
++ // Paper start - ItemActionContext param
++ public void onPlace(BlockState iblockdata, Level world, BlockPos blockposition, BlockState iblockdata1, boolean flag, UseOnContext itemActionContext) {
++ super.onPlace(iblockdata, world, blockposition, iblockdata1, flag, itemActionContext);
++ // Paper end
++ world.scheduleTick(blockposition, this, getFireTickDelay(world.random));
+ }
+
+ private static int getFireTickDelay(RandomSource random) {
+diff --git a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java
+index a5942b6683d38f067f8ca1dfbe467b72df242632..96bdf69c8788aa0b1dff64789e6f13c856ee99ff 100644
+--- a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java
++++ b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java
+@@ -40,6 +40,7 @@ import net.minecraft.world.item.DyeColor;
+ import net.minecraft.world.item.Item;
+ import net.minecraft.world.item.ItemStack;
+ import net.minecraft.world.item.context.BlockPlaceContext;
++import net.minecraft.world.item.context.UseOnContext;
+ import net.minecraft.world.level.BlockGetter;
+ import net.minecraft.world.level.EmptyBlockGetter;
+ import net.minecraft.world.level.Level;
+@@ -143,6 +144,12 @@ public abstract class BlockBehaviour implements FeatureElement {
+ DebugPackets.sendNeighborsUpdatePacket(world, pos);
+ }
+
++ // Paper start - add ItemActionContext param
++ @Deprecated
++ public void onPlace(BlockState iblockdata, Level world, BlockPos blockposition, BlockState iblockdata1, boolean flag, UseOnContext itemActionContext) {
++ this.onPlace(iblockdata, world, blockposition, iblockdata1, flag);
++ }
++ // Paper end
+ /** @deprecated */
+ @Deprecated
+ public void onPlace(BlockState state, Level world, BlockPos pos, BlockState oldState, boolean notify) {
+diff --git a/src/main/java/net/minecraft/world/level/portal/PortalShape.java b/src/main/java/net/minecraft/world/level/portal/PortalShape.java
+index bc0dfa8efe0b2a891c000e750f436db632607ada..c461e0d04047db9c0c5ecc04063cebd38bf96ec2 100644
+--- a/src/main/java/net/minecraft/world/level/portal/PortalShape.java
++++ b/src/main/java/net/minecraft/world/level/portal/PortalShape.java
+@@ -11,6 +11,7 @@ import net.minecraft.tags.BlockTags;
+ import net.minecraft.util.Mth;
+ import net.minecraft.world.entity.Entity;
+ import net.minecraft.world.entity.EntityDimensions;
++import net.minecraft.world.item.context.UseOnContext;
+ import net.minecraft.world.level.LevelAccessor;
+ import net.minecraft.world.level.block.Blocks;
+ import net.minecraft.world.level.block.NetherPortalBlock;
+@@ -190,7 +191,10 @@ public class PortalShape {
+ }
+
+ // CraftBukkit start - return boolean
+- public boolean createPortalBlocks() {
++ // Paper start - ItemActionContext param
++ @Deprecated public boolean createPortalBlocks() { return this.createPortalBlocks(null); }
++ public boolean createPortalBlocks(UseOnContext itemActionContext) {
++ // Paper end
+ org.bukkit.World bworld = this.level.getMinecraftWorld().getWorld();
+
+ // Copy below for loop
+@@ -200,7 +204,7 @@ public class PortalShape {
+ this.blocks.setBlock(blockposition, iblockdata, 18);
+ });
+
+- PortalCreateEvent event = new PortalCreateEvent((java.util.List<org.bukkit.block.BlockState>) (java.util.List) this.blocks.getList(), bworld, null, PortalCreateEvent.CreateReason.FIRE);
++ PortalCreateEvent event = new PortalCreateEvent((java.util.List<org.bukkit.block.BlockState>) (java.util.List) blocks.getList(), bworld, itemActionContext == null || itemActionContext.getPlayer() == null ? null : itemActionContext.getPlayer().getBukkitEntity(), PortalCreateEvent.CreateReason.FIRE); // Paper - pass entity param
+ this.level.getMinecraftWorld().getServer().server.getPluginManager().callEvent(event);
+
+ if (event.isCancelled()) {