From 56b7935bb9c456452fcc1860418dffba3229b7ea Mon Sep 17 00:00:00 2001 From: Jake Potrebic Date: Sun, 17 Jan 2021 21:21:31 +0100 Subject: [PATCH] Add PlayerChangeBeaconEffectEvent Signed-off-by: MiniDigger --- ...-Added-PlayerChangeBeaconEffectEvent.patch | 153 ++++++++++++++++++ ...ing-of-PlayerChangeBeaconEffectEvent.patch | 38 +++++ 2 files changed, 191 insertions(+) create mode 100644 Spigot-API-Patches/0265-Added-PlayerChangeBeaconEffectEvent.patch create mode 100644 Spigot-Server-Patches/0659-Added-firing-of-PlayerChangeBeaconEffectEvent.patch diff --git a/Spigot-API-Patches/0265-Added-PlayerChangeBeaconEffectEvent.patch b/Spigot-API-Patches/0265-Added-PlayerChangeBeaconEffectEvent.patch new file mode 100644 index 0000000000..4331e880bb --- /dev/null +++ b/Spigot-API-Patches/0265-Added-PlayerChangeBeaconEffectEvent.patch @@ -0,0 +1,153 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jake Potrebic +Date: Wed, 24 Jun 2020 15:12:18 -0600 +Subject: [PATCH] Added PlayerChangeBeaconEffectEvent + + +diff --git a/src/main/java/io/papermc/paper/event/player/PlayerChangeBeaconEffectEvent.java b/src/main/java/io/papermc/paper/event/player/PlayerChangeBeaconEffectEvent.java +new file mode 100644 +index 0000000000000000000000000000000000000000..c80183a79713b1e73549911e474a8c585cfdeb52 +--- /dev/null ++++ b/src/main/java/io/papermc/paper/event/player/PlayerChangeBeaconEffectEvent.java +@@ -0,0 +1,141 @@ ++package io.papermc.paper.event.player; ++ ++import org.bukkit.block.Block; ++import org.bukkit.entity.Player; ++import org.bukkit.event.Cancellable; ++import org.bukkit.event.HandlerList; ++import org.bukkit.event.player.PlayerEvent; ++import org.bukkit.potion.PotionEffectType; ++import org.jetbrains.annotations.NotNull; ++import org.jetbrains.annotations.Nullable; ++ ++/** ++ * Called when a player sets the effect for a beacon ++ */ ++public class PlayerChangeBeaconEffectEvent extends PlayerEvent implements Cancellable { ++ private static final HandlerList handlers = new HandlerList(); ++ ++ private PotionEffectType primary; ++ private PotionEffectType secondary; ++ private final Block beacon; ++ private boolean consumeItem = true; ++ ++ private boolean isCancelled; ++ ++ public PlayerChangeBeaconEffectEvent(@NotNull Player player, @Nullable PotionEffectType primary, @Nullable PotionEffectType secondary, @Nullable Block beacon) { ++ super(player); ++ this.primary = primary; ++ this.secondary = secondary; ++ this.isCancelled = false; ++ this.beacon = beacon; ++ } ++ ++ /** ++ * @return the primary effect ++ */ ++ @Nullable public PotionEffectType getPrimary() { ++ return primary; ++ } ++ ++ /** ++ * Sets the primary effect ++ *

++ * NOTE: The primary effect still has to be one of the valid effects for a beacon. ++ * ++ * @param primary the primary effect ++ */ ++ public void setPrimary(@Nullable PotionEffectType primary) { ++ this.primary = primary; ++ } ++ ++ /** ++ * @return the secondary effect ++ */ ++ @Nullable public PotionEffectType getSecondary() { ++ return secondary; ++ } ++ ++ /** ++ * Sets the secondary effect ++ *

++ * This only has an effect when the beacon is able to accept a secondary effect. ++ * NOTE: The secondary effect still has to be a valid effect for a beacon. ++ * ++ * @param secondary the secondary effect ++ */ ++ public void setSecondary(@Nullable PotionEffectType secondary) { ++ this.secondary = secondary; ++ } ++ ++ /** ++ * @return the beacon block associated with this event, or null if not found ++ */ ++ @Nullable ++ public Block getBeacon() { ++ return beacon; ++ } ++ ++ /** ++ * Gets if the item used to change the beacon will be consume. ++ *

++ * Independant of {@link #isCancelled()}. If the event is cancelled ++ * the item will NOT be consumed. ++ * ++ * @return true if item will be consumed ++ */ ++ public boolean willConsumeItem() { ++ return consumeItem; ++ } ++ ++ /** ++ * Sets if the item used to change the beacon should be consumed. ++ *

++ * Independant of {@link #isCancelled()}. If the event is cancelled ++ * the item will NOT be consumed. ++ * ++ * @param consumeItem true if item should be consumed ++ */ ++ public void setConsumeItem(boolean consumeItem) { ++ this.consumeItem = consumeItem; ++ } ++ ++ /** ++ * Gets the cancellation state of this event. A cancelled event will not ++ * be executed in the server, but will still pass to other plugins ++ *

++ * If a {@link PlayerChangeBeaconEffectEvent} is cancelled, the changes will ++ * not take effect ++ * ++ * @return true if this event is cancelled ++ */ ++ @Override ++ public boolean isCancelled() { ++ return this.isCancelled; ++ } ++ ++ /** ++ * Sets the cancellation state of this event. A cancelled event will not ++ * be executed in the server, but will still pass to other plugins ++ *

++ * If cancelled, the item will NOT be consumed regardless of what {@link #willConsumeItem()} says ++ *

++ * If a {@link PlayerChangeBeaconEffectEvent} is cancelled, the changes will not be applied ++ * or saved. ++ * ++ * @param cancel true if you wish to cancel this event ++ */ ++ @Override ++ public void setCancelled(boolean cancel) { ++ this.isCancelled = cancel; ++ } ++ ++ @Override ++ public @NotNull HandlerList getHandlers() { ++ return handlers; ++ } ++ ++ @NotNull ++ public static HandlerList getHandlerList() { ++ return handlers; ++ } ++} diff --git a/Spigot-Server-Patches/0659-Added-firing-of-PlayerChangeBeaconEffectEvent.patch b/Spigot-Server-Patches/0659-Added-firing-of-PlayerChangeBeaconEffectEvent.patch new file mode 100644 index 0000000000..f90e695e12 --- /dev/null +++ b/Spigot-Server-Patches/0659-Added-firing-of-PlayerChangeBeaconEffectEvent.patch @@ -0,0 +1,38 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jake Potrebic +Date: Wed, 24 Jun 2020 15:14:51 -0600 +Subject: [PATCH] Added firing of PlayerChangeBeaconEffectEvent + + +diff --git a/src/main/java/net/minecraft/server/ContainerBeacon.java b/src/main/java/net/minecraft/server/ContainerBeacon.java +index 288390bf9210f0fcc7c85e3093a4924614dc1573..2b09368ad998aef7d1e76a45515c6ac7ebf5c6fb 100644 +--- a/src/main/java/net/minecraft/server/ContainerBeacon.java ++++ b/src/main/java/net/minecraft/server/ContainerBeacon.java +@@ -1,6 +1,9 @@ + package net.minecraft.server; + + import org.bukkit.craftbukkit.inventory.CraftInventoryView; // CraftBukkit ++// Paper start ++import io.papermc.paper.event.player.PlayerChangeBeaconEffectEvent; ++// Paper end + + public class ContainerBeacon extends Container { + +@@ -128,9 +131,15 @@ public class ContainerBeacon extends Container { + + public void c(int i, int j) { + if (this.d.hasItem()) { +- this.containerProperties.setProperty(1, i); +- this.containerProperties.setProperty(2, j); ++ // Paper start ++ PlayerChangeBeaconEffectEvent event = new PlayerChangeBeaconEffectEvent((org.bukkit.entity.Player) this.player.player.getBukkitEntity(), org.bukkit.potion.PotionEffectType.getById(i), org.bukkit.potion.PotionEffectType.getById(j), this.containerAccess.getLocation().getBlock()); ++ if (event.callEvent()) { ++ this.containerProperties.setProperty(1, event.getPrimary() == null ? 0 : event.getPrimary().getId()); ++ this.containerProperties.setProperty(2, event.getSecondary() == null ? 0 : event.getSecondary().getId()); ++ if (!event.willConsumeItem()) return; + this.d.a(1); ++ } ++ // Paper end + } + + }