From 2fde41b25e06e4641e8e7f3314a1e60bb1f3ab14 Mon Sep 17 00:00:00 2001
From: HexedHero <6012891+HexedHero@users.noreply.github.com>
Date: Thu, 27 May 2021 16:14:52 +0100
Subject: [PATCH] Add PufferFishStateChangeEvent (#5606)

---
 .../Add-PufferFishStateChangeEvent.patch      | 92 +++++++++++++++++++
 .../Add-PufferFishStateChangeEvent.patch      | 50 ++++++++++
 2 files changed, 142 insertions(+)
 create mode 100644 Spigot-API-Patches/Add-PufferFishStateChangeEvent.patch
 create mode 100644 Spigot-Server-Patches/Add-PufferFishStateChangeEvent.patch

diff --git a/Spigot-API-Patches/Add-PufferFishStateChangeEvent.patch b/Spigot-API-Patches/Add-PufferFishStateChangeEvent.patch
new file mode 100644
index 0000000000..396eb57c6a
--- /dev/null
+++ b/Spigot-API-Patches/Add-PufferFishStateChangeEvent.patch
@@ -0,0 +1,92 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: HexedHero <6012891+HexedHero@users.noreply.github.com>
+Date: Mon, 10 May 2021 16:58:38 +0100
+Subject: [PATCH] Add PufferFishStateChangeEvent
+
+
+diff --git a/src/main/java/io/papermc/paper/event/entity/PufferFishStateChangeEvent.java b/src/main/java/io/papermc/paper/event/entity/PufferFishStateChangeEvent.java
+new file mode 100644
+index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
+--- /dev/null
++++ b/src/main/java/io/papermc/paper/event/entity/PufferFishStateChangeEvent.java
+@@ -0,0 +0,0 @@
++package io.papermc.paper.event.entity;
++
++import org.bukkit.entity.PufferFish;
++import org.bukkit.event.Cancellable;
++import org.bukkit.event.HandlerList;
++import org.bukkit.event.entity.EntityEvent;
++import org.jetbrains.annotations.NotNull;
++
++/**
++ * Called just before a {@link PufferFish} inflates or deflates.
++ */
++public class PufferFishStateChangeEvent extends EntityEvent implements Cancellable {
++    private static final HandlerList handlers = new HandlerList();
++    private boolean cancelled;
++    private int newPuffState;
++
++    public PufferFishStateChangeEvent(@NotNull PufferFish entity, int newPuffState) {
++        super(entity);
++        this.newPuffState = newPuffState;
++    }
++
++    @NotNull
++    @Override
++    public PufferFish getEntity() {
++        return (PufferFish) entity;
++    }
++
++    /**
++     * Get the <strong>new</strong> puff state of the {@link PufferFish}.
++     * <p>
++     * This is what the {@link PufferFish}'s new puff state will be after this event if it isn't cancelled.<br>
++     * Refer to {@link PufferFish#getPuffState()} to get the current puff state.
++     * @return The <strong>new</strong> puff state, 0 being not inflated, 1 being slightly inflated and 2 being fully inflated
++     */
++    public int getNewPuffState() {
++        return this.newPuffState;
++    }
++
++    /**
++     * Get if the {@link PufferFish} is going to inflate.
++     * @return If its going to inflate
++     */
++    public boolean isInflating() {
++        return getNewPuffState() > getEntity().getPuffState();
++    }
++
++    /**
++     * Get if the {@link PufferFish} is going to deflate.
++     * @return If its going to deflate
++     */
++    public boolean isDeflating() {
++        return getNewPuffState() < getEntity().getPuffState();
++    }
++
++    /**
++     * Set whether or not to cancel the {@link PufferFish} (in/de)flating.
++     *
++     * @param cancel true if you wish to cancel the (in/de)flation
++     */
++    @Override
++    public void setCancelled(boolean cancel) {
++        this.cancelled = cancel;
++    }
++
++    @Override
++    public boolean isCancelled() {
++        return cancelled;
++    }
++
++    @NotNull
++    @Override
++    public HandlerList getHandlers() {
++        return handlers;
++    }
++
++    @NotNull
++    public static HandlerList getHandlerList() {
++        return handlers;
++    }
++}
diff --git a/Spigot-Server-Patches/Add-PufferFishStateChangeEvent.patch b/Spigot-Server-Patches/Add-PufferFishStateChangeEvent.patch
new file mode 100644
index 0000000000..069c82b962
--- /dev/null
+++ b/Spigot-Server-Patches/Add-PufferFishStateChangeEvent.patch
@@ -0,0 +1,50 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: HexedHero <6012891+HexedHero@users.noreply.github.com>
+Date: Mon, 10 May 2021 16:59:05 +0100
+Subject: [PATCH] Add PufferFishStateChangeEvent
+
+
+diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityPufferFish.java b/src/main/java/net/minecraft/world/entity/animal/EntityPufferFish.java
+index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
+--- a/src/main/java/net/minecraft/world/entity/animal/EntityPufferFish.java
++++ b/src/main/java/net/minecraft/world/entity/animal/EntityPufferFish.java
+@@ -0,0 +0,0 @@ public class EntityPufferFish extends EntityFish {
+     public void tick() {
+         if (!this.world.isClientSide && this.isAlive() && this.doAITick()) {
+             if (this.c > 0) {
++                boolean increase = true; // Paper - Add PufferFishStateChangeEvent
+                 if (this.getPuffState() == 0) {
++                    if (new io.papermc.paper.event.entity.PufferFishStateChangeEvent((org.bukkit.entity.PufferFish) getBukkitEntity(), 1).callEvent()) { // Paper - Add PufferFishStateChangeEvent
+                     this.playSound(SoundEffects.ENTITY_PUFFER_FISH_BLOW_UP, this.getSoundVolume(), this.dH());
+                     this.setPuffState(1);
++                    } else { increase = false; } // Paper - Add PufferFishStateChangeEvent
+                 } else if (this.c > 40 && this.getPuffState() == 1) {
++                    if (new io.papermc.paper.event.entity.PufferFishStateChangeEvent((org.bukkit.entity.PufferFish) getBukkitEntity(), 2).callEvent()) { // Paper - Add PufferFishStateChangeEvent
+                     this.playSound(SoundEffects.ENTITY_PUFFER_FISH_BLOW_UP, this.getSoundVolume(), this.dH());
+                     this.setPuffState(2);
++                    } else { increase = false; } // Paper - Add PufferFishStateChangeEvent
+                 }
+ 
++                if (increase) { // Paper - Add PufferFishStateChangeEvent
+                 ++this.c;
++                } // Paper - Add PufferFishStateChangeEvent
+             } else if (this.getPuffState() != 0) {
++                boolean increase = true; // Paper - Add PufferFishStateChangeEvent
+                 if (this.d > 60 && this.getPuffState() == 2) {
++                    if (new io.papermc.paper.event.entity.PufferFishStateChangeEvent((org.bukkit.entity.PufferFish) getBukkitEntity(), 1).callEvent()) { // Paper - Add PufferFishStateChangeEvent
+                     this.playSound(SoundEffects.ENTITY_PUFFER_FISH_BLOW_OUT, this.getSoundVolume(), this.dH());
+                     this.setPuffState(1);
++                    } else { increase = false; } // Paper - Add PufferFishStateChangeEvent
+                 } else if (this.d > 100 && this.getPuffState() == 1) {
++                    if (new io.papermc.paper.event.entity.PufferFishStateChangeEvent((org.bukkit.entity.PufferFish) getBukkitEntity(), 0).callEvent()) { // Paper - Add PufferFishStateChangeEvent
+                     this.playSound(SoundEffects.ENTITY_PUFFER_FISH_BLOW_OUT, this.getSoundVolume(), this.dH());
+                     this.setPuffState(0);
++                    } else { increase = false; } // Paper - Add PufferFishStateChangeEvent
+                 }
+ 
++                if (increase) { // Paper - Add PufferFishStateChangeEvent
+                 ++this.d;
++                } // Paper - Add PufferFishStateChangeEvent
+             }
+         }
+