From 8dd145ed7d1a7d94b7a2b45ec08caffca5c8a7eb Mon Sep 17 00:00:00 2001 From: Auxilor Date: Wed, 24 Nov 2021 12:13:13 +0000 Subject: [PATCH] Added CustomModelDataArgParser --- .../items/args/CustomModelDataArgParser.java | 57 +++++++++++++++++++ .../com/willfp/eco/spigot/EcoSpigotPlugin.kt | 2 + 2 files changed, 59 insertions(+) create mode 100644 eco-api/src/main/java/com/willfp/eco/core/items/args/CustomModelDataArgParser.java diff --git a/eco-api/src/main/java/com/willfp/eco/core/items/args/CustomModelDataArgParser.java b/eco-api/src/main/java/com/willfp/eco/core/items/args/CustomModelDataArgParser.java new file mode 100644 index 00000000..4c9f2713 --- /dev/null +++ b/eco-api/src/main/java/com/willfp/eco/core/items/args/CustomModelDataArgParser.java @@ -0,0 +1,57 @@ +package com.willfp.eco.core.items.args; + +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.function.Predicate; + +/** + * Parse custom model data. + */ +public class CustomModelDataArgParser implements LookupArgParser { + @Override + public @Nullable Predicate parseArguments(@NotNull final String[] args, + @NotNull final ItemMeta meta) { + Integer modelData = null; + + for (String arg : args) { + String[] argSplit = arg.split(":"); + if (!argSplit[0].equalsIgnoreCase("custom-model-data")) { + continue; + } + + if (argSplit.length < 2) { + continue; + } + + String asString = argSplit[1]; + + try { + modelData = Integer.parseInt(asString); + } catch (NumberFormatException e) { + modelData = null; + } + } + + if (modelData == null) { + return null; + } + + meta.setCustomModelData(modelData); + + int finalModelData = modelData; + return test -> { + if (!test.hasItemMeta()) { + return false; + } + + ItemMeta testMeta = test.getItemMeta(); + + assert testMeta != null; + + return testMeta.getCustomModelData() == finalModelData; + }; + } +} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/spigot/EcoSpigotPlugin.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/spigot/EcoSpigotPlugin.kt index 5c50fe9c..b62b0760 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/spigot/EcoSpigotPlugin.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/spigot/EcoSpigotPlugin.kt @@ -15,6 +15,7 @@ import com.willfp.eco.core.integrations.hologram.HologramManager import com.willfp.eco.core.integrations.mcmmo.McmmoManager import com.willfp.eco.core.integrations.shop.ShopManager import com.willfp.eco.core.items.Items +import com.willfp.eco.core.items.args.CustomModelDataArgParser import com.willfp.eco.core.items.args.EnchantmentArgParser import com.willfp.eco.core.items.args.TextureArgParser import com.willfp.eco.internal.display.EcoDisplayHandler @@ -92,6 +93,7 @@ abstract class EcoSpigotPlugin : EcoPlugin( init { Items.registerArgParser(EnchantmentArgParser()) Items.registerArgParser(TextureArgParser()) + Items.registerArgParser(CustomModelDataArgParser()) val skullProxy = getProxy(SkullProxy::class.java) SkullUtils.initialize(