Stage 12: Data storage system

This commit is contained in:
loki5512344 2026-05-31 20:47:02 +02:00
parent 82ed455cd2
commit 4fd7955d56
62 changed files with 5613 additions and 0 deletions

View file

@ -0,0 +1,96 @@
package dev.loki.item;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.persistence.PersistentDataContainer;
import org.bukkit.persistence.PersistentDataType;
import java.util.Arrays;
public class ItemMedkit implements BaseItem {
private static final NamespacedKey ITEM_KEY = new NamespacedKey("mdbd", "item_type");
private static final NamespacedKey CHARGES_KEY = new NamespacedKey("mdbd", "charges");
private final int charges;
public ItemMedkit() {
this(ItemType.MEDKIT.getDefaultCharges());
}
public ItemMedkit(int charges) {
this.charges = charges;
}
@Override
public ItemType getType() {
return ItemType.MEDKIT;
}
@Override
public ItemStack createItemStack() {
ItemStack item = new ItemStack(Material.PAPER);
ItemMeta meta = item.getItemMeta();
if (meta != null) {
meta.setDisplayName("§a" + getType().getDisplayName());
meta.setLore(Arrays.asList(
"§7" + getType().getDescription(),
"§eCharges: §f" + charges + "/" + getType().getDefaultCharges(),
"§7Right-click to heal"
));
PersistentDataContainer pdc = meta.getPersistentDataContainer();
pdc.set(ITEM_KEY, PersistentDataType.STRING, getItemId());
pdc.set(CHARGES_KEY, PersistentDataType.INTEGER, charges);
item.setItemMeta(meta);
}
return item;
}
@Override
public boolean canUse(Player player) {
return charges > 0;
}
@Override
public void onUse(Player player) {
if (charges > 0) {
player.sendMessage("§aYou start healing...");
}
}
@Override
public void onDeplete(Player player) {
player.getInventory().setItemInMainHand(null);
player.sendMessage("§cYour medkit has been depleted!");
}
@Override
public int getCharges() {
return charges;
}
@Override
public void setCharges(int charges) {
}
@Override
public boolean isDepleted() {
return charges <= 0;
}
@Override
public String getItemId() {
return "MEDKIT";
}
public static boolean isMedkit(ItemStack item) {
if (item == null || !item.hasItemMeta()) return false;
PersistentDataContainer pdc = item.getItemMeta().getPersistentDataContainer();
return "MEDKIT".equals(pdc.get(ITEM_KEY, PersistentDataType.STRING));
}
}