aboutsummaryrefslogtreecommitdiff
path: root/src/compat
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2025-03-10 22:24:01 +0100
committerLinnea Gräf <nea@nea.moe>2025-03-10 22:24:26 +0100
commitbb627157c217d3ebd632e51447e60acce1a81f86 (patch)
tree46048e669a49e9921744e1f356b5e1e02a9870be /src/compat
parent034fc701ef0feffe1141b479ef4163d070958a6e (diff)
downloadFirmament-bb627157c217d3ebd632e51447e60acce1a81f86.tar.gz
Firmament-bb627157c217d3ebd632e51447e60acce1a81f86.tar.bz2
Firmament-bb627157c217d3ebd632e51447e60acce1a81f86.zip
fix: Weird tools for BP 7; feat: Options for jade; fix: tools for glass blocks in jade
Diffstat (limited to 'src/compat')
-rw-r--r--src/compat/jade/java/moe/nea/firmament/compat/jade/CustomFakeBlockProvider.kt9
-rw-r--r--src/compat/jade/java/moe/nea/firmament/compat/jade/CustomMiningHardnessProvider.kt1
-rw-r--r--src/compat/jade/java/moe/nea/firmament/compat/jade/DrillToolProvider.kt3
-rw-r--r--src/compat/jade/java/moe/nea/firmament/compat/jade/JadeIntegration.kt (renamed from src/compat/jade/java/moe/nea/firmament/compat/jade/CurrentCustomBlockHolder.kt)14
-rw-r--r--src/compat/jade/java/moe/nea/firmament/mixins/compat/jade/EnforceToolDisplayForCustomBlocksInHarvestToolProvider.java33
5 files changed, 56 insertions, 4 deletions
diff --git a/src/compat/jade/java/moe/nea/firmament/compat/jade/CustomFakeBlockProvider.kt b/src/compat/jade/java/moe/nea/firmament/compat/jade/CustomFakeBlockProvider.kt
index 3dc6101..53e3255 100644
--- a/src/compat/jade/java/moe/nea/firmament/compat/jade/CustomFakeBlockProvider.kt
+++ b/src/compat/jade/java/moe/nea/firmament/compat/jade/CustomFakeBlockProvider.kt
@@ -15,8 +15,9 @@ class CustomFakeBlockProvider(val registration: IWailaClientRegistration) : Jade
accessor: Accessor<*>?,
originalAccessor: Accessor<*>?
): Accessor<*>? {
+ if (!JadeIntegration.TConfig.blockDetection) return accessor
if (accessor !is BlockAccessor) return accessor
- val customBlock = CurrentCustomBlockHolder.customBlocks[accessor.block]
+ val customBlock = JadeIntegration.customBlocks[accessor.block]
if (customBlock == null) return accessor
return registration.blockAccessor()
.from(accessor)
@@ -25,6 +26,12 @@ class CustomFakeBlockProvider(val registration: IWailaClientRegistration) : Jade
}
companion object {
+ @JvmStatic
+ fun hasCustomBlock(accessor: BlockAccessor): Boolean {
+ return getCustomBlock(accessor) != null
+ }
+
+ @JvmStatic
fun getCustomBlock(accessor: BlockAccessor): MiningRepoData.CustomMiningBlock? {
if (!accessor.isFakeBlock) return null
val item = accessor.fakeBlock
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
index 7f08bea..29fecd2 100644
--- a/src/compat/jade/java/moe/nea/firmament/compat/jade/CustomMiningHardnessProvider.kt
+++ b/src/compat/jade/java/moe/nea/firmament/compat/jade/CustomMiningHardnessProvider.kt
@@ -66,6 +66,7 @@ object CustomMiningHardnessProvider : IBlockComponentProvider {
@JvmStatic
fun replaceBreakProgress(original: Float): Float {
+ if (!JadeIntegration.TConfig.miningProgress) return original
if (!isOnMiningIsland()) return original
val pos = MC.interactionManager?.currentBreakingPos ?: return original
val info = currentBreakingInfo
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
index bb52fe4..ab45e7c 100644
--- a/src/compat/jade/java/moe/nea/firmament/compat/jade/DrillToolProvider.kt
+++ b/src/compat/jade/java/moe/nea/firmament/compat/jade/DrillToolProvider.kt
@@ -31,9 +31,8 @@ class DrillToolProvider : IBlockComponentProvider {
p2: IPluginConfig?
) {
val customBlock = CustomFakeBlockProvider.getCustomBlock(accessor) ?: return
- if (customBlock.breakingPower <= 0) return
val tool = RepoManager.miningData.getToolsThatCanBreak(customBlock.breakingPower).firstOrNull()
- ?.asItemStack() ?: return
+ ?.asImmutableItemStack() ?: return
tooltip.replace(JadeIds.MC_HARVEST_TOOL, UnaryOperator { elements ->
elements.map { inner ->
val lastItemIndex = inner.indexOfLast { it is ItemStackElement }
diff --git a/src/compat/jade/java/moe/nea/firmament/compat/jade/CurrentCustomBlockHolder.kt b/src/compat/jade/java/moe/nea/firmament/compat/jade/JadeIntegration.kt
index 5fe2425..d411c26 100644
--- a/src/compat/jade/java/moe/nea/firmament/compat/jade/CurrentCustomBlockHolder.kt
+++ b/src/compat/jade/java/moe/nea/firmament/compat/jade/JadeIntegration.kt
@@ -6,8 +6,15 @@ import moe.nea.firmament.repo.MiningRepoData
import moe.nea.firmament.repo.RepoManager
import moe.nea.firmament.util.ErrorUtil
import net.minecraft.block.Block
+import moe.nea.firmament.events.ReloadRegistrationEvent
+import moe.nea.firmament.gui.config.ManagedConfig
+
+object JadeIntegration {
+ object TConfig : ManagedConfig("jade-integration", Category.INTEGRATIONS) {
+ val miningProgress by toggle("progress") { true }
+ val blockDetection by toggle("blocks") { true }
+ }
-object CurrentCustomBlockHolder {
var customBlocks: Map<Block, MiningRepoData.CustomMiningBlock> = mapOf()
fun refreshBlockInfo() {
@@ -32,6 +39,11 @@ object CurrentCustomBlockHolder {
}
@Subscribe
+ fun onRepoReload(event: ReloadRegistrationEvent) {
+ event.repo.registerReloadListener { refreshBlockInfo() }
+ }
+
+ @Subscribe
fun onWorldSwap(event: SkyblockServerUpdateEvent) {
refreshBlockInfo()
}
diff --git a/src/compat/jade/java/moe/nea/firmament/mixins/compat/jade/EnforceToolDisplayForCustomBlocksInHarvestToolProvider.java b/src/compat/jade/java/moe/nea/firmament/mixins/compat/jade/EnforceToolDisplayForCustomBlocksInHarvestToolProvider.java
new file mode 100644
index 0000000..3677d01
--- /dev/null
+++ b/src/compat/jade/java/moe/nea/firmament/mixins/compat/jade/EnforceToolDisplayForCustomBlocksInHarvestToolProvider.java
@@ -0,0 +1,33 @@
+package moe.nea.firmament.mixins.compat.jade;
+
+import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
+import com.llamalad7.mixinextras.sugar.Local;
+import moe.nea.firmament.compat.jade.CustomFakeBlockProvider;
+import net.minecraft.block.Blocks;
+import net.minecraft.item.ItemStack;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import snownee.jade.addon.harvest.HarvestToolProvider;
+import snownee.jade.api.BlockAccessor;
+
+import java.util.List;
+
+@Mixin(HarvestToolProvider.class)
+public class EnforceToolDisplayForCustomBlocksInHarvestToolProvider {
+ @ModifyExpressionValue(method = "getText", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/BlockState;isToolRequired()Z"))
+ private boolean overwriteRequiresTool(boolean original, @Local(argsOnly = true) BlockAccessor accessor) {
+ if (CustomFakeBlockProvider.hasCustomBlock(accessor))
+ return true;
+ return original;
+ }
+
+ private static final List<ItemStack> REPLACEABLE_TOOL = List.of(new ItemStack(Blocks.ENCHANTING_TABLE));
+
+ @ModifyExpressionValue(method = "getText", at = @At(value = "INVOKE", target = "Lcom/google/common/cache/Cache;get(Ljava/lang/Object;Ljava/util/concurrent/Callable;)Ljava/lang/Object;"))
+ private Object overwriteAvailableTools(Object original, @Local(argsOnly = true) BlockAccessor accessor) {
+ var orig = (List<ItemStack>) original;
+ if (orig.isEmpty() && CustomFakeBlockProvider.hasCustomBlock(accessor))
+ return REPLACEABLE_TOOL;
+ return orig;
+ }
+}