aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0476-PortalCreateEvent-needs-to-know-its-entity.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0476-PortalCreateEvent-needs-to-know-its-entity.patch')
-rw-r--r--patches/server/0476-PortalCreateEvent-needs-to-know-its-entity.patch138
1 files changed, 138 insertions, 0 deletions
diff --git a/patches/server/0476-PortalCreateEvent-needs-to-know-its-entity.patch b/patches/server/0476-PortalCreateEvent-needs-to-know-its-entity.patch
new file mode 100644
index 0000000000..9630b4e364
--- /dev/null
+++ b/patches/server/0476-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 cbcc90cffe38ea249cd0de4b0a90adc2a3ddeb0b..b4ad1610d30396be344a04f5f3a565ae2b8f2265 100644
+--- a/src/main/java/net/minecraft/world/item/ItemStack.java
++++ b/src/main/java/net/minecraft/world/item/ItemStack.java
+@@ -431,7 +431,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, itemactioncontext); // Paper - pass itemactioncontext
+ }
+
+ 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 378d4316a51d48cb84e2d8a553f7b28bae55630e..922b5b22a4ccfeead9d6d2b9a2a2b3cc8a1e6c55 100644
+--- a/src/main/java/net/minecraft/world/level/block/BaseFireBlock.java
++++ b/src/main/java/net/minecraft/world/level/block/BaseFireBlock.java
+@@ -139,20 +139,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 5ce5902b13ebb9438433d189f2c03677e4cb54b3..e34b8cff424ad58eee65a65fa510fa9908dbdf39 100644
+--- a/src/main/java/net/minecraft/world/level/block/FireBlock.java
++++ b/src/main/java/net/minecraft/world/level/block/FireBlock.java
+@@ -12,6 +12,7 @@ import net.minecraft.core.Direction;
+ import net.minecraft.server.level.ServerLevel;
+ 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;
+@@ -356,9 +357,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 b2ab7749e3ddf124d5ef97271a76dc875a650771..97b0e820d353e8ab4ca9d9e2efd0a8819119b2ab 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
+@@ -35,6 +35,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;
+@@ -136,6 +137,12 @@ public abstract class BlockBehaviour {
+ 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 768c39b265437641721d669d6aa85b3db49e5422..3414f3190e1a760c602613e82e551e797c3aa575 100644
+--- a/src/main/java/net/minecraft/world/level/portal/PortalShape.java
++++ b/src/main/java/net/minecraft/world/level/portal/PortalShape.java
+@@ -10,6 +10,7 @@ import net.minecraft.server.level.ServerLevel;
+ import net.minecraft.tags.BlockTags;
+ import net.minecraft.util.Mth;
+ 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;
+@@ -184,7 +185,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
+@@ -194,7 +198,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()) {