From 308dbe0fdb922860140ca4568a304b8b1bd234f3 Mon Sep 17 00:00:00 2001 From: themode Date: Wed, 31 Mar 2021 16:50:08 +0200 Subject: [PATCH] Initial item api rework --- .../java/net/minestom/server/item/Item.java | 64 +++++++++++++++++++ .../net/minestom/server/item/ItemBuilder.java | 45 +++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 src/main/java/net/minestom/server/item/Item.java create mode 100644 src/main/java/net/minestom/server/item/ItemBuilder.java diff --git a/src/main/java/net/minestom/server/item/Item.java b/src/main/java/net/minestom/server/item/Item.java new file mode 100644 index 000000000..9b5cb2b3d --- /dev/null +++ b/src/main/java/net/minestom/server/item/Item.java @@ -0,0 +1,64 @@ +package net.minestom.server.item; + +import net.kyori.adventure.text.Component; +import org.jetbrains.annotations.NotNull; + +import java.util.List; +import java.util.function.Consumer; +import java.util.function.IntUnaryOperator; + +public class Item { + + private final Material material; + private final int amount; + private final Component displayName; + private final List lore; + + protected Item(Material material, int amount, Component displayName, List lore) { + this.material = material; + this.amount = amount; + this.displayName = displayName; + this.lore = lore; + } + + @NotNull + public static ItemBuilder builder(@NotNull Material material) { + return new ItemBuilder(material); + } + + public ItemBuilder builder() { + return new ItemBuilder(material) + .amount(amount) + .displayName(displayName) + .lore(lore); + } + + @NotNull + public Item with(@NotNull Consumer builderConsumer) { + var builder = builder(); + builderConsumer.accept(builder); + return builder.build(); + } + + public int getAmount() { + return amount; + } + + @NotNull + public Item withAmount(int amount) { + return builder().amount(amount).build(); + } + + @NotNull + public Item withAmount(@NotNull IntUnaryOperator intUnaryOperator) { + return withAmount(intUnaryOperator.applyAsInt(amount)); + } + + public Component getDisplayName() { + return displayName; + } + + public List getLore() { + return lore; + } +} diff --git a/src/main/java/net/minestom/server/item/ItemBuilder.java b/src/main/java/net/minestom/server/item/ItemBuilder.java new file mode 100644 index 000000000..b707d1af2 --- /dev/null +++ b/src/main/java/net/minestom/server/item/ItemBuilder.java @@ -0,0 +1,45 @@ +package net.minestom.server.item; + +import net.kyori.adventure.text.Component; +import org.jetbrains.annotations.NotNull; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class ItemBuilder { + + private int amount; + private Component displayName; + private List lore; + + protected ItemBuilder(@NotNull Material material) { + + } + + public ItemBuilder amount(int amount) { + this.amount = amount; + return this; + } + + public ItemBuilder displayName(Component displayName) { + this.displayName = displayName; + return this; + } + + public ItemBuilder lore(Component... lore) { + this.lore = Arrays.asList(lore); + return this; + } + + public ItemBuilder lore(List lore) { + this.lore = Collections.unmodifiableList(lore); + return this; + } + + @NotNull + public Item build() { + return null; // TODO + } + +}