diff --git a/src/main/java/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java b/src/main/java/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java index 6187a3571..10cbe4076 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java @@ -28,19 +28,22 @@ import me.mrCookieSlime.Slimefun.api.Slimefun; public class GPSNetwork { - private Map> transmitters = new HashMap<>(); - private static final int[] border = new int[] {0, 1, 3, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 26, 27, 35, 36, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53}; - private static final int[] inventory = new int[] {19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43}; + private static final String DIRECTORY = "data-storage/Slimefun/waypoints/"; + private final Map> transmitters = new HashMap<>(); - private static final int[] teleporter_border = new int[] {0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 26, 27, 35, 36, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53}; - private static final int[] teleporter_inventory = new int[] {19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43}; + private final int[] border = new int[] {0, 1, 3, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 26, 27, 35, 36, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53}; + private final int[] inventory = new int[] {19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43}; + + private final int[] teleporterBorder = new int[] {0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 26, 27, 35, 36, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53}; + private final int[] teleporterInventory = new int[] {19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43}; public void updateTransmitter(Location l, UUID uuid, NetworkStatus status) { Set set = transmitters.getOrDefault(uuid, new HashSet<>()); if (status == NetworkStatus.ONLINE) { - if (set.add(l)) + if (set.add(l)) { transmitters.put(uuid, set); + } } else { set.remove(l); @@ -49,11 +52,15 @@ public class GPSNetwork { } public int getNetworkComplexity(UUID uuid) { - if (!transmitters.containsKey(uuid)) return 0; + if (!transmitters.containsKey(uuid)) { + return 0; + } + int level = 0; for (Location l : transmitters.get(uuid)) { - level = level + l.getBlockY(); + level += l.getBlockY(); } + return level; } @@ -153,7 +160,7 @@ public class GPSNetwork { menu.addItem(slot, new CustomItem(globe, entry.getKey(), "&8\u21E8 &7World: &r" + l.getWorld().getName(), "&8\u21E8 &7X: &r" + l.getX(), "&8\u21E8 &7Y: &r" + l.getY(), "&8\u21E8 &7Z: &r" + l.getZ(), "", "&8\u21E8 &cClick to delete")); menu.addMenuClickHandler(slot, (pl, slotn, item, action) -> { String id = ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', entry.getKey())).toUpperCase().replace(' ', '_'); - Config cfg = new Config("data-storage/Slimefun/waypoints/" + pl.getUniqueId().toString() + ".yml"); + Config cfg = new Config(DIRECTORY + pl.getUniqueId().toString() + ".yml"); cfg.setValue(id, null); cfg.save(); pl.playSound(pl.getLocation(), Sound.UI_BUTTON_CLICK, 1F, 1F); @@ -174,12 +181,14 @@ public class GPSNetwork { public Map getWaypoints(UUID uuid) { Map map = new HashMap<>(); - Config cfg = new Config("data-storage/Slimefun/waypoints/" + uuid.toString() + ".yml"); - for (String key: cfg.getKeys()) { + Config cfg = new Config(DIRECTORY + uuid.toString() + ".yml"); + + for (String key : cfg.getKeys()) { if (cfg.contains(key + ".world") && Bukkit.getWorld(cfg.getString(key + ".world")) != null) { map.put(cfg.getString(key + ".name"), cfg.getLocation(key)); } } + return map; } @@ -188,6 +197,7 @@ public class GPSNetwork { SlimefunPlugin.getLocal().sendMessage(p, "gps.waypoint.max", true); return; } + SlimefunPlugin.getLocal().sendMessage(p, "gps.waypoint.new", true); p.playSound(p.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 0.5F, 1F); @@ -201,12 +211,14 @@ public class GPSNetwork { SlimefunPlugin.getLocal().sendMessage(p, "gps.waypoint.max", true); return; } - Config cfg = new Config("data-storage/Slimefun/waypoints/" + p.getUniqueId().toString() + ".yml"); - String id = ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', name)).toUpperCase() - .replace(' ', '_'); + + Config cfg = new Config(DIRECTORY + p.getUniqueId().toString() + ".yml"); + String id = ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', name)).toUpperCase().replace(' ', '_'); + cfg.setValue(id, l); cfg.setValue(id + ".name", name); cfg.save(); + p.playSound(p.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1F, 1F); SlimefunPlugin.getLocal().sendMessage(p, "gps.waypoint.added", true); } @@ -215,17 +227,18 @@ public class GPSNetwork { return transmitters.getOrDefault(uuid, new HashSet<>()); } - public static void openTeleporterGUI(Player p, UUID uuid, Block b, final int complexity) { - if (SlimefunPlugin.getUtilities().teleporterUsers.contains(p.getUniqueId())) return; + public void openTeleporterGUI(Player p, UUID uuid, Block b, final int complexity) { + if (SlimefunPlugin.getUtilities().teleporterUsers.contains(p.getUniqueId())) { + return; + } p.playSound(p.getLocation(), Sound.UI_BUTTON_CLICK, 1F, 1F); SlimefunPlugin.getUtilities().teleporterUsers.add(p.getUniqueId()); ChestMenu menu = new ChestMenu("&3Teleporter"); - menu.addMenuCloseHandler(pl -> SlimefunPlugin.getUtilities().teleporterUsers.remove(pl.getUniqueId())); - for (int slot : teleporter_border) { + for (int slot : teleporterBorder) { menu.addItem(slot, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "), (pl, slotn, item, action) -> false ); @@ -237,9 +250,10 @@ public class GPSNetwork { final Location source = new Location(b.getWorld(), b.getX() + 0.5D, b.getY() + 2D, b.getZ() + 0.5D); int index = 0; - for (final Map.Entry entry: Slimefun.getGPSNetwork().getWaypoints(uuid).entrySet()) { - if (index >= teleporter_inventory.length) break; - int slot = teleporter_inventory[index]; + + for (final Map.Entry entry : Slimefun.getGPSNetwork().getWaypoints(uuid).entrySet()) { + if (index >= teleporterInventory.length) break; + int slot = teleporterInventory[index]; final Location l = entry.getValue(); ItemStack globe = getPlanet(entry); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java index d9bc6698e..f00c1cdbb 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java @@ -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 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 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; diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 55ffef195..093e27f1a 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -40,7 +40,6 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; import me.mrCookieSlime.CSCoreLibPlugin.general.Particles.FireworkShow; import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull; import me.mrCookieSlime.Slimefun.SlimefunPlugin; -import me.mrCookieSlime.Slimefun.GPS.GPSNetwork; import me.mrCookieSlime.Slimefun.Lists.Categories; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; @@ -178,12 +177,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); @@ -2708,7 +2707,7 @@ public final class SlimefunSetup { @Override public void onInteract(final Player p, final Block b) { - GPSNetwork.openTeleporterGUI(p, UUID.fromString(BlockStorage.getLocationInfo(b.getLocation(), "owner")), b, Slimefun.getGPSNetwork().getNetworkComplexity(UUID.fromString(BlockStorage.getLocationInfo(b.getLocation(), "owner")))); + Slimefun.getGPSNetwork().openTeleporterGUI(p, UUID.fromString(BlockStorage.getLocationInfo(b.getLocation(), "owner")), b, Slimefun.getGPSNetwork().getNetworkComplexity(UUID.fromString(BlockStorage.getLocationInfo(b.getLocation(), "owner")))); } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/WikiSetup.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/WikiSetup.java index 414df7e81..b69574139 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/WikiSetup.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Setup/WikiSetup.java @@ -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(); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java index df9675253..8965a0327 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java @@ -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; @@ -35,7 +34,6 @@ import me.mrCookieSlime.Slimefun.Setup.Files; import me.mrCookieSlime.Slimefun.Setup.MiscSetup; import me.mrCookieSlime.Slimefun.Setup.ResearchSetup; import me.mrCookieSlime.Slimefun.Setup.SlimefunLocalization; -import me.mrCookieSlime.Slimefun.Setup.SlimefunMetrics; import me.mrCookieSlime.Slimefun.Setup.SlimefunSetup; import me.mrCookieSlime.Slimefun.Setup.WikiSetup; import me.mrCookieSlime.Slimefun.ancient_altar.AncientAltarListener; @@ -71,6 +69,9 @@ 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.services.MetricsService; 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; @@ -164,7 +167,7 @@ public final class SlimefunPlugin extends JavaPlugin { gps = new GPSNetwork(); // Setting up bStats - new SlimefunMetrics(this); + new MetricsService(this); // Setting up the Auto-Updater Updater updater; @@ -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; } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/api/SlimefunItemStack.java b/src/main/java/me/mrCookieSlime/Slimefun/api/SlimefunItemStack.java index 3fba771de..4dc7d856f 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/api/SlimefunItemStack.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/api/SlimefunItemStack.java @@ -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) { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/autosave/PlayerAutoSaver.java b/src/main/java/me/mrCookieSlime/Slimefun/autosave/PlayerAutoSaver.java index bd359328b..7094ff413 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/autosave/PlayerAutoSaver.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/autosave/PlayerAutoSaver.java @@ -25,7 +25,7 @@ public class PlayerAutoSaver implements Runnable { } if (players > 0) { - Slimefun.getLogger().log(Level.INFO, "Auto-Saved Player Data for " + players + " Player(s)!"); + Slimefun.getLogger().log(Level.INFO, "Auto-Saved Player Data for {0} Player(s)!", players); } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/commands/subcommands/TeleporterCommand.java b/src/main/java/me/mrCookieSlime/Slimefun/commands/subcommands/TeleporterCommand.java index a7243ea88..5fdc9e42b 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/commands/subcommands/TeleporterCommand.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/commands/subcommands/TeleporterCommand.java @@ -7,7 +7,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import me.mrCookieSlime.Slimefun.SlimefunPlugin; -import me.mrCookieSlime.Slimefun.GPS.GPSNetwork; +import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.commands.SlimefunCommand; import me.mrCookieSlime.Slimefun.commands.SubCommand; @@ -29,7 +29,7 @@ public class TeleporterCommand extends SubCommand { if (sender.hasPermission("slimefun.command.teleporter") && sender instanceof Player) { OfflinePlayer player = Bukkit.getOfflinePlayer(args[1]); if (player.getName() != null) { - GPSNetwork.openTeleporterGUI((Player) sender, player.getUniqueId(), ((Player) sender).getLocation().getBlock().getRelative(BlockFace.DOWN), 999999999); + Slimefun.getGPSNetwork().openTeleporterGUI((Player) sender, player.getUniqueId(), ((Player) sender).getLocation().getBlock().getRelative(BlockFace.DOWN), 999999999); } else sender.sendMessage("&4Unknown Player: &c" + args[1]); } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/services/CustomItemDataService.java b/src/main/java/me/mrCookieSlime/Slimefun/services/CustomItemDataService.java new file mode 100644 index 000000000..9d75560ee --- /dev/null +++ b/src/main/java/me/mrCookieSlime/Slimefun/services/CustomItemDataService.java @@ -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 getItemData(ItemStack item) { + return getItemData(item.getItemMeta()); + } + + public Optional getItemData(ItemMeta meta) { + return PersistentDataAPI.getOptionalString(meta, namespacedKey); + } + +} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/services/CustomTextureService.java b/src/main/java/me/mrCookieSlime/Slimefun/services/CustomTextureService.java new file mode 100644 index 000000000..03aaf6e03 --- /dev/null +++ b/src/main/java/me/mrCookieSlime/Slimefun/services/CustomTextureService.java @@ -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 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)); + } + +} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunMetrics.java b/src/main/java/me/mrCookieSlime/Slimefun/services/MetricsService.java similarity index 79% rename from src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunMetrics.java rename to src/main/java/me/mrCookieSlime/Slimefun/services/MetricsService.java index 5adec35de..5702a3791 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunMetrics.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/services/MetricsService.java @@ -1,12 +1,12 @@ -package me.mrCookieSlime.Slimefun.Setup; +package me.mrCookieSlime.Slimefun.services; import org.bstats.bukkit.Metrics; import me.mrCookieSlime.Slimefun.SlimefunPlugin; -public class SlimefunMetrics extends Metrics { +public class MetricsService extends Metrics { - public SlimefunMetrics(SlimefunPlugin plugin) { + public MetricsService(SlimefunPlugin plugin) { super(plugin); addCustomChart(new SimplePie("auto_updates", () -> SlimefunPlugin.getCfg().getBoolean("options.auto-update") ? "enabled": "disabled"));