Skip to content

Instantly share code, notes, and snippets.

@M0rais
Last active October 28, 2021 16:26
Show Gist options
  • Select an option

  • Save M0rais/8d6022df4dd922807ebcca16bcf30165 to your computer and use it in GitHub Desktop.

Select an option

Save M0rais/8d6022df4dd922807ebcca16bcf30165 to your computer and use it in GitHub Desktop.
Verify Take and Put item from inventory
public class InventoryListener implements Listener {
@EventHandler
public void onInventoryInteract(final InventoryClickEvent event) {
if (event.getInventory() == null) return;
int slot = event.getRawSlot();
if (slot < event.getInventory().getSize()) {
//Verify inventory
Player player = (Player) event.getWhoClicked();
PlayerInventory playerInventory = player.getInventory();
Inventory inventory = event.getInventory();
ItemStack item = inventory.getItem(slot);
if (item == null) {
//If the item on the slot is null
int hotBar = event.getHotbarButton();
if (hotBar == -1) {
//If isn't hotbar verify normal click
item = event.getCursor();
if (item == null || item.getType() == Material.AIR) return;
callEvent(new PutItemEvent(player, inventory, item));
return;
}
//Is hotbar
item = playerInventory.getItem(hotBar);
if (item == null) return;
callEvent(new PutItemEvent(player, inventory, item));
return;
}
//Item isn't null
if (event.getClick().isShiftClick()) {
//Is shift click, verify free space player inventory
if (playerInventory.firstEmpty() == -1) return;
callEvent(new TakeItemEvent(player, playerInventory, item));
return;
}
int hotBar = event.getHotbarButton();
if (hotBar > -1) {
//Verify hotbar and verify free space player
if (playerInventory.firstEmpty() == -1) return;
callEvent(new TakeItemEvent(player, playerInventory, item));
return;
}
//Normal click
callEvent(new TakeItemEvent(player, playerInventory, item));
}
if (event.isShiftClick()) {
//Verify put with shift
ItemStack item = event.getClickedInventory().getItem(event.getSlot());
if (item == null) return;
if (inventory.firstEmpty() == -1) return;
callEvent(new PutItemEvent(player, inventory, item));
}
}
@EventHandler
public void onTake(TakeItemEvent event) {
System.out.println("take");
}
@EventHandler
public void onPut(PutItemEvent event) {
System.out.println("put");
}
public void callEvent(Event event) {
Bukkit.getServer().getPluginManager().callEvent(event);
}
}
public class PutItemEvent extends Event {
private static final HandlerList HANDLERS = new HandlerList();
private final Player player;
private final Inventory targetInventory;
private final ItemStack item;
public PutItemEvent(Player player, Inventory targetInventory, ItemStack item) {
this.player = player;
this.targetInventory = targetInventory;
this.item = item;
}
public Player getPlayer() {
return player;
}
public Inventory getTargetInventory() {
return targetInventory;
}
public ItemStack getItem() {
return item;
}
@Override
public HandlerList getHandlers() {
return HANDLERS;
}
public static HandlerList getHandlerList() {
return HANDLERS;
}
}
public class TakeItemEvent extends Event {
private static final HandlerList HANDLERS = new HandlerList();
private final Player player;
private final Inventory fromInventory;
private final ItemStack item;
public TakeItemEvent(Player player, Inventory fromInventory, ItemStack item) {
this.player = player;
this.fromInventory = fromInventory;
this.item = item;
}
public Player getPlayer() {
return player;
}
public Inventory getFromInventory() {
return fromInventory;
}
public ItemStack getItem() {
return item;
}
@Override
public HandlerList getHandlers() {
return HANDLERS;
}
public static HandlerList getHandlerList() {
return HANDLERS;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment