diff options
author | nea <nea@nea.moe> | 2023-06-12 17:46:41 +0200 |
---|---|---|
committer | nea <nea@nea.moe> | 2023-06-12 17:46:41 +0200 |
commit | d4410a67fb43cf467194b67552cdf4b85c6753bd (patch) | |
tree | e86f0b06741cefe44c80e4e607c334ac47eef61d /src/main/kotlin/moe/nea/firmament/features | |
parent | cd87be6cb3af335b90fe1c92e71bd3e980f3a310 (diff) | |
download | Firmament-d4410a67fb43cf467194b67552cdf4b85c6753bd.tar.gz Firmament-d4410a67fb43cf467194b67552cdf4b85c6753bd.tar.bz2 Firmament-d4410a67fb43cf467194b67552cdf4b85c6753bd.zip |
Add crafting overlay
Diffstat (limited to 'src/main/kotlin/moe/nea/firmament/features')
-rw-r--r-- | src/main/kotlin/moe/nea/firmament/features/FeatureManager.kt | 2 | ||||
-rw-r--r-- | src/main/kotlin/moe/nea/firmament/features/inventory/CraftingOverlay.kt | 66 |
2 files changed, 68 insertions, 0 deletions
diff --git a/src/main/kotlin/moe/nea/firmament/features/FeatureManager.kt b/src/main/kotlin/moe/nea/firmament/features/FeatureManager.kt index dfbb5ed..e465349 100644 --- a/src/main/kotlin/moe/nea/firmament/features/FeatureManager.kt +++ b/src/main/kotlin/moe/nea/firmament/features/FeatureManager.kt @@ -23,6 +23,7 @@ import kotlinx.serialization.serializer import moe.nea.firmament.Firmament import moe.nea.firmament.features.debug.DeveloperFeatures import moe.nea.firmament.features.fishing.FishingWarning +import moe.nea.firmament.features.inventory.CraftingOverlay import moe.nea.firmament.features.inventory.SlotLocking import moe.nea.firmament.features.world.FairySouls import moe.nea.firmament.util.data.DataHolder @@ -49,6 +50,7 @@ object FeatureManager : DataHolder<FeatureManager.Config>(serializer(), "feature loadFeature(FairySouls) loadFeature(FishingWarning) loadFeature(SlotLocking) + loadFeature(CraftingOverlay) if (Firmament.DEBUG) loadFeature(DeveloperFeatures) hasAutoloaded = true diff --git a/src/main/kotlin/moe/nea/firmament/features/inventory/CraftingOverlay.kt b/src/main/kotlin/moe/nea/firmament/features/inventory/CraftingOverlay.kt new file mode 100644 index 0000000..31d2b23 --- /dev/null +++ b/src/main/kotlin/moe/nea/firmament/features/inventory/CraftingOverlay.kt @@ -0,0 +1,66 @@ +package moe.nea.firmament.features.inventory + +import net.minecraft.client.gui.screen.ingame.GenericContainerScreen +import net.minecraft.item.ItemStack +import net.minecraft.util.Formatting +import moe.nea.firmament.events.SlotRenderEvents +import moe.nea.firmament.features.FirmamentFeature +import moe.nea.firmament.recipes.SBCraftingRecipe +import moe.nea.firmament.rei.FirmamentReiPlugin.Companion.asItemEntry +import moe.nea.firmament.rei.SBItemEntryDefinition +import moe.nea.firmament.util.MC + +object CraftingOverlay : FirmamentFeature { + + private var screen: GenericContainerScreen? = null + private var recipe: SBCraftingRecipe? = null + private val craftingOverlayIndices = listOf( + 10, 11, 12, + 19, 20, 21, + 28, 29, 30, + ) + + + fun setOverlay(screen: GenericContainerScreen, recipe: SBCraftingRecipe) { + this.screen = screen + this.recipe = recipe + } + + override val name: String + get() = "Crafting Overlay" + override val identifier: String + get() = "crafting-overlay" + + override fun onLoad() { + SlotRenderEvents.After.subscribe { event -> + val slot = event.slot + val recipe = this.recipe ?: return@subscribe + if (slot.inventory != screen?.screenHandler?.inventory) return@subscribe + val recipeIndex = craftingOverlayIndices.indexOf(slot.index) + if (recipeIndex < 0) return@subscribe + val expectedItem = recipe.neuRecipe.inputs[recipeIndex] + val actualStack = slot.stack ?: ItemStack.EMPTY!! + val actualEntry = SBItemEntryDefinition.getEntry(actualStack).value + if ((actualEntry.skyblockId.neuItem != expectedItem.itemId || actualEntry.stackSize < expectedItem.amount) && expectedItem.amount.toInt() != 0) { + event.context.fill( + event.slot.x, + event.slot.y, + event.slot.x + 16, + event.slot.y + 16, + 0x80FF0000.toInt() + ) + } + if (!slot.hasStack()) { + val itemStack = SBItemEntryDefinition.getEntry(expectedItem).asItemEntry().value + event.context.drawItem(itemStack, event.slot.x, event.slot.y) + event.context.drawItemInSlot( + MC.font, + itemStack, + event.slot.x, + event.slot.y, + "${Formatting.RED}${expectedItem.amount.toInt()}" + ) + } + } + } +} |