SPIGOT-8001: Add BlockBrushEvent
This commit is contained in:
parent
1bd27f7985
commit
aa7768087a
@ -1,6 +1,6 @@
|
|||||||
--- a/net/minecraft/world/level/block/entity/BrushableBlockEntity.java
|
--- a/net/minecraft/world/level/block/entity/BrushableBlockEntity.java
|
||||||
+++ b/net/minecraft/world/level/block/entity/BrushableBlockEntity.java
|
+++ b/net/minecraft/world/level/block/entity/BrushableBlockEntity.java
|
||||||
@@ -31,6 +31,12 @@
|
@@ -31,6 +31,13 @@
|
||||||
import net.minecraft.world.phys.Vec3D;
|
import net.minecraft.world.phys.Vec3D;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
@ -8,12 +8,57 @@
|
|||||||
+import java.util.Arrays;
|
+import java.util.Arrays;
|
||||||
+import org.bukkit.craftbukkit.block.CraftBlock;
|
+import org.bukkit.craftbukkit.block.CraftBlock;
|
||||||
+import org.bukkit.craftbukkit.event.CraftEventFactory;
|
+import org.bukkit.craftbukkit.event.CraftEventFactory;
|
||||||
|
+import org.bukkit.event.block.BlockBrushEvent;
|
||||||
+// CraftBukkit end
|
+// CraftBukkit end
|
||||||
+
|
+
|
||||||
public class BrushableBlockEntity extends TileEntity {
|
public class BrushableBlockEntity extends TileEntity {
|
||||||
|
|
||||||
private static final Logger LOGGER = LogUtils.getLogger();
|
private static final Logger LOGGER = LogUtils.getLogger();
|
||||||
@@ -151,7 +157,10 @@
|
@@ -80,7 +87,12 @@
|
||||||
|
IBlockData iblockdata = this.getBlockState();
|
||||||
|
IBlockData iblockdata1 = (IBlockData) iblockdata.setValue(BlockProperties.DUSTED, k);
|
||||||
|
|
||||||
|
- worldserver.setBlock(this.getBlockPos(), iblockdata1, 3);
|
||||||
|
+ // CraftBukkit start
|
||||||
|
+ BlockBrushEvent event = CraftEventFactory.callBlockBrushEvent(worldserver, this.getBlockPos(), iblockdata1, 3, entityhuman);
|
||||||
|
+ if (!event.isCancelled()) {
|
||||||
|
+ event.getNewState().update(true);
|
||||||
|
+ }
|
||||||
|
+ // CraftBukkit end
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
@@ -121,10 +133,10 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
private void brushingCompleted(WorldServer worldserver, EntityHuman entityhuman, ItemStack itemstack) {
|
||||||
|
- this.dropContent(worldserver, entityhuman, itemstack);
|
||||||
|
+ // this.dropContent(worldserver, entityhuman, itemstack); // CraftBukkit - moved down
|
||||||
|
IBlockData iblockdata = this.getBlockState();
|
||||||
|
|
||||||
|
- worldserver.levelEvent(3008, this.getBlockPos(), Block.getId(iblockdata));
|
||||||
|
+ // worldserver.levelEvent(3008, this.getBlockPos(), Block.getId(iblockdata)); // CraftBukkit - moved down
|
||||||
|
Block block = this.getBlockState().getBlock();
|
||||||
|
Block block1;
|
||||||
|
|
||||||
|
@@ -134,7 +146,15 @@
|
||||||
|
block1 = Blocks.AIR;
|
||||||
|
}
|
||||||
|
|
||||||
|
- worldserver.setBlock(this.worldPosition, block1.defaultBlockState(), 3);
|
||||||
|
+ // CraftBukkit start
|
||||||
|
+ BlockBrushEvent event = CraftEventFactory.callBlockBrushEvent(worldserver, this.worldPosition, block1.defaultBlockState(), 3, entityhuman);
|
||||||
|
+ if (!event.isCancelled()) {
|
||||||
|
+ this.dropContent(worldserver, entityhuman, itemstack); // CraftBukkit - from above
|
||||||
|
+ worldserver.levelEvent(3008, this.getBlockPos(), Block.getId(iblockdata)); // CraftBukkit - from above
|
||||||
|
+
|
||||||
|
+ event.getNewState().update(true);
|
||||||
|
+ }
|
||||||
|
+ // CraftBukkit end
|
||||||
|
}
|
||||||
|
|
||||||
|
private void dropContent(WorldServer worldserver, EntityHuman entityhuman, ItemStack itemstack) {
|
||||||
|
@@ -151,7 +171,10 @@
|
||||||
EntityItem entityitem = new EntityItem(worldserver, d3, d4, d5, this.item.split(worldserver.random.nextInt(21) + 10));
|
EntityItem entityitem = new EntityItem(worldserver, d3, d4, d5, this.item.split(worldserver.random.nextInt(21) + 10));
|
||||||
|
|
||||||
entityitem.setDeltaMovement(Vec3D.ZERO);
|
entityitem.setDeltaMovement(Vec3D.ZERO);
|
||||||
|
@ -149,6 +149,7 @@ import org.bukkit.event.Event.Result;
|
|||||||
import org.bukkit.event.block.Action;
|
import org.bukkit.event.block.Action;
|
||||||
import org.bukkit.event.block.BellResonateEvent;
|
import org.bukkit.event.block.BellResonateEvent;
|
||||||
import org.bukkit.event.block.BellRingEvent;
|
import org.bukkit.event.block.BellRingEvent;
|
||||||
|
import org.bukkit.event.block.BlockBrushEvent;
|
||||||
import org.bukkit.event.block.BlockDamageAbortEvent;
|
import org.bukkit.event.block.BlockDamageAbortEvent;
|
||||||
import org.bukkit.event.block.BlockDamageEvent;
|
import org.bukkit.event.block.BlockDamageEvent;
|
||||||
import org.bukkit.event.block.BlockDispenseLootEvent;
|
import org.bukkit.event.block.BlockDispenseLootEvent;
|
||||||
@ -1194,6 +1195,19 @@ public class CraftEventFactory {
|
|||||||
return !event.isCancelled();
|
return !event.isCancelled();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static BlockBrushEvent callBlockBrushEvent(World world, BlockPosition pos, IBlockData newData, int flag, EntityHuman entity) {
|
||||||
|
Player player = (Player) entity.getBukkitEntity();
|
||||||
|
|
||||||
|
Block block = CraftBlock.at(world, pos);
|
||||||
|
CraftBlockState state = (CraftBlockState) block.getState();
|
||||||
|
state.setData(newData);
|
||||||
|
|
||||||
|
BlockBrushEvent event = new BlockBrushEvent(block, state, player);
|
||||||
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
|
|
||||||
|
return event;
|
||||||
|
}
|
||||||
|
|
||||||
public static FluidLevelChangeEvent callFluidLevelChangeEvent(World world, BlockPosition block, IBlockData newData) {
|
public static FluidLevelChangeEvent callFluidLevelChangeEvent(World world, BlockPosition block, IBlockData newData) {
|
||||||
FluidLevelChangeEvent event = new FluidLevelChangeEvent(CraftBlock.at(world, block), CraftBlockData.fromData(newData));
|
FluidLevelChangeEvent event = new FluidLevelChangeEvent(CraftBlock.at(world, block), CraftBlockData.fromData(newData));
|
||||||
world.getCraftServer().getPluginManager().callEvent(event);
|
world.getCraftServer().getPluginManager().callEvent(event);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user