1+ @file:Suppress(" DEPRECATION" )
2+
13package github.kasuminova.novaeng.common.item
24
35import appeng.api.networking.crafting.ICraftingGrid
4- import appeng.util.Platform.openNbtData
56import 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
613import com.circulation.random_complement.common.interfaces.RCCraftingGridCache
714import com.circulation.random_complement.common.util.MEHandler
15+ import github.kasuminova.novaeng.NovaEngineeringCore
16+ import github.kasuminova.novaeng.common.CommonProxy
817import github.kasuminova.novaeng.common.util.AssemblyBlockArray
918import github.kasuminova.novaeng.common.util.AutoCraftingQueue
1019import github.kasuminova.novaeng.common.util.NEWMachineAssemblyManager
1120import hellfirepvp.modularmachinery.common.block.BlockController
1221import hellfirepvp.modularmachinery.common.machine.DynamicMachine
22+ import hellfirepvp.modularmachinery.common.machine.MachineRegistry
1323import hellfirepvp.modularmachinery.common.tiles.base.TileMultiblockMachineController
1424import hellfirepvp.modularmachinery.common.util.BlockArrayCache
1525import ink.ikx.mmce.common.utils.StructureIngredient
26+ import it.unimi.dsi.fastutil.objects.ObjectArrayList
27+ import net.minecraft.client.util.ITooltipFlag
1628import net.minecraft.entity.player.EntityPlayer
1729import net.minecraft.item.ItemStack
1830import net.minecraft.util.ActionResult
@@ -21,20 +33,29 @@ import net.minecraft.util.EnumFacing
2133import net.minecraft.util.EnumHand
2234import net.minecraft.util.math.BlockPos
2335import net.minecraft.util.text.TextComponentTranslation
36+ import net.minecraft.util.text.translation.I18n
2437import net.minecraft.world.World
38+ import net.minecraftforge.fml.relauncher.Side
39+ import net.minecraftforge.fml.relauncher.SideOnly
2540import java.util.ArrayDeque
2641import kotlin.math.max
2742import 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