Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-12-22 06:20:06 +01:00
175 Zeilen
13 KiB
Diff
175 Zeilen
13 KiB
Diff
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||
|
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/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java
|
||
|
index 9151d84e2f6fb316525c74466589178769fbc8ef..ecb4cb5df868673e5aa2eec3fdd8618dbea09655 100644
|
||
|
--- a/src/main/java/net/minecraft/server/level/WorldServer.java
|
||
|
+++ b/src/main/java/net/minecraft/server/level/WorldServer.java
|
||
|
@@ -1657,15 +1657,17 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||
|
this.getMinecraftServer().getPlayerList().sendAll(new PacketPlayOutSpawnPosition(blockposition, f));
|
||
|
}
|
||
|
|
||
|
- 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 float v() {
|
||
|
return this.worldData.d();
|
||
|
diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityCow.java b/src/main/java/net/minecraft/world/entity/animal/EntityCow.java
|
||
|
index ef48ae4d398a1dd5bc67262ccdb5d8fc6bb2769c..1b43688ad232620410aa924cef02b54630ab1313 100644
|
||
|
--- a/src/main/java/net/minecraft/world/entity/animal/EntityCow.java
|
||
|
+++ b/src/main/java/net/minecraft/world/entity/animal/EntityCow.java
|
||
|
@@ -88,7 +88,7 @@ public class EntityCow extends EntityAnimal {
|
||
|
|
||
|
if (itemstack.getItem() == Items.BUCKET && !this.isBaby()) {
|
||
|
// CraftBukkit start - Got milk?
|
||
|
- 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
|
||
|
|
||
|
if (event.isCancelled()) {
|
||
|
return EnumInteractionResult.PASS;
|
||
|
diff --git a/src/main/java/net/minecraft/world/item/ItemBucket.java b/src/main/java/net/minecraft/world/item/ItemBucket.java
|
||
|
index 4bcac8defeaa146713cce43e04a51c1c9afddb1f..d126f668828e0788e369294c0b376ef52b344f2c 100644
|
||
|
--- a/src/main/java/net/minecraft/world/item/ItemBucket.java
|
||
|
+++ b/src/main/java/net/minecraft/world/item/ItemBucket.java
|
||
|
@@ -71,7 +71,7 @@ public class ItemBucket extends Item {
|
||
|
if (iblockdata.getBlock() instanceof IFluidSource) {
|
||
|
// CraftBukkit start
|
||
|
FluidType dummyFluid = ((IFluidSource) iblockdata.getBlock()).removeFluid(DummyGeneratorAccess.INSTANCE, blockposition, iblockdata);
|
||
|
- 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
|
||
|
|
||
|
if (event.isCancelled()) {
|
||
|
((EntityPlayer) entityhuman).playerConnection.sendPacket(new PacketPlayOutBlockChange(world, blockposition)); // SPIGOT-5163 (see PlayerInteractManager)
|
||
|
@@ -99,7 +99,7 @@ public class ItemBucket extends Item {
|
||
|
iblockdata = world.getType(blockposition);
|
||
|
BlockPosition blockposition2 = iblockdata.getBlock() instanceof IFluidContainer && this.fluidType == FluidTypes.WATER ? blockposition : blockposition1;
|
||
|
|
||
|
- 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
|
||
|
this.a(world, itemstack, blockposition2);
|
||
|
if (entityhuman instanceof EntityPlayer) {
|
||
|
CriterionTriggers.y.a((EntityPlayer) entityhuman, blockposition2, itemstack);
|
||
|
@@ -124,10 +124,12 @@ public class ItemBucket extends Item {
|
||
|
public void a(World world, ItemStack itemstack, BlockPosition blockposition) {}
|
||
|
|
||
|
public boolean a(@Nullable EntityHuman entityhuman, World world, BlockPosition blockposition, @Nullable MovingObjectPositionBlock movingobjectpositionblock) {
|
||
|
- return a(entityhuman, world, blockposition, movingobjectpositionblock, null, null, null);
|
||
|
+ // Paper start - add enumHand
|
||
|
+ 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) {
|
||
|
+ public boolean a(EntityHuman entityhuman, World world, BlockPosition blockposition, @Nullable MovingObjectPositionBlock movingobjectpositionblock, EnumDirection enumdirection, BlockPosition clicked, ItemStack itemstack, EnumHand enumhand) {
|
||
|
+ // Paper end
|
||
|
// CraftBukkit end
|
||
|
if (!(this.fluidType instanceof FluidTypeFlowing)) {
|
||
|
return false;
|
||
|
@@ -140,7 +142,7 @@ public class ItemBucket extends Item {
|
||
|
|
||
|
// 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
|
||
|
@@ -149,7 +151,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();
|
||
|
diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java
|
||
|
index 07c5cdd00930a55fd412ef95f71f55ee908189a1..88b1a0235bfc0b41ae1855f8900632e425730d1c 100644
|
||
|
--- a/src/main/java/net/minecraft/world/level/World.java
|
||
|
+++ b/src/main/java/net/minecraft/world/level/World.java
|
||
|
@@ -277,6 +277,17 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
||
|
}
|
||
|
// 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/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
||
|
index 31358b90784a6e983ff8b687021c721ed5d43eab..338b319910d12cf62ab9c5977257ad1ccec5544a 100644
|
||
|
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
||
|
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
||
|
@@ -234,7 +234,7 @@ public class CraftEventFactory {
|
||
|
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;
|
||
|
@@ -424,6 +424,20 @@ public class CraftEventFactory {
|
||
|
}
|
||
|
|
||
|
private static PlayerEvent getPlayerBucketEvent(boolean isFilling, WorldServer world, EntityHuman who, BlockPosition changed, BlockPosition clicked, EnumDirection clickedFace, ItemStack itemstack, net.minecraft.world.item.Item item) {
|
||
|
+ // Paper start - add enumHand
|
||
|
+ return getPlayerBucketEvent(isFilling, world, who, changed, clicked, clickedFace, itemstack, item, null);
|
||
|
+ }
|
||
|
+
|
||
|
+ 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);
|
||
|
+ }
|
||
|
+
|
||
|
+ public static PlayerBucketFillEvent callPlayerBucketFillEvent(World world, EntityHuman who, BlockPosition changed, BlockPosition clicked, EnumDirection clickedFace, ItemStack itemInHand, net.minecraft.world.item.Item bucket, EnumHand enumHand) {
|
||
|
+ return (PlayerBucketFillEvent) getPlayerBucketEvent(true, world, who, clicked, changed, clickedFace, itemInHand, bucket, enumHand);
|
||
|
+ }
|
||
|
+
|
||
|
+ private static PlayerEvent getPlayerBucketEvent(boolean isFilling, World world, EntityHuman who, BlockPosition changed, BlockPosition clicked, EnumDirection clickedFace, ItemStack itemstack, net.minecraft.world.item.Item item, EnumHand enumHand) {
|
||
|
+ // Paper end
|
||
|
Player player = (Player) who.getBukkitEntity();
|
||
|
CraftItemStack itemInHand = CraftItemStack.asNewCraftStack(item);
|
||
|
Material bucket = CraftMagicNumbers.getMaterial(itemstack.getItem());
|
||
|
@@ -436,10 +450,10 @@ public class CraftEventFactory {
|
||
|
|
||
|
PlayerEvent event;
|
||
|
if (isFilling) {
|
||
|
- 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()));
|
||
|
} else {
|
||
|
- 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()));
|
||
|
}
|
||
|
|