Skip to content

Commit c00791b

Browse files
committed
完成GUI打开
为可以自动搭建的结构主方块添加tooltips
1 parent b89b3d2 commit c00791b

File tree

14 files changed

+260
-62
lines changed

14 files changed

+260
-62
lines changed

build.gradle.kts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -286,8 +286,6 @@ dependencies {
286286
compileOnly(rfg.deobf("curse.maven:endercore-231868:4671384"))
287287
compileOnly(rfg.deobf("curse.maven:ender-io-64578:4674244"))
288288
compileOnly(rfg.deobf("curse.maven:more-electric-tools-366298:3491973"))
289-
compileOnly(rfg.deobf("curse.maven:brandonscore-231382:3051539"))
290-
compileOnly(rfg.deobf("curse.maven:draconicevolution-223565:3051542"))
291289
implementation(rfg.deobf("curse.maven:extrabotany-299086:3112313"))
292290
implementation(rfg.deobf("curse.maven:libnine-322344:3509087"))
293291
implementation(rfg.deobf("curse.maven:lazy-ae2-322347:3254160"))

src/main/java/github/kasuminova/novaeng/client/ClientProxy.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import github.kasuminova.novaeng.client.gui.GuiEStorageController;
1515
import github.kasuminova.novaeng.client.gui.GuiGeocentricDrill;
1616
import github.kasuminova.novaeng.client.gui.GuiHyperNetTerminal;
17+
import github.kasuminova.novaeng.client.gui.GuiMachineAssemblyTool;
1718
import github.kasuminova.novaeng.client.gui.GuiModularServerAssembler;
1819
import github.kasuminova.novaeng.client.gui.GuiNEWCraftConfirm;
1920
import github.kasuminova.novaeng.client.gui.GuiSingularityCore;
@@ -286,6 +287,7 @@ yield new GuiNEWCraftConfirm(player.inventory,
286287
new WirelessTerminalGuiObject(wt, stack, player, player.world, x, y, Integer.MIN_VALUE));
287288
} else yield null;
288289
}
290+
case MACHINE_ASSEMBLY_TOOL -> new GuiMachineAssemblyTool(player);
289291
};
290292
}
291293

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package github.kasuminova.novaeng.client.gui
2+
3+
import com.brandon3055.brandonscore.inventory.PlayerSlot
4+
import com.brandon3055.draconicevolution.client.gui.toolconfig.GuiConfigureTool
5+
import com.brandon3055.draconicevolution.client.gui.toolconfig.GuiToolConfig
6+
import net.minecraft.entity.player.EntityPlayer
7+
import net.minecraft.util.EnumHand
8+
9+
class GuiMachineAssemblyTool(player: EntityPlayer): GuiConfigureTool(
10+
GuiToolConfig(player),player,player.getHeldItem(EnumHand.MAIN_HAND),
11+
PlayerSlot(player.inventory.currentItem, PlayerSlot.EnumInvCategory.MAIN)
12+
) {
13+
14+
override fun keyTyped(typedChar: Char, keyCode: Int) {
15+
if (keyCode == 1 || this.mc.gameSettings.keyBindInventory.isActiveAndMatches(keyCode)) {
16+
this.mc.player.closeScreen()
17+
}
18+
}
19+
}

src/main/java/github/kasuminova/novaeng/client/handler/ItemDisplayHandler.java

Lines changed: 0 additions & 23 deletions
This file was deleted.

src/main/java/github/kasuminova/novaeng/client/handler/MachineAssemblyHandlerClient.kt

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,14 @@ package github.kasuminova.novaeng.client.handler
22

33
import github.kasuminova.novaeng.client.util.NEWBlockArrayPreviewRenderHelper
44
import github.kasuminova.novaeng.common.item.ItemMachineAssemblyTool
5+
import github.kasuminova.novaeng.common.util.NEWMachineAssemblyManager
56
import net.minecraft.client.Minecraft
7+
import net.minecraft.client.resources.I18n
8+
import net.minecraft.item.ItemBlock
69
import net.minecraft.item.ItemStack
710
import net.minecraftforge.client.event.MouseEvent
811
import net.minecraftforge.client.event.RenderWorldLastEvent
12+
import net.minecraftforge.event.entity.player.ItemTooltipEvent
913
import net.minecraftforge.event.world.WorldEvent
1014
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
1115
import net.minecraftforge.fml.common.gameevent.TickEvent
@@ -17,7 +21,31 @@ import org.lwjgl.input.Mouse
1721
@SideOnly(Side.CLIENT)
1822
object MachineAssemblyHandlerClient {
1923

20-
val mc: Minecraft = Minecraft.getMinecraft()
24+
val mc: Minecraft by lazy {
25+
Minecraft.getMinecraft()
26+
}
27+
28+
@SubscribeEvent
29+
fun addMachineCtrlTooltip(event: ItemTooltipEvent) {
30+
val stack = event.itemStack
31+
val item = stack.item
32+
if (item is ItemBlock) {
33+
val machine = NEWMachineAssemblyManager
34+
.getDynamicMachine(item.block, stack.metadata) ?: return
35+
event.toolTip.add(
36+
I18n.format(
37+
"tooltip.machine_assembly_tool.0",
38+
machine.localizedName
39+
)
40+
)
41+
event.toolTip.add(
42+
I18n.format(
43+
"tooltip.machine_assembly_tool.1",
44+
ItemMachineAssemblyTool.getItemStackDisplayName(ItemStack.EMPTY)
45+
)
46+
)
47+
}
48+
}
2149

2250
@SubscribeEvent
2351
fun onMouseEvent(event: MouseEvent) {

src/main/java/github/kasuminova/novaeng/common/CommonProxy.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,7 @@ open class CommonProxy : IGuiHandler {
257257
}
258258
return null
259259
}
260+
GuiType.MACHINE_ASSEMBLY_TOOL -> null
260261
}
261262
}
262263

@@ -274,6 +275,7 @@ open class CommonProxy : IGuiHandler {
274275
EFABRICATOR_PATTERN_BUS(EFabricatorPatternBus::class.java),
275276
GEOCENTRIC_DRILL_CONTROLLER(GeocentricDrillController::class.java),
276277
ECALCULATOR_CONTROLLER(ECalculatorController::class.java),
277-
AUTO_CRAFTGUI(null)
278+
AUTO_CRAFTGUI(null),
279+
MACHINE_ASSEMBLY_TOOL(null)
278280
}
279281
}

src/main/java/github/kasuminova/novaeng/common/item/ItemBasic.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,14 @@ open class ItemBasic(name: String) : Item() {
4444
this.setMaxStackSize(1)
4545
this.setCreativeTab(CreativeTabNovaEng.INSTANCE)
4646
this.registryName = ResourceLocation(NovaEngineeringCore.MOD_ID, name)
47-
this.setTranslationKey(NovaEngineeringCore.MOD_ID + '.' + name)
47+
this.translationKey = NovaEngineeringCore.MOD_ID + '.' + name
4848
}
4949

5050
@SideOnly(Side.CLIENT)
5151
override fun addInformation(stack: ItemStack, world: World?, lines: MutableList<String?>, flagIn: ITooltipFlag) {
52-
var i = 0
53-
while (I18n.hasKey(this.translationKey + ".tooltip." + i)) {
52+
var i = -1
53+
while (I18n.hasKey(this.translationKey + ".tooltip." + ++i)) {
5454
lines.add(I18n.format(this.translationKey + ".tooltip." + i))
55-
i++
5655
}
5756
}
5857

src/main/java/github/kasuminova/novaeng/common/item/ItemMachineAssemblyTool.kt

Lines changed: 141 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,30 @@
1+
@file:Suppress("DEPRECATION")
2+
13
package github.kasuminova.novaeng.common.item
24

35
import appeng.api.networking.crafting.ICraftingGrid
4-
import appeng.util.Platform.openNbtData
56
import appeng.util.item.AEItemStack
7+
import com.brandon3055.draconicevolution.api.itemconfig.BooleanConfigField
8+
import com.brandon3055.draconicevolution.api.itemconfig.IConfigurableItem
9+
import com.brandon3055.draconicevolution.api.itemconfig.IItemConfigField
10+
import com.brandon3055.draconicevolution.api.itemconfig.IntegerConfigField
11+
import com.brandon3055.draconicevolution.api.itemconfig.ItemConfigFieldRegistry
12+
import com.brandon3055.draconicevolution.api.itemconfig.ToolConfigHelper
613
import com.circulation.random_complement.common.interfaces.RCCraftingGridCache
714
import com.circulation.random_complement.common.util.MEHandler
15+
import github.kasuminova.novaeng.NovaEngineeringCore
16+
import github.kasuminova.novaeng.common.CommonProxy
817
import github.kasuminova.novaeng.common.util.AssemblyBlockArray
918
import github.kasuminova.novaeng.common.util.AutoCraftingQueue
1019
import github.kasuminova.novaeng.common.util.NEWMachineAssemblyManager
1120
import hellfirepvp.modularmachinery.common.block.BlockController
1221
import hellfirepvp.modularmachinery.common.machine.DynamicMachine
22+
import hellfirepvp.modularmachinery.common.machine.MachineRegistry
1323
import hellfirepvp.modularmachinery.common.tiles.base.TileMultiblockMachineController
1424
import hellfirepvp.modularmachinery.common.util.BlockArrayCache
1525
import ink.ikx.mmce.common.utils.StructureIngredient
26+
import it.unimi.dsi.fastutil.objects.ObjectArrayList
27+
import net.minecraft.client.util.ITooltipFlag
1628
import net.minecraft.entity.player.EntityPlayer
1729
import net.minecraft.item.ItemStack
1830
import net.minecraft.util.ActionResult
@@ -21,20 +33,29 @@ import net.minecraft.util.EnumFacing
2133
import net.minecraft.util.EnumHand
2234
import net.minecraft.util.math.BlockPos
2335
import net.minecraft.util.text.TextComponentTranslation
36+
import net.minecraft.util.text.translation.I18n
2437
import net.minecraft.world.World
38+
import net.minecraftforge.fml.relauncher.Side
39+
import net.minecraftforge.fml.relauncher.SideOnly
2540
import java.util.ArrayDeque
2641
import kotlin.math.max
2742
import kotlin.math.min
2843

29-
object ItemMachineAssemblyTool : ItemBasic("machine_assembly_tool") {
44+
object ItemMachineAssemblyTool : ItemBasic("machine_assembly_tool"), IConfigurableItem {
3045

3146
override fun onItemRightClick(world: World, player: EntityPlayer, hand: EnumHand): ActionResult<ItemStack> {
32-
//TODO:手持打开配置GUI
33-
if (world.isRemote || hand != EnumHand.MAIN_HAND) return ActionResult(
34-
EnumActionResult.PASS,
35-
player.getHeldItem(hand)
36-
)
37-
return super.onItemRightClick(world, player, hand)
47+
if (hand != EnumHand.MAIN_HAND) return super.onItemRightClick(world, player, hand)
48+
if (world.isRemote) {
49+
player.openGui(
50+
NovaEngineeringCore.instance,
51+
CommonProxy.GuiType.MACHINE_ASSEMBLY_TOOL.ordinal,
52+
world,
53+
0,
54+
0,
55+
0
56+
)
57+
}
58+
return ActionResult(EnumActionResult.SUCCESS, player.getHeldItem(hand))
3859
}
3960

4061
override fun onItemUse(
@@ -167,44 +188,146 @@ object ItemMachineAssemblyTool : ItemBasic("machine_assembly_tool") {
167188
return EnumActionResult.PASS
168189
}
169190

191+
@SideOnly(Side.CLIENT)
192+
override fun addInformation(stack: ItemStack, world: World?, lines: MutableList<String?>, flagIn: ITooltipFlag) {
193+
super.addInformation(stack, world, lines, flagIn)
194+
lines.add("item.novaeng_core.machine_assembly_tool.config".i18n())
195+
lines.add(" ${usingAEConfig.unlocalizedName.i18n()} : ${isUsingAE(stack)}")
196+
lines.add(" ${ignoreFluidsConfig.unlocalizedName.i18n()} : ${isIgnoreFluids(stack)}")
197+
lines.add(" ${dynamicPatternSizeConfig.unlocalizedName.i18n()} : ${getDynamicPatternSize(stack)}")
198+
lines.add(" ${autoAECraftingConfig.unlocalizedName.i18n()} : ${isAutoAECrafting(stack)}")
199+
lines.add(" ${needAllIngredientConfig.unlocalizedName.i18n()} : ${isNeedAllIngredient(stack)}")
200+
}
201+
170202
fun isUsingAE(stack: ItemStack): Boolean {
171-
return openNbtData(stack).getBoolean("UsingAE")
203+
return ToolConfigHelper.getFieldStorage(stack).getBoolean("UsingAE")
172204
}
173205

174206
fun isIgnoreFluids(stack: ItemStack): Boolean {
175-
return openNbtData(stack).getBoolean("IgnoreFluids")
207+
return ToolConfigHelper.getFieldStorage(stack).getBoolean("IgnoreFluids")
176208
}
177209

178210
fun getDynamicPatternSize(stack: ItemStack): Int {
179-
return openNbtData(stack).getInteger("DynamicPatternSize")
211+
return ToolConfigHelper.getFieldStorage(stack).getInteger("DynamicPatternSize")
180212
}
181213

182214
fun isAutoAECrafting(stack: ItemStack): Boolean {
183-
return openNbtData(stack).getBoolean("AutoAECrafting")
215+
return ToolConfigHelper.getFieldStorage(stack).getBoolean("AutoAECrafting")
184216
}
185217

186218
fun isNeedAllIngredient(stack: ItemStack): Boolean {
187-
return openNbtData(stack).getBoolean("NeedAllIngredient")
219+
return ToolConfigHelper.getFieldStorage(stack).getBoolean("NeedAllIngredient")
188220
}
189221

190222
fun setUsingAE(stack: ItemStack, b: Boolean) {
191-
openNbtData(stack).setBoolean("UsingAE", b)
223+
ToolConfigHelper.getFieldStorage(stack).setBoolean("UsingAE", b)
192224
}
193225

194226
fun setIgnoreFluids(stack: ItemStack, b: Boolean) {
195-
openNbtData(stack).setBoolean("IgnoreFluids", b)
227+
ToolConfigHelper.getFieldStorage(stack).setBoolean("IgnoreFluids", b)
196228
}
197229

198230
fun setDynamicPatternSize(stack: ItemStack, size: Int) {
199-
openNbtData(stack).setByte("DynamicPatternSize", size.toByte())
231+
ToolConfigHelper.getFieldStorage(stack).setByte("DynamicPatternSize", size.toByte())
200232
}
201233

202234
fun setAutoAECrafting(stack: ItemStack, auto: Boolean) {
203-
openNbtData(stack).setBoolean("AutoAECrafting", auto)
235+
ToolConfigHelper.getFieldStorage(stack).setBoolean("AutoAECrafting", auto)
204236
}
205237

206238
fun setNeedAllIngredient(stack: ItemStack, auto: Boolean) {
207-
openNbtData(stack).setBoolean("NeedAllIngredient", auto)
239+
ToolConfigHelper.getFieldStorage(stack).setBoolean("NeedAllIngredient", auto)
240+
}
241+
242+
val usingAEConfig by lazy {
243+
BooleanConfigField(
244+
"UsingAE",
245+
false,
246+
"UsingAE".getDescription()
247+
)
248+
}
249+
250+
val ignoreFluidsConfig by lazy {
251+
BooleanConfigField(
252+
"IgnoreFluids",
253+
false,
254+
"IgnoreFluids".getDescription()
255+
)
256+
}
257+
258+
val dynamicPatternSizeConfig by lazy {
259+
IntegerConfigField(
260+
"DynamicPatternSize",
261+
0,
262+
0,
263+
getMaxDynamicPatternSize(),
264+
"DynamicPatternSize".getDescription(),
265+
IItemConfigField.EnumControlType.SELECTIONS
266+
)
267+
}
268+
269+
val autoAECraftingConfig by lazy {
270+
BooleanConfigField(
271+
"AutoAECrafting",
272+
false,
273+
"AutoAECrafting".getDescription()
274+
)
275+
}
276+
277+
val needAllIngredientConfig by lazy {
278+
BooleanConfigField(
279+
"NeedAllIngredient",
280+
false,
281+
"NeedAllIngredient".getDescription()
282+
)
283+
}
284+
285+
override fun getFields(
286+
stack: ItemStack,
287+
registry: ItemConfigFieldRegistry
288+
): ItemConfigFieldRegistry {
289+
registry.register(stack, usingAEConfig)
290+
registry.register(stack, ignoreFluidsConfig)
291+
registry.register(stack, dynamicPatternSizeConfig)
292+
registry.register(stack, autoAECraftingConfig)
293+
registry.register(stack, needAllIngredientConfig)
294+
295+
return registry
296+
}
297+
298+
override fun onFieldChanged(stack: ItemStack, field: IItemConfigField) {
299+
300+
}
301+
302+
override fun getProfileCount(stack: ItemStack): Int {
303+
return 5
304+
}
305+
306+
private fun String.getDescription(): String {
307+
return "text.machine_assembly_tool.config.$this".i18n()
308+
}
309+
310+
private fun String.i18n(): String {
311+
return I18n.translateToLocal(this)
312+
}
313+
314+
private fun String.i18n(vararg objs: Any): String {
315+
return I18n.translateToLocalFormatted(this, objs)
316+
}
317+
318+
private fun getMaxDynamicPatternSize(): Int {
319+
val list = ObjectArrayList(MachineRegistry.getLoadedMachines())
320+
list.addAll(NEWMachineAssemblyManager.getAllDynamicMachines())
321+
322+
return list.parallelStream()
323+
.mapToInt {
324+
it.dynamicPatterns.values.stream()
325+
.mapToInt { it1 -> it1.maxSize }
326+
.max()
327+
.orElse(1)
328+
}
329+
.max()
330+
.orElse(1)
208331
}
209332

210333
}

0 commit comments

Comments
 (0)