Changes the GUI item factory code
All checks were successful
KnarCraft/KnarGUI/pipeline/head This commit looks good
All checks were successful
KnarCraft/KnarGUI/pipeline/head This commit looks good
Adds a new GUIItemFactory interface Renames the old GUIItemFactory to SimpleGUIItemFactory
This commit is contained in:
parent
e3ea5a5340
commit
9d5ee267a7
@ -15,7 +15,7 @@ import java.util.function.Consumer;
|
|||||||
* @param <B> <p>A child class implementing this class</p>
|
* @param <B> <p>A child class implementing this class</p>
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public abstract class AbstractGUIItemFactory<B extends AbstractGUIItemFactory<B>> {
|
public abstract class AbstractGUIItemFactory<B extends AbstractGUIItemFactory<B>> implements GUIItemFactory {
|
||||||
|
|
||||||
private final ItemStack itemStack;
|
private final ItemStack itemStack;
|
||||||
private B child;
|
private B child;
|
||||||
@ -37,45 +37,30 @@ public abstract class AbstractGUIItemFactory<B extends AbstractGUIItemFactory<B>
|
|||||||
*
|
*
|
||||||
* @param child <p>The child class extending this</p>
|
* @param child <p>The child class extending this</p>
|
||||||
*/
|
*/
|
||||||
protected void setChild(B child) {
|
protected void setChild(@NotNull B child) {
|
||||||
this.child = child;
|
this.child = child;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@Override
|
||||||
* Builds the item as described in previous calls
|
@NotNull
|
||||||
*
|
|
||||||
* @return <p>The output of this factory</p>
|
|
||||||
*/
|
|
||||||
public ItemStack build() {
|
public ItemStack build() {
|
||||||
return this.itemStack;
|
return this.itemStack;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@Override
|
||||||
* Sets the name of this factory's item
|
@NotNull
|
||||||
*
|
public B setName(@NotNull String name) {
|
||||||
* @param name <p>The new item name</p>
|
|
||||||
* @return <p>The factory. Used for chaining commands</p>
|
|
||||||
*/
|
|
||||||
public B setName(String name) {
|
|
||||||
return changeItemMeta((meta) -> meta.setDisplayName(name));
|
return changeItemMeta((meta) -> meta.setDisplayName(name));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@Override
|
||||||
* Sets the lore for this factory's item
|
@NotNull
|
||||||
*
|
public B setLore(@NotNull List<String> lore) {
|
||||||
* @param lore <p>The new lore</p>
|
|
||||||
* @return <p>The factory. Used for chaining commands</p>
|
|
||||||
*/
|
|
||||||
public B setLore(List<String> lore) {
|
|
||||||
return changeItemMeta((meta) -> meta.setLore(lore));
|
return changeItemMeta((meta) -> meta.setLore(lore));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@Override
|
||||||
* Sets whether this factory's item should look enchanted
|
@NotNull
|
||||||
*
|
|
||||||
* @param enchanted <p>True if the item should look enchanted</p>
|
|
||||||
* @return <p>The factory. Used for chaining commands</p>
|
|
||||||
*/
|
|
||||||
public B setEnchanted(boolean enchanted) {
|
public B setEnchanted(boolean enchanted) {
|
||||||
if (enchanted) {
|
if (enchanted) {
|
||||||
changeItemMeta((meta) -> meta.addEnchant(Enchantment.MENDING, 1, true));
|
changeItemMeta((meta) -> meta.addEnchant(Enchantment.MENDING, 1, true));
|
||||||
@ -87,25 +72,15 @@ public abstract class AbstractGUIItemFactory<B extends AbstractGUIItemFactory<B>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@Override
|
||||||
* Changes some metadata for this factory's item
|
@NotNull
|
||||||
*
|
public B changeItemMeta(@NotNull Consumer<ItemMeta> action) {
|
||||||
* @param action <p>The action to be run on the metadata</p>
|
|
||||||
* @return <p>The factory. Used for chaining commands</p>
|
|
||||||
*/
|
|
||||||
protected B changeItemMeta(Consumer<ItemMeta> action) {
|
|
||||||
return changeItemMeta(ItemMeta.class, action);
|
return changeItemMeta(ItemMeta.class, action);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@Override
|
||||||
* Changes some metadata for this factory's item
|
@NotNull
|
||||||
*
|
public <M extends ItemMeta> B changeItemMeta(@NotNull Class<M> metaType, @NotNull Consumer<M> action) {
|
||||||
* @param metaType <p>The type of metadata to change</p>
|
|
||||||
* @param action <p>The action to be run on the metadata</p>
|
|
||||||
* @param <M> <p>The type of the metadata</p>
|
|
||||||
* @return <p>The factory. Used for chaining commands</p>
|
|
||||||
*/
|
|
||||||
protected <M extends ItemMeta> B changeItemMeta(Class<M> metaType, Consumer<M> action) {
|
|
||||||
M meta = checkForNullMetadata(metaType);
|
M meta = checkForNullMetadata(metaType);
|
||||||
action.accept(meta);
|
action.accept(meta);
|
||||||
this.itemStack.setItemMeta(meta);
|
this.itemStack.setItemMeta(meta);
|
||||||
@ -115,12 +90,9 @@ public abstract class AbstractGUIItemFactory<B extends AbstractGUIItemFactory<B>
|
|||||||
return child;
|
return child;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@Override
|
||||||
* Throws an exception if this factory's item has null metadata
|
@NotNull
|
||||||
*
|
public <M extends ItemMeta> M checkForNullMetadata(@NotNull Class<M> metaType) {
|
||||||
* @return <p>The metadata for this factory's item</p>
|
|
||||||
*/
|
|
||||||
protected <M extends ItemMeta> M checkForNullMetadata(Class<M> metaType) {
|
|
||||||
M meta = metaType.cast(this.itemStack.getItemMeta());
|
M meta = metaType.cast(this.itemStack.getItemMeta());
|
||||||
if (meta == null) {
|
if (meta == null) {
|
||||||
throw new IllegalArgumentException("Cannot change missing metadata");
|
throw new IllegalArgumentException("Cannot change missing metadata");
|
||||||
|
@ -1,43 +1,77 @@
|
|||||||
package net.knarcraft.knargui.item;
|
package net.knarcraft.knargui.item;
|
||||||
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A class for crating visual items for the GUI
|
* A factory class for creating GUI items
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public class GUIItemFactory extends AbstractGUIItemFactory<GUIItemFactory> {
|
public interface GUIItemFactory {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instantiates a new item factory
|
* Builds the item as described in previous calls
|
||||||
*
|
*
|
||||||
* @param material <p>The material to use for the new item</p>
|
* @return <p>The output of this factory</p>
|
||||||
*/
|
*/
|
||||||
public GUIItemFactory(Material material) {
|
@NotNull
|
||||||
super(new ItemStack(material, 1));
|
ItemStack build();
|
||||||
setChild(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instantiates a new item factory
|
* Sets the name of this factory's item
|
||||||
*
|
*
|
||||||
* @param material <p>The material to use for the new item</p>
|
* @param name <p>The new item name</p>
|
||||||
* @param amount <p>The number of items to be displayed</p>
|
* @return <p>The factory. Used for chaining commands</p>
|
||||||
*/
|
*/
|
||||||
public GUIItemFactory(Material material, int amount) {
|
@NotNull
|
||||||
super(new ItemStack(material, amount));
|
GUIItemFactory setName(@NotNull String name);
|
||||||
setChild(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instantiates a new item factory
|
* Sets the lore for this factory's item
|
||||||
*
|
*
|
||||||
* @param itemStack <p>The item stack to modify</p>
|
* @param lore <p>The new lore</p>
|
||||||
|
* @return <p>The factory. Used for chaining commands</p>
|
||||||
*/
|
*/
|
||||||
public GUIItemFactory(ItemStack itemStack) {
|
@NotNull
|
||||||
super(itemStack);
|
GUIItemFactory setLore(@NotNull List<String> lore);
|
||||||
setChild(this);
|
|
||||||
}
|
/**
|
||||||
|
* Sets whether this factory's item should look enchanted
|
||||||
|
*
|
||||||
|
* @param enchanted <p>True if the item should look enchanted</p>
|
||||||
|
* @return <p>The factory. Used for chaining commands</p>
|
||||||
|
*/
|
||||||
|
@NotNull
|
||||||
|
GUIItemFactory setEnchanted(boolean enchanted);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Changes some metadata for this factory's item
|
||||||
|
*
|
||||||
|
* @param action <p>The action to be run on the metadata</p>
|
||||||
|
* @return <p>The factory. Used for chaining commands</p>
|
||||||
|
*/
|
||||||
|
@NotNull
|
||||||
|
GUIItemFactory changeItemMeta(@NotNull Consumer<ItemMeta> action);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Changes some metadata for this factory's item
|
||||||
|
*
|
||||||
|
* @param metaType <p>The type of metadata to change</p>
|
||||||
|
* @param action <p>The action to be run on the metadata</p>
|
||||||
|
* @param <M> <p>The type of the metadata</p>
|
||||||
|
* @return <p>The factory. Used for chaining commands</p>
|
||||||
|
*/
|
||||||
|
@NotNull <M extends ItemMeta> GUIItemFactory changeItemMeta(@NotNull Class<M> metaType, @NotNull Consumer<M> action);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Throws an exception if this factory's item has null metadata
|
||||||
|
*
|
||||||
|
* @return <p>The metadata for this factory's item</p>
|
||||||
|
*/
|
||||||
|
@NotNull <M extends ItemMeta> M checkForNullMetadata(@NotNull Class<M> metaType);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ import org.bukkit.OfflinePlayer;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.SkullMeta;
|
import org.bukkit.inventory.meta.SkullMeta;
|
||||||
import org.bukkit.profile.PlayerProfile;
|
import org.bukkit.profile.PlayerProfile;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
@ -37,7 +38,8 @@ public class PlayerHeadGUIItemFactory extends AbstractGUIItemFactory<PlayerHeadG
|
|||||||
* @param player <p>The player whose skin should be used</p>
|
* @param player <p>The player whose skin should be used</p>
|
||||||
* @return <p>The factory. Used for chaining commands</p>
|
* @return <p>The factory. Used for chaining commands</p>
|
||||||
*/
|
*/
|
||||||
public PlayerHeadGUIItemFactory useSkin(OfflinePlayer player) {
|
@NotNull
|
||||||
|
public PlayerHeadGUIItemFactory useSkin(@NotNull OfflinePlayer player) {
|
||||||
return changeItemMeta(SkullMeta.class, (meta) -> meta.setOwningPlayer(player));
|
return changeItemMeta(SkullMeta.class, (meta) -> meta.setOwningPlayer(player));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,7 +49,8 @@ public class PlayerHeadGUIItemFactory extends AbstractGUIItemFactory<PlayerHeadG
|
|||||||
* @param playerProfile <p>The player profile whose skin should be used</p>
|
* @param playerProfile <p>The player profile whose skin should be used</p>
|
||||||
* @return <p>The factory. Used for chaining commands</p>
|
* @return <p>The factory. Used for chaining commands</p>
|
||||||
*/
|
*/
|
||||||
public PlayerHeadGUIItemFactory useSkin(PlayerProfile playerProfile) {
|
@NotNull
|
||||||
|
public PlayerHeadGUIItemFactory useSkin(@NotNull PlayerProfile playerProfile) {
|
||||||
return changeItemMeta(SkullMeta.class, (meta) -> meta.setOwnerProfile(playerProfile));
|
return changeItemMeta(SkullMeta.class, (meta) -> meta.setOwnerProfile(playerProfile));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -57,7 +60,8 @@ public class PlayerHeadGUIItemFactory extends AbstractGUIItemFactory<PlayerHeadG
|
|||||||
* @param uuid <p>The UUID of the skin to use</p>
|
* @param uuid <p>The UUID of the skin to use</p>
|
||||||
* @return <p>The factory. Used for chaining commands</p>
|
* @return <p>The factory. Used for chaining commands</p>
|
||||||
*/
|
*/
|
||||||
public PlayerHeadGUIItemFactory useSkin(UUID uuid) {
|
@NotNull
|
||||||
|
public PlayerHeadGUIItemFactory useSkin(@NotNull UUID uuid) {
|
||||||
return useSkin(Bukkit.getOfflinePlayer(uuid));
|
return useSkin(Bukkit.getOfflinePlayer(uuid));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,7 +75,8 @@ public class PlayerHeadGUIItemFactory extends AbstractGUIItemFactory<PlayerHeadG
|
|||||||
* @param textureId <p>The id of the texture to use</p>
|
* @param textureId <p>The id of the texture to use</p>
|
||||||
* @return <p>The factory. Used for chaining commands</p>
|
* @return <p>The factory. Used for chaining commands</p>
|
||||||
*/
|
*/
|
||||||
public PlayerHeadGUIItemFactory useSkin(String textureId) {
|
@NotNull
|
||||||
|
public PlayerHeadGUIItemFactory useSkin(@NotNull String textureId) {
|
||||||
//Get the texture id from a Base64 encoded JSON string
|
//Get the texture id from a Base64 encoded JSON string
|
||||||
if (!textureId.isBlank() && textureId.length() % 4 == 0) {
|
if (!textureId.isBlank() && textureId.length() % 4 == 0) {
|
||||||
String decoded = new String(Base64.getDecoder().decode(textureId));
|
String decoded = new String(Base64.getDecoder().decode(textureId));
|
||||||
@ -94,7 +99,8 @@ public class PlayerHeadGUIItemFactory extends AbstractGUIItemFactory<PlayerHeadG
|
|||||||
* @param url <p>The URL to use</p>
|
* @param url <p>The URL to use</p>
|
||||||
* @return <p>The factory. Used for chaining commands</p>
|
* @return <p>The factory. Used for chaining commands</p>
|
||||||
*/
|
*/
|
||||||
public PlayerHeadGUIItemFactory useSkin(URL url) {
|
@NotNull
|
||||||
|
public PlayerHeadGUIItemFactory useSkin(@NotNull URL url) {
|
||||||
PlayerProfile profile = Bukkit.createPlayerProfile(UUID.randomUUID());
|
PlayerProfile profile = Bukkit.createPlayerProfile(UUID.randomUUID());
|
||||||
profile.getTextures().setSkin(url);
|
profile.getTextures().setSkin(url);
|
||||||
return changeItemMeta(SkullMeta.class, (meta) -> meta.setOwnerProfile(profile));
|
return changeItemMeta(SkullMeta.class, (meta) -> meta.setOwnerProfile(profile));
|
||||||
|
@ -0,0 +1,44 @@
|
|||||||
|
package net.knarcraft.knargui.item;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A class for crating visual items for the GUI
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public class SimpleGUIItemFactory extends AbstractGUIItemFactory<SimpleGUIItemFactory> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instantiates a new item factory
|
||||||
|
*
|
||||||
|
* @param material <p>The material to use for the new item</p>
|
||||||
|
*/
|
||||||
|
public SimpleGUIItemFactory(@NotNull Material material) {
|
||||||
|
super(new ItemStack(material, 1));
|
||||||
|
setChild(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instantiates a new item factory
|
||||||
|
*
|
||||||
|
* @param material <p>The material to use for the new item</p>
|
||||||
|
* @param amount <p>The number of items to be displayed</p>
|
||||||
|
*/
|
||||||
|
public SimpleGUIItemFactory(@NotNull Material material, int amount) {
|
||||||
|
super(new ItemStack(material, amount));
|
||||||
|
setChild(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instantiates a new item factory
|
||||||
|
*
|
||||||
|
* @param itemStack <p>The item stack to modify</p>
|
||||||
|
*/
|
||||||
|
public SimpleGUIItemFactory(@NotNull ItemStack itemStack) {
|
||||||
|
super(itemStack);
|
||||||
|
setChild(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user