Continued kotlin rewrite
This commit is contained in:
@@ -1,166 +0,0 @@
|
||||
package com.willfp.talismans.command;
|
||||
|
||||
import com.willfp.eco.core.EcoPlugin;
|
||||
import com.willfp.eco.core.command.CommandHandler;
|
||||
import com.willfp.eco.core.command.TabCompleteHandler;
|
||||
import com.willfp.eco.core.command.impl.Subcommand;
|
||||
import com.willfp.talismans.talismans.Talisman;
|
||||
import com.willfp.talismans.talismans.TalismanLevel;
|
||||
import com.willfp.talismans.talismans.Talismans;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.util.StringUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class CommandGive extends Subcommand {
|
||||
/**
|
||||
* The cached numbers.
|
||||
*/
|
||||
private static final List<String> NUMBERS = Arrays.asList(
|
||||
"1",
|
||||
"2",
|
||||
"3",
|
||||
"4",
|
||||
"5",
|
||||
"10",
|
||||
"32",
|
||||
"64"
|
||||
);
|
||||
|
||||
/**
|
||||
* Instantiate a new command handler.
|
||||
*
|
||||
* @param plugin The plugin for the commands to listen for.
|
||||
*/
|
||||
public CommandGive(@NotNull final EcoPlugin plugin) {
|
||||
super(plugin, "give", "talismans.command.give", false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandHandler getHandler() {
|
||||
return (sender, args) -> {
|
||||
if (args.isEmpty()) {
|
||||
sender.sendMessage(this.getPlugin().getLangYml().getMessage("needs-player"));
|
||||
return;
|
||||
}
|
||||
|
||||
if (args.size() == 1) {
|
||||
sender.sendMessage(this.getPlugin().getLangYml().getMessage("needs-talisman"));
|
||||
return;
|
||||
}
|
||||
|
||||
int level = 1;
|
||||
|
||||
if (args.size() > 2) {
|
||||
try {
|
||||
level = Integer.parseInt(args.get(2));
|
||||
} catch (NumberFormatException ignored) {
|
||||
// do nothing
|
||||
}
|
||||
}
|
||||
|
||||
int amount = 1;
|
||||
|
||||
if (args.size() > 3) {
|
||||
try {
|
||||
amount = Integer.parseInt(args.get(3));
|
||||
} catch (NumberFormatException ignored) {
|
||||
// do nothing
|
||||
}
|
||||
}
|
||||
|
||||
String recieverName = args.get(0);
|
||||
Player reciever = Bukkit.getPlayer(recieverName);
|
||||
|
||||
if (reciever == null) {
|
||||
sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-player"));
|
||||
return;
|
||||
}
|
||||
|
||||
String talismanName = args.get(1);
|
||||
Talisman talisman = Talismans.getByID(talismanName);
|
||||
if (talisman == null) {
|
||||
sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-talisman"));
|
||||
return;
|
||||
}
|
||||
|
||||
TalismanLevel talismanLevel = talisman.getLevel(level);
|
||||
if (talismanLevel == null) {
|
||||
sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-level"));
|
||||
return;
|
||||
}
|
||||
|
||||
String message = this.getPlugin().getLangYml().getMessage("give-success");
|
||||
message = message.replace("%talisman%", talismanLevel.getName()).replace("%recipient%", reciever.getName());
|
||||
sender.sendMessage(message);
|
||||
|
||||
ItemStack itemStack = talismanLevel.getItemStack();
|
||||
itemStack.setAmount(amount);
|
||||
reciever.getInventory().addItem(itemStack);
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public TabCompleteHandler getTabCompleter() {
|
||||
return (sender, args) -> {
|
||||
List<String> completions = new ArrayList<>();
|
||||
|
||||
if (args.isEmpty()) {
|
||||
// Currently, this case is not ever reached
|
||||
return Talismans.values().stream().map(Talisman::getId).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
if (args.size() == 1) {
|
||||
StringUtil.copyPartialMatches(args.get(0), Bukkit.getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toList()), completions);
|
||||
return completions;
|
||||
}
|
||||
|
||||
if (args.size() == 2) {
|
||||
StringUtil.copyPartialMatches(args.get(1), Talismans.values().stream().map(Talisman::getId).collect(Collectors.toList()), completions);
|
||||
|
||||
Collections.sort(completions);
|
||||
return completions;
|
||||
}
|
||||
|
||||
if (args.size() == 3) {
|
||||
Talisman talisman = Talismans.getByID(args.get(1).toLowerCase());
|
||||
if (talisman == null) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
List<String> levels = talisman.getLevels().stream().map(TalismanLevel::getLevel).map(String::valueOf).collect(Collectors.toList());
|
||||
|
||||
StringUtil.copyPartialMatches(args.get(2), levels, completions);
|
||||
|
||||
completions.sort((s1, s2) -> {
|
||||
int t1 = Integer.parseInt(s1);
|
||||
int t2 = Integer.parseInt(s2);
|
||||
return t1 - t2;
|
||||
});
|
||||
|
||||
return completions;
|
||||
}
|
||||
|
||||
if (args.size() == 4) {
|
||||
StringUtil.copyPartialMatches(args.get(3), NUMBERS, completions);
|
||||
|
||||
completions.sort((s1, s2) -> {
|
||||
int t1 = Integer.parseInt(s1);
|
||||
int t2 = Integer.parseInt(s2);
|
||||
return t1 - t2;
|
||||
});
|
||||
|
||||
return completions;
|
||||
}
|
||||
|
||||
return new ArrayList<>(0);
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,108 @@
|
||||
package com.willfp.talismans.command
|
||||
|
||||
import com.willfp.eco.core.EcoPlugin
|
||||
import com.willfp.eco.core.command.CommandHandler
|
||||
import com.willfp.eco.core.command.TabCompleteHandler
|
||||
import com.willfp.eco.core.command.impl.Subcommand
|
||||
import com.willfp.talismans.talismans.Talismans
|
||||
import com.willfp.talismans.talismans.Talismans.getByID
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.util.StringUtil
|
||||
|
||||
class CommandGive(plugin: EcoPlugin) : Subcommand(plugin, "reload", "talismans.commands.reload", false) {
|
||||
private val numbers = listOf(
|
||||
"1",
|
||||
"2",
|
||||
"3",
|
||||
"4",
|
||||
"5",
|
||||
"10",
|
||||
"32",
|
||||
"64"
|
||||
)
|
||||
|
||||
override fun getHandler(): CommandHandler? {
|
||||
return CommandHandler { sender, args ->
|
||||
if (args.isEmpty()) {
|
||||
sender.sendMessage(plugin.langYml.getMessage("needs-player"))
|
||||
return@CommandHandler
|
||||
}
|
||||
|
||||
if (args.size == 1) {
|
||||
sender.sendMessage(plugin.langYml.getMessage("needs-talisman"))
|
||||
return@CommandHandler
|
||||
}
|
||||
|
||||
var amount = 1
|
||||
if (args.size > 2) {
|
||||
amount = args[2].toIntOrNull() ?: 1
|
||||
}
|
||||
|
||||
val recieverName = args[0]
|
||||
val reciever = Bukkit.getPlayer(recieverName)
|
||||
|
||||
if (reciever == null) {
|
||||
sender.sendMessage(plugin.langYml.getMessage("invalid-player"))
|
||||
return@CommandHandler
|
||||
}
|
||||
|
||||
val talismanName = args[1]
|
||||
val talisman = getByID(talismanName)
|
||||
|
||||
if (talisman == null) {
|
||||
sender.sendMessage(plugin.langYml.getMessage("invalid-talisman"))
|
||||
return@CommandHandler
|
||||
}
|
||||
|
||||
var message = plugin.langYml.getMessage("give-success")
|
||||
|
||||
message = message.replace("%talisman%", talisman.name).replace("%recipient%", reciever.name)
|
||||
|
||||
sender.sendMessage(message)
|
||||
|
||||
val itemStack = talisman.itemStack
|
||||
|
||||
itemStack.amount = amount
|
||||
|
||||
reciever.inventory.addItem(itemStack)
|
||||
}
|
||||
}
|
||||
|
||||
override fun getTabCompleter(): TabCompleteHandler {
|
||||
return TabCompleteHandler { _, args ->
|
||||
val completions = mutableListOf<String>()
|
||||
|
||||
if (args.isEmpty()) {
|
||||
return@TabCompleteHandler Talismans.values().map { it.id }
|
||||
}
|
||||
|
||||
if (args.size == 1) {
|
||||
StringUtil.copyPartialMatches(
|
||||
args[0],
|
||||
Bukkit.getOnlinePlayers().map { it.name },
|
||||
completions
|
||||
)
|
||||
}
|
||||
|
||||
if (args.size == 2) {
|
||||
StringUtil.copyPartialMatches(
|
||||
args[1],
|
||||
Talismans.values().map { it.id },
|
||||
completions
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (args.size == 3) {
|
||||
StringUtil.copyPartialMatches(
|
||||
args[2],
|
||||
numbers,
|
||||
completions
|
||||
)
|
||||
}
|
||||
|
||||
completions
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,42 +1,101 @@
|
||||
package com.willfp.talismans.talismans
|
||||
|
||||
import com.google.common.collect.ImmutableSet
|
||||
import com.willfp.eco.core.config.interfaces.Config
|
||||
import com.willfp.eco.core.display.Display
|
||||
import com.willfp.eco.core.items.CustomItem
|
||||
import com.willfp.eco.core.items.Items
|
||||
import com.willfp.eco.core.items.builder.ItemStackBuilder
|
||||
import com.willfp.eco.core.recipe.parts.EmptyTestableItem
|
||||
import com.willfp.eco.core.recipe.recipes.ShapedCraftingRecipe
|
||||
import com.willfp.eco.util.StringUtils
|
||||
import com.willfp.libreforge.Holder
|
||||
import com.willfp.libreforge.conditions.Conditions
|
||||
import com.willfp.libreforge.effects.Effects
|
||||
import com.willfp.talismans.TalismansPlugin
|
||||
import com.willfp.talismans.talismans.util.TalismanChecks
|
||||
import com.willfp.talismans.talismans.util.TalismanUtils
|
||||
import org.apache.commons.lang.Validate
|
||||
import org.apache.commons.lang.WordUtils
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.NamespacedKey
|
||||
import org.bukkit.inventory.ItemStack
|
||||
import org.bukkit.permissions.Permission
|
||||
import org.bukkit.permissions.PermissionDefault
|
||||
import org.bukkit.persistence.PersistentDataType
|
||||
import java.util.*
|
||||
|
||||
class Talisman(
|
||||
private val config: Config,
|
||||
private val plugin: TalismansPlugin
|
||||
) {
|
||||
) : Holder {
|
||||
val id = config.getString("id")
|
||||
|
||||
val key: NamespacedKey = plugin.namespacedKeyFactory.create(id)
|
||||
|
||||
private val levels: MutableMap<Int, TalismanLevel> = HashMap()
|
||||
val name = config.getString("name")
|
||||
|
||||
val description = config.getString("description")
|
||||
|
||||
val formattedDescription: List<String> =
|
||||
WordUtils.wrap(description, plugin.configYml.getInt("description.wrap"), "\n", false)
|
||||
.split("[\\r\\n]+")
|
||||
.toTypedArray()
|
||||
.map { "${Display.PREFIX}${StringUtils.format(plugin.langYml.getString("description-color"))}$it" }
|
||||
|
||||
val itemStack: ItemStack = run {
|
||||
val item = Items.lookup(config.getString("item"))
|
||||
Validate.isTrue(item !is EmptyTestableItem, "Item specified in " + key.key + " is invalid!")
|
||||
TalismanUtils.registerTalismanMaterial(item.item.type)
|
||||
|
||||
val out = ItemStackBuilder(item.item)
|
||||
.setAmount(1)
|
||||
.writeMetaKey(plugin.namespacedKeyFactory.create("talisman"), PersistentDataType.STRING, id)
|
||||
.build()
|
||||
Display.display(out)
|
||||
}
|
||||
|
||||
val craftable = config.getBool("craftable")
|
||||
|
||||
val recipe: ShapedCraftingRecipe? = run {
|
||||
if (craftable) {
|
||||
val builder = ShapedCraftingRecipe.builder(plugin, key.key)
|
||||
.setOutput(itemStack)
|
||||
val recipeStrings = config.getStrings("recipe")
|
||||
for (i in recipeStrings.indices) {
|
||||
builder.setRecipePart(i, Items.lookup(recipeStrings[i]))
|
||||
}
|
||||
builder.build()
|
||||
} else null
|
||||
}.apply { this?.register() }
|
||||
|
||||
val customItem = CustomItem(
|
||||
key,
|
||||
{ test -> TalismanChecks.getTalismanOnItem(test) == this },
|
||||
itemStack
|
||||
).apply { register() }
|
||||
|
||||
override val effects = config.getSubsections("effects").mapNotNull {
|
||||
Effects.compile(it, "Talisman ID ${net.minecraft.server.v1_16_R3.Items.id}")
|
||||
}.toSet()
|
||||
|
||||
override val conditions = config.getSubsections("conditions").mapNotNull {
|
||||
Conditions.compile(it, "Talisman ID ${net.minecraft.server.v1_16_R3.Items.id}")
|
||||
}.toSet()
|
||||
|
||||
init {
|
||||
Talismans.addNewTalisman(this)
|
||||
update()
|
||||
}
|
||||
|
||||
private fun update() {
|
||||
levels.clear()
|
||||
var i = 1
|
||||
for (config in config.getSubsections("levels")) {
|
||||
val level = TalismanLevel(this, i, config, plugin)
|
||||
levels[i] = level
|
||||
i++
|
||||
if (Bukkit.getPluginManager().getPermission("talismans.fromtable." + key.key) == null) {
|
||||
val permission = Permission(
|
||||
"talismans.fromtable." + key.key,
|
||||
"Allows getting " + key.key + " from a Crafting Table",
|
||||
PermissionDefault.TRUE
|
||||
)
|
||||
permission.addParent(
|
||||
Bukkit.getPluginManager().getPermission("talismans.fromtable.*")!!,
|
||||
true
|
||||
)
|
||||
Bukkit.getPluginManager().addPermission(permission)
|
||||
}
|
||||
}
|
||||
|
||||
fun getLevel(level: Int): TalismanLevel? {
|
||||
return levels[level]
|
||||
}
|
||||
|
||||
fun getLevels(): Set<TalismanLevel> {
|
||||
return ImmutableSet.copyOf(levels.values)
|
||||
Talismans.addNewTalisman(this)
|
||||
}
|
||||
|
||||
override fun equals(o: Any?): Boolean {
|
||||
|
||||
@@ -1,112 +0,0 @@
|
||||
package com.willfp.talismans.talismans
|
||||
|
||||
import com.willfp.eco.core.config.interfaces.Config
|
||||
import com.willfp.eco.core.display.Display
|
||||
import com.willfp.eco.core.items.CustomItem
|
||||
import com.willfp.eco.core.items.Items
|
||||
import com.willfp.eco.core.items.builder.ItemStackBuilder
|
||||
import com.willfp.eco.core.recipe.parts.EmptyTestableItem
|
||||
import com.willfp.eco.core.recipe.recipes.ShapedCraftingRecipe
|
||||
import com.willfp.eco.util.StringUtils
|
||||
import com.willfp.libreforge.Holder
|
||||
import com.willfp.libreforge.conditions.Conditions
|
||||
import com.willfp.libreforge.effects.Effects
|
||||
import com.willfp.talismans.TalismansPlugin
|
||||
import com.willfp.talismans.talismans.util.TalismanChecks
|
||||
import com.willfp.talismans.talismans.util.TalismanUtils
|
||||
import net.minecraft.server.v1_16_R3.Items.id
|
||||
import org.apache.commons.lang.Validate
|
||||
import org.apache.commons.lang.WordUtils
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.NamespacedKey
|
||||
import org.bukkit.inventory.ItemStack
|
||||
import org.bukkit.permissions.Permission
|
||||
import org.bukkit.permissions.PermissionDefault
|
||||
import org.bukkit.persistence.PersistentDataType
|
||||
import java.util.*
|
||||
|
||||
class TalismanLevel(
|
||||
val talisman: Talisman,
|
||||
val level: Int,
|
||||
private val config: Config,
|
||||
private val plugin: TalismansPlugin
|
||||
): Holder {
|
||||
val key: NamespacedKey = plugin.namespacedKeyFactory.create(talisman.key.key + "_" + level)
|
||||
|
||||
val name = config.getString("name")
|
||||
|
||||
val description = config.getString("description")
|
||||
|
||||
val formattedDescription: List<String> =
|
||||
WordUtils.wrap(description, plugin.configYml.getInt("description.wrap"), "\n", false)
|
||||
.split("[\\r\\n]+")
|
||||
.toTypedArray()
|
||||
.map { "${Display.PREFIX}${StringUtils.format(plugin.langYml.getString("description-color"))}$it" }
|
||||
|
||||
val itemStack: ItemStack = run {
|
||||
val item = Items.lookup(config.getString("item"))
|
||||
Validate.isTrue(item !is EmptyTestableItem, "Item specified in " + key.key + " is invalid!")
|
||||
TalismanUtils.registerTalismanMaterial(item.item.type)
|
||||
|
||||
val out = ItemStackBuilder(item.item)
|
||||
.setAmount(1)
|
||||
.writeMetaKey(talisman.key, PersistentDataType.INTEGER, level)
|
||||
.build()
|
||||
Display.display(out)
|
||||
}
|
||||
|
||||
val craftable = config.getBool("craftable")
|
||||
|
||||
val recipe: ShapedCraftingRecipe? = run {
|
||||
if (craftable) {
|
||||
val builder = ShapedCraftingRecipe.builder(plugin, key.key)
|
||||
.setOutput(itemStack)
|
||||
val recipeStrings = config.getStrings("recipe")
|
||||
for (i in recipeStrings.indices) {
|
||||
builder.setRecipePart(i, Items.lookup(recipeStrings[i]))
|
||||
}
|
||||
builder.build()
|
||||
} else null
|
||||
}.apply { this?.register() }
|
||||
|
||||
val customItem = CustomItem(
|
||||
key,
|
||||
{ test -> TalismanChecks.getTalismanOnItem(test) == this },
|
||||
itemStack
|
||||
).apply { register() }
|
||||
|
||||
override val effects = config.getSubsections("effects").mapNotNull {
|
||||
Effects.compile(it, "Talisman ID $id")
|
||||
}.toSet()
|
||||
|
||||
override val conditions = config.getSubsections("conditions").mapNotNull {
|
||||
Conditions.compile(it, "Talisman ID $id")
|
||||
}.toSet()
|
||||
|
||||
init {
|
||||
if (Bukkit.getPluginManager().getPermission("talismans.fromtable." + key.key) == null) {
|
||||
val permission = Permission(
|
||||
"talismans.fromtable." + key.key,
|
||||
"Allows getting " + key.key + " from a Crafting Table",
|
||||
PermissionDefault.TRUE
|
||||
)
|
||||
permission.addParent(
|
||||
Objects.requireNonNull(
|
||||
Bukkit.getPluginManager().getPermission("talismans.fromtable.*")
|
||||
), true
|
||||
)
|
||||
Bukkit.getPluginManager().addPermission(permission)
|
||||
}
|
||||
}
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (other !is TalismanLevel) {
|
||||
return false
|
||||
}
|
||||
return other.level == this.level && other.talisman == this.talisman
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
return Objects.hash(level, talisman)
|
||||
}
|
||||
}
|
||||
@@ -4,9 +4,7 @@ import com.willfp.eco.core.EcoPlugin;
|
||||
import com.willfp.eco.core.config.updating.ConfigUpdater;
|
||||
import com.willfp.talismans.TalismansPlugin;
|
||||
import com.willfp.talismans.talismans.Talisman;
|
||||
import com.willfp.talismans.talismans.TalismanLevel;
|
||||
import com.willfp.talismans.talismans.Talismans;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.block.ShulkerBox;
|
||||
import org.bukkit.entity.Player;
|
||||
@@ -35,7 +33,7 @@ public class TalismanChecks {
|
||||
/**
|
||||
* Cached talismans.
|
||||
*/
|
||||
public static final Map<UUID, Set<TalismanLevel>> CACHED_TALISMANS = Collections.synchronizedMap(new HashMap<>());
|
||||
public static final Map<UUID, Set<Talisman>> CACHED_TALISMANS = Collections.synchronizedMap(new HashMap<>());
|
||||
|
||||
/**
|
||||
* Cached items.
|
||||
@@ -62,11 +60,6 @@ public class TalismanChecks {
|
||||
*/
|
||||
private static boolean offhandOnly = false;
|
||||
|
||||
/**
|
||||
* If only the highest level talismans should be activated.
|
||||
*/
|
||||
private static boolean highestLevelOnly = false;
|
||||
|
||||
/**
|
||||
* Instance of talismans.
|
||||
*/
|
||||
@@ -102,7 +95,7 @@ public class TalismanChecks {
|
||||
* @param item The item to query.
|
||||
* @return The talisman, or null if no talisman is present.
|
||||
*/
|
||||
public static TalismanLevel getTalismanOnItem(@Nullable final ItemStack item) {
|
||||
public static Talisman getTalismanOnItem(@Nullable final ItemStack item) {
|
||||
if (item == null) {
|
||||
return null;
|
||||
}
|
||||
@@ -118,21 +111,14 @@ public class TalismanChecks {
|
||||
}
|
||||
|
||||
PersistentDataContainer container = meta.getPersistentDataContainer();
|
||||
|
||||
NamespacedKey talismanKey = container.getKeys().stream().filter(namespacedKey -> namespacedKey.getNamespace().equals("talismans")).findFirst().orElse(null);
|
||||
if (talismanKey == null) {
|
||||
String id = container.get(PLUGIN.getNamespacedKeyFactory().create("talisman"), PersistentDataType.STRING);
|
||||
if (id == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Integer level = container.get(talismanKey, PersistentDataType.INTEGER);
|
||||
assert level != null;
|
||||
Talisman talisman = Talismans.getByID(id);
|
||||
|
||||
Talisman talisman = Talismans.getByID(talismanKey.getKey());
|
||||
if (talisman == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return talisman.getLevel(level);
|
||||
return talisman;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -141,7 +127,7 @@ public class TalismanChecks {
|
||||
* @param player The player to query.
|
||||
* @return A set of all found talismans.
|
||||
*/
|
||||
public static Set<TalismanLevel> getTalismansOnPlayer(@NotNull final Player player) {
|
||||
public static Set<Talisman> getTalismansOnPlayer(@NotNull final Player player) {
|
||||
return getTalismansOnPlayer(player, true);
|
||||
}
|
||||
|
||||
@@ -155,8 +141,8 @@ public class TalismanChecks {
|
||||
* @return A set of all found talismans.
|
||||
*/
|
||||
public static Set<ItemStack> getTalismanItemsOnPlayer(@NotNull final Player player,
|
||||
final boolean useCache,
|
||||
@NotNull final ItemStack... extra) {
|
||||
final boolean useCache,
|
||||
@NotNull final ItemStack... extra) {
|
||||
if (useCache) {
|
||||
Set<ItemStack> cached = CACHED_TALISMAN_ITEMS.get(player.getUniqueId());
|
||||
if (cached != null) {
|
||||
@@ -212,7 +198,7 @@ public class TalismanChecks {
|
||||
Set<ItemStack> items = new HashSet<>();
|
||||
|
||||
for (ItemStack itemStack : contents) {
|
||||
TalismanLevel talisman = getTalismanOnItem(itemStack);
|
||||
Talisman talisman = getTalismanOnItem(itemStack);
|
||||
if (talisman == null) {
|
||||
continue;
|
||||
}
|
||||
@@ -240,21 +226,21 @@ public class TalismanChecks {
|
||||
* @param extra Bonus items.
|
||||
* @return A set of all found talismans.
|
||||
*/
|
||||
public static Set<TalismanLevel> getTalismansOnPlayer(@NotNull final Player player,
|
||||
public static Set<Talisman> getTalismansOnPlayer(@NotNull final Player player,
|
||||
final boolean useCache,
|
||||
@NotNull final ItemStack... extra) {
|
||||
if (useCache) {
|
||||
Set<TalismanLevel> cached = CACHED_TALISMANS.get(player.getUniqueId());
|
||||
Set<Talisman> cached = CACHED_TALISMANS.get(player.getUniqueId());
|
||||
if (cached != null) {
|
||||
return cached;
|
||||
}
|
||||
}
|
||||
|
||||
Set<ItemStack> contents = getTalismanItemsOnPlayer(player, useCache, extra);
|
||||
Set<TalismanLevel> found = new HashSet<>();
|
||||
Set<Talisman> found = new HashSet<>();
|
||||
|
||||
for (ItemStack itemStack : contents) {
|
||||
TalismanLevel talisman = getTalismanOnItem(itemStack);
|
||||
Talisman talisman = getTalismanOnItem(itemStack);
|
||||
if (talisman == null) {
|
||||
continue;
|
||||
}
|
||||
@@ -266,26 +252,6 @@ public class TalismanChecks {
|
||||
found.add(talisman);
|
||||
}
|
||||
|
||||
if (highestLevelOnly) {
|
||||
Map<Talisman, Integer> highestFound = new HashMap<>();
|
||||
Set<TalismanLevel> foundClone = new HashSet<>(found);
|
||||
found.clear();
|
||||
|
||||
for (TalismanLevel talismanLevel : foundClone) {
|
||||
Integer highestLevel = highestFound.get(talismanLevel.getTalisman());
|
||||
if (highestLevel != null) {
|
||||
if (highestLevel < talismanLevel.getLevel()) {
|
||||
found.remove(talismanLevel.getTalisman().getLevel(highestLevel));
|
||||
highestFound.put(talismanLevel.getTalisman(), talismanLevel.getLevel());
|
||||
found.add(talismanLevel);
|
||||
}
|
||||
} else {
|
||||
found.add(talismanLevel);
|
||||
highestFound.put(talismanLevel.getTalisman(), talismanLevel.getLevel());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (useCache) {
|
||||
CACHED_TALISMANS.put(player.getUniqueId(), found);
|
||||
PLUGIN.getScheduler().runLater(() -> CACHED_TALISMANS.remove(player.getUniqueId()), 40);
|
||||
@@ -322,26 +288,7 @@ public class TalismanChecks {
|
||||
*/
|
||||
public static boolean hasTalisman(@NotNull final Player player,
|
||||
@NotNull final Talisman talisman) {
|
||||
return getTalismanLevel(player, talisman) != null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the level of a talisman that a player has equipped.
|
||||
*
|
||||
* @param player The player.
|
||||
* @param talisman The talisman.
|
||||
* @return The level, or null if not active.
|
||||
*/
|
||||
@Nullable
|
||||
public static TalismanLevel getTalismanLevel(@NotNull final Player player,
|
||||
@NotNull final Talisman talisman) {
|
||||
for (TalismanLevel talismanLevel : getTalismansOnPlayer(player)) {
|
||||
if (talismanLevel.getTalisman().equals(talisman)) {
|
||||
return talismanLevel;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
return getTalismansOnPlayer(player).contains(talisman);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -354,6 +301,5 @@ public class TalismanChecks {
|
||||
readEnderChest = plugin.getConfigYml().getBool("read-enderchest");
|
||||
readShulkerBoxes = plugin.getConfigYml().getBool("read-shulkerboxes");
|
||||
offhandOnly = plugin.getConfigYml().getBool("offhand-only");
|
||||
highestLevelOnly = plugin.getConfigYml().getBool("highest-level-only");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@ import com.willfp.eco.core.events.ArmorChangeEvent;
|
||||
import com.willfp.libreforge.LibReforgeUtils;
|
||||
import com.willfp.libreforge.effects.ConfiguredEffect;
|
||||
import com.willfp.talismans.talismans.Talisman;
|
||||
import com.willfp.talismans.talismans.TalismanLevel;
|
||||
import com.willfp.talismans.talismans.Talismans;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
@@ -68,11 +67,9 @@ public class TalismanEnableListeners extends PluginDependent<EcoPlugin> implemen
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
for (Talisman value : Talismans.values()) {
|
||||
for (TalismanLevel level : value.getLevels()) {
|
||||
for (ConfiguredEffect effect : level.getEffects()) {
|
||||
effect.getEffect().disableForPlayer(player);
|
||||
}
|
||||
for (Talisman talisman : Talismans.values()) {
|
||||
for (ConfiguredEffect effect : talisman.getEffects()) {
|
||||
effect.getEffect().disableForPlayer(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,5 +14,3 @@ read-enderchest: true # If a player's ender chest should be checked for talisman
|
||||
read-shulkerboxes: true # If a player's shulker boxes should be checked for talismans
|
||||
|
||||
offhand-only: false # If talismans or shulkers of talismans need to be in the offhand to work
|
||||
|
||||
highest-level-only: false # If only the highest level talisman is activated rather than different levels stacking.
|
||||
|
||||
Reference in New Issue
Block a user