diff --git a/Spigot-API-Patches/0255-Added-PlayerLecternPageChangeEvent.patch b/Spigot-API-Patches/0255-Added-PlayerLecternPageChangeEvent.patch new file mode 100644 index 000000000..2b65c3a24 --- /dev/null +++ b/Spigot-API-Patches/0255-Added-PlayerLecternPageChangeEvent.patch @@ -0,0 +1,127 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jake Potrebic +Date: Mon, 23 Nov 2020 12:58:16 -0800 +Subject: [PATCH] Added PlayerLecternPageChangeEvent + + +diff --git a/src/main/java/io/papermc/paper/event/player/PlayerLecternPageChangeEvent.java b/src/main/java/io/papermc/paper/event/player/PlayerLecternPageChangeEvent.java +new file mode 100644 +index 0000000000000000000000000000000000000000..26370e46e4a12e3470e9bb747fac5786a7305810 +--- /dev/null ++++ b/src/main/java/io/papermc/paper/event/player/PlayerLecternPageChangeEvent.java +@@ -0,0 +1,115 @@ ++package io.papermc.paper.event.player; ++ ++import org.bukkit.block.Lectern; ++import org.bukkit.entity.Player; ++import org.bukkit.event.Cancellable; ++import org.bukkit.event.HandlerList; ++import org.bukkit.event.player.PlayerEvent; ++import org.bukkit.inventory.ItemStack; ++import org.jetbrains.annotations.NotNull; ++import org.jetbrains.annotations.Nullable; ++ ++public class PlayerLecternPageChangeEvent extends PlayerEvent implements Cancellable { ++ ++ private static final HandlerList HANDLER_LIST = new HandlerList(); ++ ++ private boolean cancelled; ++ private final Lectern lectern; ++ private final ItemStack book; ++ private final PageChangeDirection pageChangeDirection; ++ private final int oldPage; ++ private int newPage; ++ ++ public PlayerLecternPageChangeEvent(@NotNull Player player, @NotNull Lectern lectern, @NotNull ItemStack book, @NotNull PageChangeDirection pageChangeDirection, int oldPage, int newPage) { ++ super(player); ++ this.lectern = lectern; ++ this.book = book; ++ this.pageChangeDirection = pageChangeDirection; ++ this.oldPage = oldPage; ++ this.newPage = newPage; ++ } ++ ++ /** ++ * Gets the lectern involved. ++ * ++ * @return the Lectern ++ */ ++ @NotNull ++ public Lectern getLectern() { ++ return lectern; ++ } ++ ++ /** ++ * Gets the current ItemStack on the lectern. ++ * ++ * @return the ItemStack on the Lectern ++ */ ++ @NotNull ++ public ItemStack getBook() { ++ return this.book; ++ } ++ ++ /** ++ * Gets the page change direction. This is essentially returns which button the player clicked, left or right. ++ * ++ * @return the page change direction ++ */ ++ @NotNull ++ public PageChangeDirection getPageChangeDirection() { ++ return pageChangeDirection; ++ } ++ ++ /** ++ * Gets the page changed from. Pages are 0-indexed. ++ * ++ * @return the page changed from ++ */ ++ public int getOldPage() { ++ return oldPage; ++ } ++ ++ /** ++ * Gets the page changed to. Pages are 0-indexed. ++ * ++ * @return the page changed to ++ */ ++ public int getNewPage() { ++ return newPage; ++ } ++ ++ /** ++ * Sets the page changed to. Pages are 0-indexed. ++ * Page indices that are greater than the number of pages will show the last page. ++ * ++ * @param newPage the new paged changed to ++ */ ++ public void setNewPage(int newPage) { ++ this.newPage = newPage; ++ } ++ ++ @Override ++ public boolean isCancelled() { ++ return cancelled; ++ } ++ ++ @Override ++ public void setCancelled(boolean cancel) { ++ this.cancelled = cancel; ++ } ++ ++ @NotNull ++ @Override ++ public HandlerList getHandlers() { ++ return HANDLER_LIST; ++ } ++ ++ @NotNull ++ public static HandlerList getHandlerList() { ++ return HANDLER_LIST; ++ } ++ ++ public enum PageChangeDirection { ++ LEFT, ++ RIGHT, ++ } ++} diff --git a/Spigot-Server-Patches/0642-Added-PlayerLecternPageChangeEvent.patch b/Spigot-Server-Patches/0642-Added-PlayerLecternPageChangeEvent.patch new file mode 100644 index 000000000..139977b3f --- /dev/null +++ b/Spigot-Server-Patches/0642-Added-PlayerLecternPageChangeEvent.patch @@ -0,0 +1,66 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jake Potrebic +Date: Mon, 23 Nov 2020 12:58:51 -0800 +Subject: [PATCH] Added PlayerLecternPageChangeEvent + + +diff --git a/src/main/java/net/minecraft/server/Container.java b/src/main/java/net/minecraft/server/Container.java +index 73a057b074af938a03decb0a53784aff321411ab..1eba0ccad798ee0d9e9d573e58a8dcd5363b6ffd 100644 +--- a/src/main/java/net/minecraft/server/Container.java ++++ b/src/main/java/net/minecraft/server/Container.java +@@ -546,6 +546,7 @@ public abstract class Container { + this.getSlot(i).set(itemstack); + } + ++ public void setData(int index, int value) { this.a(index, value); } // Paper - OBFHELPER + public void a(int i, int j) { + ((ContainerProperty) this.d.get(i)).set(j); + } +diff --git a/src/main/java/net/minecraft/server/ContainerLectern.java b/src/main/java/net/minecraft/server/ContainerLectern.java +index 360c1c16fa3a09e7548081b3edd3c4dd3ec06efc..d7bb956287fe8a5c76570242d68bab7e2f1a8c3f 100644 +--- a/src/main/java/net/minecraft/server/ContainerLectern.java ++++ b/src/main/java/net/minecraft/server/ContainerLectern.java +@@ -7,6 +7,7 @@ import org.bukkit.craftbukkit.inventory.CraftInventoryView; + import org.bukkit.entity.Player; + import org.bukkit.event.player.PlayerTakeLecternBookEvent; + // CraftBukkit end ++import io.papermc.paper.event.player.PlayerLecternPageChangeEvent; // Paper + + public class ContainerLectern extends Container { + +@@ -54,6 +55,7 @@ public class ContainerLectern extends Container { + @Override + public boolean a(EntityHuman entityhuman, int i) { + int j; ++ PlayerLecternPageChangeEvent playerLecternPageChangeEvent; CraftInventoryLectern bukkitView; // Paper + + if (i >= 100) { + j = i - 100; +@@ -63,11 +65,25 @@ public class ContainerLectern extends Container { + switch (i) { + case 1: + j = this.containerProperties.getProperty(0); +- this.a(0, j - 1); ++ // Paper start ++ bukkitView = (CraftInventoryLectern) getBukkitView().getTopInventory(); ++ playerLecternPageChangeEvent = new PlayerLecternPageChangeEvent((org.bukkit.entity.Player) entityhuman.getBukkitEntity(), bukkitView.getHolder(), bukkitView.getBook(), PlayerLecternPageChangeEvent.PageChangeDirection.LEFT, j, j - 1); ++ if (!playerLecternPageChangeEvent.callEvent()) { ++ return false; ++ } ++ this.setData(0, playerLecternPageChangeEvent.getNewPage()); ++ // Paper end + return true; + case 2: + j = this.containerProperties.getProperty(0); +- this.a(0, j + 1); ++ // Paper start ++ bukkitView = (CraftInventoryLectern) getBukkitView().getTopInventory(); ++ playerLecternPageChangeEvent = new PlayerLecternPageChangeEvent((org.bukkit.entity.Player) entityhuman.getBukkitEntity(), bukkitView.getHolder(), bukkitView.getBook(), PlayerLecternPageChangeEvent.PageChangeDirection.RIGHT, j, j + 1); ++ if (!playerLecternPageChangeEvent.callEvent()) { ++ return false; ++ } ++ this.setData(0, playerLecternPageChangeEvent.getNewPage()); ++ // Paper end + return true; + case 3: + if (!entityhuman.eK()) {