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/Slimefun.java

225 lines
7.5 KiB
Java
Raw Normal View History

2016-04-14 16:24:03 +00:00
package me.mrCookieSlime.Slimefun.api;
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;
import org.bukkit.NamespacedKey;
2017-04-09 07:59:45 +00:00
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.scheduler.BukkitTask;
2017-04-09 07:59:45 +00:00
2020-03-19 12:14:29 +00:00
import io.github.thebusybiscuit.slimefun4.api.player.PlayerProfile;
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;
/**
* 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
private Slimefun() {}
public static Logger getLogger() {
return SlimefunPlugin.instance.getLogger();
}
/**
* 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) {
2020-04-09 20:16:32 +00:00
registerResearch(new Research(key, id, name, cost), items);
}
/**
* 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) {
2020-04-09 20:16:32 +00:00
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;
}
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
return false;
}
}
2020-04-09 20:16:32 +00:00
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;
}
else {
2020-04-05 15:35:50 +00:00
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 <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);
}
/**
* 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
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);
}
2017-06-13 17:59:39 +00:00
}