diff options
author | Linnea Gräf <nea@nea.moe> | 2025-03-06 21:04:18 +0100 |
---|---|---|
committer | Linnea Gräf <nea@nea.moe> | 2025-03-08 16:01:00 +0100 |
commit | 9099abe955d88f7e0f1a1a8feba519a8a098858d (patch) | |
tree | b4c4a1e243719d55c4fe077c87a17e86402786da /src/compat | |
parent | ebd2f270c385e3cbf0bfd3ee5db8bc4b65700c98 (diff) | |
download | Firmament-9099abe955d88f7e0f1a1a8feba519a8a098858d.tar.gz Firmament-9099abe955d88f7e0f1a1a8feba519a8a098858d.tar.bz2 Firmament-9099abe955d88f7e0f1a1a8feba519a8a098858d.zip |
feat: Add custom hardness tooltips
Diffstat (limited to 'src/compat')
-rw-r--r-- | src/compat/jade/java/moe/nea/firmament/compat/jade/CustomMiningHardnessProvider.kt | 61 | ||||
-rw-r--r-- | src/compat/jade/java/moe/nea/firmament/compat/jade/FirmamentJadePlugin.kt | 30 |
2 files changed, 63 insertions, 28 deletions
diff --git a/src/compat/jade/java/moe/nea/firmament/compat/jade/CustomMiningHardnessProvider.kt b/src/compat/jade/java/moe/nea/firmament/compat/jade/CustomMiningHardnessProvider.kt new file mode 100644 index 0000000..49f5257 --- /dev/null +++ b/src/compat/jade/java/moe/nea/firmament/compat/jade/CustomMiningHardnessProvider.kt @@ -0,0 +1,61 @@ +package moe.nea.firmament.compat.jade + +import snownee.jade.api.BlockAccessor +import snownee.jade.api.IBlockComponentProvider +import snownee.jade.api.ITooltip +import snownee.jade.api.config.IPluginConfig +import net.minecraft.block.Block +import net.minecraft.util.Identifier +import moe.nea.firmament.Firmament +import moe.nea.firmament.annotations.Subscribe +import moe.nea.firmament.events.SkyblockServerUpdateEvent +import moe.nea.firmament.repo.MiningRepoData +import moe.nea.firmament.repo.RepoManager +import moe.nea.firmament.util.ErrorUtil +import moe.nea.firmament.util.tr + +object CustomMiningHardnessProvider : IBlockComponentProvider { + + var customBlocks: Map<Block, MiningRepoData.CustomMiningBlock> = mapOf() + + fun refreshBlockInfo() { + if (!isOnMiningIsland()) { + customBlocks = mapOf() + return + } + val blocks = RepoManager.miningData.customMiningBlocks + .flatMap { customBlock -> + // TODO: add a lifted helper method for this + customBlock.blocks189.filter { it.isCurrentlyActive } + .mapNotNull { it.block } + .map { customBlock to it } + } + .groupBy { it.second } + customBlocks = blocks.mapNotNull { (block, customBlocks) -> + val singleMatch = + ErrorUtil.notNullOr(customBlocks.singleOrNull()?.first, + "Two custom blocks both want to supply custom mining behaviour for $block.") { return@mapNotNull null } + block to singleMatch + }.toMap() + } + + @Subscribe + fun onWorldSwap(event: SkyblockServerUpdateEvent) { + refreshBlockInfo() + } + + + override fun appendTooltip( + tooltip: ITooltip, + block: BlockAccessor, + config: IPluginConfig? + ) { + val customBlock = customBlocks[block.block] + ?: return + if (customBlock.breakingPower > 0) + tooltip.add(tr("firmament.jade.breaking_power", "Required Breaking Power: ${customBlock.breakingPower}")) + } + + override fun getUid(): Identifier = + Firmament.identifier("custom_mining_hardness") +} diff --git a/src/compat/jade/java/moe/nea/firmament/compat/jade/FirmamentJadePlugin.kt b/src/compat/jade/java/moe/nea/firmament/compat/jade/FirmamentJadePlugin.kt index 8990646..50c7b89 100644 --- a/src/compat/jade/java/moe/nea/firmament/compat/jade/FirmamentJadePlugin.kt +++ b/src/compat/jade/java/moe/nea/firmament/compat/jade/FirmamentJadePlugin.kt @@ -4,6 +4,7 @@ import snownee.jade.api.IWailaClientRegistration import snownee.jade.api.IWailaCommonRegistration import snownee.jade.api.IWailaPlugin import snownee.jade.api.WailaPlugin +import net.minecraft.block.Block import net.minecraft.block.Blocks import moe.nea.firmament.Firmament @@ -15,34 +16,7 @@ class FirmamentJadePlugin : IWailaPlugin { } override fun registerClient(registration: IWailaClientRegistration) { - registration.registerBlockComponent(MithrilProvider("prismarine"), Blocks.PRISMARINE::class.java) - registration.registerBlockComponent(MithrilProvider("gray_wool"), Blocks.GRAY_WOOL::class.java) - registration.registerBlockComponent(MithrilProvider("gray_concrete"), Blocks.GRAY_CONCRETE::class.java) - // and together, we are the crystal gems of celeste minecraft (surely there's a better way to do this :sob:) - registration.registerBlockComponent(GemstoneProvider("red_stained_glass", "ruby"), Blocks.RED_STAINED_GLASS::class.java) - registration.registerBlockComponent(GemstoneProvider("red_stained_glass_pane", "ruby"), Blocks.RED_STAINED_GLASS_PANE::class.java) - registration.registerBlockComponent(GemstoneProvider("purple_stained_glass", "amethyst"), Blocks.PURPLE_STAINED_GLASS::class.java) - registration.registerBlockComponent(GemstoneProvider("purple_stained_glass_pane", "amethyst"), Blocks.PURPLE_STAINED_GLASS_PANE::class.java) - registration.registerBlockComponent(GemstoneProvider("lime_stained_glass", "jade"), Blocks.LIME_STAINED_GLASS::class.java) - registration.registerBlockComponent(GemstoneProvider("lime_stained_glass_pane", "jade"), Blocks.LIME_STAINED_GLASS_PANE::class.java) - registration.registerBlockComponent(GemstoneProvider("blue_stained_glass", "sapphire"), Blocks.BLUE_STAINED_GLASS::class.java) - registration.registerBlockComponent(GemstoneProvider("blue_stained_glass_pane", "sapphire"), Blocks.BLUE_STAINED_GLASS_PANE::class.java) - registration.registerBlockComponent(GemstoneProvider("orange_stained_glass", "amber"), Blocks.ORANGE_STAINED_GLASS::class.java) - registration.registerBlockComponent(GemstoneProvider("orange_stained_glass_pane", "amber"), Blocks.ORANGE_STAINED_GLASS_PANE::class.java) - registration.registerBlockComponent(GemstoneProvider("yellow_stained_glass", "topaz"), Blocks.YELLOW_STAINED_GLASS::class.java) - registration.registerBlockComponent(GemstoneProvider("yellow_stained_glass_pane", "topaz"), Blocks.YELLOW_STAINED_GLASS_PANE::class.java) - registration.registerBlockComponent(GemstoneProvider("magenta_stained_glass", "jasper"), Blocks.MAGENTA_STAINED_GLASS::class.java) - registration.registerBlockComponent(GemstoneProvider("magenta_stained_glass_pane", "jasper"), Blocks.MAGENTA_STAINED_GLASS_PANE::class.java) - registration.registerBlockComponent(GemstoneProvider("white_stained_glass", "opal"), Blocks.WHITE_STAINED_GLASS::class.java) - registration.registerBlockComponent(GemstoneProvider("white_stained_glass_pane", "opal"), Blocks.WHITE_STAINED_GLASS_PANE::class.java) - registration.registerBlockComponent(GemstoneProvider("blue_stained_glass", "aquamarine"), Blocks.BLUE_STAINED_GLASS::class.java) - registration.registerBlockComponent(GemstoneProvider("blue_stained_glass_pane", "aquamarine"), Blocks.BLUE_STAINED_GLASS_PANE::class.java) - registration.registerBlockComponent(GemstoneProvider("black_stained_glass", "onyx"), Blocks.BLACK_STAINED_GLASS::class.java) - registration.registerBlockComponent(GemstoneProvider("black_stained_glass_pane", "onyx"), Blocks.BLACK_STAINED_GLASS_PANE::class.java) - registration.registerBlockComponent(GemstoneProvider("brown_stained_glass", "citrine"), Blocks.BROWN_STAINED_GLASS::class.java) - registration.registerBlockComponent(GemstoneProvider("brown_stained_glass_pane", "citrine"), Blocks.BROWN_STAINED_GLASS_PANE::class.java) - registration.registerBlockComponent(GemstoneProvider("green_stained_glass", "peridot"), Blocks.GREEN_STAINED_GLASS::class.java) - registration.registerBlockComponent(GemstoneProvider("green_stained_glass_pane", "peridot"), Blocks.GREEN_STAINED_GLASS_PANE::class.java) + registration.registerBlockComponent(CustomMiningHardnessProvider, Block::class.java) registration.registerProgressClient(SkyblockProgressProvider()) } } |