From 74d1015bcdf14c7c7b7fa6c87d31cdf596698e68 Mon Sep 17 00:00:00 2001 From: IonutParau Date: Sun, 19 Apr 2026 12:50:13 +0200 Subject: [PATCH 1/6] component slots --- .../org/neoflock/neocomputers/NeoComputers.kt | 2 + .../neocomputers/gui/menu/CaseMenu.kt | 28 ++-- .../neocomputers/gui/screen/CaseScreen.kt | 2 + .../neocomputers/gui/widget/ComponentSlot.kt | 126 ++++++++++++++++++ .../neocomputers/gui/widget/DynamicSlot.kt | 4 +- .../neocomputers/item/ComponentItem.kt | 20 +++ .../org/neoflock/neocomputers/item/Items.kt | 7 + .../neoflock/neocomputers/item/MemoryItem.kt | 45 +++++++ .../neoflock/neocomputers/utils/Formatting.kt | 15 +++ .../assets/neocomputers/lang/en_us.json | 3 +- .../neocomputers/models/item/memory0.json | 6 + .../neocomputers/models/item/memory1.json | 6 + .../neocomputers/models/item/memory2.json | 6 + .../neocomputers/models/item/memory3.json | 6 + .../neocomputers/models/item/memory4.json | 6 + .../neocomputers/models/item/memory5.json | 6 + .../textures/gui/slots/component_bus.png | Bin 0 -> 463 bytes .../textures/gui/slots/container.png | Bin 0 -> 446 bytes .../textures/gui/slots/floppy.png | Bin 0 -> 421 bytes .../textures/gui/slots/rack_mountable.png | Bin 0 -> 602 bytes .../textures/gui/slots/tablet.png | Bin 0 -> 270 bytes .../neocomputers/textures/gui/slots/tool.png | Bin 0 -> 355 bytes .../textures/gui/slots/upgrade.png | Bin 0 -> 304 bytes .../neocomputers/textures/item/memory0.png | Bin 0 -> 308 bytes .../neocomputers/textures/item/memory1.png | Bin 0 -> 300 bytes .../neocomputers/textures/item/memory2.png | Bin 0 -> 322 bytes .../neocomputers/textures/item/memory3.png | Bin 0 -> 281 bytes .../neocomputers/textures/item/memory4.png | Bin 0 -> 323 bytes .../neocomputers/textures/item/memory5.png | Bin 0 -> 281 bytes 29 files changed, 277 insertions(+), 11 deletions(-) create mode 100644 src/main/kotlin/org/neoflock/neocomputers/gui/widget/ComponentSlot.kt create mode 100644 src/main/kotlin/org/neoflock/neocomputers/item/ComponentItem.kt create mode 100644 src/main/kotlin/org/neoflock/neocomputers/item/MemoryItem.kt create mode 100644 src/main/kotlin/org/neoflock/neocomputers/utils/Formatting.kt create mode 100644 src/main/resources/assets/neocomputers/models/item/memory0.json create mode 100644 src/main/resources/assets/neocomputers/models/item/memory1.json create mode 100644 src/main/resources/assets/neocomputers/models/item/memory2.json create mode 100644 src/main/resources/assets/neocomputers/models/item/memory3.json create mode 100644 src/main/resources/assets/neocomputers/models/item/memory4.json create mode 100644 src/main/resources/assets/neocomputers/models/item/memory5.json create mode 100644 src/main/resources/assets/neocomputers/textures/gui/slots/component_bus.png create mode 100644 src/main/resources/assets/neocomputers/textures/gui/slots/container.png create mode 100644 src/main/resources/assets/neocomputers/textures/gui/slots/floppy.png create mode 100644 src/main/resources/assets/neocomputers/textures/gui/slots/rack_mountable.png create mode 100644 src/main/resources/assets/neocomputers/textures/gui/slots/tablet.png create mode 100644 src/main/resources/assets/neocomputers/textures/gui/slots/tool.png create mode 100644 src/main/resources/assets/neocomputers/textures/gui/slots/upgrade.png create mode 100644 src/main/resources/assets/neocomputers/textures/item/memory0.png create mode 100644 src/main/resources/assets/neocomputers/textures/item/memory1.png create mode 100644 src/main/resources/assets/neocomputers/textures/item/memory2.png create mode 100644 src/main/resources/assets/neocomputers/textures/item/memory3.png create mode 100644 src/main/resources/assets/neocomputers/textures/item/memory4.png create mode 100644 src/main/resources/assets/neocomputers/textures/item/memory5.png diff --git a/src/main/kotlin/org/neoflock/neocomputers/NeoComputers.kt b/src/main/kotlin/org/neoflock/neocomputers/NeoComputers.kt index eaa12c6..f321c0e 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/NeoComputers.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/NeoComputers.kt @@ -22,6 +22,7 @@ import org.neoflock.neocomputers.block.NodeBlock import org.neoflock.neocomputers.block.NodeBlockEntity import org.neoflock.neocomputers.block.NodeSynchronizer import org.neoflock.neocomputers.gui.render.ScreenRenderer +import org.neoflock.neocomputers.gui.widget.ComponentRoles import org.neoflock.neocomputers.item.Items import org.neoflock.neocomputers.item.Tabs import org.neoflock.neocomputers.network.Networking @@ -46,6 +47,7 @@ object NeoComputers { BlockEntities.registerPowerBlocks() Menus.MENUS.register() Tabs.TABS.register() + ComponentRoles.mapDefaultTextures() // i dont know why architectury wants two lambdas but whatever EnvExecutor.runInEnv(Env.CLIENT) {{ ClientLifecycleEvent.CLIENT_SETUP.register { diff --git a/src/main/kotlin/org/neoflock/neocomputers/gui/menu/CaseMenu.kt b/src/main/kotlin/org/neoflock/neocomputers/gui/menu/CaseMenu.kt index 068a2ed..9d2a3e3 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/gui/menu/CaseMenu.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/gui/menu/CaseMenu.kt @@ -1,5 +1,6 @@ package org.neoflock.neocomputers.gui.menu; +import net.minecraft.world.Container import net.minecraft.world.SimpleContainer import net.minecraft.world.entity.player.Inventory import org.neoflock.neocomputers.gui.menu.Menus; @@ -7,18 +8,32 @@ import net.minecraft.world.entity.player.Player import net.minecraft.world.inventory.AbstractContainerMenu import net.minecraft.world.inventory.MenuType import net.minecraft.world.item.ItemStack +import org.neoflock.neocomputers.gui.widget.ComponentRoles +import org.neoflock.neocomputers.gui.widget.ComponentSlot +import org.neoflock.neocomputers.gui.widget.ComponentSlotRequirement import org.neoflock.neocomputers.gui.widget.DynamicSlot import org.neoflock.neocomputers.utils.GenericContainerMenu class CaseMenu : GenericContainerMenu { + constructor(i: Int, inv: Inventory) : this(i, inv, SimpleContainer(7)) - constructor(i: Int, inv: Inventory) : super(Menus.CASE_MENU.get(), i, SimpleContainer(10)) { + open val eepromRequirement = ComponentSlotRequirement(1, ComponentRoles.FIRMWARE) + open val slotRequirements = listOf( + listOf(ComponentSlotRequirement(1, ComponentRoles.CARD), ComponentSlotRequirement(1, ComponentRoles.CARD)), + listOf(ComponentSlotRequirement(1, ComponentRoles.COMPUTE), ComponentSlotRequirement(1, ComponentRoles.MEMORY), ComponentSlotRequirement(1, ComponentRoles.MEMORY)), + listOf(ComponentSlotRequirement(1, ComponentRoles.STORAGE)), + ) + + constructor(i: Int, inv: Inventory, container: Container) : super(Menus.CASE_MENU.get(), i, container) { this.addInventorySlots(inv, 8, 84) - for (col in 0..2) { - for (row in 0..2) { - var i = col*3+row - this.addSlot(DynamicSlot(this.container!!, i, 98+(col*22), 18*(row+1)-2)) + this.addSlot(ComponentSlot(this.container!!, 0, 20, 34, eepromRequirement)) + + var i = 1 + for ((col, slotCol) in slotRequirements.withIndex()) { + for ((row, slotReq) in slotCol.withIndex()) { + this.addSlot(ComponentSlot(this.container!!, i, 98+(col*22), 18*(row+1)-2, slotReq)) + i++ } } // for (int col=1; col<4; col++) { @@ -30,7 +45,4 @@ class CaseMenu : GenericContainerMenu { // } // } } - - override fun stillValid(player: Player) = true // TODO: implement this properly - override fun quickMoveStack(player: Player, i: Int): ItemStack = ItemStack.EMPTY // there's no container here anyways } \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/gui/screen/CaseScreen.kt b/src/main/kotlin/org/neoflock/neocomputers/gui/screen/CaseScreen.kt index bfc23c1..692bbae 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/gui/screen/CaseScreen.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/gui/screen/CaseScreen.kt @@ -16,6 +16,8 @@ import org.neoflock.neocomputers.utils.GenericContainerScreen class CaseScreen : GenericContainerScreen { private val PCB: ResourceLocation = ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "textures/gui/computer.png") + + override fun shouldCenterTitle(): Boolean = false constructor(abstractContainerMenu: CaseMenu, inventory: Inventory, component: Component) : super(abstractContainerMenu, inventory, component) override fun renderBg(guiGraphics: GuiGraphics, f: Float, i: Int, j: Int) { diff --git a/src/main/kotlin/org/neoflock/neocomputers/gui/widget/ComponentSlot.kt b/src/main/kotlin/org/neoflock/neocomputers/gui/widget/ComponentSlot.kt new file mode 100644 index 0000000..542896d --- /dev/null +++ b/src/main/kotlin/org/neoflock/neocomputers/gui/widget/ComponentSlot.kt @@ -0,0 +1,126 @@ +package org.neoflock.neocomputers.gui.widget + +import com.mojang.blaze3d.systems.RenderSystem +import net.minecraft.client.gui.GuiGraphics +import net.minecraft.client.renderer.GameRenderer +import net.minecraft.resources.ResourceLocation +import net.minecraft.world.Container +import net.minecraft.world.entity.player.Player +import net.minecraft.world.item.Item +import net.minecraft.world.item.ItemStack +import net.minecraft.world.level.ItemLike +import org.neoflock.neocomputers.NeoComputers +import org.neoflock.neocomputers.item.ComponentItem + +// Sort of a mis-nomer, does not need to be associated with components specifically + +object ComponentRoles { + // For card slots + val CARD = "card" + // For memory slots + val MEMORY = "memory" + // For storage slots, aside from EEPROMs and floppys + val STORAGE = "storage" + // For floppy drive slots + val FLOPPY = "floppy" + // For EEPROM slots + val FIRMWARE = "firmware" + // For CPU slot + val COMPUTE = "compute" + // For component bus + val BUS = "bus" + val TOOL = "tool" + val UPGRADE = "upgrade" + val CONTAINER = "container" + val TABLET = "tablet" + val RACK_MOUNTABLE = "rack" + + val MISSING_ROLE_TEXTURE = ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "textures/gui/slots/na.png") + + val textureMap = mutableMapOf() + + fun mapTexture(role: String, texture: ResourceLocation) { + textureMap[role] = texture + } + + fun getTextureFor(role: String) = textureMap[role] ?: MISSING_ROLE_TEXTURE + + fun mapDefaultTextures() { + val core = mapOf( + CARD to "card", + BUS to "component_bus", + CONTAINER to "container", + COMPUTE to "cpu", + FIRMWARE to "eeprom", + FLOPPY to "floppy", + STORAGE to "hdd", + MEMORY to "memory", + TABLET to "tablet", + TOOL to "tool", + UPGRADE to "upgrade", + RACK_MOUNTABLE to "rack_mountable", + ) + for((role, tex) in core) { + mapTexture(role, ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "textures/gui/slots/$tex.png")) + } + } +} + +data class ComponentSlotRequirement(val tier: Int, val role: String) { + fun allowsItemStack(itemStack: ItemStack): Boolean { + val item = itemStack.item + if(item !is ComponentItem) return false + if(tier > 0 && item.getComponentTier(itemStack) > tier) return false + return item.getComponentRoles(itemStack).contains(role) + } +} + +// Tier 0 allows ALL tiers, making it completely untiered. +// Role determines what the role is. +class ComponentSlot(container: Container, slot: Int, x: Int, y: Int, val requirement: ComponentSlotRequirement): DynamicSlot(container, slot, x, y) { + override fun draw(graphics: GuiGraphics, relX: Int, relY: Int, mouseX: Int, mouseY: Int) { + super.draw(graphics, relX, relY, mouseX, mouseY) + if(!hasItem()) { + RenderSystem.enableBlend() + RenderSystem.setShaderTexture(0, ComponentRoles.getTextureFor(requirement.role)) + RenderSystem.setShader { GameRenderer.getPositionTexShader() } + drawQuad(relX + x - 1, relY + y - 1, 18, 18, 0F, 0F, 15F, 15F) + if (requirement.tier > 0) { + RenderSystem.setShaderTexture( + 0, + ResourceLocation.fromNamespaceAndPath( + NeoComputers.MODID, + "textures/gui/slots/tier${requirement.tier - 1}.png" + ) + ) + RenderSystem.setShader { GameRenderer.getPositionTexShader() } + drawQuad(relX + x - 1, relY + y - 1, 18, 18, 0F, 0F, 15F, 15F) + } + RenderSystem.disableBlend() + } + } + + override fun mayPlace(itemStack: ItemStack): Boolean { + if(!requirement.allowsItemStack(itemStack)) return false + return super.mayPlace(itemStack) + } + + override fun set(itemStack: ItemStack) { + super.set(itemStack) + val item = itemStack.item + if(item is ComponentItem) { + item.whenComponentPlaced(itemStack, requirement.role) + } + } + + override fun onTake(player: Player, itemStack: ItemStack) { + val item = itemStack.item + if(item is ComponentItem) { + item.whenComponentTaken(itemStack, requirement.role) + } + super.onTake(player, itemStack) + } + + override fun getMaxStackSize(): Int = 1 + override fun getMaxStackSize(itemStack: ItemStack): Int = 1 +} \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/gui/widget/DynamicSlot.kt b/src/main/kotlin/org/neoflock/neocomputers/gui/widget/DynamicSlot.kt index 005d2fc..a13c83e 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/gui/widget/DynamicSlot.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/gui/widget/DynamicSlot.kt @@ -18,7 +18,7 @@ open class DynamicSlot(container: Container, slot: Int, x: Int, y: Int) : Slot(c val BACKGROUND: ResourceLocation = ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "textures/gui/slots/slot.png") - fun draw(graphics: GuiGraphics, relX: Int, relY: Int, mouseX: Int, mouseY: Int) { + open fun draw(graphics: GuiGraphics, relX: Int, relY: Int, mouseX: Int, mouseY: Int) { RenderSystem.enableBlend() // background RenderSystem.setShaderTexture(0, BACKGROUND) RenderSystem.setShader { GameRenderer.getPositionTexShader() } @@ -26,7 +26,7 @@ open class DynamicSlot(container: Container, slot: Int, x: Int, y: Int) : Slot(c RenderSystem.disableBlend() } - private fun drawQuad(x: Int, y: Int, width: Int, height: Int, u1: Float, v1: Float, u2: Float, v2: Float) { + fun drawQuad(x: Int, y: Int, width: Int, height: Int, u1: Float, v1: Float, u2: Float, v2: Float) { var t: Tesselator = Tesselator.getInstance() var builder: BufferBuilder = t.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX) diff --git a/src/main/kotlin/org/neoflock/neocomputers/item/ComponentItem.kt b/src/main/kotlin/org/neoflock/neocomputers/item/ComponentItem.kt new file mode 100644 index 0000000..a31d7e4 --- /dev/null +++ b/src/main/kotlin/org/neoflock/neocomputers/item/ComponentItem.kt @@ -0,0 +1,20 @@ +package org.neoflock.neocomputers.item + +import net.minecraft.world.item.ItemStack +import org.neoflock.neocomputers.network.Networking + +// need not necessarily be just a component, can be upgrades as well +interface ComponentItem { + fun getComponentRoles(itemStack: ItemStack): Set + fun getComponentTier(itemStack: ItemStack): Int + + // Get machine properties they can influence + fun getMemoryCapacity(itemStack: ItemStack): Int + fun getComponentCapacity(itemStack: ItemStack): Int + + fun whenComponentPlaced(itemStack: ItemStack, newRole: String) + fun whenComponentTaken(itemStack: ItemStack, previousRole: String) + + // To node, if applicable + fun toComponentNode(itemStack: ItemStack): Networking.Node? +} \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/item/Items.kt b/src/main/kotlin/org/neoflock/neocomputers/item/Items.kt index d79388c..d453889 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/item/Items.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/item/Items.kt @@ -7,4 +7,11 @@ import org.neoflock.neocomputers.NeoComputers object Items { val ITEMS: DeferredRegister = DeferredRegister.create(NeoComputers.MODID, Registries.ITEM) + + val MEM0 = ITEMS.register("memory0") { MemoryTier1() } + val MEM1 = ITEMS.register("memory1") { MemoryTier1_5() } + val MEM2 = ITEMS.register("memory2") { MemoryTier2() } + val MEM3 = ITEMS.register("memory3") { MemoryTier2_5() } + val MEM4 = ITEMS.register("memory4") { MemoryTier3() } + val MEM5 = ITEMS.register("memory5") { MemoryTier3_5() } } \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/item/MemoryItem.kt b/src/main/kotlin/org/neoflock/neocomputers/item/MemoryItem.kt new file mode 100644 index 0000000..9e8b2c1 --- /dev/null +++ b/src/main/kotlin/org/neoflock/neocomputers/item/MemoryItem.kt @@ -0,0 +1,45 @@ +package org.neoflock.neocomputers.item + +import net.minecraft.network.chat.Component +import net.minecraft.world.item.Item +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.TooltipFlag +import org.neoflock.neocomputers.gui.widget.ComponentRoles +import org.neoflock.neocomputers.network.Networking +import org.neoflock.neocomputers.utils.Formatting + +open class MemoryItem(val tier: Int, val capacity: Int): Item(Item.Properties().`arch$tab`(Tabs.TAB)), ComponentItem { + override fun getComponentRoles(itemStack: ItemStack) = setOf(ComponentRoles.MEMORY) + + override fun getComponentTier(itemStack: ItemStack): Int = tier + + override fun getMemoryCapacity(itemStack: ItemStack): Int = capacity + + override fun getComponentCapacity(itemStack: ItemStack): Int = 0 + + override fun whenComponentPlaced(itemStack: ItemStack, newRole: String) {} + + override fun whenComponentTaken(itemStack: ItemStack, previousRole: String) {} + + // no node for memory + override fun toComponentNode(itemStack: ItemStack): Networking.Node? = null + + override fun appendHoverText( + itemStack: ItemStack, + tooltipContext: TooltipContext, + list: MutableList, + tooltipFlag: TooltipFlag + ) { + if(tooltipFlag.isAdvanced) { + list.addLast(Component.translatable("neocomputers.memory.capacity", Formatting.formatMemory(capacity.toLong()))) + } + super.appendHoverText(itemStack, tooltipContext, list, tooltipFlag) + } +} + +class MemoryTier1(): MemoryItem(1, 192 shl 10) +class MemoryTier1_5(): MemoryItem(1, 256 shl 10) +class MemoryTier2(): MemoryItem(2, 384 shl 10) +class MemoryTier2_5(): MemoryItem(2, 512 shl 10) +class MemoryTier3(): MemoryItem(3, 768 shl 10) +class MemoryTier3_5(): MemoryItem(3, 1 shl 20) \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/utils/Formatting.kt b/src/main/kotlin/org/neoflock/neocomputers/utils/Formatting.kt new file mode 100644 index 0000000..4838027 --- /dev/null +++ b/src/main/kotlin/org/neoflock/neocomputers/utils/Formatting.kt @@ -0,0 +1,15 @@ +package org.neoflock.neocomputers.utils + +object Formatting { + fun formatMemory(size: Long, spacing: String = " "): String { + var unit = 0 + val units = listOf("B", "KiB", "MiB", "GiB", "TiB", "PiB") + var num = size.toDouble() + while(unit < units.lastIndex && num >= 1024) { + num /= 1024 + unit++ + } + num = (num * 100).toInt().toDouble() / 100 + return "$num$spacing${units[unit]}" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/lang/en_us.json b/src/main/resources/assets/neocomputers/lang/en_us.json index fb06b58..67836e5 100644 --- a/src/main/resources/assets/neocomputers/lang/en_us.json +++ b/src/main/resources/assets/neocomputers/lang/en_us.json @@ -2,5 +2,6 @@ "neocomputers.confirm": "Confirm", "neocomputers.cancel": "Cancel", "block.neocomputers.combustgen": "Combustion Generator", - "block.neocomputers.redio": "Redstone I/O" + "block.neocomputers.redio": "Redstone I/O", + "neocomputers.memory.capacity": "Capacity: %1$s" } \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/item/memory0.json b/src/main/resources/assets/neocomputers/models/item/memory0.json new file mode 100644 index 0000000..68be951 --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/memory0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "neocomputers:item/memory0" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/item/memory1.json b/src/main/resources/assets/neocomputers/models/item/memory1.json new file mode 100644 index 0000000..c07962b --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/memory1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "neocomputers:item/memory1" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/item/memory2.json b/src/main/resources/assets/neocomputers/models/item/memory2.json new file mode 100644 index 0000000..d129aab --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/memory2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "neocomputers:item/memory2" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/item/memory3.json b/src/main/resources/assets/neocomputers/models/item/memory3.json new file mode 100644 index 0000000..8c96787 --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/memory3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "neocomputers:item/memory3" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/item/memory4.json b/src/main/resources/assets/neocomputers/models/item/memory4.json new file mode 100644 index 0000000..816d02d --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/memory4.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "neocomputers:item/memory4" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/item/memory5.json b/src/main/resources/assets/neocomputers/models/item/memory5.json new file mode 100644 index 0000000..de955a4 --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/memory5.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "neocomputers:item/memory5" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/textures/gui/slots/component_bus.png b/src/main/resources/assets/neocomputers/textures/gui/slots/component_bus.png new file mode 100644 index 0000000000000000000000000000000000000000..339e99089033439da253df748a5cfe2999d9092f GIT binary patch literal 463 zcmV;=0WkiFP)KoG{iXrd7UQHfwc z1dBkl&`JcWJc93FWo>8cGgt~ficg@836}P0j3gxZ|7MODb9mRJxPi^EJ3HV0W_BYy z9uH)(95R|nAHy&#^1kn9Ku=09nV$KzUzC$(CQH{|nq9=TisCrJ{n*DH#}A_|29 zuQ`sB5YWjaAP53hs}*Lm8Nx8ce!u5U^ZA^`HBEyo%NP!asMqUjiU}0Zb=_*UT5w$# z_xl~qW)s`(mXkftL%-jLD2gbRO0TkP+fGV|7YTK_Tw*erq-q@u2B=gjxZQ4CMyJz3 zwOUOGzJgY}-6lmQAk4$zkRqVd$$}tYzuWET;G~I^NMo^BU^<2;+<(ChU$k?=2<3$JfBn}mS69~*UiJRWmmY~5}bjYfm_ee6L@5I6ID zKC`F0r#C^Ss_I9Am%v}om4x2?+e`fx_}8B)v%ph;0RaCfzV~MyA9w%&002ovPDHLk FV1lX~%Mkzo literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/neocomputers/textures/gui/slots/container.png b/src/main/resources/assets/neocomputers/textures/gui/slots/container.png new file mode 100644 index 0000000000000000000000000000000000000000..7d27810c1e0f8a1fd80c8e9068d4c0e747a7627c GIT binary patch literal 446 zcmV;v0YUzWP)W z=jUg~*>1P&keHxL)087uRn?p9x~})#G>y(uN}cmO7ZWqNTCGGFhCRS$v(eeqUDvg_ zEK9xV5d|z33$B_5PN!1s6zK;?|jjl0a6+oss zh9)!Mwr$ybKG!6uVO^GGtSE{x0VL9$X`IbwmLv#*@hup)_kk(NF1RvK$T#^%U_wo> zBuVsmy6LK?xoFjY<}$E9$x) o$$xqJuwx@%VTE((@BAyk03Hys4m%yfQvd(}07*qoM6N<$f}JkFF#rGn literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/neocomputers/textures/gui/slots/floppy.png b/src/main/resources/assets/neocomputers/textures/gui/slots/floppy.png new file mode 100644 index 0000000000000000000000000000000000000000..62b9050c45c8dd9c9fdf17e6fb59a177d579c9d0 GIT binary patch literal 421 zcmV;W0b2fvP)9w-^I3VDT+e-=Xn;#aWqMu=MqJcv~4S|*Xsci3!rsf^;nig zt6;_j43L#&Da64ShM``cBABL0A3_l%*aHN03Q&aPhJa3jj`_m>e!pcLM?=6nh5!dp z#*8|^vMf6llQVFGQFjv>*u11W*S7 zoONBBZdjHj$0B2&rm4YRYQRWtx7#HWwvd=Vi|D$p9G^F;4`oDz!A`J<7E^$etOUb6 z&(m*#XTTDFdPv6y!U*WoN_!MsGo4ckecx->c3GP4z{ z@crGE-q019bb9A%XcP(s{LAOjgg6cl4p1x>q1TrrLl6AE>YteJ-R@_u4+D^xgtS9= zt|$4+`e)|t*IV*l2~dk8U59Nud=9z2qYIw!(9wN|IfQH>%uHg!$YPTD<^04&IdD?3 z)BswK7BB+NuDqAd{m%x1R;rn6E08UaAl$C)!m@1KA9{dNsiX+bLI#LNH7OueDhA%n zrePT7Igw*Ia2)%z1tDDI^MA3qkYNF3d^q}8IurJHw=wwQ5#DWNFg!P^4pG>)6f_<; zf|g+zphtGaU!p~@nDBgNSgA%1aUqq)WGVsEG*K>>r9&hV!R*sXJ_{$P#hsr{fo;TnNUC5*whr_ZEZ08pd_SytF!a`5L?@?2cJ>XlmKL3^Q)*utt|um$n7(~ zN~IL%nPd`8v6ym4woz@91AKg&Mf}E1IdOh0{s4s#a9tOB*(^@{(&>kzy|%iFZ+qX_ ouZ|p}4b6SH1WfyA=f4000DO`JEwthJ-2eap07*qoM6N<$f{RWV0ssI2 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/neocomputers/textures/gui/slots/tablet.png b/src/main/resources/assets/neocomputers/textures/gui/slots/tablet.png new file mode 100644 index 0000000000000000000000000000000000000000..f748cc4082f1eb3a3b659dfbc5d42dcd19958b26 GIT binary patch literal 270 zcmV+p0rCEcP)$*Y+0hqNGrfJG<9TCAfSC#>dQB$F_ZCkeacN9qDIA$4}rny3Vw(^Y# zbFGwu7$bP^v&>p+FvgT;z-Sk$s>(Jl%W{%HdO!%#y`p(Xb%$`C=N|vQjSm3^0IFPJ UDyQ>zU;qFB07*qoM6N<$g0`z{TL1t6 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/neocomputers/textures/gui/slots/tool.png b/src/main/resources/assets/neocomputers/textures/gui/slots/tool.png new file mode 100644 index 0000000000000000000000000000000000000000..17521d1f6888bf2ee0b896bf29fd607f89ba49bb GIT binary patch literal 355 zcmV-p0i6DcP)79pb?k|1e!zS0IfivIRP4hD0!J~XOpIdneI#`KTW>f_tMCwX~dLJsl}ow zG>xmOvVQ>Ra2I|@Jm0KIJ${xH_i^U4NIgkGoJ zLlDSJ^D!emAa);tvN?1Jq9W5Qu8uiwITS`ah<1`X2$#^)M^`phNyazFcT7-JLN|qm zN?>&IEuQWdN#kz~+JjAgrXMgg4qMYx56Wy?Fls+35h}3anuOisv(D&JbnD_up@+ zml7#903#)un3yief>Rq3YA=x zfZ*oMCP6_#DGMnV7ngPG)}1du`zbLPzX|Ns9p7JiTeL`#DFf`MENz@UAz_7zY; zmZytjNX4y~UPqw@1s>+$6}nAITL0@;A39ieW?}o>CEfqHk0quFlo~Ra?5i{_kkx#9 z!>(b1SLX({bGFAk_6dr3t!9^yV*e!lUpeLME1eR*wWb+atN$)A+ma-_GSu~`+NPc_ fPnqrd8JHPL75TKqS4C?@AX8soUqVMhNl8h=Rb$VdLLp@#K|w)IVNUG; z?VC57q%5S?ty_2M)F~Gim)6$SJ9qBPnKS4A|Nky?rP_g-MM{GFf`MFgz~JxyTo5Rq z=IP=XQgJJ$*HP$z0uR&08E$K%qW}ND?q?(6&L<-wX29pzJJZqR2-AX3$EUNte_VTH zFH?$qQ?u!XMa6yJ+LX4Kizx1PwKd*;><#dt$d2tm=?ZT3YflsYB(ehxU!H b+y)HH4!mii^J7YZHZpj+`njxgN@xNAC`57k literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/neocomputers/textures/item/memory2.png b/src/main/resources/assets/neocomputers/textures/item/memory2.png new file mode 100644 index 0000000000000000000000000000000000000000..d1522c9b5e50a9621274ddd3d3c46c01dd022153 GIT binary patch literal 322 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!foj{u(#S4C?@AX7p|LSJ8BNl9tXp2F6aA`Mp!PGL?VWg&w& z13^K-n>U-TUR`1lZ{gzNq8Fs6?b{orETsPb|L^emEhEUFk|4ie zAQu~8I4i983aBQ>)5S5Q;#N$bH{SsT4pzZ6UTd$_?fvh&TCb(VBgRMW(}I5u|0>=y zZrs!{w_{Pf%Z15n8gsc6vS&|Vak=a;wcv)kYLVVkH%sp8w=UH0Slqj-X>q%k!qUsL uwrgFi-mvDwi-VgEEet*^GRwb#ksSB<2Hh>aZCQWVwn%Liow&> K&t;ucLK6UB#Ag`* literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/neocomputers/textures/item/memory4.png b/src/main/resources/assets/neocomputers/textures/item/memory4.png new file mode 100644 index 0000000000000000000000000000000000000000..a732b1716c9c1763cd85fac6871a8d38fe942ed4 GIT binary patch literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!foj{u(#S4C?@AX8soUqVMhNlA%Qm~+pbLW4L14Oa~zWug4G z&YL%z1O)|^Y?T&Wx@Hk?p%lZ8NoBuaw( zf`MFYfZ?pL-YcM*Tu&FrkcwL|ecpTr6gXG~w{(U6UjKc6=GE2-e4X7Vo#n2`Uzjhz zBoHcAsF1|f&9SG;bb}vbMy~Lrh7_qKLWbKFr{36BdtN2|;TPV&?qAmTzvAkZ({hZE u%YL`Y<^91;hZeJ+=GyI78k}Lr$i`6nLV&q@Qp7Q!#SEUVelF{r5}E+9kbMaN literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/neocomputers/textures/item/memory5.png b/src/main/resources/assets/neocomputers/textures/item/memory5.png new file mode 100644 index 0000000000000000000000000000000000000000..2a851fa245076a757c153c25eeb3cd15fdd81b61 GIT binary patch literal 281 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!fo;{cx!S0Jsgudk$}q-d=up(C+pPobcopoXgkr!c3Gve3<& zO)f4ji!NQ;aPy9og;dY+Gynhpce90?TwL`3@~i-sdA-pAXKu?Luy3pknd*8+XimqD*V7o*`yDvW)Z@aO(p)Yv z@e)V-6gP__|7D(bw=6bc`R!a#&3HM{a$`Y+-l5CNSJB=9WCS{Pt0xRScf4 KelF{r5}E*Acx*iY literal 0 HcmV?d00001 From 5c44ee6c8669a2a53a27ebcfbb0ed92136266a2e Mon Sep 17 00:00:00 2001 From: IonutParau Date: Sun, 19 Apr 2026 15:13:27 +0200 Subject: [PATCH 2/6] EEPROMs --- .../org/neoflock/neocomputers/NeoComputers.kt | 8 --- .../neocomputers/item/DataComponents.kt | 19 +++++ .../neoflock/neocomputers/item/EEPROMItem.kt | 65 ++++++++++++++++++ .../org/neoflock/neocomputers/item/Items.kt | 28 ++++++-- .../org/neoflock/neocomputers/item/Tabs.kt | 31 ++++++--- .../assets/neocomputers/lang/en_us.json | 6 +- .../neocomputers/textures/item/eeprom0.png | Bin 0 -> 393 bytes 7 files changed, 132 insertions(+), 25 deletions(-) create mode 100644 src/main/kotlin/org/neoflock/neocomputers/item/DataComponents.kt create mode 100644 src/main/kotlin/org/neoflock/neocomputers/item/EEPROMItem.kt create mode 100644 src/main/resources/assets/neocomputers/textures/item/eeprom0.png diff --git a/src/main/kotlin/org/neoflock/neocomputers/NeoComputers.kt b/src/main/kotlin/org/neoflock/neocomputers/NeoComputers.kt index f321c0e..b04a65b 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/NeoComputers.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/NeoComputers.kt @@ -3,22 +3,15 @@ package org.neoflock.neocomputers import dev.architectury.event.events.client.ClientLifecycleEvent import dev.architectury.event.events.common.PlayerEvent import dev.architectury.event.events.common.TickEvent -import dev.architectury.impl.NetworkAggregator import dev.architectury.networking.NetworkManager import net.minecraft.resources.ResourceLocation import org.neoflock.neocomputers.block.Blocks import org.neoflock.neocomputers.entity.BlockEntities -import org.neoflock.neocomputers.gui.buffer.BufferRenderer import org.neoflock.neocomputers.gui.menu.Menus -import org.neoflock.neocomputers.gui.screen.ScreenScreen -import dev.architectury.registry.menu.MenuRegistry import dev.architectury.utils.Env import dev.architectury.utils.EnvExecutor import net.minecraft.client.Minecraft -import net.minecraft.client.player.LocalPlayer -import net.minecraft.network.protocol.common.custom.CustomPacketPayload import net.minecraft.server.level.ServerPlayer -import org.neoflock.neocomputers.block.NodeBlock import org.neoflock.neocomputers.block.NodeBlockEntity import org.neoflock.neocomputers.block.NodeSynchronizer import org.neoflock.neocomputers.gui.render.ScreenRenderer @@ -103,7 +96,6 @@ object NeoComputers { }} - LOGGER.info("Registered!") //LOGGER.info("Started mod in %s loader".formatted(NeoComputersInit.PLATFORM.getModloader())) //LOGGER.info("Kotlin: %s".formatted(NeoComputers.hello())) diff --git a/src/main/kotlin/org/neoflock/neocomputers/item/DataComponents.kt b/src/main/kotlin/org/neoflock/neocomputers/item/DataComponents.kt new file mode 100644 index 0000000..824f865 --- /dev/null +++ b/src/main/kotlin/org/neoflock/neocomputers/item/DataComponents.kt @@ -0,0 +1,19 @@ +package org.neoflock.neocomputers.item + +import com.mojang.serialization.Codec +import net.minecraft.core.Registry +import net.minecraft.core.component.DataComponentType +import net.minecraft.core.registries.BuiltInRegistries +import net.minecraft.resources.ResourceLocation +import org.neoflock.neocomputers.NeoComputers + +object DataComponents { + val ADDRESS = Registry.register(BuiltInRegistries.DATA_COMPONENT_TYPE, ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "address"), + DataComponentType.builder().persistent(Codec.STRING).build()) + val LABEL = Registry.register(BuiltInRegistries.DATA_COMPONENT_TYPE, ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "label"), + DataComponentType.builder().persistent(Codec.STRING).build()) + val EEPROM_CODE = Registry.register(BuiltInRegistries.DATA_COMPONENT_TYPE, ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "eeprom_code"), + DataComponentType.builder().persistent(Codec.STRING).build()) + val EEPROM_DATA = Registry.register(BuiltInRegistries.DATA_COMPONENT_TYPE, ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "eeprom_data"), + DataComponentType.builder().persistent(Codec.STRING).build()) +} \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/item/EEPROMItem.kt b/src/main/kotlin/org/neoflock/neocomputers/item/EEPROMItem.kt new file mode 100644 index 0000000..459d4f2 --- /dev/null +++ b/src/main/kotlin/org/neoflock/neocomputers/item/EEPROMItem.kt @@ -0,0 +1,65 @@ +package org.neoflock.neocomputers.item + +import net.minecraft.network.chat.Component +import net.minecraft.world.item.Item +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.TooltipFlag +import org.neoflock.neocomputers.gui.widget.ComponentRoles +import org.neoflock.neocomputers.network.Networking +import org.neoflock.neocomputers.utils.Formatting +import java.util.UUID + +fun getEEPROMProperties(): Item.Properties = Item.Properties().component( + DataComponents.EEPROM_CODE, "").component(DataComponents.EEPROM_DATA, "").component(DataComponents.LABEL, "") + +open class EEPROMItem(val tier: Int, val codeCapacity: Int, val dataCapacity: Int): Item(getEEPROMProperties()), ComponentItem { + override fun getComponentRoles(itemStack: ItemStack): Set = setOf(ComponentRoles.FIRMWARE) + + override fun getComponentTier(itemStack: ItemStack): Int = tier + + override fun getMemoryCapacity(itemStack: ItemStack): Int = 0 + + override fun getComponentCapacity(itemStack: ItemStack): Int = 0 + + override fun whenComponentPlaced(itemStack: ItemStack, newRole: String) { + if(!itemStack.has(DataComponents.ADDRESS)) { + itemStack.set(DataComponents.ADDRESS, UUID.randomUUID().toString()) + } + } + + override fun whenComponentTaken(itemStack: ItemStack, previousRole: String) {} + + override fun toComponentNode(itemStack: ItemStack): Networking.Node? = null + + override fun appendHoverText( + itemStack: ItemStack, + tooltipContext: TooltipContext, + list: MutableList, + tooltipFlag: TooltipFlag + ) { + if(tooltipFlag.isAdvanced) { + val code = itemStack.get(DataComponents.EEPROM_CODE) ?: "" + val data = itemStack.get(DataComponents.EEPROM_DATA) ?: "" + val addr = itemStack.get(DataComponents.ADDRESS) + val codeSize = code.encodeToByteArray().size + val dataSize = data.encodeToByteArray().size + val addrComp = if(addr == null) Component.translatable("neocomputers.noaddr") else Component.literal(addr) + list.addLast(addrComp) + list.addLast(Component.translatable("neocomputers.eeprom.codeused", Formatting.formatMemory(codeSize.toLong()), + Formatting.formatMemory(codeCapacity.toLong()))) + list.addLast(Component.translatable("neocomputers.eeprom.dataused", Formatting.formatMemory(dataSize.toLong()), + Formatting.formatMemory(dataCapacity.toLong()))) + } + super.appendHoverText(itemStack, tooltipContext, list, tooltipFlag) + } + + override fun getName(itemStack: ItemStack): Component? { + if(itemStack.has(DataComponents.LABEL)) { + val label = itemStack.get(DataComponents.LABEL) ?: "" + if(label.isNotEmpty()) return Component.literal(label) + } + return super.getName(itemStack) + } +} + +class EEPROM0: EEPROMItem(1, 4096, 256) \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/item/Items.kt b/src/main/kotlin/org/neoflock/neocomputers/item/Items.kt index d453889..964720a 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/item/Items.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/item/Items.kt @@ -1,17 +1,31 @@ -package org.neoflock.neocomputers.item; +package org.neoflock.neocomputers.item import dev.architectury.registry.registries.DeferredRegister +import net.minecraft.core.Registry +import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.core.registries.Registries +import net.minecraft.resources.ResourceKey +import net.minecraft.resources.ResourceLocation import net.minecraft.world.item.Item import org.neoflock.neocomputers.NeoComputers +import java.util.function.Supplier object Items { val ITEMS: DeferredRegister = DeferredRegister.create(NeoComputers.MODID, Registries.ITEM) - val MEM0 = ITEMS.register("memory0") { MemoryTier1() } - val MEM1 = ITEMS.register("memory1") { MemoryTier1_5() } - val MEM2 = ITEMS.register("memory2") { MemoryTier2() } - val MEM3 = ITEMS.register("memory3") { MemoryTier2_5() } - val MEM4 = ITEMS.register("memory4") { MemoryTier3() } - val MEM5 = ITEMS.register("memory5") { MemoryTier3_5() } + val MEM0 = register("memory0") { MemoryTier1() } + val MEM1 = register("memory1") { MemoryTier1_5() } + val MEM2 = register("memory2") { MemoryTier2() } + val MEM3 = register("memory3") { MemoryTier2_5() } + val MEM4 = register("memory4") { MemoryTier3() } + val MEM5 = register("memory5") { MemoryTier3_5() } + + val EE0 = register("eeprom0") { EEPROM0() } + + fun register(name: String, itemFac: Supplier): T { + val key = ResourceKey.create(Registries.ITEM, ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, name)) + val item = itemFac.get() + Registry.register(BuiltInRegistries.ITEM, key, item) + return item + } } \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/item/Tabs.kt b/src/main/kotlin/org/neoflock/neocomputers/item/Tabs.kt index 071758f..35ccb71 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/item/Tabs.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/item/Tabs.kt @@ -1,22 +1,35 @@ -package org.neoflock.neocomputers.item; +package org.neoflock.neocomputers.item import dev.architectury.registry.CreativeTabRegistry import dev.architectury.registry.registries.DeferredRegister -import dev.architectury.registry.registries.RegistrySupplier +import net.minecraft.core.Registry +import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.core.registries.Registries import net.minecraft.network.chat.Component +import net.minecraft.resources.ResourceLocation import net.minecraft.world.item.CreativeModeTab import net.minecraft.world.item.ItemStack -import net.minecraft.world.item.Items import org.neoflock.neocomputers.NeoComputers -import java.util.function.Supplier - object Tabs { val TABS: DeferredRegister = DeferredRegister.create(NeoComputers.MODID, Registries.CREATIVE_MODE_TAB) - val TAB: RegistrySupplier = TABS.register("neocomputers_tab", Supplier {CreativeTabRegistry.create( - Component.literal("NeoComputers"), - Supplier { ItemStack(Items.ACACIA_BOAT) } - )}) + val TAB: CreativeModeTab = Registry.register(BuiltInRegistries.CREATIVE_MODE_TAB, + ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "neocomputers_tab"), CreativeTabRegistry.create { + builder -> + builder.title(Component.literal("NeoComputers")) + builder.icon { + ItemStack(Items.MEM0) + } + builder.displayItems { + parameters, output -> + output.accept(ItemStack(Items.EE0)) + + val luaBios = ItemStack(Items.EE0) + luaBios.set(DataComponents.LABEL, "Lua BIOS") + luaBios.set(DataComponents.EEPROM_CODE, "error('hi')") + luaBios.set(DataComponents.EEPROM_DATA, "random garbage") + output.accept(luaBios) + } + }) } \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/lang/en_us.json b/src/main/resources/assets/neocomputers/lang/en_us.json index 67836e5..1009565 100644 --- a/src/main/resources/assets/neocomputers/lang/en_us.json +++ b/src/main/resources/assets/neocomputers/lang/en_us.json @@ -3,5 +3,9 @@ "neocomputers.cancel": "Cancel", "block.neocomputers.combustgen": "Combustion Generator", "block.neocomputers.redio": "Redstone I/O", - "neocomputers.memory.capacity": "Capacity: %1$s" + "item.neocomputers.eeprom0": "EEPROM (Tier 1)", + "neocomputers.noaddr": "No address assigned", + "neocomputers.memory.capacity": "Capacity: %1$s", + "neocomputers.eeprom.codeused": "Code Storage: %1$s / %2$s", + "neocomputers.eeprom.dataused": "Data Storage: %1$s / %2$s" } \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/textures/item/eeprom0.png b/src/main/resources/assets/neocomputers/textures/item/eeprom0.png new file mode 100644 index 0000000000000000000000000000000000000000..7dbd8218588629037dae6706db4831ea6f75b9c4 GIT binary patch literal 393 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8(g2?jS0OoZ$D(kL`a}f_9m7y3yWC*Uh9sNJK>LDFizIK~ zjx6hpfXF$OYEC90lZ$rj*r9B#U%qL|!Gi}i+|0IY*>e7Tjek$h|NsBjty^al;d155 zm3#Ll=>^y=UcC7H`ST}EobYN+d-m+v&6`bEulBBAzkc)P0-$2|*@r`c4p1)%@(TuX zi2w}EVbgB{wUm3hIEGZ*Dmi~#sM&zWHIVc4p&b{TJk?o${P$Psj!2wQFg^Wan%tS$ z5A2`3R9EVnApO4fy6P+Ll^f6K=diBWB%W6&6mV?cOhMre>4vD+I>HK@Te)U0Ti4I@ zs`2~2`g#6L=kB&GlHeCS5bMm5`ja{H|D9E?4U7!kZzO~JDu3kzoxtGf>gTe~DWM4f D=7zXJ literal 0 HcmV?d00001 From f1d39aa12c099e28eb1eb35aca0d60e3590b74c2 Mon Sep 17 00:00:00 2001 From: IonutParau Date: Sun, 19 Apr 2026 15:16:16 +0200 Subject: [PATCH 3/6] EEPROM texture --- .../resources/assets/neocomputers/models/item/eeprom0.json | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 src/main/resources/assets/neocomputers/models/item/eeprom0.json diff --git a/src/main/resources/assets/neocomputers/models/item/eeprom0.json b/src/main/resources/assets/neocomputers/models/item/eeprom0.json new file mode 100644 index 0000000..45c9dfe --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/eeprom0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "neocomputers:item/eeprom0" + } +} \ No newline at end of file From b025159791e8a1348170ccda54365c2d76ff6ea1 Mon Sep 17 00:00:00 2001 From: IonutParau Date: Sun, 19 Apr 2026 15:22:45 +0200 Subject: [PATCH 4/6] Lazy loading --- .../org/neoflock/neocomputers/item/Items.kt | 21 ++++-------- .../org/neoflock/neocomputers/item/Tabs.kt | 34 +++++++++---------- 2 files changed, 24 insertions(+), 31 deletions(-) diff --git a/src/main/kotlin/org/neoflock/neocomputers/item/Items.kt b/src/main/kotlin/org/neoflock/neocomputers/item/Items.kt index 964720a..c4051e8 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/item/Items.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/item/Items.kt @@ -13,19 +13,12 @@ import java.util.function.Supplier object Items { val ITEMS: DeferredRegister = DeferredRegister.create(NeoComputers.MODID, Registries.ITEM) - val MEM0 = register("memory0") { MemoryTier1() } - val MEM1 = register("memory1") { MemoryTier1_5() } - val MEM2 = register("memory2") { MemoryTier2() } - val MEM3 = register("memory3") { MemoryTier2_5() } - val MEM4 = register("memory4") { MemoryTier3() } - val MEM5 = register("memory5") { MemoryTier3_5() } + val MEM0 = ITEMS.register("memory0") { MemoryTier1() } + val MEM1 = ITEMS.register("memory1") { MemoryTier1_5() } + val MEM2 = ITEMS.register("memory2") { MemoryTier2() } + val MEM3 = ITEMS.register("memory3") { MemoryTier2_5() } + val MEM4 = ITEMS.register("memory4") { MemoryTier3() } + val MEM5 = ITEMS.register("memory5") { MemoryTier3_5() } - val EE0 = register("eeprom0") { EEPROM0() } - - fun register(name: String, itemFac: Supplier): T { - val key = ResourceKey.create(Registries.ITEM, ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, name)) - val item = itemFac.get() - Registry.register(BuiltInRegistries.ITEM, key, item) - return item - } + val EE0 = ITEMS.register("eeprom0") { EEPROM0() } } \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/item/Tabs.kt b/src/main/kotlin/org/neoflock/neocomputers/item/Tabs.kt index 35ccb71..aba1b2a 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/item/Tabs.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/item/Tabs.kt @@ -12,24 +12,24 @@ import net.minecraft.world.item.ItemStack import org.neoflock.neocomputers.NeoComputers object Tabs { - val TABS: DeferredRegister = DeferredRegister.create(NeoComputers.MODID, Registries.CREATIVE_MODE_TAB) + val TABS: DeferredRegister = + DeferredRegister.create(NeoComputers.MODID, Registries.CREATIVE_MODE_TAB) - val TAB: CreativeModeTab = Registry.register(BuiltInRegistries.CREATIVE_MODE_TAB, - ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "neocomputers_tab"), CreativeTabRegistry.create { - builder -> - builder.title(Component.literal("NeoComputers")) - builder.icon { - ItemStack(Items.MEM0) - } - builder.displayItems { - parameters, output -> - output.accept(ItemStack(Items.EE0)) + val TAB = TABS.register("neocomputers_tab") { + CreativeTabRegistry.create { builder -> + builder.title(Component.literal("NeoComputers")) + builder.icon { + ItemStack(Items.MEM0.get()) + } + builder.displayItems { parameters, output -> + output.accept(ItemStack(Items.EE0.get())) - val luaBios = ItemStack(Items.EE0) - luaBios.set(DataComponents.LABEL, "Lua BIOS") - luaBios.set(DataComponents.EEPROM_CODE, "error('hi')") - luaBios.set(DataComponents.EEPROM_DATA, "random garbage") - output.accept(luaBios) + val luaBios = ItemStack(Items.EE0.get()) + luaBios.set(DataComponents.LABEL, "Lua BIOS") + luaBios.set(DataComponents.EEPROM_CODE, "error('hi')") + luaBios.set(DataComponents.EEPROM_DATA, "random garbage") + output.accept(luaBios) + } } - }) + } } \ No newline at end of file From 0416ddd4a559d5eb887f7712ca087996e643e029 Mon Sep 17 00:00:00 2001 From: IonutParau Date: Sun, 19 Apr 2026 21:22:12 +0200 Subject: [PATCH 5/6] bunch of cards --- .../neoflock/neocomputers/block/NodeBlock.kt | 14 ++++ .../neocomputers/gui/widget/ComponentSlot.kt | 7 ++ .../neoflock/neocomputers/item/CBUSItem.kt | 20 ++++++ .../org/neoflock/neocomputers/item/CPUItem.kt | 20 ++++++ .../neocomputers/item/ComponentItem.kt | 25 +++++-- .../neoflock/neocomputers/item/DataCard.kt | 45 +++++++++++++ .../neocomputers/item/DataComponents.kt | 2 + .../neoflock/neocomputers/item/EEPROMItem.kt | 16 +++-- .../org/neoflock/neocomputers/item/GPUCard.kt | 44 +++++++++++++ .../org/neoflock/neocomputers/item/HDDItem.kt | 62 ++++++++++++++++++ .../neocomputers/item/InternetCard.kt | 38 +++++++++++ .../org/neoflock/neocomputers/item/Items.kt | 32 +++++++-- .../neoflock/neocomputers/item/NetworkCard.kt | 43 ++++++++++++ .../org/neoflock/neocomputers/item/Tabs.kt | 32 ++++++++- .../neoflock/neocomputers/item/TunnelCard.kt | 39 +++++++++++ .../neocomputers/network/Networking.kt | 18 ++--- .../assets/neocomputers/lang/en_us.json | 37 +++++++++++ .../neocomputers/models/item/cbus0.json | 6 ++ .../neocomputers/models/item/cbus1.json | 6 ++ .../neocomputers/models/item/cbus2.json | 6 ++ .../models/item/cbus_creative.json | 6 ++ .../assets/neocomputers/models/item/cpu0.json | 6 ++ .../assets/neocomputers/models/item/cpu1.json | 6 ++ .../assets/neocomputers/models/item/cpu2.json | 6 ++ .../neocomputers/models/item/data0.json | 6 ++ .../neocomputers/models/item/data1.json | 6 ++ .../neocomputers/models/item/data2.json | 6 ++ .../assets/neocomputers/models/item/gpu0.json | 6 ++ .../assets/neocomputers/models/item/gpu1.json | 6 ++ .../assets/neocomputers/models/item/gpu2.json | 6 ++ .../assets/neocomputers/models/item/hdd0.json | 6 ++ .../assets/neocomputers/models/item/hdd1.json | 6 ++ .../assets/neocomputers/models/item/hdd2.json | 6 ++ .../assets/neocomputers/models/item/inet.json | 6 ++ .../assets/neocomputers/models/item/lan.json | 6 ++ .../neocomputers/models/item/tunnel.json | 6 ++ .../neocomputers/models/item/wlan0.json | 6 ++ .../neocomputers/models/item/wlan1.json | 6 ++ .../textures/block/capacitor_bottom.png | Bin 112 -> 494 bytes .../textures/block/capacitor_side.png | Bin 119 -> 623 bytes .../textures/block/capacitor_top.png | Bin 112 -> 551 bytes .../neocomputers/textures/item/cbus0.png | Bin 0 -> 462 bytes .../neocomputers/textures/item/cbus1.png | Bin 0 -> 478 bytes .../neocomputers/textures/item/cbus2.png | Bin 0 -> 456 bytes .../textures/item/cbus_creative.png | Bin 0 -> 3154 bytes .../neocomputers/textures/item/cpu0.png | Bin 0 -> 320 bytes .../neocomputers/textures/item/cpu1.png | Bin 0 -> 352 bytes .../neocomputers/textures/item/cpu2.png | Bin 0 -> 360 bytes .../neocomputers/textures/item/data0.png | Bin 0 -> 489 bytes .../textures/item/data0.png.mcmeta | 15 +++++ .../neocomputers/textures/item/data1.png | Bin 0 -> 1124 bytes .../textures/item/data1.png.mcmeta | 15 +++++ .../neocomputers/textures/item/data2.png | Bin 0 -> 1457 bytes .../textures/item/data2.png.mcmeta | 15 +++++ .../neocomputers/textures/item/gpu0.png | Bin 0 -> 400 bytes .../neocomputers/textures/item/gpu1.png | Bin 0 -> 390 bytes .../neocomputers/textures/item/gpu2.png | Bin 0 -> 390 bytes .../neocomputers/textures/item/hdd0.png | Bin 0 -> 425 bytes .../neocomputers/textures/item/hdd1.png | Bin 0 -> 429 bytes .../neocomputers/textures/item/hdd2.png | Bin 0 -> 429 bytes .../neocomputers/textures/item/inet.png | Bin 0 -> 428 bytes .../textures/item/inet.png.mcmeta | 17 +++++ .../assets/neocomputers/textures/item/lan.png | Bin 0 -> 351 bytes .../neocomputers/textures/item/red0.png | Bin 0 -> 394 bytes .../neocomputers/textures/item/red1.png | Bin 0 -> 417 bytes .../neocomputers/textures/item/tunnel.png | Bin 0 -> 655 bytes .../textures/item/tunnel.png.mcmeta | 13 ++++ .../neocomputers/textures/item/wlan0.png | Bin 0 -> 473 bytes .../neocomputers/textures/item/wlan1.png | Bin 0 -> 472 bytes 69 files changed, 668 insertions(+), 27 deletions(-) create mode 100644 src/main/kotlin/org/neoflock/neocomputers/item/CBUSItem.kt create mode 100644 src/main/kotlin/org/neoflock/neocomputers/item/CPUItem.kt create mode 100644 src/main/kotlin/org/neoflock/neocomputers/item/DataCard.kt create mode 100644 src/main/kotlin/org/neoflock/neocomputers/item/GPUCard.kt create mode 100644 src/main/kotlin/org/neoflock/neocomputers/item/HDDItem.kt create mode 100644 src/main/kotlin/org/neoflock/neocomputers/item/InternetCard.kt create mode 100644 src/main/kotlin/org/neoflock/neocomputers/item/NetworkCard.kt create mode 100644 src/main/kotlin/org/neoflock/neocomputers/item/TunnelCard.kt create mode 100644 src/main/resources/assets/neocomputers/models/item/cbus0.json create mode 100644 src/main/resources/assets/neocomputers/models/item/cbus1.json create mode 100644 src/main/resources/assets/neocomputers/models/item/cbus2.json create mode 100644 src/main/resources/assets/neocomputers/models/item/cbus_creative.json create mode 100644 src/main/resources/assets/neocomputers/models/item/cpu0.json create mode 100644 src/main/resources/assets/neocomputers/models/item/cpu1.json create mode 100644 src/main/resources/assets/neocomputers/models/item/cpu2.json create mode 100644 src/main/resources/assets/neocomputers/models/item/data0.json create mode 100644 src/main/resources/assets/neocomputers/models/item/data1.json create mode 100644 src/main/resources/assets/neocomputers/models/item/data2.json create mode 100644 src/main/resources/assets/neocomputers/models/item/gpu0.json create mode 100644 src/main/resources/assets/neocomputers/models/item/gpu1.json create mode 100644 src/main/resources/assets/neocomputers/models/item/gpu2.json create mode 100644 src/main/resources/assets/neocomputers/models/item/hdd0.json create mode 100644 src/main/resources/assets/neocomputers/models/item/hdd1.json create mode 100644 src/main/resources/assets/neocomputers/models/item/hdd2.json create mode 100644 src/main/resources/assets/neocomputers/models/item/inet.json create mode 100644 src/main/resources/assets/neocomputers/models/item/lan.json create mode 100644 src/main/resources/assets/neocomputers/models/item/tunnel.json create mode 100644 src/main/resources/assets/neocomputers/models/item/wlan0.json create mode 100644 src/main/resources/assets/neocomputers/models/item/wlan1.json create mode 100644 src/main/resources/assets/neocomputers/textures/item/cbus0.png create mode 100644 src/main/resources/assets/neocomputers/textures/item/cbus1.png create mode 100644 src/main/resources/assets/neocomputers/textures/item/cbus2.png create mode 100644 src/main/resources/assets/neocomputers/textures/item/cbus_creative.png create mode 100644 src/main/resources/assets/neocomputers/textures/item/cpu0.png create mode 100644 src/main/resources/assets/neocomputers/textures/item/cpu1.png create mode 100644 src/main/resources/assets/neocomputers/textures/item/cpu2.png create mode 100644 src/main/resources/assets/neocomputers/textures/item/data0.png create mode 100644 src/main/resources/assets/neocomputers/textures/item/data0.png.mcmeta create mode 100644 src/main/resources/assets/neocomputers/textures/item/data1.png create mode 100644 src/main/resources/assets/neocomputers/textures/item/data1.png.mcmeta create mode 100644 src/main/resources/assets/neocomputers/textures/item/data2.png create mode 100644 src/main/resources/assets/neocomputers/textures/item/data2.png.mcmeta create mode 100644 src/main/resources/assets/neocomputers/textures/item/gpu0.png create mode 100644 src/main/resources/assets/neocomputers/textures/item/gpu1.png create mode 100644 src/main/resources/assets/neocomputers/textures/item/gpu2.png create mode 100644 src/main/resources/assets/neocomputers/textures/item/hdd0.png create mode 100644 src/main/resources/assets/neocomputers/textures/item/hdd1.png create mode 100644 src/main/resources/assets/neocomputers/textures/item/hdd2.png create mode 100644 src/main/resources/assets/neocomputers/textures/item/inet.png create mode 100644 src/main/resources/assets/neocomputers/textures/item/inet.png.mcmeta create mode 100644 src/main/resources/assets/neocomputers/textures/item/lan.png create mode 100644 src/main/resources/assets/neocomputers/textures/item/red0.png create mode 100644 src/main/resources/assets/neocomputers/textures/item/red1.png create mode 100644 src/main/resources/assets/neocomputers/textures/item/tunnel.png create mode 100644 src/main/resources/assets/neocomputers/textures/item/tunnel.png.mcmeta create mode 100644 src/main/resources/assets/neocomputers/textures/item/wlan0.png create mode 100644 src/main/resources/assets/neocomputers/textures/item/wlan1.png diff --git a/src/main/kotlin/org/neoflock/neocomputers/block/NodeBlock.kt b/src/main/kotlin/org/neoflock/neocomputers/block/NodeBlock.kt index 2d40a3e..b657400 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/block/NodeBlock.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/block/NodeBlock.kt @@ -3,6 +3,8 @@ package org.neoflock.neocomputers.block import dev.architectury.networking.NetworkManager import io.netty.buffer.Unpooled import net.minecraft.core.BlockPos +import net.minecraft.core.HolderLookup +import net.minecraft.nbt.CompoundTag import net.minecraft.network.FriendlyByteBuf import net.minecraft.network.RegistryFriendlyByteBuf import net.minecraft.network.codec.StreamCodec @@ -92,6 +94,7 @@ abstract class NodeBlockEntity(blockEntityType: BlockEntityType<*>, blockPos: Bl fun initNetworking(): NodeBlockEntity { Networking.addNode(node) + invalidateNodeState() return this } @@ -174,6 +177,17 @@ abstract class NodeBlockEntity(blockEntityType: BlockEntityType<*>, blockPos: Bl super.setRemoved() Networking.removeNode(node) } + + override fun clearRemoved() { + super.clearRemoved() + initNetworking() + } + + override fun loadAdditional(compoundTag: CompoundTag, provider: HolderLookup.Provider) { + super.loadAdditional(compoundTag, provider) + invalidateNodeState() + computeEdges().forEach { it.invalidateNodeState() } + } } abstract class NodeBlock(properties: Properties = Properties.of()): BaseBlock(properties), EntityBlock { diff --git a/src/main/kotlin/org/neoflock/neocomputers/gui/widget/ComponentSlot.kt b/src/main/kotlin/org/neoflock/neocomputers/gui/widget/ComponentSlot.kt index 542896d..985b85a 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/gui/widget/ComponentSlot.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/gui/widget/ComponentSlot.kt @@ -34,6 +34,10 @@ object ComponentRoles { val CONTAINER = "container" val TABLET = "tablet" val RACK_MOUNTABLE = "rack" + // Conventional network cards, like LAN, WLAN0, WLAN1, etc. + val NETWORK = "network" + // Internet cards + val INET = "internet" val MISSING_ROLE_TEXTURE = ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "textures/gui/slots/na.png") @@ -59,6 +63,9 @@ object ComponentRoles { TOOL to "tool", UPGRADE to "upgrade", RACK_MOUNTABLE to "rack_mountable", + // TODO: give them proper textures + NETWORK to "card", + INET to "card", ) for((role, tex) in core) { mapTexture(role, ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "textures/gui/slots/$tex.png")) diff --git a/src/main/kotlin/org/neoflock/neocomputers/item/CBUSItem.kt b/src/main/kotlin/org/neoflock/neocomputers/item/CBUSItem.kt new file mode 100644 index 0000000..a004be2 --- /dev/null +++ b/src/main/kotlin/org/neoflock/neocomputers/item/CBUSItem.kt @@ -0,0 +1,20 @@ +package org.neoflock.neocomputers.item + +import net.minecraft.world.item.Item +import net.minecraft.world.item.ItemStack +import org.neoflock.neocomputers.gui.widget.ComponentRoles +import org.neoflock.neocomputers.network.Networking + +open class CBUSItem(val tier: Int, val maxComponents: Int): Item(Item.Properties()), ComponentItem { + override fun getComponentRoles(itemStack: ItemStack): Set = setOf(ComponentRoles.BUS) + + override fun getComponentTier(itemStack: ItemStack): Int = tier + + override fun getComponentCapacity(itemStack: ItemStack): Int = maxComponents + + override fun toComponentNode(itemStack: ItemStack): Networking.Node? = null +} +class CBUS0: CBUSItem(1, 8) +class CBUS1: CBUSItem(2, 12) +class CBUS2: CBUSItem(3, 16) +class CBUSCreative: CBUSItem(1, 1024) diff --git a/src/main/kotlin/org/neoflock/neocomputers/item/CPUItem.kt b/src/main/kotlin/org/neoflock/neocomputers/item/CPUItem.kt new file mode 100644 index 0000000..33e453d --- /dev/null +++ b/src/main/kotlin/org/neoflock/neocomputers/item/CPUItem.kt @@ -0,0 +1,20 @@ +package org.neoflock.neocomputers.item + +import net.minecraft.world.item.Item +import net.minecraft.world.item.ItemStack +import org.neoflock.neocomputers.gui.widget.ComponentRoles +import org.neoflock.neocomputers.network.Networking + +open class CPUItem(val tier: Int, val maxComponents: Int): Item(Item.Properties()), ComponentItem { + override fun getComponentRoles(itemStack: ItemStack): Set = setOf(ComponentRoles.COMPUTE) + + override fun getComponentTier(itemStack: ItemStack): Int = tier + + override fun getComponentCapacity(itemStack: ItemStack): Int = maxComponents + + override fun toComponentNode(itemStack: ItemStack): Networking.Node? = null +} + +class CPU0: CPUItem(1, 8) +class CPU1: CPUItem(2, 12) +class CPU2: CPUItem(3, 16) \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/item/ComponentItem.kt b/src/main/kotlin/org/neoflock/neocomputers/item/ComponentItem.kt index a31d7e4..651348b 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/item/ComponentItem.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/item/ComponentItem.kt @@ -2,6 +2,7 @@ package org.neoflock.neocomputers.item import net.minecraft.world.item.ItemStack import org.neoflock.neocomputers.network.Networking +import java.util.UUID // need not necessarily be just a component, can be upgrades as well interface ComponentItem { @@ -9,12 +10,28 @@ interface ComponentItem { fun getComponentTier(itemStack: ItemStack): Int // Get machine properties they can influence - fun getMemoryCapacity(itemStack: ItemStack): Int - fun getComponentCapacity(itemStack: ItemStack): Int + fun getMemoryCapacity(itemStack: ItemStack): Int = 0 + fun getComponentCapacity(itemStack: ItemStack): Int = 0 - fun whenComponentPlaced(itemStack: ItemStack, newRole: String) - fun whenComponentTaken(itemStack: ItemStack, previousRole: String) + // Component placed, node must now exist + fun whenComponentPlaced(itemStack: ItemStack, newRole: String) { + val node = toComponentNode(itemStack) ?: return + Networking.addNode(node) + } + + // Component taken, and thus removed + fun whenComponentTaken(itemStack: ItemStack, previousRole: String) { + val node = toComponentNode(itemStack) ?: return + Networking.removeNode(node) + } // To node, if applicable fun toComponentNode(itemStack: ItemStack): Networking.Node? + + fun ensureHasAddress(itemStack: ItemStack): UUID { + if(!itemStack.has(DataComponents.ADDRESS)) { + itemStack.set(DataComponents.ADDRESS, UUID.randomUUID().toString()) + } + return UUID.fromString(itemStack.get(DataComponents.ADDRESS)) + } } \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/item/DataCard.kt b/src/main/kotlin/org/neoflock/neocomputers/item/DataCard.kt new file mode 100644 index 0000000..e187c7c --- /dev/null +++ b/src/main/kotlin/org/neoflock/neocomputers/item/DataCard.kt @@ -0,0 +1,45 @@ +package org.neoflock.neocomputers.item + +import net.minecraft.network.chat.Component +import net.minecraft.world.item.Item +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.TooltipFlag +import org.neoflock.neocomputers.gui.widget.ComponentRoles +import org.neoflock.neocomputers.network.Networking +import org.neoflock.neocomputers.utils.Formatting + +// Note: We'll prob want to replace them with NN component configs later on + +open class DataCard(val tier: Int, val limit: Long): Item(Properties()), ComponentItem { + override fun getComponentRoles(itemStack: ItemStack): Set = setOf(ComponentRoles.CARD) + + override fun getComponentTier(itemStack: ItemStack): Int = tier + + override fun whenComponentPlaced(itemStack: ItemStack, newRole: String) { + ensureHasAddress(itemStack) + super.whenComponentPlaced(itemStack, newRole) + } + + // TODO: Modem Component + override fun toComponentNode(itemStack: ItemStack): Networking.Node? = null + + override fun appendHoverText( + itemStack: ItemStack, + tooltipContext: TooltipContext, + list: MutableList, + tooltipFlag: TooltipFlag + ) { + if(tooltipFlag.isAdvanced) { + val addr = itemStack.get(DataComponents.ADDRESS) + val addrComp = if(addr == null) Component.translatable("neocomputers.noaddr") else Component.literal(addr) + list.addLast(addrComp) + list.addLast(Component.translatable("neocomputers.data.limit", Formatting.formatMemory(limit))) + // TODO: show HTTP/TCP/TLS support + } + super.appendHoverText(itemStack, tooltipContext, list, tooltipFlag) + } +} + +class DataCard0: DataCard(1, 1 shl 20) +class DataCard1: DataCard(2, 1 shl 20) +class DataCard2: DataCard(3, 1 shl 20) \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/item/DataComponents.kt b/src/main/kotlin/org/neoflock/neocomputers/item/DataComponents.kt index 824f865..b389d52 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/item/DataComponents.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/item/DataComponents.kt @@ -12,6 +12,8 @@ object DataComponents { DataComponentType.builder().persistent(Codec.STRING).build()) val LABEL = Registry.register(BuiltInRegistries.DATA_COMPONENT_TYPE, ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "label"), DataComponentType.builder().persistent(Codec.STRING).build()) + val READONLY = Registry.register(BuiltInRegistries.DATA_COMPONENT_TYPE, ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "readonly"), + DataComponentType.builder().persistent(Codec.BOOL).build()) val EEPROM_CODE = Registry.register(BuiltInRegistries.DATA_COMPONENT_TYPE, ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "eeprom_code"), DataComponentType.builder().persistent(Codec.STRING).build()) val EEPROM_DATA = Registry.register(BuiltInRegistries.DATA_COMPONENT_TYPE, ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "eeprom_data"), diff --git a/src/main/kotlin/org/neoflock/neocomputers/item/EEPROMItem.kt b/src/main/kotlin/org/neoflock/neocomputers/item/EEPROMItem.kt index 459d4f2..2055ac2 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/item/EEPROMItem.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/item/EEPROMItem.kt @@ -9,8 +9,11 @@ import org.neoflock.neocomputers.network.Networking import org.neoflock.neocomputers.utils.Formatting import java.util.UUID -fun getEEPROMProperties(): Item.Properties = Item.Properties().component( - DataComponents.EEPROM_CODE, "").component(DataComponents.EEPROM_DATA, "").component(DataComponents.LABEL, "") +fun getEEPROMProperties(): Item.Properties = Item.Properties() + .component(DataComponents.EEPROM_CODE, "") + .component(DataComponents.EEPROM_DATA, "") + .component(DataComponents.LABEL, "") + .component(DataComponents.READONLY, false) open class EEPROMItem(val tier: Int, val codeCapacity: Int, val dataCapacity: Int): Item(getEEPROMProperties()), ComponentItem { override fun getComponentRoles(itemStack: ItemStack): Set = setOf(ComponentRoles.FIRMWARE) @@ -22,13 +25,10 @@ open class EEPROMItem(val tier: Int, val codeCapacity: Int, val dataCapacity: In override fun getComponentCapacity(itemStack: ItemStack): Int = 0 override fun whenComponentPlaced(itemStack: ItemStack, newRole: String) { - if(!itemStack.has(DataComponents.ADDRESS)) { - itemStack.set(DataComponents.ADDRESS, UUID.randomUUID().toString()) - } + ensureHasAddress(itemStack) + super.whenComponentPlaced(itemStack, newRole) } - override fun whenComponentTaken(itemStack: ItemStack, previousRole: String) {} - override fun toComponentNode(itemStack: ItemStack): Networking.Node? = null override fun appendHoverText( @@ -41,6 +41,7 @@ open class EEPROMItem(val tier: Int, val codeCapacity: Int, val dataCapacity: In val code = itemStack.get(DataComponents.EEPROM_CODE) ?: "" val data = itemStack.get(DataComponents.EEPROM_DATA) ?: "" val addr = itemStack.get(DataComponents.ADDRESS) + val readonly = itemStack.get(DataComponents.READONLY) ?: false val codeSize = code.encodeToByteArray().size val dataSize = data.encodeToByteArray().size val addrComp = if(addr == null) Component.translatable("neocomputers.noaddr") else Component.literal(addr) @@ -49,6 +50,7 @@ open class EEPROMItem(val tier: Int, val codeCapacity: Int, val dataCapacity: In Formatting.formatMemory(codeCapacity.toLong()))) list.addLast(Component.translatable("neocomputers.eeprom.dataused", Formatting.formatMemory(dataSize.toLong()), Formatting.formatMemory(dataCapacity.toLong()))) + list.addLast(Component.translatable(if(readonly) "neocomputers.readonly" else "neocomputers.readwrite")) } super.appendHoverText(itemStack, tooltipContext, list, tooltipFlag) } diff --git a/src/main/kotlin/org/neoflock/neocomputers/item/GPUCard.kt b/src/main/kotlin/org/neoflock/neocomputers/item/GPUCard.kt new file mode 100644 index 0000000..ef667c6 --- /dev/null +++ b/src/main/kotlin/org/neoflock/neocomputers/item/GPUCard.kt @@ -0,0 +1,44 @@ +package org.neoflock.neocomputers.item + +import net.minecraft.network.chat.Component +import net.minecraft.world.item.Item +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.TooltipFlag +import org.neoflock.neocomputers.gui.widget.ComponentRoles +import org.neoflock.neocomputers.network.Networking + +// Note: We'll prob want to replace them with NN component configs later on + +open class GPUCard(val tier: Int, val vram: Long): Item(Properties()), ComponentItem { + override fun getComponentRoles(itemStack: ItemStack): Set = setOf(ComponentRoles.CARD) + + override fun getComponentTier(itemStack: ItemStack): Int = tier + + override fun whenComponentPlaced(itemStack: ItemStack, newRole: String) { + ensureHasAddress(itemStack) + super.whenComponentPlaced(itemStack, newRole) + } + + // TODO: Modem Component + override fun toComponentNode(itemStack: ItemStack): Networking.Node? = null + + override fun appendHoverText( + itemStack: ItemStack, + tooltipContext: TooltipContext, + list: MutableList, + tooltipFlag: TooltipFlag + ) { + if(tooltipFlag.isAdvanced) { + val addr = itemStack.get(DataComponents.ADDRESS) + val addrComp = if(addr == null) Component.translatable("neocomputers.noaddr") else Component.literal(addr) + list.addLast(addrComp) + list.addLast(Component.translatable("neocomputers.gpu.vram", vram)) + // TODO: show VRAM usage and whatnot + } + super.appendHoverText(itemStack, tooltipContext, list, tooltipFlag) + } +} + +class GPUCard0: GPUCard(1, 5000) +class GPUCard1: GPUCard(2, 10000) +class GPUCard2: GPUCard(3, 20000) \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/item/HDDItem.kt b/src/main/kotlin/org/neoflock/neocomputers/item/HDDItem.kt new file mode 100644 index 0000000..87bcd5e --- /dev/null +++ b/src/main/kotlin/org/neoflock/neocomputers/item/HDDItem.kt @@ -0,0 +1,62 @@ +package org.neoflock.neocomputers.item + +import net.minecraft.network.chat.Component +import net.minecraft.world.item.Item +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.TooltipFlag +import org.neoflock.neocomputers.gui.widget.ComponentRoles +import org.neoflock.neocomputers.network.Networking +import org.neoflock.neocomputers.utils.Formatting +import java.util.UUID + +fun getDiskProperties(): Item.Properties = Item.Properties() + .component(DataComponents.LABEL, "") + .component(DataComponents.READONLY, false) + +open class HardDiskItem(val tier: Int, val capacity: Long): Item(getDiskProperties()), ComponentItem { + override fun getComponentRoles(itemStack: ItemStack): Set = setOf(ComponentRoles.STORAGE) + + override fun getComponentTier(itemStack: ItemStack): Int = tier + + override fun getMemoryCapacity(itemStack: ItemStack): Int = 0 + + override fun getComponentCapacity(itemStack: ItemStack): Int = 0 + + override fun whenComponentPlaced(itemStack: ItemStack, newRole: String) { + ensureHasAddress(itemStack) + super.whenComponentPlaced(itemStack, newRole) + } + + override fun toComponentNode(itemStack: ItemStack): Networking.Node? = null + + override fun appendHoverText( + itemStack: ItemStack, + tooltipContext: TooltipContext, + list: MutableList, + tooltipFlag: TooltipFlag + ) { + if(tooltipFlag.isAdvanced) { + val addr = itemStack.get(DataComponents.ADDRESS) + val readonly = itemStack.get(DataComponents.READONLY) ?: false + val spaceUsed: Long = 0 + val addrComp = if(addr == null) Component.translatable("neocomputers.noaddr") else Component.literal(addr) + list.addLast(addrComp) + list.addLast(Component.translatable("neocomputers.disk.spaceused", Formatting.formatMemory(spaceUsed), + Formatting.formatMemory(capacity))) + list.addLast(Component.translatable(if(readonly) "neocomputers.readonly" else "neocomputers.readwrite")) + } + super.appendHoverText(itemStack, tooltipContext, list, tooltipFlag) + } + + override fun getName(itemStack: ItemStack): Component? { + if(itemStack.has(DataComponents.LABEL)) { + val label = itemStack.get(DataComponents.LABEL) ?: "" + if(label.isNotEmpty()) return Component.literal(label) + } + return super.getName(itemStack) + } +} + +class HardDisk0: HardDiskItem(1, 1 shl 20) +class HardDisk1: HardDiskItem(2, 2 shl 20) +class HardDisk2: HardDiskItem(3, 4 shl 20) \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/item/InternetCard.kt b/src/main/kotlin/org/neoflock/neocomputers/item/InternetCard.kt new file mode 100644 index 0000000..f597e07 --- /dev/null +++ b/src/main/kotlin/org/neoflock/neocomputers/item/InternetCard.kt @@ -0,0 +1,38 @@ +package org.neoflock.neocomputers.item + +import net.minecraft.network.chat.Component +import net.minecraft.world.item.Item +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.TooltipFlag +import org.neoflock.neocomputers.gui.widget.ComponentRoles +import org.neoflock.neocomputers.network.Networking +import org.neoflock.neocomputers.utils.Formatting + +class InternetCard: Item(Item.Properties()), ComponentItem { + override fun getComponentRoles(itemStack: ItemStack): Set = setOf(ComponentRoles.CARD, ComponentRoles.INET) + + override fun getComponentTier(itemStack: ItemStack): Int = 1 + + override fun whenComponentPlaced(itemStack: ItemStack, newRole: String) { + ensureHasAddress(itemStack) + super.whenComponentPlaced(itemStack, newRole) + } + + // TODO: Internet Component + override fun toComponentNode(itemStack: ItemStack): Networking.Node? = null + + override fun appendHoverText( + itemStack: ItemStack, + tooltipContext: TooltipContext, + list: MutableList, + tooltipFlag: TooltipFlag + ) { + if(tooltipFlag.isAdvanced) { + val addr = itemStack.get(DataComponents.ADDRESS) + val addrComp = if(addr == null) Component.translatable("neocomputers.noaddr") else Component.literal(addr) + list.addLast(addrComp) + // TODO: show HTTP/TCP/TLS support + } + super.appendHoverText(itemStack, tooltipContext, list, tooltipFlag) + } +} \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/item/Items.kt b/src/main/kotlin/org/neoflock/neocomputers/item/Items.kt index c4051e8..dd86b1d 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/item/Items.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/item/Items.kt @@ -1,14 +1,9 @@ package org.neoflock.neocomputers.item import dev.architectury.registry.registries.DeferredRegister -import net.minecraft.core.Registry -import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.core.registries.Registries -import net.minecraft.resources.ResourceKey -import net.minecraft.resources.ResourceLocation import net.minecraft.world.item.Item import org.neoflock.neocomputers.NeoComputers -import java.util.function.Supplier object Items { val ITEMS: DeferredRegister = DeferredRegister.create(NeoComputers.MODID, Registries.ITEM) @@ -21,4 +16,31 @@ object Items { val MEM5 = ITEMS.register("memory5") { MemoryTier3_5() } val EE0 = ITEMS.register("eeprom0") { EEPROM0() } + + val CPU0 = ITEMS.register("cpu0") { CPU0() } + val CPU1 = ITEMS.register("cpu1") { CPU1() } + val CPU2 = ITEMS.register("cpu2") { CPU2() } + + val CBUS0 = ITEMS.register("cbus0") { CBUS0() } + val CBUS1 = ITEMS.register("cbus1") { CBUS1() } + val CBUS2 = ITEMS.register("cbus2") { CBUS2() } + val CBUS_CREATIVE = ITEMS.register("cbus_creative") { CBUSCreative() } + + val INET = ITEMS.register("inet") { InternetCard() } + val TUNNEL = ITEMS.register("tunnel") { TunnelCard() } + val LAN = ITEMS.register("lan") { LANCard() } + val WLAN0 = ITEMS.register("wlan0") { WLANCard0() } + val WLAN1 = ITEMS.register("wlan1") { WLANCard1() } + + val DATA0 = ITEMS.register("data0") { DataCard0() } + val DATA1 = ITEMS.register("data1") { DataCard1() } + val DATA2 = ITEMS.register("data2") { DataCard2() } + + val GPU0 = ITEMS.register("gpu0") { GPUCard0() } + val GPU1 = ITEMS.register("gpu1") { GPUCard1() } + val GPU2 = ITEMS.register("gpu2") { GPUCard2() } + + val HDD0 = ITEMS.register("hdd0") { HardDisk0() } + val HDD1 = ITEMS.register("hdd1") { HardDisk1() } + val HDD2 = ITEMS.register("hdd2") { HardDisk2() } } \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/item/NetworkCard.kt b/src/main/kotlin/org/neoflock/neocomputers/item/NetworkCard.kt new file mode 100644 index 0000000..e0191ef --- /dev/null +++ b/src/main/kotlin/org/neoflock/neocomputers/item/NetworkCard.kt @@ -0,0 +1,43 @@ +package org.neoflock.neocomputers.item + +import net.minecraft.network.chat.Component +import net.minecraft.world.item.Item +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.TooltipFlag +import org.neoflock.neocomputers.gui.widget.ComponentRoles +import org.neoflock.neocomputers.network.Networking + +open class NetworkCard(val tier: Int, val maxRange: Int, val isWired: Boolean): Item(Properties()), ComponentItem { + override fun getComponentRoles(itemStack: ItemStack): Set = setOf(ComponentRoles.CARD, ComponentRoles.NETWORK) + + override fun getComponentTier(itemStack: ItemStack): Int = tier + + override fun whenComponentPlaced(itemStack: ItemStack, newRole: String) { + ensureHasAddress(itemStack) + } + + // TODO: Modem Component + override fun toComponentNode(itemStack: ItemStack): Networking.Node? = null + + override fun appendHoverText( + itemStack: ItemStack, + tooltipContext: TooltipContext, + list: MutableList, + tooltipFlag: TooltipFlag + ) { + if(tooltipFlag.isAdvanced) { + val addr = itemStack.get(DataComponents.ADDRESS) + val addrComp = if(addr == null) Component.translatable("neocomputers.noaddr") else Component.literal(addr) + list.addLast(addrComp) + if(maxRange > 0) { + list.addLast(Component.translatable("neocomputers.wlan.range", maxRange)) + } + // TODO: show max packet size and whatnot + } + super.appendHoverText(itemStack, tooltipContext, list, tooltipFlag) + } +} + +class LANCard: NetworkCard(1, 0, true) +class WLANCard0: NetworkCard(1, 16, true) +class WLANCard1: NetworkCard(1, 400, true) \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/item/Tabs.kt b/src/main/kotlin/org/neoflock/neocomputers/item/Tabs.kt index aba1b2a..529612c 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/item/Tabs.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/item/Tabs.kt @@ -2,11 +2,8 @@ package org.neoflock.neocomputers.item import dev.architectury.registry.CreativeTabRegistry import dev.architectury.registry.registries.DeferredRegister -import net.minecraft.core.Registry -import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.core.registries.Registries import net.minecraft.network.chat.Component -import net.minecraft.resources.ResourceLocation import net.minecraft.world.item.CreativeModeTab import net.minecraft.world.item.ItemStack import org.neoflock.neocomputers.NeoComputers @@ -16,12 +13,41 @@ object Tabs { DeferredRegister.create(NeoComputers.MODID, Registries.CREATIVE_MODE_TAB) val TAB = TABS.register("neocomputers_tab") { + // its only experimental once they change it CreativeTabRegistry.create { builder -> builder.title(Component.literal("NeoComputers")) builder.icon { ItemStack(Items.MEM0.get()) } builder.displayItems { parameters, output -> + // TODO: get rid of arch$tab and this shi and replace with loop over items registry + output.accept(ItemStack(Items.CPU0.get())) + output.accept(ItemStack(Items.CPU1.get())) + output.accept(ItemStack(Items.CPU2.get())) + + output.accept(ItemStack(Items.CBUS0.get())) + output.accept(ItemStack(Items.CBUS1.get())) + output.accept(ItemStack(Items.CBUS2.get())) + output.accept(ItemStack(Items.CBUS_CREATIVE.get())) + + output.accept(ItemStack(Items.DATA0.get())) + output.accept(ItemStack(Items.DATA1.get())) + output.accept(ItemStack(Items.DATA2.get())) + + output.accept(ItemStack(Items.GPU0.get())) + output.accept(ItemStack(Items.GPU1.get())) + output.accept(ItemStack(Items.GPU2.get())) + + output.accept(ItemStack(Items.HDD0.get())) + output.accept(ItemStack(Items.HDD1.get())) + output.accept(ItemStack(Items.HDD2.get())) + + output.accept(ItemStack(Items.INET.get())) + output.accept(ItemStack(Items.TUNNEL.get())) + output.accept(ItemStack(Items.LAN.get())) + output.accept(ItemStack(Items.WLAN0.get())) + output.accept(ItemStack(Items.WLAN1.get())) + output.accept(ItemStack(Items.EE0.get())) val luaBios = ItemStack(Items.EE0.get()) diff --git a/src/main/kotlin/org/neoflock/neocomputers/item/TunnelCard.kt b/src/main/kotlin/org/neoflock/neocomputers/item/TunnelCard.kt new file mode 100644 index 0000000..61fc235 --- /dev/null +++ b/src/main/kotlin/org/neoflock/neocomputers/item/TunnelCard.kt @@ -0,0 +1,39 @@ +package org.neoflock.neocomputers.item + +import net.minecraft.network.chat.Component +import net.minecraft.world.item.Item +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.TooltipFlag +import org.neoflock.neocomputers.gui.widget.ComponentRoles +import org.neoflock.neocomputers.network.Networking +import org.neoflock.neocomputers.utils.Formatting + +class TunnelCard: Item(Properties()), ComponentItem { + // yes, we're counting TUNNEL as a conventional networking card + override fun getComponentRoles(itemStack: ItemStack): Set = setOf(ComponentRoles.CARD, ComponentRoles.NETWORK) + + override fun getComponentTier(itemStack: ItemStack): Int = 3 + + override fun whenComponentPlaced(itemStack: ItemStack, newRole: String) { + ensureHasAddress(itemStack) + super.whenComponentPlaced(itemStack, newRole) + } + + // TODO: Tunnel Component + override fun toComponentNode(itemStack: ItemStack): Networking.Node? = null + + override fun appendHoverText( + itemStack: ItemStack, + tooltipContext: TooltipContext, + list: MutableList, + tooltipFlag: TooltipFlag + ) { + if(tooltipFlag.isAdvanced) { + val addr = itemStack.get(DataComponents.ADDRESS) + val addrComp = if(addr == null) Component.translatable("neocomputers.noaddr") else Component.literal(addr) + list.addLast(addrComp) + // TODO: show max packet size and whatnot + } + super.appendHoverText(itemStack, tooltipContext, list, tooltipFlag) + } +} \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/network/Networking.kt b/src/main/kotlin/org/neoflock/neocomputers/network/Networking.kt index 15cfaed..3d3713c 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/network/Networking.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/network/Networking.kt @@ -287,11 +287,12 @@ object Networking { fun addNode(node: Node) { if(node in allNodes) return; - allNodes.forEach { it.onNodeAdded(node) } - allNodes.add(node); + allNodes.add(node) if(node is WirelessEndpoint) { wirelessNodes.add(node); } + // notify at the end so it is notified of its own creation + allNodes.forEach { it.onNodeAdded(node) } } fun addNodes(vararg nodes: Node) { @@ -299,16 +300,17 @@ object Networking { } fun removeNode(node: Node) { - if(node !in allNodes) return; - allNodes.remove(node); - if(node is WirelessEndpoint) { - wirelessNodes.remove(node); - } + if(node !in allNodes) return + allNodes.forEach { it.onNodeRemoved(node) } // toList() in order to copy it node.connections.toList().forEach { node.disconnectFrom(it) } - allNodes.forEach { it.onNodeRemoved(node) } + // actually remove at the end so it can listen to its own removal + allNodes.remove(node) + if(node is WirelessEndpoint) { + wirelessNodes.remove(node); + } } fun removeNodes(vararg nodes: Node) { diff --git a/src/main/resources/assets/neocomputers/lang/en_us.json b/src/main/resources/assets/neocomputers/lang/en_us.json index 1009565..b32d23a 100644 --- a/src/main/resources/assets/neocomputers/lang/en_us.json +++ b/src/main/resources/assets/neocomputers/lang/en_us.json @@ -3,7 +3,44 @@ "neocomputers.cancel": "Cancel", "block.neocomputers.combustgen": "Combustion Generator", "block.neocomputers.redio": "Redstone I/O", + "block.neocomputers.solargen": "Solar Generator", + "block.neocomputers.screen": "Screen (Untiered)", + "block.neocomputers.capacitor": "Small Capacitor", + "block.neocomputers.capacitor2": "Medium Capacitor", + "block.neocomputers.capacitor3": "Large Capacitor", "item.neocomputers.eeprom0": "EEPROM (Tier 1)", + "item.neocomputers.cpu0": "CPU (Tier 1)", + "item.neocomputers.cpu1": "CPU (Tier 2)", + "item.neocomputers.cpu2": "CPU (Tier 3)", + "item.neocomputers.cbus0": "Component Bus (Tier 1)", + "item.neocomputers.cbus1": "Component Bus (Tier 2)", + "item.neocomputers.cbus2": "Component Bus (Tier 3)", + "item.neocomputers.cbus_creative": "Component Bus (Creative)", + "item.neocomputers.memory0": "Memory (Tier 1)", + "item.neocomputers.memory1": "Memory (Tier 1.5)", + "item.neocomputers.memory2": "Memory (Tier 2)", + "item.neocomputers.memory3": "Memory (Tier 2.5)", + "item.neocomputers.memory4": "Memory (Tier 3)", + "item.neocomputers.memory5": "Memory (Tier 3.5)", + "item.neocomputers.inet": "Internet Card", + "item.neocomputers.lan": "Wired Network Card", + "item.neocomputers.wlan0": "Wireless Network Card (Tier 1)", + "item.neocomputers.wlan1": "Wireless Network Card (Tier 2)", + "item.neocomputers.data0": "Data Card (Tier 1)", + "item.neocomputers.data1": "Data Card (Tier 2)", + "item.neocomputers.data2": "Data Card (Tier 3)", + "item.neocomputers.gpu0": "Graphics Card (Tier 1)", + "item.neocomputers.gpu1": "Graphics Card (Tier 2)", + "item.neocomputers.gpu2": "Graphics Card (Tier 3)", + "item.neocomputers.hdd0": "Hard Disk Drive (Tier 1)", + "item.neocomputers.hdd1": "Hard Disk Drive (Tier 2)", + "item.neocomputers.hdd2": "Hard Disk Drive (Tier 3)", + "neocomputers.wlan.range": "Range: %1$s blocks", + "neocomputers.data.limit": "Memory: %1$s", + "neocomputers.gpu.vram": "Video Memory: %1$spx", + "neocomputers.disk.spaceused": "Space Used: %1$s / %2$s", + "neocomputers.readonly": "Read-Only", + "neocomputers.readwrite": "Read-Write", "neocomputers.noaddr": "No address assigned", "neocomputers.memory.capacity": "Capacity: %1$s", "neocomputers.eeprom.codeused": "Code Storage: %1$s / %2$s", diff --git a/src/main/resources/assets/neocomputers/models/item/cbus0.json b/src/main/resources/assets/neocomputers/models/item/cbus0.json new file mode 100644 index 0000000..1bfd562 --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/cbus0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "neocomputers:item/cbus0" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/item/cbus1.json b/src/main/resources/assets/neocomputers/models/item/cbus1.json new file mode 100644 index 0000000..8d5ea82 --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/cbus1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "neocomputers:item/cbus1" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/item/cbus2.json b/src/main/resources/assets/neocomputers/models/item/cbus2.json new file mode 100644 index 0000000..b894175 --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/cbus2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "neocomputers:item/cbus2" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/item/cbus_creative.json b/src/main/resources/assets/neocomputers/models/item/cbus_creative.json new file mode 100644 index 0000000..127afcd --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/cbus_creative.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "neocomputers:item/cbus_creative" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/item/cpu0.json b/src/main/resources/assets/neocomputers/models/item/cpu0.json new file mode 100644 index 0000000..1079b88 --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/cpu0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "neocomputers:item/cpu0" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/item/cpu1.json b/src/main/resources/assets/neocomputers/models/item/cpu1.json new file mode 100644 index 0000000..6630b7d --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/cpu1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "neocomputers:item/cpu1" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/item/cpu2.json b/src/main/resources/assets/neocomputers/models/item/cpu2.json new file mode 100644 index 0000000..d191b61 --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/cpu2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "neocomputers:item/cpu2" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/item/data0.json b/src/main/resources/assets/neocomputers/models/item/data0.json new file mode 100644 index 0000000..e98637c --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/data0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "neocomputers:item/data0" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/item/data1.json b/src/main/resources/assets/neocomputers/models/item/data1.json new file mode 100644 index 0000000..b0e0518 --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/data1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "neocomputers:item/data1" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/item/data2.json b/src/main/resources/assets/neocomputers/models/item/data2.json new file mode 100644 index 0000000..a6befa9 --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/data2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "neocomputers:item/data2" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/item/gpu0.json b/src/main/resources/assets/neocomputers/models/item/gpu0.json new file mode 100644 index 0000000..2164a03 --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/gpu0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "neocomputers:item/gpu0" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/item/gpu1.json b/src/main/resources/assets/neocomputers/models/item/gpu1.json new file mode 100644 index 0000000..8c6d509 --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/gpu1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "neocomputers:item/gpu1" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/item/gpu2.json b/src/main/resources/assets/neocomputers/models/item/gpu2.json new file mode 100644 index 0000000..0b8ac95 --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/gpu2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "neocomputers:item/gpu2" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/item/hdd0.json b/src/main/resources/assets/neocomputers/models/item/hdd0.json new file mode 100644 index 0000000..7b74416 --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/hdd0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "neocomputers:item/hdd0" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/item/hdd1.json b/src/main/resources/assets/neocomputers/models/item/hdd1.json new file mode 100644 index 0000000..4c31c85 --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/hdd1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "neocomputers:item/hdd1" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/item/hdd2.json b/src/main/resources/assets/neocomputers/models/item/hdd2.json new file mode 100644 index 0000000..dadd531 --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/hdd2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "neocomputers:item/hdd2" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/item/inet.json b/src/main/resources/assets/neocomputers/models/item/inet.json new file mode 100644 index 0000000..9f4604a --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/inet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "neocomputers:item/inet" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/item/lan.json b/src/main/resources/assets/neocomputers/models/item/lan.json new file mode 100644 index 0000000..92faf8b --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/lan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "neocomputers:item/lan" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/item/tunnel.json b/src/main/resources/assets/neocomputers/models/item/tunnel.json new file mode 100644 index 0000000..974b31c --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/tunnel.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "neocomputers:item/tunnel" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/item/wlan0.json b/src/main/resources/assets/neocomputers/models/item/wlan0.json new file mode 100644 index 0000000..5fa3e0d --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/wlan0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "neocomputers:item/wlan0" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/item/wlan1.json b/src/main/resources/assets/neocomputers/models/item/wlan1.json new file mode 100644 index 0000000..6691599 --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/wlan1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "neocomputers:item/wlan1" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/textures/block/capacitor_bottom.png b/src/main/resources/assets/neocomputers/textures/block/capacitor_bottom.png index 699368bfb33054e4799b853057103cd8438d732e..77de67941d26dec1c10569956dfeb8b7459a0f62 100644 GIT binary patch delta 478 zcmV<40U`cy?gNk+e**vj04OaFQvd(}8FWQhbW?9;ba!ELWdK2BZ(?O2No`?gWm08f zWO;GPWjp`?0IN_;R7DsV7#SHE7Z(>!PEIs5G)PEDH#avtJUlu&I#5thGcz+!Pftfj zM?OA2Mn*C?S+eNe=0i zkl!H{qEH1BLa-4JV~p(zJ&J*iY^QOtS!*`W`fwW$njt{Yh~7Uye`xke>AwI200DLn U7+i__@c;k-07*qoM6N<$f?6N0%m4rY delta 93 zcmaFITrfd0oQ;8jLH_gqL?Fdk;1OBOz!2jG!i*wQoE?FJN}eu`Ar}70C0{@OJ@3Gn su*g9_;`Iu~#fb*9_!M?#JowDSaIur|?;Qh~uRzrdp00i_>zopr06144BLDyZ diff --git a/src/main/resources/assets/neocomputers/textures/block/capacitor_side.png b/src/main/resources/assets/neocomputers/textures/block/capacitor_side.png index 5e7c32faf11788363d02634915d0a7be97066d9b..b0e17361ba8b03916bcafa179e2ceb5eb8514df5 100644 GIT binary patch delta 608 zcmV-m0-ybN?*xz;e**vj04OaFQvd(}8FWQhbW?9;ba!ELWdK2BZ(?O2No`?gWm08f zWO;GPWjp`?0T)nAR7DvX85kHC7Z(>aG&CkACN3^6F)=YgK|wY)HZLzPJUl!#H8nCa zGDb#5EG#TVMMXV5Jw%&CEiElRg+4w$J~%iyL6SiwB_%sMe>*ujIYOC2FfcGDCnrQi zL^?V;K8`*+iaQz_8b?P*JApeSBqRVN04pmiM@UCHe>yU0GDt{BJAgYvLP9{1KskOn z03!fMo=8TdMm>x@03ZNEltTa|07R5TC@3gBhdnlRHa(3#K#)K{KtM`LN;fw*KaW2q zB_=gqC!1`Jw}{HNJmFFH#j(XI6R9yJ%&9saWyx1H!)%{Kaf8# zVlYRgM?i-_Gcz+ODJcLV06vF4J%l{~Apku-K0JavHE=b$ohms1008buL_t(|+7yt5 zZp1(gM7>FNvtedBW+*eacV%Yy|L>?XvTW%|_KXaqe-;Qpu<8LY78ZRMp;E zwST+&h(I-pQESw{>K|H0%LWj5Vac*(Obof0SQ_5Yd|UmIRoSk~$}ON6HZp0j=u~05t3VFTenocNl9vjXB5w0000Ar}70S8huEo8QQE zz@;&6!?i$W35f`m<@Jj-WZanxO%wxFjTss8g_-}`1h_l_YGUwo^>bP0l+XkKtkE4_ diff --git a/src/main/resources/assets/neocomputers/textures/block/capacitor_top.png b/src/main/resources/assets/neocomputers/textures/block/capacitor_top.png index ecfbd128cb94bd45a063ccc5cd41cd0aac726214..71963c897b9ab696bec5d5b3c589338ec6f8ed81 100644 GIT binary patch delta 536 zcmV+z0_Xj3rv#80e**vj04OaFQvd(}8FWQhbW?9;ba!ELWdK2BZ(?O2No`?gWm08f zWO;GPWjp`?0O3$fR7DvX85kHCQo>S3phg!L7g51cQ^Qj-W->*eMLvfXfrWnF-x>dIe0lkl|x9HNH%jeWnNj7iGWSNO_qv+NwY~pltM3HFFAoZl!$*% zyH7A;Fl1d>e^9(oHET6ax=u=?NiY*HfQ zD!QxzL`y-FY4w8&Z>i=L&yF;XQ3Y9`Z43YtGh5y7f1;X}%PDmXJhOANzeFtW`W5*A z^3~=CeLkqXf37x9?gpJ5U;kxI_4ZpvwPX;zm(?u9&%AnZDzYUEF&s2&1vX|-5C%;c zYK=G;e+^>Kjufh~$`CP41c>oQ;8jLH_gqL?Fdk;1OBOz!2jG!i*wQoE?FJN}eu`Ar}70S8huEo8QQE sz@;&6!?i$Wx5Ei0vJOQT4?JgOuq$8+kKmfQ8K|1U)78&qol`;+0QW5%^Z)<= diff --git a/src/main/resources/assets/neocomputers/textures/item/cbus0.png b/src/main/resources/assets/neocomputers/textures/item/cbus0.png new file mode 100644 index 0000000000000000000000000000000000000000..b5301e33d3ebbf70f836bdd3eba764818d19579b GIT binary patch literal 462 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8X#qYVuA+im4DyU>K59S#21RBDJ_ZH@UTJe_RWDUpD_PB8 zO$Ipz22Uw@dwC@nC4GH;262Yft5@H=*;H3o?%?2{?x%kKe9iOc&yO8DCSfR{?5-?j zCe_+nyLoegf{d8BzPP!$xs-{NthKC8gpQP{)Sf+i)~;Ej;Gob3R8(6wdD0|FW67MH zoQ8%fNkd6-J@MGs*#H0khgj_fdBdnA$S)YkB@Hm}2F!R5)IGt|#WAGfR?GRDLQMud z4i`;WcU|n_>Uyy6{jLB1EibR!v%>h^apRdjO#hUBwAq|r(UKIx5EIi9^lC#{2cyxP zD^GsgN$}a*1wWq6}%Q~lo FCIF|%z{mgq literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/neocomputers/textures/item/cbus1.png b/src/main/resources/assets/neocomputers/textures/item/cbus1.png new file mode 100644 index 0000000000000000000000000000000000000000..9f476e9a07c7699e1966198dd860ec7822632f3f GIT binary patch literal 478 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8`2jv5u4+DN!ooZZ@{B+M21RBDJ_ZH@UR5tu&0tLiIR=g*(Z+sm6q|Bsr^<>2L#W!y*PF!E&V5jnhXS3(>Vl$e0tV!X}tTb_y2#cpNn4B)Y><%s!W;BvVYKBbV5Dmkm8z# zKWe>(w`(~PTKP{Zo)$QrSbrfqZqYm?CFz4pSFv!43&qAvoI1Pw;UQ0PcdaG`9$W1n zG5ym|yt~_W`19tw0X7U7-K<7QrnA?`=PsNwWw*&&uIl;9Egi}IKfa!}|0t5cz-%Sk UYJI+CKPc!uUHx3vIVCg!03YGTBLDyZ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/neocomputers/textures/item/cbus2.png b/src/main/resources/assets/neocomputers/textures/item/cbus2.png new file mode 100644 index 0000000000000000000000000000000000000000..8653ef2a1cba94c21ad130a678e30840822ae0d1 GIT binary patch literal 456 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8$pJngt~|oR4DyU>K59S#21RBDJ_ZH@-sjJsYX)ncKVPHj zrF!#b6N4Osl8chMxrMyFysVY1w7K+#n|ByIrC3;5*}1tVPnyIa&T#D5F)1@Cbw71w zcV!t}z0I2ojvsGmYi$+R7e9NpW$l_Zd-m*Ebm^L`wX9BrPS5c(3JwY;K7Nvhl9I-f zTF$QGa&le?iS>1L|Ns9t{J?b#=orJ2AirQBmn6U-Kg&-MsJYM6#WAGfR!jd)p+gEh z49*KWM7g$n+j8&w+yC`*7be#Rq~AF{*H^9aIQs|PO+G?R2`&OVEUKU1Nz4{#o^bW; zrELsHODv>X1Uuaoez27LF81uu@;q+&A?c?U%OsDL0jFkYbd+v7`TfB2zkFixyJgM7 zI$}36$?Z6QuXXFa`LA~AAFB1qj-4j>@%8ljN16v1erHKX*6;ol2MT0QS3j3^P6EX>4Tx07!|QmUmQC*A|D*y?1({%`g-xL+`x}AiX!K z(nMjH8DJ;_4l^{dA)*2iMMMM@L4qO%jD{kyB8r88V8I@cAfUux6j4!mGqP56<>kGX zm){>}eQTe+_dRFteb%}Fki7l5ymVL!fHa~vAmcQ7uoQ$&mudEnVrUCi&%W-40ak@%snFBnkD3j81WZzQ5Khz zE#g}u)=U+qaYg)A9Gk{rW&(gBiR}UoD@nwrA|~;}Lfk~W6aXA4@hgu1iUph;f%sBx z=^43vZeo&vuFKM+o7vhj=-!;{RE|Jk6vSkuF!^k{TY6dsla~v?;+;QBMqFFEsL0l4 zw$|20=Ei1U73#lk{!NK{yGXBsKlcox^?kAZm0x;20E}5tZFYRI#qR~6V>1Bq_rKUQ z4+0=5>RbE3SNEZb=OsxX$gndp$O~2}Gii1cZ;QLyD0~q#kKOx{zMvCNhFdBkxcc6a_^`8KLY^ z-l*j$7HTzW9jX*njXHvANA;j?qDE0Os847zS_y4{wnO`%BhiWIY;+O265WVyLtjGQ zMvtT4U@#aOMh9bq@y0}9k}+#ArI`JgR?K_yPPl zex4vr&>=Vw!U)NPjf5&f3*i#sA>kE~NK_}<5`&3c;s# zLeh59VbXchJ<=;OnXFBACP$M6>atgt3H=1Y2UgM2$qd#E`@bNxY<% zq>JP#$vnwQ$&-=;lG9RnDQzh?DW=pqsT!$MQo~ZS(iCYk=|Jf;=~C&V(pRM?Ww0{Z zG9EH)nL?REG8bjWC@3{{8fLrtcZP`{)0Q)gslWG!XGWpiX} zWY5Ts&=8t7&4-psE2EvD-J!jgQfv(`8 zkfN|tp+n)3B1%zTF<3EM@qpqb#pxx~CH6~LONy7ASaM$pR?=4rQCg#PNU2Y0R#`>a zOF2V%ukuCZX%(7^vr4i`h00l#DOHN9qbgUmLiL>LGrBC@g`P^UqW92e)Rfe`)r4ww zYW-^S>N@Jn)eF>H)gNgPG#DBQ8WkGd8Z(-zngN>mn$4Q`weVUDtt72ITD@9x+B(`1 z+FP_cv?q1sb$oR4beeS@>XLPxbXV)v>)z7C=rQzC^!DrB(1-P{^po^!^al)J18W1W z!G425L$sl-Ayeeqo|%5^b{6q}Sw=sg-G}X@ltl zGZ`~qvjVd&v)|42%~|F(=C>@!7M>RCEjle;S{hh#EDu=TwW3%BSZ%TDw)$voW6ig2 zv7WNgw28CXXEV&8GJ+VTj4QTiTUXolwx@01*;(5O>`vJIW^ZJlVt>?ra;eTz&eDdZ zV-D&LOouv$5l6aXoZ~^q5hpb#rc=Gs6K4%)wsWKNgo~a_vdb}-7p|tReAhPDIX64E zwQlF#5qB^5V)uRz8IR>2)gF&M)jbnEn>}Z|ti0BEo%cq2`+4v59`;f8Vfi%q%=p^) zuJ!HlBl(5;Rr@{h*Z1f9cLl%!z5%-e9xl^b##`1A2m*ZqcLhEQ(g|7}^kXn4I4HO# z_-Tk)NPb9fC?zyD^l0dtFxRlMum{U^mkXD7hf9XXgg1rHMYuc#Ks{QOuo{IxBNlUR|ZQDs|PFSjkvs?8!KETtwW_xDU)g zW<7H@-Y0%v{0z&DwTJbb?aZ!VPjMVL<(!EGhlKKk$wY_5U5QgkPDzzX(_A-hHTPw* zcXDm=TuNZd;gp5ch}70JTv}Y(DV_{3h1Zj=lAe=3m|>7nlrgf}ZuRcfGkiaOVz}3Y2Bx^Z`;1P{p|fi2b>SI)GF7O)V@E+J$SdytFFCXyT0-e=1|t5rw!o^z27pv zZE93(ENT3Bn0I*ONXU_%CYz?Fqe@51n&D<)^VG4JV>iBY|E{yesHLuz)>?8L92Xvc z_I=#J{_+2=_${t8_!le8-Jehe15v28mBOpTuPtA9&j!stev|fQey;ef!rLS781H)DN4%ey&;Ee@ zQ1wyoW7j9YPY)N;78d>m1DNyt6gNdX0000WV@Og>004R>004l5008;`004mK004C` z008P>0026e000+ooVrmw0004@NklyQ6e_fXi6Gi)LzO`C%nx6Zm*eo7w6Bq_ z;(^OO=iYP9_sjPj_}8WZFndJ+DE$ilRvW>%+YQEFMKgQ;q!Fbm9=fUf$Iu~i8302W zcx?|WY+;7{lH%T{GYqCLNiO@2)#oqxa`+AB$1wnvqwfH$udHx&>@$f(lt@Goi!Bh3 z$F)F%$wZtO*ZH`!9bj22ml?l1j$s+7sG{9y15o%-fP<5I#tg~jax!)Mj=Wjg64SC| z$hIXqG9rLH+t`qNepPmNm!(j6B&AYGdH{V5(ralnhWp5`(wk&n-v{8y+oxo=6aa43 z1zti7!QoWI?1L;z50`P86%3_tnw5UD`I!tiZ~eSLgQO_v0d7N2iZgG)Xxje8e>C_zeW_3cL&czH`^%ek~-yMH%T3s~DPq9bs szcT1I7=V>CPwvUxJeTA2#`s^`A8ibnYuLyj^Z)<=07*qoM6N<$f_%CXO#lD@ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/neocomputers/textures/item/cpu0.png b/src/main/resources/assets/neocomputers/textures/item/cpu0.png new file mode 100644 index 0000000000000000000000000000000000000000..832c6eb7f3a7f7b3ccf058b7fb20842c7d12e9ac GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!forvRT2S1u7zAoJL!(eba`x=m|NsA2`v)%q8X;B^`esjYt7Z={e=n{{M4oA+`CW`?j695NGEG&BQkXYh3Ob6Mw<&;$T*bc=QX literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/neocomputers/textures/item/cpu1.png b/src/main/resources/assets/neocomputers/textures/item/cpu1.png new file mode 100644 index 0000000000000000000000000000000000000000..9e947f48b768705ff4737bff3f04d13634973736 GIT binary patch literal 352 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8zyO~RS1u7zAoJLHTywL-634^DrpUXO@geCy#{h~(z literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/neocomputers/textures/item/cpu2.png b/src/main/resources/assets/neocomputers/textures/item/cpu2.png new file mode 100644 index 0000000000000000000000000000000000000000..77f5f5fe7fd4cc8e5ef5749f7d54390b703f0f90 GIT binary patch literal 360 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8@Bp6>S1u7zAoJL1kpRx1cxvLMa zU%k3{-^C5<*Z0laz2^AYhWh%&3l=O~ckI!F)jJMd>F?`nTXe0uZ+&9hsmd9bcAURb z)VAv2shj`*{}0akybx%vY)Oz`Fp!HAFhsUJ&jKo}^K@|xskjw$&QqvGLBQqWk}gTs z^y&xyp6474u>Nsce5c0~wI`WX?x%SaxD~lPG-s|};54N|D?xS6Z>i)vGI;^+_bx{? zsx~bODsK+lvOnzA7tWXkCN>W;<2$DbA1K(T7gT@H=dOW{X0AFz;+w74{(f62aM5n- gqxHX>*KPORfP7!}MF4Ri^Er>mdKI;Vst0LO%=n*aa+ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/neocomputers/textures/item/data0.png b/src/main/resources/assets/neocomputers/textures/item/data0.png new file mode 100644 index 0000000000000000000000000000000000000000..88cac2868435876474f1e154740effe3dd960710 GIT binary patch literal 489 zcmeAS@N?(olHy`uVBq!ia0vp^0zllr!3-o#y(K{$$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G69RlfT-gQK#r2f$-@h-dA`KK1kQC4`)VO-JL`q6ZOG|6Z zmJ~57%^NpvM6~;eJkmF_HS;R6mzS5%os`VP#@xQBo`r*1or7V+sWUu0JlfitckbLt z?~Y?*V-pq@4r%ldkrH8HVYzzsDk~?8wvDNkqm_ZZMZ>I0QBhG#OY>d3^2D6<1Ox=? zCr#$%<#o%o`Tzg_%OYQp&kRa}{DOg8QUF8J(hC(py_-E<978H@y_tHFugO55ZMpW^ zjGNp$9`4J&|NrfhuPWjOiXRy+-=6MytL~&d^RmDTj0tz%9PpgRXyC-b&&M}s>6CwV zwku8eWOle;JmvmzsgBr@#^nODWnKpb9Mzqnuep@tESJ||{uKdzSsSiB?2a_>E#qff zleS&iB7xz});SD2%5!>mRvnvt{R33egu@>O3xPMvNB#pPrvcJ*or&;)yPQ8rel zEn8AHoH}#o&YduC*&8=*aB?u)n22z&Gpj4{`Z`PP+Lb3F$bR+el9&K_2~iGNNv^9` zuhvhRtSrZ)Aj2K(A)_QOA}cNQ^yyPG6RjVA%5}8l#l^*c{HfJYlg&tU{rRWB$Us9$ zNhvbKfrp1DCd_fgjEJskyOvUuIo&R6<|a&UwO%;Ecgf^{361VLIyx2E=6%iKLIP~o zX38E83NH4#IqANUK_=oN9CbwwF+u8qo?2CR!WrNG&OZTNIdJ?a_c~iM2fl<;e&uxK2XR;SJw?{+&wjjS5Sw2m`~%{Xv?Vbip! zosEod_*QZXyWCLQP}rzYShui^Vcv%XCtm)|YL&*qPd=lK zpFV6ZWodJ(%j$3U#LMoE<*QoRiz=S{c8@%w*zO(~oFBb*gEV$Y# zBbT+VtS;-sQ}-p)wv}mk{aO)HR3xqTbY$O)-oMy>l1tuv5Pgg&ebxsLQ0HBH@ivR!s literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/neocomputers/textures/item/data1.png.mcmeta b/src/main/resources/assets/neocomputers/textures/item/data1.png.mcmeta new file mode 100644 index 0000000..341f7f6 --- /dev/null +++ b/src/main/resources/assets/neocomputers/textures/item/data1.png.mcmeta @@ -0,0 +1,15 @@ +{ + "animation": { + "frametime": 1, + "frames": [ + { "index": 0, "time": 4 }, + { "index": 1, "time": 4 }, + { "index": 2, "time": 4 }, + { "index": 3, "time": 4 }, + { "index": 4, "time": 4 }, + { "index": 5, "time": 4 }, + { "index": 6, "time": 4 }, + { "index": 7, "time": 4 } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/textures/item/data2.png b/src/main/resources/assets/neocomputers/textures/item/data2.png new file mode 100644 index 0000000000000000000000000000000000000000..c5fc94648239f8719dfd999bf1269f2c00282d4e GIT binary patch literal 1457 zcmeAS@N?(olHy`uVBq!ia0vp^0zllr!3-o#y(K{$$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@Or8NgA+BtK0{8FV7c|xv(AU0twFIbF)ZU7Tjcv=86fQZL z4X4hC*qGnBbLYm58_b*>%pB}uPPXc9PBONZhW_5X>MA_S3LFw*yLRPqE6B2o2yw|u zU%h&@e$wPcm#!&#yO~CZYX|#FTbiml*&BF!XxmzgX{sw48(N14%j;-c1qZJA@zo|b z-90c+NlD4X-d+$b&HJ~@8LkFP?qG8#sPvKs0dap7BjeC6TciCD29b?uVU9UDTI z&Ptd+Jz#3Dshdmsh7~SzCfIc~>gecb1^W2rWZ2r;Rxew~Augs>S7KL`V`O73tFC69 zmD0FxN7RH4!{ivxmKxWRJdcJd{n&`eo;J(W1e3@R_2>}m>{Qjz0NF5q!%3|s*{QlN zjuM7?>M^0A#rftH`MZC7)k=x=_xD%uaE`4iV-pfowze=#iJkr9Yy9M1H#fJ4#KgS0 z(=`kY%!+e_WTb6csxzidOkS~|dEd6uO{;@4Qtc9B>ej7@tEu#x(Ejk@L*=Z*sQjGb zRZH@=ttsBIzG2_?$B!Q?rN$O-UGwtgOPLT~_sZfIFJ2f~TcxjB+_-ad`?{5RD;6eK zmPIU@=@1$E{Q2{SO=~h|O)gwEzh~!`fMv6*_iT~!bx&Bg-#{85o{6zuDT!faMNT>C=DuEWvnKiFXNQM}KYH}& z|Ns9oy>|nFspoJ>kY6y6JH!D)pP#~hU>?!;ba4!+xRqql!Y0unkdWdMe(=P(^XCs7 zIC;j#Q=!T*!l9|Rx3~J*DcPH=lNKFhN;-2U=#Gz}>}(@7qh?kW*OZ$(C2ViFh^6K; za(?)*anmLv!^*S`o7RajaCaCL8ZxqOtG=?esEMWG=Fb!hNsGoLCT)oWOzjd94%fI0 zj13y@D%QT3U~yVej88!2oc z%t(GB^*(Kjyr7&DcaN@4(G!7(icdn;Obl7k#lat{sHnKJW09hOT$Y!YC>Pttjt?A# z8P{&5B{y*JA8d{6Ty}b@z(d1GZNuPre?~#MCf;Sgel>D+d=S{O`XV<^m~%_}tOW}e zI5nIX;NTZceOgtStM5|L5~*)`KWAw#2Y=$~6D5;_Qe7&xyl6T8^3@6DL(Vs@sf1pS zmlKpbv@P`6yMwV>{ zjt?3Bar>`Zo)-|5dv$p)zlFc4OG|sz|6@<~301pP+*rNZ-yr6)t;wZ!qo`jQS2ntN z%BN0zsJ7SR<>J#ewt83hNNLvk7+$h3B3yX4QsOYI*nc*r04ivTo&7kM8XkCOEH(pVM!P0Y`tw8#n3$0|U#- z+(e~Cc?EencsTCdxg#toeB;KAUAyu;{5(ueO`V*aj4X@{>N#)9cfdfv&Kv(gxrIxw2}#%VBIbv;{StahM4#;9k{RXVWb?%cVPnyOS*=BA;+*Vblqkp^A!%nVE2Cs7yhD%GIkS9v+fHLPD07A_fM6=H|lt_BE=g@cjS(|9t30ZlDXa zN`m}?fn4GMgVBl)F+g1zo-U3d6}NiMoAWgo2)JA{Jvbwy=v?LdddDL{3OhgP&tE3# zpn8GfaDcef0bi|r@6$>f9?vM9Y~NDqB5jnDFFiV05(_Dnc%eW!b`bHj^W tnOaY6tyn~po~6o(b-xo|>fXS}AoX6}-eK{SQ|ymRM{ zVo(sDj0`(J|E^tmH*VaJ^Y*@Rqu!vRqO8nKL|eZ`a=H^$gmK6W^A*`k*VQ83}>$GJ{inNoHp`oF$t}dUP94jyH|Ns95YTwrZU7%GG zdNqRaSW-r)pOpQufagT<)UeV&#@-w5dL|9Cuhi;JbA7NxQ@SkjXQ|r*%N|3^&SUmJ_?HS?DAb7Sc=-Cv=BsKBC3g*Y rn##6uRvppk6uRSfSKq6jftf+|zP$a)Ce_72I~hD({an^LB{Ts5&rY4K literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/neocomputers/textures/item/hdd0.png b/src/main/resources/assets/neocomputers/textures/item/hdd0.png new file mode 100644 index 0000000000000000000000000000000000000000..ef3ca624617161b16eb8fab838af96378bbd8f15 GIT binary patch literal 425 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8#sHrX*Z=?j^YQV?%F6!u@x##2(8$Q>&Ye5=@87q!wqCbx zotc@Ll$6xIefzw| zMkYBqxwW-*)22;x=FHL4(_6DDb%DO()LhUMlg`caC(vM?f3tg zoLSRe&3<_Nx6Fgj<{Q>`zdhycEyezE^9g>=xhx+ym>zht@Q$<(!|k1Hhi&G(iOoJ0 z$9V1k6xm?@*p1&KtulTdUZZQo-g3Vp>N*p%&S3?qP6^8s&%WPSJVlG4@2}`ou7dTe iGNj8tY+ld6%rH|{@^04RrhPysF?hQAxvXb^4o! zTeMWT-K>S~pQ#J;6st;?`~CCN%|k(P0TQ;RBIf#hukNmDEmXX5FvVDh_uNJ|HASum z=UVjCdFFIzc-jeD81T7R2|c?$=kCc$T{RvH1EI&4C*3}l_u|%~{1|Cf1uiKuwv+$~ zpaXuLbe{)wk4{ODUoenMEMPc(jk5=+uiewdF{I*F%&C_`O$s7y50zz3x|p3cJ?nM* z{r`VXtZA=iKRo_h=D}z44eR^gep;!vwE0J<%5Pa&mX90E4m?o2FBQUYyOZsx&73!} z*{9wyPWwMa)`-7$P2!7 kE^fQHYkTwjT2={$bCFUxZ(j1B2Rezt)78&qol`;+0C|bWw*UYD literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/neocomputers/textures/item/hdd2.png b/src/main/resources/assets/neocomputers/textures/item/hdd2.png new file mode 100644 index 0000000000000000000000000000000000000000..fcaffb1e47a5125ffc1c9e3b816039d604d98e45 GIT binary patch literal 429 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8mH?j+*Z=?jvx|s)`Tbi!OIz8|Ny^RR(%biEUccS-^ckO; zx*Guo6CUVj;>Vt_moRnKqoPHy85}Sb4q9e01#=&F8}}l literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/neocomputers/textures/item/inet.png b/src/main/resources/assets/neocomputers/textures/item/inet.png new file mode 100644 index 0000000000000000000000000000000000000000..cda92cf270a73250d1e9f4a870b6d3088c373392 GIT binary patch literal 428 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3-pI!a4o{DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MU4SIA+E+9iudo|2lDuASPh%xd3bna{e-!+m^qY~uU;+D zDV0%45VxGJsva&UfI8SrqbG4I-y$79UmxK`W1z`(`Dg{r`XC z+M>@-4mx{2_~69BV8b23;C0qIyYlAaQ#IY+1p9ZsnP!@B iw!Y@yYx#IaHimUUw!G_qr&|DB#o+1c=d#Wzp$PyT)V3J_ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/neocomputers/textures/item/inet.png.mcmeta b/src/main/resources/assets/neocomputers/textures/item/inet.png.mcmeta new file mode 100644 index 0000000..81035dd --- /dev/null +++ b/src/main/resources/assets/neocomputers/textures/item/inet.png.mcmeta @@ -0,0 +1,17 @@ +{ + "animation": { + "frametime": 1, + "frames": [ + { "index": 0, "time": 2 }, + { "index": 1, "time": 7 }, + { "index": 0, "time": 5 }, + { "index": 1, "time": 4 }, + { "index": 0, "time": 7 }, + { "index": 1, "time": 2 }, + { "index": 0, "time": 8 }, + { "index": 1, "time": 9 }, + { "index": 0, "time": 6 }, + { "index": 1, "time": 4 } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/textures/item/lan.png b/src/main/resources/assets/neocomputers/textures/item/lan.png new file mode 100644 index 0000000000000000000000000000000000000000..6a0df6f11f0016de70861087e00c872878f2e11c GIT binary patch literal 351 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8oB*E?*ZcSHi;9W@d9ycd-f-%Sn2gMwJ9n;LEfJQK^b88p za&o?L6!(p|fGg@ktP%2O~gVPa?BvL!`QNy*B}NP+M zPhWO!s#q8x+$<2Jb-nt;t;+J%*LYm6X6UY$aoPIvOuxRP9U~iq%_TXDlnv7+0xe9Gqyz*6T)leLOH;Ga*O!fp%|=8-%RsBe-=CYGTSHGnOh!yp zN|c?4-AYk$*RH$?;o%oAW*C?oIC?uOYbYBT8O@B1HM295SCi)x;`0pj42TT)|Ns94 zF7c^AN9dFU`2_>H!~%xn*EoBC`cgby978H@^_(~7JD?!o64+G8@_bJ5t>5?0^PUhA z-Cr{+O&~*&*})@T!r}g|yq#;_FJ2%KWF#9};I+X(P34~Ktv?5LHXGhmX{oGbEla!X u$Jp?``rg?YEi4Hl6B{zj{x15;X~5uNuUw?B$i@P+kHOQ`&t;ucLK6U>37mTX literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/neocomputers/textures/item/red1.png b/src/main/resources/assets/neocomputers/textures/item/red1.png new file mode 100644 index 0000000000000000000000000000000000000000..3619213c9cadb346c600774bad6240fdf7702ef7 GIT binary patch literal 417 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8t^l79S0H`={(T`Kp)FfdeVH|`uburVpfWZ6T-v!g!lpi0z{=mwG6bb zUcLJN|Nq`@EN&LXq;st3fru?T^c2@Nh&=Gm z`OWTHdwBYRnOSiOQ{=@|{G85)G9=0T{&&W5e}X%Y%`3&y7pL`u+8LM`zB4J^mO3Qj Q544`a)78&qol`;+0OGx@&j0`b literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/neocomputers/textures/item/tunnel.png b/src/main/resources/assets/neocomputers/textures/item/tunnel.png new file mode 100644 index 0000000000000000000000000000000000000000..a8a4e6cd38e978c60e17e8a5deb3115611ee8a3c GIT binary patch literal 655 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=!3-po`I#mGDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MYjWdLR^6~pS;xl`}g&8V#LJ6*xA`-oh(#CJrum`uU;)# zyLPRNjErtZL||L>mMtk#)5z6N=5iL?9e+_`h(#*OKhjuaIYNm&`{q=jF-dR0J0 zUNa$(nT^%N#Dr5+NZ!f9xGY62!h7@P%{`NK{=>UPW12T}e(`T}oa~MqNchQJ!5)@c;k+4;^EmuoI_&9RyHuD+HyQZSdT?2<8!L zK;cNT&CfFxI?Ib6C0Z=lAeYSSWV`LXhfTp}XIq}*D|W~+dOT`e&F^Y+<-5KRKj%Y1 d+cG8|hF>+h{70&OSO5cn!PC{xWt~$(69A#98A1R6 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/neocomputers/textures/item/tunnel.png.mcmeta b/src/main/resources/assets/neocomputers/textures/item/tunnel.png.mcmeta new file mode 100644 index 0000000..3967b86 --- /dev/null +++ b/src/main/resources/assets/neocomputers/textures/item/tunnel.png.mcmeta @@ -0,0 +1,13 @@ +{ + "animation": { + "frametime": 1, + "frames": [ + { "index": 0, "time": 3 }, + { "index": 1, "time": 3 }, + { "index": 2, "time": 3 }, + { "index": 3, "time": 3 }, + { "index": 4, "time": 3 }, + { "index": 5, "time": 3 } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/textures/item/wlan0.png b/src/main/resources/assets/neocomputers/textures/item/wlan0.png new file mode 100644 index 0000000000000000000000000000000000000000..7f10401995f9cc1522dbda719295f882680f6c5c GIT binary patch literal 473 zcmV;~0Ve*5P)7H_)z)ZKn)B(2c{BjWal~;Pp^p9V=!>hFr~sValodeEG6kUK z)&4fHZM)%aMYFz`Ff~z? zHvl-h|4?`3uSRcgG|WrI{dt355{5>~3}JQa^hI=vRgdG1Jh$a9lv2{%`||Dr_zk*3 ziel9R;QH0&`O`yB4&Zu%h$sw(R_H;+?8z1Vrq0E3 ziKj}9wgmlxsVj*Ynk4FK_cMVToL}ycN*UO8iF7*Nb^#?Kbb>~QbZqbqA=^cD*JF`f P00000NkvXXu0mjf*+9#Y literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/neocomputers/textures/item/wlan1.png b/src/main/resources/assets/neocomputers/textures/item/wlan1.png new file mode 100644 index 0000000000000000000000000000000000000000..09cef9917bde7e1f85239cdb2e1a0e48fe1c8948 GIT binary patch literal 472 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8`2jv5uJ`ZX7Znwi;WIVY@&$@T`e)4Ev^hJzCc-DjNX=ba z(^OncRzz5G!>KbjZrr$Y=g!ruB^)e5Uhcu7+#1r7$`affsxl^l9&t-|?Pg`>u{QSH zvL$8Lt~?GF;j34#+E}?rODPL;sqpa%O|(5 zK+Q!`LP1bKOi5m+EW4eVi9q$S)YkB^fZ(Y`p*qsXk8^ z$B>F!Expf$nhXS5^i>v_u)Yzke*f;b{cP_5iTa(h_s;x1X*b83cRso0DWbQpzg_rC z{=$NvEs~rqK9{ApW#=6Av%Ds`>&3}(-qK_-%L<$4`{pn6Xeg`GJs0`@>H`zsfSTJu zUfRNYyLQS*Jl-|&x~Ai2gFO|i6;?28*wd!yWx%ZV(PG_!_5Yf;GcYq~Cu%y)n%C$D PbQy!EtDnm{r-UW|?9#_c literal 0 HcmV?d00001 From f9e33f9f05001b18d16dbd000e389b7df4f78c02 Mon Sep 17 00:00:00 2001 From: IonutParau Date: Sun, 19 Apr 2026 21:34:18 +0200 Subject: [PATCH 6/6] Redstone cards --- .../org/neoflock/neocomputers/item/Items.kt | 3 ++ .../neocomputers/item/RedstoneCard.kt | 41 ++++++++++++++++++ .../org/neoflock/neocomputers/item/Tabs.kt | 3 ++ .../assets/neocomputers/lang/en_us.json | 2 + .../neocomputers/models/item/redio0.json | 6 +++ .../neocomputers/models/item/redio1.json | 6 +++ .../neocomputers/textures/item/redio0.png | Bin 0 -> 394 bytes .../neocomputers/textures/item/redio1.png | Bin 0 -> 417 bytes 8 files changed, 61 insertions(+) create mode 100644 src/main/kotlin/org/neoflock/neocomputers/item/RedstoneCard.kt create mode 100644 src/main/resources/assets/neocomputers/models/item/redio0.json create mode 100644 src/main/resources/assets/neocomputers/models/item/redio1.json create mode 100644 src/main/resources/assets/neocomputers/textures/item/redio0.png create mode 100644 src/main/resources/assets/neocomputers/textures/item/redio1.png diff --git a/src/main/kotlin/org/neoflock/neocomputers/item/Items.kt b/src/main/kotlin/org/neoflock/neocomputers/item/Items.kt index dd86b1d..a3ca2e4 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/item/Items.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/item/Items.kt @@ -43,4 +43,7 @@ object Items { val HDD0 = ITEMS.register("hdd0") { HardDisk0() } val HDD1 = ITEMS.register("hdd1") { HardDisk1() } val HDD2 = ITEMS.register("hdd2") { HardDisk2() } + + val REDIO0 = ITEMS.register("redio0") { RedstoneCard0() } + val REDIO1 = ITEMS.register("redio1") { RedstoneCard1() } } \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/item/RedstoneCard.kt b/src/main/kotlin/org/neoflock/neocomputers/item/RedstoneCard.kt new file mode 100644 index 0000000..14bee92 --- /dev/null +++ b/src/main/kotlin/org/neoflock/neocomputers/item/RedstoneCard.kt @@ -0,0 +1,41 @@ +package org.neoflock.neocomputers.item + +import net.minecraft.network.chat.Component +import net.minecraft.world.item.Item +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.TooltipFlag +import org.neoflock.neocomputers.gui.widget.ComponentRoles +import org.neoflock.neocomputers.network.Networking + +// Note: We'll prob want to replace them with NN component configs later on + +open class RedstoneCard(val tier: Int): Item(Properties()), ComponentItem { + override fun getComponentRoles(itemStack: ItemStack): Set = setOf(ComponentRoles.CARD) + + override fun getComponentTier(itemStack: ItemStack): Int = tier + + override fun whenComponentPlaced(itemStack: ItemStack, newRole: String) { + ensureHasAddress(itemStack) + super.whenComponentPlaced(itemStack, newRole) + } + + // TODO: Redstone Component + override fun toComponentNode(itemStack: ItemStack): Networking.Node? = null + + override fun appendHoverText( + itemStack: ItemStack, + tooltipContext: TooltipContext, + list: MutableList, + tooltipFlag: TooltipFlag + ) { + if(tooltipFlag.isAdvanced) { + val addr = itemStack.get(DataComponents.ADDRESS) + val addrComp = if(addr == null) Component.translatable("neocomputers.noaddr") else Component.literal(addr) + // TODO: show redstone and whatnot + } + super.appendHoverText(itemStack, tooltipContext, list, tooltipFlag) + } +} + +class RedstoneCard0: RedstoneCard(1) +class RedstoneCard1: RedstoneCard(2) \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/item/Tabs.kt b/src/main/kotlin/org/neoflock/neocomputers/item/Tabs.kt index 529612c..d777947 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/item/Tabs.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/item/Tabs.kt @@ -48,6 +48,9 @@ object Tabs { output.accept(ItemStack(Items.WLAN0.get())) output.accept(ItemStack(Items.WLAN1.get())) + output.accept(ItemStack(Items.REDIO0.get())) + output.accept(ItemStack(Items.REDIO1.get())) + output.accept(ItemStack(Items.EE0.get())) val luaBios = ItemStack(Items.EE0.get()) diff --git a/src/main/resources/assets/neocomputers/lang/en_us.json b/src/main/resources/assets/neocomputers/lang/en_us.json index b32d23a..1c17040 100644 --- a/src/main/resources/assets/neocomputers/lang/en_us.json +++ b/src/main/resources/assets/neocomputers/lang/en_us.json @@ -3,6 +3,8 @@ "neocomputers.cancel": "Cancel", "block.neocomputers.combustgen": "Combustion Generator", "block.neocomputers.redio": "Redstone I/O", + "item.neocomputers.redio0": "Redstone Card (Tier 1)", + "item.neocomputers.redio1": "Redstone Card (Tier 2)", "block.neocomputers.solargen": "Solar Generator", "block.neocomputers.screen": "Screen (Untiered)", "block.neocomputers.capacitor": "Small Capacitor", diff --git a/src/main/resources/assets/neocomputers/models/item/redio0.json b/src/main/resources/assets/neocomputers/models/item/redio0.json new file mode 100644 index 0000000..79a980d --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/redio0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "neocomputers:item/redio0" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/item/redio1.json b/src/main/resources/assets/neocomputers/models/item/redio1.json new file mode 100644 index 0000000..78dca9b --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/redio1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "neocomputers:item/redio1" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/textures/item/redio0.png b/src/main/resources/assets/neocomputers/textures/item/redio0.png new file mode 100644 index 0000000000000000000000000000000000000000..922988e04f52e67d682dedb9945571f9d2e9bd26 GIT binary patch literal 394 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8mH?j+*ZcSH1DV14`mXBgckbK~6cw!S@DLIbl2Mis5E0-N z;Puhg?hOsSdbQ-njT>9Gqyz*6T)leLOH;Ga*O!fp%|=8-%RsBe-=CYGTSHGnOh!yp zN|c?4-AYk$*RH$?;o%oAW*C?oIC?uOYbYBT8O@B1HM295SCi)x;`0pj42TT)|Ns94 zF7c^AN9dFU`2_>H!~%xn*EoBC`cgby978H@^_(~7JD?!o64+G8@_bJ5t>5?0^PUhA z-Cr{+O&~*&*})@T!r}g|yq#;_FJ2%KWF#9};I+X(P34~Ktv?5LHXGhmX{oGbEla!X u$Jp?``rg?YEi4Hl6B{zj{x15;X~5uNuUw?B$i@P+kHOQ`&t;ucLK6U>37mTX literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/neocomputers/textures/item/redio1.png b/src/main/resources/assets/neocomputers/textures/item/redio1.png new file mode 100644 index 0000000000000000000000000000000000000000..3619213c9cadb346c600774bad6240fdf7702ef7 GIT binary patch literal 417 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8t^l79S0H`={(T`Kp)FfdeVH|`uburVpfWZ6T-v!g!lpi0z{=mwG6bb zUcLJN|Nq`@EN&LXq;st3fru?T^c2@Nh&=Gm z`OWTHdwBYRnOSiOQ{=@|{G85)G9=0T{&&W5e}X%Y%`3&y7pL`u+8LM`zB4J^mO3Qj Q544`a)78&qol`;+0OGx@&j0`b literal 0 HcmV?d00001