From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: SamB440 Date: Mon, 15 Nov 2021 18:10:10 +0000 Subject: [PATCH] Add PlayerItemFrameChangeEvent diff --git a/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java b/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java index dc642c311b711ad97a598485ff38083ccda827af..916017571ecde95721df9bdc07c5e7b5dc60c957 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java +++ b/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java @@ -1,6 +1,7 @@ package net.minecraft.world.entity.decoration; import javax.annotation.Nullable; +import io.papermc.paper.event.player.PlayerItemFrameChangeEvent; // Paper - Add PlayerItemFrameChangeEvent import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.component.DataComponents; @@ -166,6 +167,13 @@ public class ItemFrame extends HangingEntity { return true; } // CraftBukkit end + // Paper start - Add PlayerItemFrameChangeEvent + if (source.getEntity() instanceof Player player) { + var event = new PlayerItemFrameChangeEvent((org.bukkit.entity.Player) player.getBukkitEntity(), (org.bukkit.entity.ItemFrame) this.getBukkitEntity(), this.getItem().asBukkitCopy(), PlayerItemFrameChangeEvent.ItemFrameChangeAction.REMOVE); + if (!event.callEvent()) return true; // return true here because you aren't cancelling the damage, just the change + this.setItem(ItemStack.fromBukkitCopy(event.getItemStack()), false); + } + // Paper end - Add PlayerItemFrameChangeEvent this.dropItem(world, source.getEntity(), false); this.gameEvent(GameEvent.BLOCK_CHANGE, source.getEntity()); this.playSound(this.getRemoveItemSound(), 1.0F, 1.0F); @@ -403,7 +411,13 @@ public class ItemFrame extends HangingEntity { if (worldmap != null && worldmap.isTrackedCountOverLimit(256)) { return InteractionResult.FAIL; } else { - this.setItem(itemstack); + // Paper start - Add PlayerItemFrameChangeEvent + PlayerItemFrameChangeEvent event = new PlayerItemFrameChangeEvent((org.bukkit.entity.Player) player.getBukkitEntity(), (org.bukkit.entity.ItemFrame) this.getBukkitEntity(), itemstack.asBukkitCopy(), PlayerItemFrameChangeEvent.ItemFrameChangeAction.PLACE); + if (!event.callEvent()) { + return InteractionResult.FAIL; + } + this.setItem(ItemStack.fromBukkitCopy(event.getItemStack())); + // Paper end - Add PlayerItemFrameChangeEvent this.gameEvent(GameEvent.BLOCK_CHANGE, player); itemstack.consume(1, player); return InteractionResult.SUCCESS; @@ -412,6 +426,13 @@ public class ItemFrame extends HangingEntity { return InteractionResult.PASS; } } else { + // Paper start - Add PlayerItemFrameChangeEvent + PlayerItemFrameChangeEvent event = new PlayerItemFrameChangeEvent((org.bukkit.entity.Player) player.getBukkitEntity(), (org.bukkit.entity.ItemFrame) this.getBukkitEntity(), this.getItem().asBukkitCopy(), PlayerItemFrameChangeEvent.ItemFrameChangeAction.ROTATE); + if (!event.callEvent()) { + return InteractionResult.FAIL; + } + setItem(ItemStack.fromBukkitCopy(event.getItemStack()), false, false); + // Paper end - Add PlayerItemFrameChangeEvent this.playSound(this.getRotateItemSound(), 1.0F, 1.0F); this.setRotation(this.getRotation() + 1); this.gameEvent(GameEvent.BLOCK_CHANGE, player);