Paper/patches/server/0468-PortalCreateEvent-needs-to-know-its-entity.patch

139 lines
8.4 KiB
Diff
Raw Normal View History

2021-06-11 14:02:28 +02:00
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 3cb83cfeb2709384ef4f7dd74694d47d55698c1f..36c560ea3b33ef854f2190d07209b7f36c6d7e6b 100644
2021-06-11 14:02:28 +02:00
--- a/src/main/java/net/minecraft/world/item/ItemStack.java
+++ b/src/main/java/net/minecraft/world/item/ItemStack.java
@@ -443,7 +443,7 @@ public final class ItemStack {
2021-06-11 14:02:28 +02:00
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
2023-03-14 21:25:13 +01:00
index 2bc31c28d0d5469476699b69efa6e07325f2a852..4066dd6a638cf2186c628905915f635326442b3e 100644
2021-06-11 14:02:28 +02:00
--- a/src/main/java/net/minecraft/world/level/block/BaseFireBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/BaseFireBlock.java
2023-03-14 21:25:13 +01:00
@@ -138,20 +138,23 @@ public abstract class BaseFireBlock extends Block {
2021-06-11 14:02:28 +02:00
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) {
2021-06-11 14:02:28 +02:00
+ // Paper end
+ if (!iblockdata1.is(iblockdata.getBlock())) {
2021-06-14 15:45:16 +02:00
if (BaseFireBlock.inPortalDimension(world)) {
- Optional<PortalShape> optional = PortalShape.findEmptyPortalShape(world, pos, Direction.Axis.X);
+ Optional<PortalShape> optional = PortalShape.findEmptyPortalShape(world, blockposition, Direction.Axis.X);
2021-06-11 14:02:28 +02:00
if (optional.isPresent()) {
- ((PortalShape) optional.get()).createPortalBlocks();
+ ((PortalShape) optional.get()).createPortalBlocks(itemActionContext); // Paper - pass ItemActionContext param
2021-06-11 14:02:28 +02:00
return;
}
}
- if (!state.canSurvive(world, pos)) {
2021-06-14 15:45:16 +02:00
- this.fireExtinguished(world, pos); // CraftBukkit - fuel block broke
2021-06-11 14:02:28 +02:00
+ 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
2023-03-14 21:25:13 +01:00
index 9576f581bb61e6c71de427c52dcc3e56dc3ed81e..6ed2c13c8d22a936ae130cf8cf103451033a2cb7 100644
2021-06-11 14:02:28 +02:00
--- a/src/main/java/net/minecraft/world/level/block/FireBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/FireBlock.java
2023-03-14 21:25:13 +01:00
@@ -13,6 +13,7 @@ import net.minecraft.server.level.ServerLevel;
import net.minecraft.tags.BiomeTags;
2022-06-08 08:06:17 +02:00
import net.minecraft.util.RandomSource;
2021-06-11 14:02:28 +02:00
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;
2023-03-14 21:25:13 +01:00
@@ -357,9 +358,11 @@ public class FireBlock extends BaseFireBlock {
2021-06-11 14:02:28 +02:00
}
@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));
2021-06-11 14:02:28 +02:00
+ // 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));
2021-06-11 14:02:28 +02:00
}
2022-06-08 08:06:17 +02:00
private static int getFireTickDelay(RandomSource random) {
2021-06-11 14:02:28 +02:00
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
2023-03-14 21:25:13 +01:00
index b245b3912a4e2f4e83872c29c5a9602743b5eccb..61c814a8042d3d4be5ea86ce339c90100bdbe597 100644
2021-06-11 14:02:28 +02:00
--- a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java
+++ b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java
2023-03-14 21:25:13 +01:00
@@ -40,6 +40,7 @@ import net.minecraft.world.item.DyeColor;
2021-06-11 14:02:28 +02:00
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;
2023-03-14 21:25:13 +01:00
@@ -143,6 +144,12 @@ public abstract class BlockBehaviour implements FeatureElement {
2021-06-11 14:02:28 +02:00
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 */
2021-06-11 14:02:28 +02:00
@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
2022-12-07 21:16:54 +01:00
index bc0dfa8efe0b2a891c000e750f436db632607ada..c461e0d04047db9c0c5ecc04063cebd38bf96ec2 100644
2021-06-11 14:02:28 +02:00
--- a/src/main/java/net/minecraft/world/level/portal/PortalShape.java
+++ b/src/main/java/net/minecraft/world/level/portal/PortalShape.java
2022-12-07 21:16:54 +01:00
@@ -11,6 +11,7 @@ import net.minecraft.tags.BlockTags;
2021-06-11 14:02:28 +02:00
import net.minecraft.util.Mth;
2022-12-07 21:16:54 +01:00
import net.minecraft.world.entity.Entity;
2021-06-11 14:02:28 +02:00
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;
2022-12-07 21:16:54 +01:00
@@ -190,7 +191,10 @@ public class PortalShape {
2021-06-11 14:02:28 +02:00
}
// CraftBukkit start - return boolean
- public boolean createPortalBlocks() {
2021-06-11 14:02:28 +02:00
+ // Paper start - ItemActionContext param
+ @Deprecated public boolean createPortalBlocks() { return this.createPortalBlocks(null); }
+ public boolean createPortalBlocks(UseOnContext itemActionContext) {
2021-06-11 14:02:28 +02:00
+ // Paper end
2021-06-14 15:45:16 +02:00
org.bukkit.World bworld = this.level.getMinecraftWorld().getWorld();
2021-06-11 14:02:28 +02:00
// Copy below for loop
2022-12-07 21:16:54 +01:00
@@ -200,7 +204,7 @@ public class PortalShape {
2021-06-14 15:45:16 +02:00
this.blocks.setBlock(blockposition, iblockdata, 18);
2021-06-11 14:02:28 +02:00
});
2021-06-14 15:45:16 +02:00
- PortalCreateEvent event = new PortalCreateEvent((java.util.List<org.bukkit.block.BlockState>) (java.util.List) this.blocks.getList(), bworld, null, PortalCreateEvent.CreateReason.FIRE);
2021-06-11 14:02:28 +02:00
+ 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
2021-06-14 15:45:16 +02:00
this.level.getMinecraftWorld().getServer().server.getPluginManager().callEvent(event);
2021-06-11 14:02:28 +02:00
if (event.isCancelled()) {