diff --git a/src/main/java/li/cil/oc/api/Items.java b/src/main/java/li/cil/oc/api/Items.java index c84202ed9b..6a4675db0e 100644 --- a/src/main/java/li/cil/oc/api/Items.java +++ b/src/main/java/li/cil/oc/api/Items.java @@ -78,7 +78,7 @@ public static ItemStack registerFloppy(String name, ResourceLocation loc, DyeCol Callable factory, boolean doRecipeCycling) { if (API.items != null) - return API.items.registerFloppy(name, loc, color, factory, doRecipeCycling); + return API.items.registerFloppy(name, name, loc, color, factory, doRecipeCycling); return ItemStack.EMPTY; } @@ -104,6 +104,22 @@ public static ItemStack registerEEPROM(String name, byte[] code, byte[] data, bo return ItemStack.EMPTY; } + /** + * The stack will be listed in the creative tab of OpenComputers. + * + * Call this in the init phase or later, not in pre-init. + * + * @param stack the stack to add in the creative tab. + * @param name the label of the EEPROM. + * @param section_id the section to put the stack in. + * + */ + public static ItemStack registerStack(ItemStack stack, String name, String section_id) { + if (API.items != null) + return API.items.registerStack(stack, name, section_id); + return ItemStack.EMPTY; + } + // ----------------------------------------------------------------------- // private Items() { diff --git a/src/main/java/li/cil/oc/api/detail/ItemAPI.java b/src/main/java/li/cil/oc/api/detail/ItemAPI.java index 90558f9248..6eee1155da 100644 --- a/src/main/java/li/cil/oc/api/detail/ItemAPI.java +++ b/src/main/java/li/cil/oc/api/detail/ItemAPI.java @@ -53,7 +53,8 @@ public interface ItemAPI { *
* Call this in the init phase or later, not in pre-init. * - * @param name the label and identifier to use for the loot disk. + * @param display_name the label to use for the loot disk. + * @param name the identifier to use for the loot disk. * @param loc the location where the disk's contents are stored. * @param color the color of the disk, as a Minecraft color. * @param factory the callable to call for creating file system instances. @@ -61,7 +62,7 @@ public interface ItemAPI { * @return an item stack representing the registered loot disk, to allow * adding a recipe for your loot disk, for example. */ - ItemStack registerFloppy(String name, ResourceLocation loc, DyeColor color, + ItemStack registerFloppy(String display_name, String name, ResourceLocation loc, DyeColor color, Callable factory, boolean doRecipeCycling); /** @@ -83,4 +84,16 @@ ItemStack registerFloppy(String name, ResourceLocation loc, DyeColor color, * adding a recipe for your custom BIOS, for example. */ ItemStack registerEEPROM(String name, byte[] code, byte[] data, boolean readonly); + + /** + * The stack will be listed in the creative tab of OpenComputers. + * + * Call this in the init phase or later, not in pre-init. + * + * @param stack the stack to add in the creative tab. + * @param name the label of the EEPROM. + * @param sectionId the section to put the stack in. + * + */ + ItemStack registerStack(ItemStack stack, String name, String sectionId); } diff --git a/src/main/java/li/cil/oc/common/openprinter/OpenPrinter.java b/src/main/java/li/cil/oc/common/openprinter/OpenPrinter.java index 2f51921fa0..500653803f 100644 --- a/src/main/java/li/cil/oc/common/openprinter/OpenPrinter.java +++ b/src/main/java/li/cil/oc/common/openprinter/OpenPrinter.java @@ -46,6 +46,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.function.Consumer; + /** * OpenPrinter, integrated directly into OpenComputers. * @@ -162,20 +164,19 @@ private static void registerOpenComputersIntegration() { } catch (RuntimeException exception) { LOGGER.warn("Could not register the OpenPrinter tools disk", exception); } - } - public static void addCreativeItems(BuildCreativeModeTabContentsEvent event) { - event.accept(PRINTER.get()); - event.accept(SHREDDER.get()); - event.accept(FILE_CABINET.get()); - event.accept(BRIEFCASE.get()); - event.accept(PRINTED_PAGE.get()); - event.accept(BLACK_INK.get()); - event.accept(COLOR_INK.get()); - event.accept(PAPER_SHREDS.get()); - event.accept(FOLDER.get()); - // The tools disk is registered through OpenComputers' public floppy API, - // which already adds it to the OpenComputers creative tab. + + li.cil.oc.api.Items.registerStack(PRINTER.toStack(), PRINTER.getRegisteredName(), "25_components"); + + li.cil.oc.api.Items.registerStack(SHREDDER.toStack(), SHREDDER.getRegisteredName(), "49_tools"); + li.cil.oc.api.Items.registerStack(FILE_CABINET.toStack(), FILE_CABINET.getRegisteredName(), "49_tools"); + li.cil.oc.api.Items.registerStack(BRIEFCASE.toStack(), BRIEFCASE.getRegisteredName(), "49_tools"); + li.cil.oc.api.Items.registerStack(PRINTED_PAGE.toStack(), PRINTED_PAGE.getRegisteredName(), "49_tools"); + li.cil.oc.api.Items.registerStack(FOLDER.toStack(), PRINTED_PAGE.getRegisteredName(), "49_tools"); + + li.cil.oc.api.Items.registerStack(BLACK_INK.toStack(), BLACK_INK.getRegisteredName(), "50_materials"); + li.cil.oc.api.Items.registerStack(COLOR_INK.toStack(), COLOR_INK.getRegisteredName(), "50_materials"); + li.cil.oc.api.Items.registerStack(PAPER_SHREDS.toStack(), PAPER_SHREDS.getRegisteredName(), "50_materials"); } /** diff --git a/src/main/java/li/cil/oc/mixin/accessor/AbstractContainerScreenAccess.java b/src/main/java/li/cil/oc/mixin/accessor/AbstractContainerScreenAccess.java new file mode 100644 index 0000000000..a89252e389 --- /dev/null +++ b/src/main/java/li/cil/oc/mixin/accessor/AbstractContainerScreenAccess.java @@ -0,0 +1,14 @@ +package li.cil.oc.mixin.accessor; + +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(AbstractContainerScreen.class) +public interface AbstractContainerScreenAccess { + @Accessor() + int getLeftPos(); + + @Accessor + int getTopPos(); +} diff --git a/src/main/java/li/cil/oc/mixin/accessor/CreativeModeInventoryScreenAccess.java b/src/main/java/li/cil/oc/mixin/accessor/CreativeModeInventoryScreenAccess.java new file mode 100644 index 0000000000..3a8a9b1ec2 --- /dev/null +++ b/src/main/java/li/cil/oc/mixin/accessor/CreativeModeInventoryScreenAccess.java @@ -0,0 +1,13 @@ +package li.cil.oc.mixin.accessor; + +import net.minecraft.client.gui.screens.inventory.CreativeModeInventoryScreen; +import net.minecraft.util.Mth; +import net.minecraft.world.item.CreativeModeTab; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(CreativeModeInventoryScreen.class) +public interface CreativeModeInventoryScreenAccess { + @Shadow + static CreativeModeTab selectedTab = null; +} \ No newline at end of file diff --git a/src/main/resources/assets/opencomputers/lang/en_us.json b/src/main/resources/assets/opencomputers/lang/en_us.json index 373eda02f4..b2e6600582 100644 --- a/src/main/resources/assets/opencomputers/lang/en_us.json +++ b/src/main/resources/assets/opencomputers/lang/en_us.json @@ -189,6 +189,12 @@ "item.oc.worldsensorcard": "World Sensor Card", "item.oc.wrench": "Scrench", "itemGroup.OpenComputers": "OpenComputers", + "itemGroup.OpenComputers.section.10_networking": "Networking§f", + "itemGroup.OpenComputers.section.25_components": "Components§f", + "itemGroup.OpenComputers.section.49_tools": "Tools§f", + "itemGroup.OpenComputers.section.50_materials": "Materials§f", + "itemGroup.OpenComputers.section.80_upgrade": "Upgrades§f", + "itemGroup.OpenComputers.section.99_misc": "Miscellaneous§f", "entity.oc.Drone": "Drone", "entity.oc.TrainRobot": "Train Robot", "oc:gui.Analyzer.Address": "§6Address§f: %s", diff --git a/src/main/resources/assets/opencomputers/textures/gui/banner.png b/src/main/resources/assets/opencomputers/textures/gui/banner.png new file mode 100644 index 0000000000..1d0ccb9d98 Binary files /dev/null and b/src/main/resources/assets/opencomputers/textures/gui/banner.png differ diff --git a/src/main/resources/opencomputers.core.mixins.json b/src/main/resources/opencomputers.core.mixins.json new file mode 100644 index 0000000000..dee0a2f34d --- /dev/null +++ b/src/main/resources/opencomputers.core.mixins.json @@ -0,0 +1,18 @@ +{ + "required": false, + "minVersion": "0.8", + "package": "li.cil.oc.mixin", + "compatibilityLevel": "JAVA_21", + "client": [ + "CreativeModeInventoryScreenMixin", + "ItemPickerMenuMixin", + "accessor.CreativeModeInventoryScreenAccess", + "accessor.AbstractContainerScreenAccess" + ], + "mixins": [ + "CreativeModeTabMixin" + ], + "injectors": { + "defaultRequire": 1 + } +} diff --git a/src/main/scala/li/cil/oc/Constants.scala b/src/main/scala/li/cil/oc/Constants.scala index 732fbeac88..0b80639821 100644 --- a/src/main/scala/li/cil/oc/Constants.scala +++ b/src/main/scala/li/cil/oc/Constants.scala @@ -3,6 +3,13 @@ package li.cil.oc import li.cil.oc.util.ItemUtils object Constants { + object SectionName { + final val Component = "25_components" + final val Tools = "49_tools" + final val Materials = "50_materials" + final val Upgrade = "80_upgrade" + final val Misc = "99_misc" + } object BlockName { final val Adapter = "adapter" diff --git a/src/main/scala/li/cil/oc/CreativeTab.scala b/src/main/scala/li/cil/oc/CreativeTab.scala index 78b7c6c465..20aeaa32c7 100644 --- a/src/main/scala/li/cil/oc/CreativeTab.scala +++ b/src/main/scala/li/cil/oc/CreativeTab.scala @@ -4,16 +4,14 @@ import li.cil.oc.common.init.OCItems import net.minecraft.core.registries.Registries import net.minecraft.network.chat.Component import net.minecraft.world.item.{CreativeModeTab, CreativeModeTabs} -import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent import net.neoforged.bus.api.SubscribeEvent -import net.neoforged.neoforge.registries.{DeferredRegister, DeferredHolder} -import li.cil.oc.integration.opencomputers.ModOpenComputers -import li.cil.oc.common.openprinter.OpenPrinter +import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent +import net.neoforged.neoforge.registries.{DeferredHolder, DeferredRegister} object CreativeTab { val CREATIVE_TABS: DeferredRegister[CreativeModeTab] = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, OpenComputers.ID) - + var CURRENT_ROW = 0 val MAIN: DeferredHolder[CreativeModeTab, CreativeModeTab] = CREATIVE_TABS.register("main", () => CreativeModeTab.builder() .title(Component.translatable(s"itemGroup.${OpenComputers.Name}")) @@ -23,11 +21,8 @@ object CreativeTab { @SubscribeEvent def onBuildContents(event: BuildCreativeModeTabContentsEvent): Unit = { - if (event.getTabKey == MAIN.getKey) { - OCItems.decorateCreativeTab(event, ModOpenComputers.hasRedstoneCardT2) - OpenPrinter.addCreativeItems(event) - } else if (event.getTabKey == CreativeModeTabs.TOOLS_AND_UTILITIES) { + if (event.getTabKey == CreativeModeTabs.TOOLS_AND_UTILITIES) { event.accept(OCItems.createChargedHoverBoots()) } } -} \ No newline at end of file +} diff --git a/src/main/scala/li/cil/oc/common/Loot.scala b/src/main/scala/li/cil/oc/common/Loot.scala index 2cb70c5227..cb179641ab 100644 --- a/src/main/scala/li/cil/oc/common/Loot.scala +++ b/src/main/scala/li/cil/oc/common/Loot.scala @@ -81,10 +81,10 @@ object Loot { if (disksForSampling.nonEmpty) Some(disksForSampling(rng.nextInt(disksForSampling.length))) else None - def registerLootDisk(name: String, loc: ResourceLocation, color: DyeColor, factory: Callable[FileSystem], doRecipeCycling: Boolean): ItemStack = { + def registerLootDisk(display_name:String, name: String, loc: ResourceLocation, color: DyeColor, factory: Callable[FileSystem], doRecipeCycling: Boolean): ItemStack = { val stack = OCItems.get(Constants.ItemName.Floppy).createItemStack(1) stack.set(OCComponents.LABEL, name) - stack.set(DataComponents.CUSTOM_NAME, Component.literal(name)) + stack.set(DataComponents.CUSTOM_NAME, Component.literal(display_name)) stack.set(OCComponents.LOOT_DISK, loc) stack.set(OCComponents.DISK_COLOR, color) @@ -212,7 +212,7 @@ object Loot { datapackPreviousFactories.getOrElseUpdate(id, factories.get(id)) datapackFactories += id -> factory val hadCyclingDisk = disksForCyclingServer.exists(_.get(OCComponents.LOOT_DISK.get()) == id) - val stack = registerLootDisk(label, id, color, factory, recipeCycling) + val stack = registerLootDisk(label, label, id, color, factory, recipeCycling) datapackDisks += ((stack, weight)) if (recipeCycling && !hadCyclingDisk) datapackCyclingDisks += stack } @@ -269,7 +269,7 @@ object Loot { val root = "opencomputers/eeproms/" + id.getPath val code = readEEPROMResource(json, "code", id, root, manager) val data = readEEPROMResource(json, "data", id, root, manager) - val stack = OCItems.createEEPROM(label, code.orNull, data.orNull, readonly) + val stack = OCItems.registerEEPROM(label, code.orNull, data.orNull, readonly) datapackEEPROMs += stack eepromsForServer += stack eepromsForClient += stack.copy() @@ -332,12 +332,8 @@ object Loot { } else new Callable[FileSystem] { override def call(): FileSystem = api.FileSystem.fromResource(ResourceLocation.fromNamespaceAndPath(Settings.resourceDomain, "loot/" + path)) } - val stack = registerLootDisk(path, ResourceLocation.fromNamespaceAndPath(Settings.resourceDomain, path), color.getOrElse(DyeColor.LIGHT_GRAY), callable, doRecipeCycling = true) - stack.set(DataComponents.CUSTOM_NAME, Component.literal(name)) - if (!external) { - OCItems.registerStack(stack, path) - lootDiskDescriptorIds += path - } + val stack = OCItems.registerFloppy(name, path, ResourceLocation.fromNamespaceAndPath(Settings.resourceDomain, path), color.getOrElse(DyeColor.LIGHT_GRAY), callable, doRecipeCycling = true) + lootDiskDescriptorIds += path stack } } diff --git a/src/main/scala/li/cil/oc/common/init/OCBlocks.scala b/src/main/scala/li/cil/oc/common/init/OCBlocks.scala index 34cf6e869c..5af392dbd3 100644 --- a/src/main/scala/li/cil/oc/common/init/OCBlocks.scala +++ b/src/main/scala/li/cil/oc/common/init/OCBlocks.scala @@ -18,66 +18,66 @@ object OCBlocks { private def defaultItemProps = new Item.Properties() - val Adapter: DeferredBlock[Adapter] = BLOCKS.register(Constants.BlockName.Adapter, () => Items.registerBlock(new Adapter(defaultProps), Constants.BlockName.Adapter, defaultItemProps)) - val Assembler: DeferredBlock[Assembler] = BLOCKS.register(Constants.BlockName.Assembler, () => Items.registerBlock(new Assembler(defaultProps), Constants.BlockName.Assembler, defaultItemProps)) - val Cable: DeferredBlock[Cable] = BLOCKS.register(Constants.BlockName.Cable, () => Items.registerBlock(new Cable(defaultProps), Constants.BlockName.Cable, defaultItemProps)) - val Capacitor: DeferredBlock[Capacitor] = BLOCKS.register(Constants.BlockName.Capacitor, () => Items.registerBlock(new Capacitor(defaultProps), Constants.BlockName.Capacitor, defaultItemProps)) - val CaseTier1: DeferredBlock[Case] = BLOCKS.register(Constants.BlockName.CaseTier1, () => Items.registerBlock(new Case(defaultProps, Tier.One), Constants.BlockName.CaseTier1, defaultItemProps)) - val CaseTier2: DeferredBlock[Case] = BLOCKS.register(Constants.BlockName.CaseTier2, () => Items.registerBlock(new Case(defaultProps, Tier.Two), Constants.BlockName.CaseTier2, defaultItemProps.rarity(Rarity.UNCOMMON))) - val CaseTier3: DeferredBlock[Case] = BLOCKS.register(Constants.BlockName.CaseTier3, () => Items.registerBlock(new Case(defaultProps, Tier.Three), Constants.BlockName.CaseTier3, defaultItemProps.rarity(Rarity.RARE))) - val CaseTier4: DeferredBlock[Case] = BLOCKS.register(Constants.BlockName.CaseTier4, () => Items.registerBlock(new Case(defaultProps, Tier.Four), Constants.BlockName.CaseTier4, defaultItemProps.rarity(OCRarity.LEGENDARY))) - val ChameliumBlock: DeferredBlock[ChameliumBlock] = BLOCKS.register(Constants.BlockName.ChameliumBlock, () => Items.registerBlock(new ChameliumBlock(Properties.of().mapColor(MapColor.STONE).strength(2, 5)), Constants.BlockName.ChameliumBlock, defaultItemProps)) - val Charger: DeferredBlock[Charger] = BLOCKS.register(Constants.BlockName.Charger, () => Items.registerBlock(new Charger(defaultProps), Constants.BlockName.Charger, defaultItemProps)) - val Disassembler: DeferredBlock[Disassembler] = BLOCKS.register(Constants.BlockName.Disassembler, () => Items.registerBlock(new Disassembler(defaultProps), Constants.BlockName.Disassembler, defaultItemProps)) - val DiskDrive: DeferredBlock[DiskDrive] = BLOCKS.register(Constants.BlockName.DiskDrive, () => Items.registerBlock(new DiskDrive(defaultProps), Constants.BlockName.DiskDrive, defaultItemProps)) - val Geolyzer: DeferredBlock[Geolyzer] = BLOCKS.register(Constants.BlockName.Geolyzer, () => Items.registerBlock(new Geolyzer(defaultProps), Constants.BlockName.Geolyzer, defaultItemProps)) - val HologramTier1: DeferredBlock[Hologram] = BLOCKS.register(Constants.BlockName.HologramTier1, () => Items.registerBlock(new Hologram(defaultProps, Tier.One), Constants.BlockName.HologramTier1, defaultItemProps)) - val HologramTier2: DeferredBlock[Hologram] = BLOCKS.register(Constants.BlockName.HologramTier2, () => Items.registerBlock(new Hologram(defaultProps, Tier.Two), Constants.BlockName.HologramTier2, defaultItemProps.rarity(Rarity.UNCOMMON))) - val HologramTier3: DeferredBlock[Hologram] = BLOCKS.register(Constants.BlockName.HologramTier3, () => Items.registerBlock(new Hologram(defaultProps, Tier.Three), Constants.BlockName.HologramTier3, defaultItemProps.rarity(Rarity.RARE))) - val HoloScreenTier1: DeferredBlock[HoloScreen] = BLOCKS.register(Constants.BlockName.HoloScreenTier1, () => Items.registerBlock(new HoloScreen(defaultProps.noOcclusion, Tier.One), Constants.BlockName.HoloScreenTier1, defaultItemProps)) - val HoloScreenTier2: DeferredBlock[HoloScreen] = BLOCKS.register(Constants.BlockName.HoloScreenTier2, () => Items.registerBlock(new HoloScreen(defaultProps.noOcclusion, Tier.Two), Constants.BlockName.HoloScreenTier2, defaultItemProps.rarity(Rarity.UNCOMMON))) - val HoloScreenTier3: DeferredBlock[HoloScreen] = BLOCKS.register(Constants.BlockName.HoloScreenTier3, () => Items.registerBlock(new HoloScreen(defaultProps.noOcclusion, Tier.Three), Constants.BlockName.HoloScreenTier3, defaultItemProps.rarity(Rarity.RARE))) - val HoloScreenTier4: DeferredBlock[HoloScreen] = BLOCKS.register(Constants.BlockName.HoloScreenTier4, () => Items.registerBlock(new HoloScreen(defaultProps.noOcclusion, Tier.Four), Constants.BlockName.HoloScreenTier4, defaultItemProps.rarity(OCRarity.LEGENDARY))) - val Keyboard: DeferredBlock[Keyboard] = BLOCKS.register(Constants.BlockName.Keyboard, () => Items.registerBlock(new Keyboard(Properties.of().mapColor(MapColor.STONE).strength(2, 5).noOcclusion), Constants.BlockName.Keyboard, defaultItemProps)) - val MotionSensor: DeferredBlock[MotionSensor] = BLOCKS.register(Constants.BlockName.MotionSensor, () => Items.registerBlock(new MotionSensor(defaultProps), Constants.BlockName.MotionSensor, defaultItemProps)) - val PowerConverter: DeferredBlock[PowerConverter] = BLOCKS.register(Constants.BlockName.PowerConverter, () => Items.registerBlock(new PowerConverter(defaultProps), Constants.BlockName.PowerConverter, defaultItemProps)) - val PowerDistributor: DeferredBlock[PowerDistributor] = BLOCKS.register(Constants.BlockName.PowerDistributor, () => Items.registerBlock(new PowerDistributor(defaultProps), Constants.BlockName.PowerDistributor, defaultItemProps)) - val Printer: DeferredBlock[Printer] = BLOCKS.register(Constants.BlockName.Printer, () => Items.registerBlock(new Printer(defaultProps), Constants.BlockName.Printer, defaultItemProps)) - val Raid: DeferredBlock[Raid] = BLOCKS.register(Constants.BlockName.Raid, () => Items.registerBlock(new Raid(defaultProps), Constants.BlockName.Raid, defaultItemProps)) - val Redstone: DeferredBlock[Redstone] = BLOCKS.register(Constants.BlockName.Redstone, () => Items.registerBlock(new Redstone(defaultProps), Constants.BlockName.Redstone, defaultItemProps)) - val Relay: DeferredBlock[Relay] = BLOCKS.register(Constants.BlockName.Relay, () => Items.registerBlock(new Relay(defaultProps), Constants.BlockName.Relay, defaultItemProps)) - val ScreenTier1: DeferredBlock[Screen] = BLOCKS.register(Constants.BlockName.ScreenTier1, () => Items.registerBlock(new Screen(defaultProps, Tier.One), Constants.BlockName.ScreenTier1, defaultItemProps)) - val ScreenTier2: DeferredBlock[Screen] = BLOCKS.register(Constants.BlockName.ScreenTier2, () => Items.registerBlock(new Screen(defaultProps, Tier.Two), Constants.BlockName.ScreenTier2, defaultItemProps.rarity(Rarity.UNCOMMON))) - val ScreenTier3: DeferredBlock[Screen] = BLOCKS.register(Constants.BlockName.ScreenTier3, () => Items.registerBlock(new Screen(defaultProps, Tier.Three), Constants.BlockName.ScreenTier3, defaultItemProps.rarity(Rarity.RARE))) - val ScreenTier4: DeferredBlock[Screen] = BLOCKS.register(Constants.BlockName.ScreenTier4, () => Items.registerBlock(new Screen(defaultProps, Tier.Four), Constants.BlockName.ScreenTier4, defaultItemProps.rarity(OCRarity.LEGENDARY))) - val FlatScreenBackTier1: DeferredBlock[FlatScreen] = BLOCKS.register(Constants.BlockName.FlatScreenBackTier1, () => Items.registerBlock(new FlatScreen(defaultProps.noOcclusion, Tier.One, true), Constants.BlockName.FlatScreenBackTier1, defaultItemProps)) - val FlatScreenBackTier2: DeferredBlock[FlatScreen] = BLOCKS.register(Constants.BlockName.FlatScreenBackTier2, () => Items.registerBlock(new FlatScreen(defaultProps.noOcclusion, Tier.Two, true), Constants.BlockName.FlatScreenBackTier2, defaultItemProps.rarity(Rarity.UNCOMMON))) - val FlatScreenBackTier3: DeferredBlock[FlatScreen] = BLOCKS.register(Constants.BlockName.FlatScreenBackTier3, () => Items.registerBlock(new FlatScreen(defaultProps.noOcclusion, Tier.Three, true), Constants.BlockName.FlatScreenBackTier3, defaultItemProps.rarity(Rarity.RARE))) - val FlatScreenBackTier4: DeferredBlock[FlatScreen] = BLOCKS.register(Constants.BlockName.FlatScreenBackTier4, () => Items.registerBlock(new FlatScreen(defaultProps.noOcclusion, Tier.Four, true), Constants.BlockName.FlatScreenBackTier4, defaultItemProps.rarity(OCRarity.LEGENDARY))) - val FlatScreenFrontTier1: DeferredBlock[FlatScreen] = BLOCKS.register(Constants.BlockName.FlatScreenFrontTier1, () => Items.registerBlock(new FlatScreen(defaultProps.noOcclusion, Tier.One, false), Constants.BlockName.FlatScreenFrontTier1, defaultItemProps)) - val FlatScreenFrontTier2: DeferredBlock[FlatScreen] = BLOCKS.register(Constants.BlockName.FlatScreenFrontTier2, () => Items.registerBlock(new FlatScreen(defaultProps.noOcclusion, Tier.Two, false), Constants.BlockName.FlatScreenFrontTier2, defaultItemProps.rarity(Rarity.UNCOMMON))) - val FlatScreenFrontTier3: DeferredBlock[FlatScreen] = BLOCKS.register(Constants.BlockName.FlatScreenFrontTier3, () => Items.registerBlock(new FlatScreen(defaultProps.noOcclusion, Tier.Three, false), Constants.BlockName.FlatScreenFrontTier3, defaultItemProps.rarity(Rarity.RARE))) - val FlatScreenFrontTier4: DeferredBlock[FlatScreen] = BLOCKS.register(Constants.BlockName.FlatScreenFrontTier4, () => Items.registerBlock(new FlatScreen(defaultProps.noOcclusion, Tier.Four, false), Constants.BlockName.FlatScreenFrontTier4, defaultItemProps.rarity(OCRarity.LEGENDARY))) - val Rack: DeferredBlock[Rack] = BLOCKS.register(Constants.BlockName.Rack, () => Items.registerBlock(new Rack(defaultProps), Constants.BlockName.Rack, defaultItemProps)) - val Waypoint: DeferredBlock[Waypoint] = BLOCKS.register(Constants.BlockName.Waypoint, () => Items.registerBlock(new Waypoint(defaultProps), Constants.BlockName.Waypoint, defaultItemProps)) + val Adapter: DeferredBlock[Adapter] = BLOCKS.register(Constants.BlockName.Adapter, () => Items.registerBlock(new Adapter(defaultProps), Constants.BlockName.Adapter, defaultItemProps,"25_components")) + val Assembler: DeferredBlock[Assembler] = BLOCKS.register(Constants.BlockName.Assembler, () => Items.registerBlock(new Assembler(defaultProps), Constants.BlockName.Assembler, defaultItemProps,"49_tools")) + val Cable: DeferredBlock[Cable] = BLOCKS.register(Constants.BlockName.Cable, () => Items.registerBlock(new Cable(defaultProps), Constants.BlockName.Cable, defaultItemProps,"10_networking")) + val Capacitor: DeferredBlock[Capacitor] = BLOCKS.register(Constants.BlockName.Capacitor, () => Items.registerBlock(new Capacitor(defaultProps), Constants.BlockName.Capacitor, defaultItemProps,"10_networking")) + val CaseTier1: DeferredBlock[Case] = BLOCKS.register(Constants.BlockName.CaseTier1, () => Items.registerBlock(new Case(defaultProps, Tier.One), Constants.BlockName.CaseTier1, defaultItemProps,"25_components")) + val CaseTier2: DeferredBlock[Case] = BLOCKS.register(Constants.BlockName.CaseTier2, () => Items.registerBlock(new Case(defaultProps, Tier.Two), Constants.BlockName.CaseTier2, defaultItemProps.rarity(Rarity.UNCOMMON),"25_components")) + val CaseTier3: DeferredBlock[Case] = BLOCKS.register(Constants.BlockName.CaseTier3, () => Items.registerBlock(new Case(defaultProps, Tier.Three), Constants.BlockName.CaseTier3, defaultItemProps.rarity(Rarity.RARE),"25_components")) + val CaseTier4: DeferredBlock[Case] = BLOCKS.register(Constants.BlockName.CaseTier4, () => Items.registerBlock(new Case(defaultProps, Tier.Four), Constants.BlockName.CaseTier4, defaultItemProps.rarity(OCRarity.LEGENDARY),"25_components")) + val CaseCreative: DeferredBlock[Case] = BLOCKS.register(Constants.BlockName.CaseCreative, () => Items.registerBlock(new Case(defaultProps, Tier.Five), Constants.BlockName.CaseCreative, defaultItemProps.rarity(Rarity.EPIC),"25_components")) + val ChameliumBlock: DeferredBlock[ChameliumBlock] = BLOCKS.register(Constants.BlockName.ChameliumBlock, () => Items.registerBlock(new ChameliumBlock(Properties.of().mapColor(MapColor.STONE).strength(2, 5)), Constants.BlockName.ChameliumBlock, defaultItemProps,"50_materials")) + val Charger: DeferredBlock[Charger] = BLOCKS.register(Constants.BlockName.Charger, () => Items.registerBlock(new Charger(defaultProps), Constants.BlockName.Charger, defaultItemProps,"10_networking")) + val Disassembler: DeferredBlock[Disassembler] = BLOCKS.register(Constants.BlockName.Disassembler, () => Items.registerBlock(new Disassembler(defaultProps), Constants.BlockName.Disassembler, defaultItemProps,"49_tools")) + val DiskDrive: DeferredBlock[DiskDrive] = BLOCKS.register(Constants.BlockName.DiskDrive, () => Items.registerBlock(new DiskDrive(defaultProps), Constants.BlockName.DiskDrive, defaultItemProps,"25_components")) + val Geolyzer: DeferredBlock[Geolyzer] = BLOCKS.register(Constants.BlockName.Geolyzer, () => Items.registerBlock(new Geolyzer(defaultProps), Constants.BlockName.Geolyzer, defaultItemProps,"25_components")) + val HologramTier1: DeferredBlock[Hologram] = BLOCKS.register(Constants.BlockName.HologramTier1, () => Items.registerBlock(new Hologram(defaultProps, Tier.One), Constants.BlockName.HologramTier1, defaultItemProps,"25_components")) + val HologramTier2: DeferredBlock[Hologram] = BLOCKS.register(Constants.BlockName.HologramTier2, () => Items.registerBlock(new Hologram(defaultProps, Tier.Two), Constants.BlockName.HologramTier2, defaultItemProps.rarity(Rarity.UNCOMMON),"25_components")) + val HologramTier3: DeferredBlock[Hologram] = BLOCKS.register(Constants.BlockName.HologramTier3, () => Items.registerBlock(new Hologram(defaultProps, Tier.Three), Constants.BlockName.HologramTier3, defaultItemProps.rarity(Rarity.RARE),"25_components")) + val HoloScreenTier1: DeferredBlock[HoloScreen] = BLOCKS.register(Constants.BlockName.HoloScreenTier1, () => Items.registerBlock(new HoloScreen(defaultProps.noOcclusion, Tier.One), Constants.BlockName.HoloScreenTier1, defaultItemProps,"25_components")) + val HoloScreenTier2: DeferredBlock[HoloScreen] = BLOCKS.register(Constants.BlockName.HoloScreenTier2, () => Items.registerBlock(new HoloScreen(defaultProps.noOcclusion, Tier.Two), Constants.BlockName.HoloScreenTier2, defaultItemProps.rarity(Rarity.UNCOMMON),"25_components")) + val HoloScreenTier3: DeferredBlock[HoloScreen] = BLOCKS.register(Constants.BlockName.HoloScreenTier3, () => Items.registerBlock(new HoloScreen(defaultProps.noOcclusion, Tier.Three), Constants.BlockName.HoloScreenTier3, defaultItemProps.rarity(Rarity.RARE),"25_components")) + val HoloScreenTier4: DeferredBlock[HoloScreen] = BLOCKS.register(Constants.BlockName.HoloScreenTier4, () => Items.registerBlock(new HoloScreen(defaultProps.noOcclusion, Tier.Four), Constants.BlockName.HoloScreenTier4, defaultItemProps.rarity(OCRarity.LEGENDARY),"25_components")) + val Keyboard: DeferredBlock[Keyboard] = BLOCKS.register(Constants.BlockName.Keyboard, () => Items.registerBlock(new Keyboard(Properties.of().mapColor(MapColor.STONE).strength(2, 5).noOcclusion), Constants.BlockName.Keyboard, defaultItemProps,"25_components")) + val MotionSensor: DeferredBlock[MotionSensor] = BLOCKS.register(Constants.BlockName.MotionSensor, () => Items.registerBlock(new MotionSensor(defaultProps), Constants.BlockName.MotionSensor, defaultItemProps,"25_components")) + val PowerConverter: DeferredBlock[PowerConverter] = BLOCKS.register(Constants.BlockName.PowerConverter, () => Items.registerBlock(new PowerConverter(defaultProps), Constants.BlockName.PowerConverter, defaultItemProps,"10_networking")) + val PowerDistributor: DeferredBlock[PowerDistributor] = BLOCKS.register(Constants.BlockName.PowerDistributor, () => Items.registerBlock(new PowerDistributor(defaultProps), Constants.BlockName.PowerDistributor, defaultItemProps,"10_networking")) + val Printer: DeferredBlock[Printer] = BLOCKS.register(Constants.BlockName.Printer, () => Items.registerBlock(new Printer(defaultProps), Constants.BlockName.Printer, defaultItemProps,"25_components")) + val Raid: DeferredBlock[Raid] = BLOCKS.register(Constants.BlockName.Raid, () => Items.registerBlock(new Raid(defaultProps), Constants.BlockName.Raid, defaultItemProps,"25_components")) + val Redstone: DeferredBlock[Redstone] = BLOCKS.register(Constants.BlockName.Redstone, () => Items.registerBlock(new Redstone(defaultProps), Constants.BlockName.Redstone, defaultItemProps,"25_components")) + val Relay: DeferredBlock[Relay] = BLOCKS.register(Constants.BlockName.Relay, () => Items.registerBlock(new Relay(defaultProps), Constants.BlockName.Relay, defaultItemProps,"10_networking")) + val ScreenTier1: DeferredBlock[Screen] = BLOCKS.register(Constants.BlockName.ScreenTier1, () => Items.registerBlock(new Screen(defaultProps, Tier.One), Constants.BlockName.ScreenTier1, defaultItemProps,"25_components")) + val ScreenTier2: DeferredBlock[Screen] = BLOCKS.register(Constants.BlockName.ScreenTier2, () => Items.registerBlock(new Screen(defaultProps, Tier.Two), Constants.BlockName.ScreenTier2, defaultItemProps.rarity(Rarity.UNCOMMON),"25_components")) + val ScreenTier3: DeferredBlock[Screen] = BLOCKS.register(Constants.BlockName.ScreenTier3, () => Items.registerBlock(new Screen(defaultProps, Tier.Three), Constants.BlockName.ScreenTier3, defaultItemProps.rarity(Rarity.RARE),"25_components")) + val ScreenTier4: DeferredBlock[Screen] = BLOCKS.register(Constants.BlockName.ScreenTier4, () => Items.registerBlock(new Screen(defaultProps, Tier.Four), Constants.BlockName.ScreenTier4, defaultItemProps.rarity(OCRarity.LEGENDARY),"25_components")) + val FlatScreenBackTier1: DeferredBlock[FlatScreen] = BLOCKS.register(Constants.BlockName.FlatScreenBackTier1, () => Items.registerBlock(new FlatScreen(defaultProps.noOcclusion, Tier.One, true), Constants.BlockName.FlatScreenBackTier1, defaultItemProps,"25_components")) + val FlatScreenBackTier2: DeferredBlock[FlatScreen] = BLOCKS.register(Constants.BlockName.FlatScreenBackTier2, () => Items.registerBlock(new FlatScreen(defaultProps.noOcclusion, Tier.Two, true), Constants.BlockName.FlatScreenBackTier2, defaultItemProps.rarity(Rarity.UNCOMMON),"25_components")) + val FlatScreenBackTier3: DeferredBlock[FlatScreen] = BLOCKS.register(Constants.BlockName.FlatScreenBackTier3, () => Items.registerBlock(new FlatScreen(defaultProps.noOcclusion, Tier.Three, true), Constants.BlockName.FlatScreenBackTier3, defaultItemProps.rarity(Rarity.RARE),"25_components")) + val FlatScreenBackTier4: DeferredBlock[FlatScreen] = BLOCKS.register(Constants.BlockName.FlatScreenBackTier4, () => Items.registerBlock(new FlatScreen(defaultProps.noOcclusion, Tier.Four, true), Constants.BlockName.FlatScreenBackTier4, defaultItemProps.rarity(OCRarity.LEGENDARY),"25_components")) + val FlatScreenFrontTier1: DeferredBlock[FlatScreen] = BLOCKS.register(Constants.BlockName.FlatScreenFrontTier1, () => Items.registerBlock(new FlatScreen(defaultProps.noOcclusion, Tier.One, false), Constants.BlockName.FlatScreenFrontTier1, defaultItemProps,"25_components")) + val FlatScreenFrontTier2: DeferredBlock[FlatScreen] = BLOCKS.register(Constants.BlockName.FlatScreenFrontTier2, () => Items.registerBlock(new FlatScreen(defaultProps.noOcclusion, Tier.Two, false), Constants.BlockName.FlatScreenFrontTier2, defaultItemProps.rarity(Rarity.UNCOMMON),"25_components")) + val FlatScreenFrontTier3: DeferredBlock[FlatScreen] = BLOCKS.register(Constants.BlockName.FlatScreenFrontTier3, () => Items.registerBlock(new FlatScreen(defaultProps.noOcclusion, Tier.Three, false), Constants.BlockName.FlatScreenFrontTier3, defaultItemProps.rarity(Rarity.RARE),"25_components")) + val FlatScreenFrontTier4: DeferredBlock[FlatScreen] = BLOCKS.register(Constants.BlockName.FlatScreenFrontTier4, () => Items.registerBlock(new FlatScreen(defaultProps.noOcclusion, Tier.Four, false), Constants.BlockName.FlatScreenFrontTier4, defaultItemProps.rarity(OCRarity.LEGENDARY),"25_components")) + val Rack: DeferredBlock[Rack] = BLOCKS.register(Constants.BlockName.Rack, () => Items.registerBlock(new Rack(defaultProps), Constants.BlockName.Rack, defaultItemProps,"10_networking")) + val Waypoint: DeferredBlock[Waypoint] = BLOCKS.register(Constants.BlockName.Waypoint, () => Items.registerBlock(new Waypoint(defaultProps), Constants.BlockName.Waypoint, defaultItemProps,"25_components")) - val CaseCreative: DeferredBlock[Case] = BLOCKS.register(Constants.BlockName.CaseCreative, () => Items.registerBlock(new Case(defaultProps, Tier.Five), Constants.BlockName.CaseCreative, defaultItemProps.rarity(Rarity.EPIC))) - val Microcontroller: DeferredBlock[Microcontroller] = BLOCKS.register(Constants.BlockName.Microcontroller, () => Items.registerBlock(new Microcontroller(defaultProps), Constants.BlockName.Microcontroller, new Item.Properties())) - val Print: DeferredBlock[Print] = BLOCKS.register(Constants.BlockName.Print, () => Items.registerBlock(new Print(Properties.of().mapColor(MapColor.METAL).strength(1, 5).noOcclusion.dynamicShape), Constants.BlockName.Print, new Item.Properties())) + val Microcontroller: DeferredBlock[Microcontroller] = BLOCKS.register(Constants.BlockName.Microcontroller, () => Items.registerBlock(new Microcontroller(defaultProps), Constants.BlockName.Microcontroller, new Item.Properties(),"25_components")) + val Print: DeferredBlock[Print] = BLOCKS.register(Constants.BlockName.Print, () => Items.registerBlock(new Print(Properties.of().mapColor(MapColor.METAL).strength(1, 5).noOcclusion.dynamicShape), Constants.BlockName.Print, new Item.Properties(),"25_components")) val RobotAfterimage: DeferredBlock[RobotAfterimage] = BLOCKS.register(Constants.BlockName.RobotAfterimage, () => Items.registerBlockOnly(new RobotAfterimage(Properties.of().mapColor(MapColor.NONE).noCollission.instabreak.noOcclusion.dynamicShape), Constants.BlockName.RobotAfterimage)) - val Robot: DeferredBlock[RobotProxy] = BLOCKS.register(Constants.BlockName.Robot, () => Items.registerBlock(new RobotProxy(defaultProps.noOcclusion.dynamicShape), Constants.BlockName.Robot, new Item.Properties())) + val Robot: DeferredBlock[RobotProxy] = BLOCKS.register(Constants.BlockName.Robot, () => Items.registerBlock(new RobotProxy(defaultProps.noOcclusion.dynamicShape), Constants.BlockName.Robot, new Item.Properties(),"25_components")) // v1.5.10 - val Endstone: DeferredBlock[FakeEndstone] = BLOCKS.register(Constants.BlockName.Endstone, () => Items.registerBlock(new FakeEndstone(Properties.of().mapColor(MapColor.STONE).strength(3, 15)), Constants.BlockName.Endstone, defaultItemProps)) + val Endstone: DeferredBlock[FakeEndstone] = BLOCKS.register(Constants.BlockName.Endstone, () => Items.registerBlock(new FakeEndstone(Properties.of().mapColor(MapColor.STONE).strength(3, 15)), Constants.BlockName.Endstone, defaultItemProps,"50_materials")) // v1.5.14 - val NetSplitter: DeferredBlock[NetSplitter] = BLOCKS.register(Constants.BlockName.NetSplitter, () => Items.registerBlock(new NetSplitter(defaultProps), Constants.BlockName.NetSplitter, defaultItemProps)) + val NetSplitter: DeferredBlock[NetSplitter] = BLOCKS.register(Constants.BlockName.NetSplitter, () => Items.registerBlock(new NetSplitter(defaultProps), Constants.BlockName.NetSplitter, defaultItemProps,"10_networking")) // v1.5.16 - val Transposer: DeferredBlock[Transposer] = BLOCKS.register(Constants.BlockName.Transposer, () => Items.registerBlock(new Transposer(defaultProps), Constants.BlockName.Transposer, defaultItemProps)) + val Transposer: DeferredBlock[Transposer] = BLOCKS.register(Constants.BlockName.Transposer, () => Items.registerBlock(new Transposer(defaultProps), Constants.BlockName.Transposer, defaultItemProps,"25_components")) // v1.7.2 - val CarpetedCapacitor: DeferredBlock[CarpetedCapacitor] = BLOCKS.register(Constants.BlockName.CarpetedCapacitor, () => Items.registerBlock(new CarpetedCapacitor(defaultProps), Constants.BlockName.CarpetedCapacitor, defaultItemProps)) + val CarpetedCapacitor: DeferredBlock[CarpetedCapacitor] = BLOCKS.register(Constants.BlockName.CarpetedCapacitor, () => Items.registerBlock(new CarpetedCapacitor(defaultProps), Constants.BlockName.CarpetedCapacitor, defaultItemProps,"10_networking")) def init(bus: IEventBus): Unit = { BLOCKS.register(bus) diff --git a/src/main/scala/li/cil/oc/common/init/OCItems.scala b/src/main/scala/li/cil/oc/common/init/OCItems.scala index 25b75158bc..be64c61848 100644 --- a/src/main/scala/li/cil/oc/common/init/OCItems.scala +++ b/src/main/scala/li/cil/oc/common/init/OCItems.scala @@ -1,12 +1,15 @@ package li.cil.oc.common.init +import codechicken.lib.gui.modular.lib.geometry.Position.Mutable import li.cil.oc.api.detail.{ItemAPI, ItemInfo} import li.cil.oc.api.fs.FileSystem import li.cil.oc.common.block.SimpleBlock import li.cil.oc.common.datacomponents.OCComponents import li.cil.oc.common.item.data._ import li.cil.oc.common.item.traits.SimpleItem +import li.cil.oc.common.openprinter.OpenPrinter import li.cil.oc.common.{Loot, Tier, item} +import li.cil.oc.integration.opencomputers.ModOpenComputers import li.cil.oc.server.machine.luac.LuaStateFactory import li.cil.oc.util.{Rarity => OCRarity} import li.cil.oc.{Constants, OpenComputers, Settings, common} @@ -21,11 +24,16 @@ import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent import net.neoforged.neoforge.registries.{DeferredItem, DeferredRegister, RegisterEvent} import java.nio.ByteBuffer +import java.util import java.util.concurrent.Callable +import java.util.function.Consumer import scala.collection.mutable import scala.collection.mutable.ArrayBuffer +import scala.jdk.CollectionConverters.CollectionHasAsScala object OCItems extends ItemAPI { + val ITEM_TO_SECTION = new mutable.HashMap[String, String] + val SECTION_Y_VALUES = new mutable.HashMap[String, Int] private val ITEMS: DeferredRegister.Items = DeferredRegister.createItems(Settings.resourceDomain) val descriptors = mutable.LinkedHashMap.empty[String, ItemInfo] @@ -68,12 +76,13 @@ object OCItems extends ItemAPI { instance } - def registerBlock[T <: Block](instance: T, id: String, itemProps: Properties): T = { + def registerBlock[T <: Block](instance: T, id: String, itemProps: Properties, section_id: String= null): T = { if (!descriptors.contains(id)) { instance match { case simple: SimpleBlock => simple.setUnlocalizedName("oc." + id) + if (section_id != null) ITEM_TO_SECTION.put(id, section_id); val ro: DeferredItem[Item] = ITEMS.register(id, () => new common.block.Item(simple, itemProps)) descriptors += id -> new ItemInfo { @@ -95,10 +104,12 @@ object OCItems extends ItemAPI { instance } - def registerItem[T <: Item](makeItem: => T, id: String): DeferredItem[T] = { + def registerItem[T <: Item](makeItem: => T, id: String, section_id: String= null): DeferredItem[T] = { if (descriptors.contains(id)) { throw new IllegalArgumentException("Duplicate item " + id) } + + if (section_id != null) ITEM_TO_SECTION.put(id, section_id); // Construct items inside the supplier while the registry is writable. val ro: DeferredItem[T] = ITEMS.register(id, () => { val instance = makeItem @@ -120,12 +131,13 @@ object OCItems extends ItemAPI { ro } - private def registerBasicItem(id: String, props: Item.Properties = defaultProps): DeferredItem[Item] = registerItem(new item.BasicItem(props, id), id) + private def registerBasicItem(id: String, section_id: String, props: Item.Properties = defaultProps): DeferredItem[Item] = registerItem(new item.BasicItem(props, id), id, section_id) - private def registerBasicTieredItem(id: String, props: Item.Properties): DeferredItem[Item] = registerItem(new item.BasicTieredItem(props, id), id) + private def registerBasicTieredItem(id: String, section_id: String, props: Item.Properties): DeferredItem[Item] = registerItem(new item.BasicTieredItem(props, id), id, section_id) - def registerStack(stack: ItemStack, id: String): ItemStack = { + def registerStack(stack: ItemStack, id: String, section_id: String = null): ItemStack = { val immutableStack = stack.copy() + if (section_id != null) ITEM_TO_SECTION.put(id, section_id); descriptors += id -> new ItemInfo { override def name: String = id @@ -151,19 +163,15 @@ object OCItems extends ItemAPI { // ----------------------------------------------------------------------- // - private val registeredItems: ArrayBuffer[ItemStack] = mutable.ArrayBuffer.empty[ItemStack] - - override def registerFloppy(name: String, loc: ResourceLocation, color: DyeColor, factory: Callable[FileSystem], doRecipeCycling: Boolean): ItemStack = { - val stack = Loot.registerLootDisk(name, loc, color, factory, doRecipeCycling) - - registeredItems += stack - + override def registerFloppy(display_name:String, name: String, loc: ResourceLocation, color: DyeColor, factory: Callable[FileSystem], doRecipeCycling: Boolean): ItemStack = { + val stack = Loot.registerLootDisk(display_name, name, loc, color, factory, doRecipeCycling) + OCItems.registerStack(stack, name, null) stack.copy() } override def registerEEPROM(name: String, code: Array[Byte], data: Array[Byte], readonly: Boolean): ItemStack = { val stack = createEEPROM(name, code, data, readonly) - registeredItems += stack + OCItems.registerStack(stack, name, null) stack.copy() } @@ -337,184 +345,184 @@ object OCItems extends ItemAPI { ///////////////////////////////////////////////////////////////// // Crafting materials. ///////////////////////////////////////////////////////////////// - val CuttingWire: DeferredItem[Item] = registerBasicItem(Constants.ItemName.CuttingWire) - val Acid: DeferredItem[item.Acid] = registerItem(new item.Acid(defaultProps), Constants.ItemName.Acid) - val RawCircuitBoard: DeferredItem[Item] = registerBasicItem(Constants.ItemName.RawCircuitBoard) - val CircuitBoard: DeferredItem[Item] = registerBasicItem(Constants.ItemName.CircuitBoard) - val PrintedCircuitBoard: DeferredItem[Item] = registerBasicItem(Constants.ItemName.PrintedCircuitBoard) - val Card: DeferredItem[Item] = registerItem(new item.BasicItem(defaultProps, "cardbase"), Constants.ItemName.Card) - val Transistor: DeferredItem[Item] = registerBasicItem(Constants.ItemName.Transistor) - val ChipTier1: DeferredItem[item.Microchip] = registerItem(new item.Microchip(defaultProps, Tier.One), Constants.ItemName.ChipTier1) - val ChipTier2: DeferredItem[item.Microchip] = registerItem(new item.Microchip(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.ChipTier2) - val ChipTier3: DeferredItem[item.Microchip] = registerItem(new item.Microchip(defaultProps.rarity(Rarity.RARE), Tier.Three), Constants.ItemName.ChipTier3) - val ChipTier4: DeferredItem[item.Microchip] = registerItem(new item.Microchip(defaultProps.rarity(OCRarity.LEGENDARY), Tier.Four), Constants.ItemName.ChipTier4) - val Alu: DeferredItem[Item] = registerBasicItem(Constants.ItemName.Alu) - val ControlUnit: DeferredItem[Item] = registerItem(new item.BasicItem(defaultProps, "controlunit"), Constants.ItemName.ControlUnit) - val Disk: DeferredItem[Item] = registerBasicItem(Constants.ItemName.Disk) - val Interweb: DeferredItem[Item] = registerBasicItem(Constants.ItemName.Interweb) - val ButtonGroup: DeferredItem[Item] = registerBasicItem(Constants.ItemName.ButtonGroup, defaultProps) - val ArrowKeys: DeferredItem[Item] = registerBasicItem(Constants.ItemName.ArrowKeys) - val NumPad: DeferredItem[Item] = registerBasicItem(Constants.ItemName.NumPad) - - val TabletCaseTier1: DeferredItem[item.TabletCase] = registerItem(new item.TabletCase(defaultProps, Tier.One), Constants.ItemName.TabletCaseTier1) - val TabletCaseTier2: DeferredItem[item.TabletCase] = registerItem(new item.TabletCase(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.TabletCaseTier2) - val TabletCaseTier3: DeferredItem[item.TabletCase] = registerItem(new item.TabletCase(defaultProps.rarity(Rarity.RARE), Tier.Three), Constants.ItemName.TabletCaseTier3) - val TabletCaseCreative: DeferredItem[item.TabletCase] = registerItem(new item.TabletCase(defaultProps.rarity(Rarity.EPIC), Tier.Five), Constants.ItemName.TabletCaseCreative) - val MicrocontrollerCaseTier1: DeferredItem[item.MicrocontrollerCase] = registerItem(new item.MicrocontrollerCase(defaultProps, Tier.One), Constants.ItemName.MicrocontrollerCaseTier1) - val MicrocontrollerCaseTier2: DeferredItem[item.MicrocontrollerCase] = registerItem(new item.MicrocontrollerCase(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.MicrocontrollerCaseTier2) - val MicrocontrollerCaseTier3: DeferredItem[item.MicrocontrollerCase] = registerItem(new item.MicrocontrollerCase(defaultProps.rarity(Rarity.RARE), Tier.Three), Constants.ItemName.MicrocontrollerCaseTier3) - val MicrocontrollerCaseCreative: DeferredItem[item.MicrocontrollerCase] = registerItem(new item.MicrocontrollerCase(defaultProps.rarity(Rarity.EPIC), Tier.Five), Constants.ItemName.MicrocontrollerCaseCreative) - val DroneCaseTier1: DeferredItem[item.DroneCase] = registerItem(new item.DroneCase(defaultProps, Tier.One), Constants.ItemName.DroneCaseTier1) - val DroneCaseTier2: DeferredItem[item.DroneCase] = registerItem(new item.DroneCase(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.DroneCaseTier2) - val DroneCaseTier3: DeferredItem[item.DroneCase] = registerItem(new item.DroneCase(defaultProps.rarity(OCRarity.LEGENDARY), Tier.Three), Constants.ItemName.DroneCaseTier3) - val DroneCaseCreative: DeferredItem[item.DroneCase] = registerItem(new item.DroneCase(defaultProps.rarity(Rarity.EPIC), Tier.Five), Constants.ItemName.DroneCaseCreative) - - val InkCartridgeEmpty: DeferredItem[Item] = registerBasicItem(Constants.ItemName.InkCartridgeEmpty, defaultProps.stacksTo(1)) - val InkCartridge: DeferredItem[item.InkCartridge] = registerItem(new item.InkCartridge(defaultProps.stacksTo(1)), Constants.ItemName.InkCartridge) - val Chamelium: DeferredItem[item.Chamelium] = registerItem(new item.Chamelium(defaultProps), Constants.ItemName.Chamelium) - - val DiamondChip: DeferredItem[Item] = registerItem(new item.BasicItem(defaultProps, "diamondchip"), Constants.ItemName.DiamondChip) - val NetheriteSilicon: DeferredItem[Item] = registerBasicItem(Constants.ItemName.NetheriteSilicon, defaultProps) + val CuttingWire: DeferredItem[Item] = registerBasicItem(Constants.ItemName.CuttingWire, Constants.SectionName.Materials) + val Acid: DeferredItem[item.Acid] = registerItem(new item.Acid(defaultProps), Constants.ItemName.Acid, Constants.SectionName.Materials) + val RawCircuitBoard: DeferredItem[Item] = registerBasicItem(Constants.ItemName.RawCircuitBoard, Constants.SectionName.Materials) + val CircuitBoard: DeferredItem[Item] = registerBasicItem(Constants.ItemName.CircuitBoard, Constants.SectionName.Materials) + val PrintedCircuitBoard: DeferredItem[Item] = registerBasicItem(Constants.ItemName.PrintedCircuitBoard, Constants.SectionName.Materials) + val Card: DeferredItem[Item] = registerItem(new item.BasicItem(defaultProps, "cardbase"), Constants.ItemName.Card, Constants.SectionName.Materials) + val Transistor: DeferredItem[Item] = registerBasicItem(Constants.ItemName.Transistor, Constants.SectionName.Materials) + val ChipTier1: DeferredItem[item.Microchip] = registerItem(new item.Microchip(defaultProps, Tier.One), Constants.ItemName.ChipTier1, Constants.SectionName.Materials) + val ChipTier2: DeferredItem[item.Microchip] = registerItem(new item.Microchip(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.ChipTier2, Constants.SectionName.Materials) + val ChipTier3: DeferredItem[item.Microchip] = registerItem(new item.Microchip(defaultProps.rarity(Rarity.RARE), Tier.Three), Constants.ItemName.ChipTier3, Constants.SectionName.Materials) + val ChipTier4: DeferredItem[item.Microchip] = registerItem(new item.Microchip(defaultProps.rarity(OCRarity.LEGENDARY), Tier.Four), Constants.ItemName.ChipTier4, Constants.SectionName.Materials) + val Alu: DeferredItem[Item] = registerBasicItem(Constants.ItemName.Alu, Constants.SectionName.Materials) + val ControlUnit: DeferredItem[Item] = registerItem(new item.BasicItem(defaultProps, "controlunit"), Constants.ItemName.ControlUnit, Constants.SectionName.Materials) + val Disk: DeferredItem[Item] = registerBasicItem(Constants.ItemName.Disk, Constants.SectionName.Materials) + val Interweb: DeferredItem[Item] = registerBasicItem(Constants.ItemName.Interweb, Constants.SectionName.Materials) + val ButtonGroup: DeferredItem[Item] = registerBasicItem(Constants.ItemName.ButtonGroup, Constants.SectionName.Materials, defaultProps) + val ArrowKeys: DeferredItem[Item] = registerBasicItem(Constants.ItemName.ArrowKeys, Constants.SectionName.Materials) + val NumPad: DeferredItem[Item] = registerBasicItem(Constants.ItemName.NumPad, Constants.SectionName.Materials) + + val TabletCaseTier1: DeferredItem[item.TabletCase] = registerItem(new item.TabletCase(defaultProps, Tier.One), Constants.ItemName.TabletCaseTier1, Constants.SectionName.Materials) + val TabletCaseTier2: DeferredItem[item.TabletCase] = registerItem(new item.TabletCase(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.TabletCaseTier2, Constants.SectionName.Materials) + val TabletCaseTier3: DeferredItem[item.TabletCase] = registerItem(new item.TabletCase(defaultProps.rarity(Rarity.RARE), Tier.Three), Constants.ItemName.TabletCaseTier3, Constants.SectionName.Materials) + val TabletCaseCreative: DeferredItem[item.TabletCase] = registerItem(new item.TabletCase(defaultProps.rarity(Rarity.EPIC), Tier.Five), Constants.ItemName.TabletCaseCreative, Constants.SectionName.Materials) + val MicrocontrollerCaseTier1: DeferredItem[item.MicrocontrollerCase] = registerItem(new item.MicrocontrollerCase(defaultProps, Tier.One), Constants.ItemName.MicrocontrollerCaseTier1, Constants.SectionName.Materials) + val MicrocontrollerCaseTier2: DeferredItem[item.MicrocontrollerCase] = registerItem(new item.MicrocontrollerCase(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.MicrocontrollerCaseTier2, Constants.SectionName.Materials) + val MicrocontrollerCaseTier3: DeferredItem[item.MicrocontrollerCase] = registerItem(new item.MicrocontrollerCase(defaultProps.rarity(Rarity.RARE), Tier.Three), Constants.ItemName.MicrocontrollerCaseTier3, Constants.SectionName.Materials) + val MicrocontrollerCaseCreative: DeferredItem[item.MicrocontrollerCase] = registerItem(new item.MicrocontrollerCase(defaultProps.rarity(Rarity.EPIC), Tier.Five), Constants.ItemName.MicrocontrollerCaseCreative, Constants.SectionName.Materials) + val DroneCaseTier1: DeferredItem[item.DroneCase] = registerItem(new item.DroneCase(defaultProps, Tier.One), Constants.ItemName.DroneCaseTier1, Constants.SectionName.Materials) + val DroneCaseTier2: DeferredItem[item.DroneCase] = registerItem(new item.DroneCase(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.DroneCaseTier2, Constants.SectionName.Materials) + val DroneCaseTier3: DeferredItem[item.DroneCase] = registerItem(new item.DroneCase(defaultProps.rarity(OCRarity.LEGENDARY), Tier.Three), Constants.ItemName.DroneCaseTier3, Constants.SectionName.Materials) + val DroneCaseCreative: DeferredItem[item.DroneCase] = registerItem(new item.DroneCase(defaultProps.rarity(Rarity.EPIC), Tier.Five), Constants.ItemName.DroneCaseCreative, Constants.SectionName.Materials) + + val InkCartridgeEmpty: DeferredItem[Item] = registerBasicItem(Constants.ItemName.InkCartridgeEmpty, Constants.SectionName.Materials, defaultProps.stacksTo(1)) + val InkCartridge: DeferredItem[item.InkCartridge] = registerItem(new item.InkCartridge(defaultProps.stacksTo(1)), Constants.ItemName.InkCartridge, Constants.SectionName.Materials) + val Chamelium: DeferredItem[item.Chamelium] = registerItem(new item.Chamelium(defaultProps), Constants.ItemName.Chamelium, Constants.SectionName.Materials) + + val DiamondChip: DeferredItem[Item] = registerItem(new item.BasicItem(defaultProps, "diamondchip"), Constants.ItemName.DiamondChip, Constants.SectionName.Materials) + val NetheriteSilicon: DeferredItem[Item] = registerBasicItem(Constants.ItemName.NetheriteSilicon, Constants.SectionName.Materials, defaultProps) // All kinds of tools. - val Analyzer: DeferredItem[item.Analyzer] = registerItem(new item.Analyzer(defaultProps), Constants.ItemName.Analyzer) - val Debugger: DeferredItem[item.Debugger] = registerItem(new item.Debugger(defaultProps), Constants.ItemName.Debugger) - val Terminal: DeferredItem[item.Terminal] = registerItem(new item.Terminal(defaultProps.stacksTo(1)), Constants.ItemName.Terminal) - val TexturePicker: DeferredItem[item.TexturePicker] = registerItem(new item.TexturePicker(defaultProps), Constants.ItemName.TexturePicker) - val Manual: DeferredItem[item.Manual] = registerItem(new item.Manual(defaultProps), Constants.ItemName.Manual) - val Wrench: DeferredItem[item.Wrench] = registerItem(new item.Wrench(defaultProps.stacksTo(1)), Constants.ItemName.Wrench) + val Analyzer: DeferredItem[item.Analyzer] = registerItem(new item.Analyzer(defaultProps), Constants.ItemName.Analyzer, Constants.SectionName.Tools) + val Debugger: DeferredItem[item.Debugger] = registerItem(new item.Debugger(defaultProps), Constants.ItemName.Debugger, Constants.SectionName.Tools) + val Terminal: DeferredItem[item.Terminal] = registerItem(new item.Terminal(defaultProps.stacksTo(1)), Constants.ItemName.Terminal, Constants.SectionName.Tools) + val TexturePicker: DeferredItem[item.TexturePicker] = registerItem(new item.TexturePicker(defaultProps), Constants.ItemName.TexturePicker, Constants.SectionName.Tools) + val Manual: DeferredItem[item.Manual] = registerItem(new item.Manual(defaultProps), Constants.ItemName.Manual, Constants.SectionName.Tools) + val Wrench: DeferredItem[item.Wrench] = registerItem(new item.Wrench(defaultProps.stacksTo(1)), Constants.ItemName.Wrench, Constants.SectionName.Tools) // 1.5.11 - val HoverBoots: DeferredItem[item.HoverBoots] = registerItem(new item.HoverBoots(defaultProps.stacksTo(1).rarity(Rarity.UNCOMMON).setNoRepair), Constants.ItemName.HoverBoots) + val HoverBoots: DeferredItem[item.HoverBoots] = registerItem(new item.HoverBoots(defaultProps.stacksTo(1).rarity(Rarity.UNCOMMON).setNoRepair), Constants.ItemName.HoverBoots, Constants.SectionName.Tools) // 1.5.18 - val Nanomachines: DeferredItem[item.Nanomachines] = registerItem(new item.Nanomachines(defaultProps.rarity(Rarity.UNCOMMON)), Constants.ItemName.Nanomachines) + val Nanomachines: DeferredItem[item.Nanomachines] = registerItem(new item.Nanomachines(defaultProps.rarity(Rarity.UNCOMMON)), Constants.ItemName.Nanomachines, Constants.SectionName.Tools) ///////////////////////////////////////////////////////////////// // General purpose components. ///////////////////////////////////////////////////////////////// - val CPUTier1: DeferredItem[item.CPU] = registerItem(new item.CPU(defaultProps, Tier.One), Constants.ItemName.CPUTier1) - val CPUTier2: DeferredItem[item.CPU] = registerItem(new item.CPU(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.CPUTier2) - val CPUTier3: DeferredItem[item.CPU] = registerItem(new item.CPU(defaultProps.rarity(Rarity.RARE), Tier.Three), Constants.ItemName.CPUTier3) - val CPUTier4: DeferredItem[item.CPU] = registerItem(new item.CPU(defaultProps.rarity(OCRarity.LEGENDARY), Tier.Four), Constants.ItemName.CPUTier4) - - val ComponentBusTier1: DeferredItem[item.ComponentBus] = registerItem(new item.ComponentBus(defaultProps, Tier.One), Constants.ItemName.ComponentBusTier1) - val ComponentBusTier2: DeferredItem[item.ComponentBus] = registerItem(new item.ComponentBus(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.ComponentBusTier2) - val ComponentBusTier3: DeferredItem[item.ComponentBus] = registerItem(new item.ComponentBus(defaultProps.rarity(Rarity.RARE), Tier.Three), Constants.ItemName.ComponentBusTier3) - val ComponentBusTier4: DeferredItem[item.ComponentBus] = registerItem(new item.ComponentBus(defaultProps.rarity(OCRarity.LEGENDARY), Tier.Four), Constants.ItemName.ComponentBusTier4) - - val RAMTier1: DeferredItem[item.Memory] = registerItem(new item.Memory(defaultProps, Tier.One), Constants.ItemName.RAMTier1) - val RAMTier2: DeferredItem[item.Memory] = registerItem(new item.Memory(defaultProps, Tier.Two), Constants.ItemName.RAMTier2) - val RAMTier3: DeferredItem[item.Memory] = registerItem(new item.Memory(defaultProps.rarity(Rarity.UNCOMMON), Tier.Three), Constants.ItemName.RAMTier3) - val RAMTier4: DeferredItem[item.Memory] = registerItem(new item.Memory(defaultProps.rarity(Rarity.UNCOMMON), Tier.Four), Constants.ItemName.RAMTier4) - val RAMTier5: DeferredItem[item.Memory] = registerItem(new item.Memory(defaultProps.rarity(Rarity.RARE), Tier.Five), Constants.ItemName.RAMTier5) - val RAMTier6: DeferredItem[item.Memory] = registerItem(new item.Memory(defaultProps.rarity(Rarity.RARE), Tier.Six), Constants.ItemName.RAMTier6) - val RAMTier7: DeferredItem[item.Memory] = registerItem(new item.Memory(defaultProps.rarity(OCRarity.LEGENDARY), Tier.Seven), Constants.ItemName.RAMTier7) - val RAMTier8: DeferredItem[item.Memory] = registerItem(new item.Memory(defaultProps.rarity(OCRarity.LEGENDARY), Tier.Eight), Constants.ItemName.RAMTier8) - - val ServerCreative: DeferredItem[item.Server] = registerItem(new item.Server(defaultProps.stacksTo(1).rarity(Rarity.EPIC), Tier.Five), Constants.ItemName.ServerCreative) - val ServerTier1: DeferredItem[item.Server] = registerItem(new item.Server(defaultProps.stacksTo(1), Tier.One), Constants.ItemName.ServerTier1) - val ServerTier2: DeferredItem[item.Server] = registerItem(new item.Server(defaultProps.stacksTo(1).rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.ServerTier2) - val ServerTier3: DeferredItem[item.Server] = registerItem(new item.Server(defaultProps.stacksTo(1).rarity(Rarity.RARE), Tier.Three), Constants.ItemName.ServerTier3) - val ServerTier4: DeferredItem[item.Server] = registerItem(new item.Server(defaultProps.stacksTo(1).rarity(OCRarity.LEGENDARY), Tier.Four), Constants.ItemName.ServerTier4) - - val APUTier1: DeferredItem[item.APU] = registerItem(new item.APU(defaultProps.rarity(Rarity.UNCOMMON), Tier.One), Constants.ItemName.APUTier1) - val APUTier2: DeferredItem[item.APU] = registerItem(new item.APU(defaultProps.rarity(Rarity.RARE), Tier.Two), Constants.ItemName.APUTier2) - val APUTier3: DeferredItem[item.APU] = registerItem(new item.APU(defaultProps.rarity(OCRarity.LEGENDARY), Tier.Three), Constants.ItemName.APUTier3) - val APUCreative: DeferredItem[item.APU] = registerItem(new item.APU(defaultProps.rarity(Rarity.EPIC), Tier.Five), Constants.ItemName.APUCreative) + val CPUTier1: DeferredItem[item.CPU] = registerItem(new item.CPU(defaultProps, Tier.One), Constants.ItemName.CPUTier1, Constants.SectionName.Component) + val CPUTier2: DeferredItem[item.CPU] = registerItem(new item.CPU(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.CPUTier2, Constants.SectionName.Component) + val CPUTier3: DeferredItem[item.CPU] = registerItem(new item.CPU(defaultProps.rarity(Rarity.RARE), Tier.Three), Constants.ItemName.CPUTier3, Constants.SectionName.Component) + val CPUTier4: DeferredItem[item.CPU] = registerItem(new item.CPU(defaultProps.rarity(OCRarity.LEGENDARY), Tier.Four), Constants.ItemName.CPUTier4, Constants.SectionName.Component) + + val ComponentBusTier1: DeferredItem[item.ComponentBus] = registerItem(new item.ComponentBus(defaultProps, Tier.One), Constants.ItemName.ComponentBusTier1, Constants.SectionName.Component) + val ComponentBusTier2: DeferredItem[item.ComponentBus] = registerItem(new item.ComponentBus(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.ComponentBusTier2, Constants.SectionName.Component) + val ComponentBusTier3: DeferredItem[item.ComponentBus] = registerItem(new item.ComponentBus(defaultProps.rarity(Rarity.RARE), Tier.Three), Constants.ItemName.ComponentBusTier3, Constants.SectionName.Component) + val ComponentBusTier4: DeferredItem[item.ComponentBus] = registerItem(new item.ComponentBus(defaultProps.rarity(OCRarity.LEGENDARY), Tier.Four), Constants.ItemName.ComponentBusTier4, Constants.SectionName.Component) + val ComponentBusCreative: DeferredItem[item.ComponentBus] = registerItem(new item.ComponentBus(defaultProps.rarity(Rarity.EPIC), Tier.Five), Constants.ItemName.ComponentBusCreative, Constants.SectionName.Component) + + val RAMTier1: DeferredItem[item.Memory] = registerItem(new item.Memory(defaultProps, Tier.One), Constants.ItemName.RAMTier1, Constants.SectionName.Component) + val RAMTier2: DeferredItem[item.Memory] = registerItem(new item.Memory(defaultProps, Tier.Two), Constants.ItemName.RAMTier2, Constants.SectionName.Component) + val RAMTier3: DeferredItem[item.Memory] = registerItem(new item.Memory(defaultProps.rarity(Rarity.UNCOMMON), Tier.Three), Constants.ItemName.RAMTier3, Constants.SectionName.Component) + val RAMTier4: DeferredItem[item.Memory] = registerItem(new item.Memory(defaultProps.rarity(Rarity.UNCOMMON), Tier.Four), Constants.ItemName.RAMTier4, Constants.SectionName.Component) + val RAMTier5: DeferredItem[item.Memory] = registerItem(new item.Memory(defaultProps.rarity(Rarity.RARE), Tier.Five), Constants.ItemName.RAMTier5, Constants.SectionName.Component) + val RAMTier6: DeferredItem[item.Memory] = registerItem(new item.Memory(defaultProps.rarity(Rarity.RARE), Tier.Six), Constants.ItemName.RAMTier6, Constants.SectionName.Component) + val RAMTier7: DeferredItem[item.Memory] = registerItem(new item.Memory(defaultProps.rarity(OCRarity.LEGENDARY), Tier.Seven), Constants.ItemName.RAMTier7, Constants.SectionName.Component) + val RAMTier8: DeferredItem[item.Memory] = registerItem(new item.Memory(defaultProps.rarity(OCRarity.LEGENDARY), Tier.Eight), Constants.ItemName.RAMTier8, Constants.SectionName.Component) + // 1.9 + val RAMCreative: DeferredItem[Item] = registerBasicItem(Constants.ItemName.RAMCreative, Constants.SectionName.Component, defaultProps.rarity(Rarity.EPIC)) + + val ServerTier1: DeferredItem[item.Server] = registerItem(new item.Server(defaultProps.stacksTo(1), Tier.One), Constants.ItemName.ServerTier1, Constants.SectionName.Component) + val ServerTier2: DeferredItem[item.Server] = registerItem(new item.Server(defaultProps.stacksTo(1).rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.ServerTier2, Constants.SectionName.Component) + val ServerTier3: DeferredItem[item.Server] = registerItem(new item.Server(defaultProps.stacksTo(1).rarity(Rarity.RARE), Tier.Three), Constants.ItemName.ServerTier3, Constants.SectionName.Component) + val ServerTier4: DeferredItem[item.Server] = registerItem(new item.Server(defaultProps.stacksTo(1).rarity(OCRarity.LEGENDARY), Tier.Four), Constants.ItemName.ServerTier4, Constants.SectionName.Component) + val ServerCreative: DeferredItem[item.Server] = registerItem(new item.Server(defaultProps.stacksTo(1).rarity(Rarity.EPIC), Tier.Five), Constants.ItemName.ServerCreative, Constants.SectionName.Component) + + val APUTier1: DeferredItem[item.APU] = registerItem(new item.APU(defaultProps.rarity(Rarity.UNCOMMON), Tier.One), Constants.ItemName.APUTier1, Constants.SectionName.Component) + val APUTier2: DeferredItem[item.APU] = registerItem(new item.APU(defaultProps.rarity(Rarity.RARE), Tier.Two), Constants.ItemName.APUTier2, Constants.SectionName.Component) + val APUTier3: DeferredItem[item.APU] = registerItem(new item.APU(defaultProps.rarity(OCRarity.LEGENDARY), Tier.Three), Constants.ItemName.APUTier3, Constants.SectionName.Component) + val APUCreative: DeferredItem[item.APU] = registerItem(new item.APU(defaultProps.rarity(Rarity.EPIC), Tier.Five), Constants.ItemName.APUCreative, Constants.SectionName.Component) // 1.6 - val TerminalServer: DeferredItem[item.TerminalServer] = registerItem(new item.TerminalServer(defaultProps.stacksTo(1)), Constants.ItemName.TerminalServer) - val RackKVM: DeferredItem[Item] = registerBasicItem(Constants.ItemName.RackKVM, defaultProps.stacksTo(1)) - val DiskDriveMountable: DeferredItem[item.DiskDriveMountable] = registerItem(new item.DiskDriveMountable(defaultProps.stacksTo(1)), Constants.ItemName.DiskDriveMountable) + val TerminalServer: DeferredItem[item.TerminalServer] = registerItem(new item.TerminalServer(defaultProps.stacksTo(1)), Constants.ItemName.TerminalServer, Constants.SectionName.Component) + val RackKVM: DeferredItem[Item] = registerBasicItem(Constants.ItemName.RackKVM, Constants.SectionName.Component, defaultProps.stacksTo(1)) + val DiskDriveMountable: DeferredItem[item.DiskDriveMountable] = registerItem(new item.DiskDriveMountable(defaultProps.stacksTo(1)), Constants.ItemName.DiskDriveMountable, Constants.SectionName.Component) // 1.9 - val RAMCreative: DeferredItem[Item] = registerBasicItem(Constants.ItemName.RAMCreative, defaultProps.rarity(Rarity.EPIC)) - val CapacitorMountable: DeferredItem[Item] = registerBasicItem(Constants.ItemName.CapacitorMountable, defaultProps.stacksTo(1)) + val CapacitorMountable: DeferredItem[Item] = registerBasicItem(Constants.ItemName.CapacitorMountable, Constants.SectionName.Component, defaultProps.stacksTo(1)) // Card components. - val DebugCard: DeferredItem[item.DebugCard] = registerItem(new item.DebugCard(defaultProps), Constants.ItemName.DebugCard) - val GraphicsCardTier1: DeferredItem[item.GraphicsCard] = registerItem(new item.GraphicsCard(defaultProps, Tier.One), Constants.ItemName.GraphicsCardTier1) - val GraphicsCardTier2: DeferredItem[item.GraphicsCard] = registerItem(new item.GraphicsCard(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.GraphicsCardTier2) - val GraphicsCardTier3: DeferredItem[item.GraphicsCard] = registerItem(new item.GraphicsCard(defaultProps.rarity(Rarity.RARE), Tier.Three), Constants.ItemName.GraphicsCardTier3) - val GraphicsCardTier4: DeferredItem[item.GraphicsCard] = registerItem(new item.GraphicsCard(defaultProps.rarity(OCRarity.LEGENDARY), Tier.Four), Constants.ItemName.GraphicsCardTier4) - val QuadGraphicsCard: DeferredItem[Item] = registerItem(new item.QuadGraphicsCard(defaultProps.rarity(OCRarity.LEGENDARY)), Constants.ItemName.QuadGraphicsCard) - val RedstoneCardTier1: DeferredItem[item.RedstoneCard] = registerItem(new item.RedstoneCard(defaultProps, Tier.One), Constants.ItemName.RedstoneCardTier1) - val RedstoneCardTier2: DeferredItem[item.RedstoneCard] = registerItem(new item.RedstoneCard(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.RedstoneCardTier2) - val NetworkCard: DeferredItem[Item] = registerItem(new item.BasicTieredComponentItem(defaultProps, "networkcard"), Constants.ItemName.NetworkCard) - val WirelessNetworkCardTier2: DeferredItem[item.WirelessNetworkCard] = registerItem(new item.WirelessNetworkCard(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.WirelessNetworkCardTier2) - val InternetCard: DeferredItem[Item] = registerItem(new item.BasicTieredComponentItem(defaultProps.rarity(Rarity.UNCOMMON), "internetcard"), Constants.ItemName.InternetCard) - val LinkedCard: DeferredItem[item.LinkedCard] = registerItem(new item.LinkedCard(defaultProps.rarity(Rarity.RARE)), Constants.ItemName.LinkedCard) + val DebugCard: DeferredItem[item.DebugCard] = registerItem(new item.DebugCard(defaultProps), Constants.ItemName.DebugCard, Constants.SectionName.Component) + val GraphicsCardTier1: DeferredItem[item.GraphicsCard] = registerItem(new item.GraphicsCard(defaultProps, Tier.One), Constants.ItemName.GraphicsCardTier1, Constants.SectionName.Component) + val GraphicsCardTier2: DeferredItem[item.GraphicsCard] = registerItem(new item.GraphicsCard(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.GraphicsCardTier2, Constants.SectionName.Component) + val GraphicsCardTier3: DeferredItem[item.GraphicsCard] = registerItem(new item.GraphicsCard(defaultProps.rarity(Rarity.RARE), Tier.Three), Constants.ItemName.GraphicsCardTier3, Constants.SectionName.Component) + val GraphicsCardTier4: DeferredItem[item.GraphicsCard] = registerItem(new item.GraphicsCard(defaultProps.rarity(OCRarity.LEGENDARY), Tier.Four), Constants.ItemName.GraphicsCardTier4, Constants.SectionName.Component) + val QuadGraphicsCard: DeferredItem[Item] = registerItem(new item.QuadGraphicsCard(defaultProps.rarity(OCRarity.LEGENDARY)), Constants.ItemName.QuadGraphicsCard, Constants.SectionName.Component) + val RedstoneCardTier1: DeferredItem[item.RedstoneCard] = registerItem(new item.RedstoneCard(defaultProps, Tier.One), Constants.ItemName.RedstoneCardTier1, Constants.SectionName.Component) + val RedstoneCardTier2: DeferredItem[item.RedstoneCard] = registerItem(new item.RedstoneCard(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.RedstoneCardTier2, Constants.SectionName.Component) + val NetworkCard: DeferredItem[Item] = registerItem(new item.BasicTieredComponentItem(defaultProps, "networkcard"), Constants.ItemName.NetworkCard, Constants.SectionName.Component) + val WirelessNetworkCardTier2: DeferredItem[item.WirelessNetworkCard] = registerItem(new item.WirelessNetworkCard(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.WirelessNetworkCardTier2, Constants.SectionName.Component) + val InternetCard: DeferredItem[Item] = registerItem(new item.BasicTieredComponentItem(defaultProps.rarity(Rarity.UNCOMMON), "internetcard"), Constants.ItemName.InternetCard, Constants.SectionName.Component) + val LinkedCard: DeferredItem[item.LinkedCard] = registerItem(new item.LinkedCard(defaultProps.rarity(Rarity.RARE)), Constants.ItemName.LinkedCard, Constants.SectionName.Component) // 1.5.13 - val DataCardTier1: DeferredItem[item.DataCard] = registerItem(new item.DataCard(defaultProps, Tier.One), Constants.ItemName.DataCardTier1) + val DataCardTier1: DeferredItem[item.DataCard] = registerItem(new item.DataCard(defaultProps, Tier.One), Constants.ItemName.DataCardTier1, Constants.SectionName.Component) // 1.5.15 - val DataCardTier2: DeferredItem[item.DataCard] = registerItem(new item.DataCard(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.DataCardTier2) - val DataCardTier3: DeferredItem[item.DataCard] = registerItem(new item.DataCard(defaultProps.rarity(Rarity.RARE), Tier.Three), Constants.ItemName.DataCardTier3) + val DataCardTier2: DeferredItem[item.DataCard] = registerItem(new item.DataCard(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.DataCardTier2, Constants.SectionName.Component) + val DataCardTier3: DeferredItem[item.DataCard] = registerItem(new item.DataCard(defaultProps.rarity(Rarity.RARE), Tier.Three), Constants.ItemName.DataCardTier3, Constants.SectionName.Component) - // 1.9 - val AudioCardTier1: DeferredItem[item.AudioCard] = registerItem(new item.AudioCard(defaultProps), Constants.ItemName.AudioCardTier1) + // 1.7.2 + val WirelessNetworkCardTier1: DeferredItem[item.WirelessNetworkCard] = registerItem(new item.WirelessNetworkCard(defaultProps, Tier.One), Constants.ItemName.WirelessNetworkCardTier1, Constants.SectionName.Component) + // 1.9 + val AudioCardTier1: DeferredItem[item.AudioCard] = registerItem(new item.AudioCard(defaultProps), Constants.ItemName.AudioCardTier1, Constants.SectionName.Component) ///////////////////////////////////////////////////////////////// // Upgrade components. ///////////////////////////////////////////////////////////////// - val AngelUpgrade: DeferredItem[Item] = registerItem(new item.BasicTieredItem(defaultProps.rarity(Rarity.UNCOMMON), "upgradeangel"), Constants.ItemName.AngelUpgrade) - val BatteryUpgradeTier1: DeferredItem[item.UpgradeBattery] = registerItem(new item.UpgradeBattery(defaultProps, Tier.One), Constants.ItemName.BatteryUpgradeTier1) - val BatteryUpgradeTier2: DeferredItem[item.UpgradeBattery] = registerItem(new item.UpgradeBattery(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.BatteryUpgradeTier2) - val BatteryUpgradeTier3: DeferredItem[item.UpgradeBattery] = registerItem(new item.UpgradeBattery(defaultProps.rarity(Rarity.RARE), Tier.Three), Constants.ItemName.BatteryUpgradeTier3) - val ChunkloaderUpgrade: DeferredItem[Item] = registerItem(new item.BasicTieredItem(defaultProps.rarity(Rarity.RARE), "upgradechunkloader"), Constants.ItemName.ChunkloaderUpgrade) - val CardContainerTier1: DeferredItem[item.UpgradeContainerCard] = registerItem(new item.UpgradeContainerCard(defaultProps, Tier.One), Constants.ItemName.CardContainerTier1) - val CardContainerTier2: DeferredItem[item.UpgradeContainerCard] = registerItem(new item.UpgradeContainerCard(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.CardContainerTier2) - val CardContainerTier3: DeferredItem[item.UpgradeContainerCard] = registerItem(new item.UpgradeContainerCard(defaultProps.rarity(Rarity.RARE), Tier.Three), Constants.ItemName.CardContainerTier3) - val UpgradeContainerTier1: DeferredItem[item.UpgradeContainerUpgrade] = registerItem(new item.UpgradeContainerUpgrade(defaultProps, Tier.One), Constants.ItemName.UpgradeContainerTier1) - val UpgradeContainerTier2: DeferredItem[item.UpgradeContainerUpgrade] = registerItem(new item.UpgradeContainerUpgrade(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.UpgradeContainerTier2) - val UpgradeContainerTier3: DeferredItem[item.UpgradeContainerUpgrade] = registerItem(new item.UpgradeContainerUpgrade(defaultProps.rarity(Rarity.RARE), Tier.Three), Constants.ItemName.UpgradeContainerTier3) - val CraftingUpgrade: DeferredItem[Item] = registerItem(new item.BasicTieredItem(defaultProps.rarity(Rarity.UNCOMMON), "upgradecrafting"), Constants.ItemName.CraftingUpgrade) - val DatabaseUpgradeTier1: DeferredItem[item.UpgradeDatabase] = registerItem(new item.UpgradeDatabase(defaultProps, Tier.One), Constants.ItemName.DatabaseUpgradeTier1) - val DatabaseUpgradeTier2: DeferredItem[item.UpgradeDatabase] = registerItem(new item.UpgradeDatabase(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.DatabaseUpgradeTier2) - val DatabaseUpgradeTier3: DeferredItem[item.UpgradeDatabase] = registerItem(new item.UpgradeDatabase(defaultProps.rarity(Rarity.RARE), Tier.Three), Constants.ItemName.DatabaseUpgradeTier3) - val ExperienceUpgrade: DeferredItem[item.UpgradeExperience] = registerItem(new item.UpgradeExperience(defaultProps.rarity(Rarity.RARE)), Constants.ItemName.ExperienceUpgrade) - val GeneratorUpgrade: DeferredItem[item.UpgradeGenerator] = registerItem(new item.UpgradeGenerator(defaultProps.rarity(Rarity.UNCOMMON)), Constants.ItemName.GeneratorUpgrade) - val InventoryUpgrade: DeferredItem[Item] = registerItem(new item.BasicTieredItem(defaultProps, "upgradeinventory"), Constants.ItemName.InventoryUpgrade) - val InventoryControllerUpgrade: DeferredItem[Item] = registerItem(new item.BasicTieredItem(defaultProps.rarity(Rarity.UNCOMMON), "upgradeinventorycontroller"), Constants.ItemName.InventoryControllerUpgrade) - val NavigationUpgrade: DeferredItem[Item] = registerItem(new item.BasicTieredItem(defaultProps.rarity(Rarity.UNCOMMON), "upgradenavigation"), Constants.ItemName.NavigationUpgrade) - val PistonUpgrade: DeferredItem[Item] = registerItem(new item.BasicTieredItem(defaultProps.rarity(Rarity.UNCOMMON), "upgradepiston"), Constants.ItemName.PistonUpgrade) - val SignUpgrade: DeferredItem[Item] = registerItem(new item.BasicTieredItem(defaultProps.rarity(Rarity.UNCOMMON), "upgradesign"), Constants.ItemName.SignUpgrade) - val SolarGeneratorUpgrade: DeferredItem[item.UpgradeSolarGenerator] = registerItem(new item.UpgradeSolarGenerator(defaultProps.rarity(Rarity.UNCOMMON)), Constants.ItemName.SolarGeneratorUpgrade) - val TankUpgrade: DeferredItem[item.UpgradeTank] = registerItem(new item.UpgradeTank(defaultProps), Constants.ItemName.TankUpgrade) - val TankControllerUpgrade: DeferredItem[Item] = registerItem(new item.BasicTieredItem(defaultProps.rarity(Rarity.UNCOMMON), "upgradetankcontroller"), Constants.ItemName.TankControllerUpgrade) - val TractorBeamUpgrade: DeferredItem[Item] = registerItem(new item.BasicTieredItem(defaultProps.rarity(Rarity.RARE), "upgradetractorbeam"), Constants.ItemName.TractorBeamUpgrade) - val LeashUpgrade: DeferredItem[Item] = registerItem(new item.BasicTieredItem(defaultProps, "upgradeleash"), Constants.ItemName.LeashUpgrade) + val AngelUpgrade: DeferredItem[Item] = registerItem(new item.BasicTieredItem(defaultProps.rarity(Rarity.UNCOMMON), "upgradeangel"), Constants.ItemName.AngelUpgrade, Constants.SectionName.Upgrade) + val BatteryUpgradeTier1: DeferredItem[item.UpgradeBattery] = registerItem(new item.UpgradeBattery(defaultProps, Tier.One), Constants.ItemName.BatteryUpgradeTier1, Constants.SectionName.Upgrade) + val BatteryUpgradeTier2: DeferredItem[item.UpgradeBattery] = registerItem(new item.UpgradeBattery(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.BatteryUpgradeTier2, Constants.SectionName.Upgrade) + val BatteryUpgradeTier3: DeferredItem[item.UpgradeBattery] = registerItem(new item.UpgradeBattery(defaultProps.rarity(Rarity.RARE), Tier.Three), Constants.ItemName.BatteryUpgradeTier3, Constants.SectionName.Upgrade) + val ChunkloaderUpgrade: DeferredItem[Item] = registerItem(new item.BasicTieredItem(defaultProps.rarity(Rarity.RARE), "upgradechunkloader"), Constants.ItemName.ChunkloaderUpgrade, Constants.SectionName.Upgrade) + val CardContainerTier1: DeferredItem[item.UpgradeContainerCard] = registerItem(new item.UpgradeContainerCard(defaultProps, Tier.One), Constants.ItemName.CardContainerTier1, Constants.SectionName.Upgrade) + val CardContainerTier2: DeferredItem[item.UpgradeContainerCard] = registerItem(new item.UpgradeContainerCard(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.CardContainerTier2, Constants.SectionName.Upgrade) + val CardContainerTier3: DeferredItem[item.UpgradeContainerCard] = registerItem(new item.UpgradeContainerCard(defaultProps.rarity(Rarity.RARE), Tier.Three), Constants.ItemName.CardContainerTier3, Constants.SectionName.Upgrade) + val UpgradeContainerTier1: DeferredItem[item.UpgradeContainerUpgrade] = registerItem(new item.UpgradeContainerUpgrade(defaultProps, Tier.One), Constants.ItemName.UpgradeContainerTier1, Constants.SectionName.Upgrade) + val UpgradeContainerTier2: DeferredItem[item.UpgradeContainerUpgrade] = registerItem(new item.UpgradeContainerUpgrade(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.UpgradeContainerTier2, Constants.SectionName.Upgrade) + val UpgradeContainerTier3: DeferredItem[item.UpgradeContainerUpgrade] = registerItem(new item.UpgradeContainerUpgrade(defaultProps.rarity(Rarity.RARE), Tier.Three), Constants.ItemName.UpgradeContainerTier3, Constants.SectionName.Upgrade) + val CraftingUpgrade: DeferredItem[Item] = registerItem(new item.BasicTieredItem(defaultProps.rarity(Rarity.UNCOMMON), "upgradecrafting"), Constants.ItemName.CraftingUpgrade, Constants.SectionName.Upgrade) + val DatabaseUpgradeTier1: DeferredItem[item.UpgradeDatabase] = registerItem(new item.UpgradeDatabase(defaultProps, Tier.One), Constants.ItemName.DatabaseUpgradeTier1, Constants.SectionName.Upgrade) + val DatabaseUpgradeTier2: DeferredItem[item.UpgradeDatabase] = registerItem(new item.UpgradeDatabase(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.DatabaseUpgradeTier2, Constants.SectionName.Upgrade) + val DatabaseUpgradeTier3: DeferredItem[item.UpgradeDatabase] = registerItem(new item.UpgradeDatabase(defaultProps.rarity(Rarity.RARE), Tier.Three), Constants.ItemName.DatabaseUpgradeTier3, Constants.SectionName.Upgrade) + val ExperienceUpgrade: DeferredItem[item.UpgradeExperience] = registerItem(new item.UpgradeExperience(defaultProps.rarity(Rarity.RARE)), Constants.ItemName.ExperienceUpgrade, Constants.SectionName.Upgrade) + val GeneratorUpgrade: DeferredItem[item.UpgradeGenerator] = registerItem(new item.UpgradeGenerator(defaultProps.rarity(Rarity.UNCOMMON)), Constants.ItemName.GeneratorUpgrade, Constants.SectionName.Upgrade) + val InventoryUpgrade: DeferredItem[Item] = registerItem(new item.BasicTieredItem(defaultProps, "upgradeinventory"), Constants.ItemName.InventoryUpgrade, Constants.SectionName.Upgrade) + val InventoryControllerUpgrade: DeferredItem[Item] = registerItem(new item.BasicTieredItem(defaultProps.rarity(Rarity.UNCOMMON), "upgradeinventorycontroller"), Constants.ItemName.InventoryControllerUpgrade, Constants.SectionName.Upgrade) + val NavigationUpgrade: DeferredItem[Item] = registerItem(new item.BasicTieredItem(defaultProps.rarity(Rarity.UNCOMMON), "upgradenavigation"), Constants.ItemName.NavigationUpgrade, Constants.SectionName.Upgrade) + val PistonUpgrade: DeferredItem[Item] = registerItem(new item.BasicTieredItem(defaultProps.rarity(Rarity.UNCOMMON), "upgradepiston"), Constants.ItemName.PistonUpgrade, Constants.SectionName.Upgrade) + val SignUpgrade: DeferredItem[Item] = registerItem(new item.BasicTieredItem(defaultProps.rarity(Rarity.UNCOMMON), "upgradesign"), Constants.ItemName.SignUpgrade, Constants.SectionName.Upgrade) + val SolarGeneratorUpgrade: DeferredItem[item.UpgradeSolarGenerator] = registerItem(new item.UpgradeSolarGenerator(defaultProps.rarity(Rarity.UNCOMMON)), Constants.ItemName.SolarGeneratorUpgrade, Constants.SectionName.Upgrade) + val TankUpgrade: DeferredItem[item.UpgradeTank] = registerItem(new item.UpgradeTank(defaultProps), Constants.ItemName.TankUpgrade, Constants.SectionName.Upgrade) + val TankControllerUpgrade: DeferredItem[Item] = registerItem(new item.BasicTieredItem(defaultProps.rarity(Rarity.UNCOMMON), "upgradetankcontroller"), Constants.ItemName.TankControllerUpgrade, Constants.SectionName.Upgrade) + val TractorBeamUpgrade: DeferredItem[Item] = registerItem(new item.BasicTieredItem(defaultProps.rarity(Rarity.RARE), "upgradetractorbeam"), Constants.ItemName.TractorBeamUpgrade, Constants.SectionName.Upgrade) + val LeashUpgrade: DeferredItem[Item] = registerItem(new item.BasicTieredItem(defaultProps, "upgradeleash"), Constants.ItemName.LeashUpgrade, Constants.SectionName.Upgrade) // 1.5.8 - val HoverUpgradeTier1: DeferredItem[item.UpgradeHover] = registerItem(new item.UpgradeHover(defaultProps, Tier.One), Constants.ItemName.HoverUpgradeTier1) - val HoverUpgradeTier2: DeferredItem[item.UpgradeHover] = registerItem(new item.UpgradeHover(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.HoverUpgradeTier2) + val HoverUpgradeTier1: DeferredItem[item.UpgradeHover] = registerItem(new item.UpgradeHover(defaultProps, Tier.One), Constants.ItemName.HoverUpgradeTier1, Constants.SectionName.Upgrade) + val HoverUpgradeTier2: DeferredItem[item.UpgradeHover] = registerItem(new item.UpgradeHover(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.HoverUpgradeTier2, Constants.SectionName.Upgrade) // 1.6 - val TradingUpgrade: DeferredItem[Item] = registerItem(new item.BasicTieredItem(defaultProps.rarity(Rarity.UNCOMMON), "upgradetrading"), Constants.ItemName.TradingUpgrade) - val MFU: DeferredItem[item.UpgradeMF] = registerItem(new item.UpgradeMF(defaultProps.rarity(Rarity.RARE)), Constants.ItemName.MFU) - - // 1.7.2 - val WirelessNetworkCardTier1: DeferredItem[item.WirelessNetworkCard] = registerItem(new item.WirelessNetworkCard(defaultProps, Tier.One), Constants.ItemName.WirelessNetworkCardTier1) - val ComponentBusCreative: DeferredItem[item.ComponentBus] = registerItem(new item.ComponentBus(defaultProps.rarity(Rarity.EPIC), Tier.Five), Constants.ItemName.ComponentBusCreative) + val TradingUpgrade: DeferredItem[Item] = registerItem(new item.BasicTieredItem(defaultProps.rarity(Rarity.UNCOMMON), "upgradetrading"), Constants.ItemName.TradingUpgrade, Constants.SectionName.Upgrade) + val MFU: DeferredItem[item.UpgradeMF] = registerItem(new item.UpgradeMF(defaultProps.rarity(Rarity.RARE)), Constants.ItemName.MFU, Constants.SectionName.Upgrade) // 1.8 - val StickyPistonUpgrade: DeferredItem[Item] = registerItem(new item.BasicTieredItem(defaultProps, "upgradestickypiston"), Constants.ItemName.StickyPistonUpgrade) + val StickyPistonUpgrade: DeferredItem[Item] = registerItem(new item.BasicTieredItem(defaultProps, "upgradestickypiston"), Constants.ItemName.StickyPistonUpgrade, Constants.SectionName.Upgrade) ///////////////////////////////////////////////////////////////// // Storage media of all kinds. ///////////////////////////////////////////////////////////////// - val EEPROM: DeferredItem[item.EEPROM] = registerItem(new item.EEPROM(defaultProps), Constants.ItemName.EEPROM) - val Floppy: DeferredItem[item.FloppyDisk] = registerItem(new item.FloppyDisk(defaultProps), Constants.ItemName.Floppy) - val HDDTier1: DeferredItem[item.HardDiskDrive] = registerItem(new item.HardDiskDrive(defaultProps, Tier.One), Constants.ItemName.HDDTier1) - val HDDTier2: DeferredItem[item.HardDiskDrive] = registerItem(new item.HardDiskDrive(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.HDDTier2) - val HDDTier3: DeferredItem[item.HardDiskDrive] = registerItem(new item.HardDiskDrive(defaultProps.rarity(Rarity.RARE), Tier.Three), Constants.ItemName.HDDTier3) - val HDDTier4: DeferredItem[item.HardDiskDrive] = registerItem(new item.HardDiskDrive(defaultProps.rarity(OCRarity.LEGENDARY), Tier.Four), Constants.ItemName.HDDTier4) + val EEPROM: DeferredItem[item.EEPROM] = registerItem(new item.EEPROM(defaultProps), Constants.ItemName.EEPROM, Constants.SectionName.Component) + val Floppy: DeferredItem[item.FloppyDisk] = registerItem(new item.FloppyDisk(defaultProps), Constants.ItemName.Floppy, Constants.SectionName.Component) + val HDDTier1: DeferredItem[item.HardDiskDrive] = registerItem(new item.HardDiskDrive(defaultProps, Tier.One), Constants.ItemName.HDDTier1, Constants.SectionName.Component) + val HDDTier2: DeferredItem[item.HardDiskDrive] = registerItem(new item.HardDiskDrive(defaultProps.rarity(Rarity.UNCOMMON), Tier.Two), Constants.ItemName.HDDTier2, Constants.SectionName.Component) + val HDDTier3: DeferredItem[item.HardDiskDrive] = registerItem(new item.HardDiskDrive(defaultProps.rarity(Rarity.RARE), Tier.Three), Constants.ItemName.HDDTier3, Constants.SectionName.Component) + val HDDTier4: DeferredItem[item.HardDiskDrive] = registerItem(new item.HardDiskDrive(defaultProps.rarity(OCRarity.LEGENDARY), Tier.Four), Constants.ItemName.HDDTier4, Constants.SectionName.Component) - val SSDTier1: DeferredItem[item.SolidStateDrive] = registerItem(new item.SolidStateDrive(defaultProps.rarity(Rarity.UNCOMMON), Tier.One), Constants.ItemName.SSDTier1) - val SSDTier2: DeferredItem[item.SolidStateDrive] = registerItem(new item.SolidStateDrive(defaultProps.rarity(Rarity.RARE), Tier.Two), Constants.ItemName.SSDTier2) - val SSDTier3: DeferredItem[item.SolidStateDrive] = registerItem(new item.SolidStateDrive(defaultProps.rarity(OCRarity.LEGENDARY), Tier.Three), Constants.ItemName.SSDTier3) + val SSDTier1: DeferredItem[item.SolidStateDrive] = registerItem(new item.SolidStateDrive(defaultProps.rarity(Rarity.UNCOMMON), Tier.One), Constants.ItemName.SSDTier1, Constants.SectionName.Component) + val SSDTier2: DeferredItem[item.SolidStateDrive] = registerItem(new item.SolidStateDrive(defaultProps.rarity(Rarity.RARE), Tier.Two), Constants.ItemName.SSDTier2, Constants.SectionName.Component) + val SSDTier3: DeferredItem[item.SolidStateDrive] = registerItem(new item.SolidStateDrive(defaultProps.rarity(OCRarity.LEGENDARY), Tier.Three), Constants.ItemName.SSDTier3, Constants.SectionName.Component) private def initPostStorage(): Unit = { val luaBios = { @@ -522,54 +530,69 @@ object OCItems extends ItemAPI { val count = OpenComputers.getClass.getResourceAsStream(Settings.scriptPath + "bios.lua").read(code) createEEPROM("EEPROM (Lua BIOS)", code.take(count), null, readonly = false) } - registerStack(luaBios, Constants.ItemName.LuaBios) + registerStack(luaBios, Constants.ItemName.LuaBios, null) } ///////////////////////////////////////////////////////////////// // Special purpose items that don't fit into any other category. ///////////////////////////////////////////////////////////////// - val Tablet: DeferredItem[item.Tablet] = registerItem(new item.Tablet(defaultProps.stacksTo(1)), Constants.ItemName.Tablet) - val Drone: DeferredItem[item.Drone] = registerItem(new item.Drone(defaultProps), Constants.ItemName.Drone) - val Present: DeferredItem[item.Present] = registerItem(new item.Present(defaultProps), Constants.ItemName.Present) + val Tablet: DeferredItem[item.Tablet] = registerItem(new item.Tablet(defaultProps.stacksTo(1)), Constants.ItemName.Tablet, Constants.SectionName.Misc) + val Drone: DeferredItem[item.Drone] = registerItem(new item.Drone(defaultProps), Constants.ItemName.Drone, Constants.SectionName.Misc) + val Present: DeferredItem[item.Present] = registerItem(new item.Present(defaultProps), Constants.ItemName.Present, Constants.SectionName.Misc) - def decorateCreativeTab(event: BuildCreativeModeTabContentsEvent, hasRedstoneCardT2: Boolean): Unit = { + def decorateCreativeTab(displayItems: Consumer[ItemStack], searchItems: Consumer[ItemStack]): Unit = { import Constants.{BlockName => B, ItemName => I} // Assembled devices are not usable without their component data. Their // configured creative variants are added explicitly below. - val excluded = Set(B.Microcontroller, B.Print, B.Robot, I.Drone, I.Tablet) + val excluded = mutable.Set(B.Microcontroller, B.Print, B.Robot, I.Drone, I.Tablet) - def accept(id: String, info: ItemInfo): Unit = { - if (id != B.PowerConverter || !Settings.get.ignorePower) { - val stack = info.createItemStack(1) - if (!stack.isEmpty) event.accept(stack) - } + if (!ModOpenComputers.hasRedstoneCardT2){ + excluded += I.RedstoneCardTier2 } - // Block items first, then regular items — mirrors 1.16.5 registry order. - // Items registered at mod-load time enter descriptors before blocks (which are - // registered lazily during the BLOCKS event), so we partition explicitly. - // Loot disk floppies (registered into descriptors via Items.registerStack in - // Loot.createLootDisk) are excluded here because they're already added below via - // Loot.disksForClient; including both caused duplicate ItemStack entries and crashed - // BuildCreativeModeTabContentsEvent. - for ((id, info) <- descriptors if info.block != null && !excluded.contains(id) && id != I.RedstoneCardTier2 && !Loot.lootDiskDescriptorIds.contains(id)) - accept(id, info) - for ((id, info) <- descriptors if info.block == null && !excluded.contains(id) && id != I.RedstoneCardTier2 && !Loot.lootDiskDescriptorIds.contains(id)) - accept(id, info) - - event.accept(OCItems.createConfiguredDrone()) - event.accept(OCItems.createConfiguredMicrocontroller()) - event.accept(OCItems.createConfiguredRobot()) - event.accept(OCItems.createConfiguredTablet()) - - Loot.disksForClient.foreach(event.accept) - Loot.eepromsForClient.foreach(event.accept) - registeredItems.foreach(event.accept) - - if (hasRedstoneCardT2) { - descriptors.get(Constants.ItemName.RedstoneCardTier2).foreach { info => - event.accept(info.createItemStack(1)) - } + val sectionMap = new util.HashMap[String, util.List[ItemStack]] + for ((id, info) <- descriptors if !excluded.contains(id)){ + val sectionId = ITEM_TO_SECTION.getOrElse(id, Constants.SectionName.Misc) + val stack = info.createItemStack(1) + sectionMap.computeIfAbsent(sectionId, (s) => new util.LinkedList).add(stack) + } + + for (i <- 0 until 9) { + displayItems.accept(ItemStack.EMPTY) } + + SECTION_Y_VALUES.clear() + var y = 0 + val sectionKeys = sectionMap.keySet.asScala + .filter(_ != null) + .toList + .sorted + sectionKeys.foreach(key =>{ + var itemCount = 0 + val sectionItems = sectionMap.get(key) + sectionItems.forEach(stack => { + if (!stack.isEmpty) { + displayItems.accept(stack) + searchItems.accept(stack) + itemCount += 1 + } + }) + SECTION_Y_VALUES.put(key, y) + val rowCount = Math.ceil(itemCount / 9.0f).toInt + y += rowCount + 1 + if (!key.equals(sectionKeys.last)) { + var padding = 9 - itemCount % 9 + if (padding < 9) padding += 9 + for (i <- 0 until padding) { + displayItems.accept(ItemStack.EMPTY) + } + } + }) + + displayItems.accept(OCItems.createConfiguredDrone()) + displayItems.accept(OCItems.createConfiguredMicrocontroller()) + displayItems.accept(OCItems.createConfiguredRobot()) + displayItems.accept(OCItems.createConfiguredTablet()) + } } diff --git a/src/main/scala/li/cil/oc/common/item/traits/SimpleItem.scala b/src/main/scala/li/cil/oc/common/item/traits/SimpleItem.scala index 9d42d34501..83fd1ecb41 100644 --- a/src/main/scala/li/cil/oc/common/item/traits/SimpleItem.scala +++ b/src/main/scala/li/cil/oc/common/item/traits/SimpleItem.scala @@ -1,37 +1,28 @@ package li.cil.oc.common.item.traits -import java.util - -import li.cil.oc.Settings +import com.mojang.blaze3d.vertex.PoseStack import li.cil.oc.api import li.cil.oc.api.event.RobotRenderEvent.MountPoint import li.cil.oc.api.internal.Robot import li.cil.oc.client.renderer.item.ItemUpgradeRenderer import li.cil.oc.common.blockentity -import li.cil.oc.util.{BlockPosition, ClientAccessHelper, ItemUtils, Rarity, Tooltip} -import net.minecraft.world.item.ItemStack -import net.minecraft.world.level.LevelReader -import net.minecraft.core.Direction -import net.minecraft.world.{InteractionHand, InteractionResult, InteractionResultHolder, item} -import net.minecraft.core.BlockPos -import net.minecraft.world.entity.player.Player -import net.minecraft.world.item.Item -import net.minecraft.world.item.context.UseOnContext -import net.minecraft.world.level.Level +import li.cil.oc.common.datacomponents.OCComponents +import li.cil.oc.util.ExtendedDataComponentHolder.convert +import li.cil.oc.util.{BlockPosition, Tooltip} import net.minecraft.client.renderer.MultiBufferSource +import net.minecraft.core.{BlockPos, Direction} import net.minecraft.network.chat.Component -import net.minecraft.world.item.TooltipFlag -import net.neoforged.api.distmarker.Dist -import net.neoforged.api.distmarker.OnlyIn - -import scala.collection.convert.ImplicitConversionsToScala._ -import com.mojang.blaze3d.vertex.PoseStack -import li.cil.oc.common.item.data.TabletData -import li.cil.oc.util.ExtendedDataComponentHolder._ -import net.minecraft.core.component.DataComponents +import net.minecraft.world.entity.player.Player import net.minecraft.world.item.Item.TooltipContext +import net.minecraft.world.item.context.UseOnContext +import net.minecraft.world.item.{Item, ItemStack, TooltipFlag} +import net.minecraft.world.level.{Level, LevelReader} +import net.minecraft.world.{InteractionHand, InteractionResult, InteractionResultHolder} +import net.neoforged.api.distmarker.{Dist, OnlyIn} import net.neoforged.neoforge.common.extensions.IItemExtension -import li.cil.oc.common.datacomponents.OCComponents + +import java.util +import scala.collection.convert.ImplicitConversionsToScala._ trait SimpleItem extends Item with api.driver.item.UpgradeRenderer with IItemExtension { def createItemStack(amount: Int = 1) = new ItemStack(this, amount) diff --git a/src/main/scala/li/cil/oc/mixin/CreativeModeInventoryScreenMixin.scala b/src/main/scala/li/cil/oc/mixin/CreativeModeInventoryScreenMixin.scala new file mode 100644 index 0000000000..54be6b9c10 --- /dev/null +++ b/src/main/scala/li/cil/oc/mixin/CreativeModeInventoryScreenMixin.scala @@ -0,0 +1,90 @@ +package li.cil.oc.mixin + +import com.mojang.blaze3d.systems.RenderSystem +import li.cil.oc.CreativeTab.CURRENT_ROW +import li.cil.oc.common.init.OCItems +import li.cil.oc.mixin.accessor.{AbstractContainerScreenAccess, CreativeModeInventoryScreenAccess} +import li.cil.oc.{CreativeTab, OpenComputers} +import net.minecraft.client.Minecraft +import net.minecraft.client.gui.GuiGraphics +import net.minecraft.client.gui.screens.inventory.CreativeModeInventoryScreen +import net.minecraft.network.chat.Component +import net.minecraft.resources.ResourceLocation +import org.spongepowered.asm.mixin.Mixin +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo +import org.spongepowered.asm.mixin.injection.{At, Inject} + +// Inspired by : +// https://github.com/Creators-of-Aeronautics/Simulated-Project/blob/main/simulated/common/src/main/java/dev/simulated_team/simulated/mixin/creative_tab_sections/CreativeModeInventoryScreenMixin.java +// On 09/08/26 under MIT Licence + +@Mixin(Array(classOf[CreativeModeInventoryScreen])) +class CreativeModeInventoryScreenMixin { + + @Inject( + method = Array("render"), + at = Array(new At("TAIL")) + ) + private def openComputers$render( + guiGraphics: GuiGraphics, + mouseX: Int, + mouseY: Int, + partialTick: Float, + ci: CallbackInfo + ): Unit = { + val tab = CreativeModeInventoryScreenAccess.selectedTab + if (tab eq CreativeTab.MAIN.get()) { + renderBanners( + this.asInstanceOf[CreativeModeInventoryScreen], + guiGraphics, + mouseX, + mouseY + ) + } + } + + private def renderBanners(screen: CreativeModeInventoryScreen, graphics: GuiGraphics, mouseX: Int, mouseY: Int): Unit = { + val ps = graphics.pose + ps.pushPose() + RenderSystem.enableDepthTest() + RenderSystem.setShaderColor(1, 1, 1, 1) + + val left = screen.asInstanceOf[AbstractContainerScreenAccess].getLeftPos + 8 + val top = screen.asInstanceOf[AbstractContainerScreenAccess].getTopPos + 17 + ps.translate(left, top, 0) + + val BannerWidth = 162 + val BannerHeight = 18 + val VisibleRows = 5 + + + for ((id, yValue) <- OCItems.SECTION_Y_VALUES + if yValue >= CURRENT_ROW && yValue < CURRENT_ROW + VisibleRows) { + + val bannerTexture = ResourceLocation.fromNamespaceAndPath( + OpenComputers.ID, + s"textures/gui/banner.png" + ) + + val y = (yValue - CURRENT_ROW) * BannerHeight + + graphics.blit( + bannerTexture, + 0, + y, + 0, + 0, + BannerWidth, + BannerHeight, + BannerWidth, + BannerHeight + ) + + val font = Minecraft.getInstance.font + graphics.drawString(font, Component.translatable(s"itemGroup.${OpenComputers.Name}.section.$id"), 8, y+6, 0x7, false) + } + + RenderSystem.disableDepthTest(); + ps.popPose(); + } +} diff --git a/src/main/scala/li/cil/oc/mixin/CreativeModeTabMixin.scala b/src/main/scala/li/cil/oc/mixin/CreativeModeTabMixin.scala new file mode 100644 index 0000000000..52745b8dcc --- /dev/null +++ b/src/main/scala/li/cil/oc/mixin/CreativeModeTabMixin.scala @@ -0,0 +1,33 @@ +package li.cil.oc.mixin + +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod +import com.llamalad7.mixinextras.injector.wrapoperation.Operation +import li.cil.oc.CreativeTab +import li.cil.oc.common.init.OCItems +import net.minecraft.world.item.CreativeModeTab +import net.minecraft.world.item.ItemStack +import org.spongepowered.asm.mixin.Mixin +import org.spongepowered.asm.mixin.Shadow + +// Inspired by : +// https://github.com/Creators-of-Aeronautics/Simulated-Project/blob/main/simulated/common/src/main/java/dev/simulated_team/simulated/mixin/creative_tab_sections/CreativeModeTabMixin.java +// On 09/08/26 under MIT Licence + +import java.util + + +@Mixin(Array(classOf[CreativeModeTab])) class CreativeModeTabMixin { + @Shadow private var displayItems: util.Collection[ItemStack] = new util.LinkedList[ItemStack] + @Shadow private var displayItemsSearchTab: util.Set[ItemStack] = new util.LinkedHashSet[ItemStack] + + @WrapMethod(method = Array("buildContents")) private def openComputers$buildContents(parameters: CreativeModeTab.ItemDisplayParameters, original: Operation[Void]): Unit = { + val self = this.asInstanceOf[AnyRef].asInstanceOf[CreativeModeTab] + if (self eq CreativeTab.MAIN.get()) { + displayItems.clear() + displayItemsSearchTab.clear() + OCItems.decorateCreativeTab(displayItems.add, displayItemsSearchTab.add) + return + } + original.call(parameters) + } +} diff --git a/src/main/scala/li/cil/oc/mixin/ItemPickerMenuMixin.scala b/src/main/scala/li/cil/oc/mixin/ItemPickerMenuMixin.scala new file mode 100644 index 0000000000..0b91bee5d0 --- /dev/null +++ b/src/main/scala/li/cil/oc/mixin/ItemPickerMenuMixin.scala @@ -0,0 +1,21 @@ +package li.cil.oc.mixin + + +import li.cil.oc.CreativeTab +import net.minecraft.client.gui.screens.inventory.CreativeModeInventoryScreen +import org.spongepowered.asm.mixin.{Mixin, Shadow} +import org.spongepowered.asm.mixin.injection.{At, Inject} +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo + +@Mixin(Array(classOf[CreativeModeInventoryScreen.ItemPickerMenu])) +abstract class ItemPickerMenuMixin { + + @Shadow + protected def getRowIndexForScroll(f: Float): Int + + @Inject(method = Array("scrollTo"), at = Array(new At("HEAD"))) + private def simulated$scrollTo(f: Float, ci: CallbackInfo): Unit = { + CreativeTab.CURRENT_ROW = getRowIndexForScroll(f) + } +} + diff --git a/src/main/templates/META-INF/neoforge.mods.toml b/src/main/templates/META-INF/neoforge.mods.toml index 761496ef64..ac666a95d1 100644 --- a/src/main/templates/META-INF/neoforge.mods.toml +++ b/src/main/templates/META-INF/neoforge.mods.toml @@ -18,6 +18,9 @@ enumExtensions="META-INF/enumextensions.json" [[mixins]] config="opencomputers.mixins.json" +[[mixins]] +config="opencomputers.core.mixins.json" + [[dependencies.opencomputers]] modId="minecraft" mandatory=true