feat: simple automation for custom arch. cutter machine

This commit is contained in:
Andrew 2026-05-09 10:09:01 +07:00
parent 69b8c79e57
commit 41deab1fea
2 changed files with 43 additions and 0 deletions

View file

@ -9,6 +9,8 @@ import net.neoforged.fml.common.Mod
import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent
import net.neoforged.fml.event.lifecycle.FMLDedicatedServerSetupEvent
import net.neoforged.neoforge.capabilities.Capabilities
import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent
import net.neoforged.neoforge.client.event.RegisterMenuScreensEvent
import net.neoforged.neoforge.data.event.GatherDataEvent
import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent
@ -21,6 +23,7 @@ import thedarkcolour.kotlinforforge.neoforge.forge.MOD_BUS
import thedarkcolour.kotlinforforge.neoforge.forge.runForDist
import xyz.nuark.mcmod.mclschcannoncompat.block.ModBlockEntityTypes
import xyz.nuark.mcmod.mclschcannoncompat.block.ModBlocks
import xyz.nuark.mcmod.mclschcannoncompat.block.entity.OrnamentFabricatorBlockEntity
import xyz.nuark.mcmod.mclschcannoncompat.comands.ModCommands
import xyz.nuark.mcmod.mclschcannoncompat.datagen.ModItemModelProvider
import xyz.nuark.mcmod.mclschcannoncompat.datagen.ModLanguageProviders
@ -93,6 +96,16 @@ object Mclschcannoncompat {
@Suppress("unused") val registrar = event.registrar(ID).versioned(modVersion)
}
@SubscribeEvent
fun onRegisterCapabilities(event: RegisterCapabilitiesEvent) {
event.registerBlockEntity(
Capabilities.ItemHandler.BLOCK,
ModBlockEntityTypes.ORNAMENT_FABRICATOR.get()
) { be, side ->
(be as OrnamentFabricatorBlockEntity).getAutomationHandler(side)
}
}
@SubscribeEvent
fun gatherData(event: GatherDataEvent) {
val existingFileHelper = event.existingFileHelper

View file

@ -20,8 +20,10 @@ import net.minecraft.world.inventory.ContainerData
import net.minecraft.world.item.BlockItem
import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.component.BlockItemStateProperties
import net.minecraft.core.Direction
import net.minecraft.world.level.block.entity.BlockEntity
import net.minecraft.world.level.block.state.BlockState
import net.neoforged.neoforge.items.IItemHandler
import net.neoforged.neoforge.items.ItemStackHandler
import xyz.nuark.mcmod.mclschcannoncompat.block.ModBlockEntityTypes
import xyz.nuark.mcmod.mclschcannoncompat.menu.OrnamentFabricatorMenu
@ -291,6 +293,34 @@ class OrnamentFabricatorBlockEntity(
level?.let { Containers.dropContents(it, blockPos, inventory) }
}
fun getAutomationHandler(side: Direction?): IItemHandler {
return object : IItemHandler {
override fun getSlots(): Int = itemHandler.slots
override fun getStackInSlot(slot: Int): ItemStack = itemHandler.getStackInSlot(slot)
override fun insertItem(slot: Int, stack: ItemStack, simulate: Boolean): ItemStack {
if (side != null && side != Direction.UP) return stack
if (slot != SLOT_INPUT_A && slot != SLOT_INPUT_B) return stack
return itemHandler.insertItem(slot, stack, simulate)
}
override fun extractItem(slot: Int, amount: Int, simulate: Boolean): ItemStack {
if (side != null && side != Direction.DOWN) return ItemStack.EMPTY
if (slot != SLOT_OUTPUT) return ItemStack.EMPTY
return itemHandler.extractItem(slot, amount, simulate)
}
override fun getSlotLimit(slot: Int): Int = itemHandler.getSlotLimit(slot)
override fun isItemValid(slot: Int, stack: ItemStack): Boolean {
if (side != null && side != Direction.UP) return false
if (slot != SLOT_INPUT_A && slot != SLOT_INPUT_B) return false
return itemHandler.isItemValid(slot, stack)
}
}
}
companion object {
const val SLOT_INPUT_A = 0
const val SLOT_INPUT_B = 1