feat: implemented undroppable and static slot items

This commit is contained in:
Andrey Terentev 2024-10-24 22:59:06 +07:00
parent 63def77581
commit c8c0868f56

View File

@ -0,0 +1,47 @@
package ru.dragonestia.msb3.api.item;
import lombok.experimental.UtilityClass;
import net.minestom.server.MinecraftServer;
import net.minestom.server.event.inventory.InventoryPreClickEvent;
import net.minestom.server.event.item.ItemDropEvent;
import net.minestom.server.event.player.PlayerSwapItemEvent;
import net.minestom.server.tag.Tag;
@UtilityClass
public class ItemUtil {
private boolean initialized = false;
public final Tag<Boolean> TAG_UNDROPPABLE = Tag.Boolean("msb3_undroppable");
public final Tag<Boolean> TAG_STATIC_SLOT = Tag.Boolean("msb3_static_slot");
public synchronized void init() {
if (initialized) return;
initialized = true;
MinecraftServer.getGlobalEventHandler()
.addListener(ItemDropEvent.class, event -> {
var item = event.getItemStack();
boolean undroppable = false;
if (item.hasTag(TAG_UNDROPPABLE) && item.getTag(TAG_UNDROPPABLE)) undroppable = true;
if (item.hasTag(TAG_STATIC_SLOT) && item.getTag(TAG_STATIC_SLOT)) undroppable = true;
if (undroppable) event.setCancelled(true);
}).addListener(PlayerSwapItemEvent.class, event -> {
var item = event.getOffHandItem();
boolean unswappable = false;
if (item.hasTag(TAG_UNDROPPABLE) && item.getTag(TAG_UNDROPPABLE)) unswappable = true;
if (item.hasTag(TAG_STATIC_SLOT) && item.getTag(TAG_STATIC_SLOT)) unswappable = true;
if (unswappable) event.setCancelled(true);
}).addListener(InventoryPreClickEvent.class, event -> {
var inSlot = event.getClickedItem();
if (inSlot.hasTag(TAG_STATIC_SLOT) && inSlot.getTag(TAG_STATIC_SLOT)) {
event.setCancelled(true);
}
});
}
}