aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/rei/FirmamentReiPlugin.kt
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2024-10-18 17:47:32 +0200
committerLinnea Gräf <nea@nea.moe>2024-10-18 17:47:32 +0200
commita27f8e6fed4f8f6565e311fe3684beb0377229f7 (patch)
tree2e1fac26116ba9c9435f4541bcbdbddc1d36b4ac /src/main/kotlin/rei/FirmamentReiPlugin.kt
parentc71fca6cc633416162b2dd010c52182662ceff85 (diff)
downloadfirmament-a27f8e6fed4f8f6565e311fe3684beb0377229f7.tar.gz
firmament-a27f8e6fed4f8f6565e311fe3684beb0377229f7.tar.bz2
firmament-a27f8e6fed4f8f6565e311fe3684beb0377229f7.zip
Add super craft to the move item REI button
Diffstat (limited to 'src/main/kotlin/rei/FirmamentReiPlugin.kt')
-rw-r--r--src/main/kotlin/rei/FirmamentReiPlugin.kt192
1 files changed, 103 insertions, 89 deletions
diff --git a/src/main/kotlin/rei/FirmamentReiPlugin.kt b/src/main/kotlin/rei/FirmamentReiPlugin.kt
index b585336..f234f3e 100644
--- a/src/main/kotlin/rei/FirmamentReiPlugin.kt
+++ b/src/main/kotlin/rei/FirmamentReiPlugin.kt
@@ -1,5 +1,3 @@
-
-
package moe.nea.firmament.rei
import me.shedaniel.rei.api.client.plugins.REIClientPlugin
@@ -31,98 +29,114 @@ import moe.nea.firmament.rei.recipes.SBForgeRecipe
import moe.nea.firmament.rei.recipes.SBKatRecipe
import moe.nea.firmament.rei.recipes.SBMobDropRecipe
import moe.nea.firmament.repo.RepoManager
+import moe.nea.firmament.util.MC
+import moe.nea.firmament.util.ScreenUtil
import moe.nea.firmament.util.SkyblockId
+import moe.nea.firmament.util.guessRecipeId
import moe.nea.firmament.util.skyblockId
import moe.nea.firmament.util.unformattedString
class FirmamentReiPlugin : REIClientPlugin {
- companion object {
- fun EntryStack<SBItemStack>.asItemEntry(): EntryStack<ItemStack> {
- return EntryStack.of(VanillaEntryTypes.ITEM, value.asImmutableItemStack())
- }
-
- val SKYBLOCK_ITEM_TYPE_ID = Identifier.of("firmament", "skyblockitems")
- }
-
- override fun registerTransferHandlers(registry: TransferHandlerRegistry) {
- registry.register(TransferHandler { context ->
- val screen = context.containerScreen
- val display = context.display
- if (display !is SBCraftingRecipe || screen !is GenericContainerScreen || screen.title?.unformattedString != "Craft Item") {
- return@TransferHandler TransferHandler.Result.createNotApplicable()
- }
- if (context.isActuallyCrafting)
- CraftingOverlay.setOverlay(screen, display)
- return@TransferHandler TransferHandler.Result.createSuccessful().blocksFurtherHandling(true)
- })
- }
-
- override fun registerEntryTypes(registry: EntryTypeRegistry) {
- registry.register(SKYBLOCK_ITEM_TYPE_ID, SBItemEntryDefinition)
- }
-
- override fun registerCategories(registry: CategoryRegistry) {
- registry.add(SBCraftingRecipe.Category)
- registry.add(SBForgeRecipe.Category)
- registry.add(SBMobDropRecipe.Category)
- registry.add(SBKatRecipe.Category)
- registry.add(SBEssenceUpgradeRecipe.Category)
- }
-
- override fun registerExclusionZones(zones: ExclusionZones) {
- zones.register(HandledScreen::class.java) { HandledScreenPushREIEvent.publish(HandledScreenPushREIEvent(it)).rectangles }
- zones.register(StorageOverlayScreen::class.java) { it.getBounds() }
- }
-
- override fun registerDisplays(registry: DisplayRegistry) {
- registry.registerDisplayGenerator(
- SBCraftingRecipe.Category.catIdentifier,
- SkyblockCraftingRecipeDynamicGenerator)
- registry.registerDisplayGenerator(
- SBForgeRecipe.Category.categoryIdentifier,
- SkyblockForgeRecipeDynamicGenerator)
- registry.registerDisplayGenerator(
- SBMobDropRecipe.Category.categoryIdentifier,
- SkyblockMobDropRecipeDynamicGenerator)
- registry.registerDisplayGenerator(
- SBKatRecipe.Category.categoryIdentifier,
- SkyblockKatRecipeDynamicGenerator)
- registry.registerDisplayGenerator(
- SBEssenceUpgradeRecipe.Category.categoryIdentifier,
- SkyblockEssenceRecipeDynamicGenerator
- )
- }
-
- override fun registerCollapsibleEntries(registry: CollapsibleEntryRegistry) {
- if (!RepoManager.Config.disableItemGroups)
- RepoManager.neuRepo.constants.parents.parents
- .forEach { (parent, children) ->
- registry.group(
- SkyblockId(parent).identifier,
- Text.literal(RepoManager.getNEUItem(SkyblockId(parent))?.displayName ?: parent),
- (children + parent).map { SBItemEntryDefinition.getEntry(SkyblockId(it)) })
- }
- }
-
- override fun registerScreens(registry: ScreenRegistry) {
- registry.registerDecider(object : OverlayDecider {
- override fun <R : Screen?> isHandingScreen(screen: Class<R>?): Boolean {
- return screen == StorageOverlayScreen::class.java
- }
-
- override fun <R : Screen?> shouldScreenBeOverlaid(screen: R): ActionResult {
- return ActionResult.SUCCESS
- }
- })
- registry.registerFocusedStack(SkyblockItemIdFocusedStackProvider)
- }
-
- override fun registerEntries(registry: EntryRegistry) {
- registry.removeEntryIf { true }
- RepoManager.neuRepo.items?.items?.values?.forEach { neuItem ->
- registry.addEntry(SBItemEntryDefinition.getEntry(neuItem.skyblockId))
- }
- }
+ companion object {
+ fun EntryStack<SBItemStack>.asItemEntry(): EntryStack<ItemStack> {
+ return EntryStack.of(VanillaEntryTypes.ITEM, value.asImmutableItemStack())
+ }
+
+ val SKYBLOCK_ITEM_TYPE_ID = Identifier.of("firmament", "skyblockitems")
+ }
+
+ override fun registerTransferHandlers(registry: TransferHandlerRegistry) {
+ registry.register(TransferHandler { context ->
+ val screen = context.containerScreen
+ val display = context.display
+ if (display !is SBCraftingRecipe) return@TransferHandler TransferHandler.Result.createNotApplicable()
+ val neuItem = RepoManager.getNEUItem(SkyblockId(display.neuRecipe.output.itemId))
+ ?: error("Could not find neu item ${display.neuRecipe.output.itemId} which is used in a recipe output")
+ val useSuperCraft = context.isStackedCrafting || RepoManager.Config.alwaysSuperCraft
+ if (neuItem.isVanilla && useSuperCraft) return@TransferHandler TransferHandler.Result.createFailed(Text.translatable(
+ "firmament.recipe.novanilla"))
+ var shouldReturn = true
+ if (context.isActuallyCrafting && !useSuperCraft) {
+ if (screen !is GenericContainerScreen || screen.title?.unformattedString != CraftingOverlay.CRAFTING_SCREEN_NAME) {
+ MC.sendCommand("craft")
+ shouldReturn = false
+ }
+ CraftingOverlay.setOverlay(screen as? GenericContainerScreen, display)
+ }
+ if (context.isActuallyCrafting && useSuperCraft) {
+ shouldReturn = false
+ MC.sendCommand("viewrecipe ${neuItem.guessRecipeId()}")
+ }
+ return@TransferHandler TransferHandler.Result.createSuccessful().blocksFurtherHandling(shouldReturn)
+ })
+ }
+
+ override fun registerEntryTypes(registry: EntryTypeRegistry) {
+ registry.register(SKYBLOCK_ITEM_TYPE_ID, SBItemEntryDefinition)
+ }
+
+ override fun registerCategories(registry: CategoryRegistry) {
+ registry.add(SBCraftingRecipe.Category)
+ registry.add(SBForgeRecipe.Category)
+ registry.add(SBMobDropRecipe.Category)
+ registry.add(SBKatRecipe.Category)
+ registry.add(SBEssenceUpgradeRecipe.Category)
+ }
+
+ override fun registerExclusionZones(zones: ExclusionZones) {
+ zones.register(HandledScreen::class.java) { HandledScreenPushREIEvent.publish(HandledScreenPushREIEvent(it)).rectangles }
+ zones.register(StorageOverlayScreen::class.java) { it.getBounds() }
+ }
+
+ override fun registerDisplays(registry: DisplayRegistry) {
+ registry.registerDisplayGenerator(
+ SBCraftingRecipe.Category.catIdentifier,
+ SkyblockCraftingRecipeDynamicGenerator)
+ registry.registerDisplayGenerator(
+ SBForgeRecipe.Category.categoryIdentifier,
+ SkyblockForgeRecipeDynamicGenerator)
+ registry.registerDisplayGenerator(
+ SBMobDropRecipe.Category.categoryIdentifier,
+ SkyblockMobDropRecipeDynamicGenerator)
+ registry.registerDisplayGenerator(
+ SBKatRecipe.Category.categoryIdentifier,
+ SkyblockKatRecipeDynamicGenerator)
+ registry.registerDisplayGenerator(
+ SBEssenceUpgradeRecipe.Category.categoryIdentifier,
+ SkyblockEssenceRecipeDynamicGenerator
+ )
+ }
+
+ override fun registerCollapsibleEntries(registry: CollapsibleEntryRegistry) {
+ if (!RepoManager.Config.disableItemGroups)
+ RepoManager.neuRepo.constants.parents.parents
+ .forEach { (parent, children) ->
+ registry.group(
+ SkyblockId(parent).identifier,
+ Text.literal(RepoManager.getNEUItem(SkyblockId(parent))?.displayName ?: parent),
+ (children + parent).map { SBItemEntryDefinition.getEntry(SkyblockId(it)) })
+ }
+ }
+
+ override fun registerScreens(registry: ScreenRegistry) {
+ registry.registerDecider(object : OverlayDecider {
+ override fun <R : Screen?> isHandingScreen(screen: Class<R>?): Boolean {
+ return screen == StorageOverlayScreen::class.java
+ }
+
+ override fun <R : Screen?> shouldScreenBeOverlaid(screen: R): ActionResult {
+ return ActionResult.SUCCESS
+ }
+ })
+ registry.registerFocusedStack(SkyblockItemIdFocusedStackProvider)
+ }
+
+ override fun registerEntries(registry: EntryRegistry) {
+ registry.removeEntryIf { true }
+ RepoManager.neuRepo.items?.items?.values?.forEach { neuItem ->
+ registry.addEntry(SBItemEntryDefinition.getEntry(neuItem.skyblockId))
+ }
+ }
}