From b65283c878866e3c69b6b343e6b51edcb58e6814 Mon Sep 17 00:00:00 2001 From: RingLo_ <63995099+lonelyicer@users.noreply.github.com> Date: Sun, 29 Mar 2026 08:10:42 +0800 Subject: [PATCH 1/2] feat: jade compat --- .../resources/assets/mia/lang/en_us.json | 3 +- .../item/artifact_modifiers_material.json | 12 ++--- .../jade/AbyssSpawnerComponentProvider.java | 48 +++++++++++++++++++ .../mia/compat/jade/MiaJadePlugin.java | 24 ++++++++++ .../mia/core/spawner/AbyssTrialSpawner.java | 7 +++ .../java/com/altnoir/mia/util/MiaUtil.java | 9 ++++ .../assets/mia/lang/default/tooltip.json | 2 + 7 files changed, 98 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/altnoir/mia/compat/jade/AbyssSpawnerComponentProvider.java create mode 100644 src/main/java/com/altnoir/mia/compat/jade/MiaJadePlugin.java diff --git a/src/generated/resources/assets/mia/lang/en_us.json b/src/generated/resources/assets/mia/lang/en_us.json index 1faa5d82..d997da49 100644 --- a/src/generated/resources/assets/mia/lang/en_us.json +++ b/src/generated/resources/assets/mia/lang/en_us.json @@ -1,6 +1,6 @@ { "attribute.name.generic.critical_hit": "Critical Hit Chance", - "attribute.name.generic.critical_hit_damage": "Critical Hit Damage", + "attribute.name.generic.critical_hit_damage": "Critical Hit Damage", "biome.mia.great_fault/great_fault": "Great Fault", "biome.mia.great_fault/the_great_fault": "The Great Fault", "biome.mia.the_abyss/abyss_dripstone_caves": "Abyss Dripstone Caves", @@ -282,6 +282,7 @@ "tag.item.mia.fossilized_logs": "Fossilized Logs", "tag.item.mia.skyfog_logs": "Skyfog Logs", "tag.item.mia.stripped_fossilized_logs": "Stripped Fossilized Logs", + "tooltip.mia.abyss_spawner.cooldown": "Cooldown: %s", "tooltip.mia.artifact.grade.a": "A", "tooltip.mia.artifact.grade.b": "B", "tooltip.mia.artifact.grade.c": "C", diff --git a/src/generated/resources/data/mia/tags/item/artifact_modifiers_material.json b/src/generated/resources/data/mia/tags/item/artifact_modifiers_material.json index 97f3713e..b16e9216 100644 --- a/src/generated/resources/data/mia/tags/item/artifact_modifiers_material.json +++ b/src/generated/resources/data/mia/tags/item/artifact_modifiers_material.json @@ -1,12 +1,12 @@ { "values": [ - "minecraft:lapis_lazuli", - "mia:prasiolite_shard", - "minecraft:copper_ingot", "minecraft:emerald", - "minecraft:iron_ingot", - "minecraft:diamond", + "minecraft:copper_ingot", "minecraft:gold_ingot", - "minecraft:netherite_ingot" + "mia:prasiolite_shard", + "minecraft:lapis_lazuli", + "minecraft:netherite_ingot", + "minecraft:diamond", + "minecraft:iron_ingot" ] } \ No newline at end of file diff --git a/src/main/java/com/altnoir/mia/compat/jade/AbyssSpawnerComponentProvider.java b/src/main/java/com/altnoir/mia/compat/jade/AbyssSpawnerComponentProvider.java new file mode 100644 index 00000000..23b167df --- /dev/null +++ b/src/main/java/com/altnoir/mia/compat/jade/AbyssSpawnerComponentProvider.java @@ -0,0 +1,48 @@ +package com.altnoir.mia.compat.jade; + +import com.altnoir.mia.common.block.entity.AbyssSpawnerBlockEntity; +import com.altnoir.mia.util.MiaUtil; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import snownee.jade.api.BlockAccessor; +import snownee.jade.api.IBlockComponentProvider; +import snownee.jade.api.IServerDataProvider; +import snownee.jade.api.ITooltip; +import snownee.jade.api.config.IPluginConfig; + +public enum AbyssSpawnerComponentProvider implements + IBlockComponentProvider, IServerDataProvider { + INSTANCE; + + private static final String tag = "spawner_cooldown"; + + @Override + public ResourceLocation getUid() { + return MiaJadePlugin.SPAWNER_COOLDOWN; + } + + @Override + public void appendTooltip(ITooltip tooltip, BlockAccessor blockAccessor, IPluginConfig iPluginConfig) { + if (!blockAccessor.getServerData().contains(tag)) + return; + + var cooldown = blockAccessor.getServerData().getInt(tag); + + if (cooldown <= 0) + return; + + tooltip.add( + Component.translatable( + "tooltip.mia.abyss_spawner.cooldown", + MiaUtil.formatTickToTime(cooldown) + ) + ); + } + + @Override + public void appendServerData(CompoundTag compoundTag, BlockAccessor blockAccessor) { + var spawner = (AbyssSpawnerBlockEntity)blockAccessor.getBlockEntity(); + compoundTag.putInt(tag, spawner.getAbyssSpawner().getRemainingCooldown()); + } +} diff --git a/src/main/java/com/altnoir/mia/compat/jade/MiaJadePlugin.java b/src/main/java/com/altnoir/mia/compat/jade/MiaJadePlugin.java new file mode 100644 index 00000000..a2775165 --- /dev/null +++ b/src/main/java/com/altnoir/mia/compat/jade/MiaJadePlugin.java @@ -0,0 +1,24 @@ +package com.altnoir.mia.compat.jade; + +import com.altnoir.mia.common.block.AbyssSpawnerBlock; +import com.altnoir.mia.common.block.entity.AbyssSpawnerBlockEntity; +import net.minecraft.resources.ResourceLocation; +import snownee.jade.api.IWailaClientRegistration; +import snownee.jade.api.IWailaCommonRegistration; +import snownee.jade.api.IWailaPlugin; +import snownee.jade.api.WailaPlugin; + +@WailaPlugin +public class MiaJadePlugin implements IWailaPlugin { + public static final ResourceLocation SPAWNER_COOLDOWN = ResourceLocation.parse("debug:spawner_cooldown"); + + @Override + public void register(IWailaCommonRegistration registration) { + registration.registerBlockDataProvider(AbyssSpawnerComponentProvider.INSTANCE, AbyssSpawnerBlockEntity.class); + } + + @Override + public void registerClient(IWailaClientRegistration registration) { + registration.registerBlockComponent(AbyssSpawnerComponentProvider.INSTANCE, AbyssSpawnerBlock.class); + } +} diff --git a/src/main/java/com/altnoir/mia/core/spawner/AbyssTrialSpawner.java b/src/main/java/com/altnoir/mia/core/spawner/AbyssTrialSpawner.java index 69a5476c..2a50b978 100644 --- a/src/main/java/com/altnoir/mia/core/spawner/AbyssTrialSpawner.java +++ b/src/main/java/com/altnoir/mia/core/spawner/AbyssTrialSpawner.java @@ -58,10 +58,15 @@ public class AbyssTrialSpawner { private Entity displayEntity; private double spin; private double oSpin; + private int remainingCooldown; public AbyssTrialSpawner(StateAccessor stateAccessor) { this.stateAccessor = stateAccessor; } + + public int getRemainingCooldown() { + return remainingCooldown; + } public void tickServer(ServerLevel level, BlockPos pos, boolean ominous) { var currentState = this.stateAccessor.getState(); @@ -79,6 +84,8 @@ public void tickServer(ServerLevel level, BlockPos pos, boolean ominous) { case EJECTING_REWARD -> tickEjectingReward(level, pos, ominous); case COOLDOWN -> tickCooldown(level, pos); } + + this.remainingCooldown = this.cooldownEndsAt - level.getServer().getTickCount(); } private void tickInactive(ServerLevel level, BlockPos pos) { diff --git a/src/main/java/com/altnoir/mia/util/MiaUtil.java b/src/main/java/com/altnoir/mia/util/MiaUtil.java index 1e29b584..918f931d 100644 --- a/src/main/java/com/altnoir/mia/util/MiaUtil.java +++ b/src/main/java/com/altnoir/mia/util/MiaUtil.java @@ -36,6 +36,7 @@ import org.joml.Matrix4f; import java.io.InputStream; +import java.time.Duration; import java.util.Collection; import java.util.List; import java.util.Objects; @@ -247,4 +248,12 @@ public static boolean isCreativeOrSpectator(Player player) { return trimmedPath.split("/"); } + + public static String formatTickToTime(long ticks) { + var duration = Duration.ofMillis(ticks * 50L); + var minutes = duration.toMinutes(); + var seconds = duration.getSeconds() % 60; + + return String.format("%02d:%02d", minutes, seconds); + } } diff --git a/src/main/resources/assets/mia/lang/default/tooltip.json b/src/main/resources/assets/mia/lang/default/tooltip.json index 012c6037..fba81e3d 100644 --- a/src/main/resources/assets/mia/lang/default/tooltip.json +++ b/src/main/resources/assets/mia/lang/default/tooltip.json @@ -7,6 +7,8 @@ "tooltip.mia.whistle.level": "Whistle Level: %s", "tooltip.mia.whistle.capacity": "Capacity: %s", + "tooltip.mia.abyss_spawner.cooldown": "Cooldown: %s", + "tooltip.mia.skill.cooldown_value": "Cooldown: %s", "tooltip.mia.artifact.weight": "Weight: %s", "tooltip.mia.artifact.grade.s": "S", From bd70c3e0650ea1090313bd219c69af56c018e8e1 Mon Sep 17 00:00:00 2001 From: RingLo_ <63995099+lonelyicer@users.noreply.github.com> Date: Sun, 29 Mar 2026 08:16:30 +0800 Subject: [PATCH 2/2] chore: apply suggestions Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/main/java/com/altnoir/mia/compat/jade/MiaJadePlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/altnoir/mia/compat/jade/MiaJadePlugin.java b/src/main/java/com/altnoir/mia/compat/jade/MiaJadePlugin.java index a2775165..0871aa77 100644 --- a/src/main/java/com/altnoir/mia/compat/jade/MiaJadePlugin.java +++ b/src/main/java/com/altnoir/mia/compat/jade/MiaJadePlugin.java @@ -10,7 +10,7 @@ @WailaPlugin public class MiaJadePlugin implements IWailaPlugin { - public static final ResourceLocation SPAWNER_COOLDOWN = ResourceLocation.parse("debug:spawner_cooldown"); + public static final ResourceLocation SPAWNER_COOLDOWN = ResourceLocation.parse("mia:spawner_cooldown"); @Override public void register(IWailaCommonRegistration registration) {