mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-20 03:35:51 +00:00
Added support for custom item models
This commit is contained in:
parent
2c7e155aa1
commit
2459469c9d
@ -4,6 +4,7 @@ import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.logging.Level;
|
||||
@ -13,9 +14,7 @@ import org.bukkit.ChatColor;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import io.github.thebusybiscuit.cscorelib2.data.PersistentDataAPI;
|
||||
import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils;
|
||||
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||
@ -164,7 +163,11 @@ public class SlimefunItem {
|
||||
if (SlimefunPlugin.getUtilities().itemIDs.containsKey(this.id)) {
|
||||
throw new IllegalArgumentException("ID \"" + this.id + "\" already exists");
|
||||
}
|
||||
if (this.recipe.length < 9) this.recipe = new ItemStack[] {null, null, null, null, null, null, null, null, null};
|
||||
|
||||
if (this.recipe.length < 9) {
|
||||
this.recipe = new ItemStack[] {null, null, null, null, null, null, null, null, null};
|
||||
}
|
||||
|
||||
SlimefunPlugin.getUtilities().allItems.add(this);
|
||||
|
||||
SlimefunPlugin.getItemCfg().setDefaultValue(this.id + ".enabled", true);
|
||||
@ -192,7 +195,10 @@ public class SlimefunItem {
|
||||
}
|
||||
|
||||
if (SlimefunPlugin.getItemCfg().getBoolean(id + ".enabled")) {
|
||||
if (!Category.list().contains(category)) category.register();
|
||||
|
||||
if (!Category.list().contains(category)) {
|
||||
category.register();
|
||||
}
|
||||
|
||||
this.state = ItemState.ENABLED;
|
||||
|
||||
@ -202,8 +208,13 @@ public class SlimefunItem {
|
||||
this.disenchantable = SlimefunPlugin.getItemCfg().getBoolean(this.id + ".allow-disenchanting");
|
||||
this.permission = SlimefunPlugin.getItemCfg().getString(this.id + ".required-permission");
|
||||
this.noPermissionTooltip = SlimefunPlugin.getItemCfg().getStringList(this.id + ".no-permission-tooltip");
|
||||
|
||||
SlimefunPlugin.getUtilities().enabledItems.add(this);
|
||||
if (slimefun) SlimefunPlugin.getUtilities().vanillaItems++;
|
||||
|
||||
if (slimefun) {
|
||||
SlimefunPlugin.getUtilities().vanillaItems++;
|
||||
}
|
||||
|
||||
SlimefunPlugin.getUtilities().itemIDs.put(this.id, this);
|
||||
|
||||
create();
|
||||
@ -285,17 +296,18 @@ public class SlimefunItem {
|
||||
}
|
||||
|
||||
if (item.hasItemMeta()) {
|
||||
String id = PersistentDataAPI.getString(item.getItemMeta(), SlimefunPlugin.getItemDataKey());
|
||||
if (id != null) return getByID(id);
|
||||
Optional<String> itemID = SlimefunPlugin.getItemDataService().getItemData(item);
|
||||
|
||||
if (itemID.isPresent()) {
|
||||
return getByID(itemID.get());
|
||||
}
|
||||
}
|
||||
|
||||
for (SlimefunItem sfi: SlimefunPlugin.getUtilities().enabledItems) {
|
||||
if (sfi.isItem(item)) {
|
||||
// If we have to loop all items for the given item, then at least
|
||||
// set the id via PersistenDataAPI for future performance boosts
|
||||
ItemMeta im = item.getItemMeta();
|
||||
PersistentDataAPI.setString(im, SlimefunPlugin.getItemDataKey(), sfi.getID());
|
||||
item.setItemMeta(im);
|
||||
SlimefunPlugin.getItemDataService().setItemData(item, sfi.getID());
|
||||
|
||||
return sfi;
|
||||
}
|
||||
@ -309,8 +321,10 @@ public class SlimefunItem {
|
||||
if (item == null) return false;
|
||||
|
||||
if (item.hasItemMeta()) {
|
||||
String comparingId = PersistentDataAPI.getString(item.getItemMeta(), SlimefunPlugin.getItemDataKey());
|
||||
if (comparingId != null) return getID().equals(comparingId);
|
||||
Optional<String> itemID = SlimefunPlugin.getItemDataService().getItemData(item);
|
||||
if (itemID.isPresent()) {
|
||||
return getID().equals(itemID.get());
|
||||
}
|
||||
}
|
||||
|
||||
if (this instanceof ChargableItem && SlimefunManager.isItemSimiliar(item, this.item, false)) return true;
|
||||
|
@ -178,12 +178,12 @@ import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet;
|
||||
import me.mrCookieSlime.Slimefun.holograms.ReactorHologram;
|
||||
|
||||
public final class SlimefunSetup {
|
||||
|
||||
private static final Random random = new Random();
|
||||
|
||||
private SlimefunSetup() {}
|
||||
|
||||
public static void setupItems() {
|
||||
Random random = new Random();
|
||||
|
||||
new SlimefunItem(Categories.WEAPONS, (SlimefunItemStack) SlimefunItems.GRANDMAS_WALKING_STICK, RecipeType.ENHANCED_CRAFTING_TABLE,
|
||||
new ItemStack[] {null, new ItemStack(Material.OAK_LOG), null, null, new ItemStack(Material.OAK_LOG), null, null, new ItemStack(Material.OAK_LOG), null})
|
||||
.register(true);
|
||||
|
@ -11,6 +11,7 @@ import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
|
||||
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
||||
|
||||
@ -18,11 +19,11 @@ public final class WikiSetup {
|
||||
|
||||
private WikiSetup() {}
|
||||
|
||||
public static void addWikiPages(Class<?> c) {
|
||||
public static void addWikiPages(SlimefunPlugin plugin) {
|
||||
JsonParser parser = new JsonParser();
|
||||
Slimefun.getLogger().log(Level.INFO, "Loading Wiki pages...");
|
||||
|
||||
try (BufferedReader reader = new BufferedReader(new InputStreamReader(c.getResourceAsStream("/wiki.json")))) {
|
||||
try (BufferedReader reader = new BufferedReader(new InputStreamReader(plugin.getClass().getResourceAsStream("/wiki.json")))) {
|
||||
JsonElement element = parser.parse(reader.lines().collect(Collectors.joining("")));
|
||||
JsonObject json = element.getAsJsonObject();
|
||||
|
||||
|
@ -4,7 +4,6 @@ import java.io.File;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
@ -71,6 +70,8 @@ import me.mrCookieSlime.Slimefun.listeners.TalismanListener;
|
||||
import me.mrCookieSlime.Slimefun.listeners.TeleporterListener;
|
||||
import me.mrCookieSlime.Slimefun.listeners.ToolListener;
|
||||
import me.mrCookieSlime.Slimefun.listeners.WorldListener;
|
||||
import me.mrCookieSlime.Slimefun.services.CustomItemDataService;
|
||||
import me.mrCookieSlime.Slimefun.services.CustomTextureService;
|
||||
import me.mrCookieSlime.Slimefun.utils.Settings;
|
||||
import me.mrCookieSlime.Slimefun.utils.Utilities;
|
||||
|
||||
@ -79,7 +80,9 @@ public final class SlimefunPlugin extends JavaPlugin {
|
||||
public static SlimefunPlugin instance;
|
||||
|
||||
private RecipeSnapshot recipeSnapshot;
|
||||
private final NamespacedKey itemDataKey = new NamespacedKey(this, "slimefun_item");
|
||||
|
||||
private final CustomItemDataService itemDataService = new CustomItemDataService(this, "slimefun_item");
|
||||
private final CustomTextureService textureService = new CustomTextureService(this);
|
||||
|
||||
private TickerTask ticker;
|
||||
private SlimefunLocalization local;
|
||||
@ -210,13 +213,14 @@ public final class SlimefunPlugin extends JavaPlugin {
|
||||
MiscSetup.loadDescriptions();
|
||||
|
||||
settings.researchesEnabled = getResearchCfg().getBoolean("enable-researching");
|
||||
settings.smelteryFireBreakChance = (Integer) Slimefun.getItemValue("SMELTERY", "chance.fireBreak");
|
||||
settings.smelteryFireBreakChance = (int) Slimefun.getItemValue("SMELTERY", "chance.fireBreak");
|
||||
|
||||
getLogger().log(Level.INFO, "Loading Researches...");
|
||||
ResearchSetup.setupResearches();
|
||||
|
||||
MiscSetup.setupMisc();
|
||||
WikiSetup.addWikiPages(getClass());
|
||||
WikiSetup.addWikiPages(this);
|
||||
textureService.setup(utilities.allItems);
|
||||
|
||||
getLogger().log(Level.INFO, "Loading World Generators...");
|
||||
|
||||
@ -441,8 +445,12 @@ public final class SlimefunPlugin extends JavaPlugin {
|
||||
return instance.recipeSnapshot;
|
||||
}
|
||||
|
||||
public static NamespacedKey getItemDataKey() {
|
||||
return instance.itemDataKey;
|
||||
public static CustomItemDataService getItemDataService() {
|
||||
return instance.itemDataService;
|
||||
}
|
||||
|
||||
public static CustomTextureService getItemTextureService() {
|
||||
return instance.textureService;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -8,7 +8,6 @@ import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import io.github.thebusybiscuit.cscorelib2.data.PersistentDataAPI;
|
||||
import io.github.thebusybiscuit.cscorelib2.item.CustomItem;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull;
|
||||
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||
@ -56,9 +55,12 @@ public class SlimefunItemStack extends CustomItem {
|
||||
private void setID(String id) {
|
||||
this.id = id;
|
||||
|
||||
ItemMeta im = getItemMeta();
|
||||
PersistentDataAPI.setString(im, SlimefunPlugin.getItemDataKey(), id);
|
||||
setItemMeta(im);
|
||||
ItemMeta meta = getItemMeta();
|
||||
|
||||
SlimefunPlugin.getItemDataService().setItemData(meta, id);
|
||||
SlimefunPlugin.getItemTextureService().setTexture(meta, id);
|
||||
|
||||
setItemMeta(meta);
|
||||
}
|
||||
|
||||
private static ItemStack getSkull(String texture) {
|
||||
|
@ -0,0 +1,38 @@
|
||||
package me.mrCookieSlime.Slimefun.services;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import io.github.thebusybiscuit.cscorelib2.data.PersistentDataAPI;
|
||||
|
||||
public class CustomItemDataService {
|
||||
|
||||
private final NamespacedKey namespacedKey;
|
||||
|
||||
public CustomItemDataService(Plugin plugin, String key) {
|
||||
namespacedKey = new NamespacedKey(plugin, key);
|
||||
}
|
||||
|
||||
public void setItemData(ItemStack item, String id) {
|
||||
ItemMeta im = item.getItemMeta();
|
||||
setItemData(im, id);
|
||||
item.setItemMeta(im);
|
||||
}
|
||||
|
||||
public void setItemData(ItemMeta im, String id) {
|
||||
PersistentDataAPI.setString(im, namespacedKey, id);
|
||||
}
|
||||
|
||||
public Optional<String> getItemData(ItemStack item) {
|
||||
return getItemData(item.getItemMeta());
|
||||
}
|
||||
|
||||
public Optional<String> getItemData(ItemMeta meta) {
|
||||
return PersistentDataAPI.getOptionalString(meta, namespacedKey);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
package me.mrCookieSlime.Slimefun.services;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import io.github.thebusybiscuit.cscorelib2.config.Config;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||
|
||||
public class CustomTextureService {
|
||||
|
||||
private final Config config;
|
||||
|
||||
public CustomTextureService(Plugin plugin) {
|
||||
this.config = new Config(plugin, "item-models.yml");
|
||||
}
|
||||
|
||||
public void setup(Collection<SlimefunItem> items) {
|
||||
for (SlimefunItem item : items) {
|
||||
if (item != null && item.getID() != null) {
|
||||
config.setDefaultValue(item.getID(), 0);
|
||||
}
|
||||
}
|
||||
|
||||
config.save();
|
||||
}
|
||||
|
||||
public int getModelData(String id) {
|
||||
return config.getInt(id);
|
||||
}
|
||||
|
||||
public void setTexture(ItemStack item, String id) {
|
||||
ItemMeta im = item.getItemMeta();
|
||||
setTexture(im, id);
|
||||
item.setItemMeta(im);
|
||||
}
|
||||
|
||||
public void setTexture(ItemMeta im, String id) {
|
||||
im.setCustomModelData(getModelData(id));
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user