aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0456-PortalCreateEvent-needs-to-know-its-entity.patch
blob: a8f5144e8d4eff5cdc73585ad3ddabdad691dcb0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Mariell Hoversholm <proximyst@proximyst.com>
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 893ff998afaa47500a03ae55ce45e9862ab1cc18..a3021fbc570ae47eb6b0d4a89388c8ed893aced7 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()) {