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