mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-04 01:39:54 +01:00
2873869bb1
Signs no longer have a specific isEdiable state, the entire API in this regard needs updating/deprecation. The boolean field is completely gone, replaced by a uuid (which will need a new setEditingPlayer(UUID) method on the Sign interface), and the current upstream implementation of setEdiable simply flips the is_waxed state. This patch is hence not needed as it neither allows editing (which will be redone in a later patch) nor is required to copy the is_waxed boolean flag as it lives in the signs compound tag and is covered by applyTo.
61 lines
3.7 KiB
Diff
61 lines
3.7 KiB
Diff
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 dc999068891bfdfd4873ca939b4c4389d63f4415..a86472cce8e8fcde16d761842fe443a619f6e305 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java
|
|
@@ -3,6 +3,7 @@ package net.minecraft.world.entity.decoration;
|
|
import com.mojang.logging.LogUtils;
|
|
import java.util.OptionalInt;
|
|
import javax.annotation.Nullable;
|
|
+import io.papermc.paper.event.player.PlayerItemFrameChangeEvent; // Paper
|
|
import net.minecraft.core.BlockPos;
|
|
import net.minecraft.core.Direction;
|
|
import net.minecraft.nbt.CompoundTag;
|
|
@@ -190,6 +191,13 @@ public class ItemFrame extends HangingEntity {
|
|
return true;
|
|
}
|
|
// CraftBukkit end
|
|
+ // Paper start - call 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
|
|
this.dropItem(source.getEntity(), false);
|
|
this.gameEvent(GameEvent.BLOCK_CHANGE, source.getEntity());
|
|
this.playSound(this.getRemoveItemSound(), 1.0F, 1.0F);
|
|
@@ -456,13 +464,26 @@ public class ItemFrame extends HangingEntity {
|
|
}
|
|
}
|
|
|
|
- this.setItem(itemstack);
|
|
+ // Paper start - call 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
|
|
this.gameEvent(GameEvent.BLOCK_CHANGE, player);
|
|
if (!player.getAbilities().instabuild) {
|
|
itemstack.shrink(1);
|
|
}
|
|
}
|
|
} else {
|
|
+ // Paper start - call 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
|
|
this.playSound(this.getRotateItemSound(), 1.0F, 1.0F);
|
|
this.setRotation(this.getRotation() + 1);
|
|
this.gameEvent(GameEvent.BLOCK_CHANGE, player);
|