aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0622-Add-PlayerItemFrameChangeEvent.patch
blob: 3124caa15b93cc9e566c3521c62f07ab71361219 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: SamB440 <sam@islandearth.net>
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);