diff --git a/src/main/java/io/github/simplexdev/simplexcore/sign/AbstractSign.java b/src/main/java/io/github/simplexdev/simplexcore/block/AbstractSign.java similarity index 96% rename from src/main/java/io/github/simplexdev/simplexcore/sign/AbstractSign.java rename to src/main/java/io/github/simplexdev/simplexcore/block/AbstractSign.java index 42d3219..6cec7c9 100644 --- a/src/main/java/io/github/simplexdev/simplexcore/sign/AbstractSign.java +++ b/src/main/java/io/github/simplexdev/simplexcore/block/AbstractSign.java @@ -1,4 +1,4 @@ -package io.github.simplexdev.simplexcore.sign; +package io.github.simplexdev.simplexcore.block; import io.github.simplexdev.api.IUsableSign; import io.github.simplexdev.api.func.VoidSupplier; diff --git a/src/main/java/io/github/simplexdev/simplexcore/block/InteractableBlock.java b/src/main/java/io/github/simplexdev/simplexcore/block/InteractableBlock.java new file mode 100644 index 0000000..dd4a366 --- /dev/null +++ b/src/main/java/io/github/simplexdev/simplexcore/block/InteractableBlock.java @@ -0,0 +1,27 @@ +package io.github.simplexdev.simplexcore.block; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; + +public class InteractableBlock { + private final Block block; + private final Location location; + private final Material material; + + public InteractableBlock(Location location) { + this.block = location.getBlock(); + this.location = block.getLocation(); + this.material = block.getType(); + } + + public InteractableBlock(Block block) { + this.block = block; + this.location = block.getLocation(); + this.material = block.getType(); + } + + public void test() { + + } +} diff --git a/src/main/java/io/github/simplexdev/simplexcore/sign/SignFactory.java b/src/main/java/io/github/simplexdev/simplexcore/block/SignFactory.java similarity index 98% rename from src/main/java/io/github/simplexdev/simplexcore/sign/SignFactory.java rename to src/main/java/io/github/simplexdev/simplexcore/block/SignFactory.java index b56feea..5a5ab34 100644 --- a/src/main/java/io/github/simplexdev/simplexcore/sign/SignFactory.java +++ b/src/main/java/io/github/simplexdev/simplexcore/block/SignFactory.java @@ -1,4 +1,4 @@ -package io.github.simplexdev.simplexcore.sign; +package io.github.simplexdev.simplexcore.block; import io.github.simplexdev.api.IUsableSign; import io.github.simplexdev.api.func.VoidSupplier; diff --git a/src/main/java/io/github/simplexdev/simplexcore/crafting/ItemBuilder.java b/src/main/java/io/github/simplexdev/simplexcore/crafting/ItemBuilder.java index 65a3387..b717814 100644 --- a/src/main/java/io/github/simplexdev/simplexcore/crafting/ItemBuilder.java +++ b/src/main/java/io/github/simplexdev/simplexcore/crafting/ItemBuilder.java @@ -19,20 +19,80 @@ public class ItemBuilder { this.plugin = plugin; } + /** + * Create a new singular ItemStack. + * @param material The material for the item. + * @return A new ItemStack from the provided material. + */ public ItemStack createNoBounds(Material material) { return new ItemStack(material, 1); } + /** + * Create a new ItemStack. + * @param material The material for the item. + * @param amount The amount of items the stack should represent. + * @return A new ItemStack from the provided material. + */ + public ItemStack createNoBounds(Material material, int amount) { + return new ItemStack(material, amount); + } + + /** + * Create a new singular ItemStack with the specified ItemMeta. + * @param material The material for the item. + * @param metaData The ItemMeta to use for the item. + * @return A new ItemStack from the provided material with the specified ItemMeta. + */ public ItemStack createWithMeta(Material material, ItemMeta metaData) { ItemStack stack = new ItemStack(material, 1); stack.setItemMeta(metaData); return stack; } - public Worker itemBuilder(Material material) { + /** + * Create a new ItemStack with the specified ItemMeta. + * @param material The material for the item. + * @param metaData The ItemMeta to use for the item. + * @param amount The amount of items the stack should represent. + * @return A new ItemStack from the provided material with the specified ItemMeta. + */ + public ItemStack createWithMeta(Material material, ItemMeta metaData, int amount) { + ItemStack stack = new ItemStack(material, amount); + stack.setItemMeta(metaData); + return stack; + } + + /** + * Create a new ItemBuilder Worker + * @param material The material for the item. + * @return A new appendable ItemBuilder Worker instance based on the given Material. + */ + public Worker newItem(Material material) { return new Worker(new ItemStack(material, 1)); } + /** + * Create a new ItemBuilder Worker + * @param material The material for the item. + * @param amount The amount of items the stack should represent. + * @return A new appendable ItemBuilder Worker instance based on the given Material. + */ + public Worker newItem(Material material, int amount) { + return new Worker(new ItemStack(material, amount)); + } + + public Worker editItem(ItemStack stack) { + return new Worker(stack); + } + + /** + * Create a new AttributeModifier for an ItemStack's ItemMeta. + * @param name The name of the modifier. + * @param amount The amount to add + * @param scalar Whether or not it should add as a number or a magnitude. + * @return A new AttributeModifier. + */ public AttributeModifier add(String name, double amount, boolean scalar) { if (scalar) { return new AttributeModifier(name, amount, AttributeModifier.Operation.ADD_SCALAR); @@ -40,6 +100,12 @@ public class ItemBuilder { return new AttributeModifier(name, amount, AttributeModifier.Operation.ADD_NUMBER); } + /** + * Create a new AttributeModifier for an ItemStack's ItemMeta. + * @param name The name of the modifier + * @param amount The amount to multiply by + * @return A new AttributeModifier. + */ public AttributeModifier multiply(String name, double amount) { return new AttributeModifier(name, amount, AttributeModifier.Operation.MULTIPLY_SCALAR_1); } @@ -48,41 +114,94 @@ public class ItemBuilder { private final ItemStack stack; private final ItemMeta meta; + /** + * @param stack The item to work from. + */ public Worker(ItemStack stack) { this.stack = stack; this.meta = stack.getItemMeta(); } + /** + * Adds lore to the item. New lines should be separate Strings. + * @param lore The item lore to add. + * @return An appendable worker instance. + */ public final Worker addLore(String... lore) { meta.setLore(Arrays.asList(lore)); stack.setItemMeta(meta); return this; } + /** + * Change the item's name + * @param customName The new name of the item. + * @return An appendable worker instance. + */ public final Worker setName(String customName) { meta.setDisplayName(customName); stack.setItemMeta(meta); return this; } + /** + * Add an enchantment to the item + * @param enchantment The enchantment to add + * @param level The level of the enchantment. This is non-restrictive. + * @return An appendable worker instance. + */ public final Worker addEnchant(Enchantment enchantment, int level) { meta.addEnchant(enchantment, level, true); stack.setItemMeta(meta); return this; } + /** + * Add an attribute to the item. + * @param attribute The attribute to add. + * @param modifier The type of attribute modifier to use. + * @return An appendable worker instance. + */ public final Worker addAttribute(Attribute attribute, AttributeModifier modifier) { meta.addAttributeModifier(attribute, modifier); stack.setItemMeta(meta); return this; } + /** + * Add item flags to an item. + * @param flags Any amount of ItemFlags to add to the item. + * @return An appendable worker instance. + */ public final Worker addItemFlags(ItemFlag... flags) { meta.addItemFlags(flags); stack.setItemMeta(meta); return this; } + /** + * Set the amount of items this stack should represent. + * @param amount The amount of items this stack should represent. + * @return An appendable worker instance. + */ + public final Worker setAmount(int amount) { + stack.setAmount(amount); + return this; + } + + public final Worker setType(Material material) { + stack.setType(material); + return this; + } + + public final Worker setUnbreakable(boolean unbreakable) { + meta.setUnbreakable(unbreakable); + return this; + } + + /** + * @return The final item. + */ public final ItemStack get() { return stack; } diff --git a/src/main/java/io/github/simplexdev/simplexcore/crafting/RBImpl.java b/src/main/java/io/github/simplexdev/simplexcore/crafting/RBImpl.java index a4b8770..4919f53 100644 --- a/src/main/java/io/github/simplexdev/simplexcore/crafting/RBImpl.java +++ b/src/main/java/io/github/simplexdev/simplexcore/crafting/RBImpl.java @@ -30,7 +30,7 @@ public class RBImpl { } public void customWand() { - ItemStack is = bldr.itemBuilder(Material.BLAZE_ROD) + ItemStack is = bldr.newItem(Material.BLAZE_ROD) .setName("Magic Wand") .addLore("This wand is magical.") .addEnchant(Enchantment.KNOCKBACK, 10) diff --git a/src/main/java/io/github/simplexdev/simplexcore/crafting/RecipeBuilder.java b/src/main/java/io/github/simplexdev/simplexcore/crafting/RecipeBuilder.java index 7090cd0..13f9638 100644 --- a/src/main/java/io/github/simplexdev/simplexcore/crafting/RecipeBuilder.java +++ b/src/main/java/io/github/simplexdev/simplexcore/crafting/RecipeBuilder.java @@ -22,6 +22,14 @@ public final class RecipeBuilder { this.plugin = plugin; } + /** + * Create a new RecipeBuilder Worker. + * @param result The resulting item. + * @param recipeName The name of the recipe. + * This should be separated by "_" where spaced would be used. + * @param isShaped Whether or not the recipe is shaped or shapeless. + * @return A new appendable RecipeBuilder Worker instance based on the given parameters. + */ public final Worker of(ItemStack result, String recipeName, boolean isShaped) { return new Worker(result, recipeName, isShaped); } @@ -32,8 +40,15 @@ public final class RecipeBuilder { private final NamespacedKey key; private final boolean shaped; private final List materials = new ArrayList<>(); - private String[] shape = {"aaa", "aaa", "aaa"}; + private String[] shape = {"", "", ""}; + /** + * @param stack The item to build a recipe for. This may be an item with custom metadata, + * or even an item without a native crafting recipe. + * @param name The recipe name; it should be all lowercase, + * separated by underscores where spaced would be used. + * @param isShaped If the recipe is shaped or shapeless. + */ public Worker(ItemStack stack, String name, boolean isShaped) { this.stack = stack; this.key = new NamespacedKey(plugin, name); @@ -62,17 +77,28 @@ public final class RecipeBuilder { } /** - * This is for shaped crafting. + * This is for shaped crafting. Please use {@link Worker#addIngredients(Material...)} + * for shapeless crafting. * * @param identifier The specific identifier * @param ingredient The ingredient represented by the identifier. - * @return + * @return An appendable worker instance. */ public Worker addIngredient(@NotNull Character identifier, @NotNull Material ingredient) { ingredients.put(identifier, ingredient); return this; } + /** + * Sets the shape for the crafting recipe. This is not required if the recipe is shapeless. + * @param top The top three slots represented by "___" where any specific letter + * is represented by the relative ingredient identifier. + * @param middle The middle three slots represented by "___" where any specific letter + * is represented by the relative ingredient identifier. + * @param bottom The bottom three slots represented by "___" where any specific letter + * is represented by the relative ingredient identifier. + * @return An appendable worker instance. + */ public Worker setShape(@Nullable String top, @Nullable String middle, @Nullable String bottom) { String a = ""; String b = ""; @@ -92,10 +118,11 @@ public final class RecipeBuilder { } /** - * This is for shapeless crafting. + * This is for shapeless crafting. Please use {@link Worker#addIngredient(Character, Material)} + * for shaped crafting. * * @param ingredients any number (up to nine) of ingredients required to craft this recipe. - * @return An appendable instance of this class. + * @return An appendable worker instance. */ public Worker addIngredients(Material... ingredients) { Utilities.forEach(ingredients, materials::add); diff --git a/src/main/java/io/github/simplexdev/simplexcore/utils/PlayerTools.java b/src/main/java/io/github/simplexdev/simplexcore/utils/PlayerTools.java new file mode 100644 index 0000000..585b6f0 --- /dev/null +++ b/src/main/java/io/github/simplexdev/simplexcore/utils/PlayerTools.java @@ -0,0 +1,36 @@ +package io.github.simplexdev.simplexcore.utils; + +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.UUID; + +public final class PlayerTools { + + @NotNull + public static String stringUUID(@NotNull Player player) { + return player.getUniqueId().toString(); + } + + @Nullable + public static Player getPlayer(@NotNull String nameOrUUID) { + if (nameOrUUID.length() > 16) { + UUID uuid = UUID.fromString(nameOrUUID); + return Bukkit.getServer().getPlayer(uuid); + } else { + return Bukkit.getServer().getPlayer(nameOrUUID); + } + } + + @NotNull + public static OfflinePlayer getOfflinePlayer(@NotNull String nameOrUUID) { + if (nameOrUUID.length() > 16) { + UUID uuid = UUID.fromString(nameOrUUID); + return Bukkit.getOfflinePlayer(uuid); + } + return Bukkit.getOfflinePlayer(nameOrUUID); + } +}