2023-05-25 19:20:03 +02:00
|
|
|
package com.craftaro.ultimatestacker.listeners.item;
|
2019-06-04 09:17:25 +02:00
|
|
|
|
2023-04-22 18:06:40 +02:00
|
|
|
import com.songoda.core.nms.NmsManager;
|
2023-05-25 19:20:03 +02:00
|
|
|
import com.craftaro.ultimatestacker.UltimateStacker;
|
|
|
|
import com.craftaro.ultimatestacker.settings.Settings;
|
|
|
|
import com.craftaro.ultimatestacker.utils.Methods;
|
2019-07-14 03:00:43 +02:00
|
|
|
import org.apache.commons.lang.StringUtils;
|
2023-04-22 18:06:40 +02:00
|
|
|
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.entity.Item;
|
|
|
|
import org.bukkit.event.EventHandler;
|
|
|
|
import org.bukkit.event.Listener;
|
|
|
|
import org.bukkit.event.entity.ItemMergeEvent;
|
|
|
|
import org.bukkit.event.entity.ItemSpawnEvent;
|
|
|
|
import org.bukkit.event.inventory.InventoryPickupItemEvent;
|
|
|
|
import org.bukkit.inventory.ItemStack;
|
|
|
|
|
2020-03-22 17:46:22 +01:00
|
|
|
import java.util.List;
|
|
|
|
|
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
|
|
|
|
2020-03-22 17:46:22 +01:00
|
|
|
List<String> disabledWorlds = Settings.DISABLED_WORLDS.getStringList();
|
2020-07-11 04:42:56 +02:00
|
|
|
if (disabledWorlds.stream().anyMatch(worldStr -> event.getEntity().getWorld().getName().equalsIgnoreCase(worldStr)))
|
|
|
|
return;
|
2020-03-22 17:46:22 +01:00
|
|
|
|
2019-08-13 02:59:32 +02:00
|
|
|
Item item = event.getTarget();
|
|
|
|
ItemStack itemStack = item.getItemStack();
|
|
|
|
|
2019-06-30 03:28:27 +02:00
|
|
|
event.setCancelled(true);
|
2019-06-04 09:17:25 +02:00
|
|
|
|
2020-09-01 20:54:43 +02:00
|
|
|
int specific = plugin.getItemFile().getInt("Items." + itemStack.getType().name() + ".Max Stack Size");
|
2019-09-10 20:11:12 +02:00
|
|
|
int max;
|
2019-06-04 09:17:25 +02:00
|
|
|
|
2019-09-10 20:11:12 +02:00
|
|
|
if (UltimateStacker.isMaterialBlacklisted(itemStack))
|
2019-08-13 02:59:32 +02:00
|
|
|
max = new ItemStack(itemStack.getType()).getMaxStackSize();
|
2019-09-10 20:11:12 +02:00
|
|
|
else
|
|
|
|
max = specific == -1 && new ItemStack(itemStack.getType()).getMaxStackSize() != 1 ? maxItemStackSize : specific;
|
2019-06-04 09:17:25 +02:00
|
|
|
|
|
|
|
if (max == -1) max = 1;
|
|
|
|
|
2019-09-10 20:11:12 +02:00
|
|
|
int newAmount = UltimateStacker.getActualItemAmount(event.getEntity())
|
|
|
|
+ UltimateStacker.getActualItemAmount(item);
|
2019-06-04 09:17:25 +02:00
|
|
|
|
|
|
|
if (newAmount > max) return;
|
|
|
|
|
2019-09-10 20:11:12 +02:00
|
|
|
UltimateStacker.updateItemAmount(item, itemStack, newAmount);
|
2019-06-04 09:17:25 +02:00
|
|
|
event.getEntity().remove();
|
|
|
|
}
|
2019-06-22 11:15:24 +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-04-22 18:06:40 +02:00
|
|
|
if (!Settings.STACK_ITEMS.getBoolean() || !UltimateStacker.hasCustomAmount(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());
|
2023-04-22 18:06:40 +02:00
|
|
|
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-05-05 10:57:17 +02:00
|
|
|
@EventHandler
|
2019-07-14 03:00:43 +02:00
|
|
|
public void onExist(ItemSpawnEvent event) {
|
2019-09-07 23:55:16 +02:00
|
|
|
if (!Settings.STACK_ITEMS.getBoolean()) return;
|
2019-06-04 09:17:25 +02:00
|
|
|
|
2020-03-22 17:46:22 +01:00
|
|
|
List<String> disabledWorlds = Settings.DISABLED_WORLDS.getStringList();
|
2020-07-11 04:42:56 +02:00
|
|
|
if (disabledWorlds.stream().anyMatch(worldStr -> event.getEntity().getWorld().getName().equalsIgnoreCase(worldStr)))
|
|
|
|
return;
|
2020-03-22 17:46:22 +01:00
|
|
|
|
2019-07-14 03:00:43 +02:00
|
|
|
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/
|
|
|
|
}
|
|
|
|
|
2023-01-02 13:38:58 +01:00
|
|
|
if (UltimateStacker.hasCustomAmount(event.getEntity())) {
|
|
|
|
UltimateStacker.updateItemAmount(event.getEntity(), itemStack, UltimateStacker.getActualItemAmount(event.getEntity()) + itemStack.getAmount());
|
|
|
|
} else {
|
|
|
|
UltimateStacker.updateItemAmount(event.getEntity(), itemStack, itemStack.getAmount());
|
|
|
|
}
|
|
|
|
|
2019-06-04 09:17:25 +02:00
|
|
|
}
|
|
|
|
}
|