From 4ab6dbbf386fcea387da76452aff39eff6af6e2a Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Sun, 14 Mar 2021 15:48:09 -0400 Subject: [PATCH] Add cable colors --- colorize-cables.sh | 35 ++++++++++++++++++ .../phycon/block/cable/CableBlock.kt | 31 ++++++++-------- .../phycon/client/PhyModelProvider.kt | 7 +++- .../net/shadowfacts/phycon/init/PhyBlocks.kt | 10 ++++- .../net/shadowfacts/phycon/init/PhyItems.kt | 10 ++++- .../phycon/item/FaceDeviceBlockItem.kt | 2 +- .../phycon/item/ScrewdriverItem.kt | 11 +++--- .../phycon/blockstates/cable_black.json | 7 ++++ .../{cable.json => cable_blue.json} | 0 .../phycon/blockstates/cable_brown.json | 7 ++++ .../assets/phycon/blockstates/cable_cyan.json | 7 ++++ .../assets/phycon/blockstates/cable_gray.json | 7 ++++ .../phycon/blockstates/cable_green.json | 7 ++++ .../phycon/blockstates/cable_light_blue.json | 7 ++++ .../phycon/blockstates/cable_light_gray.json | 7 ++++ .../assets/phycon/blockstates/cable_lime.json | 7 ++++ .../phycon/blockstates/cable_magenta.json | 7 ++++ .../phycon/blockstates/cable_orange.json | 7 ++++ .../assets/phycon/blockstates/cable_pink.json | 7 ++++ .../phycon/blockstates/cable_purple.json | 7 ++++ .../assets/phycon/blockstates/cable_red.json | 7 ++++ .../phycon/blockstates/cable_white.json | 7 ++++ .../phycon/blockstates/cable_yellow.json | 7 ++++ .../resources/assets/phycon/lang/en_us.json | 17 ++++++++- .../phycon/models/item/cable_black.json | 20 ++++++++++ .../item/{cable.json => cable_blue.json} | 0 .../phycon/models/item/cable_brown.json | 20 ++++++++++ .../assets/phycon/models/item/cable_cyan.json | 20 ++++++++++ .../assets/phycon/models/item/cable_gray.json | 20 ++++++++++ .../phycon/models/item/cable_green.json | 20 ++++++++++ .../phycon/models/item/cable_light_blue.json | 20 ++++++++++ .../phycon/models/item/cable_light_gray.json | 20 ++++++++++ .../assets/phycon/models/item/cable_lime.json | 20 ++++++++++ .../phycon/models/item/cable_magenta.json | 20 ++++++++++ .../phycon/models/item/cable_orange.json | 20 ++++++++++ .../assets/phycon/models/item/cable_pink.json | 20 ++++++++++ .../phycon/models/item/cable_purple.json | 20 ++++++++++ .../assets/phycon/models/item/cable_red.json | 20 ++++++++++ .../phycon/models/item/cable_white.json | 20 ++++++++++ .../phycon/models/item/cable_yellow.json | 20 ++++++++++ .../textures/block/cable/black/cap_end.png | Bin 0 -> 874 bytes .../textures/block/cable/black/straight.png | Bin 0 -> 933 bytes .../block/cable/black/straight_rotated.png | Bin 0 -> 909 bytes .../textures/block/cable/brown/cap_end.png | Bin 0 -> 1351 bytes .../textures/block/cable/brown/straight.png | Bin 0 -> 1619 bytes .../block/cable/brown/straight_rotated.png | Bin 0 -> 1599 bytes .../textures/block/cable/cyan/cap_end.png | Bin 0 -> 1362 bytes .../textures/block/cable/cyan/straight.png | Bin 0 -> 1697 bytes .../block/cable/cyan/straight_rotated.png | Bin 0 -> 1675 bytes .../textures/block/cable/gray/cap_end.png | Bin 0 -> 1348 bytes .../textures/block/cable/gray/straight.png | Bin 0 -> 1553 bytes .../block/cable/gray/straight_rotated.png | Bin 0 -> 1538 bytes .../textures/block/cable/green/cap_end.png | Bin 0 -> 1351 bytes .../textures/block/cable/green/straight.png | Bin 0 -> 1602 bytes .../block/cable/green/straight_rotated.png | Bin 0 -> 1585 bytes .../block/cable/light_blue/cap_end.png | Bin 0 -> 1365 bytes .../block/cable/light_blue/straight.png | Bin 0 -> 1698 bytes .../cable/light_blue/straight_rotated.png | Bin 0 -> 1676 bytes .../block/cable/light_gray/cap_end.png | Bin 0 -> 1362 bytes .../block/cable/light_gray/straight.png | Bin 0 -> 1584 bytes .../cable/light_gray/straight_rotated.png | Bin 0 -> 1566 bytes .../textures/block/cable/lime/cap_end.png | Bin 0 -> 1365 bytes .../textures/block/cable/lime/straight.png | Bin 0 -> 1710 bytes .../block/cable/lime/straight_rotated.png | Bin 0 -> 1688 bytes .../textures/block/cable/magenta/cap_end.png | Bin 0 -> 1365 bytes .../textures/block/cable/magenta/straight.png | Bin 0 -> 1710 bytes .../block/cable/magenta/straight_rotated.png | Bin 0 -> 1688 bytes .../textures/block/cable/orange/cap_end.png | Bin 0 -> 1365 bytes .../textures/block/cable/orange/straight.png | Bin 0 -> 1704 bytes .../block/cable/orange/straight_rotated.png | Bin 0 -> 1682 bytes .../textures/block/cable/pink/cap_end.png | Bin 0 -> 1362 bytes .../textures/block/cable/pink/straight.png | Bin 0 -> 1665 bytes .../block/cable/pink/straight_rotated.png | Bin 0 -> 1645 bytes .../textures/block/cable/purple/cap_end.png | Bin 0 -> 1365 bytes .../textures/block/cable/purple/straight.png | Bin 0 -> 1692 bytes .../block/cable/purple/straight_rotated.png | Bin 0 -> 1671 bytes .../textures/block/cable/red/cap_end.png | Bin 0 -> 1365 bytes .../textures/block/cable/red/straight.png | Bin 0 -> 1710 bytes .../block/cable/red/straight_rotated.png | Bin 0 -> 1688 bytes .../textures/block/cable/white/cap_end.png | Bin 0 -> 880 bytes .../textures/block/cable/white/straight.png | Bin 0 -> 985 bytes .../block/cable/white/straight_rotated.png | Bin 0 -> 949 bytes .../textures/block/cable/yellow/cap_end.png | Bin 0 -> 1365 bytes .../textures/block/cable/yellow/straight.png | Bin 0 -> 1707 bytes .../block/cable/yellow/straight_rotated.png | Bin 0 -> 1685 bytes 85 files changed, 500 insertions(+), 28 deletions(-) create mode 100755 colorize-cables.sh create mode 100644 src/main/resources/assets/phycon/blockstates/cable_black.json rename src/main/resources/assets/phycon/blockstates/{cable.json => cable_blue.json} (100%) create mode 100644 src/main/resources/assets/phycon/blockstates/cable_brown.json create mode 100644 src/main/resources/assets/phycon/blockstates/cable_cyan.json create mode 100644 src/main/resources/assets/phycon/blockstates/cable_gray.json create mode 100644 src/main/resources/assets/phycon/blockstates/cable_green.json create mode 100644 src/main/resources/assets/phycon/blockstates/cable_light_blue.json create mode 100644 src/main/resources/assets/phycon/blockstates/cable_light_gray.json create mode 100644 src/main/resources/assets/phycon/blockstates/cable_lime.json create mode 100644 src/main/resources/assets/phycon/blockstates/cable_magenta.json create mode 100644 src/main/resources/assets/phycon/blockstates/cable_orange.json create mode 100644 src/main/resources/assets/phycon/blockstates/cable_pink.json create mode 100644 src/main/resources/assets/phycon/blockstates/cable_purple.json create mode 100644 src/main/resources/assets/phycon/blockstates/cable_red.json create mode 100644 src/main/resources/assets/phycon/blockstates/cable_white.json create mode 100644 src/main/resources/assets/phycon/blockstates/cable_yellow.json create mode 100644 src/main/resources/assets/phycon/models/item/cable_black.json rename src/main/resources/assets/phycon/models/item/{cable.json => cable_blue.json} (100%) create mode 100644 src/main/resources/assets/phycon/models/item/cable_brown.json create mode 100644 src/main/resources/assets/phycon/models/item/cable_cyan.json create mode 100644 src/main/resources/assets/phycon/models/item/cable_gray.json create mode 100644 src/main/resources/assets/phycon/models/item/cable_green.json create mode 100644 src/main/resources/assets/phycon/models/item/cable_light_blue.json create mode 100644 src/main/resources/assets/phycon/models/item/cable_light_gray.json create mode 100644 src/main/resources/assets/phycon/models/item/cable_lime.json create mode 100644 src/main/resources/assets/phycon/models/item/cable_magenta.json create mode 100644 src/main/resources/assets/phycon/models/item/cable_orange.json create mode 100644 src/main/resources/assets/phycon/models/item/cable_pink.json create mode 100644 src/main/resources/assets/phycon/models/item/cable_purple.json create mode 100644 src/main/resources/assets/phycon/models/item/cable_red.json create mode 100644 src/main/resources/assets/phycon/models/item/cable_white.json create mode 100644 src/main/resources/assets/phycon/models/item/cable_yellow.json create mode 100644 src/main/resources/assets/phycon/textures/block/cable/black/cap_end.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/black/straight.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/black/straight_rotated.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/brown/cap_end.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/brown/straight.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/brown/straight_rotated.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/cyan/cap_end.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/cyan/straight.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/cyan/straight_rotated.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/gray/cap_end.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/gray/straight.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/gray/straight_rotated.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/green/cap_end.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/green/straight.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/green/straight_rotated.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/light_blue/cap_end.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/light_blue/straight.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/light_blue/straight_rotated.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/light_gray/cap_end.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/light_gray/straight.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/light_gray/straight_rotated.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/lime/cap_end.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/lime/straight.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/lime/straight_rotated.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/magenta/cap_end.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/magenta/straight.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/magenta/straight_rotated.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/orange/cap_end.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/orange/straight.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/orange/straight_rotated.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/pink/cap_end.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/pink/straight.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/pink/straight_rotated.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/purple/cap_end.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/purple/straight.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/purple/straight_rotated.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/red/cap_end.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/red/straight.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/red/straight_rotated.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/white/cap_end.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/white/straight.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/white/straight_rotated.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/yellow/cap_end.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/yellow/straight.png create mode 100644 src/main/resources/assets/phycon/textures/block/cable/yellow/straight_rotated.png diff --git a/colorize-cables.sh b/colorize-cables.sh new file mode 100755 index 0000000..8ba42cc --- /dev/null +++ b/colorize-cables.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash + +base_color=blue + +modulate() { + echo $1, $2 + mkdir -p src/main/resources/assets/phycon/textures/block/cable/$1 + for f in src/main/resources/assets/phycon/textures/block/cable/$base_color/*; do + echo $f + convert $f -modulate $2 src/main/resources/assets/phycon/textures/block/cable/$1/$(basename $f) + done + echo "---" +} + +# modulate ,, +# brightness: 100 is initial, +/- 100 +# saturnation: 100 is initial, +/- 100 +# hue: ( / 180) * 100 + 100 + +modulate white 200,0,100 +modulate orange 100,120,200 +modulate magenta 100,100,146 +modulate light_blue 140,65,100 +modulate yellow 100,109,8 +modulate lime 100,100,53 +modulate pink 172,50,172 +modulate gray 60,10,100 +modulate light_gray 105,3,39 +modulate cyan 112,65,84 +modulate purple 109,76,133 +modulate brown 60,45,190 +modulate green 60,50,30 +modulate red 100,100,176 +modulate black 30,0,100 + diff --git a/src/main/kotlin/net/shadowfacts/phycon/block/cable/CableBlock.kt b/src/main/kotlin/net/shadowfacts/phycon/block/cable/CableBlock.kt index 66b1a72..222bfe8 100644 --- a/src/main/kotlin/net/shadowfacts/phycon/block/cable/CableBlock.kt +++ b/src/main/kotlin/net/shadowfacts/phycon/block/cable/CableBlock.kt @@ -8,6 +8,7 @@ import net.minecraft.item.ItemPlacementContext import net.minecraft.state.StateManager import net.minecraft.state.property.EnumProperty import net.minecraft.util.ActionResult +import net.minecraft.util.DyeColor import net.minecraft.util.Hand import net.minecraft.util.Identifier import net.minecraft.util.hit.BlockHitResult @@ -32,7 +33,9 @@ import java.util.* /** * @author shadowfacts */ -class CableBlock: Block( +class CableBlock( + val color: DyeColor, +): Block( FabricBlockSettings.of(CABLE_MATERIAL) .strength(0.3f) .nonOpaque() @@ -112,22 +115,20 @@ class CableBlock: Block( val offsetPos = pos.offset(direction) val state = world.getBlockState(offsetPos) val block = state.block - return when (block) { - this -> { - val prop = CONNECTIONS[direction.opposite] - when (state[prop]) { - CableConnection.DISABLED -> CableConnection.DISABLED - else -> CableConnection.ON - } + return if (block == this) { + val prop = CONNECTIONS[direction.opposite] + when (state[prop]) { + CableConnection.DISABLED -> CableConnection.DISABLED + else -> CableConnection.ON } - is NetworkComponentBlock -> { - if (block.getNetworkConnectedSides(state, world, offsetPos).contains(direction.opposite)) { - CableConnection.ON - } else { - CableConnection.OFF - } + } else if (block is NetworkComponentBlock && block !is CableBlock) { + if (block.getNetworkConnectedSides(state, world, offsetPos).contains(direction.opposite)) { + CableConnection.ON + } else { + CableConnection.OFF } - else -> CableConnection.OFF + } else { + CableConnection.OFF } } diff --git a/src/main/kotlin/net/shadowfacts/phycon/client/PhyModelProvider.kt b/src/main/kotlin/net/shadowfacts/phycon/client/PhyModelProvider.kt index 375400f..00345ba 100644 --- a/src/main/kotlin/net/shadowfacts/phycon/client/PhyModelProvider.kt +++ b/src/main/kotlin/net/shadowfacts/phycon/client/PhyModelProvider.kt @@ -25,7 +25,10 @@ class PhyModelProvider(resourceManager: ResourceManager) : ModelResourceProvider val EXTRACTOR_SIDE = Identifier(PhysicalConnectivity.MODID, "block/extractor_side") val INSERTER = Identifier(PhysicalConnectivity.MODID, "block/inserter") val INSERTER_SIDE = Identifier(PhysicalConnectivity.MODID, "block/inserter_side") - val CABLE_BLUE = Identifier(PhysicalConnectivity.MODID, "block/cable/blue") + + val CABLES = DyeColor.values().map { + Identifier(PhysicalConnectivity.MODID, "block/cable/${it.getName()}") to it + }.toMap() } override fun loadModelResource(resourceId: Identifier, context: ModelProviderContext): UnbakedModel? { @@ -35,7 +38,7 @@ class PhyModelProvider(resourceManager: ResourceManager) : ModelResourceProvider REDSTONE_EMITTER -> SimpleFaceDeviceModel(REDSTONE_EMITTER_SIDE) EXTRACTOR -> SimpleFaceDeviceModel(EXTRACTOR_SIDE) INSERTER -> SimpleFaceDeviceModel(INSERTER_SIDE) - CABLE_BLUE -> ColoredCableModel(DyeColor.BLUE) + in CABLES -> ColoredCableModel(CABLES[resourceId]!!) else -> null } } diff --git a/src/main/kotlin/net/shadowfacts/phycon/init/PhyBlocks.kt b/src/main/kotlin/net/shadowfacts/phycon/init/PhyBlocks.kt index 3664759..c59d5d4 100644 --- a/src/main/kotlin/net/shadowfacts/phycon/init/PhyBlocks.kt +++ b/src/main/kotlin/net/shadowfacts/phycon/init/PhyBlocks.kt @@ -1,8 +1,10 @@ package net.shadowfacts.phycon.init import net.minecraft.block.Block +import net.minecraft.util.DyeColor import net.minecraft.util.Identifier import net.minecraft.util.registry.Registry +import net.shadowfacts.phycon.PhysicalConnectivity import net.shadowfacts.phycon.block.cable.CableBlock import net.shadowfacts.phycon.block.extractor.ExtractorBlock import net.shadowfacts.phycon.block.inserter.InserterBlock @@ -18,10 +20,11 @@ import net.shadowfacts.phycon.block.terminal.TerminalBlock */ object PhyBlocks { + val CABLES = DyeColor.values().map { it to CableBlock(it) }.toMap() + val INTERFACE = InterfaceBlock() val TERMINAL = TerminalBlock() val SWITCH = SwitchBlock() - val CABLE = CableBlock() val EXTRACTOR = ExtractorBlock() val INSERTER = InserterBlock() val MINER = MinerBlock() @@ -29,10 +32,13 @@ object PhyBlocks { val REDSTONE_EMITTER = RedstoneEmitterBlock() fun init() { + for ((color, block) in CABLES) { + register(Identifier(PhysicalConnectivity.MODID, "cable_${color.getName()}"), block) + } + register(InterfaceBlock.ID, INTERFACE) register(TerminalBlock.ID, TERMINAL) register(SwitchBlock.ID, SWITCH) - register(CableBlock.ID, CABLE) register(ExtractorBlock.ID, EXTRACTOR) register(InserterBlock.ID, INSERTER) register(MinerBlock.ID, MINER) diff --git a/src/main/kotlin/net/shadowfacts/phycon/init/PhyItems.kt b/src/main/kotlin/net/shadowfacts/phycon/init/PhyItems.kt index aa2810e..bd28f67 100644 --- a/src/main/kotlin/net/shadowfacts/phycon/init/PhyItems.kt +++ b/src/main/kotlin/net/shadowfacts/phycon/init/PhyItems.kt @@ -24,10 +24,13 @@ import net.shadowfacts.phycon.item.FaceDeviceBlockItem */ object PhyItems { + val CABLES = PhyBlocks.CABLES.map { (color, block) -> + color to BlockItem(block, Item.Settings()) + }.toMap() + val INTERFACE = FaceDeviceBlockItem(PhyBlocks.INTERFACE, Item.Settings()) val TERMINAL = DeviceBlockItem(PhyBlocks.TERMINAL, Item.Settings()) val SWITCH = BlockItem(PhyBlocks.SWITCH, Item.Settings()) - val CABLE = BlockItem(PhyBlocks.CABLE, Item.Settings()) val EXTRACTOR = FaceDeviceBlockItem(PhyBlocks.EXTRACTOR, Item.Settings()) val INSERTER = FaceDeviceBlockItem(PhyBlocks.INSERTER, Item.Settings()) val MINER = DeviceBlockItem(PhyBlocks.MINER, Item.Settings()) @@ -44,10 +47,13 @@ object PhyItems { val REDSTONE_PROCESSOR = Item(Item.Settings()) fun init() { + for ((color, item) in CABLES) { + register(Identifier(PhysicalConnectivity.MODID, "cable_${color.getName()}"), item) + } + register(InterfaceBlock.ID, INTERFACE) register(TerminalBlock.ID, TERMINAL) register(SwitchBlock.ID, SWITCH) - register(CableBlock.ID, CABLE) register(ExtractorBlock.ID, EXTRACTOR) register(InserterBlock.ID, INSERTER) register(MinerBlock.ID, MINER) diff --git a/src/main/kotlin/net/shadowfacts/phycon/item/FaceDeviceBlockItem.kt b/src/main/kotlin/net/shadowfacts/phycon/item/FaceDeviceBlockItem.kt index f93e99b..3ce9800 100644 --- a/src/main/kotlin/net/shadowfacts/phycon/item/FaceDeviceBlockItem.kt +++ b/src/main/kotlin/net/shadowfacts/phycon/item/FaceDeviceBlockItem.kt @@ -15,7 +15,7 @@ class FaceDeviceBlockItem(block: FaceDeviceBlock<*>, settings: Settings = Settin override fun getPlacementState(context: ItemPlacementContext): BlockState? { val hitState = context.world.getBlockState(context.blockPos) - if (hitState.block == PhyBlocks.CABLE) { + if (hitState.block is CableBlock) { val hitBlockEdge = context.hitPos.getComponentAlongAxis(context.side.axis) % 1 == 0.0 val placementSide = if (hitBlockEdge) context.side.opposite else context.side diff --git a/src/main/kotlin/net/shadowfacts/phycon/item/ScrewdriverItem.kt b/src/main/kotlin/net/shadowfacts/phycon/item/ScrewdriverItem.kt index a6331f3..a3dbe00 100644 --- a/src/main/kotlin/net/shadowfacts/phycon/item/ScrewdriverItem.kt +++ b/src/main/kotlin/net/shadowfacts/phycon/item/ScrewdriverItem.kt @@ -14,6 +14,7 @@ import net.minecraft.util.math.Vec3d import net.shadowfacts.phycon.PhysicalConnectivity import net.shadowfacts.phycon.block.DeviceBlock import net.shadowfacts.phycon.block.FaceDeviceBlock +import net.shadowfacts.phycon.block.cable.CableBlock import net.shadowfacts.phycon.init.PhyBlocks import net.shadowfacts.phycon.util.containsInclusive @@ -34,7 +35,7 @@ class ScrewdriverItem: Item(Settings().maxCount(1)) { val newState = when (block) { is DeviceBlock<*> -> screwdriverDeviceBlock(context, state, block) - PhyBlocks.CABLE -> screwdriverCableBlock(context) + is CableBlock -> screwdriverCableBlock(context, state) PhyBlocks.SWITCH -> screwdriverSwitchBlock(context) else -> null } @@ -81,19 +82,19 @@ class ScrewdriverItem: Item(Settings().maxCount(1)) { val faceShape = block.faceShapes[state[FaceDeviceBlock.FACING]]!! // if we hit the face part of block, leave the cable behind if (faceShape.boundingBox.containsInclusive(hitInsideBlock)) { - return PhyBlocks.CABLE.getInitialState(context.world, context.blockPos) + return (state.block as CableBlock).getInitialState(context.world, context.blockPos) } else { if (!context.world.isClient) { - val cable = ItemEntity(context.world, context.blockPos.x.toDouble(), context.blockPos.y.toDouble(), context.blockPos.z.toDouble(), ItemStack(PhyBlocks.CABLE)) + val cable = ItemEntity(context.world, context.blockPos.x.toDouble(), context.blockPos.y.toDouble(), context.blockPos.z.toDouble(), ItemStack(state.block)) context.world.spawnEntity(cable) } return Blocks.AIR.defaultState } } - private fun screwdriverCableBlock(context: ItemUsageContext): BlockState? { + private fun screwdriverCableBlock(context: ItemUsageContext, state: BlockState): BlockState? { if (!context.world.isClient) { - val entity = ItemEntity(context.world, context.blockPos.x.toDouble(), context.blockPos.y.toDouble(), context.blockPos.z.toDouble(), ItemStack(PhyBlocks.CABLE)) + val entity = ItemEntity(context.world, context.blockPos.x.toDouble(), context.blockPos.y.toDouble(), context.blockPos.z.toDouble(), ItemStack(state.block)) context.world.spawnEntity(entity) } return Blocks.AIR.defaultState diff --git a/src/main/resources/assets/phycon/blockstates/cable_black.json b/src/main/resources/assets/phycon/blockstates/cable_black.json new file mode 100644 index 0000000..4d87b79 --- /dev/null +++ b/src/main/resources/assets/phycon/blockstates/cable_black.json @@ -0,0 +1,7 @@ +{ + "multipart": [ + { + "apply": { "model": "phycon:block/cable/black" } + } + ] +} diff --git a/src/main/resources/assets/phycon/blockstates/cable.json b/src/main/resources/assets/phycon/blockstates/cable_blue.json similarity index 100% rename from src/main/resources/assets/phycon/blockstates/cable.json rename to src/main/resources/assets/phycon/blockstates/cable_blue.json diff --git a/src/main/resources/assets/phycon/blockstates/cable_brown.json b/src/main/resources/assets/phycon/blockstates/cable_brown.json new file mode 100644 index 0000000..90a37c5 --- /dev/null +++ b/src/main/resources/assets/phycon/blockstates/cable_brown.json @@ -0,0 +1,7 @@ +{ + "multipart": [ + { + "apply": { "model": "phycon:block/cable/brown" } + } + ] +} diff --git a/src/main/resources/assets/phycon/blockstates/cable_cyan.json b/src/main/resources/assets/phycon/blockstates/cable_cyan.json new file mode 100644 index 0000000..f577384 --- /dev/null +++ b/src/main/resources/assets/phycon/blockstates/cable_cyan.json @@ -0,0 +1,7 @@ +{ + "multipart": [ + { + "apply": { "model": "phycon:block/cable/cyan" } + } + ] +} diff --git a/src/main/resources/assets/phycon/blockstates/cable_gray.json b/src/main/resources/assets/phycon/blockstates/cable_gray.json new file mode 100644 index 0000000..2207d52 --- /dev/null +++ b/src/main/resources/assets/phycon/blockstates/cable_gray.json @@ -0,0 +1,7 @@ +{ + "multipart": [ + { + "apply": { "model": "phycon:block/cable/gray" } + } + ] +} diff --git a/src/main/resources/assets/phycon/blockstates/cable_green.json b/src/main/resources/assets/phycon/blockstates/cable_green.json new file mode 100644 index 0000000..177c4af --- /dev/null +++ b/src/main/resources/assets/phycon/blockstates/cable_green.json @@ -0,0 +1,7 @@ +{ + "multipart": [ + { + "apply": { "model": "phycon:block/cable/green" } + } + ] +} diff --git a/src/main/resources/assets/phycon/blockstates/cable_light_blue.json b/src/main/resources/assets/phycon/blockstates/cable_light_blue.json new file mode 100644 index 0000000..84efde9 --- /dev/null +++ b/src/main/resources/assets/phycon/blockstates/cable_light_blue.json @@ -0,0 +1,7 @@ +{ + "multipart": [ + { + "apply": { "model": "phycon:block/cable/light_blue" } + } + ] +} diff --git a/src/main/resources/assets/phycon/blockstates/cable_light_gray.json b/src/main/resources/assets/phycon/blockstates/cable_light_gray.json new file mode 100644 index 0000000..179b5df --- /dev/null +++ b/src/main/resources/assets/phycon/blockstates/cable_light_gray.json @@ -0,0 +1,7 @@ +{ + "multipart": [ + { + "apply": { "model": "phycon:block/cable/light_gray" } + } + ] +} diff --git a/src/main/resources/assets/phycon/blockstates/cable_lime.json b/src/main/resources/assets/phycon/blockstates/cable_lime.json new file mode 100644 index 0000000..82c8685 --- /dev/null +++ b/src/main/resources/assets/phycon/blockstates/cable_lime.json @@ -0,0 +1,7 @@ +{ + "multipart": [ + { + "apply": { "model": "phycon:block/cable/lime" } + } + ] +} diff --git a/src/main/resources/assets/phycon/blockstates/cable_magenta.json b/src/main/resources/assets/phycon/blockstates/cable_magenta.json new file mode 100644 index 0000000..21f5a73 --- /dev/null +++ b/src/main/resources/assets/phycon/blockstates/cable_magenta.json @@ -0,0 +1,7 @@ +{ + "multipart": [ + { + "apply": { "model": "phycon:block/cable/magenta" } + } + ] +} diff --git a/src/main/resources/assets/phycon/blockstates/cable_orange.json b/src/main/resources/assets/phycon/blockstates/cable_orange.json new file mode 100644 index 0000000..8b24c82 --- /dev/null +++ b/src/main/resources/assets/phycon/blockstates/cable_orange.json @@ -0,0 +1,7 @@ +{ + "multipart": [ + { + "apply": { "model": "phycon:block/cable/orange" } + } + ] +} diff --git a/src/main/resources/assets/phycon/blockstates/cable_pink.json b/src/main/resources/assets/phycon/blockstates/cable_pink.json new file mode 100644 index 0000000..0a15251 --- /dev/null +++ b/src/main/resources/assets/phycon/blockstates/cable_pink.json @@ -0,0 +1,7 @@ +{ + "multipart": [ + { + "apply": { "model": "phycon:block/cable/pink" } + } + ] +} diff --git a/src/main/resources/assets/phycon/blockstates/cable_purple.json b/src/main/resources/assets/phycon/blockstates/cable_purple.json new file mode 100644 index 0000000..e94b387 --- /dev/null +++ b/src/main/resources/assets/phycon/blockstates/cable_purple.json @@ -0,0 +1,7 @@ +{ + "multipart": [ + { + "apply": { "model": "phycon:block/cable/purple" } + } + ] +} diff --git a/src/main/resources/assets/phycon/blockstates/cable_red.json b/src/main/resources/assets/phycon/blockstates/cable_red.json new file mode 100644 index 0000000..afc719f --- /dev/null +++ b/src/main/resources/assets/phycon/blockstates/cable_red.json @@ -0,0 +1,7 @@ +{ + "multipart": [ + { + "apply": { "model": "phycon:block/cable/red" } + } + ] +} diff --git a/src/main/resources/assets/phycon/blockstates/cable_white.json b/src/main/resources/assets/phycon/blockstates/cable_white.json new file mode 100644 index 0000000..aaac109 --- /dev/null +++ b/src/main/resources/assets/phycon/blockstates/cable_white.json @@ -0,0 +1,7 @@ +{ + "multipart": [ + { + "apply": { "model": "phycon:block/cable/white" } + } + ] +} diff --git a/src/main/resources/assets/phycon/blockstates/cable_yellow.json b/src/main/resources/assets/phycon/blockstates/cable_yellow.json new file mode 100644 index 0000000..6e7034d --- /dev/null +++ b/src/main/resources/assets/phycon/blockstates/cable_yellow.json @@ -0,0 +1,7 @@ +{ + "multipart": [ + { + "apply": { "model": "phycon:block/cable/yellow" } + } + ] +} diff --git a/src/main/resources/assets/phycon/lang/en_us.json b/src/main/resources/assets/phycon/lang/en_us.json index 319ca23..0494f5e 100644 --- a/src/main/resources/assets/phycon/lang/en_us.json +++ b/src/main/resources/assets/phycon/lang/en_us.json @@ -2,7 +2,22 @@ "block.phycon.switch": "Network Switch", "block.phycon.network_interface": "Inventory Interface", "block.phycon.terminal": "Terminal", - "block.phycon.cable": "Cable", + "block.phycon.cable_white": "White Cable", + "block.phycon.cable_orange": "Orange Cable", + "block.phycon.cable_magenta": "Magenta Cable", + "block.phycon.cable_light_blue": "Light Blue Cable", + "block.phycon.cable_yellow": "Yellow Cable", + "block.phycon.cable_lime": "Lime Cable", + "block.phycon.cable_pink": "Pink Cable", + "block.phycon.cable_gray": "Gray Cable", + "block.phycon.cable_light_gray": "Light Gray Cable", + "block.phycon.cable_cyan": "Cyan Cable", + "block.phycon.cable_purple": "Purple Cable", + "block.phycon.cable_blue": "Blue Cable", + "block.phycon.cable_brown": "Brown Cable", + "block.phycon.cable_green": "Green Cable", + "block.phycon.cable_red": "Red Cable", + "block.phycon.cable_black": "Black Cable", "block.phycon.extractor": "Inventory Extractor", "block.phycon.inserter": "Inventory Inserter", "block.phycon.miner": "Block Miner", diff --git a/src/main/resources/assets/phycon/models/item/cable_black.json b/src/main/resources/assets/phycon/models/item/cable_black.json new file mode 100644 index 0000000..923b285 --- /dev/null +++ b/src/main/resources/assets/phycon/models/item/cable_black.json @@ -0,0 +1,20 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "center": "phycon:block/cable/black/cap_end" + }, + "elements": [ + { + "from": [6, 6, 6], + "to": [10, 10, 10], + "faces": { + "down": {"texture": "#center"}, + "up": {"texture": "#center"}, + "north": {"texture": "#center"}, + "south": {"texture": "#center"}, + "west": {"texture": "#center"}, + "east": {"texture": "#center"} + } + } + ] +} diff --git a/src/main/resources/assets/phycon/models/item/cable.json b/src/main/resources/assets/phycon/models/item/cable_blue.json similarity index 100% rename from src/main/resources/assets/phycon/models/item/cable.json rename to src/main/resources/assets/phycon/models/item/cable_blue.json diff --git a/src/main/resources/assets/phycon/models/item/cable_brown.json b/src/main/resources/assets/phycon/models/item/cable_brown.json new file mode 100644 index 0000000..79a9426 --- /dev/null +++ b/src/main/resources/assets/phycon/models/item/cable_brown.json @@ -0,0 +1,20 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "center": "phycon:block/cable/brown/cap_end" + }, + "elements": [ + { + "from": [6, 6, 6], + "to": [10, 10, 10], + "faces": { + "down": {"texture": "#center"}, + "up": {"texture": "#center"}, + "north": {"texture": "#center"}, + "south": {"texture": "#center"}, + "west": {"texture": "#center"}, + "east": {"texture": "#center"} + } + } + ] +} diff --git a/src/main/resources/assets/phycon/models/item/cable_cyan.json b/src/main/resources/assets/phycon/models/item/cable_cyan.json new file mode 100644 index 0000000..d1761d5 --- /dev/null +++ b/src/main/resources/assets/phycon/models/item/cable_cyan.json @@ -0,0 +1,20 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "center": "phycon:block/cable/cyan/cap_end" + }, + "elements": [ + { + "from": [6, 6, 6], + "to": [10, 10, 10], + "faces": { + "down": {"texture": "#center"}, + "up": {"texture": "#center"}, + "north": {"texture": "#center"}, + "south": {"texture": "#center"}, + "west": {"texture": "#center"}, + "east": {"texture": "#center"} + } + } + ] +} diff --git a/src/main/resources/assets/phycon/models/item/cable_gray.json b/src/main/resources/assets/phycon/models/item/cable_gray.json new file mode 100644 index 0000000..34533da --- /dev/null +++ b/src/main/resources/assets/phycon/models/item/cable_gray.json @@ -0,0 +1,20 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "center": "phycon:block/cable/gray/cap_end" + }, + "elements": [ + { + "from": [6, 6, 6], + "to": [10, 10, 10], + "faces": { + "down": {"texture": "#center"}, + "up": {"texture": "#center"}, + "north": {"texture": "#center"}, + "south": {"texture": "#center"}, + "west": {"texture": "#center"}, + "east": {"texture": "#center"} + } + } + ] +} diff --git a/src/main/resources/assets/phycon/models/item/cable_green.json b/src/main/resources/assets/phycon/models/item/cable_green.json new file mode 100644 index 0000000..4ca6090 --- /dev/null +++ b/src/main/resources/assets/phycon/models/item/cable_green.json @@ -0,0 +1,20 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "center": "phycon:block/cable/green/cap_end" + }, + "elements": [ + { + "from": [6, 6, 6], + "to": [10, 10, 10], + "faces": { + "down": {"texture": "#center"}, + "up": {"texture": "#center"}, + "north": {"texture": "#center"}, + "south": {"texture": "#center"}, + "west": {"texture": "#center"}, + "east": {"texture": "#center"} + } + } + ] +} diff --git a/src/main/resources/assets/phycon/models/item/cable_light_blue.json b/src/main/resources/assets/phycon/models/item/cable_light_blue.json new file mode 100644 index 0000000..4c577d0 --- /dev/null +++ b/src/main/resources/assets/phycon/models/item/cable_light_blue.json @@ -0,0 +1,20 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "center": "phycon:block/cable/light_blue/cap_end" + }, + "elements": [ + { + "from": [6, 6, 6], + "to": [10, 10, 10], + "faces": { + "down": {"texture": "#center"}, + "up": {"texture": "#center"}, + "north": {"texture": "#center"}, + "south": {"texture": "#center"}, + "west": {"texture": "#center"}, + "east": {"texture": "#center"} + } + } + ] +} diff --git a/src/main/resources/assets/phycon/models/item/cable_light_gray.json b/src/main/resources/assets/phycon/models/item/cable_light_gray.json new file mode 100644 index 0000000..e079710 --- /dev/null +++ b/src/main/resources/assets/phycon/models/item/cable_light_gray.json @@ -0,0 +1,20 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "center": "phycon:block/cable/light_gray/cap_end" + }, + "elements": [ + { + "from": [6, 6, 6], + "to": [10, 10, 10], + "faces": { + "down": {"texture": "#center"}, + "up": {"texture": "#center"}, + "north": {"texture": "#center"}, + "south": {"texture": "#center"}, + "west": {"texture": "#center"}, + "east": {"texture": "#center"} + } + } + ] +} diff --git a/src/main/resources/assets/phycon/models/item/cable_lime.json b/src/main/resources/assets/phycon/models/item/cable_lime.json new file mode 100644 index 0000000..0adee68 --- /dev/null +++ b/src/main/resources/assets/phycon/models/item/cable_lime.json @@ -0,0 +1,20 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "center": "phycon:block/cable/lime/cap_end" + }, + "elements": [ + { + "from": [6, 6, 6], + "to": [10, 10, 10], + "faces": { + "down": {"texture": "#center"}, + "up": {"texture": "#center"}, + "north": {"texture": "#center"}, + "south": {"texture": "#center"}, + "west": {"texture": "#center"}, + "east": {"texture": "#center"} + } + } + ] +} diff --git a/src/main/resources/assets/phycon/models/item/cable_magenta.json b/src/main/resources/assets/phycon/models/item/cable_magenta.json new file mode 100644 index 0000000..3102d7e --- /dev/null +++ b/src/main/resources/assets/phycon/models/item/cable_magenta.json @@ -0,0 +1,20 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "center": "phycon:block/cable/magenta/cap_end" + }, + "elements": [ + { + "from": [6, 6, 6], + "to": [10, 10, 10], + "faces": { + "down": {"texture": "#center"}, + "up": {"texture": "#center"}, + "north": {"texture": "#center"}, + "south": {"texture": "#center"}, + "west": {"texture": "#center"}, + "east": {"texture": "#center"} + } + } + ] +} diff --git a/src/main/resources/assets/phycon/models/item/cable_orange.json b/src/main/resources/assets/phycon/models/item/cable_orange.json new file mode 100644 index 0000000..300cff0 --- /dev/null +++ b/src/main/resources/assets/phycon/models/item/cable_orange.json @@ -0,0 +1,20 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "center": "phycon:block/cable/orange/cap_end" + }, + "elements": [ + { + "from": [6, 6, 6], + "to": [10, 10, 10], + "faces": { + "down": {"texture": "#center"}, + "up": {"texture": "#center"}, + "north": {"texture": "#center"}, + "south": {"texture": "#center"}, + "west": {"texture": "#center"}, + "east": {"texture": "#center"} + } + } + ] +} diff --git a/src/main/resources/assets/phycon/models/item/cable_pink.json b/src/main/resources/assets/phycon/models/item/cable_pink.json new file mode 100644 index 0000000..c5735a9 --- /dev/null +++ b/src/main/resources/assets/phycon/models/item/cable_pink.json @@ -0,0 +1,20 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "center": "phycon:block/cable/pink/cap_end" + }, + "elements": [ + { + "from": [6, 6, 6], + "to": [10, 10, 10], + "faces": { + "down": {"texture": "#center"}, + "up": {"texture": "#center"}, + "north": {"texture": "#center"}, + "south": {"texture": "#center"}, + "west": {"texture": "#center"}, + "east": {"texture": "#center"} + } + } + ] +} diff --git a/src/main/resources/assets/phycon/models/item/cable_purple.json b/src/main/resources/assets/phycon/models/item/cable_purple.json new file mode 100644 index 0000000..12f8e82 --- /dev/null +++ b/src/main/resources/assets/phycon/models/item/cable_purple.json @@ -0,0 +1,20 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "center": "phycon:block/cable/purple/cap_end" + }, + "elements": [ + { + "from": [6, 6, 6], + "to": [10, 10, 10], + "faces": { + "down": {"texture": "#center"}, + "up": {"texture": "#center"}, + "north": {"texture": "#center"}, + "south": {"texture": "#center"}, + "west": {"texture": "#center"}, + "east": {"texture": "#center"} + } + } + ] +} diff --git a/src/main/resources/assets/phycon/models/item/cable_red.json b/src/main/resources/assets/phycon/models/item/cable_red.json new file mode 100644 index 0000000..99373a3 --- /dev/null +++ b/src/main/resources/assets/phycon/models/item/cable_red.json @@ -0,0 +1,20 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "center": "phycon:block/cable/red/cap_end" + }, + "elements": [ + { + "from": [6, 6, 6], + "to": [10, 10, 10], + "faces": { + "down": {"texture": "#center"}, + "up": {"texture": "#center"}, + "north": {"texture": "#center"}, + "south": {"texture": "#center"}, + "west": {"texture": "#center"}, + "east": {"texture": "#center"} + } + } + ] +} diff --git a/src/main/resources/assets/phycon/models/item/cable_white.json b/src/main/resources/assets/phycon/models/item/cable_white.json new file mode 100644 index 0000000..493680e --- /dev/null +++ b/src/main/resources/assets/phycon/models/item/cable_white.json @@ -0,0 +1,20 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "center": "phycon:block/cable/white/cap_end" + }, + "elements": [ + { + "from": [6, 6, 6], + "to": [10, 10, 10], + "faces": { + "down": {"texture": "#center"}, + "up": {"texture": "#center"}, + "north": {"texture": "#center"}, + "south": {"texture": "#center"}, + "west": {"texture": "#center"}, + "east": {"texture": "#center"} + } + } + ] +} diff --git a/src/main/resources/assets/phycon/models/item/cable_yellow.json b/src/main/resources/assets/phycon/models/item/cable_yellow.json new file mode 100644 index 0000000..e425474 --- /dev/null +++ b/src/main/resources/assets/phycon/models/item/cable_yellow.json @@ -0,0 +1,20 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "center": "phycon:block/cable/yellow/cap_end" + }, + "elements": [ + { + "from": [6, 6, 6], + "to": [10, 10, 10], + "faces": { + "down": {"texture": "#center"}, + "up": {"texture": "#center"}, + "north": {"texture": "#center"}, + "south": {"texture": "#center"}, + "west": {"texture": "#center"}, + "east": {"texture": "#center"} + } + } + ] +} diff --git a/src/main/resources/assets/phycon/textures/block/cable/black/cap_end.png b/src/main/resources/assets/phycon/textures/block/cable/black/cap_end.png new file mode 100644 index 0000000000000000000000000000000000000000..0394e7cd0aef9a63a5e1a4a2798ebb7cc50dd55a GIT binary patch literal 874 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx*Bp9q_EZ7UAm`Z~Df*BafCZDwc@shmVT^Rni z_n+Ah4nJ=qZCRW5rVYGN2%PiKnkC`%`8 zD9TUE%t=)!sVqoU$V^UVV6f<28XVmxqsa5;xrk-c$IX^}%y)y{)i+A;e7<$lV|Iko z-6Rn>Tk-^?6-V5{5dxAsK?@fW30w1`8+(mhZml9%z7r=)H_}I z!VTs6F}Naiq@JQPg-n*8|4+AM?*Gcf1-< z{U+1;M*2gh2wjWa;&aUNcANU~nG4tMUs^la*VSKeq3nh`^A5Ok#MD@FN^Uoky1LLr zeAX`KzZWEozHPOCd}cz+1FwenESK&}KKYekz+&5-C^FksqsyRLY45S-4^!oN9(+`p zm!lzZkLAs*Af-d;j%gV(6EB_5mRNXZ@6?kYUa_jxt*)&5y~<_pS(mesHAxG?OWcl& za;~gN>55sGP$K);EbrEjWG5Z7zh!6g?RGKGiZ%Og=Dx_bGGzNq@zqBKmYi|mn&~+8 zcK5qO8R|`5wQOAN2X<_&+%P35yw#(|^S57l^^N@Ne811u3f`+%sS-{4#avRN;LfR) zc>@@~dY&$hArhC96Be*1v;=(m|KHFyDFFl;IsPQ4|KLnCT)3)bb;7To{d#&Wj0{hN z*;#Hs4v+xqR4s9hC`m~yNwrEYN(E93Mg~TPx(3F&h9)6~rdFn=Rt84e1_o9J2H9KG zMNu^5=BH$)RYElw=^C1b7+P2v7+M*cLNtW_yJH5_APuqsn69jn^9w4AGSf3k7y?R@ zax#+@T=H`hGxN4hG>ir+Q-Uc=Ni9w;$}A|!%+F(R_w)@=NGi?DDbdZ$Qz#B{ck)Sh z6b7mmg{jU>%qvYxOfD%cN-Y8__n9~06i@*lTtR+HY7PTPYjlFAGf;-X)78&qol`;+ E0O+qz%>V!Z literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/phycon/textures/block/cable/black/straight.png b/src/main/resources/assets/phycon/textures/block/cable/black/straight.png new file mode 100644 index 0000000000000000000000000000000000000000..59de76fe0f8f6d7e790a9bb5af3ab23d97209507 GIT binary patch literal 933 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 a`6;P63?Qx137*bC83s>RKbLh*2~7ZDs~Ow? literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/phycon/textures/block/cable/brown/straight.png b/src/main/resources/assets/phycon/textures/block/cable/brown/straight.png new file mode 100644 index 0000000000000000000000000000000000000000..c6139ffe5fd0890ed00b334d5f7702d4213a5a6e GIT binary patch literal 1619 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/phycon/textures/block/cable/cyan/straight.png b/src/main/resources/assets/phycon/textures/block/cable/cyan/straight.png new file mode 100644 index 0000000000000000000000000000000000000000..b9d11765ebb668bb175144b7b8bcca1f1ee8ff57 GIT binary patch literal 1697 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 R5hogD01h)Qraekj@h7aZzo-BJ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/phycon/textures/block/cable/gray/cap_end.png b/src/main/resources/assets/phycon/textures/block/cable/gray/cap_end.png new file mode 100644 index 0000000000000000000000000000000000000000..ad5366de9584833e459c54c52e3feedf38b053e5 GIT binary patch literal 1348 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/phycon/textures/block/cable/gray/straight_rotated.png b/src/main/resources/assets/phycon/textures/block/cable/gray/straight_rotated.png new file mode 100644 index 0000000000000000000000000000000000000000..6e0305730317cdf3b4e752986548c79e23fffe93 GIT binary patch literal 1538 zcmZ8fdo+}J82;SWB~2X0rLrbWRA?^E)n$BhF*A%YjY))U7&Cl@8PmwPjAp5oLOJDZ z(NRRDR;8$pZi*=Dnr%suO)W=qZI>n5Pi=e7?(dxU_n!B8pXYi1c;6fWpS{v#wFv+K zE4dt|5YA@HVWbEDE^e!W06<3rF&F|!B7uPdO@SAu!DsEGok6UEd7ZsxiH`+#jhPn? zo((QFLei@`FJ?Wd*x6aWj+>Zh8NLFM;Tmigekv(Rfz*Gn%8W#EW?65T+Q%(retC)miG)ZX$WYB0Cfe&gsZ$=GCF59D9&QUXh0*tkkkz9(p*Zp)u;- zfkG>pL6BpKL;i&#{$KPyN#TrDOqD1yFKycThimgKxE=_xE}!KJmgQTD1WaRMS3;=-C^#GvV z4*>Hpq#Xf(Bn$wIiUELn0syQPr|PzP!i_@$o`?l!JlPvd^rUz(NFE@`6Wl`aCQ^OK zo^&kHgFyAck~|3%8qotrK(Yr&pwi$j%>1H)OPEjfW)P_~SOS~C5{562?(5HB2QWDS zOm+Z^!}sL|GC6#Z<ApPJ5Ks1kJ#i#2sy7o)^7{1YQ{hPV@{O6Rgnam<{`VT} z+Qwl>C(57AbZhGaz2L%F!3o_10Pc>@qORhn9lS)=M;y~ z`;S*g5Lxs6JLUxjb$5Exg2Yj5zl4Z1-4-GRBp^rFc1x*HcC%LIYSdEx1R@}3DU+OkKUNy zbVJ<8x2;c+5^fXt2$F^7eud^(04vbE)b8rbl6tmLcsj+{_9k)lv(hcrMRknDP8-~x zwX~tuqx%Q_v=jPIU)jEy7i09j4o6xRvs?~g(j4wKWla{^n+{GnmBhK&4Cs#)2^}8B zfU?-N1y4J6+myE6EqpRLYOp@zQcA|cMdsZ$W?N`_)S2xn-)5w7WqS0X@XKPA-3&3I zZ%#sYB`)r5m3!Ce6-5wdiR?136w%F-)|VccmACqsoCFJB93Fod>zwJQ`Nkx>{#I?u z)#JkL2RP~61%7f`ue=Ab(55jT*yogrjGEU|sZea=jZiPV-*_$)6xnpwwu4rgC`+HN zBbpixju~X8lVj4dc%`G;LEYey3ZNaH8AJVpwwpt+sRmvC*xbd*6EgH4We;}B@n0>@+J(1iotX=s>A*xh?hr0vXp-WI5#Xo zgu_y?WGa^OMIge)FHcyrJOMsSszk0xQ9?1XDnO7F6$eRBOnH1HlyIW}yX@=ml@=}C zBT+&M6(mmp*xUdCDk=$zQ@KG2s69e9ofiXIz-;7Kc6?+)k}Oi9N>WOdpXt1kqb)E2 b@h?FhEsX<~rD0+&1MUD^7N2>UF3$WLPoP(p literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/phycon/textures/block/cable/green/cap_end.png b/src/main/resources/assets/phycon/textures/block/cable/green/cap_end.png new file mode 100644 index 0000000000000000000000000000000000000000..97b08449bf7cbb8a2134962a212a0e1006ff41b0 GIT binary patch literal 1351 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPL>tj%H@pq zVx!GHmY!Y*%4_Z_AGp3-@&NfxuWW_nZ{+#SrE6cq zz1#X>E{2;x4rhT!WHAGS zo-znCRxGtI0}8U2c>21sKV{|<)|1|(@L@Jk&%vsYh?1bha)pAT{ItxRRE3htf>Z@? z8nWnJ8XVmxqsa5;xrk-c$IX^}%y)y{)i+A;e7<$lV|Iko-6Rn z>Tk-^?6-V5{5dxAsK?@fW30w1`8+(mhZml9%z7r=)H_}I!VTs6F}Naiq@JQPg-n*8|4+AM?*Gcf1-<{U+1;M*2gh2wjWa;&aUN zcANU~nG4tMUs^la*VSKeq3nh`^A5Ok#MD@FN^Uoky1LLreAX`KzZWEozHPOCd}cz+ z1FwenESK&}KKYekz+&5-C^FksqsyRLY45S-4^!oN9(+`pm!lzZkLAs*Af-d;j%gV( z6EB_5mRNXZ@6?kYUa_jxt*)&5y~<_pS(mesHAxG?OWcl&a;~gN>55sGP$K);EbrEj zWG5Z7zh!6g?RGKGiZ%Og=Dx_bGGzNq@zqBKmYi|mn&~+8cK5qO8R|`5wQOAN2X<_& z+%P35yw#(|^S57l^^N@Ne811u3f`+%sS-{4#avRN;LfR)c>@@~GM+AuAsp9}6BNWb zW;#eFiUu58lcn+aP4XsRRt836=39sEdVL0}Q!R0gC`m~yNwrEYN(E93Mg~TPx(3F& zh9)6~rdFn=Rt84e1_o9J2H9KGMNu^5=BH$)RYElw=^C1b7+P2v7+M*cLNtW_yJH5_ zAPuqsn2M~D^9w4AGSf3k7y?R@ax#+@T=H`hGxN4hG>ir+Q-Uc=Ni9w;$}A|!%+F(R z_w)@=NGi?DDbdZ$Qz#B{ck)Sh6b7mmg{jU>%qvYxOfD%cN-Y8__n9~06i@*lTtR+H YY7PTPYjlFAGf;-X)78&qol`;+0C1BV5dZ)H literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/phycon/textures/block/cable/green/straight.png b/src/main/resources/assets/phycon/textures/block/cable/green/straight.png new file mode 100644 index 0000000000000000000000000000000000000000..76733aaad11d8f74ad39f3d145c05cda741579ef GIT binary patch literal 1602 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 umziHE&J-#N7}k63XNN literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/phycon/textures/block/cable/light_blue/straight_rotated.png b/src/main/resources/assets/phycon/textures/block/cable/light_blue/straight_rotated.png new file mode 100644 index 0000000000000000000000000000000000000000..c49c0c9b8c710828a8b96cdb96489ab74d9ae9b5 GIT binary patch literal 1676 zcmaJ=X;4#F6n-q0r5K?hLRD%6QM80+F#%!~5|So?5JHFuMKmEKm=;KY7um9rfPe~x zDs2S|1jMQx7sRE5T4_-rFE3$9E!I}0qT(nO5GyuT?W5aF|MbqBd**)U`_8#@&$-on z9&4fJ5>EgC7IN4O0ph*q&D{mrLvV|d0KiEjkBQ;SB@zUv*VJ!d_eL+fvMq^O?{M1T zoj1S_xNJCF)t+o}$Iy=r9W|OewhbLz!O6?>-SRq08=4%j<$y}1#JGO5$U8iIHPdg+ zjE-Ys?s4mXQB*jUH;3~6Aox&f&ba>2k22z0X#4(6o#Pnik|8&rc4F6_NKR}|q54Kp z&*=G(!N*Z^6Zez57P~kH&V-VORgTQ?&o%6XM#pCAKi+WNMBqe zyT%QksP4U-@pVPRV%dVEpyt5Z!;QS(=+`9;vx~Ei3B@&~kNtL@azMmUIch~MGnCd= z>nr3lJSc6a9~?|!k7(iksQZrK{55yh8tNrZ((QHWQO}nD{^)xso>#;%`47Fk9kIMO zx<8D6f@+)V9RDssKSok^gul4E1V76uIdg+Eg6o|!rONCv2>8oI6%=3 zr&gModU*3r$j}Vyn&7g};qn%^sukYZ3RkqiyW8N}c59`{TH9eOZGv~TS@*QtcDGxN z%@$*eRsT6$*kr3{u~f|StyLx@gGJp08=GOOZji2nBh)sQ9*Q+s63Zb@ndKdgT~GmS ztr{S!2N^mTxp}0<_UhHEC6)GJ*tFO6D-v?>P_k1C z03a-A-kgd$qIMvl8_0=gy4`g_p~IG*!cI3Knr}*kDWE`Hh*jn*Wb$k&7A#guv48%U zh?z&sN=e#=fj2(J-VFo?}ieGYZ=mw5$BmN%{I~SwB0c;3CfZ9SF}oPv)V*(V9yg zn!WMN1Rqnt$)B2gSngZYksfcJqb#{SVxM*cqQ`H%*o5A<`F&;|sr^xeq!;-Rbda6En;kwPGoDB)cvGf$p6+j*v|5MKbE0x4jgN}`;be)9O~ z%&)VH+`R<`soLTMI2PG2tT-V@$_InY6fjc^N~w~3 zDdGSko=CvqNjSnfA%RRKld1TKxAAx?9zS@wDD6Lj97U#FR{Xbsh$E1NL;{r%K_x`~ zB@hyFN)f@*`3lHzQY8vyalSljI|%Sq8QF3PmZ8WI%X81x6Xx><{zJ=@7D)2tN>HxI z1z4PTJ~l%o&jxYwTx@}WMdxPG&Tn8Zp)V~BprZgLv Tm!^q0F-Qd9FnNsQbdli?7Ng1p literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/phycon/textures/block/cable/light_gray/cap_end.png b/src/main/resources/assets/phycon/textures/block/cable/light_gray/cap_end.png new file mode 100644 index 0000000000000000000000000000000000000000..1402bbdb1d59de4c113607a0e2f6076b7185a535 GIT binary patch literal 1362 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 CjDB_i literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/phycon/textures/block/cable/lime/cap_end.png b/src/main/resources/assets/phycon/textures/block/cable/lime/cap_end.png new file mode 100644 index 0000000000000000000000000000000000000000..bb1f8dcc79a86593df5a49def9669a3a5d428439 GIT binary patch literal 1365 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47;7_~odYtHlYs&gYbV-z9Cna7 z8XxRB@fTy6K;el1*&|IWIu?g5^9f|BE{n{4+_3C+nvtCF<(Z)yAB!?oU0@en zY_z$@($niedCgtr1J`$Jod0D1{rQWq&0@?EGIqoJ@YS`r#AeHUXXqE_1ca7m)R9uV^#ASnw=9= z{BORtd;c!y?c4jtz5nVMN_~n}y!T$T4;UW`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo z7+xhXFj&oCU=S~uvn$XBC}9@h6XFV_#kLvqZ_{GfDJ;6xkZXsM-r+!8f};Gi z%$!t(lFEWq1#n8T=v^8d-6x~S^XIvUWz)yamVC^2gWlCQO7MKXb<<;Zgwx$A8)MB} zf8CAxW$ME#%yXFQ)|4&MjF(%syw1$gIB~2)pg-t;nBZ-9&hl8n7xx3)b=$1-{C}uD`QdS-&e&1Zcspjv6~vE~m`<#`@_RGF8fA#so8 z&8#4$L+Orb88Qj*D`xtV!vL zS(i{E``Ik-){kT-9kah>XY%cKG0%!M`)=mG$hINKP5Q-LQlj9_sg-#H7{4l> zE{-7*my;6~C?}*Or8x>Fq$WRi5Pb0D(KAQE2Tvc1FIX?)FK#IZ0z{pV7z*yJNB*f6v%GA`#z)0J`z{pL3o8RdD??L=hR}a^%zzrCK{fzWlT~tlL1j^9dPWIDKxtA=X0n1yer{rB-nNN` z(LiNNFl8yJ#mPmP1tppJc?|BJz5xnJrI|S;x|w+j#X;^)KIx9aK-Ho!)wzjzrD=)D rC8b5FMPTJV^Cp}ED&T`F$WKYlVE}23PVjUF$}o7k`njxgN@xNAn{*`W literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/phycon/textures/block/cable/lime/straight.png b/src/main/resources/assets/phycon/textures/block/cable/lime/straight.png new file mode 100644 index 0000000000000000000000000000000000000000..bfaa1bf7c91c7b18a8c79cc918e6d6b8b5bb9e4b GIT binary patch literal 1710 zcmaKrdr;F?7RPT07{CznAb0fW3T3wD)O zP^?TVI$Bh$+VKG-zaZ9@HVL6FA{7;DtA?W0QOZM{VzFv}bhkUR|LmPP_sl)#^PT%R z_q52QLNCt%PXK_ISj3mZ9=mMrNO-2uyfXnnG-y*(Wm=UA4zxG4uM=5Q0_|Hf1?@|S z?bz~RS&*&i)b8WiUG7BQ*|9Ut-*#^uI}su-FZbE964OY{4%%|KvQkfU{n{HFA0H|3 zi<;jd?h@=lIbKy)&6Y1>uT0^XuC5*DB+L?a<#MxIuC+KM1El$|3F6-S36Ju8 zt2MVJ5szA|wt_F;@9@>QWriIIZ9CN|{f&1=)v@4PbXJkyTKCNFpS??0SQA=INSlDl zJ=W%q@$`THNJ7_WGxU zU~7tlE<2wzy4W*yBg5!q>$~G$Jq%zhh-=NK1#QNArOuxQPDj-ZKEyEQ3WrZlr*S)Z zbkr9|zl&EJUvK{Oy{k{p_Us);kpy`WWya=IWq8K-PuI`Rl>G9`eRk{XMo=lKI5oTR z*q3lUNGg#$9e`Rg0LGmFEWsh;V*n}{06b9wkn{-ve)_`$o8E?thLK4W0vG@mA{vUo zTWB6oh!+$|G_e3g@PSx33)QPH64B>}>|ce4=)MpeXQFyvq+p>KtT_f}rmZxE6CgUy zLc{gbS3!wbC>of3&}K3UT0^|ZqB~?Uwse#^7;Pa(*!g7J29zn-uRoSHlo4g!h%-}> z7Xz5XS#kAhe!;8zPgt*cL>&eU8~43$n&d6 z`U;&!TcRczYV>N-pWTzt+MT(%EieTA`y-#krun`^4DzmgX2(DL(F=FJ7ahvs-96Bg z#}O>u{o7KU#EXEodfqu;T8$XrX?m(Hp$rf0ChhV$?XLW6kNeihl)rzK^N}VZ3_0rJ z@}o0&`q`Q0P4`kFr>iu{rsvj$yj;8JxNOLc9j-&8TdiIH;=cPcp{e!bu(^@Z#kq3o z7w0x9H?AK|9MV4*4z6s3)|O?wAU}8^vNf`~MD}@4C*tV5ZuB$mO}M@nx6dq?mX@!&lu6AEgU2a9u$cempWLbl*~+=&{Pe3Aou6>(@Du`fALd^{Y8~ zYGmI|XPR-=_4@r)50;b+*L5G}`y3KbK48>^ULIj*|W=fjVbQ2g(?PIt;fzbWEs ziUZrPUwhBLYvgjrw{uV2$c>-ZG`>8;zkHQ{HMhRt({~IT97K=P^@Sg7Ij1xPEpW>2 zyioC|oLAdNbn6F@oq3!^j_}yJ8inPc-{*GhiIEh~gWQfEKAiccII=0NVTI?e!G3ei zg#+?;-WS!2UrMX$ZtEs6FRwP>?(GP#B^E3p4F;0XBU*bKu5XK&&sF%3tCRq-Avdwc zjl9BDnXQm#=X3GOtgOrlWh!1dapU@}$rQZv#?A3~ClBxB#IiV(T)Z?82;*xo9=0lxu{Ex)zBT#y~|MjN$u@ z3Z+cHJ9fWOQk+xmYC{A6Ff6;a104$=D#9ShF%;$-)JdueHS7S3!D7-FY#K9G!AwYE zvXWTL7zQJW!SIr?^#3C$)fH+rHUAN?Xv{bTGd_tGn-s_Sx1dI=n}h|cmv?}_Y?4Z+ zuc^=$6&rx8vY_2;E-t*3R&hI&A z=DhD|mdnz7yn?&{06r42P=RFpa(JMTnM(J~1^`v3PfeBUH5x={uWMf~wx0aP8cA81|5k5YJuN3>>miH9NLulgFFqk5 zT11YS-zn)5?ZLQSR94KEE#mNRMV`njnQS=mqmI3rICfxD&m_sMdK5!A#_rvdBuO8r zsJ#_FFn*DG^-1#L)We+K0JK}!JdGngSlLurJ;qI(CGO7S=QLk!c1imw^Wo#9y>}9) z@&hV$H>8nM&2~q@7w>cg=-jiz4~Mm$?3Ddea8uK<5KweRscxxxLVoxB(q;Cz9=E1d zMB^WA^;gP;p4_9>N5^x;*XoB|$q$zzO)>Xk8{0J~?e@0(g4?-+(6%8x8yXAdGZ@Y+x>HVb%2)hVG2ZJ^sTY0eDVVCL(C3Wif2W8WC%cr(tC@tQ5z8;-zOSK}b6uPw%} zkAbtrfIgDn1x8R`qB|6fg`<3IQ3QyFv4&!x&{wZsbyz&C$cu!S6*8o)|Ie7r5v)VD zQ3V^*gn6Ckp9UfePop@m8~{f6a-b@^lXoB@#w^JYVeX@GM8>M~l(~b5=c{UEu34e3 zpcqXCoxWI0F;^M2l;3|(VoP`Sme$}k*x#o7lN#rHlW^!;ikY2%3B)ek{6Ty$S8!{8 zPd-<)bn8z`@lqcm*6ww4zjYOAY?t-1zL+{R_#S1q|0xgECwn}$MW_7v%iMjs$Z+(C zo7+zlq0>)JH)Y*UiJq>|C0n1`7xMF*;$!kbcTR)>i*2!YeanCA0kN^=qwu-mk;S<( z+UIApR2w&pBn=v$rVV)4!|O^jpGDn!CU(?w_$1C}UK6N~=M5vD@UP2jruFM?6#eX$ zOHaH=K9o>;F;Lhv+~}Oin(I_2WtO=BI^6hny^cQO>-Tg*opaw!^PCV+bgC!6=7c& z@papS+pk@HJFsi`QpY!QkKCi`Kdq{Nep-0xittKaZNZVv<~Lm=&r`L9?{7V;GKVa1 zOK(2Y2x#0FJBAG#`q7>F+(mBM(e+hI+X3>YPW?#_j<~A| z3v_C&W@_Tz-3LG4pCqf=I`(arD-}6eo3h78zq|Imdi45O0+YFx&1J=NxVCfFf^%>W z)LUV+8cjRO;?3oYs=236ex3ivg0BbG3+L(My;n6s^!Ix}B#;P`#E;tcfB4s~=5JBF z8T{r#0T$^c5NQ_WnhVutEl*?8A_=gWY!;o#p|jR1S@FF1cpft`j>+UPnO7Z^TmHvT zVkp$>s{UhO(^>IKHjBqfr3Hw*7CVwe_(~$a*auEH0uqeAWf1XrxaN9#b&y`lv1up6G)5rM1&^&L6@jYEjqQv nY%ys~zvI%wZI=-M_g}zJs4WJ|)-5VYDzXD4BAM{4K-Ks!MEI1z literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/phycon/textures/block/cable/magenta/cap_end.png b/src/main/resources/assets/phycon/textures/block/cable/magenta/cap_end.png new file mode 100644 index 0000000000000000000000000000000000000000..8f5183d6a571ce165fc088db7d99e41748d2166f GIT binary patch literal 1365 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47;7_~odYtHlYs&gYbV-z9Cna7 z8XxRB@fTy6K;el1*&|IWIu?g5^9f|BE{n{4+_3C+nvtCF<(Z)yAB!?oU0@en zY_z$@($niedCgtr1J`$Jod0D1{rQWq&0@?EGIqoJ@YS`r#AeHUXXqE_1ca7m)R9uV^#ASnw=9= z{BORtd;c!y?c4jtz5nVMN_~n}y!T$T4;UW`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo z7+xhXFj&oCU=S~uvn$XBC}9@h6XFV_H;HXq%fD?Y!_Ez&TUT@KIIOq-n9iY9Tw7Q3 zY&~MQ|ES)f)!f^*NbXoCux%y#wq*=E{{R2~O0I4uP$y$akY6x^!?PP{AWo9EyNlqX zt+u;>9L@rd$YKTtJ!KGPtXOJa1{7p3@$_|Nf6B}!tS7xm;lpg8o`Y2(5hX#1>wa}mp?kDD#|nC}L?t8bLx`F!i9$Lt8FyHhsC znz{bE8}-Z7hgX>AFxRaqTcjB;w`_TxnWJ&yScgKp$V!fcJD-HBPOS*Dl?yB zV!HD{{>`UV&4KqE)Zdh+*>CxB_;YOJQIEv|$5@S3@_BfA4=+6JnDtD!sdu{ahcoBC ze<;-1vo0{f+wPp@v4St|2e|9DS?BrxP<{fb7h^evUl-zD6b#DSuWj|eDW*7fW@{uQDnBOMwdag(%xguAEwIlJouNYmyd(m$)4lCN5$xb?Ef6LC~+wEeW6>Ik0%zcqKpmj`F@|R6}(rkQYD)7i@Bsk!JShp^9C?} zRXklBLnJOICoE7-NJ&a_6ii4>e(oUn;K`$Bj)D)KJ{DiFT$s`M4MQix(@F1u>Qzfz zBT7;dOH!?pi&B9UgOP!ep{{|kuAxbYp{bRrsg;3|wt<0_fkE~bbx{-zx%nxXX_Zh7 zM!JTkA%+%K28LFKrVtIG|L&LpHAsVO0H!9ZH z6Ahz*%9LQrQc{bPi!uvJGV}8o+&z5*6p~6ab4qkG^Aw7M+?{;V9fg6aMPaIQ6Z1;b t5|c|xi&Bfg%6;ZdI0aO|2Un1vlA6N+(i)xM=?s)%@O1TaS?83{1OQ*!EzJM` literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/phycon/textures/block/cable/magenta/straight.png b/src/main/resources/assets/phycon/textures/block/cable/magenta/straight.png new file mode 100644 index 0000000000000000000000000000000000000000..dae81c6912fbe36ecc390e596ec12c3ba8fac606 GIT binary patch literal 1710 zcmaKrdr;F?7RP_#VE{wOg8)8QBQFsXng;}ks}LY2(SR{T3ahMvkU&}>0fW3T3wD)O zP^?TVI$A{DO#&ppUl3~rehHy2A}cD^Rt-g~qm+j@i;GqFM|Zn3`_JB)bI;s!KHs^I zb8d|&k>~EV)(rpvcL6_MjCkCNxi}(oFx4Xo08kamxHyqgCPM=C74_TraLjt^fh2DI zGU^a6e?;VKscJvgoZRF>iq(yGR)5!WVEocXL4LmH{?*t@O0w_%bA^R!lGC6EE+S$R z*L(BAVL=o3INJ8MxM(ha35)wEur)PzTHE@Ag7F99#F@Q4(L2DW5;`$>bB!a2$RykA{=W8yz!@5>q%y|Q$Y^xCqQ-hb^~zRs9bVmH=t zDV&RSo)S^KE9;`^`K1*8t;$hb^t0u_g3XUZs_JDZdG^V)=+_&5oxOWKA+cD{^JOyAzEwKLT%5pSQYr7a3d!47Vn_F=C5r~Z!3Wdl#JwE4`D)|s80 z#@JBwHy8dMA=kd!_tnQYUg&yGOrXi!w7@)Vb(}O{_xCTh&&}ri^2;M;?Yl~#P*~7D zx9j4!NIl3hzBmB@N`nAEdjtTMk&yNo02I;y;JFk4*k1yGxB6WFohNHv$#Tq)Kb2s;rAS(s7hQc}wr1LP@DAwT*;5KIvTn}2A*M=!DxVEp;4Ybg& zSt*tt!sQkKYz6xC1kg$yf~kXg?8+5j@<HZ*7n z8G?We=BUZ9DFAU{lPWucdsh2=sRx zb8z_4zG3ENXZ42I8mekNAce&IhqI<_>Q zPx(f_N4jhKSk$ok6>ng5CA2kf_v@g?ulbfrCWpi{xY*OfakKmJj!*AnYH##QiLEZ82duN`J7;%hfXt%V!xp* zjv{+~{jHlH`!tPSZTN2fxpPouS4riY&iJc0;%}suXMFXcW`~XB+EJeQ>3+Rb4iOJTh|G^*O(@7S2eT4M1oZYzJcGPIdJl7EAJ*2)hf_RR^XF?_gP&-ni zN}PjMIZ2Zx;^cG=LArNu(xfzwAf3E@>+Vzx!G8PBM1(z-U}uFfSW_H=Jv^LgmU0Pp zqp25~;t_D&can_6cml4sNUb64AmH-v9?It?Z+!mq>{Lxo`DmNsC*kV6G(xG9> zY&wI@pl_kk*fg5Eh@t);L9QxOsVMo6fI+2)OXv}7Mi@Js^>0CmQZ?La?_Q0P(6Jgg8BW9Wy%lA3Y2P%Qk4hr1PLN?MxioCLsjOH z4~luQ!YmFEp-I2fx#@X@igcN#us~k$8!kM5@;U-w{|l%xDv63miHlemruI?UIsMan&htL!{XM_m`#$G=o~K+G z8|C7($O!-d7Xd#~gn0bCIiQi=SyMOB+9~kFRqeadm^uWtSRu4xU;j$jo%#;fyP$#Cz{JmYuC8E$DH@2M4d@d9Iq? zBdFsYz}Q~o=1gYJ;_&bJolZ<2Ejj(8g7GGC=*ZT#QIcK$Acj!S=r|B6*w~#@c+0nY z_`LtsCtB zBie7Q95yF^{b7xV!amOTxKCwcZS3#do3ff2k5rvlT2b)C^P~2;%ZyG6%6T5cfb zt1rI|mY2NTe&YQrk9BPahcIMbl3zwiS%hTy<{ut!n4C!a<(E6mikHPecC@B(a?{DL zk$RA2d{GPlLGq&ehmXf|}9i zIy^gdSW^e-oFxD@`@`mdUdw9O64+~@_F5>gnSRm2ylA6X`sijW)eQStY=IUV4YsW@ z!;~ItfW_i(fysR^wZ}p+TPd)04WfnNRXy+uvw3xI;~S3l7w~n%dkt^*AK| z&NjDm;G)hm_Mi^Q)5WACfQ=YqBL;l+>eXJWAp!XjZ>=a6Y3u)4qw(BzNEns8DJn9t zw*9FWa&T1h6SDvy(0ATYxeZ~v5fGyl#PBfp(Kuq@;&$@XQAE>|FHX>kq&Z}@Mx{`u z$;sM0wVeFd^n_G2#BHx!vJCsjn0sjHbVn!-eM>a4=L0Y7%*`M8M-#ZW4!0$-cyqVj znG1?`A!1>tn}>~yQA2x;kCkcueb$f3``nuxBxepd>|7cC?!|;d3O`@;fSuh>BTL7h zG?#6;9lmlrM-gUx3eO}ZTKM%st37kM3X83P>%QT<_kdVh@wx9*|G?~2Cgm&r7Rja! z1EE&+)2MFeVrX5)=4UJJJ>#2;nH&<+;535za#}TThI3t5Fs@v8BlTyy1Zv26&tt(E z=YwK#!Nj7A4Mm4yc$*1z-mO0!?~ZcVQ5fpD(8OAFy>6{%ZCAvLK`+K{VAyDX)!vbf zC6f!T-C1~VPC{F-e!tZHD9`^BT7l06YuQxIQtZg|^5bd#Ubh#F*NS|4Q#p!VORBG3 zec!9D|3b~BsYmuJid*uEpEpNdxDt6Ku`v0>HtpLsl4Db0$|pPY60P?PE92%f8JEI( zvAbWjp$lD`#F}MAom`(MHXZS7vEWbjhdUkN)cm-AqIcKI(v3xLIPL511oK)Ci?)5p zFBCkF%_+E{8pb`pQbf4DXL&v;c@C}BlA|00lsAz2W(guWVy_{YC0QYr%f?3T z-F@)${ZUUzRn4JoLa``*%htHz!SAkpFCDx-6ilP7Ww7W$OqQwDnA{4rfgL$&qgt~& zGf0~?E17!w$Fq3S!ejR?}!~8ttk%cl&8cc^BJUpo zgGvt)Gw5u32%8@Iw?Ir!FF*u~=U+gYlPy!J^EArTU0Ohxot&nWkt0>^9f|BE{n{4+_3C+nvtCF<(Z)yAB!?oU0@en zY_z$@($niedCgtr1J`$Jod0D1{rQWq&0@?EGIqoJ@YS`r#AeHUXXqE_1ca7m)R9uV^#ASnw=9= z{BORtd;c!y?c4jtz5nVMN_~n}y!T$T4;UW`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo z7+xhXFj&oCU=S~uvn$XBC}9@h6XFV_k5#Z8FJL&6z;LvT^<*}~rAhKvC(9noW;mA1 zaCw^2mC5qQa~Muka~>~bIFZ3{Dv{y;|NokYm|p>PGL{7S1v5B2yO9RsBze2L2tL|s zy9>zSEbxddW?;}$24TjErS@e&LG}_)Usv|0%zVOn(wh`M%m(T?SQQdc5|mi3P*9Yg zmYI{PP*PctssK(&7QIV@qx)nOdHy^Xv26Od*^-a>ZqU2>MhTwJw{CjOj&Qm=Wn-+F z>#w^}zf662g?SEh-I}sRn(=bWme-j%8Yhl*D71^LKa+<0#^EoD_ zI}haFd|K5Uc+WxoO?jIAmM@1t$3`CYSR8PS)mSB;ho|@O!qbjf&xD(Lrz?LrbME_x zLY+P90u#LL&RHHS_~L$myKb9xp8pTECqF!n)EPU98n5Siz&QV7{<-CjR|BfwWLn=y zf5;S}Yq48=j(Og0Q$Id);oAL6YbX1<`U@_U-Ee2#0e6m=8cR;e?PgL}7n+FA+U5NB zf`rkxt@e-4OlW!F)$pF>(tXJ%zY+{sY`YUhX1i*18B{CnJ=XkTsyxqwk1F$WG$ih^ zyqOiGbST|1EkkDFrSsVm3(xGGdh)|7R<*j-m36;Yx$HgbayGIiX+e02+i_9Ol{G0{ zG3ydaWIvnb-TIO2q+|BC>`cDhF6LRWX5Y=+7ui;ZY@aE<`l!H?GY(uc9jD&zes?HC zy~(SVjjR2@j;)m&rUZqzdenIS_A9Txk$;`<_t{#(d-W<+qDjA)OG*^nIkhrx0OME1 z)5S4F;&O7r0_B91q%=ptgw*8c4uTJ!JbLCR_~7Yd@de9;8J*uSbTT}h^bV+AwZt`| zBqgyV)hf9t6-Y4{85kMr8W`&unuHjdTA7+!85n6B7+4t?WN%RyMbVI(pOTqY3Dsbv zYiJr`XklewXk};$(GdFYju}vcG{^>EYO+esFQ_caOwTA`2q;a;$xK#o$#38pM1wK%ybv!En1KaauP(>FjNsWdaEL^m@}p*YCh$tT@W7^qqlraCtdWibF}qWOjXN{w^^1ri zAC-lJ?WsDy|1`hV9ZkJ7c(J;-ZRg;bP?k#Nx8nn3MKm9~?(ggrHX9wwZqZh2ORS{CY2STW6n@RU8Z)~SHyb{JKJ+wkJlkI@ zdBBbwuj%f|`RbDxl7IaJYaPJXc%sa`d32&YS;^$Z;H!jfY^iK*LKXqPMRoe9oiJ!@}oSocAX{N4m z`|{-d1hM|@_Rn_TeR=8HA*&mXo*gOISEmXhHa~p1etJsw^UqIXYu{D?4O@MFdef<| z;C|plOl}$gB`W~X?*U*DHtAmgpuqz$Apn4U6o3Hb@y;zD!A*1Luz7SC&?^My0$_oh z%)5YD4tk1QEjxj!*u|m-Jq5rh1bw-{1UZ?sOM29ZJ|!@#fJqIEg$Uzr*zRnBK(7Xv z%00}m3ns#$@Az5pYr@|P zLfe*H1RLETRvO*ynKRONP0)4RObg8Uri7OXafQV=rCK48%EUNGrxfG<_&15QZ5i9^ zfX=cC4sAcS>K z$4jX!%3|7&+vj(|U2yK8`_7dq|NJ`hup~0vdBDl(2S>={tBciJo}{dtES4m9{L(#_ zon>U6=9pY#BNSdJKNn816gDk~}`VMGCaH#sxHYroI`(5dU){d9>fK$FWgA?K1TA!?8sH-euhZ zpQj7a*d0^#OjC%LV>aT1EDH0)WwMzY_H7pPvBvq|$L#;J8W z-mPN+pBsJ7^rv_pqcnYgVCvial~o(dmw4{$`r?M}Y9n{sC(JU|>-6H%2Z|Bo>$~O4 zo>WGZpmP?TAqdCtSS@`3_qT>cqwp|RkpLhzWF_fbS1fT6@OfOmkb)9y-I_5XNJR-o zY(xC96qLhu-)`&!N&No>&XxpnBu$%qDhV`YlK5Z9n*E1CJ29xt$PZ|PVR zyM7B?R3t>tgmQ(Dm@HC@VFieIA|VDJ8$*cW5faG+BAH0|2Odwx06uDA~ z?k@r{h7ivqB#?=5_V9p-3%NLQ;hsFj#3ET#iO6gJPs|Tp^c1W#>_RVKn-0bb(N=kqAYQMlDwV j0cW2u^uYk+e*ubIu?)PYZWpjpVGm%@(`lEff~wyEr2nrK literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/phycon/textures/block/cable/orange/straight_rotated.png b/src/main/resources/assets/phycon/textures/block/cable/orange/straight_rotated.png new file mode 100644 index 0000000000000000000000000000000000000000..547515b9c8d37496e550ce778723ef47552141cb GIT binary patch literal 1682 zcmaJ=c~FyA5P#tih!CJ5fIuX2C|Y2WAOT_(0;D8z#Sjsyl!TB#6msze!YKtWR4`mB z=%}E0jt2tT!3%{PARr|P;EkfU_GBJi)K7+`#l4uy%j-un+ z4#(D+VuDZiohycbcd_ z%d^HM(0JWfu>Pe|Dvtcnp%}Djl zFOI~~`U|?%fzM~$rHh{|DJth8c&Unnzz@!!UJrCdM#<@Q_I+O-`#ZM>sl6Fz$-UE! zBf99qVIOgW-{+?e_$hi$%L!^(;e+(y$E_z8=e9jX;U|(cN5@uDYJw)9an2`YF zECir%696-?sqi@fGCTk;*Z`3C0$?ZJ-@582xM-$~2o@CvXi|YX5vcObG!RfhhRO{< zB?Vn#ppwr~K?X_=&`5zM5vYYg0~vI3fGQoR#h_CL)Dob~Ky*kEUCE#$9jLO5Ix>yb z>wy{uh=4i+q2dFL2&mYz7G;Kk8s=^Q9UCo_5;(Z=P1u`lq7i~lxv^g1s4KJA?sC*A zoOG4Wx{CR_a;$c@i>}6PumU@{*F|43UtfY5sB|9KvtXbK*RQ}1C>->q_P4iK_ABP= z6j*%)R$qnFRXF#TIp}uSY86hMe4tJP$`qi2GoMWu(ZvB>GK3}%spic-M=3!lQ-LZK zeEs@0U=HRC{1;e=83i}=|E!VN;AOBIkrW;lx+Wia+ZjHXiD~f}0C>C33PRoxm*A@cpXB1QK=T{x37W5f*6kcI2I^W=Di}Q}atfnukWU z4Y$?igem*jPSeCiLBC#$tK_@88ul6(+#7ZtdvmgQ)q|i#V_E#b=C|!r3GqtWVTQ`s z$4z8zUfN!Fld}F9x~O!I>qK|&^n}Fo@|jia@D;rQD)HN}wz<mIH?CYb&jIdTAHX2Bgs z+x+khZH=)WLGMviRqU=SxruO_XN4OIw}Yn`xI@%9D47HC$XqE8R)B~n61?y}UWBDA zf-l+EmyGxS5sxS1@wYnUYyU$?7bOe$+5ZrTUIbqjkw7N+lL-NT6Ig`wT$tcEdjs5@ zWUfe@Efu7sLVzJlN)vE#p`vt-KzN~?FdNt9J1m)(!IcWckU%5^Vf07_E=eXxgS-Sn zTm~~NI3k6DhS8Ys=yZ-y#^-P$nUp8}29G$P=z;;Le*vOoUK*ICu4U6hU=N^Eqe9OF Hvy1)$u`8;a literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/phycon/textures/block/cable/pink/cap_end.png b/src/main/resources/assets/phycon/textures/block/cable/pink/cap_end.png new file mode 100644 index 0000000000000000000000000000000000000000..a51d0ce7a7706dc3b482dbe0a97f0f963a08d61a GIT binary patch literal 1362 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47;7_~odYtHlYs&gYbV-z9Cna7 z8XxRB@fTy6K;el1*&|IWIu?g5^9f|BE{n{4+_3C+nvtCF<(Z)yAB!?oU0@en zY_z$@($niedCgtr1J`$Jod0D1{rQWq&0@?EGIqoJ@YS`r#AeHUXXqE_1ca7m)R9uV^#ASnw=9= z{BORtd;c!y?c4jtz5nVMN_~n}y!T$T4;UW`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo z7+xhXFj&oCU=S~uvn$XBC}AAn6XFV_&reuzu65@5{JwL2^Ul>zzjyH1{e#EP)=WNI zKlQ=UQ}+*_xG;U`x%OFSD<+=L>;3=#f4K7RsX%RvB|(0{3=Yq3q=7g|-tH~}Q#bMI z06Clm9+AZi40_5S%viD1z6>bHUgGKN%Kns@PgqZSlfsADKs^VmLLy3n63Z0|it^Jk zb5a#bDhpB-z{$v>cWH2RpNt~UpXVZ$O&>Q~@-g2HdRN~l!SngnO^?|TPIsqlj5Txp zbvNplsSmF(&ta}xQ?^JmUT)d)Ix|P(#IX*Ac9E4F3Cnvp;?*7E_D4)kQ&na@$Ha8! zf&80KtC|DvIjFxWPqW|hl^70 znId#8c8kw3&)aS4$7e2FyMJlzWM5Z*!G*FL?#w&j&Jj~%$tk(rOzP@F6Y*KQoc~^s zF#5LD{_&X!Ef2gJ-m_e~FZtwGf&q(dccRE_SB)-%YNfr$nmI_0$+z3ZJS*1hyP5kU+scsbGsRaQ6#LjT<{18R^4*#JyUR>}DVl|`B986^w>rAaxN$qFv{xrv#1+a?-D z1C=Skl%=E=Cl_TFlw{`TF}QpB1}G$zX6BUWX67jr2e~`>q&o@&Rg1z@=O*TrrX?nq qloq8HftCBrn{W!KfDf)9KP5GX0i-oL!P6Ni!{F)a=d#Wzp$PzZl`~=h literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/phycon/textures/block/cable/pink/straight.png b/src/main/resources/assets/phycon/textures/block/cable/pink/straight.png new file mode 100644 index 0000000000000000000000000000000000000000..c2ee33da556a49000b38011a447d548619d8499f GIT binary patch literal 1665 zcmZ{jc~DbV6o+2`%OXT%5pbyyf6bW#0-> z35$YaUFyDdP$3XDG4BOM1rb6JEsjzaaf-#Nec0NW{?R*g?wNbe_nUj>o^$gU!GRWL zOU(cPu%J-`n25KWHxol-cX3}73IM1K(BGc{a=A#LETe2ARqeODeRn9OY!0>8GQNwk zqAlxm?uoEE6I=56p0n9^8+P}cTt$nIx7oQ6o#_^~VrR8XCb2bYS!C(uwT5EnI=zop zM=3P!{E(b989$4*+~a&IB5qWE>Zt(#wRLahw#%co2B|&9i%;OM7W&XOtCG@(oK$_c zT(oa|XUATKU0q^m;5hB(Nv}%IPEPG5cu!jAM3BPrw0WKMM$EKRpKZyo_gLhTWI;dO zc`Q%e7S(i6u|%*S)T!37__Q+k5Apz4F|#E4Jd0D5_QvkemAP(wABbL6OmQRC7u&EH z0j7ldYp+g*Qy*k%I(=WxIVZS2|0b)9i{i(WM*6;6`RByr?x5ggTAh8*$7kLv)qb68 z85fE0?B&siA#%N^q`~XMi>0_3TI%&Plw!FqPXDa&jBA?e1sXTS>pC^QnWQAIHNJi9 zz87EqamVpk==J%_CB4QNN~E($p6$=ZhCF$_X>vmN+i%03MISQ(89m|jqr)CTP>h4&vByxIKpX0t|C(o=C_xV3Aru?5OeYGtLP-SDuw3(h_Y zm(=Q19mDFokX!*}AJ(^a>D#-Z#A5Bylh5u#!!4cnD^Ee`)1P0J&#g;S3!Bj$xNCbejPV8n0y z!y)FxzWw&*GXqbkRpI2Jip!A%%G}TobL;6A*5+!nfr@L(P`wAPy#|FYT^+fY9Gf#H z?4JrvcCYc<)f`?faCS0;4GaeLE63lQ&EBf>TQi;{@V)j{JrfzxPCdcsSm22jo0}J@ z>+X^E{A!(5bi`>&1J6#yyWPI9mAz#X?9(B68>m{CdE+}#$h+0g-%;B#JxR8n7tQpj zW7A^zC(fu(|t@G zZW5M0s#|BLZ1n%oV~_v+y6>o_^niY|eA4K_u*35?HqK~c0mr6_;*yU`bG*}$J*8M_ zuAj!%3SI1VM&nARV{0@?5VO4Ofi~8@PIE_bck0!G)tTo~GT)yKxB~@15$RFKw@bh8 zv^71G&dc9oxDWjv%2=%1hfTGOnlqG2F@dJvfc;2+ zb7%o1mVGam4WPcKxq=R>zcOMUR+MjNldRa=Sj;evzZHA?w$MJkpOyaM!v~K?$X5Et zk9xiIq%cklPuQA|RmGka3*a2AN?g~#bCqLN(R^W?Q!W<6J12@R`I+3`GH~DY2_x7d zHa2=O7PZyE4qU)+65%KGY>j{4g zQb6$tB3L$m12V8gu2_4q_1Hl}>U_5>zHvyDLL9qx3 zqy;fBQ8G{{bq7V5L}nnF9!;`FXxlGz97iM*aJW)g0zct1POmNPMga7`fSAV@0`t-x RY??ok0ce!qfD2@H)?axH)%*Ye literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/phycon/textures/block/cable/pink/straight_rotated.png b/src/main/resources/assets/phycon/textures/block/cable/pink/straight_rotated.png new file mode 100644 index 0000000000000000000000000000000000000000..f8320116c6c7bad0e83802abfbd0e9747afeb6c4 GIT binary patch literal 1645 zcmZ`&X;4#F6n=n~MT}4g;8p^Nq6H@b2@tCgASKZNF+_wSH6aT`AqgR22P2>u*_Vi{ z0s?NMf~a&r0SUW#F9AecSc0fHiUQ&ki(4OU?M#34&YXMZe&_q{xp&SvQi_k)YQ1%O z0068e5k0A}H&`|uEqJ%FTjK`+8cAFa4+@vbgn_)Iyj?`O+lH<~euTUwjc9|&UdqPK zlnW=%`B&*6-LI%FrS{bxQq@?HA|s6tu0kZ+`fof~CKd~jEAFl_aB|v0Fx@(TlvG8? z)b9Bl8#5cZh%h*8T^ATJC8>MDvH!tnsCa+F6jC!@rEPf5zA@8Km_W0*HgjiXPXOOV+}z&$gxHF*Vp>xxua<%s;(-(C_UNOR6$ceR=9^E_dtMPPvAI z78|DS`%2Uff?B7~&)160#-Z5$dPS7q=#~KS!YFSiN;Kd+;Uh+qG|>9dKex zz64bs0bgHf$QjZ`5rVCGl2i}+Cf`S|ch9~JfAeO-A?r&rASMeh%}ONX!G5% z+w$?Yt_gYX#ND3p_HK1o|ITgTgb zCggojn%bb4eE3NUaSoVL1f3{RW>!GQi#_ezINe0}{adDT7q z;TJ|JSw&WJ3TSaI()RY%ee}J%A(w8!d$0CY$+vd$d_Qb{_JP=$?0`o)T+>r)oSo-G z=kddogcJw)P1tqA zRXa>enms^=j$W}VgJE1susMZJu)NcqIwv#NSI=*% z2)8jCUolfcwd@GRbHX;{4JwbARVnVs`sQA(+?;$lF8Sjn&pV(e7?>DRc|i1Y4^sDH zBJ0$_t8~%E1uXCJ2d29%_H(p?zq?thBpADh^{U<#M{6oJz1(F`qj1wJ#><{$yzL0v zlCmf1JH7Pw-)_d$7g7%#Cnl0U`ottWoYILzc8eB9xczHts{XzELDk zJk4x~Nv~WAh3fN2aSux%c_=(S;oKq^ZF(Lxb<>(}pI7 zNTZ@k={=3F7OUm2r^pOAy|suCAYw5@Y#dX_h8{6^OWe9^ggtrl3N^+;EW{mxqd?dbyKB@kTHk x`HdaH;E6d5rbsMg3;&{%D{}i`0^(l+pT!ObmZd>-k_Q|CNCY3xtM2raKLJaz+J685 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/phycon/textures/block/cable/purple/cap_end.png b/src/main/resources/assets/phycon/textures/block/cable/purple/cap_end.png new file mode 100644 index 0000000000000000000000000000000000000000..1a89abf894fe77fc5b1b6bbfd4bc3eea27357aff GIT binary patch literal 1365 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/phycon/textures/block/cable/purple/straight_rotated.png b/src/main/resources/assets/phycon/textures/block/cable/purple/straight_rotated.png new file mode 100644 index 0000000000000000000000000000000000000000..d8928329d62b15b4282b7aa10a15560584b75e20 GIT binary patch literal 1671 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/phycon/textures/block/cable/red/straight.png b/src/main/resources/assets/phycon/textures/block/cable/red/straight.png new file mode 100644 index 0000000000000000000000000000000000000000..57faad67959a24377a5ef3158cf6ab8c2f31212c GIT binary patch literal 1710 zcmaJ=dr*^C7XL!P0EUnU0erAV$eV=b0eMy-Au)*tj3H83WetP`(gFz>r7bIU0YfGDiP>V=K#oDT&XmynG5T{tIx}WWKXZD}HGv}VUzw`UeIrpA( zn>6W)u+YV!004xklrk;k(Qhmm4((KCcm@E#>ddLB8neLw0j+hdE0pe(rQS^$^459S z7If)=CdSinV#m?Uj$pj>^zf<1Z#p*(A6u>}EsfZ?5LM5}jM;dwyxfWp{3;yH=TqcS zw3)4{4*5=m?`37hROuWF{VwTvcJa9V_zxz|-*6-Q*PkE92UHIuFh@DvJB6y%eHFEL z;`&A}Qm;Nuo_qKxvpW(V5Ie)*st;5)R#uPj1XH-}*^Z-Xdp6 zjFU;QLl z=1%b?XwHg;=FX2_Uu*Yst)2Xr4;Hg#Rn^Xu@)rBuV*gLQCuuc(4^XV>{DI>Wt0nEy z1jOfuzvCP2uQq)0-jye(&+i&R5ac01#z8*t_m+sA(vTS|^7HE`SIk zDK0D>455HwR0p000wgek=EBgs!zkUb*d90u#L~b>x&uSK5KaftG$)$s#84dzDIkvS z!q9p!RB#c5)13g(iKKuC@&$anFG1{y7dR0l7n0&7@jYa|13~JEV)QdbZW`Z-p|u+&4ABKF zlqj|b%7vwQnL;;HN5T3YV~?i!glv(tK5|%d%;6D+tyyi^*JM zB-pB~M#3MzN6_4vv7u$@a^&w1BZLhz-9i-nj&^eEKckVex4%~&$dcaKdp?IJpTG0> z`6P814(SfPz1Oh>HnPp}#9Txj=-)xu9&s{Q|LM-)O_Y>>e3|u;i4+GP3JCbozii^^ zsm678Qz#P^rew!6_iRqKS9w&^AH*eEkjQ3t$G4Jqf5tU5?~9ur9GaUhWqf{Soqo;A zAz{DunWArDJt!_&`<#6Lxzbb5mEgH&L;bMBGnS!GB{wuR6K3(Pg0X-srr=`KL4L`_ zq;wP?SNCOS-A8HiwU~~Wb3Y#HQv`3U6^1Nw@fP3cNQ`RlO?^2W&H2@tJU+O4n}4-^ zD)8F9Mfd0RtiTl?=0+TlQ$JwU#9r!eoNil&^v@6v6;Y$_22QkVW4|ttm`HcR-Y4(aR{8KDCu{RR*my>7i<#w>+xe7x_XYnNb;ecRc?TkXU>cAZ{h-I2J* zt}e`~4D=v@=r}aDx(%5K6-BbivuydfHlxT;W`rETVR6_@7MICR)UgF3Hb=x^$Fo=> z7As7{vHp*s*phEHRsBc6VX~8SY`%z-C`#h}DX21A#vs9xHyNOj6&Wnnsxosyp$*WK z=M|X^1ev8c*IWX&vNu4q*uQA`#?6K@v(;v{lmH4&xruEADbW-R-Iu0FK;GDJZAmte^^76EUh8}zDFC<3VD>9R9YeZ#*2S%H+l literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/phycon/textures/block/cable/red/straight_rotated.png b/src/main/resources/assets/phycon/textures/block/cable/red/straight_rotated.png new file mode 100644 index 0000000000000000000000000000000000000000..c4f38491111439ecf0ce50640734d6253358b95e GIT binary patch literal 1688 zcmaKrc~Fzr8pcnEG%O(`ga9to2nkt8Xcoy@g#=O(1&kp@s8SO`f@y(-5M)O#*jiK& zs@3g3_qd!9sIY^D4PBewll7nyh&a zu@zg`rwn)1p7`KsdYcbHdV26w-FNMq2al~#6cz?=^2by&(!)0$EG{+^7JU^D30~!cDBMv_=Wd~5O;1VX z&B&hN3)Cx*<7USmq<4lOy&|R=+~fnLb*1G)Ji#P>N2Vmb{z|c6EobS*O>xu@0IhKk3b@1L8y#2GeXRy4{O zk|T}5YGtA??}+W;u?+du>V8k$gE_K=c9&k;tV8IxG-bs-UH-?!kC#$XOBHQlgU{~> zmOJA;G0HDQ1G62YKdh@6;hNj|^Y@mpW)$W2ld{H|Tlph*x=+$7dhTIZQ#pOd$Ja<& zr7@^4Km8|PU-Nw9;dd`TI^D5n2t|}-kqc_-5;UZBKRsGKIg$6|XymoHUFwSuKMB2o+@q zBxo_+fuliqy3LO}G zj@pGJcLq?PV496UgM29v3}C1bj%G(iIRYp)1PNB`K{Pvvu=_>XmqptGDG-5n9!cs7 zWjN53^Mq(OUErefTy%juTIh}uxtT&YL+E0Q-CVJUA?jnl-pdrZ$$U?Y*uxTgUK2YR z!d@7r3i^mVCmdpkdST@?u{%cWr14!*d{?x<@k$irPqD$b!%!W8v@ZDY7-|76A|wxzG`%?QvUS5oJ}R$WZr?7<|mqbHu3wu;-g{b%s@?Eg_mMCWA3gPqdbq z^~9HdkD#GFZDZrI73e?4f`zryok9%qrfOo_Kf=&6H-3^I$dKOL*OA4O&E0%!E;cy; zk9PXq*k@ac7}{=oWXz-X^?pFy5q#1|^Vx2n&6N1Jzs}feAV(qxyu5xHSw8;wRNeYp z@s#lrL!9l2b0#a(EkCO4_2!aHXmo?K?R&{P_wlt2A4g9056n&#GQK>sUbA-ffUwv6 zB&o;08WI<*dm453soYh~l@PdJ_>CYwoi+`8Cb_1p7&nTq=l<%I!4zBwJ;*P(5SxnO z{Q~#%ZZmWE3*%8u)g6T_@1oH*}3VA#u`4uE4cAgCuQ*FxAvP> zcOzS~c(c5uBdf~Pj{TvZyRpammz6xe9k{8>yU-J%_YfiAlb6<8?T{MT$g;I&4U%Iqa>;$u?;9y0MYFckcgs zZ!}cX)UtPjQmsl~|7P0o;15@S)DB)7;P0$>9-aV)#bGm9Tqb*^njI^OjTNy3(JYpT#k%4u-S~fod{d6mQ1)K~hslmr zbJ!xbK*SdQ$Dn5CSHOm)3p>EYDbktDWfo)Z7AsH|XXhDp#6(lR)>r^FvlqS_@fVh( zFVb0zW~4nJ=qZCRW5rVYGN2%PiKnkC`%`8 zD9TUE%t=)!sVqoU$V^UVV6f<28XVmxqsa5;xrk-c$IX^}%y)y{)i+A;e7<$lV|Iko z-6Rn>Tk-^?6-V5{5dxAsK?@fW30w1`8+(mhZml9%z7r=)H_}I z!VTs6F}Naiq@JQPg-n*8|4+AM?*Gcf1-< z{U+1;M*2gh2wjWa;&aUNcANU~nG4tMUs^la*VSKeq3nh`^A5Ok#MD@FN^Uoky1LLr zeAX`KzZWEozHPOCd}cz+1FwenESK&}KKYekz+&5-C^FksqsyRLY45S-4^!oN9(+`p zm!lzZkLAs*Af-d;j%gV(6EB_5mRNXZ@6?kYUa_jxt*)&5y~<_pS(mesHAxG?OWcl& za;~gN>55sGP$K);EbrEjWG5Z7zh!6g?RGKGiZ%Og=Dx_bGGzNq@zqBKmYi|mn&~+8 zcK5qO8R|`5wQOAN2X<_&+%P35yw#(|^S57l^^N@Ne811u3f`+%sS-{4#avRN;LfR) zc>@@~CY~;iArhC96Be*1v;?Hr)d`v;CxAdBN6qDQ8}39y#})r|dIH2kS`Qq3zyIYU z7Yzo61D`lzm0Xkxq!^40j0|-RjCBo7LJUoo}*45&dGWCJjDStaKeR2F5X zXOu7mlqTh5CM&q)=O$+6ZJTHq4OFHCQnwe9go0+Fj z9OUlglkO-CR4ocqotv0fnwFScQd*Q+1Xk`dZ^9{{0zSBc{FKxj29Vb11W#w641=eu KpUXO@geCx^4^hSd literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/phycon/textures/block/cable/white/straight.png b/src/main/resources/assets/phycon/textures/block/cable/white/straight.png new file mode 100644 index 0000000000000000000000000000000000000000..d1828cfedb90f4c8cfdb271cd6736b2fa461ff19 GIT binary patch literal 985 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6n3BBRT^Rni_n+Ah4nJ z=qZCRW5rVYGN2%PiKnkC`%`8D9TUE%t=)!sVqoU z$V^UVV6f<28XVmxqsa5;xrk-c$IX^}%y)y{)i+A;e7<$lV|Iko-6Rn>Tk-^?6-V5{5dxAsK?@fW30w1`8+(mhZml9%z7r=)H_}I!VTs6F}Naiq@JQPg-n*8|4+AM?*Gcf1-<{U+1;M*2gh2wjWa z;&aUNcANU~nG4tMUs^la*VSKeq3nh`^A5Ok#MD@FN^Uoky1LLreAX`KzZWEozHPOC zd}cz+1FwenESK&}KKYekz+&5-C^FksqsyRLY45S-4^!oN9(+`pm!lzZkLAs*Af-d; zj%gV(6EB_5mRNXZ@6?kYUa_jxt*)&5y~<_pS(mesHAxG?OWcl&a;~gN>55sGP$K); zEbrEjWG5Z7zh!6g?RGKGiZ%Og=Dx_bGGzNq@zqBKmYi|mn&~+8cK5qO8R|`5wQOAN z2X<_&+%P35yw#(|^S57l^^N@Ne811u3f`+%sS-{4#avRN;LfR)c>@@~t36#DLp08p zUU2j}>>$DVAb*nD$}n9P$NUGnd$ukAAhmAI>`O+z#+|#1 zAJ+2D-(Ir0;oeEk&0AV5C2T4SHU_6Jh&s2pIV@f16z|@skePE%^X^~drMhd{!PVlu zPwsBxG5e>o*<0?}_ZK-KmTT;0HZBoYIX~s#1Feo()ekNPUXlp+PD|M4uA6y!fv|7d z$GF4&b3K>uHNO%T#C_~4-~Vk_jRXyYzy1L_TeZYBq9i4;B-JXpC>2OC7#SED>KYj9 z8k&R{T38txSs58>8yHv_81M!d6`*Ly%}>cptAuJW(ls;gJ`JC%zp^f zAPuqsn5eCi^9w4AGSf3k7y?R@ax#+@T=H`hGxN4hG>ir+Q-Uc=Ni9w;$}A|!%+F(R z_w)@=NGi?DDbdZ$Qz#B{ck)Sh6b7mmg{jU>%qvYxOfD%cN-Y8__n9~06i@*lTtR+H YY7PTPYjlFAGf;-X)78&qol`;+06n>l{{R30 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/phycon/textures/block/cable/white/straight_rotated.png b/src/main/resources/assets/phycon/textures/block/cable/white/straight_rotated.png new file mode 100644 index 0000000000000000000000000000000000000000..450aaa04c8ea0fea6bbdddb768600a84d5ed6042 GIT binary patch literal 949 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6n3BBRT^Rni_n+Ah4nJ z=qZCRW5rVYGN2%PiKnkC`%`8D9TUE%t=)!sVqoU z$V^UVV6f<28XVmxqsa5;xrk-c$IX^}%y)y{)i+A;e7<$lV|Iko-6Rn>Tk-^?6-V5{5dxAsK?@fW30w1`8+(mhZml9%z7r=)H_}I!VTs6F}Naiq@JQPg-n*8|4+AM?*Gcf1-<{U+1;M*2gh2wjWa z;&aUNcANU~nG4tMUs^la*VSKeq3nh`^A5Ok#MD@FN^Uoky1LLreAX`KzZWEozHPOC zd}cz+1FwenESK&}KKYekz+&5-C^FksqsyRLY45S-4^!oN9(+`pm!lzZkLAs*Af-d; zj%gV(6EB_5mRNXZ@6?kYUa_jxt*)&5y~<_pS(mesHAxG?OWcl&a;~gN>55sGP$K); zEbrEjWG5Z7zh!6g?RGKGiZ%Og=Dx_bGGzNq@zqBKmYi|mn&~+8cK5qO8R|`5wQOAN z2X<_&+%P35yw#(|^S57l^^N@Ne811u3f`+%sS-{4#avRN;LfR)c>@@~?Vc`@P*B@J;}zuZ*S-Mx~VEDvEeD3m(7~9_UO*?#RaCTH>suYE>2tc zMs%{4c3OO#&fe9Np15l`n`GZ?`H)d0IIHUQyF>O5UuqwlV)bwf&`GK#t`Q|Ei6yC4 z$wjF^iowXh$WYh7Sl7@b#L(2r)YQtrLfgQ=%D~|Kk&0*(4Y~O#nQ4_!4Mw_#rXfa# zR)!WC$8-NMcDmlNPvM4h>ql6)#G$|)DS-~YgH!(AB+eAZ16IqA=CDiFu`IiOD6UMX5z# lWc)I$ztaD0e0s!}`d<6gi literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/phycon/textures/block/cable/yellow/cap_end.png b/src/main/resources/assets/phycon/textures/block/cable/yellow/cap_end.png new file mode 100644 index 0000000000000000000000000000000000000000..9d6af1415885c4ce02b86a9bd93c5aef09a05678 GIT binary patch literal 1365 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47;7_~odYtHlYs&gYbV-z9Cna7 z8XxRB@fTy6K;el1*&|IWIu?g5^9f|BE{n{4+_3C+nvtCF<(Z)yAB!?oU0@en zY_z$@($niedCgtr1J`$Jod0D1{rQWq&0@?EGIqoJ@YS`r#AeHUXXqE_1ca7m)R9uV^#ASnw=9= z{BORtd;c!y?c4jtz5nVMN_~n}y!T$T4;UW`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo z7+xhXFj&oCU=S~uvn$XBC}9@h6XFV__b%YyH=F(71cp8H_zp~GI<;N>>`v9a)0y_p zU^%^0>&y=IeKVN%FBaN6hjZT)h658A{{R2KIwbKpP$y$akY6x^!?PP{AWo9EyNlqX zt+u;>9L@rd$YKTtJ!KGPtXOJa1{7p3@$_|Nf6B}!tS7xm;lpg8o`Y2(5hX#1>wa}mp?kDD#|nC}L?t8bLx`F!i9$Lt8FyHhsC znz{bE8}-Z7hgX>AFxRaqTcjB;w`_TxnWJ&yScgKp$V!fcJD-HBPOS*Dl?yB zV!HD{{>`UV&4KqE)Zdh+*>CxB_;YOJQIEv|$5@S3@_BfA4=+6JnDtD!sdu{ahcoBC ze<;-1vo0{f+wPp@v4St|2e|9DS?BrxP<{fb7h^evUl-zD6b#DSuWj|eDW*7fW@{uQDnBOMwdag(%xguAEwIlJouNYmyd(m$)4lCN5$xb?Ef6LC~+wEeW6>Ik0%zcqKpmj`F@|R6}(rkQYD)7i@Bsk!JShp^9C?} zRXklBLnJOICoE7-NJ&a_6ii4>e(oUn;K`$Bj)D)KJ{DiFT$s`M4MQix(@F1u>Qzfz zBT7;dOH!?pi&B9UgOP!ep{{|kuAxbYp{bRrsg;3|wt<0_fkE~bbx{-zx%nxXX_Zh7 zM!JTkA%+%K28LFKrVtIG|L&LpHAsVO0H!9ZH z6Ahz*%9LQrQc{bPi!uvJGV}8o+&z5*6p~6ab4qkG^Aw7M+?{;V9fg6aMPaIQ6Z1;b t5|c|xi&Bfg%6;ZdI0aO|2Un1vlA6N+(i)xM=?s)%@O1TaS?83{1OQ3&EZ+bC literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/phycon/textures/block/cable/yellow/straight.png b/src/main/resources/assets/phycon/textures/block/cable/yellow/straight.png new file mode 100644 index 0000000000000000000000000000000000000000..07bf5118c853239b95f655a3ae894f6ec5eb11c8 GIT binary patch literal 1707 zcmaJ=e^}Dj8b6A^KqUf6S2t6hYZk&@g`+SKV!HX%s~9)n_Q3hah`zZ)+jm!CY1?_7hh_F4=G=4tZF^9v`b;q$mdiS+o&8-hH z`O>>Q(v!-e;S~L+^=qWIal|IC>T~MY-x&AA^-F8gE((*Yie9?@t7B!9G9^QMRk9rd?u25y6ag>0_SF_X(aOL3Mps9Bmc5mv6UpfCMoij$M17@Mq^_0xmvf0w?Bn@ z3`LD>tUrnBKW;a01Q?G2=%gcbYSn-SHK?(N8j(5;QrC#meTjfh zI_aBG#%3hcf`!yb2qwaz>VQ#;Hec}_>+y!_fI)3zYX5Mo!$SwJwV3ffpV2Na9UQ72 z+<^Q|eZGbUTS$vG^^#1zzWN560kwm|^Pt$33zV7!lHXu(0pt;eqTn|ert z%_yh_7;Av8(a{7)>-I5d?BEn8+T0Ayj=E}K>hU&pc^WkK2DR;YFA-|68|x;Hc9V2) zB8{lAZclT+pZ)|wueLMw5Y4&`hC1->-Mif&?GXGN?n*%{+|&PO%)~P`!EURR?QCYk zi|*lSc!N}M688hJk@#M$@>?Shz(#u|H-=^Z7=gxZT-QNZ(7>F*LSceZkeo+Q#Qa#x}M82{H|a7jBv>1yo2bg!w&m=qyAw?I3^_#5oT-aA1xlU zFE5nud=TY3n(Xq5=Q`U}GK962;hD(F#_~6SZi&gWY-24^&Hos_Aw&`x#v~@yY_<(C; zSk^#jEIJHVVrVTn7Q@=HTI=5SW0R5Xu(vn@`9Uvr?QLy{tGYk>&4e4}*Y3y}Q%!|s zn`++X=EDyjt%%4ro4-hQ(XjkJCl`4^*UA^_J)A6y-c1>PZVzl`)dH_?(&*Ck^|d!| zeB!1xLG|A*JhSyF{kov^^#vw0&KyrHPC2z(xpf4OJYSsp`QA$+rTY>!>)tCdBY^tm zfJwfkAE8d7E>qd3Hx~$d8(hD>ifJ)Lp&ID*KYTIwO}cN{wh}wkA!A>6L0g?*_otj< z?(5jRqPy}b^y~4G)ejDO7vfV^5K1M1jr5n@h3i|%WzvOilVTCD+L{YDw7uchd>Do3Ka&0(I_FbQ0l)41v2?GOj!5+1h{2sV!5IqN0yeZ z1pM5T44Ig~lxHT(vU+NR_P{W&zhJ47{o)*%LMfAH0X8>=Pe{p?Whet>S%m!pHiMT& z$H8d)U+B!_tXyfbSect6$@vq`YpNNA0qFk%Z27KbM!d?Y}Ch6q)WKnS1(Hwh*{T!jEx5(SJQMObA`2nnVI62gmoBMWvd ztsoRoNf3yFRa-460ff9sC@2;}V5Jsot5Q+%C<=&MELQDHcf058KRf5#xo7VEJ#){@ zovGl*MLXhF;{X7TJZ_W#@y;t|hel@qK&N;BP{s1dNWNSmK>{_!HCwm?;cKt#jpx)X zqxL&zUE_NUmYw0iKp~*mmf3UhZ7h65ja(%ITzx>C)3b$mr_`6AkZoOcSjN#%*0r(Jvhi6Dr0khGKe23*<@Sk-H%? z$*b~YH)AL>6$67QhL7r3$*kkaP2N>!)N#K=+>+EUu1Y&E6jv5Lcl*c1puSG zUWn&F_|QiFS1ij?$Mm;5N~eO9ZNaY}tfnsV3Up^VRi$?_rtbBgU0-N=fTzxDN1vSUI5J^N;v`ctOUolgK0CgDvUToR`qQU(gDT&YfSefB znYryJ4M;yo60RT?fC66tN)H0CjD$)b0gyul;IRk*)^Pybl#RVR|BN)vo*yIRAOb@j zfU5x9`i`Lq2cK}zA4Tgm*nW*I+~NeEug`m(0j}VZgK2u!W)jF4977BwGG^egKL3NZLLSx;~0ITJ&dr&tn_WfKD8aJ z#rM|(qt@A|#+bBta~F9;=QW}uo4b6>J$~jMUvoEQBB9V@Dmdkz? z{d!BU|FDiS+D$fhdX2Zc59@r*U6j!t%IIZ(bGP4cr}xN3&yg-4V;xc#t*-@egN;#R zYizbRYHUo^puZVsY$X^PFvbRJy#}X8j$a4fzI_Y*DXSm34i88WhrH?kGo}+FHX~_N z%J%4}#HYH!DrA9Ga+9(F*hpS6R9;)yek5oM@nSi)572nR#x)m7^BRQdFAyd|0&y-$ zsZz+~=~5DuuauI0|2iR+ZSlLS)_OVoI^!Bzws0vFkG?H+mY_2S<^Tohoa?%yf+zh2?Yh4SwOQeDlq;pR5uC zL;BnrgERXWarj_Dv9YbVHkPx)MeEW2W0NV`ZckAt_T6sg>KockZtC91*W>Q=pLJo= z=IVn}+e+s!*YCc2e_2GuZ245|s^R#5LM`-$ua?i(dpb-l_%x;ayWhdgss-L(r?F-G z*4A7f`_Nr$hU>qXe{Ahr@?E6%Ova9jhs{)bPWeZ9}GY+JDn?vSZRm)~9| z*!2;&i1#WkxA3N768~zn*yYXvp8{gaG8%$N(bx_0n@E4Nc~NYk`-DW)Vl7Hdk%^^} znW_8t9{%)T+D%klU%QJh6eR3?KYnuj+w0$n$8SsoQ>mNiOd2DI+1=im(%#jfyOgW! zRI2u8F`(=v(fo_&KQH`i(aFx?GbcRO(LQa8;QG!(f(y}QnsBVT?z5xXiV>9eg7dmB zGZ?=h9jy