diff options
author | SoSeDiK <[email protected]> | 2024-05-30 00:45:01 +0300 |
---|---|---|
committer | GitHub <[email protected]> | 2024-05-29 23:45:01 +0200 |
commit | 27d2ed84f43e7637e85f15d880fbad022038413e (patch) | |
tree | ec044b2a1d87a56fbb90d9b22a2a15ffa9377128 /patches/server | |
parent | efd91e52a670a1e1bae5ad09cdffac35484c1ee2 (diff) | |
download | Paper-27d2ed84f43e7637e85f15d880fbad022038413e.tar.gz Paper-27d2ed84f43e7637e85f15d880fbad022038413e.zip |
Extend fishing API (#10634)
Adds a missing fishing state when the fish is lured and fires an event for it.
Also adds a way to control the fish swimming time towards the bobber.
Diffstat (limited to 'patches/server')
5 files changed, 91 insertions, 11 deletions
diff --git a/patches/server/0691-More-Projectile-API.patch b/patches/server/0691-More-Projectile-API.patch index 18230771e2..a70deb02fb 100644 --- a/patches/server/0691-More-Projectile-API.patch +++ b/patches/server/0691-More-Projectile-API.patch @@ -5,6 +5,7 @@ Subject: [PATCH] More Projectile API == AT == public net.minecraft.world.entity.projectile.FishingHook timeUntilLured +public net.minecraft.world.entity.projectile.FishingHook fishAngle public net.minecraft.world.entity.projectile.ShulkerBullet targetDeltaX public net.minecraft.world.entity.projectile.ShulkerBullet targetDeltaY public net.minecraft.world.entity.projectile.ShulkerBullet targetDeltaZ @@ -19,7 +20,33 @@ public net.minecraft.world.entity.projectile.Projectile canHitEntity(Lnet/minecr public net.minecraft.world.entity.projectile.FireworkRocketEntity getDefaultItem()Lnet/minecraft/world/item/ItemStack; Co-authored-by: Nassim Jahnke <[email protected]> +Co-authored-by: SoSeDiK <[email protected]> +diff --git a/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java b/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java +index 7d557c7ec6fb1763395f4920a170bd4e4ba6747f..e603307871b623ce437f4b1b68ab306fbdd9919d 100644 +--- a/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java ++++ b/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java +@@ -413,13 +413,18 @@ public class FishingHook extends Projectile { + } + } else { + // CraftBukkit start - logic to modify fishing wait time +- this.timeUntilLured = Mth.nextInt(this.random, this.minWaitTime, this.maxWaitTime); +- this.timeUntilLured -= (this.applyLure) ? (this.lureSpeed * 20 * 5 >= this.maxWaitTime ? this.timeUntilLured - 1 : this.lureSpeed * 20 * 5) : 0; // Paper - Fix Lure infinite loop ++ resetTimeUntilLured(); // Paper - more projectile api - extract time until lured reset logic + // CraftBukkit end + } + } + + } ++ // Paper start - more projectile api - extract time until lured reset logic ++ public void resetTimeUntilLured() { ++ this.timeUntilLured = Mth.nextInt(this.random, this.minWaitTime, this.maxWaitTime); ++ this.timeUntilLured -= (this.applyLure) ? (this.lureSpeed * 20 * 5 >= this.maxWaitTime ? this.timeUntilLured - 1 : this.lureSpeed * 20 * 5) : 0; // Paper - Fix Lure infinite loop ++ } ++ // Paper end - more projectile api - extract time until lured reset logic + + public boolean calculateOpenWater(BlockPos pos) { + FishingHook.OpenWaterType entityfishinghook_waterposition = FishingHook.OpenWaterType.INVALID; diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java index 40348e45b02be9a0b397a883940a476fb6738ef4..ccb7aa341e3087255bce1f6fb953d33584147fd3 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java @@ -351,10 +378,10 @@ index c9e15a9d82dee935293b2e7e233f5b9b2d822448..3c31ff72f3e77ee0d9231fec5f15267c + // Paper end - Expose firework item directly + manually setting flight } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java -index 6e2f91423371ead9890095cf4b1e2299c4dcba28..ad1aeea80877f2cdb9e8ad9c5b46f95dd76b3335 100644 +index 6e2f91423371ead9890095cf4b1e2299c4dcba28..9d8f4b7176e60180565e3134a14ecf19060f2621 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java -@@ -196,4 +196,15 @@ public class CraftFishHook extends CraftProjectile implements FishHook { +@@ -196,4 +196,42 @@ public class CraftFishHook extends CraftProjectile implements FishHook { public HookState getState() { return HookState.values()[this.getHandle().currentState.ordinal()]; } @@ -368,6 +395,33 @@ index 6e2f91423371ead9890095cf4b1e2299c4dcba28..ad1aeea80877f2cdb9e8ad9c5b46f95d + public void setWaitTime(int ticks) { + this.getHandle().timeUntilLured = ticks; + } ++ ++ @Override ++ public int getTimeUntilBite() { ++ return this.getHandle().timeUntilHooked; ++ } ++ ++ @Override ++ public void setTimeUntilBite(final int ticks) { ++ com.google.common.base.Preconditions.checkArgument(ticks >= 1, "Cannot set time until bite to less than 1 (%s<1)", ticks); ++ final FishingHook hook = this.getHandle(); ++ ++ // Reset the fish angle hook only when this call "enters" the fish into the lure stage. ++ final boolean alreadyInLuringPhase = hook.timeUntilHooked > 0 && hook.timeUntilLured <= 0; ++ if (!alreadyInLuringPhase) { ++ hook.fishAngle = net.minecraft.util.Mth.nextFloat(hook.random, hook.minLureAngle, hook.maxLureAngle); ++ hook.timeUntilLured = 0; ++ } ++ ++ hook.timeUntilHooked = ticks; ++ } ++ ++ @Override ++ public void resetFishingState() { ++ final FishingHook hook = this.getHandle(); ++ hook.resetTimeUntilLured(); ++ hook.timeUntilHooked = 0; // Reset time until hooked, will be repopulated once lured time is ticked down. ++ } + // Paper end } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java diff --git a/patches/server/0836-More-accurate-isInOpenWater-impl.patch b/patches/server/0836-More-accurate-isInOpenWater-impl.patch index ca26fd9045..6e110094dd 100644 --- a/patches/server/0836-More-accurate-isInOpenWater-impl.patch +++ b/patches/server/0836-More-accurate-isInOpenWater-impl.patch @@ -13,7 +13,7 @@ public net.minecraft.world.entity.projectile.FishingHook calculateOpenWater(Lnet public net.minecraft.world.entity.projectile.FishingHook outOfWaterTime diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java -index ad1aeea80877f2cdb9e8ad9c5b46f95dd76b3335..116f23a3ee9fa409d7bc34c3769b94ed2bb07183 100644 +index 9d8f4b7176e60180565e3134a14ecf19060f2621..e0d65df2e5b4c14abeb89a5f72cc2d9fa034dcf5 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java @@ -164,7 +164,7 @@ public class CraftFishHook extends CraftProjectile implements FishHook { diff --git a/patches/server/0924-Add-hand-to-fish-event-for-all-player-interactions.patch b/patches/server/0924-Add-hand-to-fish-event-for-all-player-interactions.patch index 3bc8cd9b24..aedb99d8f9 100644 --- a/patches/server/0924-Add-hand-to-fish-event-for-all-player-interactions.patch +++ b/patches/server/0924-Add-hand-to-fish-event-for-all-player-interactions.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add hand to fish event for all player interactions diff --git a/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java b/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java -index a9ea83ea03ab23abc1eb463dadcdd742bfa20036..35299affb699d745804a3b60cb78b9323f3e068e 100644 +index e603307871b623ce437f4b1b68ab306fbdd9919d..9962d50ea342cd47428a814519b2d54f547753a4 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java +++ b/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java -@@ -476,7 +476,15 @@ public class FishingHook extends Projectile { +@@ -481,7 +481,15 @@ public class FishingHook extends Projectile { @Override public void readAdditionalSaveData(CompoundTag nbt) {} @@ -24,7 +24,7 @@ index a9ea83ea03ab23abc1eb463dadcdd742bfa20036..35299affb699d745804a3b60cb78b932 net.minecraft.world.entity.player.Player entityhuman = this.getPlayerOwner(); if (!this.level().isClientSide && entityhuman != null && !this.shouldStopFishing(entityhuman)) { -@@ -484,7 +492,7 @@ public class FishingHook extends Projectile { +@@ -489,7 +497,7 @@ public class FishingHook extends Projectile { if (this.hookedIn != null) { // CraftBukkit start @@ -33,7 +33,7 @@ index a9ea83ea03ab23abc1eb463dadcdd742bfa20036..35299affb699d745804a3b60cb78b932 this.level().getCraftServer().getPluginManager().callEvent(playerFishEvent); if (playerFishEvent.isCancelled()) { -@@ -513,7 +521,7 @@ public class FishingHook extends Projectile { +@@ -518,7 +526,7 @@ public class FishingHook extends Projectile { } // Paper end // CraftBukkit start @@ -42,7 +42,7 @@ index a9ea83ea03ab23abc1eb463dadcdd742bfa20036..35299affb699d745804a3b60cb78b932 playerFishEvent.setExpToDrop(this.random.nextInt(6) + 1); this.level().getCraftServer().getPluginManager().callEvent(playerFishEvent); -@@ -547,7 +555,7 @@ public class FishingHook extends Projectile { +@@ -552,7 +560,7 @@ public class FishingHook extends Projectile { if (this.onGround()) { // CraftBukkit start @@ -51,7 +51,7 @@ index a9ea83ea03ab23abc1eb463dadcdd742bfa20036..35299affb699d745804a3b60cb78b932 this.level().getCraftServer().getPluginManager().callEvent(playerFishEvent); if (playerFishEvent.isCancelled()) { -@@ -558,7 +566,7 @@ public class FishingHook extends Projectile { +@@ -563,7 +571,7 @@ public class FishingHook extends Projectile { } // CraftBukkit start if (i == 0) { diff --git a/patches/server/1048-Prevent-NPE-if-hooked-entity-was-cleared.patch b/patches/server/1048-Prevent-NPE-if-hooked-entity-was-cleared.patch index f1cbb0fcf3..72ff32a552 100644 --- a/patches/server/1048-Prevent-NPE-if-hooked-entity-was-cleared.patch +++ b/patches/server/1048-Prevent-NPE-if-hooked-entity-was-cleared.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Prevent NPE if hooked entity was cleared diff --git a/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java b/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java -index 35299affb699d745804a3b60cb78b9323f3e068e..882de08963c72614a3d26cd917916e42b7136042 100644 +index 9962d50ea342cd47428a814519b2d54f547753a4..6ea34a76707d9f60076b7423ac0bb1de200308ae 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java +++ b/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java -@@ -498,11 +498,13 @@ public class FishingHook extends Projectile { +@@ -503,11 +503,13 @@ public class FishingHook extends Projectile { if (playerFishEvent.isCancelled()) { return 0; } diff --git a/patches/server/1050-Add-missing-fishing-event-state.patch b/patches/server/1050-Add-missing-fishing-event-state.patch new file mode 100644 index 0000000000..76fcc3bdcf --- /dev/null +++ b/patches/server/1050-Add-missing-fishing-event-state.patch @@ -0,0 +1,26 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: SoSeDiK <[email protected]> +Date: Wed, 1 May 2024 07:44:50 +0300 +Subject: [PATCH] Add missing fishing event state + + +diff --git a/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java b/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java +index 6ea34a76707d9f60076b7423ac0bb1de200308ae..7dd5e0b935d98d552c916f8412569ff4aa0e9b04 100644 +--- a/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java ++++ b/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java +@@ -410,6 +410,15 @@ public class FishingHook extends Projectile { + this.fishAngle = Mth.nextFloat(this.random, this.minLureAngle, this.maxLureAngle); + this.timeUntilHooked = Mth.nextInt(this.random, this.minLureTime, this.maxLureTime); + // CraftBukkit end ++ // Paper start - Add missing fishing event state ++ if (this.getPlayerOwner() != null) { ++ PlayerFishEvent playerFishEvent = new PlayerFishEvent((Player) this.getPlayerOwner().getBukkitEntity(), null, (FishHook) this.getBukkitEntity(), PlayerFishEvent.State.LURED); ++ if (!playerFishEvent.callEvent()) { ++ this.timeUntilHooked = 0; ++ return; ++ } ++ } ++ // Paper end - Add missing fishing event state + } + } else { + // CraftBukkit start - logic to modify fishing wait time |