diff --git a/plugin/rei/src/main/kotlin/net/shadowfacts/phycon/plugin/rei/PhyConPlugin.kt b/plugin/rei/src/main/kotlin/net/shadowfacts/phycon/plugin/rei/PhyConPluginClient.kt similarity index 94% rename from plugin/rei/src/main/kotlin/net/shadowfacts/phycon/plugin/rei/PhyConPlugin.kt rename to plugin/rei/src/main/kotlin/net/shadowfacts/phycon/plugin/rei/PhyConPluginClient.kt index d5cbaa9..956951b 100644 --- a/plugin/rei/src/main/kotlin/net/shadowfacts/phycon/plugin/rei/PhyConPlugin.kt +++ b/plugin/rei/src/main/kotlin/net/shadowfacts/phycon/plugin/rei/PhyConPluginClient.kt @@ -11,7 +11,7 @@ import net.shadowfacts.phycon.block.terminal.AbstractTerminalScreen /** * @author shadowfacts */ -object PhyConPlugin: ClientModInitializer, REIClientPlugin { +object PhyConPluginClient: ClientModInitializer, REIClientPlugin { const val MODID = "phycon_rei" override fun onInitializeClient() { diff --git a/plugin/rei/src/main/kotlin/net/shadowfacts/phycon/plugin/rei/PhyConPluginCommon.kt b/plugin/rei/src/main/kotlin/net/shadowfacts/phycon/plugin/rei/PhyConPluginCommon.kt index 5e7fe8b..86c1768 100644 --- a/plugin/rei/src/main/kotlin/net/shadowfacts/phycon/plugin/rei/PhyConPluginCommon.kt +++ b/plugin/rei/src/main/kotlin/net/shadowfacts/phycon/plugin/rei/PhyConPluginCommon.kt @@ -1,45 +1,56 @@ package net.shadowfacts.phycon.plugin.rei -import me.shedaniel.rei.api.common.display.Display -import me.shedaniel.rei.api.common.transfer.info.MenuInfo -import net.fabricmc.api.ModInitializer -import net.minecraft.util.Identifier +import me.shedaniel.rei.api.common.category.CategoryIdentifier +import me.shedaniel.rei.api.common.display.SimpleGridMenuDisplay +import me.shedaniel.rei.api.common.plugins.REIServerPlugin +import me.shedaniel.rei.api.common.transfer.info.MenuInfoContext +import me.shedaniel.rei.api.common.transfer.info.MenuInfoRegistry +import me.shedaniel.rei.api.common.transfer.info.simple.SimpleGridMenuInfo +import me.shedaniel.rei.api.common.transfer.info.simple.SimpleMenuInfoProvider +import me.shedaniel.rei.api.common.transfer.info.stack.SlotAccessor import net.shadowfacts.phycon.block.terminal.CraftingTerminalScreenHandler +import java.util.stream.IntStream /** * @author shadowfacts */ -object PhyConPluginCommon: ModInitializer { +object PhyConPluginCommon: REIServerPlugin { - override fun onInitialize() { -// ContainerInfoHandler.registerContainerInfo(Identifier("minecraft", "plugins/crafting"), TerminalInfo) + override fun registerMenuInfo(registry: MenuInfoRegistry) { + registry.register(CategoryIdentifier.of("minecraft", "plugins/crafting"), CraftingTerminalScreenHandler::class.java, SimpleMenuInfoProvider.of(::TerminalInfo)) } -// object TerminalInfo: ContainerInfo { -// override fun getContainerClass() = CraftingTerminalScreenHandler::class.java -// -// override fun getCraftingResultSlotIndex(container: CraftingTerminalScreenHandler): Int { -// return container.resultSlot.id -// } -// -// override fun getCraftingWidth(container: CraftingTerminalScreenHandler): Int { -// return 3 -// } -// -// override fun getCraftingHeight(container: CraftingTerminalScreenHandler): Int { -// return 3 -// } -// -// override fun getGridStacks(context: ContainerContext): List { -// val handler = context.container -// return (handler.craftingSlotsStart until handler.craftingSlotsEnd).map(context::getStack) -// } -// -// override fun getInventoryStacks(context: ContainerContext): List { -// val handler = context.container -// val slots = (handler.playerSlotsStart until handler.playerSlotsEnd) + (handler.bufferSlotsStart until handler.bufferSlotsEnd) -// return slots.map(context::getStack) -// } -// } + class TerminalInfo( + private val display: D, + ): SimpleGridMenuInfo { + + override fun getCraftingResultSlotIndex(menu: CraftingTerminalScreenHandler): Int { + return menu.resultSlot.id + } + + override fun getInputStackSlotIds(context: MenuInfoContext): IntStream { + return IntStream.range(context.menu.craftingSlotsStart, context.menu.craftingSlotsEnd) + } + + override fun getInventorySlots(context: MenuInfoContext): Iterable { + val slots = super.getInventorySlots(context).toMutableList() + for (i in (context.menu.bufferSlotsStart until context.menu.bufferSlotsEnd)) { + slots.add(SlotAccessor.fromSlot(context.menu.getSlot(i))) + } + return slots + } + + override fun getCraftingWidth(menu: CraftingTerminalScreenHandler): Int { + return 3 + } + + override fun getCraftingHeight(menu: CraftingTerminalScreenHandler): Int { + return 3 + } + + override fun getDisplay(): D { + return display + } + } } diff --git a/plugin/rei/src/main/resources/fabric.mod.json b/plugin/rei/src/main/resources/fabric.mod.json index fa84c12..16f2408 100644 --- a/plugin/rei/src/main/resources/fabric.mod.json +++ b/plugin/rei/src/main/resources/fabric.mod.json @@ -13,22 +13,20 @@ }, "license": "LGPL-3.0", "entrypoints": { - "main": [ - { - "adapter": "kotlin", - "value": "net.shadowfacts.phycon.plugin.rei.PhyConPluginCommon" - } - ], "client": [ { "adapter": "kotlin", - "value": "net.shadowfacts.phycon.plugin.rei.PhyConPlugin" + "value": "net.shadowfacts.phycon.plugin.rei.PhyConPluginClient" } ], "rei": [ { "adapter": "kotlin", - "value": "net.shadowfacts.phycon.plugin.rei.PhyConPlugin" + "value": "net.shadowfacts.phycon.plugin.rei.PhyConPluginClient" + }, + { + "adapter": "kotlin", + "value": "net.shadowfacts.phycon.plugin.rei.PhyConPluginCommon" } ] },