Added AsyncItem

This commit is contained in:
NichtStudioCode 2021-02-13 19:06:05 +01:00
parent 76b947e2a0
commit 5e27d272db
2 changed files with 59 additions and 9 deletions

@ -68,6 +68,7 @@ public class ItemBuilder implements Cloneable {
ItemStack itemStack = new ItemStack(material, amount);
ItemMeta itemMeta = itemStack.getItemMeta();
if (itemMeta != null) {
if (itemMeta instanceof Damageable) ((Damageable) itemMeta).setDamage(damage);
if (customModelData != -1) itemMeta.setCustomModelData(customModelData);
if (displayName != null) itemMeta.setDisplayName(displayName);
@ -78,6 +79,8 @@ public class ItemBuilder implements Cloneable {
itemMeta.setLore(lore);
itemStack.setItemMeta(itemMeta);
}
return itemStack;
}

@ -0,0 +1,47 @@
package de.studiocode.invui.item.impl;
import de.studiocode.invui.InvUI;
import de.studiocode.invui.item.Item;
import de.studiocode.invui.item.ItemBuilder;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.function.Supplier;
/**
* An {@link Item} that creates it's {@link ItemBuilder} asynchronously and displays
* a placeholder {@link ItemBuilder} until the actual {@link ItemBuilder} has been created.
*/
public class AsyncItem extends BaseItem {
private volatile ItemBuilder itemBuilder;
public AsyncItem(@Nullable ItemBuilder itemBuilder, @NotNull Supplier<ItemBuilder> builderSupplier) {
this.itemBuilder = itemBuilder == null ? new ItemBuilder(Material.AIR) : itemBuilder;
Bukkit.getScheduler().runTaskAsynchronously(InvUI.getInstance().getPlugin(), () -> {
this.itemBuilder = builderSupplier.get();
Bukkit.getScheduler().runTask(InvUI.getInstance().getPlugin(), this::notifyWindows);
});
}
public AsyncItem(@NotNull Supplier<ItemBuilder> builderSupplier) {
this(null, builderSupplier);
}
@Override
public ItemBuilder getItemBuilder() {
return itemBuilder;
}
@Override
public void handleClick(ClickType clickType, Player player, InventoryClickEvent event) {
// empty
}
}