Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit d4128c7

Browse files
committedJul 16, 2016
Partially added item highlighting for JEI.
1 parent 6a066a8 commit d4128c7

File tree

5 files changed

+87
-34
lines changed

5 files changed

+87
-34
lines changed
 

‎src/main/scala/li/cil/oc/client/gui/DynamicGuiContainer.scala

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import li.cil.oc.common
1111
import li.cil.oc.common.container.ComponentSlot
1212
import li.cil.oc.common.container.Player
1313
import li.cil.oc.integration.Mods
14-
import li.cil.oc.integration.util.NEI
14+
import li.cil.oc.integration.util.ItemSearch
1515
import li.cil.oc.util.RenderState
1616
import net.minecraft.client.gui.Gui
1717
import net.minecraft.client.renderer.GlStateManager
@@ -77,7 +77,7 @@ abstract class DynamicGuiContainer[C <: Container](container: C) extends CustomG
7777
hoveredSlot = (inventorySlots.inventorySlots collect {
7878
case slot: Slot if isPointInRegion(slot.xDisplayPosition, slot.yDisplayPosition, 16, 16, mouseX, mouseY) => slot
7979
}).headOption
80-
hoveredStackNEI = NEI.hoveredStack(this, mouseX, mouseY)
80+
hoveredStackNEI = ItemSearch.hoveredStack(this, mouseX, mouseY)
8181

8282
super.drawScreen(mouseX, mouseY, dt)
8383

‎src/main/scala/li/cil/oc/client/gui/traits/InputBuffer.scala

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package li.cil.oc.client.gui.traits
33
import li.cil.oc.api
44
import li.cil.oc.client.KeyBindings
55
import li.cil.oc.client.Textures
6-
import li.cil.oc.integration.util.NEI
6+
import li.cil.oc.integration.util.ItemSearch
77
import li.cil.oc.util.RenderState
88
import net.minecraft.client.gui.GuiScreen
99
import net.minecraft.client.gui.inventory.GuiContainer
@@ -71,7 +71,7 @@ trait InputBuffer extends DisplayBuffer {
7171
override def handleKeyboardInput() {
7272
super.handleKeyboardInput()
7373

74-
if (this.isInstanceOf[GuiContainer] && NEI.isInputFocused) return
74+
if (this.isInstanceOf[GuiContainer] && ItemSearch.isInputFocused) return
7575

7676
val code = Keyboard.getEventKey
7777
if (buffer != null && code != Keyboard.KEY_ESCAPE && code != Keyboard.KEY_F11) {

‎src/main/scala/li/cil/oc/integration/jei/ModPluginOpenComputers.scala

+17-5
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,28 @@ package li.cil.oc.integration.jei
22

33
import li.cil.oc.Settings
44
import li.cil.oc.integration.util.ItemBlacklist
5+
import li.cil.oc.integration.util.ItemSearch
56
import mezz.jei.api.IItemRegistry
67
import mezz.jei.api.IJeiHelpers
78
import mezz.jei.api.IJeiRuntime
89
import mezz.jei.api.IModPlugin
910
import mezz.jei.api.IModRegistry
1011
import mezz.jei.api.IRecipeRegistry
1112
import mezz.jei.api.JEIPlugin
13+
import net.minecraft.client.gui.inventory.GuiContainer
14+
import net.minecraft.item.ItemStack
1215

1316
@JEIPlugin
1417
class ModPluginOpenComputers extends IModPlugin {
15-
override def onJeiHelpersAvailable(jeiHelpers: IJeiHelpers): Unit = {
18+
19+
override def onJeiHelpersAvailable(jeiHelpers: IJeiHelpers) {
1620
ItemBlacklist.consumers += jeiHelpers.getItemBlacklist.addItemToBlacklist
1721
}
1822

19-
override def onItemRegistryAvailable(itemRegistry: IItemRegistry): Unit = {
23+
override def onItemRegistryAvailable(itemRegistry: IItemRegistry) {
2024
}
2125

22-
override def register(registry: IModRegistry): Unit = {
26+
override def register(registry: IModRegistry) {
2327
if (Settings.get.lootRecrafting) {
2428
registry.addRecipeHandlers(LootDiskCyclingRecipeHandler)
2529
}
@@ -36,9 +40,17 @@ class ModPluginOpenComputers extends IModPlugin {
3640
registry.addRecipes(CallbackDocHandler.getRecipes(registry))
3741
}
3842

39-
override def onRecipeRegistryAvailable(recipeRegistry: IRecipeRegistry): Unit = {
43+
override def onRecipeRegistryAvailable(recipeRegistry: IRecipeRegistry) {
4044
}
4145

42-
override def onRuntimeAvailable(jeiRuntime: IJeiRuntime): Unit = {
46+
var stackUnderMouse: (GuiContainer, Int, Int) => Option[ItemStack] = null
47+
48+
override def onRuntimeAvailable(jeiRuntime: IJeiRuntime) {
49+
if (stackUnderMouse == null) {
50+
ItemSearch.stackFocusing += ((container, mouseX, mouseY) => stackUnderMouse(container, mouseX, mouseY))
51+
}
52+
stackUnderMouse = (container, mouseX, mouseY) => Option(jeiRuntime.getItemListOverlay.getStackUnderMouse)
53+
54+
// TODO check for focused input
4355
}
4456
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package li.cil.oc.integration.util
2+
3+
/* TODO NEI
4+
import codechicken.nei.LayoutManager
5+
*/
6+
7+
import li.cil.oc.integration.Mods
8+
import net.minecraft.client.gui.inventory.GuiContainer
9+
import net.minecraft.item.ItemStack
10+
import net.minecraftforge.fml.common.Optional
11+
12+
import scala.collection.mutable
13+
14+
object ItemSearch {
15+
16+
val focusedInput = mutable.Set.empty[() => Boolean]
17+
val stackFocusing = mutable.Set.empty[(GuiContainer, Int, Int) => Option[ItemStack]]
18+
19+
def isInputFocused: Boolean = {
20+
if (Mods.NotEnoughItems.isAvailable) {
21+
initNEI()
22+
}
23+
for (f <- focusedInput) {
24+
if (f()) return true
25+
}
26+
false
27+
}
28+
29+
def hoveredStack(container: GuiContainer, mouseX: Int, mouseY: Int): Option[ItemStack] = {
30+
if (Mods.NotEnoughItems.isAvailable) {
31+
initNEI()
32+
}
33+
for (f <- stackFocusing) {
34+
f(container, mouseX, mouseY).foreach(stack => return Option(stack))
35+
}
36+
None
37+
}
38+
39+
// NEI
40+
41+
private var neiHoveredStack: (GuiContainer, Int, Int) => Option[ItemStack] = null
42+
private var neiInputFocused: () => Boolean = null
43+
44+
@Optional.Method(modid = Mods.NotEnoughItems.id)
45+
private def initNEI() {
46+
if (neiInputFocused == null) {
47+
neiInputFocused = () => try isInputFocused0 catch {
48+
case _: Throwable => false
49+
}
50+
focusedInput += neiInputFocused
51+
}
52+
if (neiHoveredStack == null) {
53+
neiHoveredStack = (container, mouseX, mouseY) =>
54+
try Option(hoveredStack0(container, mouseX, mouseY)) catch {
55+
case t: Throwable => None
56+
}
57+
stackFocusing += neiHoveredStack
58+
}
59+
}
60+
61+
@Optional.Method(modid = Mods.NotEnoughItems.id)
62+
private def isInputFocused0 = false // TODO NEI LayoutManager.getInputFocused != null
63+
64+
@Optional.Method(modid = Mods.NotEnoughItems.id)
65+
private def hoveredStack0(container: GuiContainer, mouseX: Int, mouseY: Int) = null: ItemStack // TODO NEI LayoutManager.instance.getStackUnderMouse(container, mouseX, mouseY)
66+
}

‎src/main/scala/li/cil/oc/integration/util/NEI.scala

-25
This file was deleted.

0 commit comments

Comments
 (0)
Please sign in to comment.