diff options
author | Linnea Gräf <nea@nea.moe> | 2024-07-24 16:16:02 +0200 |
---|---|---|
committer | Linnea Gräf <nea@nea.moe> | 2024-07-24 16:16:02 +0200 |
commit | 195ffaca5492eb4362e479894615725c326d1998 (patch) | |
tree | 0c91cbff8f3466d60bbc5ce6b3c0c36ff87b3f28 /src/main/kotlin/moe/nea | |
parent | a19d2e1e1b233dbd0bde9b74516cc4a399772066 (diff) | |
download | Firmament-195ffaca5492eb4362e479894615725c326d1998.tar.gz Firmament-195ffaca5492eb4362e479894615725c326d1998.tar.bz2 Firmament-195ffaca5492eb4362e479894615725c326d1998.zip |
Add support for /give syntax to /firm buttons
Diffstat (limited to 'src/main/kotlin/moe/nea')
-rw-r--r-- | src/main/kotlin/moe/nea/firmament/features/inventory/buttons/InventoryButton.kt | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/src/main/kotlin/moe/nea/firmament/features/inventory/buttons/InventoryButton.kt b/src/main/kotlin/moe/nea/firmament/features/inventory/buttons/InventoryButton.kt index 51993af..ae9c7f2 100644 --- a/src/main/kotlin/moe/nea/firmament/features/inventory/buttons/InventoryButton.kt +++ b/src/main/kotlin/moe/nea/firmament/features/inventory/buttons/InventoryButton.kt @@ -7,17 +7,22 @@ package moe.nea.firmament.features.inventory.buttons +import com.mojang.brigadier.StringReader import me.shedaniel.math.Dimension import me.shedaniel.math.Point import me.shedaniel.math.Rectangle import kotlinx.serialization.Serializable import net.minecraft.client.gui.DrawContext +import net.minecraft.command.CommandRegistryAccess +import net.minecraft.command.argument.ItemStackArgumentType import net.minecraft.item.ItemStack +import net.minecraft.resource.featuretoggle.FeatureFlags import net.minecraft.util.Identifier import moe.nea.firmament.repo.ItemCache.asItemStack import moe.nea.firmament.repo.RepoManager import moe.nea.firmament.util.MC import moe.nea.firmament.util.SkyblockId +import moe.nea.firmament.util.memoize @Serializable data class InventoryButton( @@ -29,9 +34,27 @@ data class InventoryButton( var command: String? = "", ) { companion object { + val itemStackParser by lazy { + ItemStackArgumentType.itemStack(CommandRegistryAccess.of(MC.defaultRegistries, + FeatureFlags.VANILLA_FEATURES)) + } val dimensions = Dimension(18, 18) - fun getItemForName(icon: String): ItemStack { - return RepoManager.getNEUItem(SkyblockId(icon)).asItemStack(idHint = SkyblockId(icon)) + val getItemForName = ::getItemForName0.memoize(1024) + fun getItemForName0(icon: String): ItemStack { + val repoItem = RepoManager.getNEUItem(SkyblockId(icon)) + var itemStack = repoItem.asItemStack(idHint = SkyblockId(icon)) + if (repoItem == null) { + val giveSyntaxItem = if (icon.startsWith("/give") || icon.startsWith("give")) + icon.split(" ", limit = 3).getOrNull(2) ?: icon + else icon + val componentItem = + runCatching { + itemStackParser.parse(StringReader(giveSyntaxItem)).createStack(1, false) + }.getOrNull() + if (componentItem != null) + itemStack = componentItem + } + return itemStack } } |