Skip to content
This repository was archived by the owner on Feb 2, 2026. It is now read-only.

Commit 5be6590

Browse files
authored
feat: craft event (#132)
1 parent c154139 commit 5be6590

File tree

3 files changed

+90
-2
lines changed

3 files changed

+90
-2
lines changed
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package io.github.sefiraat.networks.events;
2+
3+
import javax.annotation.Nonnull;
4+
import javax.annotation.Nullable;
5+
6+
import org.bukkit.entity.Player;
7+
import org.bukkit.event.player.PlayerEvent;
8+
import org.bukkit.event.Cancellable;
9+
import org.bukkit.event.HandlerList;
10+
import org.bukkit.inventory.ItemStack;
11+
12+
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItem;
13+
14+
public class NetworkCraftEvent extends PlayerEvent implements Cancellable {
15+
private static final HandlerList handlers = new HandlerList();
16+
17+
private final SlimefunItem machine;
18+
private final ItemStack[] input;
19+
private ItemStack output;
20+
private boolean cancelled;
21+
22+
public NetworkCraftEvent(Player p, SlimefunItem machine, ItemStack[] input, ItemStack output) {
23+
super(p);
24+
25+
this.input = input;
26+
this.output = output;
27+
this.machine = machine;
28+
}
29+
30+
public @Nonnull ItemStack[] getInput() {
31+
return this.input;
32+
}
33+
34+
public @Nonnull ItemStack getOutput() {
35+
return this.output;
36+
}
37+
38+
public @Nullable ItemStack setOutput(@Nullable ItemStack output) {
39+
ItemStack oldOutput = this.output;
40+
this.output = output;
41+
return oldOutput;
42+
}
43+
44+
public SlimefunItem getMachine() {
45+
return this.machine;
46+
}
47+
48+
@Override
49+
public boolean isCancelled() {
50+
return this.cancelled;
51+
}
52+
53+
@Override
54+
public void setCancelled(boolean cancel) {
55+
this.cancelled = cancel;
56+
}
57+
58+
public static @Nonnull HandlerList getHandlerList() {
59+
return handlers;
60+
}
61+
62+
@Override
63+
public HandlerList getHandlers() {
64+
return getHandlerList();
65+
}
66+
}

src/main/java/io/github/sefiraat/networks/slimefun/network/NetworkQuantumWorkbench.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package io.github.sefiraat.networks.slimefun.network;
22

33
import com.xzavier0722.mc.plugin.slimefun4.storage.util.StorageCacheUtils;
4+
5+
import io.github.sefiraat.networks.events.NetworkCraftEvent;
46
import io.github.sefiraat.networks.network.stackcaches.QuantumCache;
57
import io.github.sefiraat.networks.utils.Keys;
68
import io.github.sefiraat.networks.utils.Theme;
@@ -18,6 +20,8 @@
1820
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
1921
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
2022
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
23+
24+
import org.bukkit.Bukkit;
2125
import org.bukkit.Material;
2226
import org.bukkit.block.Block;
2327
import org.bukkit.entity.Player;
@@ -96,14 +100,14 @@ public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
96100
@Override
97101
public void newInstance(@Nonnull BlockMenu menu, @Nonnull Block b) {
98102
menu.addMenuClickHandler(CRAFT_SLOT, (p, slot, item, action) -> {
99-
craft(menu);
103+
craft(menu, p);
100104
return false;
101105
});
102106
}
103107
};
104108
}
105109

106-
public void craft(@Nonnull BlockMenu menu) {
110+
public void craft(@Nonnull BlockMenu menu, Player player) {
107111
final ItemStack itemInOutput = menu.getItemInSlot(OUTPUT_SLOT);
108112

109113
// Quick escape, we only allow crafting if the output is empty
@@ -154,6 +158,14 @@ public void craft(@Nonnull BlockMenu menu) {
154158
}
155159
}
156160

161+
// fire craft event
162+
NetworkCraftEvent event = new NetworkCraftEvent(player, this, inputs, crafted);
163+
Bukkit.getPluginManager().callEvent(event);
164+
if (event.isCancelled()) {
165+
return;
166+
}
167+
crafted = event.getOutput();
168+
157169
menu.pushItem(crafted, OUTPUT_SLOT);
158170
for (int recipeSlot : RECIPE_SLOTS) {
159171
if (menu.getItemInSlot(recipeSlot) != null) {

src/main/java/io/github/sefiraat/networks/slimefun/network/grid/NetworkCraftingGrid.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.github.sefiraat.networks.slimefun.network.grid;
22

33
import io.github.sefiraat.networks.NetworkStorage;
4+
import io.github.sefiraat.networks.events.NetworkCraftEvent;
45
import io.github.sefiraat.networks.network.GridItemRequest;
56
import io.github.sefiraat.networks.network.NodeDefinition;
67
import io.github.sefiraat.networks.network.SupportedRecipes;
@@ -227,6 +228,15 @@ private void tryCraft(@Nonnull BlockMenu menu, @Nonnull Player player) {
227228
return;
228229
}
229230

231+
// fire craft event
232+
NetworkCraftEvent event = new NetworkCraftEvent(player, this, inputs, crafted);
233+
Bukkit.getPluginManager().callEvent(event);
234+
if (event.isCancelled()) {
235+
return;
236+
}
237+
crafted = event.getOutput();
238+
239+
230240
// Push item
231241
menu.pushItem(crafted, CRAFT_OUTPUT_SLOT);
232242

0 commit comments

Comments
 (0)