From b9d46ba51e8c364febb56b841e2900b8f396ea23 Mon Sep 17 00:00:00 2001 From: unilock Date: Thu, 11 Dec 2025 03:07:54 -0500 Subject: [PATCH 1/2] Make integration packs not explode as violently on Forge --- .../compat/SpectrumIntegrationPacks.java | 37 ++++++++-------- .../spectrum/compat/create/CreateCompat.java | 20 +++++---- .../spectrum/compat/malum/MalumCompat.java | 42 ++++++++++++------- 3 files changed, 58 insertions(+), 41 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/compat/SpectrumIntegrationPacks.java b/src/main/java/de/dafuqs/spectrum/compat/SpectrumIntegrationPacks.java index 08474447b9..ba86f6e61d 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/SpectrumIntegrationPacks.java +++ b/src/main/java/de/dafuqs/spectrum/compat/SpectrumIntegrationPacks.java @@ -35,18 +35,19 @@ protected static void registerIntegrationPack(String modId, Supplier new AE2Compat()); - registerIntegrationPack(GOBBER_ID, () -> new GobberCompat()); - registerIntegrationPack(ALLOY_FORGERY_ID, () -> new AlloyForgeryCompat()); - registerIntegrationPack(BOTANIA_ID, () -> new BotaniaCompat()); - registerIntegrationPack(NEEPMEAT_ID, () -> new NEEPMeatCompat()); - registerIntegrationPack(FARMERSDELIGHT_ID, () -> new FDCompat()); - registerIntegrationPack(MALUM_ID, () -> new MalumCompat()); + registerIntegrationPack(AE2_ID, () -> new AE2Compat()); + registerIntegrationPack(ALLOY_FORGERY_ID, () -> new AlloyForgeryCompat()); + registerIntegrationPack(BOTANIA_ID, () -> new BotaniaCompat()); + registerIntegrationPack(CREATE_ID, () -> new CreateCompat()); + registerIntegrationPack(FARMERSDELIGHT_ID, () -> new FDCompat()); + registerIntegrationPack(GOBBER_ID, () -> new GobberCompat()); + registerIntegrationPack(MALUM_ID, () -> new MalumCompat()); + registerIntegrationPack(NEEPMEAT_ID, () -> new NEEPMeatCompat()); + + if (!CONNECTOR_LOADED) { + // Traveler's Backpack for Forge crashes due to Fabric lacking Fluid#getFluidType (a Forge method) + // This cannot be reasonably worked around AFAIK + // ~unilock, 2025 registerIntegrationPack(TRAVELERS_BACKPACK_ID, () -> new TravelersBackpackCompat()); - registerIntegrationPack(CREATE_ID, () -> new CreateCompat()); } for (ModIntegrationPack container : INTEGRATION_PACKS.values()) { diff --git a/src/main/java/de/dafuqs/spectrum/compat/create/CreateCompat.java b/src/main/java/de/dafuqs/spectrum/compat/create/CreateCompat.java index 960e09f56b..b1ad327d3b 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/create/CreateCompat.java +++ b/src/main/java/de/dafuqs/spectrum/compat/create/CreateCompat.java @@ -52,15 +52,19 @@ public void register() { entries.add(PURE_ZINC_BLOCK); }); - PipeCollisionEvent.FLOW.register(event -> { - final BlockState result = handleBidirectionalCollision(event.getLevel(), event.getFirstFluid(), event.getSecondFluid()); - if (result != null) event.setState(result); - }); + if (SpectrumIntegrationPacks.CONNECTOR_LOADED) { + // TODO + } else { + PipeCollisionEvent.FLOW.register(event -> { + final BlockState result = handleBidirectionalCollision(event.getLevel(), event.getFirstFluid(), event.getSecondFluid()); + if (result != null) event.setState(result); + }); - PipeCollisionEvent.SPILL.register(event -> { - final BlockState result = handleBidirectionalCollision(event.getLevel(), event.getPipeFluid(), event.getWorldFluid()); - if (result != null) event.setState(result); - }); + PipeCollisionEvent.SPILL.register(event -> { + final BlockState result = handleBidirectionalCollision(event.getLevel(), event.getPipeFluid(), event.getWorldFluid()); + if (result != null) event.setState(result); + }); + } } diff --git a/src/main/java/de/dafuqs/spectrum/compat/malum/MalumCompat.java b/src/main/java/de/dafuqs/spectrum/compat/malum/MalumCompat.java index 131a77d43e..3075b928f4 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/malum/MalumCompat.java +++ b/src/main/java/de/dafuqs/spectrum/compat/malum/MalumCompat.java @@ -1,33 +1,43 @@ package de.dafuqs.spectrum.compat.malum; -import com.sammy.malum.registry.common.item.*; import de.dafuqs.spectrum.api.color.*; import de.dafuqs.spectrum.compat.*; import net.fabricmc.api.*; +import net.fabricmc.fabric.api.event.lifecycle.v1.*; +import net.minecraft.item.*; +import net.minecraft.registry.*; import net.minecraft.util.*; public class MalumCompat extends SpectrumIntegrationPacks.ModIntegrationPack { @Override public void register() { - ItemColors.ITEM_COLORS.registerColorMapping(ItemRegistry.MNEMONIC_FRAGMENT.get(), DyeColor.PURPLE); - ItemColors.ITEM_COLORS.registerColorMapping(ItemRegistry.NULL_SLATE.get(), DyeColor.BLACK); - ItemColors.ITEM_COLORS.registerColorMapping(ItemRegistry.EARTHEN_SPIRIT.get(), DyeColor.BROWN); - ItemColors.ITEM_COLORS.registerColorMapping(ItemRegistry.INFERNAL_SPIRIT.get(), DyeColor.ORANGE); - ItemColors.ITEM_COLORS.registerColorMapping(ItemRegistry.AERIAL_SPIRIT.get(), DyeColor.CYAN); - ItemColors.ITEM_COLORS.registerColorMapping(ItemRegistry.AQUEOUS_SPIRIT.get(), DyeColor.LIGHT_BLUE); - ItemColors.ITEM_COLORS.registerColorMapping(ItemRegistry.ARCANE_SPIRIT.get(), DyeColor.LIGHT_GRAY); - ItemColors.ITEM_COLORS.registerColorMapping(ItemRegistry.SACRED_SPIRIT.get(), DyeColor.WHITE); - ItemColors.ITEM_COLORS.registerColorMapping(ItemRegistry.ELDRITCH_SPIRIT.get(), DyeColor.GRAY); - ItemColors.ITEM_COLORS.registerColorMapping(ItemRegistry.WICKED_SPIRIT.get(), DyeColor.BLACK); - ItemColors.ITEM_COLORS.registerColorMapping(ItemRegistry.BLAZING_QUARTZ.get(), DyeColor.ORANGE); - ItemColors.ITEM_COLORS.registerColorMapping(ItemRegistry.BLIGHTED_GUNK.get(), DyeColor.LIGHT_GRAY); - ItemColors.ITEM_COLORS.registerColorMapping(ItemRegistry.MASS_OF_BLIGHTED_GUNK.get(), DyeColor.LIGHT_GRAY); - ItemColors.ITEM_COLORS.registerColorMapping(ItemRegistry.CURSED_SAPBALL.get(), DyeColor.BROWN); - ItemColors.ITEM_COLORS.registerColorMapping(ItemRegistry.PROCESSED_SOULSTONE.get(), DyeColor.PURPLE); + // registering it late, since Malum might not have been initialized yet + ServerLifecycleEvents.SERVER_STARTED.register(minecraftServer -> { + ItemColors.ITEM_COLORS.registerColorMapping(getItemFromRegistry("mnemonic_fragment"), DyeColor.PURPLE); + ItemColors.ITEM_COLORS.registerColorMapping(getItemFromRegistry("null_slate"), DyeColor.BLACK); + ItemColors.ITEM_COLORS.registerColorMapping(getItemFromRegistry("earthen_spirit"), DyeColor.BROWN); + ItemColors.ITEM_COLORS.registerColorMapping(getItemFromRegistry("infernal_spirit"), DyeColor.ORANGE); + ItemColors.ITEM_COLORS.registerColorMapping(getItemFromRegistry("aerial_spirit"), DyeColor.CYAN); + ItemColors.ITEM_COLORS.registerColorMapping(getItemFromRegistry("aqueous_spirit"), DyeColor.LIGHT_BLUE); + ItemColors.ITEM_COLORS.registerColorMapping(getItemFromRegistry("arcane_spirit"), DyeColor.LIGHT_GRAY); + ItemColors.ITEM_COLORS.registerColorMapping(getItemFromRegistry("sacred_spirit"), DyeColor.WHITE); + ItemColors.ITEM_COLORS.registerColorMapping(getItemFromRegistry("eldritch_spirit"), DyeColor.GRAY); + ItemColors.ITEM_COLORS.registerColorMapping(getItemFromRegistry("wicked_spirit"), DyeColor.BLACK); + ItemColors.ITEM_COLORS.registerColorMapping(getItemFromRegistry("blazing_quartz"), DyeColor.ORANGE); + ItemColors.ITEM_COLORS.registerColorMapping(getItemFromRegistry("blighted_gunk"), DyeColor.LIGHT_GRAY); + ItemColors.ITEM_COLORS.registerColorMapping(getItemFromRegistry("mass_of_blighted_gunk"), DyeColor.LIGHT_GRAY); + ItemColors.ITEM_COLORS.registerColorMapping(getItemFromRegistry("cursed_sapball"), DyeColor.BROWN); + ItemColors.ITEM_COLORS.registerColorMapping(getItemFromRegistry("processed_soulstone"), DyeColor.PURPLE); + }); } + + // Workaround to prevent loading classes from Porting Lib on Forge + private static Item getItemFromRegistry(String path) { + return Registries.ITEM.get(Identifier.of("malum", path)); + } @Environment(EnvType.CLIENT) @Override From 33f2bcadb8c9cc4ea9e41db85849e77fc8d97195 Mon Sep 17 00:00:00 2001 From: unilock Date: Thu, 11 Dec 2025 03:10:53 -0500 Subject: [PATCH 2/2] Replace usage of `FabricLoader.getInstance().isModLoaded("connectormod")` with static field reference --- .../java/de/dafuqs/spectrum/compat/emi/SpectrumEmiPlugin.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/dafuqs/spectrum/compat/emi/SpectrumEmiPlugin.java b/src/main/java/de/dafuqs/spectrum/compat/emi/SpectrumEmiPlugin.java index 3d6dc3763d..3f2e050082 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/emi/SpectrumEmiPlugin.java +++ b/src/main/java/de/dafuqs/spectrum/compat/emi/SpectrumEmiPlugin.java @@ -4,6 +4,7 @@ import de.dafuqs.spectrum.api.block.*; import de.dafuqs.spectrum.blocks.fluid.*; import de.dafuqs.spectrum.blocks.idols.*; +import de.dafuqs.spectrum.compat.*; import de.dafuqs.spectrum.compat.emi.handlers.*; import de.dafuqs.spectrum.compat.emi.recipes.*; import de.dafuqs.spectrum.data_loaders.*; @@ -184,7 +185,7 @@ public void registerRecipes(EmiRegistry registry) { }); //WorldInteractionRecipe - long amount = FabricLoader.getInstance().isModLoaded("connectormod") ? 1_000 : 81_000; + long amount = SpectrumIntegrationPacks.CONNECTOR_LOADED ? 1_000 : 81_000; EmiStack water = EmiStack.of(Fluids.WATER, amount); EmiStack lava = EmiStack.of(Fluids.LAVA, amount); EmiStack dragonrot = EmiStack.of(SpectrumFluids.DRAGONROT, amount);