From 0416ddd4a559d5eb887f7712ca087996e643e029 Mon Sep 17 00:00:00 2001 From: IonutParau Date: Sun, 19 Apr 2026 21:22:12 +0200 Subject: [PATCH] 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 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 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