feat: implemented undroppable and static slot items
This commit is contained in:
parent
63def77581
commit
c8c0868f56
47
api/src/main/java/ru/dragonestia/msb3/api/item/ItemUtil.java
Normal file
47
api/src/main/java/ru/dragonestia/msb3/api/item/ItemUtil.java
Normal 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);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user