Skip to content
This repository was archived by the owner on Apr 13, 2025. It is now read-only.

Commit 6de1d9a

Browse files
BillyGalbreathgranny
authored andcommitted
Grindstone API
1 parent a255ef3 commit 6de1d9a

4 files changed

Lines changed: 97 additions & 120 deletions

File tree

patches/api/0031-Grindstone-API.patch

Lines changed: 0 additions & 84 deletions
This file was deleted.

patches/server/0217-Grindstone-API.patch

Lines changed: 0 additions & 36 deletions
This file was deleted.
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package org.purpurmc.purpur.event.inventory;
2+
3+
import org.bukkit.entity.HumanEntity;
4+
import org.bukkit.entity.Player;
5+
import org.bukkit.event.HandlerList;
6+
import org.bukkit.event.inventory.InventoryEvent;
7+
import org.bukkit.inventory.GrindstoneInventory;
8+
import org.bukkit.inventory.InventoryView;
9+
import org.bukkit.inventory.ItemStack;
10+
import org.jetbrains.annotations.ApiStatus;
11+
import org.jspecify.annotations.NullMarked;
12+
13+
/**
14+
* Called when a player takes the result item out of a Grindstone
15+
*/
16+
@NullMarked
17+
public class GrindstoneTakeResultEvent extends InventoryEvent {
18+
private static final HandlerList handlers = new HandlerList();
19+
private final Player player;
20+
private final ItemStack result;
21+
private int experienceAmount;
22+
23+
@ApiStatus.Internal
24+
public GrindstoneTakeResultEvent(HumanEntity player, InventoryView view, ItemStack result, int experienceAmount) {
25+
super(view);
26+
this.player = (Player) player;
27+
this.result = result;
28+
this.experienceAmount = experienceAmount;
29+
}
30+
31+
public Player getPlayer() {
32+
return player;
33+
}
34+
35+
public ItemStack getResult() {
36+
return result;
37+
}
38+
39+
@Override
40+
public GrindstoneInventory getInventory() {
41+
return (GrindstoneInventory) super.getInventory();
42+
}
43+
44+
/**
45+
* Get the amount of experience this transaction will give
46+
* (takes priority over and uses result from {@link org.bukkit.event.block.BlockExpEvent})
47+
*
48+
* @return Amount of experience to give
49+
*/
50+
public int getExperienceAmount() {
51+
return this.experienceAmount;
52+
}
53+
54+
/**
55+
* Set the amount of experience this transaction will give
56+
* (takes priority over {@link org.bukkit.event.block.BlockExpEvent})
57+
*
58+
* @param experienceAmount Amount of experience to give
59+
*/
60+
public void setExperienceAmount(int experienceAmount) {
61+
this.experienceAmount = experienceAmount;
62+
}
63+
64+
@Override
65+
public HandlerList getHandlers() {
66+
return handlers;
67+
}
68+
69+
public static HandlerList getHandlerList() {
70+
return handlers;
71+
}
72+
}

purpur-server/minecraft-patches/sources/net/minecraft/world/inventory/GrindstoneMenu.java.patch

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
11
--- a/net/minecraft/world/inventory/GrindstoneMenu.java
22
+++ b/net/minecraft/world/inventory/GrindstoneMenu.java
3+
@@ -91,11 +_,13 @@
4+
@Override
5+
public void onTake(Player player, ItemStack stack) {
6+
access.execute((level, blockPos) -> {
7+
+ ItemStack itemstack = activeQuickItem == null ? stack : activeQuickItem; // Purpur - Grindstone API
8+
if (level instanceof ServerLevel) {
9+
// Paper start - Fire BlockExpEvent on grindstone use
10+
org.bukkit.event.block.BlockExpEvent event = new org.bukkit.event.block.BlockExpEvent(org.bukkit.craftbukkit.block.CraftBlock.at(level, blockPos), this.getExperienceAmount(level));
11+
event.callEvent();
12+
- ExperienceOrb.award((ServerLevel) level, Vec3.atCenterOf(blockPos), event.getExpToDrop(), org.bukkit.entity.ExperienceOrb.SpawnReason.GRINDSTONE, player);
13+
+ org.purpurmc.purpur.event.inventory.GrindstoneTakeResultEvent grindstoneTakeResultEvent = new org.purpurmc.purpur.event.inventory.GrindstoneTakeResultEvent(player.getBukkitEntity(), getBukkitView(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack), event.getExpToDrop()); grindstoneTakeResultEvent.callEvent(); // Purpur - Grindstone API
14+
+ ExperienceOrb.award((ServerLevel) level, Vec3.atCenterOf(blockPos), grindstoneTakeResultEvent.getExperienceAmount(), org.bukkit.entity.ExperienceOrb.SpawnReason.GRINDSTONE, player); // Purpur - Grindstone API
15+
// Paper end - Fire BlockExpEvent on grindstone use
16+
}
17+
318
@@ -124,7 +_,7 @@
419
for (Entry<Holder<Enchantment>> entry : enchantmentsForCrafting.entrySet()) {
520
Holder<Enchantment> holder = entry.getKey();
@@ -111,3 +126,13 @@
111126
return item;
112127
}
113128

129+
@@ -278,7 +_,9 @@
130+
return ItemStack.EMPTY;
131+
}
132+
133+
+ this.activeQuickItem = itemStack; // Purpur - Grindstone API
134+
slot.onTake(player, item);
135+
+ this.activeQuickItem = null; // Purpur - Grindstone API
136+
}
137+
138+
return itemStack;

0 commit comments

Comments
 (0)