Skip to content

Commit

Permalink
feat: make Trinkets and Curios integrations optional
Browse files Browse the repository at this point in the history
part of #318
  • Loading branch information
RubixDev committed Mar 25, 2024
1 parent 64c8723 commit df2af15
Show file tree
Hide file tree
Showing 38 changed files with 198 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package de.rubixdev.inventorio.client.configscreen
import de.rubixdev.inventorio.client.configscreen.PlayerSettingsScreen.addBoolEntry
import de.rubixdev.inventorio.client.configscreen.PlayerSettingsScreen.addEnumEntry
import de.rubixdev.inventorio.config.GlobalSettings
import de.rubixdev.inventorio.util.PlatformApi
import de.rubixdev.inventorio.util.ToolBeltMode
import me.shedaniel.clothconfig2.api.ConfigBuilder
import net.fabricmc.api.EnvType
Expand Down Expand Up @@ -33,6 +34,11 @@ object GlobalSettingsScreen {
addBoolEntry(category, entryBuilder, GlobalSettings.totemFromUtilityBelt, true, isNotLocal)
addBoolEntry(category, entryBuilder, GlobalSettings.allowSwappedHands, true, isNotLocal)
addBoolEntry(category, entryBuilder, GlobalSettings.allow2x2CraftingGrid, true, isNotLocal)
//#if FABRIC
addBoolEntry(category, entryBuilder, GlobalSettings.trinketsIntegration, true, isNotLocal) { PlatformApi.isModLoaded("trinkets") }
//#elseif FORGELIKE
addBoolEntry(category, entryBuilder, GlobalSettings.curiosIntegration, true, isNotLocal) { PlatformApi.isModLoaded("curios") }
//#endif

addEnumEntry(category, entryBuilder, GlobalSettings.toolBeltMode, true, isNotLocal, ToolBeltMode::class.java, ToolBeltMode.ENABLED)
addBoolEntry(category, entryBuilder, GlobalSettings.utilityBeltShortDefaultSize, true, isNotLocal)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import de.rubixdev.inventorio.util.SegmentedHotbar
import me.shedaniel.clothconfig2.api.ConfigBuilder
import me.shedaniel.clothconfig2.api.ConfigCategory
import me.shedaniel.clothconfig2.api.ConfigEntryBuilder
import me.shedaniel.clothconfig2.api.Requirement
import net.fabricmc.api.EnvType
import net.fabricmc.api.Environment
import net.minecraft.client.gui.screen.Screen
Expand Down Expand Up @@ -81,7 +82,15 @@ object PlayerSettingsScreen {
category.addEntry(builder.build())
}

fun addBoolEntry(category: ConfigCategory, entryBuilder: ConfigEntryBuilder, settingsEntry: SettingsEntryBoolean, requireRestart: Boolean, blocked: Boolean) {
@Suppress("UnstableApiUsage")
fun addBoolEntry(
category: ConfigCategory,
entryBuilder: ConfigEntryBuilder,
settingsEntry: SettingsEntryBoolean,
requireRestart: Boolean,
blocked: Boolean,
requirement: Requirement? = null,
) {
if (blocked) {
category.addEntry(
entryBuilder
Expand All @@ -102,6 +111,9 @@ object PlayerSettingsScreen {
)
.setDefaultValue(settingsEntry.defaultValue == true)
.setSaveConsumer { settingsEntry.value = it }
.apply {
requirement?.let { setRequirement(it) }
}
if (requireRestart) {
builder.requireRestart()
}
Expand Down
22 changes: 22 additions & 0 deletions src/main/kotlin/de/rubixdev/inventorio/config/GlobalSettings.kt
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,22 @@ object GlobalSettings : AbstractSettings() {
"inventorio.settings.global.2x2_crafting_grid.tooltip",
)

//#if FABRIC
@JvmField val trinketsIntegration = SettingsEntryBoolean(
true,
"TrinketsIntegration",
"inventorio.settings.global.trinkets_integration",
"inventorio.settings.global.trinkets_integration.tooltip",
)
//#elseif FORGELIKE
@JvmField val curiosIntegration = SettingsEntryBoolean(
true,
"CuriosIntegration",
"inventorio.settings.global.curios_integration",
"inventorio.settings.global.curios_integration.tooltip",
)
//#endif

@JvmField val toolBeltMode =
SettingsEntry(
ToolBeltMode.ENABLED,
Expand Down Expand Up @@ -73,6 +89,11 @@ object GlobalSettings : AbstractSettings() {
totemFromUtilityBelt,
allowSwappedHands,
allow2x2CraftingGrid,
//#if FABRIC
trinketsIntegration,
//#elseif FORGELIKE
curiosIntegration,
//#endif

toolBeltMode,
utilityBeltShortDefaultSize,
Expand All @@ -83,6 +104,7 @@ object GlobalSettings : AbstractSettings() {
load(File(".").resolve("config/inventorio_shared.json"))
}

@Suppress("unused") // used in non-common package
fun syncFromServer(newSettingsJson: JsonObject) {
if (GlobalSettings.anyChanges(newSettingsJson)) {
MinecraftClient.getInstance()?.setScreen(GlobalSettingsSyncPrompt.get(newSettingsJson))
Expand Down
15 changes: 15 additions & 0 deletions src/main/kotlin/de/rubixdev/inventorio/util/MixinTesters.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@ package de.rubixdev.inventorio.util
import de.rubixdev.inventorio.config.GlobalSettings
import me.fallenbreath.conditionalmixin.api.mixin.ConditionTester

@Suppress("unused")
class Never : ConditionTester {
override fun isSatisfied(mixinClassName: String) = false
}

class BowTester : ConditionTester {
override fun isSatisfied(mixinClassName: String) = GlobalSettings.infinityBowNeedsNoArrow.boolValue
}
Expand All @@ -14,3 +19,13 @@ class EnderChestTester : ConditionTester {
class TotemTester : ConditionTester {
override fun isSatisfied(mixinClassName: String) = GlobalSettings.totemFromUtilityBelt.boolValue
}

//#if FABRIC
//$$ class TrinketsTester : ConditionTester {
//$$ override fun isSatisfied(mixinClassName: String) = GlobalSettings.trinketsIntegration.boolValue
//$$ }
//#elseif FORGELIKE
//$$ class CuriosTester : ConditionTester {
//$$ override fun isSatisfied(mixinClassName: String) = GlobalSettings.curiosIntegration.boolValue
//$$ }
//#endif
6 changes: 6 additions & 0 deletions src/main/kotlin/de/rubixdev/inventorio/util/PlatformApi.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package de.rubixdev.inventorio.util

@Suppress("UNUSED_PARAMETER")
object PlatformApi {
fun isModLoaded(modId: String): Boolean = throw IllegalStateException()
}
12 changes: 12 additions & 0 deletions src/main/resources/assets/inventorio/lang/de_de.yml
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,18 @@ inventorio:
Some mods cause Player's 2x2 crafting grid to duplicate items.
If nothing else helps, turning it off could be an option.
trinkets_integration: Trinkets Integration
trinkets_integration.tooltip: |-
Füge die Slots von Trinkets zum Inventorio Bildschirm hinzu.
In Zukunft oder mit anderen Mods könnte dies zu Bugs führen.
Wenn das der Fall ist, sollte es helfen dies auszustellen.
curios_integration: Curios Integration
curios_integration.tooltip: |-
Füge die Slots von Curios zum Inventorio Bildschirm hinzu.
In Zukunft oder mit anderen Mods könnte dies zu Bugs führen.
Wenn das der Fall ist, sollte es helfen dies auszustellen.
utility_belt_short_default_size: Extra Utensiliengürtel Slots erfordern "Tiefe Taschen"
utility_belt_short_default_size.tooltip: |-
Standardmäßig erhöht die Verzauberung "Tiefe Taschen"
Expand Down
12 changes: 12 additions & 0 deletions src/main/resources/assets/inventorio/lang/en_us.yml
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,18 @@ inventorio:
Some mods cause Player's 2x2 crafting grid to duplicate items.
If nothing else helps, turning it off could be an option.
trinkets_integration: Trinkets Integration
trinkets_integration.tooltip: |-
Add the Trinket slots to Inventorio's inventory screen.
In the future or with some other mods this may cause bugs.
In that case, turning it off should help.
curios_integration: Curios Integration
curios_integration.tooltip: |-
Add the Curios slots to Inventorio's inventory screen.
In the future or with some other mods this may cause bugs.
In that case, turning it off should help.
utility_belt_short_default_size: Extra Utility Belt Slots Require Deep Pockets
utility_belt_short_default_size.tooltip: |-
By default, the Deep Pockets Enchantment increases
Expand Down
12 changes: 12 additions & 0 deletions src/main/resources/assets/inventorio/lang/fr_fr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,18 @@ inventorio:
des joueurs duplique des objets. Si rien d'autre ne fonctionne,
désactiver la grille de fabrication d'inventaire pourrait être une option.
# trinkets_integration: Trinkets Integration
# trinkets_integration.tooltip: |-
# Add the Trinket slots to Inventorio's inventory screen.
# In the future or with some other mods this may cause bugs.
# In that case, turning it off should help.
#
# curios_integration: Curios Integration
# curios_integration.tooltip: |-
# Add the Curios slots to Inventorio's inventory screen.
# In the future or with some other mods this may cause bugs.
# In that case, turning it off should help.

utility_belt_short_default_size: Des cases supplémentaires de barre d'action secondaire requièrent Grandes Poches
utility_belt_short_default_size.tooltip: |-
Par défaut, l'enchantement grandes poches augmente
Expand Down
12 changes: 12 additions & 0 deletions src/main/resources/assets/inventorio/lang/pt_br.yml
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,18 @@ inventorio:
# Some mods cause Player's 2x2 crafting grid to duplicate items.
# If nothing else helps, turning it off could be an option.

# trinkets_integration: Trinkets Integration
# trinkets_integration.tooltip: |-
# Add the Trinket slots to Inventorio's inventory screen.
# In the future or with some other mods this may cause bugs.
# In that case, turning it off should help.
#
# curios_integration: Curios Integration
# curios_integration.tooltip: |-
# Add the Curios slots to Inventorio's inventory screen.
# In the future or with some other mods this may cause bugs.
# In that case, turning it off should help.

utility_belt_short_default_size: Espaços adicionais no cinto de utilidades requerem Bolsos fundos
utility_belt_short_default_size.tooltip: |-
Por padrão, o encantamento Bolsos fundos aumenta
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.llamalad7.mixinextras.sugar.Local;
import de.rubixdev.inventorio.integration.curios.ICuriosContainer;
import de.rubixdev.inventorio.util.CuriosTester;
import me.fallenbreath.conditionalmixin.api.annotation.Condition;
import me.fallenbreath.conditionalmixin.api.annotation.Restriction;
import net.minecraft.screen.ScreenHandler;
Expand All @@ -17,7 +18,7 @@

import java.util.function.Supplier;

@Restriction(require = @Condition("curios"))
@Restriction(require = { @Condition("curios"), @Condition(type = Condition.Type.TESTER, tester = CuriosTester.class) })
@Mixin(CPacketScroll.class)
public abstract class CPacketScrollMixin {
@Shadow
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.rubixdev.inventorio.mixin.forge.curios;

import de.rubixdev.inventorio.integration.curios.ICuriosContainer;
import de.rubixdev.inventorio.util.CuriosTester;
import me.fallenbreath.conditionalmixin.api.annotation.Condition;
import me.fallenbreath.conditionalmixin.api.annotation.Restriction;
import net.minecraft.entity.player.PlayerEntity;
Expand All @@ -15,7 +16,7 @@
import top.theillusivec4.curios.api.type.capability.ICuriosItemHandler;
import top.theillusivec4.curios.common.inventory.CurioStacksHandler;

@Restriction(require = @Condition("curios"))
@Restriction(require = { @Condition("curios"), @Condition(type = Condition.Type.TESTER, tester = CuriosTester.class) })
@Mixin(CurioStacksHandler.class)
public class CurioStacksHandlerMixin {
@Shadow
Expand All @@ -31,7 +32,7 @@ public class CurioStacksHandlerMixin {
target = "Lnet/minecraftforge/eventbus/api/IEventBus;post(Lnet/minecraftforge/eventbus/api/Event;)Z"
)
),
remap = false
remap = false
)
private void inventorioResetSlots(CallbackInfo ci) {
if (
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.rubixdev.inventorio.mixin.forge.curios;

import de.rubixdev.inventorio.integration.curios.ICuriosContainer;
import de.rubixdev.inventorio.util.CuriosTester;
import me.fallenbreath.conditionalmixin.api.annotation.Condition;
import me.fallenbreath.conditionalmixin.api.annotation.Restriction;
import net.minecraft.server.network.ServerPlayerEntity;
Expand All @@ -13,7 +14,7 @@
import top.theillusivec4.curios.api.type.capability.ICuriosItemHandler;
import top.theillusivec4.curios.common.event.CuriosEventHandler;

@Restriction(require = @Condition("curios"))
@Restriction(require = { @Condition("curios"), @Condition(type = Condition.Type.TESTER, tester = CuriosTester.class) })
@Mixin(CuriosEventHandler.class)
public class CuriosEventHandlerMixin {
@Inject(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.llamalad7.mixinextras.injector.ModifyReturnValue;
import de.rubixdev.inventorio.integration.curios.ICuriosScreen;
import de.rubixdev.inventorio.util.CuriosTester;
import me.fallenbreath.conditionalmixin.api.annotation.Condition;
import me.fallenbreath.conditionalmixin.api.annotation.Restriction;
import net.minecraft.client.gui.DrawContext;
Expand All @@ -15,7 +16,7 @@
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import top.theillusivec4.curios.common.inventory.CurioSlot;

@Restriction(require = @Condition("curios"))
@Restriction(require = { @Condition("curios"), @Condition(type = Condition.Type.TESTER, tester = CuriosTester.class) })
@Mixin(HandledScreen.class)
public class HandledScreenMixin extends Screen {
protected HandledScreenMixin(Text title) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import de.rubixdev.inventorio.integration.curios.ICuriosContainer;
import de.rubixdev.inventorio.integration.curios.InventorioScreenHandlerMixinHelper;
import de.rubixdev.inventorio.player.InventorioScreenHandler;
import de.rubixdev.inventorio.util.CuriosTester;
import me.fallenbreath.conditionalmixin.api.annotation.Condition;
import me.fallenbreath.conditionalmixin.api.annotation.Restriction;
import net.minecraft.entity.player.PlayerInventory;
Expand All @@ -22,7 +23,7 @@
@SuppressWarnings("UnresolvedMixinReference") // the Minecraft Dev plugin
// doesn't seem to like Kotlin
// target classes
@Restriction(require = @Condition("curios"))
@Restriction(require = { @Condition("curios"), @Condition(type = Condition.Type.TESTER, tester = CuriosTester.class) })
@Mixin(InventorioScreenHandler.class)
public abstract class InventorioScreenHandlerMixin extends AbstractRecipeScreenHandler<CraftingInventory>
implements ICuriosContainer {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import de.rubixdev.inventorio.integration.curios.ICuriosScreen;
import de.rubixdev.inventorio.integration.curios.InventorioScreenMixinHelper;
import de.rubixdev.inventorio.player.InventorioScreenHandler;
import de.rubixdev.inventorio.util.CuriosTester;
import me.fallenbreath.conditionalmixin.api.annotation.Condition;
import me.fallenbreath.conditionalmixin.api.annotation.Restriction;
import net.minecraft.client.gui.DrawContext;
Expand All @@ -24,7 +25,7 @@
@SuppressWarnings("UnresolvedMixinReference") // the Minecraft Dev plugin
// doesn't seem to like Kotlin
// target classes
@Restriction(require = @Condition("curios"))
@Restriction(require = { @Condition("curios"), @Condition(type = Condition.Type.TESTER, tester = CuriosTester.class) })
@Mixin(InventorioScreen.class)
public abstract class InventorioScreenMixin extends AbstractInventoryScreen<InventorioScreenHandler>
implements ICuriosScreen {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.llamalad7.mixinextras.sugar.Local;
import de.rubixdev.inventorio.integration.curios.ICuriosContainer;
import de.rubixdev.inventorio.integration.curios.ICuriosScreen;
import de.rubixdev.inventorio.util.CuriosTester;
import me.fallenbreath.conditionalmixin.api.annotation.Condition;
import me.fallenbreath.conditionalmixin.api.annotation.Restriction;
import net.minecraft.client.gui.screen.Screen;
Expand All @@ -16,7 +17,7 @@
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import top.theillusivec4.curios.common.network.server.SPacketScroll;

@Restriction(require = @Condition("curios"))
@Restriction(require = { @Condition("curios"), @Condition(type = Condition.Type.TESTER, tester = CuriosTester.class) })
@Mixin(SPacketScroll.class)
public abstract class SPacketScrollMixin {
@Shadow
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.rubixdev.inventorio.mixin.forge.curios;

import de.rubixdev.inventorio.integration.curios.ICuriosContainer;
import de.rubixdev.inventorio.util.CuriosTester;
import me.fallenbreath.conditionalmixin.api.annotation.Condition;
import me.fallenbreath.conditionalmixin.api.annotation.Restriction;
import net.minecraft.client.network.ClientPlayerEntity;
Expand All @@ -14,7 +15,7 @@
import top.theillusivec4.curios.api.type.capability.ICuriosItemHandler;
import top.theillusivec4.curios.common.network.server.sync.SPacketSyncCurios;

@Restriction(require = @Condition("curios"))
@Restriction(require = { @Condition("curios"), @Condition(type = Condition.Type.TESTER, tester = CuriosTester.class) })
@Mixin(SPacketSyncCurios.class)
public class SPacketSyncCuriosMixin {
@Inject(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.rubixdev.inventorio.mixin.forge.curios;

import de.rubixdev.inventorio.integration.curios.ICuriosContainer;
import de.rubixdev.inventorio.util.CuriosTester;
import me.fallenbreath.conditionalmixin.api.annotation.Condition;
import me.fallenbreath.conditionalmixin.api.annotation.Restriction;
import net.minecraft.client.network.ClientPlayerEntity;
Expand All @@ -15,7 +16,7 @@
import top.theillusivec4.curios.api.type.capability.ICuriosItemHandler;
import top.theillusivec4.curios.common.network.server.sync.SPacketSyncModifiers;

@Restriction(require = @Condition("curios"))
@Restriction(require = { @Condition("curios"), @Condition(type = Condition.Type.TESTER, tester = CuriosTester.class) })
@Mixin(SPacketSyncModifiers.class)
public class SPacketSyncModifiersMixin {
@Inject(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,16 @@ import top.theillusivec4.curios.common.network.client.CPacketScroll
import top.theillusivec4.curios.common.network.server.SPacketScroll

fun <MSG> sendToServer(packet: MSG) {
NetworkHandler.INSTANCE.send(
PacketDistributor.SERVER.noArg(),
packet,
)
NetworkHandler.INSTANCE.send(
PacketDistributor.SERVER.noArg(),
packet,
)
}
fun <MSG> sendToPlayer(player: ServerPlayerEntity, packet: MSG) {
NetworkHandler.INSTANCE.send(
PacketDistributor.PLAYER.with { player },
packet,
)
NetworkHandler.INSTANCE.send(
PacketDistributor.PLAYER.with { player },
packet,
)
}

/**
Expand Down
Loading

0 comments on commit df2af15

Please sign in to comment.