From ffa6eadc26e86fdec92d68445f63bea183eb0aad Mon Sep 17 00:00:00 2001 From: Jonathan Coates Date: Sun, 16 Mar 2025 16:37:29 +0000 Subject: [PATCH] Register our BEs as entities Fixes #2141. Hah, I wrote some tests for this in b03546a158b81a2e69ec636d0ba437f1dd73ad12, but they pass because hoppers still support vanilla inventories, but turtles don't. Wish NeoForge registered a fallback for any inventory, like Fabric does, but there we go. --- .../dan200/computercraft/ComputerCraft.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/projects/forge/src/main/java/dan200/computercraft/ComputerCraft.java b/projects/forge/src/main/java/dan200/computercraft/ComputerCraft.java index ca82852c0..c60494589 100644 --- a/projects/forge/src/main/java/dan200/computercraft/ComputerCraft.java +++ b/projects/forge/src/main/java/dan200/computercraft/ComputerCraft.java @@ -54,6 +54,8 @@ import net.neoforged.neoforge.capabilities.Capabilities; import net.neoforged.neoforge.capabilities.ItemCapability; import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent; import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent; +import net.neoforged.neoforge.items.wrapper.InvWrapper; +import net.neoforged.neoforge.items.wrapper.SidedInvWrapper; import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent; import net.neoforged.neoforge.network.registration.PayloadRegistrar; import net.neoforged.neoforge.registries.DataPackRegistryEvent; @@ -62,6 +64,7 @@ import net.neoforged.neoforge.registries.RegistryBuilder; import org.jspecify.annotations.Nullable; import java.nio.file.Path; +import java.util.List; import java.util.function.BiFunction; @Mod(ComputerCraftAPI.MOD_ID) @@ -151,6 +154,21 @@ public final class ComputerCraft { var media = new ItemComponentImpl<>(event, MediaCapability.get()); ModRegistry.registerMedia(media); media.registerFallback((stack, ctx) -> MediaProviders.get(stack)); + + // Register inventories for our block entities. + var unsidedContainers = List.of( + ModRegistry.BlockEntities.TURTLE_NORMAL, + ModRegistry.BlockEntities.TURTLE_ADVANCED, + ModRegistry.BlockEntities.DISK_DRIVE + ); + for (var inv : unsidedContainers) { + event.registerBlockEntity(Capabilities.ItemHandler.BLOCK, inv.get(), (be, side) -> new InvWrapper(be)); + } + + event.registerBlockEntity( + Capabilities.ItemHandler.BLOCK, ModRegistry.BlockEntities.PRINTER.get(), + (be, side) -> side == null ? new InvWrapper(be) : new SidedInvWrapper(be, side) + ); } private record BlockComponentImpl(