Skip to content

Commit

Permalink
Add back MoreRed support
Browse files Browse the repository at this point in the history
I removed this in fc834cd, way back in
late 2024. Looks like it's been updating in the meantime and I hadn't
noticed, so add it back.

I've simplified the code a little bit, to make use of our NeoForge's new
capability system, but otherwise it's almost exactly the same :D.
  • Loading branch information
SquidDev committed Feb 12, 2025
1 parent 1e25fa9 commit 1278246
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ repositories {
includeGroup("cc.tweaked")
// Things we mirror
includeGroup("com.simibubi.create")
includeGroup("commoble.morered")
includeGroup("net.commoble.morered")
includeGroup("dev.architectury")
includeGroup("dev.emi")
includeGroup("maven.modrinth")
Expand Down
4 changes: 2 additions & 2 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ iris-fabric = "1.8.0-beta.3+1.21-fabric"
iris-forge = "1.8.0-beta.3+1.21-neoforge"
jei = "19.8.2.99"
modmenu = "11.0.0-rc.4"
moreRed = "4.0.0.4"
moreRed = "6.0.0.3"
rei = "16.0.729"
sodium-fabric = "mc1.21-0.6.0-beta.1-fabric"
sodium-forge = "mc1.21-0.6.0-beta.1-neoforge"
Expand Down Expand Up @@ -119,7 +119,7 @@ jei-forge = { module = "mezz.jei:jei-1.21-neoforge", version.ref = "jei" }
mixin = { module = "org.spongepowered:mixin", version.ref = "mixin" }
mixinExtra = { module = "io.github.llamalad7:mixinextras-common", version.ref = "mixinExtra" }
modmenu = { module = "com.terraformersmc:modmenu", version.ref = "modmenu" }
moreRed = { module = "commoble.morered:morered-1.20.1", version.ref = "moreRed" }
moreRed = { module = "net.commoble.morered:morered-1.21.1", version.ref = "moreRed" }
rei-api = { module = "me.shedaniel:RoughlyEnoughItems-api", version.ref = "rei" }
rei-builtin = { module = "me.shedaniel:RoughlyEnoughItems-default-plugin", version.ref = "rei" }
rei-fabric = { module = "me.shedaniel:RoughlyEnoughItems-fabric", version.ref = "rei" }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import dan200.computercraft.shared.config.ConfigSpec;
import dan200.computercraft.shared.details.FluidData;
import dan200.computercraft.shared.integration.CreateIntegration;
import dan200.computercraft.shared.integration.MoreRedIntegration;
import dan200.computercraft.shared.network.NetworkMessage;
import dan200.computercraft.shared.network.NetworkMessages;
import dan200.computercraft.shared.network.client.ClientNetworkContext;
Expand Down Expand Up @@ -70,6 +71,8 @@ public ComputerCraft(IEventBus eventBus) {
var container = ModLoadingContext.get().getActiveContainer();
container.registerConfig(ModConfig.Type.SERVER, ((ForgeConfigFile) ConfigSpec.serverSpec).spec());
container.registerConfig(ModConfig.Type.CLIENT, ((ForgeConfigFile) ConfigSpec.clientSpec).spec());

if (ModList.get().isLoaded(MoreRedIntegration.MOD_ID)) MoreRedIntegration.setup(eventBus);
}

private static void withEventBus(IEventBus eventBus, Runnable task) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
// SPDX-FileCopyrightText: 2021 The CC: Tweaked Developers
//
// SPDX-License-Identifier: MPL-2.0

package dan200.computercraft.shared.integration;

import commoble.morered.api.MoreRedAPI;
import dan200.computercraft.api.ComputerCraftAPI;
import dan200.computercraft.shared.common.IBundledRedstoneBlock;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.world.level.Level;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent;

public final class MoreRedIntegration {
public static final String MOD_ID = "morered";

private static void onRegisterCapabilities(RegisterCapabilitiesEvent event) {
for (var block : BuiltInRegistries.BLOCK) {
if (!(block instanceof IBundledRedstoneBlock bundledBlock)) continue;
event.registerBlock(
MoreRedAPI.CHANNELED_POWER_CAPABILITY,
(level, pos, state, blockEntity, context) -> (level2, wirePos, wireState, wireFace, channel) -> {
var outputLevel = bundledBlock.getBundledRedstoneOutput(level2, pos, context);
return (outputLevel & (1 << channel)) != 0 ? 31 : 0;
},
block
);
}
}

public static void setup(IEventBus bus) {
bus.addListener(MoreRedIntegration::onRegisterCapabilities);
ComputerCraftAPI.registerBundledRedstoneProvider(MoreRedIntegration::getBundledPower);
}

private static int getBundledPower(Level world, BlockPos pos, Direction side) {
var blockState = world.getBlockState(pos);

// Skip ones already handled by CC. We can do this more efficiently.
if (blockState.getBlock() instanceof IBundledRedstoneBlock) return -1;

var power = world.getCapability(MoreRedAPI.CHANNELED_POWER_CAPABILITY, pos, blockState, null, side);
if (power == null) return -1;

var mask = 0;
for (var i = 0; i < 16; i++) {
mask |= power.getPowerOnChannel(world, pos, blockState, side, i) > 0 ? (1 << i) : 0;
}
return mask;
}
}

0 comments on commit 1278246

Please sign in to comment.