diff options
author | Pauline <git@ethanlibs.co> | 2025-02-26 16:29:35 +0100 |
---|---|---|
committer | Linnea Gräf <nea@nea.moe> | 2025-03-08 16:01:00 +0100 |
commit | d176e0a52e68ee7ee7a4b66feef9874fb954243b (patch) | |
tree | a411c5b5719893a456d34339cb6cea29a7d0ff93 /src | |
parent | 145fff6a59f0f58305d6c057e97f2a1d6c958744 (diff) | |
download | Firmament-d176e0a52e68ee7ee7a4b66feef9874fb954243b.tar.gz Firmament-d176e0a52e68ee7ee7a4b66feef9874fb954243b.tar.bz2 Firmament-d176e0a52e68ee7ee7a4b66feef9874fb954243b.zip |
✨ feature(jade): add initial work on jade plugin :3
Signed-off-by: Pauline <git@ethanlibs.co>
Diffstat (limited to 'src')
9 files changed, 209 insertions, 0 deletions
diff --git a/src/compat/jade/java/moe/nea/firmament/compat/jade/DrillToolHandler.kt b/src/compat/jade/java/moe/nea/firmament/compat/jade/DrillToolHandler.kt new file mode 100644 index 0000000..d31532a --- /dev/null +++ b/src/compat/jade/java/moe/nea/firmament/compat/jade/DrillToolHandler.kt @@ -0,0 +1,22 @@ +package moe.nea.firmament.compat.jade + +import snownee.jade.addon.harvest.ToolHandler +import net.minecraft.block.BlockState +import net.minecraft.item.ItemStack +import net.minecraft.util.Identifier +import net.minecraft.util.math.BlockPos +import net.minecraft.world.World + +class DrillToolHandler : ToolHandler { + override fun test(state: BlockState, world: World, pos: BlockPos): ItemStack { + TODO("We need to override the existing tool handler tests because they use state.getHardness(world, pos), which doesn't work with Skyblocks NMS fuckery") + } + + override fun getTools(): List<ItemStack> { + TODO("Not yet implemented") + } + + override fun getUid(): Identifier { + TODO("Not yet implemented") + } +} diff --git a/src/compat/jade/java/moe/nea/firmament/compat/jade/DrillToolProvider.kt b/src/compat/jade/java/moe/nea/firmament/compat/jade/DrillToolProvider.kt new file mode 100644 index 0000000..2517725 --- /dev/null +++ b/src/compat/jade/java/moe/nea/firmament/compat/jade/DrillToolProvider.kt @@ -0,0 +1,17 @@ +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.util.Identifier + +class DrillToolProvider : IBlockComponentProvider { + override fun appendTooltip(tooltip: ITooltip, accessor: BlockAccessor, config: IPluginConfig) { + TODO("Not yet implemented") + } + + override fun getUid(): Identifier { + TODO("Not yet implemented") + } +} 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 new file mode 100644 index 0000000..8990646 --- /dev/null +++ b/src/compat/jade/java/moe/nea/firmament/compat/jade/FirmamentJadePlugin.kt @@ -0,0 +1,48 @@ +package moe.nea.firmament.compat.jade + +import snownee.jade.api.IWailaClientRegistration +import snownee.jade.api.IWailaCommonRegistration +import snownee.jade.api.IWailaPlugin +import snownee.jade.api.WailaPlugin +import net.minecraft.block.Blocks +import moe.nea.firmament.Firmament + +// TODO: make this display breaking power, override names of mineable blocks, and override breaking indicator to use mining fatigue system +@WailaPlugin +class FirmamentJadePlugin : IWailaPlugin { + override fun register(registration: IWailaCommonRegistration) { + Firmament.logger.debug("Registering Jade integration...") + } + + 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.registerProgressClient(SkyblockProgressProvider()) + } +} diff --git a/src/compat/jade/java/moe/nea/firmament/compat/jade/GemstoneProvider.kt b/src/compat/jade/java/moe/nea/firmament/compat/jade/GemstoneProvider.kt new file mode 100644 index 0000000..883da12 --- /dev/null +++ b/src/compat/jade/java/moe/nea/firmament/compat/jade/GemstoneProvider.kt @@ -0,0 +1,24 @@ +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.text.Text +import net.minecraft.util.Identifier +import moe.nea.firmament.util.SBData + +class GemstoneProvider(val type: String, val replacement: String) : IBlockComponentProvider { + override fun appendTooltip(tooltip: ITooltip, accessor: BlockAccessor, config: IPluginConfig) { + if (SBData.isOnSkyblock) { + tooltip.add(drillIcon) + // TODO: override jade breakability test to include breaking power of drills on mining islands + tooltip.append(Text.of("Breaking Power 6/7/8/9/10")) // TODO: Use NEU API/add new data for breaking power + tooltip.replace(Identifier.of("minecraft", type), Text.literal("Gemstone $type of $replacement y")) // this doesnt work + } + } + + override fun getUid(): Identifier { + return "gemstone_${type}_${replacement}".jadeId() + } +} diff --git a/src/compat/jade/java/moe/nea/firmament/compat/jade/HardstoneProvider.kt b/src/compat/jade/java/moe/nea/firmament/compat/jade/HardstoneProvider.kt new file mode 100644 index 0000000..7e12d7f --- /dev/null +++ b/src/compat/jade/java/moe/nea/firmament/compat/jade/HardstoneProvider.kt @@ -0,0 +1,24 @@ +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.text.Text +import net.minecraft.util.Identifier +import moe.nea.firmament.util.SBData + +class HardstoneProvider : IBlockComponentProvider { + override fun appendTooltip(tooltip: ITooltip, accessor: BlockAccessor, config: IPluginConfig) { + if (SBData.isOnSkyblock) { + tooltip.add(drillIcon) + // TODO: override jade breakability test to include breaking power of drills on mining islands + tooltip.append(Text.of("Breaking Power 5")) + tooltip.replace(Identifier.of("minecraft", "stone"), Text.literal("Hard Stone")) // this doesnt work + } + } + + override fun getUid(): Identifier { + return "hardstone".jadeId() + } +} diff --git a/src/compat/jade/java/moe/nea/firmament/compat/jade/MithrilProvider.kt b/src/compat/jade/java/moe/nea/firmament/compat/jade/MithrilProvider.kt new file mode 100644 index 0000000..e5746fa --- /dev/null +++ b/src/compat/jade/java/moe/nea/firmament/compat/jade/MithrilProvider.kt @@ -0,0 +1,24 @@ +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.text.Text +import net.minecraft.util.Identifier +import moe.nea.firmament.util.SBData + +class MithrilProvider(val type: String) : IBlockComponentProvider { + override fun appendTooltip(tooltip: ITooltip, accessor: BlockAccessor, config: IPluginConfig) { + if (SBData.isOnSkyblock) { // why is there no utility to check if we are on an island with mithril am i dumb + tooltip.add(drillIcon) + tooltip.append(Text.of("Breaking Power 5")) + tooltip.replace(Identifier.of("minecraft", type), Text.literal("Mithril $type")) // this doesnt work + } + } + + override fun getUid(): Identifier { + return "mithril_$type".jadeId() + } +} + diff --git a/src/compat/jade/java/moe/nea/firmament/compat/jade/SkyblockProgressProvider.kt b/src/compat/jade/java/moe/nea/firmament/compat/jade/SkyblockProgressProvider.kt new file mode 100644 index 0000000..cdb849f --- /dev/null +++ b/src/compat/jade/java/moe/nea/firmament/compat/jade/SkyblockProgressProvider.kt @@ -0,0 +1,31 @@ +package moe.nea.firmament.compat.jade + +import java.util.function.BiConsumer +import snownee.jade.api.Accessor +import snownee.jade.api.view.ClientViewGroup +import snownee.jade.api.view.IClientExtensionProvider +import snownee.jade.api.view.ProgressView +import snownee.jade.api.view.ViewGroup +import net.minecraft.text.Text +import net.minecraft.util.Identifier + +class SkyblockProgressProvider : IClientExtensionProvider<ProgressView.Data, ProgressView> { + // wtf does this do i think its for the little progress bar which breaks in mining fatigue mining system + // but like this is just copied from the example plugin soo + // TODO :3 + override fun getClientGroups(accessor: Accessor<*>, groups: List<ViewGroup<ProgressView.Data>>): List<ClientViewGroup<ProgressView>> { + return ClientViewGroup.map(groups, ProgressView::read, + BiConsumer { group: ViewGroup<ProgressView.Data>, clientGroup: ClientViewGroup<ProgressView> -> + var view = clientGroup.views.first() + view.style.color(-0x340000) + view.text = Text.literal("e") + view = clientGroup.views[1] + view.style.color(-0xff3400) + view.text = Text.literal("!!") + }) + } + + override fun getUid(): Identifier? { + return "progress".jadeId() + } +} diff --git a/src/compat/jade/java/moe/nea/firmament/compat/jade/utils.kt b/src/compat/jade/java/moe/nea/firmament/compat/jade/utils.kt new file mode 100644 index 0000000..3a0a18c --- /dev/null +++ b/src/compat/jade/java/moe/nea/firmament/compat/jade/utils.kt @@ -0,0 +1,16 @@ +package moe.nea.firmament.compat.jade + +import snownee.jade.api.ui.IElement +import snownee.jade.api.ui.IElementHelper +import net.minecraft.item.ItemStack +import net.minecraft.item.Items +import net.minecraft.util.Identifier +import moe.nea.firmament.util.SkyblockId +import moe.nea.firmament.util.setSkyBlockId + + +fun String.jadeId(): Identifier = Identifier.of("firmament", this) + +// This drill icon should work for CIT resource packs +val drillItem: ItemStack = Items.PRISMARINE_SHARD.defaultStack.setSkyBlockId(SkyblockId("TITANIUM_DRILL_1")) +val drillIcon: IElement = IElementHelper.get().item(drillItem, 0.5f).message(null) diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index cf7130b..02c11ee 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -40,6 +40,9 @@ "modmenu": [ "moe.nea.firmament.compat.modmenu.FirmamentModMenuPlugin" ], + "jade": [ + "moe.nea.firmament.compat.jade.FirmamentJadePlugin" + ], "jarvis": [ "moe.nea.firmament.jarvis.JarvisIntegration" ] |