geforkt von Mirrors/Paper
148 Zeilen
8.8 KiB
Diff
148 Zeilen
8.8 KiB
Diff
|
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 04b717326524f400da3562655c25db59e72814ec..a9256fc4a0bc3cd277cb372a9c090028e03482f5 100644
|
||
|
--- a/src/main/java/net/minecraft/world/item/ItemStack.java
|
||
|
+++ b/src/main/java/net/minecraft/world/item/ItemStack.java
|
||
|
@@ -366,7 +366,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 cd005f7dbfcaf3cebae3a92da36e0d40c93dbf79..ad37261e716b15d62fc2083d137cdac818308cdd 100644
|
||
|
--- a/src/main/java/net/minecraft/world/level/block/BaseFireBlock.java
|
||
|
+++ b/src/main/java/net/minecraft/world/level/block/BaseFireBlock.java
|
||
|
@@ -7,6 +7,7 @@ import net.minecraft.world.damagesource.DamageSource;
|
||
|
import net.minecraft.world.entity.Entity;
|
||
|
import net.minecraft.world.entity.player.Player;
|
||
|
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.Level;
|
||
|
import net.minecraft.world.level.LevelAccessor;
|
||
|
@@ -66,20 +67,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, UseOnContext itemActionContext) {
|
||
|
+ // Paper end
|
||
|
+ if (!iblockdata1.is(iblockdata.getBlock())) {
|
||
|
if (inPortalDimension(world)) {
|
||
|
- Optional<PortalShape> optional = PortalShape.findEmptyPortalShape((LevelAccessor) world, pos, Direction.Axis.X);
|
||
|
+ Optional<PortalShape> optional = PortalShape.findEmptyPortalShape((LevelAccessor) world, blockposition, Direction.Axis.X);
|
||
|
|
||
|
if (optional.isPresent()) {
|
||
|
- ((PortalShape) optional.get()).createPortal();
|
||
|
+ ((PortalShape) optional.get()).createPortal(itemActionContext); // Paper - pass ItemActionContext param
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
- if (!state.canSurvive(world, pos)) {
|
||
|
- 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 ac63c5bef5b35b158e57835d765bbdd15fc60664..e690e7c366fc087d3b28d61323dcc78bb7154aed 100644
|
||
|
--- a/src/main/java/net/minecraft/world/level/block/FireBlock.java
|
||
|
+++ b/src/main/java/net/minecraft/world/level/block/FireBlock.java
|
||
|
@@ -15,6 +15,7 @@ import net.minecraft.core.Vec3i;
|
||
|
import net.minecraft.server.MCUtil;
|
||
|
import net.minecraft.server.level.ServerLevel;
|
||
|
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;
|
||
|
@@ -363,9 +364,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.getBlockTicks().a(pos, this, 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.getBlockTicks().a(blockposition, this, getFireTickDelay(world.random));
|
||
|
}
|
||
|
|
||
|
private static int getFireTickDelay(Random 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 df2836b071158729728411f5b228cc38dddd4d4e..f2fefdad26057c722085e60ba837fe2c117f55f7 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
|
||
|
@@ -32,6 +32,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;
|
||
|
@@ -119,6 +120,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
|
||
|
public void onPlace(BlockState state, Level world, BlockPos pos, BlockState oldState, boolean notify) {
|
||
|
org.spigotmc.AsyncCatcher.catchOp("block onPlace"); // Spigot
|
||
|
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 7a99adbe39ca2566d42ed67dc9d6f609005f3d6f..500744b6383390266efed9e35a000511210cb5b9 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.tags.Tag;
|
||
|
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;
|
||
|
@@ -181,7 +182,10 @@ public class PortalShape {
|
||
|
}
|
||
|
|
||
|
// CraftBukkit start - return boolean
|
||
|
- public boolean createPortal() {
|
||
|
+ // Paper start - ItemActionContext param
|
||
|
+ @Deprecated public boolean createPortal() { return this.createPortal(null); }
|
||
|
+ public boolean createPortal(UseOnContext itemActionContext) {
|
||
|
+ // Paper end
|
||
|
org.bukkit.World bworld = this.level.getLevel().getWorld();
|
||
|
|
||
|
// Copy below for loop
|
||
|
@@ -190,8 +194,7 @@ public class PortalShape {
|
||
|
BlockPos.betweenClosed(this.bottomLeft, this.bottomLeft.relative(Direction.UP, this.height - 1).relative(this.rightDir, this.width - 1)).forEach((blockposition) -> {
|
||
|
blocks.setBlock(blockposition, iblockdata, 18);
|
||
|
});
|
||
|
-
|
||
|
- PortalCreateEvent event = new PortalCreateEvent((java.util.List<org.bukkit.block.BlockState>) (java.util.List) 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.getLevel().getServer().server.getPluginManager().callEvent(event);
|
||
|
|
||
|
if (event.isCancelled()) {
|