geforkt von Mirrors/Paper
SPIGOT-5731: PortalCreateEvent#getEntity returns null for nether portals ignited by flint and steel
By: md_5 <git@md-5.net>
Dieser Commit ist enthalten in:
Ursprung
1a0dce328a
Commit
8317d4c799
@ -218,7 +218,7 @@
|
|||||||
+ IBlockData block = world.getBlockState(newblockposition);
|
+ IBlockData block = world.getBlockState(newblockposition);
|
||||||
+
|
+
|
||||||
+ if (!(block.getBlock() instanceof BlockTileEntity)) { // Containers get placed automatically
|
+ if (!(block.getBlock() instanceof BlockTileEntity)) { // Containers get placed automatically
|
||||||
+ block.onPlace(world, newblockposition, oldBlock, true);
|
+ block.onPlace(world, newblockposition, oldBlock, true, itemactioncontext);
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ world.notifyAndUpdatePhysics(newblockposition, null, oldBlock, block, world.getBlockState(newblockposition), updateFlag, 512); // send null chunk as chunk.k() returns false by this point
|
+ world.notifyAndUpdatePhysics(newblockposition, null, oldBlock, block, world.getBlockState(newblockposition), updateFlag, 512); // send null chunk as chunk.k() returns false by this point
|
||||||
|
@ -1,6 +1,17 @@
|
|||||||
--- a/net/minecraft/world/level/block/BlockFireAbstract.java
|
--- a/net/minecraft/world/level/block/BlockFireAbstract.java
|
||||||
+++ b/net/minecraft/world/level/block/BlockFireAbstract.java
|
+++ b/net/minecraft/world/level/block/BlockFireAbstract.java
|
||||||
@@ -127,7 +127,14 @@
|
@@ -19,6 +19,10 @@
|
||||||
|
import net.minecraft.world.phys.shapes.VoxelShape;
|
||||||
|
import net.minecraft.world.phys.shapes.VoxelShapeCollision;
|
||||||
|
|
||||||
|
+// CraftBukkit start
|
||||||
|
+import net.minecraft.world.item.context.ItemActionContext;
|
||||||
|
+// CraftBukkit end
|
||||||
|
+
|
||||||
|
public abstract class BlockFireAbstract extends Block {
|
||||||
|
|
||||||
|
private static final int SECONDS_ON_FIRE = 8;
|
||||||
|
@@ -127,7 +131,14 @@
|
||||||
if (!entity.fireImmune()) {
|
if (!entity.fireImmune()) {
|
||||||
entity.setRemainingFireTicks(entity.getRemainingFireTicks() + 1);
|
entity.setRemainingFireTicks(entity.getRemainingFireTicks() + 1);
|
||||||
if (entity.getRemainingFireTicks() == 0) {
|
if (entity.getRemainingFireTicks() == 0) {
|
||||||
@ -16,7 +27,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -148,14 +155,14 @@
|
@@ -136,26 +147,26 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
- protected void onPlace(IBlockData iblockdata, World world, BlockPosition blockposition, IBlockData iblockdata1, boolean flag) {
|
||||||
|
+ protected void onPlace(IBlockData iblockdata, World world, BlockPosition blockposition, IBlockData iblockdata1, boolean flag, ItemActionContext context) { // CraftBukkit - context
|
||||||
|
if (!iblockdata1.is(iblockdata.getBlock())) {
|
||||||
|
if (inPortalDimension(world)) {
|
||||||
|
Optional<BlockPortalShape> optional = BlockPortalShape.findEmptyPortalShape(world, blockposition, EnumDirection.EnumAxis.X);
|
||||||
|
|
||||||
|
if (optional.isPresent()) {
|
||||||
|
- ((BlockPortalShape) optional.get()).createPortalBlocks();
|
||||||
|
+ ((BlockPortalShape) optional.get()).createPortalBlocks((context == null) ? null : context.getPlayer()); // CraftBukkit - player
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!iblockdata.canSurvive(world, blockposition)) {
|
if (!iblockdata.canSurvive(world, blockposition)) {
|
||||||
@ -33,7 +58,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -203,4 +210,12 @@
|
@@ -203,4 +214,12 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,30 @@
|
|||||||
--- a/net/minecraft/world/level/block/state/BlockBase.java
|
--- a/net/minecraft/world/level/block/state/BlockBase.java
|
||||||
+++ b/net/minecraft/world/level/block/state/BlockBase.java
|
+++ b/net/minecraft/world/level/block/state/BlockBase.java
|
||||||
@@ -173,8 +173,10 @@
|
@@ -81,6 +81,10 @@
|
||||||
|
import net.minecraft.world.phys.shapes.VoxelShapeCollision;
|
||||||
|
import net.minecraft.world.phys.shapes.VoxelShapes;
|
||||||
|
|
||||||
|
+// CraftBukkit start
|
||||||
|
+import net.minecraft.world.item.context.ItemActionContext;
|
||||||
|
+// CraftBukkit end
|
||||||
|
+
|
||||||
|
public abstract class BlockBase implements FeatureElement {
|
||||||
|
|
||||||
|
protected static final EnumDirection[] UPDATE_SHAPE_ORDER = new EnumDirection[]{EnumDirection.WEST, EnumDirection.EAST, EnumDirection.NORTH, EnumDirection.SOUTH, EnumDirection.DOWN, EnumDirection.UP};
|
||||||
|
@@ -156,6 +160,12 @@
|
||||||
|
|
||||||
|
protected void onPlace(IBlockData iblockdata, World world, BlockPosition blockposition, IBlockData iblockdata1, boolean flag) {}
|
||||||
|
|
||||||
|
+ // CraftBukkit start
|
||||||
|
+ protected void onPlace(IBlockData iblockdata, World world, BlockPosition blockposition, IBlockData iblockdata1, boolean flag, @Nullable ItemActionContext context) {
|
||||||
|
+ this.onPlace(iblockdata, world, blockposition, iblockdata1, flag);
|
||||||
|
+ }
|
||||||
|
+ // CraftBukkit end
|
||||||
|
+
|
||||||
|
protected void onRemove(IBlockData iblockdata, World world, BlockPosition blockposition, IBlockData iblockdata1, boolean flag) {
|
||||||
|
if (iblockdata.hasBlockEntity() && !iblockdata.is(iblockdata1.getBlock())) {
|
||||||
|
world.removeBlockEntity(blockposition);
|
||||||
|
@@ -173,8 +183,10 @@
|
||||||
TileEntity tileentity = iblockdata.hasBlockEntity() ? world.getBlockEntity(blockposition) : null;
|
TileEntity tileentity = iblockdata.hasBlockEntity() ? world.getBlockEntity(blockposition) : null;
|
||||||
LootParams.a lootparams_a = (new LootParams.a(worldserver)).withParameter(LootContextParameters.ORIGIN, Vec3D.atCenterOf(blockposition)).withParameter(LootContextParameters.TOOL, ItemStack.EMPTY).withOptionalParameter(LootContextParameters.BLOCK_ENTITY, tileentity).withOptionalParameter(LootContextParameters.THIS_ENTITY, explosion.getDirectSourceEntity());
|
LootParams.a lootparams_a = (new LootParams.a(worldserver)).withParameter(LootContextParameters.ORIGIN, Vec3D.atCenterOf(blockposition)).withParameter(LootContextParameters.TOOL, ItemStack.EMPTY).withOptionalParameter(LootContextParameters.BLOCK_ENTITY, tileentity).withOptionalParameter(LootContextParameters.THIS_ENTITY, explosion.getDirectSourceEntity());
|
||||||
|
|
||||||
@ -13,3 +37,18 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
iblockdata.spawnAfterBreak(worldserver, blockposition, ItemStack.EMPTY, flag);
|
iblockdata.spawnAfterBreak(worldserver, blockposition, ItemStack.EMPTY, flag);
|
||||||
|
@@ -1066,7 +1078,13 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onPlace(World world, BlockPosition blockposition, IBlockData iblockdata, boolean flag) {
|
||||||
|
- this.getBlock().onPlace(this.asState(), world, blockposition, iblockdata, flag);
|
||||||
|
+ // CraftBukkit start
|
||||||
|
+ this.onPlace(world, blockposition, iblockdata, flag, null);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public void onPlace(World world, BlockPosition blockposition, IBlockData iblockdata, boolean flag, @Nullable ItemActionContext context) {
|
||||||
|
+ this.getBlock().onPlace(this.asState(), world, blockposition, iblockdata, flag, context);
|
||||||
|
+ // CraftBukkit end
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onRemove(World world, BlockPosition blockposition, IBlockData iblockdata, boolean flag) {
|
||||||
|
@ -1,18 +1,17 @@
|
|||||||
--- a/net/minecraft/world/level/portal/BlockPortalShape.java
|
--- a/net/minecraft/world/level/portal/BlockPortalShape.java
|
||||||
+++ b/net/minecraft/world/level/portal/BlockPortalShape.java
|
+++ b/net/minecraft/world/level/portal/BlockPortalShape.java
|
||||||
@@ -21,6 +21,11 @@
|
@@ -21,6 +21,10 @@
|
||||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
import net.minecraft.world.phys.shapes.VoxelShape;
|
||||||
import net.minecraft.world.phys.shapes.VoxelShapes;
|
import net.minecraft.world.phys.shapes.VoxelShapes;
|
||||||
|
|
||||||
+// CraftBukkit start
|
+// CraftBukkit start
|
||||||
+import org.bukkit.craftbukkit.event.CraftPortalEvent;
|
|
||||||
+import org.bukkit.event.world.PortalCreateEvent;
|
+import org.bukkit.event.world.PortalCreateEvent;
|
||||||
+// CraftBukkit end
|
+// CraftBukkit end
|
||||||
+
|
+
|
||||||
public class BlockPortalShape {
|
public class BlockPortalShape {
|
||||||
|
|
||||||
private static final int MIN_WIDTH = 2;
|
private static final int MIN_WIDTH = 2;
|
||||||
@@ -40,6 +45,7 @@
|
@@ -40,6 +44,7 @@
|
||||||
private BlockPosition bottomLeft;
|
private BlockPosition bottomLeft;
|
||||||
private int height;
|
private int height;
|
||||||
private final int width;
|
private final int width;
|
||||||
@ -20,7 +19,7 @@
|
|||||||
|
|
||||||
public static Optional<BlockPortalShape> findEmptyPortalShape(GeneratorAccess generatoraccess, BlockPosition blockposition, EnumDirection.EnumAxis enumdirection_enumaxis) {
|
public static Optional<BlockPortalShape> findEmptyPortalShape(GeneratorAccess generatoraccess, BlockPosition blockposition, EnumDirection.EnumAxis enumdirection_enumaxis) {
|
||||||
return findPortalShape(generatoraccess, blockposition, (blockportalshape) -> {
|
return findPortalShape(generatoraccess, blockposition, (blockportalshape) -> {
|
||||||
@@ -60,6 +66,7 @@
|
@@ -60,6 +65,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
public BlockPortalShape(GeneratorAccess generatoraccess, BlockPosition blockposition, EnumDirection.EnumAxis enumdirection_enumaxis) {
|
public BlockPortalShape(GeneratorAccess generatoraccess, BlockPosition blockposition, EnumDirection.EnumAxis enumdirection_enumaxis) {
|
||||||
@ -28,7 +27,7 @@
|
|||||||
this.level = generatoraccess;
|
this.level = generatoraccess;
|
||||||
this.axis = enumdirection_enumaxis;
|
this.axis = enumdirection_enumaxis;
|
||||||
this.rightDir = enumdirection_enumaxis == EnumDirection.EnumAxis.X ? EnumDirection.WEST : EnumDirection.SOUTH;
|
this.rightDir = enumdirection_enumaxis == EnumDirection.EnumAxis.X ? EnumDirection.WEST : EnumDirection.SOUTH;
|
||||||
@@ -104,6 +111,7 @@
|
@@ -104,6 +110,7 @@
|
||||||
|
|
||||||
if (!isEmpty(iblockdata)) {
|
if (!isEmpty(iblockdata)) {
|
||||||
if (BlockPortalShape.FRAME.test(iblockdata, this.level, blockposition_mutableblockposition)) {
|
if (BlockPortalShape.FRAME.test(iblockdata, this.level, blockposition_mutableblockposition)) {
|
||||||
@ -36,7 +35,7 @@
|
|||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -114,6 +122,7 @@
|
@@ -114,6 +121,7 @@
|
||||||
if (!BlockPortalShape.FRAME.test(iblockdata1, this.level, blockposition_mutableblockposition)) {
|
if (!BlockPortalShape.FRAME.test(iblockdata1, this.level, blockposition_mutableblockposition)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -44,7 +43,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -133,6 +142,7 @@
|
@@ -133,6 +141,7 @@
|
||||||
if (!BlockPortalShape.FRAME.test(this.level.getBlockState(blockposition_mutableblockposition1), this.level, blockposition_mutableblockposition1)) {
|
if (!BlockPortalShape.FRAME.test(this.level.getBlockState(blockposition_mutableblockposition1), this.level, blockposition_mutableblockposition1)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -52,7 +51,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -162,6 +172,10 @@
|
@@ -162,6 +171,10 @@
|
||||||
++this.numPortalBlocks;
|
++this.numPortalBlocks;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -63,13 +62,13 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
return 21;
|
return 21;
|
||||||
@@ -175,12 +189,28 @@
|
@@ -175,12 +188,28 @@
|
||||||
return this.bottomLeft != null && this.width >= 2 && this.width <= 21 && this.height >= 3 && this.height <= 21;
|
return this.bottomLeft != null && this.width >= 2 && this.width <= 21 && this.height >= 3 && this.height <= 21;
|
||||||
}
|
}
|
||||||
|
|
||||||
- public void createPortalBlocks() {
|
- public void createPortalBlocks() {
|
||||||
+ // CraftBukkit start - return boolean
|
+ // CraftBukkit start - return boolean, add entity
|
||||||
+ public boolean createPortalBlocks() {
|
+ public boolean createPortalBlocks(Entity entity) {
|
||||||
+ org.bukkit.World bworld = this.level.getMinecraftWorld().getWorld();
|
+ org.bukkit.World bworld = this.level.getMinecraftWorld().getWorld();
|
||||||
+
|
+
|
||||||
+ // Copy below for loop
|
+ // Copy below for loop
|
||||||
@ -79,7 +78,7 @@
|
|||||||
+ blocks.setBlock(blockposition, iblockdata, 18);
|
+ 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, (entity == null) ? null : entity.getBukkitEntity(), PortalCreateEvent.CreateReason.FIRE);
|
||||||
+ this.level.getMinecraftWorld().getServer().server.getPluginManager().callEvent(event);
|
+ this.level.getMinecraftWorld().getServer().server.getPluginManager().callEvent(event);
|
||||||
+
|
+
|
||||||
+ if (event.isCancelled()) {
|
+ if (event.isCancelled()) {
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren