UltimateStacker/UltimateStacker-Plugin/src/main/java/com.craftaro.ultimatestacker/listeners/item/ItemListeners.java

77 lines
3.1 KiB
Java
Raw Normal View History

2023-05-25 19:20:03 +02:00
package com.craftaro.ultimatestacker.listeners.item;
2019-06-04 09:17:25 +02:00
import com.craftaro.core.nms.NmsManager;
2024-01-07 12:16:27 +01:00
import com.craftaro.third_party.org.apache.commons.lang3.StringUtils;
2023-05-25 19:20:03 +02:00
import com.craftaro.ultimatestacker.UltimateStacker;
2023-07-08 11:15:54 +02:00
import com.craftaro.ultimatestacker.api.UltimateStackerApi;
2023-05-30 11:21:46 +02:00
import com.craftaro.ultimatestacker.api.stack.item.StackedItem;
2023-07-08 11:15:54 +02:00
import com.craftaro.ultimatestacker.api.stack.item.StackedItemManager;
2023-05-25 19:20:03 +02:00
import com.craftaro.ultimatestacker.settings.Settings;
import com.craftaro.ultimatestacker.utils.Methods;
import org.bukkit.block.Block;
2019-09-03 22:38:00 +02:00
import org.bukkit.block.BlockState;
2019-06-04 09:17:25 +02:00
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.ItemMergeEvent;
2023-07-08 11:15:54 +02:00
import org.bukkit.event.entity.ItemSpawnEvent;
2019-06-04 09:17:25 +02:00
import org.bukkit.event.inventory.InventoryPickupItemEvent;
2023-07-08 11:15:54 +02:00
import org.bukkit.inventory.ItemStack;
import java.util.List;
2020-03-22 17:46:22 +01:00
2019-06-04 09:17:25 +02:00
public class ItemListeners implements Listener {
2020-09-01 20:54:43 +02:00
private final UltimateStacker plugin;
2019-06-04 09:17:25 +02:00
2020-09-01 20:54:43 +02:00
public ItemListeners(UltimateStacker plugin) {
this.plugin = plugin;
2019-06-04 09:17:25 +02:00
}
@EventHandler
public void onMerge(ItemMergeEvent event) {
2019-09-07 23:55:16 +02:00
int maxItemStackSize = Settings.MAX_STACK_ITEMS.getInt();
if (!Settings.STACK_ITEMS.getBoolean()) return;
2019-06-30 04:28:53 +02:00
2023-05-30 11:20:31 +02:00
StackedItem stackedItem = UltimateStacker.getInstance().getStackedItemManager().merge(event.getEntity(), event.getTarget(), false, (fromStack, toStack, merged) -> {
if (fromStack == null && merged != null) {
//merge was successful
event.setCancelled(true);
event.getEntity().remove(); //remove the item that was merged
}
});
2019-06-04 09:17:25 +02:00
}
2023-05-05 10:57:17 +02:00
@EventHandler
2019-06-04 09:17:25 +02:00
public void onInvPickup(InventoryPickupItemEvent event) {
2023-05-30 11:20:31 +02:00
if (!Settings.STACK_ITEMS.getBoolean() || !UltimateStacker.getInstance().getStackedItemManager().isStackedItem(event.getItem())) {
return;
}
2019-06-04 09:17:25 +02:00
event.setCancelled(true);
2019-07-13 21:49:40 +02:00
Methods.updateInventory(event.getItem(), event.getInventory());
if (event.getInventory().getHolder() instanceof BlockState) {
Block invHolder = ((BlockState) event.getInventory().getHolder()).getBlock();
NmsManager.getWorld().updateAdjacentComparators(invHolder);
}
2019-06-04 09:17:25 +02:00
}
2023-07-08 11:15:54 +02:00
@EventHandler
public void onExist(ItemSpawnEvent event) {
if (!Settings.STACK_ITEMS.getBoolean()) return;
List<String> disabledWorlds = Settings.DISABLED_WORLDS.getStringList();
if (disabledWorlds.stream().anyMatch(worldStr -> event.getEntity().getWorld().getName().equalsIgnoreCase(worldStr)))
return;
ItemStack itemStack = event.getEntity().getItemStack();
if (itemStack.hasItemMeta() && itemStack.getItemMeta().hasDisplayName() &&
StringUtils.substring(itemStack.getItemMeta().getDisplayName(), 0, 3).equals("***")) {
return; //Compatibility with Shop instance: https://www.spigotmc.org/resources/shop-a-simple-intuitive-shop-instance.9628/
}
UltimateStackerApi.getStackedItemManager().createStack(event.getEntity(), itemStack.getAmount());
2023-07-08 11:15:54 +02:00
}
2019-06-04 09:17:25 +02:00
}