1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-21 12:15:50 +00:00
Slimefun4/src/main/java/me/mrCookieSlime/Slimefun/api/SlimefunItemStack.java

193 lines
5.4 KiB
Java
Raw Normal View History

2019-10-02 11:54:59 +00:00
package me.mrCookieSlime.Slimefun.api;
2020-01-03 13:41:15 +00:00
import java.util.ArrayList;
import java.util.Base64;
2020-01-03 13:41:15 +00:00
import java.util.List;
import java.util.Optional;
2019-10-02 11:54:59 +00:00
import java.util.function.Consumer;
2019-12-27 10:38:54 +00:00
import org.bukkit.ChatColor;
import org.bukkit.Color;
2019-10-02 11:54:59 +00:00
import org.bukkit.Material;
2020-02-10 17:00:14 +00:00
import org.bukkit.inventory.ItemFlag;
2019-10-02 11:54:59 +00:00
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
2020-01-03 13:41:15 +00:00
import org.bukkit.inventory.meta.PotionMeta;
import org.bukkit.potion.PotionEffect;
2020-02-10 17:00:14 +00:00
import org.bukkit.potion.PotionEffectType;
2019-10-02 11:54:59 +00:00
import io.github.thebusybiscuit.cscorelib2.item.CustomItem;
import io.github.thebusybiscuit.cscorelib2.item.ImmutableItemMeta;
import io.github.thebusybiscuit.cscorelib2.skull.SkullItem;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
2019-10-02 11:54:59 +00:00
public class SlimefunItemStack extends CustomItem {
private String id;
private ImmutableItemMeta immutableMeta;
private String texture = null;
public SlimefunItemStack(String id, Material type, String name, String... lore) {
super(type, name, lore);
setID(id);
}
public SlimefunItemStack(String id, Material type, Color color, String name, String... lore) {
super(new ItemStack(type), color, name, lore);
setID(id);
}
public SlimefunItemStack(String id, Color color, PotionEffect effect, String name, String... lore) {
super(Material.POTION, im -> {
if (name != null) {
im.setDisplayName(ChatColor.translateAlternateColorCodes('&', name));
}
if (lore.length > 0) {
List<String> lines = new ArrayList<>();
for (String line : lore) {
lines.add(ChatColor.translateAlternateColorCodes('&', line));
}
im.setLore(lines);
}
if (im instanceof PotionMeta) {
((PotionMeta) im).setColor(color);
((PotionMeta) im).addCustomEffect(effect, true);
if (effect.getType().equals(PotionEffectType.SATURATION)) {
im.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS);
}
}
});
setID(id);
}
public SlimefunItemStack(String id, ItemStack item, String name, String... lore) {
super(item, name, lore);
setID(id);
}
public SlimefunItemStack(String id, ItemStack item) {
super(item);
setID(id);
}
public SlimefunItemStack(String id, ItemStack item, Consumer<ItemMeta> consumer) {
super(item, consumer);
setID(id);
}
public SlimefunItemStack(String id, Material type, String name, Consumer<ItemMeta> consumer) {
super(type, meta -> {
if (name != null) {
meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', name));
}
consumer.accept(meta);
});
setID(id);
}
public SlimefunItemStack(String id, String texture, String name, String... lore) {
super(getSkull(texture), name, lore);
this.texture = getTexture(texture);
setID(id);
}
public SlimefunItemStack(String id, String texture, String name, Consumer<ItemMeta> consumer) {
super(getSkull(texture), meta -> {
if (name != null) {
meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', name));
}
consumer.accept(meta);
});
this.texture = getTexture(texture);
setID(id);
}
public SlimefunItemStack(String id, String texture, Consumer<ItemMeta> consumer) {
super(getSkull(texture), consumer);
this.texture = getTexture(texture);
setID(id);
}
private void setID(String id) {
this.id = id;
ItemMeta meta = getItemMeta();
SlimefunPlugin.getItemDataService().setItemData(meta, id);
SlimefunPlugin.getItemTextureService().setTexture(meta, id);
setItemMeta(meta);
}
public String getItemID() {
return id;
}
2020-03-11 01:53:59 +00:00
/**
2020-03-11 02:13:58 +00:00
* Gets the {@link SlimefunItem} associated for this {@link SlimefunItemStack}. Null if no item is found.
2020-03-11 01:53:59 +00:00
*
2020-03-11 02:13:58 +00:00
* @return The {@link SlimefunItem} for this {@link SlimefunItemStack}, null if not found.
2020-03-11 01:53:59 +00:00
*/
public SlimefunItem getItem() {
return SlimefunItem.getByID(this.id);
2020-03-11 01:53:59 +00:00
}
public ImmutableItemMeta getImmutableMeta() {
return immutableMeta;
}
@Override
public boolean setItemMeta(ItemMeta meta) {
immutableMeta = new ImmutableItemMeta(meta);
return super.setItemMeta(meta);
}
@Override
public ItemStack clone() {
SlimefunItemStack item = (SlimefunItemStack) super.clone();
item.id = getItemID();
return item;
}
public Optional<String> getSkullTexture() {
return Optional.ofNullable(texture);
}
private static ItemStack getSkull(String texture) {
return SkullItem.fromBase64(getTexture(texture));
}
private static String getTexture(String texture) {
String base64 = texture;
// At this point we can be sure it's not a base64 encoded texture
if (!texture.startsWith("ey")) {
base64 = Base64.getEncoder().encodeToString(("{\"textures\":{\"SKIN\":{\"url\":\"http://textures.minecraft.net/texture/" + texture + "\"}}}").getBytes());
}
return base64;
}
2019-10-02 11:54:59 +00:00
}