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