Configuration option & item listener

This commit is contained in:
Roch Blonndiaux 2023-03-13 15:17:33 +01:00
parent 5f1e32d581
commit 4f61291d7c
3 changed files with 119 additions and 1 deletions

View File

@ -28,6 +28,7 @@ public class MMOItemsBukkit {
if (plugin.getConfig().getBoolean("dropped-items.tier-glow") || plugin.getConfig().getBoolean("dropped-items.hints"))
Bukkit.getPluginManager().registerEvents(new DroppedItems(plugin.getConfig().getConfigurationSection("dropped-items")), plugin);
Bukkit.getPluginManager().registerEvents(new DisabledItemsListener(plugin), plugin);
Bukkit.getScheduler().runTaskTimer(plugin, () -> Bukkit.getOnlinePlayers().forEach(player -> PlayerData.get(player).updateStats()), 100, 20);
}

View File

@ -0,0 +1,114 @@
package net.Indyuce.mmoitems.listener;
import io.lumine.mythic.lib.MythicLib;
import io.lumine.mythic.lib.api.event.PlayerAttackEvent;
import io.lumine.mythic.lib.api.item.NBTItem;
import io.lumine.mythic.lib.damage.MeleeAttackMetadata;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.Type;
import org.bukkit.GameMode;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.entity.EntityShootBowEvent;
import org.bukkit.event.inventory.InventoryAction;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerItemConsumeEvent;
import org.bukkit.inventory.ItemStack;
/**
* mmoitems
* 13/03/2023
*
* @author Roch Blondiaux (Kiwix).
*/
public class DisabledItemsListener implements Listener {
private final MMOItems plugin;
public DisabledItemsListener(MMOItems plugin) {
this.plugin = plugin;
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void rightClickEffects(PlayerInteractEvent event) {
if (!event.hasItem())
return;
NBTItem item = MythicLib.plugin.getVersion().getWrapper().getNBTItem(event.getItem());
if (this.shouldCancel(item))
event.setCancelled(true);
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void meleeAttacks(PlayerAttackEvent event) {
if (!(event.getAttack() instanceof MeleeAttackMetadata))
return;
ItemStack weaponUsed = event.getPlayer().getInventory().getItem(((MeleeAttackMetadata) event.getAttack()).getHand().toBukkit());
NBTItem item = MythicLib.plugin.getVersion().getWrapper().getNBTItem(weaponUsed);
if (this.shouldCancel(item))
event.setCancelled(true);
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void specialToolAbilities(BlockBreakEvent event) {
final Player player = event.getPlayer();
if (player.getGameMode() == GameMode.CREATIVE)
return;
final NBTItem item = MythicLib.plugin.getVersion().getWrapper().getNBTItem(player.getInventory().getItemInMainHand());
if (this.shouldCancel(item))
event.setCancelled(true);
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void rightClickWeaponInteractions(PlayerInteractEntityEvent event) {
Player player = event.getPlayer();
if (!(event.getRightClicked() instanceof LivingEntity))
return;
NBTItem item = MythicLib.plugin.getVersion().getWrapper().getNBTItem(player.getInventory().getItemInMainHand());
if (this.shouldCancel(item))
event.setCancelled(true);
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void gemStonesAndItemStacks(InventoryClickEvent event) {
Player player = (Player) event.getWhoClicked();
if (event.getAction() != InventoryAction.SWAP_WITH_CURSOR)
return;
NBTItem item = MythicLib.plugin.getVersion().getWrapper().getNBTItem(event.getCursor());
if (this.shouldCancel(item))
event.setCancelled(true);
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void handleCustomBows(EntityShootBowEvent event) {
if (!(event.getProjectile() instanceof Arrow) || !(event.getEntity() instanceof Player))
return;
final NBTItem item = NBTItem.get(event.getBow());
if (shouldCancel(item))
event.setCancelled(true);
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void handleVanillaEatenConsumables(PlayerItemConsumeEvent event) {
NBTItem item = MythicLib.plugin.getVersion().getWrapper().getNBTItem(event.getItem());
if (shouldCancel(item))
event.setCancelled(true);
}
private boolean shouldCancel(NBTItem item) {
if (!item.hasType() || !plugin.getConfig().getBoolean("disable-removed-items", true))
return false;
return !Type.isValid(item.getType());
}
}

View File

@ -1,4 +1,3 @@
# DO NOT TOUCH
config-version: 8
@ -379,5 +378,9 @@ lootsplosion:
# gems' stats will increase as well.
gem-upgrade-default: 'NEVER'
# This option allows you to disable the ability to
# use MMOItems that have been removed from your config.
disable-removed-items: true
# When I was a kid, I saw the Mona Lisa in my school art book...
# The fist time I saw her, with her hands on her knee... how do I say this...