From 74d1015bcdf14c7c7b7fa6c87d31cdf596698e68 Mon Sep 17 00:00:00 2001 From: IonutParau Date: Sun, 19 Apr 2026 12:50:13 +0200 Subject: [PATCH] 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