Skip to content

Commit f96556a

Browse files
authored
Crafter Slot Enable/Disable Support (fixes #766) (#767)
* Crafter Slot Enable/Disable Support (fixes #766) * Exclude negative slot values
1 parent 813fee1 commit f96556a

File tree

1 file changed

+51
-9
lines changed

1 file changed

+51
-9
lines changed

src/main/java/net/coreprotect/listener/player/InventoryChangeListener.java

Lines changed: 51 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,15 @@
1010
import org.bukkit.Location;
1111
import org.bukkit.Material;
1212
import org.bukkit.World;
13+
import org.bukkit.block.Block;
1314
import org.bukkit.block.BlockState;
1415
import org.bukkit.block.DoubleChest;
1516
import org.bukkit.entity.Player;
1617
import org.bukkit.event.EventHandler;
1718
import org.bukkit.event.EventPriority;
1819
import org.bukkit.event.Listener;
19-
import org.bukkit.event.inventory.InventoryAction;
20-
import org.bukkit.event.inventory.InventoryClickEvent;
21-
import org.bukkit.event.inventory.InventoryDragEvent;
22-
import org.bukkit.event.inventory.InventoryMoveItemEvent;
23-
import org.bukkit.event.inventory.InventoryType;
24-
import org.bukkit.inventory.BlockInventoryHolder;
25-
import org.bukkit.inventory.Inventory;
26-
import org.bukkit.inventory.InventoryHolder;
27-
import org.bukkit.inventory.ItemStack;
20+
import org.bukkit.event.inventory.*;
21+
import org.bukkit.inventory.*;
2822

2923
import net.coreprotect.CoreProtect;
3024
import net.coreprotect.config.Config;
@@ -342,9 +336,57 @@ private boolean checkAnvilOperation(InventoryClickEvent event) {
342336
return true;
343337
}
344338

339+
private boolean checkCrafterSlotChange(InventoryClickEvent event) {
340+
// Check if the clicked inventory is a crafter
341+
if (event.getInventory().getType() != InventoryType.CRAFTER) {
342+
return false;
343+
}
344+
345+
// Check that the Action is NOTHING
346+
if (event.getAction() != InventoryAction.NOTHING) {
347+
return false;
348+
}
349+
350+
// Check if the clicked slot is one of the crafter slots
351+
if (event.getRawSlot() < 0 || event.getRawSlot() > 8) {
352+
return false;
353+
}
354+
355+
// Check that the click type is not a middle click
356+
if (!(event.getClick() == ClickType.LEFT || event.getClick() == ClickType.RIGHT)) {
357+
return false;
358+
}
359+
360+
// Gather other necessary information
361+
Player player = (Player) event.getWhoClicked();
362+
Inventory inventory = event.getInventory();
363+
364+
Location location = null;
365+
try {
366+
location = inventory.getLocation();
367+
} catch (Exception e) {
368+
return false;
369+
}
370+
371+
if (location == null) {
372+
return false;
373+
}
374+
375+
Block block = location.getBlock();
376+
BlockState blockState = block.getState();
377+
378+
Queue.queueBlockPlace(player.getName(), blockState, block.getType(), blockState, block.getType(), -1, 0, blockState.getBlockData().getAsString());
379+
return true;
380+
}
381+
345382
@EventHandler(priority = EventPriority.LOWEST)
346383
protected void onInventoryClick(InventoryClickEvent event) {
347384
InventoryAction inventoryAction = event.getAction();
385+
386+
if (checkCrafterSlotChange(event)) {
387+
return;
388+
}
389+
348390
if (inventoryAction == InventoryAction.NOTHING) {
349391
return;
350392
}

0 commit comments

Comments
 (0)