Paper/nms-patches/BlockSoil.patch

68 lines
3.4 KiB
Diff
Raw Normal View History

2015-05-25 12:37:24 +02:00
--- a/net/minecraft/server/BlockSoil.java
+++ b/net/minecraft/server/BlockSoil.java
2018-07-15 02:00:00 +02:00
@@ -3,6 +3,11 @@
import java.util.Iterator;
import java.util.Random;
+// CraftBukkit start
+import org.bukkit.event.entity.EntityInteractEvent;
+import org.bukkit.craftbukkit.event.CraftEventFactory;
+// CraftBukkit end
+
public class BlockSoil extends Block {
2018-08-26 04:00:00 +02:00
public static final BlockStateInteger MOISTURE = BlockProperties.ai;
2018-09-09 10:53:38 +02:00
@@ -51,26 +56,49 @@
if (!a((IWorldReader) world, blockposition) && !world.isRainingAt(blockposition.up())) {
if (i > 0) {
- world.setTypeAndData(blockposition, (IBlockData) iblockdata.set(BlockSoil.MOISTURE, Integer.valueOf(i - 1)), 2);
+ org.bukkit.craftbukkit.event.CraftEventFactory.handleMoistureChangeEvent(world, blockposition, (IBlockData) iblockdata.set(BlockSoil.MOISTURE, Integer.valueOf(i - 1)), 2); // CraftBukkit
} else if (!a((IBlockAccess) world, blockposition)) {
b(iblockdata, world, blockposition);
}
} else if (i < 7) {
- world.setTypeAndData(blockposition, (IBlockData) iblockdata.set(BlockSoil.MOISTURE, Integer.valueOf(7)), 2);
+ org.bukkit.craftbukkit.event.CraftEventFactory.handleMoistureChangeEvent(world, blockposition, (IBlockData) iblockdata.set(BlockSoil.MOISTURE, Integer.valueOf(7)), 2); // CraftBukkit
}
}
}
2015-07-30 08:56:52 +02:00
public void fallOn(World world, BlockPosition blockposition, Entity entity, float f) {
+ super.fallOn(world, blockposition, entity, f); // CraftBukkit - moved here as game rules / events shouldn't affect fall damage.
2016-02-29 22:32:46 +01:00
if (!world.isClientSide && world.random.nextFloat() < f - 0.5F && entity instanceof EntityLiving && (entity instanceof EntityHuman || world.getGameRules().getBoolean("mobGriefing")) && entity.width * entity.width * entity.length > 0.512F) {
+ // CraftBukkit start - Interact soil
+ org.bukkit.event.Cancellable cancellable;
+ if (entity instanceof EntityHuman) {
+ cancellable = CraftEventFactory.callPlayerInteractEvent((EntityHuman) entity, org.bukkit.event.block.Action.PHYSICAL, blockposition, null, null, null);
2016-02-29 22:32:46 +01:00
+ } else {
+ cancellable = new EntityInteractEvent(entity.getBukkitEntity(), world.getWorld().getBlockAt(blockposition.getX(), blockposition.getY(), blockposition.getZ()));
+ world.getServer().getPluginManager().callEvent((EntityInteractEvent) cancellable);
+ }
+
2016-02-29 22:32:46 +01:00
+ if (cancellable.isCancelled()) {
+ return;
+ }
+
2018-07-15 02:00:00 +02:00
+ if (CraftEventFactory.callEntityChangeBlockEvent(entity, blockposition, Blocks.DIRT.getBlockData()).isCancelled()) {
2016-02-29 22:32:46 +01:00
+ return;
+ }
+ // CraftBukkit end
2018-07-15 02:00:00 +02:00
b(world.getType(blockposition), world, blockposition);
}
2016-02-29 22:32:46 +01:00
- super.fallOn(world, blockposition, entity, f);
+ // super.fallOn(world, blockposition, entity, f); // CraftBukkit - moved up
}
2018-08-26 04:00:00 +02:00
public static void b(IBlockData iblockdata, World world, BlockPosition blockposition) {
+ // CraftBukkit start
2018-07-15 02:00:00 +02:00
+ if (CraftEventFactory.callBlockFadeEvent(world, blockposition, Blocks.DIRT.getBlockData()).isCancelled()) {
+ return;
+ }
+ // CraftBukkit end
2018-08-26 04:00:00 +02:00
world.setTypeUpdate(blockposition, a(iblockdata, Blocks.DIRT.getBlockData(), world, blockposition));
2018-07-15 02:00:00 +02:00
}