Initial Commit

This commit is contained in:
thetrouper
2025-06-01 09:02:30 -05:00
parent f0194d70d5
commit bb27bccfdf
3 changed files with 111 additions and 8 deletions

View File

@@ -0,0 +1,103 @@
package me.trouper.trimalias.server.systems.builders;
import org.bukkit.Material;
import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeModifier;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
public class ItemBuilder {
private ItemStack stack;
private ItemMeta meta;
public ItemBuilder() {
this(new ItemStack(Material.STONE));
}
public ItemBuilder(ItemStack stack) {
this.stack = stack;
this.meta = this.stack.getItemMeta();
}
public ItemBuilder material(Material m) {
stack.setType(m);
return this;
}
public ItemBuilder name(String s) {
meta.setDisplayName(s);
return this;
}
public ItemBuilder lore(String s) {
List<String> lore = meta.hasLore() ? meta.getLore() : new ArrayList<>();
lore.add(s);
meta.setLore(lore);
return this;
}
public ItemBuilder lore(Iterable<String> s) {
s.forEach(this::lore);
return this;
}
public ItemBuilder count(int c) {
stack.setAmount(c);
return this;
}
public ItemBuilder enchant(Enchantment e, int level) {
meta.addEnchant(e,level,true);
return this;
}
public ItemBuilder flag(ItemFlag... f) {
meta.addItemFlags(f);
return this;
}
public ItemBuilder attribute(Attribute a, AttributeModifier am) {
meta.addAttributeModifier(a,am);
return this;
}
public ItemBuilder unbreakable(boolean b) {
meta.setUnbreakable(b);
return this;
}
public ItemBuilder customModelData(int d) {
meta.setCustomModelData(d);
return this;
}
public ItemBuilder runTaskItem(Function<ItemStack, ItemStack> task) {
this.stack = task.apply(build());
return this;
}
public ItemBuilder runTaskMeta(Function<ItemMeta, ItemMeta> task) {
this.meta = task.apply(meta);
return this;
}
public ItemStack build() {
stack.setItemMeta(meta);
return stack;
}
public static ItemBuilder create() {
return new ItemBuilder();
}
public static ItemBuilder create(ItemStack item) {
return new ItemBuilder(item);
}
}

View File

@@ -1,15 +1,15 @@
package me.trouper.trimalias.server.systems.items; package me.trouper.trimalias.server.systems.items;
import com.google.gson.Gson; import com.google.gson.Gson;
import io.github.itzispyder.pdk.Global; import me.trouper.trimalias.server.Main;
import io.github.itzispyder.pdk.plugin.builders.ItemBuilder; import me.trouper.trimalias.server.systems.builders.ItemBuilder;
import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import java.util.Arrays; import java.util.Arrays;
public abstract class CustomItem implements Global { public abstract class CustomItem implements Main {
public abstract void createItem(ItemBuilder item); public abstract void createItem(ItemBuilder item);

View File

@@ -1,8 +1,8 @@
package me.trouper.trimalias.server.systems.items; package me.trouper.trimalias.server.systems.items;
import com.google.gson.Gson; import com.google.gson.Gson;
import io.github.itzispyder.pdk.Global; import me.trouper.trimalias.server.Main;
import io.github.itzispyder.pdk.plugin.builders.ItemBuilder; import me.trouper.trimalias.server.systems.builders.ItemBuilder;
import org.bukkit.NamespacedKey; import org.bukkit.NamespacedKey;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@@ -14,19 +14,19 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.function.Supplier; import java.util.function.Supplier;
public class ItemManager { public class ItemManager implements Main {
private static final Gson gson = new Gson(); private static final Gson gson = new Gson();
private static final Map<NamespacedKey, Supplier<CustomItem>> itemRegistry = new HashMap<>(); private static final Map<NamespacedKey, Supplier<CustomItem>> itemRegistry = new HashMap<>();
public static NamespacedKey registerItem(String namespace, Supplier<CustomItem> context) { public static NamespacedKey registerItem(String namespace, Supplier<CustomItem> context) {
NamespacedKey key = new NamespacedKey(Global.instance.getPlugin(), "items/" + namespace); NamespacedKey key = new NamespacedKey(main.getPlugin(), "items/" + namespace);
itemRegistry.put(key, context); itemRegistry.put(key, context);
return key; return key;
} }
public static ItemStack createItemContext(String namespace) { public static ItemStack createItemContext(String namespace) {
NamespacedKey key = new NamespacedKey(Global.instance.getPlugin(), "items/" + namespace); NamespacedKey key = new NamespacedKey(main.getPlugin(), "items/" + namespace);
Supplier<CustomItem> registry = itemRegistry.get(key); Supplier<CustomItem> registry = itemRegistry.get(key);
if (registry == null) if (registry == null)
throw new IllegalArgumentException("context not found in item registry"); throw new IllegalArgumentException("context not found in item registry");