Skip to content

Commit 84ee424

Browse files
Add Map filled event (#12574)
1 parent ee3b405 commit 84ee424

File tree

2 files changed

+82
-0
lines changed

2 files changed

+82
-0
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package io.papermc.paper.event.player;
2+
3+
import org.bukkit.entity.Player;
4+
import org.bukkit.event.HandlerList;
5+
import org.bukkit.event.player.PlayerEvent;
6+
import org.bukkit.inventory.ItemStack;
7+
import org.jetbrains.annotations.ApiStatus;
8+
import org.jetbrains.annotations.NotNull;
9+
import org.jspecify.annotations.NullMarked;
10+
11+
/**
12+
* Called when a player creates a filled map by right-clicking an empty map.
13+
*/
14+
@NullMarked
15+
public class PlayerMapFilledEvent extends PlayerEvent {
16+
private static final HandlerList HANDLER_LIST = new HandlerList();
17+
18+
private final ItemStack originalItem;
19+
private ItemStack createdMap;
20+
21+
@ApiStatus.Internal
22+
public PlayerMapFilledEvent(final Player player, final ItemStack originalItem, final ItemStack createdMap) {
23+
super(player);
24+
this.originalItem = originalItem;
25+
this.createdMap = createdMap;
26+
}
27+
28+
/**
29+
* Returns a copy of the empty map before it was consumed.
30+
*
31+
* @return cloned original item
32+
*/
33+
public ItemStack getOriginalItem() {
34+
return this.originalItem.clone();
35+
}
36+
37+
/**
38+
* Returns a copy of the filled map which was created.
39+
*
40+
* @return cloned created map item
41+
*/
42+
public ItemStack getCreatedMap() {
43+
return this.createdMap.clone();
44+
}
45+
46+
/**
47+
* Sets the filled map that will be created.
48+
*
49+
* @param createdMap map item
50+
*/
51+
public void setCreatedMap(final ItemStack createdMap) {
52+
this.createdMap = createdMap.clone();
53+
}
54+
55+
@Override
56+
public HandlerList getHandlers() {
57+
return HANDLER_LIST;
58+
}
59+
60+
public static HandlerList getHandlerList() {
61+
return HANDLER_LIST;
62+
}
63+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
--- a/net/minecraft/world/item/EmptyMapItem.java
2+
+++ b/net/minecraft/world/item/EmptyMapItem.java
3+
@@ -17,10 +_,16 @@
4+
public InteractionResult use(Level level, Player player, InteractionHand hand) {
5+
ItemStack itemInHand = player.getItemInHand(hand);
6+
if (level instanceof ServerLevel serverLevel) {
7+
+ org.bukkit.inventory.ItemStack emptyMap = itemInHand.asBukkitCopy(); // Paper - PlayerMapFilledEvent
8+
itemInHand.consume(1, player);
9+
player.awardStat(Stats.ITEM_USED.get(this));
10+
serverLevel.playSound(null, player, SoundEvents.UI_CARTOGRAPHY_TABLE_TAKE_RESULT, player.getSoundSource(), 1.0F, 1.0F);
11+
ItemStack itemStack = MapItem.create(serverLevel, player.getBlockX(), player.getBlockZ(), (byte)0, true, false);
12+
+ // Paper start - PlayerMapFilledEvent
13+
+ io.papermc.paper.event.player.PlayerMapFilledEvent event = new io.papermc.paper.event.player.PlayerMapFilledEvent((org.bukkit.entity.Player) player.getBukkitEntity(), emptyMap, org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemStack));
14+
+ event.callEvent();
15+
+ itemStack = org.bukkit.craftbukkit.inventory.CraftItemStack.unwrap(event.getCreatedMap());
16+
+ // Paper end - PlayerMapFilledEvent
17+
if (itemInHand.isEmpty()) {
18+
return InteractionResult.SUCCESS.heldItemTransformedTo(itemStack);
19+
} else {

0 commit comments

Comments
 (0)