From 2df6318ebf44e77b30b22d4246433e06ce98a609 Mon Sep 17 00:00:00 2001
From: Bukkit/Spigot <noreply+git-bukkit@papermc.io>
Date: Thu, 9 Nov 2023 06:43:30 +1100
Subject: [PATCH] #927: Add PlayerRecipeBookSettingsChangeEvent

By: Jishuna <joshl5324@gmail.com>
---
 .../PlayerRecipeBookSettingsChangeEvent.java  | 87 +++++++++++++++++++
 1 file changed, 87 insertions(+)
 create mode 100644 paper-api/src/main/java/org/bukkit/event/player/PlayerRecipeBookSettingsChangeEvent.java

diff --git a/paper-api/src/main/java/org/bukkit/event/player/PlayerRecipeBookSettingsChangeEvent.java b/paper-api/src/main/java/org/bukkit/event/player/PlayerRecipeBookSettingsChangeEvent.java
new file mode 100644
index 0000000000..249f670f7d
--- /dev/null
+++ b/paper-api/src/main/java/org/bukkit/event/player/PlayerRecipeBookSettingsChangeEvent.java
@@ -0,0 +1,87 @@
+package org.bukkit.event.player;
+
+import org.bukkit.entity.Player;
+import org.bukkit.event.HandlerList;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Called when a player changes recipe book settings.
+ */
+public class PlayerRecipeBookSettingsChangeEvent extends PlayerEvent {
+
+    private static final HandlerList handlers = new HandlerList();
+    private final RecipeBookType recipeBookType;
+    private final boolean open;
+    private final boolean filtering;
+
+    public PlayerRecipeBookSettingsChangeEvent(@NotNull final Player player, @NotNull final RecipeBookType recipeBookType, final boolean open, final boolean filtering) {
+        super(player);
+        this.recipeBookType = recipeBookType;
+        this.open = open;
+        this.filtering = filtering;
+    }
+
+    /**
+     * Gets the type of recipe book the player is changing the settings for.
+     *
+     * @return the type of recipe book
+     */
+    @NotNull
+    public RecipeBookType getRecipeBookType() {
+        return recipeBookType;
+    }
+
+    /**
+     * Checks if the recipe book is being opened or closed.
+     *
+     * @return true if opening
+     */
+    public boolean isOpen() {
+        return open;
+    }
+
+    /**
+     * Checks if the recipe book filter is being enabled or disabled.
+     *
+     * @return true if enabling
+     */
+    public boolean isFiltering() {
+        return filtering;
+    }
+
+    @NotNull
+    @Override
+    public HandlerList getHandlers() {
+        return handlers;
+    }
+
+    @NotNull
+    public static HandlerList getHandlerList() {
+        return handlers;
+    }
+
+    /**
+     * Enum representing the various types of recipe book.
+     * <br>
+     * Different types of recipe book are shown in different GUIs.
+     */
+    public enum RecipeBookType {
+
+        /**
+         * Recipe book seen in crafting table and player inventory.
+         */
+        CRAFTING,
+        /**
+         * Recipe book seen in furnace.
+         */
+        FURNACE,
+        /**
+         * Recipe book seen in blast furnace.
+         */
+        BLAST_FURNACE,
+        /**
+         * Recipe book seen in smoker.
+         */
+        SMOKER;
+    }
+}