2016-04-14 16:24:03 +00:00
|
|
|
package me.mrCookieSlime.Slimefun.api;
|
|
|
|
|
2020-04-04 00:45:51 +00:00
|
|
|
import java.util.logging.Level;
|
2019-08-31 09:36:45 +00:00
|
|
|
import java.util.logging.Logger;
|
2016-04-14 16:24:03 +00:00
|
|
|
|
2019-10-11 22:56:51 +00:00
|
|
|
import org.bukkit.Bukkit;
|
2020-02-02 15:11:18 +00:00
|
|
|
import org.bukkit.NamespacedKey;
|
2017-04-09 07:59:45 +00:00
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
import org.bukkit.inventory.ItemStack;
|
2019-12-27 10:10:22 +00:00
|
|
|
import org.bukkit.scheduler.BukkitTask;
|
2017-04-09 07:59:45 +00:00
|
|
|
|
2019-12-27 01:16:01 +00:00
|
|
|
import io.github.thebusybiscuit.cscorelib2.config.Config;
|
2020-04-04 01:24:49 +00:00
|
|
|
import io.github.thebusybiscuit.slimefun4.api.items.ItemSetting;
|
2020-03-19 12:14:29 +00:00
|
|
|
import io.github.thebusybiscuit.slimefun4.api.player.PlayerProfile;
|
2020-03-05 22:38:39 +00:00
|
|
|
import io.github.thebusybiscuit.slimefun4.implementation.items.VanillaItem;
|
2019-08-31 09:36:45 +00:00
|
|
|
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
2016-04-14 16:24:03 +00:00
|
|
|
import me.mrCookieSlime.Slimefun.Objects.Research;
|
2019-09-06 08:34:17 +00:00
|
|
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ItemState;
|
2016-04-14 16:24:03 +00:00
|
|
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
|
|
|
|
2017-08-15 14:37:25 +00:00
|
|
|
/**
|
|
|
|
* Provides a few convenience methods.
|
|
|
|
*
|
|
|
|
* @since 4.0
|
|
|
|
*/
|
2019-08-31 13:52:52 +00:00
|
|
|
public final class Slimefun {
|
2017-06-13 17:59:39 +00:00
|
|
|
|
2020-03-05 00:01:38 +00:00
|
|
|
private Slimefun() {}
|
|
|
|
|
|
|
|
@Deprecated
|
|
|
|
public static void registerGuideHandler(GuideHandler handler) {
|
2020-04-04 00:45:51 +00:00
|
|
|
Bukkit.getLogger().log(Level.SEVERE, "The Plugin \"EmeraldEnchants\" is outdated!");
|
|
|
|
Bukkit.getLogger().log(Level.SEVERE, "Your version will soon stop working.");
|
|
|
|
Bukkit.getLogger().log(Level.SEVERE, "Update it immediately: https://thebusybiscuit.github.io/builds/TheBusyBiscuit/EmeraldEnchants2/master/");
|
2020-03-05 00:01:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public static Logger getLogger() {
|
|
|
|
return SlimefunPlugin.instance.getLogger();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the value associated to this key for the SlimefunItem corresponding to this id.
|
|
|
|
*
|
2020-04-04 01:24:49 +00:00
|
|
|
* @deprecated Please use the {@link ItemSetting} API instead.
|
|
|
|
*
|
2020-03-05 00:01:38 +00:00
|
|
|
* @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.
|
|
|
|
*/
|
2020-04-04 01:24:49 +00:00
|
|
|
@Deprecated
|
2020-03-05 00:01:38 +00:00
|
|
|
public static Object getItemValue(String id, String key) {
|
|
|
|
return getItemConfig().getValue(id + '.' + key);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-04-05 15:35:50 +00:00
|
|
|
* Returns the {@link Config} instance of our Items.yml file.
|
|
|
|
*
|
|
|
|
* @deprecated Do not access this directly, use the {@link ItemSetting} API instead.
|
2020-03-05 00:01:38 +00:00
|
|
|
*
|
|
|
|
* @return the Items.yml Config instance.
|
|
|
|
*/
|
2020-04-05 15:35:50 +00:00
|
|
|
@Deprecated
|
2020-03-05 00:01:38 +00:00
|
|
|
public static Config getItemConfig() {
|
|
|
|
return SlimefunPlugin.getItemCfg();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Registers this Research and automatically binds these ItemStacks to it.
|
|
|
|
* <p>
|
|
|
|
* This convenience method spares from doing the code below:
|
|
|
|
*
|
|
|
|
* <pre>
|
|
|
|
* {@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();
|
|
|
|
* }*
|
|
|
|
* </pre>
|
|
|
|
*
|
|
|
|
* @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 <code>true</code> if the item is a SlimefunItem, enabled, researched and if the player has the permission
|
|
|
|
* to use it,
|
|
|
|
* <code>false</code> 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 <code>true</code> if the item is enabled, researched and the player has the permission to use it,
|
|
|
|
* <code>false</code> otherwise.
|
|
|
|
*/
|
|
|
|
public static boolean hasUnlocked(Player p, SlimefunItem sfItem, boolean message) {
|
|
|
|
if (isEnabled(p, sfItem, message) && hasPermission(p, sfItem, message)) {
|
2020-03-10 14:20:59 +00:00
|
|
|
if (sfItem.getResearch() == null) {
|
|
|
|
return true;
|
|
|
|
}
|
2020-03-10 20:44:24 +00:00
|
|
|
else if (PlayerProfile.get(p).hasUnlocked(sfItem.getResearch())) {
|
2020-03-10 14:20:59 +00:00
|
|
|
return true;
|
|
|
|
}
|
2020-03-05 00:01:38 +00:00
|
|
|
else {
|
2020-03-10 14:20:59 +00:00
|
|
|
if (message && !(sfItem instanceof VanillaItem)) {
|
|
|
|
SlimefunPlugin.getLocal().sendMessage(p, "messages.not-researched", true);
|
|
|
|
}
|
2020-03-10 20:44:24 +00:00
|
|
|
|
2020-03-05 00:01:38 +00:00
|
|
|
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 <code>true</code>
|
|
|
|
* @param message
|
|
|
|
* whether a message should be sent to the player or not
|
|
|
|
*
|
|
|
|
* @return <code>true</code> if the item is not null and if the player has the permission to use it,
|
|
|
|
* <code>false</code> otherwise.
|
|
|
|
*/
|
|
|
|
public static boolean hasPermission(Player p, SlimefunItem item, boolean message) {
|
2020-03-10 14:20:59 +00:00
|
|
|
if (item == null) {
|
|
|
|
return true;
|
|
|
|
}
|
2020-03-10 20:44:24 +00:00
|
|
|
else if (SlimefunPlugin.getPermissionsService().hasPermission(p, item)) {
|
2020-03-10 14:20:59 +00:00
|
|
|
return true;
|
|
|
|
}
|
2020-03-05 00:01:38 +00:00
|
|
|
else {
|
2020-04-05 15:35:50 +00:00
|
|
|
if (message) {
|
|
|
|
SlimefunPlugin.getLocal().sendMessage(p, "messages.no-permission", true);
|
|
|
|
}
|
|
|
|
|
2020-03-05 00:01:38 +00:00
|
|
|
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 <code>true</code> if the item is a SlimefunItem and is enabled in the world the player is in,
|
|
|
|
* <code>false</code> otherwise.
|
|
|
|
*/
|
|
|
|
public static boolean isEnabled(Player p, ItemStack item, boolean message) {
|
|
|
|
SlimefunItem sfItem = SlimefunItem.getByItem(item);
|
|
|
|
|
2020-03-10 14:20:59 +00:00
|
|
|
return sfItem == null || isEnabled(p, sfItem, message);
|
2020-03-05 00:01:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 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 <code>true</code> if the item is enabled in the world the player is in,
|
|
|
|
* <code>false</code> otherwise.
|
|
|
|
*/
|
|
|
|
public static boolean isEnabled(Player p, SlimefunItem sfItem, boolean message) {
|
|
|
|
if (sfItem.isDisabled()) {
|
2020-03-10 14:20:59 +00:00
|
|
|
if (message) {
|
2020-04-05 15:35:50 +00:00
|
|
|
SlimefunPlugin.getLocal().sendMessage(p, "messages.disabled-item", true);
|
2020-03-10 14:20:59 +00:00
|
|
|
}
|
2020-03-10 20:44:24 +00:00
|
|
|
|
2020-03-05 00:01:38 +00:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
String world = p.getWorld().getName();
|
|
|
|
if (SlimefunPlugin.getWhitelist().contains(world + ".enabled")) {
|
|
|
|
if (SlimefunPlugin.getWhitelist().getBoolean(world + ".enabled")) {
|
2020-04-05 15:35:50 +00:00
|
|
|
if (!SlimefunPlugin.getWhitelist().contains(world + ".enabled-items." + sfItem.getID())) {
|
|
|
|
SlimefunPlugin.getWhitelist().setDefaultValue(world + ".enabled-items." + sfItem.getID(), true);
|
|
|
|
}
|
|
|
|
if (SlimefunPlugin.getWhitelist().getBoolean(world + ".enabled-items." + sfItem.getID())) {
|
|
|
|
return true;
|
|
|
|
}
|
2020-03-05 00:01:38 +00:00
|
|
|
else {
|
|
|
|
if (message) SlimefunPlugin.getLocal().sendMessage(p, "messages.disabled-in-world", true);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (message) SlimefunPlugin.getLocal().sendMessage(p, "messages.disabled-in-world", true);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else 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);
|
|
|
|
}
|
2017-06-13 17:59:39 +00:00
|
|
|
}
|