package me.mrCookieSlime.Slimefun.api; import java.util.logging.Logger; import org.bukkit.Bukkit; import org.bukkit.NamespacedKey; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitTask; import io.github.thebusybiscuit.cscorelib2.config.Config; import io.github.thebusybiscuit.slimefun4.api.items.ItemSetting; import io.github.thebusybiscuit.slimefun4.api.player.PlayerProfile; import io.github.thebusybiscuit.slimefun4.implementation.items.VanillaItem; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Objects.Research; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ItemState; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; /** * Provides a few convenience methods. * * @since 4.0 */ public final class Slimefun { private Slimefun() {} public static Logger getLogger() { return SlimefunPlugin.instance.getLogger(); } /** * Returns the value associated to this key for the SlimefunItem corresponding to this id. * * @deprecated Please use the {@link ItemSetting} API instead. * * @param id * the id of the SlimefunItem, not null * @param key * the key of the value to get, not null * * @return the value associated to the key for the SlimefunItem corresponding to the id, * or null if it doesn't exist. */ @Deprecated public static Object getItemValue(String id, String key) { return getItemConfig().getValue(id + '.' + key); } /** * Returns the {@link Config} instance of our Items.yml file. * * @deprecated Do not access this directly, use the {@link ItemSetting} API instead. * * @return the Items.yml Config instance. */ @Deprecated public static Config getItemConfig() { return SlimefunPlugin.getItemCfg(); } /** * Registers this Research and automatically binds these ItemStacks to it. *
* This convenience method spares from doing the code below: * *
* {@code * Research r = new Research(7, "Glowstone Armor", 3); * r.addItems(SlimefunItem.getByItem(SlimefunItems.GLOWSTONE_HELMET), * SlimefunItem.getByItem(SlimefunItems.GLOWSTONE_CHESTPLATE), * SlimefunItem.getByItem(SlimefunItems.GLOWSTONE_LEGGINGS), * SlimefunItem.getByItem(SlimefunItems.GLOWSTONE_BOOTS)); * r.register(); * }* ** * @param research * the research to register, not null * @param items * the items to bind, not null */ public static void registerResearch(Research research, ItemStack... items) { for (ItemStack item : items) { research.addItems(SlimefunItem.getByItem(item)); } research.register(); } public static void registerResearch(NamespacedKey key, int id, String name, int cost, ItemStack... items) { Research research = new Research(key, id, name, cost); for (ItemStack item : items) { research.addItems(SlimefunItem.getByItem(item)); } research.register(); } /** * Checks if this player can use this item. * * @param p * the player to check, not null * @param item * the item to check, not null * @param message * whether a message should be sent to the player or not * * @return
true
if the item is a SlimefunItem, enabled, researched and if the player has the permission
* to use it,
* false
otherwise.
*/
public static boolean hasUnlocked(Player p, ItemStack item, boolean message) {
SlimefunItem sfItem = SlimefunItem.getByItem(item);
if (sfItem != null) {
if (sfItem.getState() == ItemState.DISABLED) {
if (message) SlimefunPlugin.getLocal().sendMessage(p, "messages.disabled-item", true);
return false;
}
if (isEnabled(p, item, message) && hasPermission(p, sfItem, message)) {
if (sfItem.getResearch() == null) return true;
else if (PlayerProfile.get(p).hasUnlocked(sfItem.getResearch())) return true;
else {
if (message && !(sfItem instanceof VanillaItem)) {
SlimefunPlugin.getLocal().sendMessage(p, "messages.not-researched", true);
}
return false;
}
}
else return false;
}
else return true;
}
/**
* Checks if this player can use this item.
*
* @param p
* the player to check, not null
* @param sfItem
* the item to check, not null
* @param message
* whether a message should be sent to the player or not
*
* @return true
if the item is enabled, researched and the player has the permission to use it,
* false
otherwise.
*/
public static boolean hasUnlocked(Player p, SlimefunItem sfItem, boolean message) {
if (isEnabled(p, sfItem, message) && hasPermission(p, sfItem, message)) {
if (sfItem.getResearch() == null) {
return true;
}
else if (PlayerProfile.get(p).hasUnlocked(sfItem.getResearch())) {
return true;
}
else {
if (message && !(sfItem instanceof VanillaItem)) {
SlimefunPlugin.getLocal().sendMessage(p, "messages.not-researched", true);
}
return false;
}
}
return false;
}
/**
* Checks if this player has the permission to use this item.
*
* @param p
* the player to check, not null
* @param item
* the item to check, null returns true
* @param message
* whether a message should be sent to the player or not
*
* @return true
if the item is not null and if the player has the permission to use it,
* false
otherwise.
*/
public static boolean hasPermission(Player p, SlimefunItem item, boolean message) {
if (item == null) {
return true;
}
else if (SlimefunPlugin.getPermissionsService().hasPermission(p, item)) {
return true;
}
else {
if (message) {
SlimefunPlugin.getLocal().sendMessage(p, "messages.no-permission", true);
}
return false;
}
}
/**
* Checks if this item is enabled in the world this player is in.
*
* @param p
* the player to get the world he is in, not null
* @param item
* the item to check, not null
* @param message
* whether a message should be sent to the player or not
*
* @return true
if the item is a SlimefunItem and is enabled in the world the player is in,
* false
otherwise.
*/
public static boolean isEnabled(Player p, ItemStack item, boolean message) {
SlimefunItem sfItem = SlimefunItem.getByItem(item);
return sfItem == null || isEnabled(p, sfItem, message);
}
/**
* Checks if this item is enabled in the world this player is in.
*
* @param p
* the player to get the world he is in, not null
* @param sfItem
* the item to check, not null
* @param message
* whether a message should be sent to the player or not
*
* @return true
if the item is enabled in the world the player is in,
* false
otherwise.
*/
public static boolean isEnabled(Player p, SlimefunItem sfItem, boolean message) {
if (sfItem.isDisabled()) {
if (message) {
SlimefunPlugin.getLocal().sendMessage(p, "messages.disabled-item", true);
}
return false;
}
else if (!SlimefunPlugin.getWorldSettingsService().isEnabled(p.getWorld(), sfItem)) {
if (message) {
SlimefunPlugin.getLocal().sendMessage(p, "messages.disabled-in-world", true);
}
return false;
}
return true;
}
public static BukkitTask runSync(Runnable r) {
return Bukkit.getScheduler().runTask(SlimefunPlugin.instance, r);
}
public static BukkitTask runSync(Runnable r, long delay) {
return Bukkit.getScheduler().runTaskLater(SlimefunPlugin.instance, r, delay);
}
}