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-08-25 04:22:08 +02:00
|
|
|
index c20484220edc849e43a1067d169d4d36f0059836..42e6761c8b18b79ffd3f4d5e853ea87a2c153c23 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-11-26 00:45:25 +01:00
|
|
|
index ce596bd1268eb7d6d20709fe1e00a59ccc50957d..3fc77d08e77b1594967c9e08efbd9102265603ea 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-08-25 04:22:08 +02:00
|
|
|
@@ -218,6 +218,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-11-18 04:45:18 +01:00
|
|
|
index 46624d1832eb76aed688da5e1cf6c7dc304d610b..c8a990ab5db73b9e13b60b55f10142fe20e8179a 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-11-18 04:45:18 +01:00
|
|
|
@@ -1536,15 +1536,17 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
2020-08-25 04:22:08 +02:00
|
|
|
this.getMinecraftServer().getPlayerList().sendAll(new PacketPlayOutSpawnPosition(blockposition, f));
|
2020-06-25 16:09:55 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
- 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
|
|
|
|
|
2020-08-25 04:22:08 +02:00
|
|
|
public float v() {
|
|
|
|
return this.worldData.d();
|
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
|
2021-01-01 05:03:19 +01:00
|
|
|
index 6b62317f6a5e8a9bb8fdfc901835d0c28d3eeeda..94a3a40fd14ecfcda8ca6a29edb2787f4babb154 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
|
2021-01-01 05:03:19 +01:00
|
|
|
@@ -232,7 +232,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;
|
2021-01-01 05:03:19 +01:00
|
|
|
@@ -411,6 +411,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());
|
2021-01-01 05:03:19 +01:00
|
|
|
@@ -423,10 +437,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
|
|
|
}
|
|
|
|
|