From 5b5e161062c8d3b9495587b6fa5758f16721811c Mon Sep 17 00:00:00 2001 From: Auxilor Date: Mon, 5 Jun 2023 13:22:21 +0100 Subject: [PATCH] Added head arg parser --- .../eco/internal/items/ArgParserHead.kt | 53 +++++++++++++++++++ .../eco/internal/spigot/EcoSpigotPlugin.kt | 2 + 2 files changed, 55 insertions(+) create mode 100644 eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/items/ArgParserHead.kt diff --git a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/items/ArgParserHead.kt b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/items/ArgParserHead.kt new file mode 100644 index 00000000..169e813d --- /dev/null +++ b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/items/ArgParserHead.kt @@ -0,0 +1,53 @@ +package com.willfp.eco.internal.items + +import com.willfp.eco.core.items.args.LookupArgParser +import org.bukkit.Bukkit +import org.bukkit.inventory.ItemStack +import org.bukkit.inventory.meta.ItemMeta +import org.bukkit.inventory.meta.SkullMeta +import java.util.function.Predicate + +object ArgParserHead : LookupArgParser { + override fun parseArguments(args: Array, meta: ItemMeta): Predicate? { + if (meta !is SkullMeta) { + return null + } + + var playerName: String? = null + + for (arg in args) { + val argSplit = arg.split(":") + if (!argSplit[0].equals("head", ignoreCase = true)) { + continue + } + if (argSplit.size < 2) { + continue + } + playerName = argSplit[1] + } + + playerName ?: return null + + @Suppress("DEPRECATION") + val player = Bukkit.getOfflinePlayer(playerName) + + meta.owningPlayer = player + + return Predicate { + val testMeta = it.itemMeta as? SkullMeta ?: return@Predicate false + testMeta.owningPlayer?.uniqueId == player.uniqueId + } + } + + override fun serializeBack(meta: ItemMeta): String? { + if (meta !is SkullMeta) { + return null + } + + if (meta.owningPlayer == null) { + return null + } + + return "head:${meta.owningPlayer?.name}" + } +} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/EcoSpigotPlugin.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/EcoSpigotPlugin.kt index 59939673..3dd1ef79 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/EcoSpigotPlugin.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/EcoSpigotPlugin.kt @@ -45,6 +45,7 @@ import com.willfp.eco.internal.items.ArgParserColor import com.willfp.eco.internal.items.ArgParserCustomModelData import com.willfp.eco.internal.items.ArgParserEnchantment import com.willfp.eco.internal.items.ArgParserFlag +import com.willfp.eco.internal.items.ArgParserHead import com.willfp.eco.internal.items.ArgParserName import com.willfp.eco.internal.items.ArgParserTexture import com.willfp.eco.internal.items.ArgParserUnbreakable @@ -150,6 +151,7 @@ abstract class EcoSpigotPlugin : EcoPlugin() { Items.registerArgParser(ArgParserFlag) Items.registerArgParser(ArgParserUnbreakable) Items.registerArgParser(ArgParserName) + Items.registerArgParser(ArgParserHead) Entities.registerArgParser(EntityArgParserName) Entities.registerArgParser(EntityArgParserNoAI)