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,16 +68,19 @@ public class ItemBuilder implements Cloneable {
ItemStack itemStack = new ItemStack(material, amount); ItemStack itemStack = new ItemStack(material, amount);
ItemMeta itemMeta = itemStack.getItemMeta(); ItemMeta itemMeta = itemStack.getItemMeta();
if (itemMeta instanceof Damageable) ((Damageable) itemMeta).setDamage(damage); if (itemMeta != null) {
if (customModelData != -1) itemMeta.setCustomModelData(customModelData); if (itemMeta instanceof Damageable) ((Damageable) itemMeta).setDamage(damage);
if (displayName != null) itemMeta.setDisplayName(displayName); if (customModelData != -1) itemMeta.setCustomModelData(customModelData);
if (gameProfile != null) if (displayName != null) itemMeta.setDisplayName(displayName);
ReflectionUtils.setFieldValue(ReflectionRegistry.CB_CRAFT_META_SKULL_PROFILE_FIELD, itemMeta, gameProfile); if (gameProfile != null)
enchantments.forEach((enchantment, pair) -> itemMeta.addEnchant(enchantment, pair.getFirst(), pair.getSecond())); ReflectionUtils.setFieldValue(ReflectionRegistry.CB_CRAFT_META_SKULL_PROFILE_FIELD, itemMeta, gameProfile);
itemMeta.addItemFlags(itemFlags.toArray(new ItemFlag[0])); enchantments.forEach((enchantment, pair) -> itemMeta.addEnchant(enchantment, pair.getFirst(), pair.getSecond()));
itemMeta.setLore(lore); itemMeta.addItemFlags(itemFlags.toArray(new ItemFlag[0]));
itemMeta.setLore(lore);
itemStack.setItemMeta(itemMeta);
}
itemStack.setItemMeta(itemMeta);
return itemStack; 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
}
}