2020-05-06 11:48:49 +02:00
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
2018-08-07 16:44:44 +02:00
|
|
|
From: BillyGalbreath <Blake.Galbreath@GMail.com>
|
|
|
|
Date: Thu, 2 Aug 2018 08:44:35 -0500
|
|
|
|
Subject: [PATCH] Add hand to bucket events
|
|
|
|
|
|
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/EntityCow.java b/src/main/java/net/minecraft/server/EntityCow.java
|
2020-06-25 16:09:55 +02:00
|
|
|
index 28f97aea9c64678c6e6f821482ad47388af83089..30ee6df6b47c7cfa555a757a01270b986e4fdf9e 100644
|
2018-08-07 16:44:44 +02:00
|
|
|
--- a/src/main/java/net/minecraft/server/EntityCow.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/EntityCow.java
|
2020-06-25 16:09:55 +02:00
|
|
|
@@ -58,7 +58,7 @@ public class EntityCow extends EntityAnimal {
|
2019-08-26 16:25:58 +02:00
|
|
|
|
2020-06-25 16:09:55 +02:00
|
|
|
if (itemstack.getItem() == Items.BUCKET && !this.isBaby()) {
|
2018-08-07 16:44:44 +02:00
|
|
|
// CraftBukkit start - Got milk?
|
2020-06-25 16:09:55 +02:00
|
|
|
- org.bukkit.event.player.PlayerBucketFillEvent event = CraftEventFactory.callPlayerBucketFillEvent((WorldServer) entityhuman.world, entityhuman, this.getChunkCoordinates(), this.getChunkCoordinates(), null, itemstack, Items.MILK_BUCKET);
|
|
|
|
+ org.bukkit.event.player.PlayerBucketFillEvent event = CraftEventFactory.callPlayerBucketFillEvent((WorldServer) entityhuman.world, entityhuman, this.getChunkCoordinates(), this.getChunkCoordinates(), null, itemstack, Items.MILK_BUCKET, enumhand); // Paper - add enumHand
|
2018-08-07 16:44:44 +02:00
|
|
|
|
|
|
|
if (event.isCancelled()) {
|
2020-06-25 16:09:55 +02:00
|
|
|
return EnumInteractionResult.PASS;
|
2018-08-07 16:44:44 +02:00
|
|
|
diff --git a/src/main/java/net/minecraft/server/ItemBucket.java b/src/main/java/net/minecraft/server/ItemBucket.java
|
2020-06-29 16:03:41 +02:00
|
|
|
index 48958308a89cbe39e1b4dddcdd8d1d0b5ece6339..120bf8436fd82294c339add2e7bff1cda8311aea 100644
|
2018-08-07 16:44:44 +02:00
|
|
|
--- a/src/main/java/net/minecraft/server/ItemBucket.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/ItemBucket.java
|
2019-12-12 01:03:31 +01:00
|
|
|
@@ -41,7 +41,7 @@ public class ItemBucket extends Item {
|
2018-08-07 16:44:44 +02:00
|
|
|
if (iblockdata.getBlock() instanceof IFluidSource) {
|
|
|
|
// CraftBukkit start
|
2019-01-01 04:15:55 +01:00
|
|
|
FluidType dummyFluid = ((IFluidSource) iblockdata.getBlock()).removeFluid(DummyGeneratorAccess.INSTANCE, blockposition, iblockdata);
|
2020-06-25 16:09:55 +02:00
|
|
|
- PlayerBucketFillEvent event = CraftEventFactory.callPlayerBucketFillEvent((WorldServer) world, entityhuman, blockposition, blockposition, movingobjectpositionblock.getDirection(), itemstack, dummyFluid.a());
|
|
|
|
+ PlayerBucketFillEvent event = CraftEventFactory.callPlayerBucketFillEvent((WorldServer) world, entityhuman, blockposition, blockposition, movingobjectpositionblock.getDirection(), itemstack, dummyFluid.a(), enumhand); // Paper - add enumhand
|
2018-08-07 16:44:44 +02:00
|
|
|
|
|
|
|
if (event.isCancelled()) {
|
2019-07-17 00:09:32 +02:00
|
|
|
((EntityPlayer) entityhuman).playerConnection.sendPacket(new PacketPlayOutBlockChange(world, blockposition)); // SPIGOT-5163 (see PlayerInteractManager)
|
2019-12-12 01:03:31 +01:00
|
|
|
@@ -69,7 +69,7 @@ public class ItemBucket extends Item {
|
2018-08-07 16:44:44 +02:00
|
|
|
iblockdata = world.getType(blockposition);
|
2019-12-12 01:03:31 +01:00
|
|
|
BlockPosition blockposition2 = iblockdata.getBlock() instanceof IFluidContainer && this.fluidType == FluidTypes.WATER ? blockposition : blockposition1;
|
2018-08-07 16:44:44 +02:00
|
|
|
|
2020-06-25 16:09:55 +02:00
|
|
|
- if (this.a(entityhuman, world, blockposition2, movingobjectpositionblock1, movingobjectpositionblock1.getDirection(), blockposition, itemstack)) { // CraftBukkit
|
|
|
|
+ if (this.a(entityhuman, world, blockposition2, movingobjectpositionblock1, movingobjectpositionblock1.getDirection(), blockposition, itemstack, enumhand)) { // CraftBukkit // Paper - add enumhand
|
2019-12-12 01:03:31 +01:00
|
|
|
this.a(world, itemstack, blockposition2);
|
2018-08-07 16:44:44 +02:00
|
|
|
if (entityhuman instanceof EntityPlayer) {
|
2019-12-12 01:03:31 +01:00
|
|
|
CriterionTriggers.y.a((EntityPlayer) entityhuman, blockposition2, itemstack);
|
2020-06-25 16:09:55 +02:00
|
|
|
@@ -94,10 +94,12 @@ public class ItemBucket extends Item {
|
|
|
|
public void a(World world, ItemStack itemstack, BlockPosition blockposition) {}
|
2018-08-07 16:44:44 +02:00
|
|
|
|
2019-12-12 01:03:31 +01:00
|
|
|
public boolean a(@Nullable EntityHuman entityhuman, World world, BlockPosition blockposition, @Nullable MovingObjectPositionBlock movingobjectpositionblock) {
|
|
|
|
- return a(entityhuman, world, blockposition, movingobjectpositionblock, null, null, null);
|
2018-08-07 16:44:44 +02:00
|
|
|
+ // Paper start - add enumHand
|
2019-12-12 01:03:31 +01:00
|
|
|
+ return a(entityhuman, world, blockposition, movingobjectpositionblock, null, null, null, null);
|
|
|
|
}
|
|
|
|
|
|
|
|
- public boolean a(EntityHuman entityhuman, World world, BlockPosition blockposition, @Nullable MovingObjectPositionBlock movingobjectpositionblock, EnumDirection enumdirection, BlockPosition clicked, ItemStack itemstack) {
|
2019-05-05 04:23:25 +02:00
|
|
|
+ public boolean a(EntityHuman entityhuman, World world, BlockPosition blockposition, @Nullable MovingObjectPositionBlock movingobjectpositionblock, EnumDirection enumdirection, BlockPosition clicked, ItemStack itemstack, EnumHand enumhand) {
|
2018-08-07 16:44:44 +02:00
|
|
|
+ // Paper end
|
|
|
|
// CraftBukkit end
|
2018-08-26 20:11:49 +02:00
|
|
|
if (!(this.fluidType instanceof FluidTypeFlowing)) {
|
2018-08-07 16:44:44 +02:00
|
|
|
return false;
|
2020-06-25 16:09:55 +02:00
|
|
|
@@ -110,7 +112,7 @@ public class ItemBucket extends Item {
|
2018-08-07 16:44:44 +02:00
|
|
|
|
2020-06-25 16:09:55 +02:00
|
|
|
// CraftBukkit start
|
|
|
|
if (flag1 && entityhuman != null) {
|
|
|
|
- PlayerBucketEmptyEvent event = CraftEventFactory.callPlayerBucketEmptyEvent((WorldServer) world, entityhuman, blockposition, clicked, enumdirection, itemstack);
|
|
|
|
+ PlayerBucketEmptyEvent event = CraftEventFactory.callPlayerBucketEmptyEvent((WorldServer) world, entityhuman, blockposition, clicked, enumdirection, itemstack, enumhand); // Paper - add enumhand
|
|
|
|
if (event.isCancelled()) {
|
|
|
|
((EntityPlayer) entityhuman).playerConnection.sendPacket(new PacketPlayOutBlockChange(world, blockposition)); // SPIGOT-4238: needed when looking through entity
|
|
|
|
((EntityPlayer) entityhuman).getBukkitEntity().updateInventory(); // SPIGOT-4541
|
2020-06-29 16:03:41 +02:00
|
|
|
@@ -119,7 +121,7 @@ public class ItemBucket extends Item {
|
|
|
|
}
|
|
|
|
// CraftBukkit end
|
|
|
|
if (!flag1) {
|
|
|
|
- return movingobjectpositionblock != null && this.a(entityhuman, world, movingobjectpositionblock.getBlockPosition().shift(movingobjectpositionblock.getDirection()), (MovingObjectPositionBlock) null, enumdirection, clicked, itemstack); // CraftBukkit
|
|
|
|
+ return movingobjectpositionblock != null && this.a(entityhuman, world, movingobjectpositionblock.getBlockPosition().shift(movingobjectpositionblock.getDirection()), (MovingObjectPositionBlock) null, enumdirection, clicked, itemstack, enumhand); // CraftBukkit // Paper - add enumhand
|
|
|
|
} else if (world.getDimensionManager().isNether() && this.fluidType.a((Tag) TagsFluid.WATER)) {
|
|
|
|
int i = blockposition.getX();
|
|
|
|
int j = blockposition.getY();
|
2020-06-25 16:09:55 +02:00
|
|
|
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
2020-07-14 12:58:55 +02:00
|
|
|
index 9b6912f6e7b3c289948325a6985d9c961a8a8e30..a0f93486b21e3bdbcf3b705c005c2e13f75589ed 100644
|
2020-06-25 16:09:55 +02:00
|
|
|
--- a/src/main/java/net/minecraft/server/World.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/World.java
|
2020-06-26 18:20:03 +02:00
|
|
|
@@ -212,6 +212,17 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
2020-06-25 16:09:55 +02:00
|
|
|
}
|
|
|
|
// Paper end
|
|
|
|
|
|
|
|
+ // Paper start - moved up from WorldServer
|
|
|
|
+ public BlockPosition getSpawn() {
|
|
|
|
+ BlockPosition blockposition = new BlockPosition(this.worldData.a(), this.worldData.b(), this.worldData.c());
|
|
|
|
+
|
|
|
|
+ if (!this.getWorldBorder().a(blockposition)) {
|
|
|
|
+ blockposition = this.getHighestBlockYAt(HeightMap.Type.MOTION_BLOCKING, new BlockPosition(this.getWorldBorder().getCenterX(), 0.0D, this.getWorldBorder().getCenterZ()));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return blockposition;
|
|
|
|
+ }
|
|
|
|
+ // Paper end
|
|
|
|
@Override
|
|
|
|
public boolean s_() {
|
|
|
|
return this.isClientSide;
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
|
2020-07-14 12:58:55 +02:00
|
|
|
index a05e117e76350da7663612f303444bb16b85ba21..dff170fb64ffd26cc7c5ab4b3863e48989c79ad4 100644
|
2020-06-25 16:09:55 +02:00
|
|
|
--- a/src/main/java/net/minecraft/server/WorldServer.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/WorldServer.java
|
2020-07-14 12:58:55 +02:00
|
|
|
@@ -1482,15 +1482,17 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
2020-06-25 16:09:55 +02:00
|
|
|
this.getMinecraftServer().getPlayerList().sendAll(new PacketPlayOutSpawnPosition(blockposition));
|
|
|
|
}
|
|
|
|
|
|
|
|
- public BlockPosition getSpawn() {
|
|
|
|
- BlockPosition blockposition = new BlockPosition(this.worldData.a(), this.worldData.b(), this.worldData.c());
|
|
|
|
-
|
|
|
|
- if (!this.getWorldBorder().a(blockposition)) {
|
|
|
|
- blockposition = this.getHighestBlockYAt(HeightMap.Type.MOTION_BLOCKING, new BlockPosition(this.getWorldBorder().getCenterX(), 0.0D, this.getWorldBorder().getCenterZ()));
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return blockposition;
|
|
|
|
- }
|
|
|
|
+ // Paper - moved up to World
|
|
|
|
+ //public BlockPosition getSpawn() {
|
|
|
|
+ // BlockPosition blockposition = new BlockPosition(this.worldData.a(), this.worldData.b(), this.worldData.c());
|
|
|
|
+ //
|
|
|
|
+ // if (!this.getWorldBorder().a(blockposition)) {
|
|
|
|
+ // blockposition = this.getHighestBlockYAt(HeightMap.Type.MOTION_BLOCKING, new BlockPosition(this.getWorldBorder().getCenterX(), 0.0D, this.getWorldBorder().getCenterZ()));
|
|
|
|
+ // }
|
|
|
|
+ //
|
|
|
|
+ // return blockposition;
|
|
|
|
+ //}
|
|
|
|
+ // Paper end
|
|
|
|
|
|
|
|
public LongSet getForceLoadedChunks() {
|
|
|
|
ForcedChunk forcedchunk = (ForcedChunk) this.getWorldPersistentData().b(ForcedChunk::new, "chunks");
|
2018-08-07 16:44:44 +02:00
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
2020-07-03 08:08:00 +02:00
|
|
|
index cf25906786e246cb8dfdb5f2cb39f6dc08c4d7ca..f6c8c371e22272983f80268dab8009ee029bed2a 100644
|
2018-08-07 16:44:44 +02:00
|
|
|
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
2020-07-03 08:08:00 +02:00
|
|
|
@@ -228,7 +228,7 @@ public class CraftEventFactory {
|
2020-06-25 16:09:55 +02:00
|
|
|
public static Entity entityDamage; // For use in EntityDamageByEntityEvent
|
|
|
|
|
|
|
|
// helper methods
|
|
|
|
- private static boolean canBuild(WorldServer world, Player player, int x, int z) {
|
|
|
|
+ private static boolean canBuild(World world, Player player, int x, int z) {
|
|
|
|
int spawnSize = Bukkit.getServer().getSpawnRadius();
|
|
|
|
|
|
|
|
if (world.getDimensionKey() != World.OVERWORLD) return true;
|
2020-07-03 08:08:00 +02:00
|
|
|
@@ -407,6 +407,20 @@ public class CraftEventFactory {
|
2019-12-12 01:03:31 +01:00
|
|
|
}
|
2018-08-07 16:44:44 +02:00
|
|
|
|
2020-06-25 16:09:55 +02:00
|
|
|
private static PlayerEvent getPlayerBucketEvent(boolean isFilling, WorldServer world, EntityHuman who, BlockPosition changed, BlockPosition clicked, EnumDirection clickedFace, ItemStack itemstack, net.minecraft.server.Item item) {
|
2019-12-12 01:03:31 +01:00
|
|
|
+ // Paper start - add enumHand
|
2019-08-26 16:25:58 +02:00
|
|
|
+ return getPlayerBucketEvent(isFilling, world, who, changed, clicked, clickedFace, itemstack, item, null);
|
2018-08-07 16:44:44 +02:00
|
|
|
+ }
|
|
|
|
+
|
2019-08-26 16:25:58 +02:00
|
|
|
+ public static PlayerBucketEmptyEvent callPlayerBucketEmptyEvent(World world, EntityHuman who, BlockPosition changed, BlockPosition clicked, EnumDirection clickedFace, ItemStack itemstack, EnumHand enumHand) {
|
|
|
|
+ return (PlayerBucketEmptyEvent) getPlayerBucketEvent(false, world, who, changed, clicked, clickedFace, itemstack, Items.BUCKET, enumHand);
|
2018-08-07 16:44:44 +02:00
|
|
|
+ }
|
|
|
|
+
|
2019-08-26 16:25:58 +02:00
|
|
|
+ public static PlayerBucketFillEvent callPlayerBucketFillEvent(World world, EntityHuman who, BlockPosition changed, BlockPosition clicked, EnumDirection clickedFace, ItemStack itemInHand, net.minecraft.server.Item bucket, EnumHand enumHand) {
|
|
|
|
+ return (PlayerBucketFillEvent) getPlayerBucketEvent(true, world, who, clicked, changed, clickedFace, itemInHand, bucket, enumHand);
|
2018-08-07 16:44:44 +02:00
|
|
|
+ }
|
|
|
|
+
|
2019-08-26 16:25:58 +02:00
|
|
|
+ private static PlayerEvent getPlayerBucketEvent(boolean isFilling, World world, EntityHuman who, BlockPosition changed, BlockPosition clicked, EnumDirection clickedFace, ItemStack itemstack, net.minecraft.server.Item item, EnumHand enumHand) {
|
2018-08-07 16:44:44 +02:00
|
|
|
+ // Paper end
|
2019-12-12 01:03:31 +01:00
|
|
|
Player player = (Player) who.getBukkitEntity();
|
2018-08-07 16:44:44 +02:00
|
|
|
CraftItemStack itemInHand = CraftItemStack.asNewCraftStack(item);
|
|
|
|
Material bucket = CraftMagicNumbers.getMaterial(itemstack.getItem());
|
2020-07-03 08:08:00 +02:00
|
|
|
@@ -419,10 +433,10 @@ public class CraftEventFactory {
|
2019-08-26 16:25:58 +02:00
|
|
|
|
|
|
|
PlayerEvent event;
|
2018-08-07 16:44:44 +02:00
|
|
|
if (isFilling) {
|
2019-08-26 16:25:58 +02:00
|
|
|
- event = new PlayerBucketFillEvent(player, block, blockClicked, blockFace, bucket, itemInHand);
|
|
|
|
+ event = new PlayerBucketFillEvent(player, block, blockClicked, blockFace, bucket, itemInHand, enumHand == null ? null : enumHand == EnumHand.OFF_HAND ? EquipmentSlot.OFF_HAND : EquipmentSlot.HAND); // Paper - add enumHand
|
|
|
|
((PlayerBucketFillEvent) event).setCancelled(!canBuild(world, player, changed.getX(), changed.getZ()));
|
2018-08-07 16:44:44 +02:00
|
|
|
} else {
|
2019-08-26 16:25:58 +02:00
|
|
|
- event = new PlayerBucketEmptyEvent(player, block, blockClicked, blockFace, bucket, itemInHand);
|
|
|
|
+ event = new PlayerBucketEmptyEvent(player, block, blockClicked, blockFace, bucket, itemInHand, enumHand == null ? null : enumHand == EnumHand.OFF_HAND ? EquipmentSlot.OFF_HAND : EquipmentSlot.HAND); // Paper - add enumHand
|
|
|
|
((PlayerBucketEmptyEvent) event).setCancelled(!canBuild(world, player, changed.getX(), changed.getZ()));
|
2018-08-07 16:44:44 +02:00
|
|
|
}
|
|
|
|
|