From d0c1a7ec5a749b2d8b4cb7f35cbb97a6899535b1 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Sat, 21 May 2022 11:11:44 +0700 Subject: [PATCH] Colored vents --- colorizer.js | 119 +++++++++++++----- .../ru/dbotthepony/mc/otm/datagen/DataGen.kt | 2 + .../ru/dbotthepony/mc/otm/registry/MBlocks.kt | 10 +- .../ru/dbotthepony/mc/otm/registry/MItems.kt | 2 + .../dbotthepony/mc/otm/registry/MRegistry.kt | 16 +++ .../decorative/vent_alternative_black.png | Bin 0 -> 499 bytes .../decorative/vent_alternative_blue.png | Bin 0 -> 591 bytes .../decorative/vent_alternative_brown.png | Bin 0 -> 580 bytes .../decorative/vent_alternative_cyan.png | Bin 0 -> 601 bytes .../decorative/vent_alternative_gray.png | Bin 0 -> 573 bytes .../decorative/vent_alternative_green.png | Bin 0 -> 576 bytes .../vent_alternative_light_blue.png | Bin 0 -> 626 bytes .../vent_alternative_light_gray.png | Bin 0 -> 592 bytes .../decorative/vent_alternative_lime.png | Bin 0 -> 611 bytes .../decorative/vent_alternative_magenta.png | Bin 0 -> 615 bytes .../decorative/vent_alternative_orange.png | Bin 0 -> 621 bytes ..._part.png => vent_alternative_overlay.png} | Bin .../decorative/vent_alternative_pink.png | Bin 0 -> 626 bytes .../decorative/vent_alternative_purple.png | Bin 0 -> 606 bytes .../block/decorative/vent_alternative_red.png | Bin 0 -> 584 bytes ...lorless.png => vent_alternative_white.png} | Bin .../decorative/vent_alternative_yellow.png | Bin 0 -> 626 bytes .../textures/block/decorative/vent_black.png | Bin 0 -> 581 bytes .../textures/block/decorative/vent_blue.png | Bin 0 -> 645 bytes .../textures/block/decorative/vent_brown.png | Bin 0 -> 635 bytes .../textures/block/decorative/vent_cyan.png | Bin 0 -> 654 bytes .../textures/block/decorative/vent_gray.png | Bin 0 -> 631 bytes .../textures/block/decorative/vent_green.png | Bin 0 -> 628 bytes .../block/decorative/vent_light_blue.png | Bin 0 -> 671 bytes .../block/decorative/vent_light_gray.png | Bin 0 -> 651 bytes .../textures/block/decorative/vent_lime.png | Bin 0 -> 658 bytes .../block/decorative/vent_magenta.png | Bin 0 -> 664 bytes .../textures/block/decorative/vent_orange.png | Bin 0 -> 671 bytes ...nt_colorless_part.png => vent_overlay.png} | Bin .../textures/block/decorative/vent_pink.png | Bin 0 -> 671 bytes .../textures/block/decorative/vent_purple.png | Bin 0 -> 660 bytes .../textures/block/decorative/vent_red.png | Bin 0 -> 639 bytes .../{vent_colorless.png => vent_white.png} | Bin .../textures/block/decorative/vent_yellow.png | Bin 0 -> 671 bytes 39 files changed, 116 insertions(+), 33 deletions(-) create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_orange.png rename src/main/resources/assets/overdrive_that_matters/textures/block/decorative/{vent_alternative_colorless_part.png => vent_alternative_overlay.png} (100%) create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_red.png rename src/main/resources/assets/overdrive_that_matters/textures/block/decorative/{vent_alternative_colorless.png => vent_alternative_white.png} (100%) create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_yellow.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_orange.png rename src/main/resources/assets/overdrive_that_matters/textures/block/decorative/{vent_colorless_part.png => vent_overlay.png} (100%) create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_red.png rename src/main/resources/assets/overdrive_that_matters/textures/block/decorative/{vent_colorless.png => vent_white.png} (100%) create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_yellow.png diff --git a/colorizer.js b/colorizer.js index c9f848298..7cbdf3f02 100644 --- a/colorizer.js +++ b/colorizer.js @@ -8,7 +8,10 @@ const child_process = require('child_process') const args = process.argv.slice(2) if (args.length == 0) { - console.error('No texture(s) names specified.') + console.error('No texture(s) names specified. Valid arguments are: [mask over]') + process.exit(2) +} else if (args.length > 2) { + console.error('Too many textures specified! Valid arguments are: [mask over]') process.exit(2) } @@ -33,39 +36,46 @@ const colors = [ process.stderr.setMaxListeners(40) process.stdout.setMaxListeners(40) -for (const texture of args) { - if (!fs.existsSync(`${root_main}${texture}.png`)) { - process.stderr.write(`${texture}.png does not exist\n`) - continue - } +async function size(path) { + const identify = child_process.spawn('magick', [ + 'identify', + path, + ]) - const splitted = texture.split('/') - const last = splitted.pop() - const combined = splitted.join('/') + identify.stderr.pipe(process.stderr) - const basedir = `${root_main}${combined}` + const chunks = [] + identify.stdout.on('data', (a) => chunks.push(a)) - for (const color of colors) { - (async function() { - const identify = child_process.spawn('magick', [ - 'identify', - `${root_main}${texture}.png`, - ]) + await new Promise((resolve) => { + identify.on('close', () => resolve()) + }) - identify.stderr.pipe(process.stderr) + const chunk = chunks[0].toString('utf-8') + const size = chunk.match(/PNG ([0-9]+)x([0-9]+)/) + const width = parseInt(size[1]) + const height = parseInt(size[2]) - const chunks = [] - identify.stdout.on('data', (a) => chunks.push(a)) + return [width, height] +} - await new Promise((resolve) => { - identify.on('close', () => resolve()) - }) +(async function() { + if (args.length == 1) { + const texture = args[1] - const chunk = chunks[0].toString('utf-8') - const size = chunk.match(/PNG ([0-9]+)x([0-9]+)/) - const width = parseInt(size[1]) - const height = parseInt(size[2]) + if (!fs.existsSync(`${root_main}${texture}.png`)) { + process.stderr.write(`${texture}.png does not exist\n`) + process.exit(1) + } + const splitted = texture.split('/') + const last = splitted.pop() + const combined = splitted.join('/') + + const basedir = `${root_main}${combined}` + const [width, height] = await size(`${root_main}${texture}.png`) + + for (const color of colors) { const name = color[0] const rgb = color[1] const magick = child_process.spawn('magick', [ @@ -75,11 +85,62 @@ for (const texture of args) { `xc:rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]})`, '-compose', 'Multiply', '-composite', - //'-layers', 'merge', `${basedir}/${last.replace(/_colorless/, '').replace(/_white/, '')}_${name}.png`]) magick.stdout.pipe(process.stdout) magick.stderr.pipe(process.stderr) - })() + } + } else { + const textureColor = args[0] + const textureOverlay = args[1] + + if (!fs.existsSync(`${root_main}${textureColor}.png`)) { + process.stderr.write(`${textureColor}.png does not exist\n`) + process.exit(1) + } + + if (!fs.existsSync(`${root_main}${textureOverlay}.png`)) { + process.stderr.write(`${textureOverlay}.png does not exist\n`) + process.exit(1) + } + + const splitted = textureColor.split('/') + const last = splitted.pop() + const combined = splitted.join('/') + + const basedir = `${root_main}${combined}` + + const [widthOverlay, heightOverlay] = await size(`${root_main}${textureOverlay}.png`) + const [width, height] = await size(`${root_main}${textureColor}.png`) + + if (widthOverlay != width || heightOverlay != height) { + process.stderr.write(`${textureColor}.png has size of ${width}x${height}, overlay has size of ${widthOverlay}x${heightOverlay}!\n`) + process.exit(3) + } + + for (const color of colors) { + const name = color[0] + const rgb = color[1] + const magick = child_process.spawn('magick', [ + 'convert', + + '(', + `${root_main}${textureColor}.png`, + '-size', `${width}x${height}`, + `xc:rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]})`, + '-compose', 'Multiply', + '-composite', + ')', + + `${root_main}${textureOverlay}.png`, + + '-compose', 'Over', + '-composite', + + `${basedir}/${last.replace(/_colorless/, '').replace(/_white/, '')}_${name}.png`]) + + magick.stdout.pipe(process.stdout) + magick.stderr.pipe(process.stderr) + } } -} +})() diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt index da5c28793..2aedb738a 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt @@ -149,6 +149,8 @@ object DataGen { decoratives(MRegistry.TRITANIUM_BLOCK) decoratives(MRegistry.FLOOR_TILES) + decoratives(MRegistry.VENT) + decoratives(MRegistry.VENT_ALTERNATIVE) for (glass in MBlocks.INDUSTRIAL_GLASS_LIST) { decorativeCubeAll(glass) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt index 0d987ca43..65e035270 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt @@ -123,20 +123,22 @@ object MBlocks { BlockBehaviour.Properties.of(Material.METAL, MaterialColor.COLOR_LIGHT_BLUE) .sound(SoundType.BASALT) .requiresCorrectToolForDrops() - .explosionResistance(80f) - .strength(4f) + .explosionResistance(20f) + .strength(1.5f) ) } val VENT_ALTERNATIVE: Block by registry.register(MNames.VENT_ALTERNATIVE) { Block( BlockBehaviour.Properties.of(Material.METAL, MaterialColor.COLOR_LIGHT_BLUE) .sound(SoundType.BASALT) .requiresCorrectToolForDrops() - .explosionResistance(80f) - .strength(4f) + .explosionResistance(20f) + .strength(1.5f) ) } init { MRegistry.FLOOR_TILES.registerBlocks(registry) + MRegistry.VENT.registerBlocks(registry) + MRegistry.VENT_ALTERNATIVE.registerBlocks(registry) } val CARGO_CRATE: Block by registry.register(MNames.CARGO_CRATE) { CargoCrateBlock(null) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt index f151a6415..ca3bf380d 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt @@ -308,6 +308,8 @@ object MItems { init { MRegistry.FLOOR_TILES.registerItems(registry) + MRegistry.VENT.registerItems(registry) + MRegistry.VENT_ALTERNATIVE.registerItems(registry) } val INDUSTRIAL_GLASS: Item by registry.register(MRegistry.INDUSTRIAL_GLASS.name) { BlockItem(MBlocks.INDUSTRIAL_GLASS, DEFAULT_PROPERTIES_DECORATIVE) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt index 84f3a38a6..52c1e89c6 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt @@ -271,6 +271,22 @@ object MRegistry { .strength(4f) } + val VENT = ColoredDecorativeBlock(MNames.VENT) { + BlockBehaviour.Properties.of(Material.METAL, it.materialColor) + .sound(SoundType.BASALT) + .requiresCorrectToolForDrops() + .explosionResistance(20f) + .strength(1.5f) + } + + val VENT_ALTERNATIVE = ColoredDecorativeBlock(MNames.VENT_ALTERNATIVE) { + BlockBehaviour.Properties.of(Material.METAL, it.materialColor) + .sound(SoundType.BASALT) + .requiresCorrectToolForDrops() + .explosionResistance(20f) + .strength(1.5f) + } + val FLOOR_TILES = ColoredDecorativeBlock(MNames.FLOOR_TILES) { BlockBehaviour.Properties.of(Material.STONE, it.materialColor) .sound(SoundType.STONE) diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_black.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_black.png new file mode 100644 index 0000000000000000000000000000000000000000..d07a6c1c1f034c278a8dac2ef2e70961cc909511 GIT binary patch literal 499 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>+8$O$;rsbC@3h%%gf8k$|@--DJm*zYHBJg zD@%cZ?EnA&oger92b#&4&pI& zRg~F8hOapr!7L>Jm>vlJvrk)s8$GIN;Pa;^( z7d^cbrGH)d=k5Z5te1axTqxd=dw%}C>b>vHat?EC3;B@nD$sE8<@Uoz`zO{mJ3pGz zv!(B2gTnm}%%_A{L+9+frU7)GYKdz^NlIc#s#S7PDv)9@GB7gIH89mRG6*p=w=yxd qGBngSFt9Q(kTjjvg`y!hKP5A*61Rqo3_UZT1_n=8KbLh*2~7ZT)sf2p literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..87278e1f8dead0336fcfa1e23cf4096f64b8e088 GIT binary patch literal 591 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>gcs8 zt7dEKwrJ}%>*%#BtL8{a2N;{qHa49lBO9WmoUWtWs-l`JEfXj$6C^DYEF&ALt*x!B zlBut+FDEA_BO{}rpdc?VFDol+WHM7pNl8&rQBzY>Sy@?1N=imHOi3j}NhMQ7HAh>g z@&Et-N>-lyKnE};dAqx)MRCm73gmDWctjR6FmUsMFr&l1hd^&Ju$OrHy0SlG6=gP& z;cLzYdHj&4i(`nyW!e7MWrqzonp58#IoNYdC0A(o>uc{m{abHg#J9iXiy{k4S7)0E z+ae!M369_-y?rYAE*H8D&R;#EHGP)*fg3(gLZ+P(T6jwPlzs7DM`ote+upld_uZRy zb(`j8O8glbfGSez?YskpZGXrX1@O1TaS?83{1OO5Gx}5+3 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_brown.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_brown.png new file mode 100644 index 0000000000000000000000000000000000000000..fdd156265de914c1537b717b608e4a4e475415c0 GIT binary patch literal 580 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>+9>w$;rvc$S5c%$ji&i%E~G!DJd!{YHDgKD=SM$N%t&NjX+P4rhT!WHAE+Hy;QyI_!H0^bG@hiKnkC`!iNiW)m5{=4_CE4|uvb zhDcnNJ%6$2hyn*|fJn}SNgcCtgx;2I|NFmx&9vjz#SPpKY=V9)c(CWV1A|C{;ymHK zHNO~kaebcVqhqMfGoklv*O?`1Vl1KeKC_%T&U~dY*>e5syzh6TCp+E|>F&4@rpwq^ zbgS{PfZ+EM0T#XZ>z{3+Utiyx!rH60G-6d)n=9+1FLVF@@A@&Lk^9d1@b`b~_D7e= zZP*aH^0C*ZS*azCi805x3>{9h)J^&L+W(mH>uG-#9!G~h?=V^OPy9av$4MUM=XolD zK)b(`j8O8glbf ZGSez?YskpZGXrX1@O1TaS?83{1OS}{wWa_7 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_cyan.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..3a3d3d7deefd53e92323925c7256771e3ca70df5 GIT binary patch literal 601 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>m5376LK$EI?-dW*G96lv?$+$@KmOaxNH2fvXT`!) zAeUIhx%so5AEVm_mPIKa{=8B@AuYUiR^-%4$0SuJXPKVbscER-w0zP(+vnUz4hrV~ zuKV&>Vy|(UaM3z$>Zl_X)ZG{r0x6cHg3PKbargx@ud_S|R8(%NuM?{gjqEn> zUMgCs$1-#OU;jU>H7UHt?qxPoKp&}=xJHzuB$lLFB^RXvDF!10BO_e{Q(Ys25JPh- t6JskwLu~^CD+2>b(`j8O8glbfGSez?YskpZGXrX1@O1TaS?83{1OQXXzSRH# literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..efe599032bc1350103ac10fad9fe268d74de0a75 GIT binary patch literal 573 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>Q1A<#Dr>?NMQuI$fPMVU=x_?ojp{@v;6;us=v zS-0^$JJa_Ykt?T7;OP9o)9I44PX0j7&Itw^6Yp-@`?flt*YmIjt8#14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>P932Kjf7r;B5V z#AVt3i$%=_JS_ffJpm#qH(54JHp~70Upc#|YWGapw~Q_vhb7dMx||t~F&012=04fW z_9AvhxUlE3oWdsVUr*D*OPy|T@&A)wvXeMv((CXw5@*owR7KhSKSvh z_I|0J6tt(Cl_PoEYDW?N1$J%k?D@)L?LD@Ks&Y9lkN?&Ef3-1pTFdQdP)w?pxJHzu zB$lLFB^RXvDF!10BO_e{Q(Ys25JPh-6JskwLu~^CD+2>b(`j8O8glbfGSez?YskpZ RGXrX1@O1TaS?83{1OWLFs-FM= literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_light_blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_light_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..27db6aba36f42b65bdfad54bed717f9c3c44ec81 GIT binary patch literal 626 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>(Gj|!!*=ICkr}5nVnzb{GX6%xWEwtWp+j{dY>&-V663f-gCmPM#tywoqKE7B! zzCrKF@3Q!2IUXKPeW)~KAKSvS*g+V=nd|JO7J{s6j)G0EHAMfdD2M_V9=v%n*= zn1O+t4}=*V_B{mpm4Us))7O>#8LKF>i40$JHYhYMc)B=-NL&`}yIs_5z{C2K`=~-d zsLE{>#y2Lplj8pU|NUy-@wqo|GAFG0e7F03@79H%8JyV{yU!6w_g=q^xlZ|r>y$+g zR2H@`kw{kST(VlhGT~V8FL8nM;t9-bnYX_$mT}i@jk({DCD-XOJ(ShvgNpir*FBf7 z&V6Fz(EhV_e{Qs9>Heoj4iqn$vv|#{=(C1A8uFaCpWTctN-(g!_IC5NsypvhCAk$B z+hyd6UNjYKC~wJ|(mu)Q!jpraCcpWtz4QGM?@hj$`7?Vz&igI@TlycvzE%?_ z0sW?0;u=wsl30>zm0Xkxq!^40jEr;*Om&S6LJZBVOpL7z4YdsntPBh!O{aCCXvob^ Z$xN%ntsx^r&kU%6!PC{xWt~$(69C=)+fe`j literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_light_gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_light_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..98206fda1ca17df843dd2b17fa8ec9482b2b8ebb GIT binary patch literal 592 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>g(&v$;rvc$S5c%$ji&i%F1?iH7Y47DJm*zYHBJgD@#d9B`3$k#YH3~MVFT5 z{{R2~hwPs(KnE};dAqx)MRCm73gmDWctjR6FmUsMFr&l1hd^&Ju$OrHy0SlG6=gP& z;cLzYdHk@ai(`nyW!?UVMTZr5nt5k9_B>CVY{pq~_g3Ef|6PmszWn38++Us9Lf&9s zV$r?l9SjnQj*E=Wf8O1%Any~hdQ+H|sk(t`=(FXQwF(&oqt@=3aar<6qw>9Pe_tFo zta?6SnPF#ZWtqv^28E^T9Hu)x6}ndC)Ny3~@6y{<^1rA0raArpY;#kgA!L8gGB3{b zb4+>{Z|plRas2JIvy~@&Ztbwu%suvb`T>z?;jAg9Ec)f&zPGowdz#u$+!=Pn(#6yM zpZR~rse!z1?eZ~BK<}uQxJHzuB$lLFB^RXvDF!10BO_e{Q(Ys25JPh-6JskwLu~^C lD+2>b(`j8O8glbfGSez?YskpZGXrX1@O1TaS?83{1ONlB$4LMH literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_lime.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_lime.png new file mode 100644 index 0000000000000000000000000000000000000000..d6e1f107674d1c8ef937466a4ca8dc69d318799d GIT binary patch literal 611 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>rj zox*FI#%r6-tF5i=T`!=ouP-MjCnF=Hpr9ZxFE1-Ao3~R!Nl8gjQBhM!N2|L5xTlmZ>YnB?v5q7}UF$~+*4v%n*=n1O+t4}=*V_B{l8 zk%7I$)7O>#8LKF>i40$JHYgBIdAc};NL&`}zggC7AmIFz)qwf3rrd3n2G2`svH$+F zzkU_?+#{T+r*z-zzX@x2=d%CeTdY2-Bkgqlw&p#?7lozp#QAr(A{xM{e(v|7vkA>L%~mfV0ZRuY*huIWODMlxOT~zWtbYf8VFt`kd&s&;Oke zI5EfKxk&djx8kOGkJwja&bw>M-YEIvj@|jsHuKKks#8e0bZBYdA~AypvXiBwS+$$Y z)=U+@eO>&Hc}ipM#BE_mB;Kd~*tq{8zunC}Q!>*kacjuP&@%&SVDNPHb6Mw< G&;$T^TgATs literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_magenta.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..95c14e251df8fdc7ad8be2dfda64965b0bb64ae2 GIT binary patch literal 615 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>@w;a)P$DcAa*)zP`SkoSck|jDmuKyu7@utn3cEwMt4#ii(PwnwrYW%2HBN z>B@=CIyJRgrL|gRO*&PxO(*^T|3CG|vFkwhFeZ7syJ)NIe8K_ba29w(7Bet#^MNp< z!@h?=Uox21sKVubTHj&|L&IX0UX-^l&5Q)pOeYcC64FsI8i+3fi&HI?-!C>t> zJNoy3`3Qg0s!JZlE-7n1-<|!wck9B>F3#?Y)BDbfz2Bz%li~9ek>W=)octpz=QWx* zPd`$iawxm+|Ln^%k4#9+`CT{V@rtDfzUl@X<#1T;DqJ~fM%W|oCl!U+R=igX?Y_U> zHZ|zG_NFav$tKS(9Wb7A;lNAn;^3ZlJqjsR>u#5?{kr3>m)SI?i1!gvsxK!wK9RlA z`*K|X*DTw}$^&-uZtmUWb90+#wRTd^_e=k8-2cEH=E`^fQ&;pJptn>@Tq89j5s4Y~O#nQ4`{HDqMynE^F0 Nc)I$ztaD0e0sxzQ*)9M8 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_orange.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_orange.png new file mode 100644 index 0000000000000000000000000000000000000000..3b3637fe025555ec10d043931411a1e024049e63 GIT binary patch literal 621 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>?3go_!#8+>_@wG(YONqeeVu4nB&PBf57nAwc1addpax~d; zwAgVr+i@=U=Wes-Y zSy@?1N@{Ho_YyzurGDJ21G^8Ww-KP7pZAJ9pRN#5=*I=k)`t_E^A3p^r=85p?v zK$y{C-$S5B8Q4oaeO=j~v5GRA$nZ61gM#9mr;B5V#AVUGn`O-gJT6aLZz%+X>gcO9 z%w6WY>(BrHSLYtLe11-rVQH^y+?wF1-v^m`n0>?w-C|7kzGD2*D{x&wg!$Y-YmX+w zG_HwDSX7wL>{wdQ@Ue(BY{7(Yk1bwTZi_m(Bd+5~XGe;z&;h3NiOhR+E$*KY(^KY| zalilfzU#O8s{MHOxSXs zrNofUarTP3#{ut63x0b3`Z@JX`6JVpeP6bp@rpeC&i(%{`@7QokA6(~bsp$5)e_f; zl9a@fRIB8oR3OD*WME{ZYhbEtWDsI#Ze?O@WoW2vU|?lnAZa?S3q?b2eoAIqC2kEF S8G2?w4Gf;HelF{r5}E+l8Pjk8 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_colorless_part.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_overlay.png similarity index 100% rename from src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_colorless_part.png rename to src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_overlay.png diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_pink.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_pink.png new file mode 100644 index 0000000000000000000000000000000000000000..3e5482fbc339c72331efb00c269a20923a8d9656 GIT binary patch literal 626 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>q1qb-obS>O>_ z%)r3S2f~aF`yK-Q%D`UY>Fdh=j8&A`M24?98x$HBJY5_^Brc2g-7ac2;9-5reN-VJ zROPk`;~SIQNpb)F|9&;^_}rT}nG@E0zT5r2ck9B>49@I}-RB6Td#~TdT&H}*b;_a# zDhu0}NF=LuE?KQ$nQ$!lm$<-r@dReJ%-i1=%ed>d#@uhnlI!%C9?EL-K}G$*>z>P3 z=RUDS-fUe^jSk54SCMn&u+#RB^cOVd%O8s)t&dMlH7`m z?J{yjFPaKAl(*zfX`keD;mN^Iliz&S-ueEB_a@)W{F%KU=lz!dE&Y$-@lgRbU#p3e zfPPagag8WRNi0dVN-jzTQVd20Mn<{@rn*K3A%^BwCdO8VhS~-ORt5%=rqjAmH00)| ZWTsW(){v2*X9m>3;OXk;vd$@?2>|g514Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>IFdR@jS1`$`rBN|)P;MB0f&+lfT^ zOBLIT#yE(^YHMrj>+8$O$;rsbC@3h%%gf8k$`-3FS5i_^R8-W|)KpehmXeYRk}mg? zEcBBq3Y0EOROtQx|G!h)mcKxkFeZ7syJ();-l_uRa29w(7Bet#^MNp21sKVubTHj&|L&IX0R2~QWt5Q)p8eQ(PSEATk;S~MT&G?$)i!nx({t=c{Rh5KGD z?^~zB@SK@1Ut;d}OoxWT2F}j3MMppHmS?b^;o)M*eRh)4jG%L^s+-q2$uLYbt7dd5 zV=Q^l@%^#I>&k6WmPhhdOzWH(8Yb#+Aku8XYp2hqIZ4VqA$iAZ?`P*8-y7ktGt>K| zZTzn&2MJHR-d)pFW4xRSCf@pYHOgAPKkJ;c))MXY>qTRG84V0tSB7tJx)k^7(N za~~cLI8(l4ziSDf;N$iGz5j~^@hSgywb=~xlWK`;L`h0wNvc(HQ7VvPFfuSQ(ls#E zH8Kb>G`BJ_wlXx-HZZU14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>Yl`U*PX978#1s;*b3=G_SAk65n?;+4b4D2PIzOL-gSVfslWcZr1L0&%S z>Eak7aaq=%G4F^0hq6kpmqfTnRqo{5x#hS2|F^J`R=mk{l8r+`*e{c>LsIxa%LbK2 zkDC89aug*m3Y{6cGGpGs86m5^pDjBg=#sJd)Boi12@H)D_I;b@KYuazagAh*c-fj> zQ6Z0uye|S**gRTh#u)V1X5R06zb)oneX{F8RH*dtRe=dge~pT!2)#GuZkc)PpY1V= z`1N^=is6r*eOYm*hcPInt2>S_WgE+j)DPdb{Vdpgx$Tgb`F=>LQKf6S^3JP}e3 zMx{W{sFt`!l%ynwV0|P4q14+|qT__rI b^HVa@DsgMb$j~zbYGCkm^>bP0l+XkK#z(Sg literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_colorless.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_white.png similarity index 100% rename from src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_colorless.png rename to src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_white.png diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_yellow.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_alternative_yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..7f2f6a0967fdf25f428406f328b7321adf7686cf GIT binary patch literal 626 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>$@bcu9Ry^7yffx<@Yg_Uq@9sa)g(+NL*hfzp+QMB~!RH zQ@A}_xGhU~O^0M>j!0Loh_<%&>UIfzeSJAOIT;xl1qB6pd3jk`*`G&Ml$4Yd6%{o# zHIrKF^~^F%iFNUm&^Sk)%6p`sfGgeV%6B)kdY*1)i@N{tuk+>|{ce|+BfQR)d_fds_ zP?g&%jBiYGC&m5y|NGUv<8yD`WKLM~`EK|7-mMEiGdQy^cAq1V?!A5+bDi=L*C~r0 zs4Q$>B9W}txn#A1Wx}!GU*ZDi#S@s>GH-uhEaR@*8gsuPORm#ndMK;S2Nm@LuX`?E zo%_Vbq5Ws={@iHI()~}594KBgXYra@(Ps^LG~_vNKf4)Qlwe?c?d|4kRd?R2N^&bM zw#&#By=W@fP~MU^rG1jqg(n9;O@8xPd*}Nj-kW?g^Jn&cocCM)xAZ@T$43R&e61!< z0{Tt0#5JNMC9x#cD!C{XNHG{07#ZmrnCcoCgczDznHXCc8fqIDSQ!{dnojFN(U6;; Zl9^VCTSG>Mo*7UBgQu&X%Q~loCIHwb-R=MY literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_black.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_black.png new file mode 100644 index 0000000000000000000000000000000000000000..96a3d194c89292848808321b7779edaa2d4b0916 GIT binary patch literal 581 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>FVlgX=&-{>B-5-iHS)_Nl9sHYHDk1>*(mn%gYN33#+TED=8^yXlRIuN&f%; z|3m#=383waN#5=*s)rd*@&h@X1s;*b3=G_SAk65n?;+4n4D2PIzOL-gSVftQMJ?o9 z6M#ayJzX3_BrePLMP6rwhGXqF9xV9& zHE?3e&O#7$+7#Un+9uuY%sLTj{GrjowxXZ1{S@ zBH4~XXWEzK+`HfJpX=EmVea`d)M$=@%E9TnhJOVws&zE&I3qo2{!h=Ae~g^_x%aUz z$m0QeL$$;;q9i4;B-JXpC>2OC7#SED=^B{o8X1Hbnp>F|TNxT^8yHv_7)Y8<>q60x bo1c=IR*73fMuwglPy>UftDnm{r-UW|!9%Tx literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..9dfb6238b9b3c06835c22ffaaffb3fa4ab8466fc GIT binary patch literal 645 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>0w_f{cuew6wIW ztgND&pI&Rg~FS)I!cR0Vs6E)5S4F;xcc* z&9Y_%5gENO568uVYwrk!_?TqwQu+VC`01I)XJ+yWFsUq6m~=EcQ0ql=mH08KV97}N zR7R)d)!(k{yeApWFZ5%>;_rW69-f(el_4r@`8D6qdv@5Rn#-KIS=^I+?Z?D$PNV51 zcbBE!`~LdvHlY(npXXY(bf?R4+}crhZ{Mb*n=w)>OL!N4HavEwy3HkXQnkkPE>R?O;ZIh^Ml+|sj1^*)UY&QodFuZa z`q{Mb!VmVMKSD39&#(3a`cJjQHKHUXu_VKYk@7@Av|7+V<{ oY8x0>85l^KPU}L^kei>9nO2EgLq>+48Bha*r>mdKI;Vst0M6*iNB{r; literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_brown.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_brown.png new file mode 100644 index 0000000000000000000000000000000000000000..79a1a3f5f29bab40229f1f33fa6a8f6c39d64ea1 GIT binary patch literal 635 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a> zv{g#BQ%_+4k(QR0m6cUg zRP;5FwpJCDl#~<~7nhKb5D^g(6%`c{5)u;=)7910($dn?)02~v^D~qVFp`mylG4=F z)YjJ4(b18YmlqZmR##V7Qc}{;(6Cn*vr`lM|NlSF-Q#RPw=pJpySwNsUr`VQaySb- zB8wRqxcNYs(P7_1ppO~YOFVsD*`KkBG8>Cp$hjr}g)V!#IEF}E=AH1mtXV;zrQLOv zNRQi=O|FZMuoP$h{?{K~_Wx{6`tvhPP7O=ebS(L`LYg=9wSVHN2<6+8*Eqgd^Y(nR z^xTbaRT}k;tIyxJ(~-$#*T_7-clVmt&yJO-cHYvNmpq62ar!;g6L&7z#&7#-@vi^4 zpKHQ1^I7MZ_Y>_E9{14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>W#G&D4LyaM>6l6XA*_~X*}V^f7o>;C`$-}9^966jRM zByV>Yla(7^{snS43p^r=85p?vK$y{C-$P&kFtC?+`ns||V-;mK7PXLbO#ljA_jGX# zk+{q|;bu{@fr#_d*EC@=$^ZXrF>Y<_8b{D$hW z@;x3CEYD9bopCI8cg%Y3Mjhk(Gn_4|pG{lPlYQ*#ypGJ$;@!<#6tCDFn^ALq!ih6) zut4H&%MldkSSiBZ@5Hl!Joi@q@SX{_zwg> zU3+H2Hv5-L9j5s4Y~O#nQ4`{HDqMynE^F0c)I$ztaD0e0sx7)(!u}$ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..6b6335f6458a9ed9ab5e3962d61be48d2ba41507 GIT binary patch literal 631 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>_+4k(QR0m6cTl z0%bKVU3~>56-h}+adB}82?-Gq5m8Z5At50#F)>|TT`eswJv}`+IXP`z18qG+DJdyU zO-*fWZ5&pI&Rg~FS)I!cR0Vs6d)5S4F;xcc*#iV8f4we#A(bd;1 z(j$6iE$e-|>+k>PycLi6-tjTGI4okCc&a}*wc*?{w`*B5UUAQ5Son6QeE?;^nTytk2PvjQv@qJ zE9%RYgqb$VZvV5m$M&{`sMUwM0!5aia~T|uUfg$m&Q~A##TP|W)Z?l@`t>|BFx{U! zzyERhhHEPf_guOAR&M}J*BXQx!udKnIANW&yg{)hf_I(3- zO|`@|q9i4;B-JXpC>2OC7#SED0i#aW$RNbf+{(n*%Fs~Tz`)ADK+<$t7m9}5{FKbJ XO57SUGW5)V8W=oX{an^LB{Ts5J=4G0 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_green.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_green.png new file mode 100644 index 0000000000000000000000000000000000000000..a1be5289557ab00ad95f235b654dd9e1ceba007d GIT binary patch literal 628 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>saxJsj+FC@9Ft$Vf{|%gV|sDk|z) z^J`o1NlHqJi;GK0NQj7th>D5|2?>dbiRtRFLSI$yxh|NJ&X)YHDh0YwPIf z$ji$M3k$2Ot1BrfX=rHZ+3;KYidgvw|NsC0P&LM{um138=p9+AZi z4BUJm%;>Q1A<(-F>?NMQuI$fPMVXC7E#zDifI{azT^vIsE{jfxE^9X6adGEMSZ<^^ zLuB=_JwhiI=YHG2ch#lk>q`3B6qqE76^vXXL&V-?*mrETnZ3(|l|%jg>|*I%2mUcJ z*A&Swt~qMr@lE}JWPRQt3*X`wV%}`-a*Lka(H5?bF6=KcKdzgKyQO>Fn@ zx~{Q^@A$&m+m;J`788?6uvlvLY)+}1>sC?yho*V6=VgjrJs{}rdCR#g=_`NqXKj<) z`|7tV-jHuNb?dgfUlx;J!LChlC;l;2h@1K>?WhcXy6QhifW;ri*%AWB4tMgG1HGnN z;u=wsl30>zm0Xkxq!^40jEr;*Om&S6LJZBVOpL7z4YdsntPBh!O{aCCXvob^$xN%n Vtsx^r&kU%6!PC{xWt~$(699I*wv7M) literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_light_blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_light_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..478b507d59e0f091f9602c90d45f4d739c963846 GIT binary patch literal 671 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>331h^o@zXMukq|X zMzeMs&)H`*W0ywdWTP27P39iZteI{!bC=Qd9rE!d)?02{Z@y)<>4tnlsd~jEg`{%p z%{LVk6l7#%q@|^0Wn~o=6%`W8G^(b`#}-OTN{Wk%OGrqFh=_=aiV6t{iHV8n>gsA~ zY3b?d$;ruS)J)T?n<*tFrKzc@t*x!2qa!abFDxvquCA`6q@Y0Rv_nlw-F>OwjpL+1*21__}Qw*+s<9f*JXbH^IY}M4~hC4 zS1=qtx~s5#-Rrw$7DCCH-{X?*s2+R&(zk=%YE62dcV{2V{B_G> z`F_T&TCX4Lwq0Qfv1fCeTQ~I|^M@JJb<;g=%YQNPpQ@MfobA7ejhGROf>$EYpQ!C8<`)MX5lF!N|bKNY}tr*T^8m(A>(z*vimQ+rYrez(CS;S{I6j-29Zxv`X9> UGBWhcfEpM)UHx3vIVCg!0CcP1x&QzG literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_light_gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_light_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..6e38365fb2d1079115121030437b5c47aebc89a4 GIT binary patch literal 651 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>{MaB5|NDmJeNl8g@ad8O=2@w$yQBhGLAt5m_FJ#$9UUEcd3j-BVRdzNB_$;d4GmvkkEEoS#Kh>Ts-pk@|0{ovNCUc)G0EHA z#n}96O&pNJS>O>_%)r3S2f~aF`yK*)&%j>d>Fdh=j8&A`Skyw!H32Ae-P6S}MB*~< zgxvBb1Ci#-(W|d)Rq#msvTlla;Dw#O|Nr+#``f9hTlzC7It0DzSaM6=h`02L{Go{C zBIWMMHVpx{_E=qCS9nZpEsI_5bKCl#7mCk#JDmIzvoldf{rVa4Nfxv275BuR`q3xO zX>|SPHonU{a<~7kRh*FejJ=p6{QMoEDTQZu)Ga@-iUb1;5t4Hc1}d4m-mGk~CZYF@Ff+RCP|O zzZkvOb=QJWuK(G`BJ_ rwlXx-HZZU14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>c{?SnQ+RFDc=L8iC@3h%$jC@b zOUug2Dk>`4r0{yz3s@%dNJ>hIi;GK0NQj7th>D5|2?>dbiRtRFLSI$@w-5 zN=Zp+YHDh0YwPIf$ji$M3k$2Ot1BrfX=rHJrt^B&3D~6a`ZWvsHVGy!7XAPKzm)08 z9-wO(lf2zsOz&;GnGNJ{7I;J!Gca)TfiR=PzK6gtU|=ut^mS!_#wyBeENUU=ngA5K z;pyTSB5|2_!pmvR3L?$SA+3DtM2}Cj?&w-uHgj$5|8!};I<@ECehkMBv|1GCO)@#D zawTw|;oR)ljKF0|jP9Z0XIGlez4*0SzoEZo!!*0K(kI157q}E=oiRDz{nBa4!xiq{ z_xKHy*`ru@*tMTF)BU_Je%M<21)F8aW)xIiRm;#13eKtHOMxJHzuB$lLFB^RXvDF!10BO_e{ zQ(Ys25JPh-6JskwLu~^CD+2>b(`j8O8glbfGSez?YskpZGXrX1@O1TaS?83{1ONh! B&)NV0 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_magenta.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..df71299f5508c53314a689869940c72129fb9669 GIT binary patch literal 664 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>tbgt=?#pW{`v@7SCO`T&pIY}{gm;L&k_Um@otxZ;nt_+4k(QR0m6cUgR7_EdtJ5w|P>hz8loS^imynPU5fKp;6%`T^5)%{C)z#I~($dq@ zlarHc(5`6GsgjbC($v({*4Eb1(UF&z7Zw&)S65e3Qqs`SNK;Oz)hcV&sczJ%Tx34u z|NsAvpJ%)TI+!uZ+ug;?eSgPAAcwQSBeIx*ftwG686EaL1O@{Gdx@v7EBiB6QD$RN z3pv*WpwMkk7sn8Z%e)g_7adX%X_?*}cF-v)X~W7nLPCbKDqgzY|9|z=oAZCu%F7rP z9fI^ao_xyP8g@bYt6q=kGJ{QbPKk0%)qNHF_}jS~{b5Y=zdf+6|9PQMN6X=KQuyvV ziN3t~ekvOc=RTLy)PVl+x~K1=i?_q zyBoGBn%EtiQG0$u#Ox<>e@&jwuu@fBaI%6gGWNrojs;%73%;71zu#N@ie2FLrFnUV zPt+Ftx_TjLP0KIl4>8l$#wh34U-I7XvTs3b)*t4*nWDKrx%X59y{TH_8c~vxSdwa$ zT$Bo=7>o>zjC2i5b&U){49%@fjI9g}wG9lc3=AYqr*)xd$jwj5OsmALAtOW245)#@ M)78&qol`;+06i+?wEzGB literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_orange.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_orange.png new file mode 100644 index 0000000000000000000000000000000000000000..c83528225e3f46ca51e93fb720ed1ad44b544e02 GIT binary patch literal 671 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>32|NS&wV+C?@|ii z#bmxKseBib_?Gx_pHJewmddv>fcru+-?>EICR>iLB?4bc1U?lDG~015_T_G~=lonO zprD{2BO@a%EiEf6tEi~hV#m46pS#|MLsC*wTwGj2LPA7DL{wB%NJvObOiWi-S4&Gv zPft%yPHsg2_v%1yDJdyUO-*fWZ5Fdh= zj8&A`Skyw!H32Ae$J50zMB*~Tg`Z zaQNu1!uEBq@0M8zC1-w*OS+?a?ERA?3e|FYj~BjQ_OfX2JdP>dCwx^}Hj8I+9@~{` zUZ=K5{_cfy2P!$F<&%B(i5nPM@A#c46YOKm6LoOHSD{JY4tA?G>3!aveJu0WEsN#* z8MkV^eyrPeg(bwE&24Vo)PKw$W=z*j_qZ+p#l(NAUdD5_{~|VGMl1?mi9mmnC}Q!>*kacjuP S&@%&SVDNPHb6Mw<&;$T|LE2aV literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_colorless_part.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_overlay.png similarity index 100% rename from src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_colorless_part.png rename to src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_overlay.png diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_pink.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_pink.png new file mode 100644 index 0000000000000000000000000000000000000000..b746081b9ffce011ae111a4711e08a5a36eb5374 GIT binary patch literal 671 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>32|K(UvjBp^2PE= z7s@AIu9$qTY{KH$qO+y_SF5J3NGLsDHt|epf1_8_=k8UXx>kPZT+!qey(qS@#V7V- z*GdHi1sNF`X=!O$Sy@Fz#b)p5rE$e|9ubm~lH%gx5)u+3A|j%qqC!GKVq#*ty1H6g zT6%hVa&mIZ<4ad1mP<)VX=-X}YisN1=*Y{<3kwUYtE($1DQReEwEDy@i7RgLj#-^l zzA~ZgO68RQ|Nk5O;&lZ&n=#4T-Nj-7`_gMb4rhT!WHAE+Hy;QyI_!H03=9VL5>H=O z_Ghf3%*LV?a;^zLp*x-~jv*44c_+LsYcddMQQsZqnZv-?yEIK&`2p*eZ_D2QPdhtv z{^z+fjhQuAljaG2{F6E{bH>uTP_ymZHpHx}U~~!$a=@`M44b8W1gsk6TS*f`gX8etx50m?(AckziwG9 z-_N*J>-A&Zwks?l_H1r*>!$u={xD;@Zo0>9`7b8^Q}r^Qv;7yb5i?>@@Ja;wQ?2OC7#SED=^B{o8X1Hbnp>F|TNxT^8yHv_7)Y8<>q60xo1c=IR*73f TMuwglPy>UftDnm{r-UW|S7GTW literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_purple.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_purple.png new file mode 100644 index 0000000000000000000000000000000000000000..e521a3972ffc4f554186080fc984cf962314b2b4 GIT binary patch literal 660 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a> zSz$t|;-n;nem}{=B!#|I#VG+&rHKlCwjz-wYAZ|BRuro(w-br-l`OOujVV@Jp`f53 zBO@a%EiEf6tEi}GClYNV5-uqzDK0K9At50mA|fg(DkLN%CMKq0t*xV@BQGy6EG(?9uCAn{q@khVAR6l@Rb($39VlHMC{>!OIQjqo z{}B(9K@Mh2@^*JIbKl=_5y;^z@Q5sCVBqEhVMd324}rnJz+U3%>&pI&Rg~FS)I!cR z0Vs6c)5S4F;xg}q-0~&^k><;BbFYXBOxSdBchG`GuFvm%`Tu|G*C)wEpXRU#Fipx( zR?Uqso5}R{>go$SueC1wFyyd$v!rUn6}(T+|^%M%vi#a?Y-T zNiBQjbgJ(!?|ECP=uyiz-QwKkU2*HKyE;8PQdgCPov(jgm0G-yu~6gn<+Hn8m{!R% zbv_MWVb9Q?%Xw14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>sEDwFf`W{UjI^}0tgNh} zqGE`MP@u4oq@<*{xVVIbgoucUsHmurkdT;|n69p_mX?;Do}QeXT(+cmu9Sq7l$55X zrna`Wj*gDJyu7fmu)4asl9G~!hDMl(aGsPzj+Dgz|NmD8|Gfuv9%GWXyNkiPJGxJR z9L@rd$YKTtZaxrZblCS0=xGM_5>H=O_Ghf3%*LV?a;^zLp(~y)jv*44c_+M{)T|)V zeE1-j=$f!Mry^aJZo75*-M7E@^Jf0>QM<3wAfTYhI#Gwub>)KoRYJ$4f~6zprZ74s zzy5Y-=RL{lMwWeV9@y6ZHYi#n?Qr_non4vp#IG;c_LMpM!t$76`kw=%D-&% z{`cRH5u7PAf1Z>%bk;b%&1~KL?cshpv%Li-n6;ccF0uK&WwQ6=JJq+g#av#tgvCVi zyka)bJW;`r)cfo1e*3$;*zYgXqmY}gjoW;fW;M5oy>?w;&oF;clg`BL^((F{Jt4l} z!Vh-k&4L$x$Xf&g{ij;u8c~vxSdwa$T$Bo=7>o>zjC2i5b&U){49%@fjI9g}wG9lc k3=AYqr*)xd$jwj5OsmALAtOW245)#@)78&qol`;+0N2~dy#N3J literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_colorless.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_white.png similarity index 100% rename from src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_colorless.png rename to src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_white.png diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_yellow.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/vent_yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..2d492e7cec198d4b619d8b4d2d069ba9efed1bb2 GIT binary patch literal 671 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>32|N1A$fC+{EgM} z*H_8kS|fjTrQFI^i7PAQ?yQqv*C}~zrTpdPa;=%de~zpCKBn^Xs7hOw@QPN6&K!|n zM^zLQ6l7#%q@|^0Wn~o=72C6gSGP+vr3*_+N{Wk%OGrqFh=_=aiV6t{iHV8n>gsA~ zY3b?d$;rvB?UdZmEh!}>rKzc@t*x!2qa!abFDxvquCA`6q@`Si!Ih+L^k;M!Q+Cp$hjr}h3oULpd9M2BheZ92 zD;N$R-BsAW?)BX=3!&u9?{P_YRFA!Xazvq8PVe!;_sd=u?VZOlrTc`hO3P;POwMDw za?R`17RleeaPB}QhqQdM&pvSjBkLW%6J>&ZjCrCCPWUP`>D$3>wI;pKyR(mF{<>wc zd_Ut>t=Err+pe&L*t5CKt(*Ff`NNFqy6GOb<-eHtPu0tK&h}r#M$Cvs!7CByPt_9F zh?11Vl2ohYqEsNoU}Ruqq-$WRYh(~&Xl`X