From 822fa04dce6e0769a1a5e6cc8ac3bae53bfb1228 Mon Sep 17 00:00:00 2001 From: Mithi83 <28407460+Mithi83@users.noreply.github.com> Date: Sun, 11 Aug 2024 21:40:17 +0200 Subject: [PATCH 1/3] Controller textures: columns Columns of controllers now have a matching color. This is achieved by alternating a and b variants of the controllers, similar to what was already done for the inside variants. --- .../block/networking/ControllerBlock.java | 28 ++-- .../assets/ae2/blockstates/controller.json | 126 +++++++++++++++--- .../controller_column_conflicted.json | 78 ----------- .../controller_column_conflicted_a.json | 7 + .../controller_column_conflicted_b.json | 7 + ...ine.json => controller_column_lights.json} | 2 - .../controller/controller_column_offline.json | 7 - .../controller_column_offline_a.json | 7 + .../controller_column_offline_b.json | 7 + .../controller_column_online_a.json | 7 + .../controller_column_online_b.json | 7 + .../textures/block/controller_column_a.png | Bin 0 -> 479 bytes ...ler_column.png => controller_column_b.png} | Bin .../block/controller_column_conflict_a.png | Bin 0 -> 254 bytes ...t.png => controller_column_conflict_b.png} | Bin .../block/controller_column_lights_a.png | Bin 0 -> 1516 bytes ... => controller_column_lights_a.png.mcmeta} | 0 ...hts.png => controller_column_lights_b.png} | Bin .../controller_column_lights_b.png.mcmeta | 6 + 19 files changed, 176 insertions(+), 113 deletions(-) delete mode 100644 src/main/resources/assets/ae2/models/block/controller/controller_column_conflicted.json create mode 100644 src/main/resources/assets/ae2/models/block/controller/controller_column_conflicted_a.json create mode 100644 src/main/resources/assets/ae2/models/block/controller/controller_column_conflicted_b.json rename src/main/resources/assets/ae2/models/block/controller/{controller_column_online.json => controller_column_lights.json} (93%) delete mode 100644 src/main/resources/assets/ae2/models/block/controller/controller_column_offline.json create mode 100644 src/main/resources/assets/ae2/models/block/controller/controller_column_offline_a.json create mode 100644 src/main/resources/assets/ae2/models/block/controller/controller_column_offline_b.json create mode 100644 src/main/resources/assets/ae2/models/block/controller/controller_column_online_a.json create mode 100644 src/main/resources/assets/ae2/models/block/controller/controller_column_online_b.json create mode 100644 src/main/resources/assets/ae2/textures/block/controller_column_a.png rename src/main/resources/assets/ae2/textures/block/{controller_column.png => controller_column_b.png} (100%) create mode 100644 src/main/resources/assets/ae2/textures/block/controller_column_conflict_a.png rename src/main/resources/assets/ae2/textures/block/{controller_column_conflict.png => controller_column_conflict_b.png} (100%) create mode 100644 src/main/resources/assets/ae2/textures/block/controller_column_lights_a.png rename src/main/resources/assets/ae2/textures/block/{controller_column_lights.png.mcmeta => controller_column_lights_a.png.mcmeta} (100%) rename src/main/resources/assets/ae2/textures/block/{controller_column_lights.png => controller_column_lights_b.png} (100%) create mode 100644 src/main/resources/assets/ae2/textures/block/controller_column_lights_b.png.mcmeta diff --git a/src/main/java/appeng/block/networking/ControllerBlock.java b/src/main/java/appeng/block/networking/ControllerBlock.java index 31428591311..0a6b735ef7c 100644 --- a/src/main/java/appeng/block/networking/ControllerBlock.java +++ b/src/main/java/appeng/block/networking/ControllerBlock.java @@ -59,7 +59,7 @@ public String getSerializedName() { * have the usual sub-states. */ public enum ControllerRenderType implements StringRepresentable { - block, column_x, column_y, column_z, inside_a, inside_b; + block, column_x_a, column_x_b, column_y_a, column_y_b, column_z_a, column_z_b, inside_a, inside_b; @Override public String getSerializedName() { @@ -118,17 +118,29 @@ private BlockState getControllerType(BlockState baseState, LevelAccessor level, final boolean yy = isController(level, x, y - 1, z) && isController(level, x, y + 1, z); final boolean zz = isController(level, x, y, z - 1) && isController(level, x, y, z + 1); + // While i'd like this to be based on the blockstate randomization feature, this + // generates an alternating pattern based on level position, so this is not 100% doable with blockstates. + final int v = (Math.abs(x) + Math.abs(y) + Math.abs(z)) % 2; + if (xx && !yy && !zz) { - type = ControllerRenderType.column_x; + if (v == 0) { + type = ControllerRenderType.column_x_a; + } else { + type = ControllerRenderType.column_x_b; + } } else if (!xx && yy && !zz) { - type = ControllerRenderType.column_y; + if (v == 0) { + type = ControllerRenderType.column_y_a; + } else { + type = ControllerRenderType.column_y_b; + } } else if (!xx && !yy && zz) { - type = ControllerRenderType.column_z; + if (v == 0) { + type = ControllerRenderType.column_z_a; + } else { + type = ControllerRenderType.column_z_b; + } } else if ((xx ? 1 : 0) + (yy ? 1 : 0) + (zz ? 1 : 0) >= 2) { - final int v = (Math.abs(x) + Math.abs(y) + Math.abs(z)) % 2; - - // While i'd like this to be based on the blockstate randomization feature, this - // generates an alternating pattern based on level position, so this is not 100% doable with blockstates. if (v == 0) { type = ControllerRenderType.inside_a; } else { diff --git a/src/main/resources/assets/ae2/blockstates/controller.json b/src/main/resources/assets/ae2/blockstates/controller.json index 2a9a811134d..e3b16ceeee2 100644 --- a/src/main/resources/assets/ae2/blockstates/controller.json +++ b/src/main/resources/assets/ae2/blockstates/controller.json @@ -29,92 +29,182 @@ }, { "apply": { - "model": "ae2:block/controller/controller_column_offline", + "model": "ae2:block/controller/controller_column_offline_a", "x": 90, "y": 90 }, "when": { "state": "offline", - "type": "column_x" + "type": "column_x_a" } }, { "apply": { - "model": "ae2:block/controller/controller_column_offline" + "model": "ae2:block/controller/controller_column_offline_a" }, "when": { "state": "offline", - "type": "column_y" + "type": "column_y_a" } }, { "apply": { - "model": "ae2:block/controller/controller_column_offline", + "model": "ae2:block/controller/controller_column_offline_a", "x": 90 }, "when": { "state": "offline", - "type": "column_z" + "type": "column_z_a" } }, { "apply": { - "model": "ae2:block/controller/controller_column_online", + "model": "ae2:block/controller/controller_column_offline_b", + "x": 90, + "y": 90 + }, + "when": { + "state": "offline", + "type": "column_x_b" + } + }, + { + "apply": { + "model": "ae2:block/controller/controller_column_offline_b" + }, + "when": { + "state": "offline", + "type": "column_y_b" + } + }, + { + "apply": { + "model": "ae2:block/controller/controller_column_offline_b", + "x": 90 + }, + "when": { + "state": "offline", + "type": "column_z_b" + } + }, + { + "apply": { + "model": "ae2:block/controller/controller_column_online_a", + "x": 90, + "y": 90 + }, + "when": { + "state": "online", + "type": "column_x_a" + } + }, + { + "apply": { + "model": "ae2:block/controller/controller_column_online_a" + }, + "when": { + "state": "online", + "type": "column_y_a" + } + }, + { + "apply": { + "model": "ae2:block/controller/controller_column_online_a", + "x": 90 + }, + "when": { + "state": "online", + "type": "column_z_a" + } + }, + { + "apply": { + "model": "ae2:block/controller/controller_column_online_b", "x": 90, "y": 90 }, "when": { "state": "online", - "type": "column_x" + "type": "column_x_b" } }, { "apply": { - "model": "ae2:block/controller/controller_column_online" + "model": "ae2:block/controller/controller_column_online_b" }, "when": { "state": "online", - "type": "column_y" + "type": "column_y_b" } }, { "apply": { - "model": "ae2:block/controller/controller_column_online", + "model": "ae2:block/controller/controller_column_online_b", "x": 90 }, "when": { "state": "online", - "type": "column_z" + "type": "column_z_b" + } + }, + { + "apply": { + "model": "ae2:block/controller/controller_column_conflicted_a", + "x": 90, + "y": 90 + }, + "when": { + "state": "conflicted", + "type": "column_x_a" + } + }, + { + "apply": { + "model": "ae2:block/controller/controller_column_conflicted_a" + }, + "when": { + "state": "conflicted", + "type": "column_y_a" + } + }, + { + "apply": { + "model": "ae2:block/controller/controller_column_conflicted_a", + "x": 90 + }, + "when": { + "state": "conflicted", + "type": "column_z_a" } }, { "apply": { - "model": "ae2:block/controller/controller_column_conflicted", + "model": "ae2:block/controller/controller_column_conflicted_b", "x": 90, "y": 90 }, "when": { "state": "conflicted", - "type": "column_x" + "type": "column_x_b" } }, { "apply": { - "model": "ae2:block/controller/controller_column_conflicted" + "model": "ae2:block/controller/controller_column_conflicted_b" }, "when": { "state": "conflicted", - "type": "column_y" + "type": "column_y_b" } }, { "apply": { - "model": "ae2:block/controller/controller_column_conflicted", + "model": "ae2:block/controller/controller_column_conflicted_b", "x": 90 }, "when": { "state": "conflicted", - "type": "column_z" + "type": "column_z_b" } }, { diff --git a/src/main/resources/assets/ae2/models/block/controller/controller_column_conflicted.json b/src/main/resources/assets/ae2/models/block/controller/controller_column_conflicted.json deleted file mode 100644 index 9126ebebaa3..00000000000 --- a/src/main/resources/assets/ae2/models/block/controller/controller_column_conflicted.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "parent": "block/block", - "textures": { - "block": "ae2:block/controller_column_powered", - "lights": "ae2:block/controller_column_conflict", - "particle": "ae2:block/controller" - }, - "render_type": "cutout", - "elements": [ - { - "faces": { - "down": { - "texture": "#lights", - "uv": [0, 0, 16, 16], - "unlit": true - }, - "east": { - "texture": "#lights", - "uv": [0, 0, 16, 16], - "unlit": true - }, - "north": { - "texture": "#lights", - "uv": [0, 0, 16, 16], - "unlit": true - }, - "south": { - "texture": "#lights", - "uv": [0, 0, 16, 16], - "unlit": true - }, - "up": { - "texture": "#lights", - "uv": [0, 0, 16, 16], - "unlit": true - }, - "west": { - "texture": "#lights", - "uv": [0, 0, 16, 16], - "unlit": true - } - }, - "from": [0, 0, 0], - "shade": false, - "to": [16, 16, 16] - }, - { - "faces": { - "down": { - "texture": "#block", - "uv": [0, 0, 16, 16] - }, - "east": { - "texture": "#block", - "uv": [0, 0, 16, 16] - }, - "north": { - "texture": "#block", - "uv": [0, 0, 16, 16] - }, - "south": { - "texture": "#block", - "uv": [0, 0, 16, 16] - }, - "up": { - "texture": "#block", - "uv": [0, 0, 16, 16] - }, - "west": { - "texture": "#block", - "uv": [0, 0, 16, 16] - } - }, - "from": [0, 0, 0], - "to": [16, 16, 16] - } - ] -} diff --git a/src/main/resources/assets/ae2/models/block/controller/controller_column_conflicted_a.json b/src/main/resources/assets/ae2/models/block/controller/controller_column_conflicted_a.json new file mode 100644 index 00000000000..63fa4daf8a7 --- /dev/null +++ b/src/main/resources/assets/ae2/models/block/controller/controller_column_conflicted_a.json @@ -0,0 +1,7 @@ +{ + "parent": "ae2:block/controller/controller_column_lights", + "textures": { + "block": "ae2:block/controller_column_powered", + "lights": "ae2:block/controller_column_conflict_a" + } +} diff --git a/src/main/resources/assets/ae2/models/block/controller/controller_column_conflicted_b.json b/src/main/resources/assets/ae2/models/block/controller/controller_column_conflicted_b.json new file mode 100644 index 00000000000..741fd66c5f8 --- /dev/null +++ b/src/main/resources/assets/ae2/models/block/controller/controller_column_conflicted_b.json @@ -0,0 +1,7 @@ +{ + "parent": "ae2:block/controller/controller_column_lights", + "textures": { + "block": "ae2:block/controller_column_powered", + "lights": "ae2:block/controller_column_conflict_b" + } +} diff --git a/src/main/resources/assets/ae2/models/block/controller/controller_column_online.json b/src/main/resources/assets/ae2/models/block/controller/controller_column_lights.json similarity index 93% rename from src/main/resources/assets/ae2/models/block/controller/controller_column_online.json rename to src/main/resources/assets/ae2/models/block/controller/controller_column_lights.json index a3c66c7fd32..f700af39f6a 100644 --- a/src/main/resources/assets/ae2/models/block/controller/controller_column_online.json +++ b/src/main/resources/assets/ae2/models/block/controller/controller_column_lights.json @@ -1,8 +1,6 @@ { "parent": "block/block", "textures": { - "block": "ae2:block/controller_column_powered", - "lights": "ae2:block/controller_column_lights", "particle": "ae2:block/controller" }, "render_type": "cutout", diff --git a/src/main/resources/assets/ae2/models/block/controller/controller_column_offline.json b/src/main/resources/assets/ae2/models/block/controller/controller_column_offline.json deleted file mode 100644 index f88d5b0268d..00000000000 --- a/src/main/resources/assets/ae2/models/block/controller/controller_column_offline.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "block/cube_column", - "textures": { - "side": "ae2:block/controller_column", - "end": "ae2:block/controller" - } -} diff --git a/src/main/resources/assets/ae2/models/block/controller/controller_column_offline_a.json b/src/main/resources/assets/ae2/models/block/controller/controller_column_offline_a.json new file mode 100644 index 00000000000..ae2ddc0a2d6 --- /dev/null +++ b/src/main/resources/assets/ae2/models/block/controller/controller_column_offline_a.json @@ -0,0 +1,7 @@ +{ + "parent": "block/cube_column", + "textures": { + "side": "ae2:block/controller_column_a", + "end": "ae2:block/controller_a" + } +} diff --git a/src/main/resources/assets/ae2/models/block/controller/controller_column_offline_b.json b/src/main/resources/assets/ae2/models/block/controller/controller_column_offline_b.json new file mode 100644 index 00000000000..321ce0d675e --- /dev/null +++ b/src/main/resources/assets/ae2/models/block/controller/controller_column_offline_b.json @@ -0,0 +1,7 @@ +{ + "parent": "block/cube_column", + "textures": { + "side": "ae2:block/controller_column_b", + "end": "ae2:block/controller_b" + } +} diff --git a/src/main/resources/assets/ae2/models/block/controller/controller_column_online_a.json b/src/main/resources/assets/ae2/models/block/controller/controller_column_online_a.json new file mode 100644 index 00000000000..191a627603b --- /dev/null +++ b/src/main/resources/assets/ae2/models/block/controller/controller_column_online_a.json @@ -0,0 +1,7 @@ +{ + "parent": "ae2:block/controller/controller_column_lights", + "textures": { + "block": "ae2:block/controller_column_powered", + "lights": "ae2:block/controller_column_lights_a" + } +} diff --git a/src/main/resources/assets/ae2/models/block/controller/controller_column_online_b.json b/src/main/resources/assets/ae2/models/block/controller/controller_column_online_b.json new file mode 100644 index 00000000000..20aeb2f0588 --- /dev/null +++ b/src/main/resources/assets/ae2/models/block/controller/controller_column_online_b.json @@ -0,0 +1,7 @@ +{ + "parent": "ae2:block/controller/controller_column_lights", + "textures": { + "block": "ae2:block/controller_column_powered", + "lights": "ae2:block/controller_column_lights_b" + } +} diff --git a/src/main/resources/assets/ae2/textures/block/controller_column_a.png b/src/main/resources/assets/ae2/textures/block/controller_column_a.png new file mode 100644 index 0000000000000000000000000000000000000000..9c6cc92685cbdb2e80daf25bccf9ee717163d047 GIT binary patch literal 479 zcmV<50U-W~P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf5dZ)S5dnW>Uy%R+0dz@3K~y+Tb(29$ z!$1&)ho&)FYE-;Qp||3{5O0ErfopNqeDAxOmZIxf~NSpYjSqF&3W`0Q5A1-Hi`Zyv|3+M zcE>qs+&^*PLs@LgqN*dHdr}AQ&5-IX%~AiubOdrK0C%{|{E3w;t0v%QA7LPH&lOCR z@U81)-(MGJz-DYRGS)42sWd1BJT#vy$aQn;IGOc=J#bLOBkMqc1ArscA}X3f&Vkxe z&=WVek31EqNzMV#Q_zA%Q6wv?%d81p0MiL5!U0Gfw13!4cBg>-YJhh&?VeKru&tmL zI>6E4235%)a0hf7={Ql?eVSUPnOMXmPBAZywr+~iRK-LIE(RNi!dQf6?C-tGCWO&Na!Q<)W3$B+(GgjNsR59F1Cu zJNx>UYu=Iju%%N|;o5H>)k4-ON|RN58v5&J?qFhCf2nFFe@@S$(_6LVIRBl0(RpXn wgah75oQLHaR;Z{>;O*v{?Qu|ESNkce$SW_`^?Rxp1D(g<>FVdQ&MBb@0C{LxlmGw# literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ae2/textures/block/controller_column_conflict.png b/src/main/resources/assets/ae2/textures/block/controller_column_conflict_b.png similarity index 100% rename from src/main/resources/assets/ae2/textures/block/controller_column_conflict.png rename to src/main/resources/assets/ae2/textures/block/controller_column_conflict_b.png diff --git a/src/main/resources/assets/ae2/textures/block/controller_column_lights_a.png b/src/main/resources/assets/ae2/textures/block/controller_column_lights_a.png new file mode 100644 index 0000000000000000000000000000000000000000..8907273449eaa07c297eac55e3992f0c6d73bd62 GIT binary patch literal 1516 zcmeAS@N?(olHy`uVBq!ia0vp^0ziC#gAF8d_OTz3Vk{1FcVbv~PUa<$!;&U>c zv7h@-A}f&3S>O>_%)r16)Wt2pxK?>@DFXv*qo<2wNQU#;Dc&8it^#e(yClSg7IzEO zG;%2&(JhdBuSFhV0jdX<-J7nV;>(@xD;Bih>CridQ+mr7eDq?T{$~tInbg9$|-FPdPYyJqjhyI0mv*kL?jQ@19=^Y{Oh zrXCSha8>i1(cqmoa|hFb;FojHaG1MY{JL37j^(LgmC|-ywGWdb4i&JeWUUl@(deo_ zJHyd)RqOF@@)K7*y(;hTWqNeZ!F99G%WjBx{OilQ&uQ7J+AD+-g5P_KOj_33&i`l5 zFHxa#wxBXY)&~cy_b(wU1h*C({A3xl)u!&KY>=;E`iEObrP+0^?O69_-u$&wks|Ec z+i0J^T%Fd;n!9H(6RK?$;-v>_u3&ZU0_#oN;#fY1F|Ro97(cZ_qgXh)|ocLf|B~1?=DE-`?P{^~1xH zXM?up+}q;3O7j`dyuH6)G#r(>zFz)s8j5W@{&b!W`(M9czfdCA0p|5Nk$1^Tk2f}^ z?G4dw&)*vbvTfU&NJ(J&sQUXb5yi3}KhAl+3ir4p>2dR@NW
*Qsyts64eim*kO z&(j4Ze(U@4Y{0}}S9HifZIWmR=Z2NvRk=Jb9}1TK*Z!aR?^KRphPWMu)5%NsOV8h% zuS})`sPmtY-@5^(=aw9%{pJD*1~`UbN2x)r~C=c|5KJDPLgjjx)R1G%19e zeLBC_RinuN(?WvJNUn+8lMl+(OXuG)M# Date: Sun, 11 Aug 2024 21:41:06 +0200 Subject: [PATCH 2/3] Controller textures: blocks This extends the color matching of the columns to the blocks (i.e. the corner pieces) as well. It only works for faces on the same plane. Colors on the edge of the block will still not match as it is mathematically impossible. --- .../block/networking/ControllerBlock.java | 12 ++++-- .../assets/ae2/blockstates/controller.json | 39 +++++++++++++++--- .../controller_block_conflicted_a.json | 7 ++++ .../controller_block_conflicted_b.json | 7 ++++ ...e.json => controller_block_offline_a.json} | 2 +- .../controller_block_offline_b.json | 6 +++ ...ed.json => controller_block_online_a.json} | 2 +- ...ne.json => controller_block_online_b.json} | 2 +- .../assets/ae2/models/item/controller.json | 2 +- .../ae2/textures/block/controller_a.png | Bin 0 -> 600 bytes .../{controller.png => controller_b.png} | Bin .../textures/block/controller_conflict_a.png | Bin 0 -> 266 bytes ...conflict.png => controller_conflict_b.png} | Bin .../textures/block/controller_lights_a.png | Bin 0 -> 1642 bytes ....mcmeta => controller_lights_a.png.mcmeta} | 0 ...ler_lights.png => controller_lights_b.png} | Bin .../block/controller_lights_b.png.mcmeta | 6 +++ 17 files changed, 72 insertions(+), 13 deletions(-) create mode 100644 src/main/resources/assets/ae2/models/block/controller/controller_block_conflicted_a.json create mode 100644 src/main/resources/assets/ae2/models/block/controller/controller_block_conflicted_b.json rename src/main/resources/assets/ae2/models/block/controller/{controller_block_offline.json => controller_block_offline_a.json} (60%) create mode 100644 src/main/resources/assets/ae2/models/block/controller/controller_block_offline_b.json rename src/main/resources/assets/ae2/models/block/controller/{controller_block_conflicted.json => controller_block_online_a.json} (73%) rename src/main/resources/assets/ae2/models/block/controller/{controller_block_online.json => controller_block_online_b.json} (73%) create mode 100644 src/main/resources/assets/ae2/textures/block/controller_a.png rename src/main/resources/assets/ae2/textures/block/{controller.png => controller_b.png} (100%) create mode 100644 src/main/resources/assets/ae2/textures/block/controller_conflict_a.png rename src/main/resources/assets/ae2/textures/block/{controller_conflict.png => controller_conflict_b.png} (100%) create mode 100644 src/main/resources/assets/ae2/textures/block/controller_lights_a.png rename src/main/resources/assets/ae2/textures/block/{controller_lights.png.mcmeta => controller_lights_a.png.mcmeta} (100%) rename src/main/resources/assets/ae2/textures/block/{controller_lights.png => controller_lights_b.png} (100%) create mode 100644 src/main/resources/assets/ae2/textures/block/controller_lights_b.png.mcmeta diff --git a/src/main/java/appeng/block/networking/ControllerBlock.java b/src/main/java/appeng/block/networking/ControllerBlock.java index 0a6b735ef7c..026e112ba45 100644 --- a/src/main/java/appeng/block/networking/ControllerBlock.java +++ b/src/main/java/appeng/block/networking/ControllerBlock.java @@ -59,7 +59,7 @@ public String getSerializedName() { * have the usual sub-states. */ public enum ControllerRenderType implements StringRepresentable { - block, column_x_a, column_x_b, column_y_a, column_y_b, column_z_a, column_z_b, inside_a, inside_b; + block_a, block_b, column_x_a, column_x_b, column_y_a, column_y_b, column_z_a, column_z_b, inside_a, inside_b; @Override public String getSerializedName() { @@ -77,7 +77,7 @@ public String getSerializedName() { public ControllerBlock() { super(metalProps().strength(6)); this.registerDefaultState(this.defaultBlockState().setValue(CONTROLLER_STATE, ControllerBlockState.offline) - .setValue(CONTROLLER_TYPE, ControllerRenderType.block)); + .setValue(CONTROLLER_TYPE, ControllerRenderType.block_a)); // TODO this could be block_b theoretically } @Override @@ -107,7 +107,7 @@ public BlockState updateShape(BlockState state, Direction facing, BlockState fac private BlockState getControllerType(BlockState baseState, LevelAccessor level, BlockPos pos) { // Only used for columns, really - ControllerRenderType type = ControllerRenderType.block; + ControllerRenderType type = ControllerRenderType.block_a; int x = pos.getX(); int y = pos.getY(); @@ -146,6 +146,12 @@ private BlockState getControllerType(BlockState baseState, LevelAccessor level, } else { type = ControllerRenderType.inside_b; } + } else { + if (v == 0) { + type = ControllerRenderType.block_a; + } else { + type = ControllerRenderType.block_b; + } } return baseState.setValue(CONTROLLER_TYPE, type); diff --git a/src/main/resources/assets/ae2/blockstates/controller.json b/src/main/resources/assets/ae2/blockstates/controller.json index e3b16ceeee2..18c2e35fbed 100644 --- a/src/main/resources/assets/ae2/blockstates/controller.json +++ b/src/main/resources/assets/ae2/blockstates/controller.json @@ -2,29 +2,56 @@ "multipart": [ { "apply": { - "model": "ae2:block/controller/controller_block_offline" + "model": "ae2:block/controller/controller_block_offline_a" }, "when": { "state": "offline", - "type": "block" + "type": "block_a" } }, { "apply": { - "model": "ae2:block/controller/controller_block_online" + "model": "ae2:block/controller/controller_block_offline_b" + }, + "when": { + "state": "offline", + "type": "block_b" + } + }, + { + "apply": { + "model": "ae2:block/controller/controller_block_online_a" }, "when": { "state": "online", - "type": "block" + "type": "block_a" + } + }, + { + "apply": { + "model": "ae2:block/controller/controller_block_online_b" + }, + "when": { + "state": "online", + "type": "block_b" + } + }, + { + "apply": { + "model": "ae2:block/controller/controller_block_conflicted_a" + }, + "when": { + "state": "conflicted", + "type": "block_a" } }, { "apply": { - "model": "ae2:block/controller/controller_block_conflicted" + "model": "ae2:block/controller/controller_block_conflicted_b" }, "when": { "state": "conflicted", - "type": "block" + "type": "block_b" } }, { diff --git a/src/main/resources/assets/ae2/models/block/controller/controller_block_conflicted_a.json b/src/main/resources/assets/ae2/models/block/controller/controller_block_conflicted_a.json new file mode 100644 index 00000000000..f8fe0f98173 --- /dev/null +++ b/src/main/resources/assets/ae2/models/block/controller/controller_block_conflicted_a.json @@ -0,0 +1,7 @@ +{ + "parent": "ae2:block/controller/controller_block_lights", + "textures": { + "block": "ae2:block/controller_powered", + "lights": "ae2:block/controller_conflict_a" + } +} diff --git a/src/main/resources/assets/ae2/models/block/controller/controller_block_conflicted_b.json b/src/main/resources/assets/ae2/models/block/controller/controller_block_conflicted_b.json new file mode 100644 index 00000000000..b52f5ffbde0 --- /dev/null +++ b/src/main/resources/assets/ae2/models/block/controller/controller_block_conflicted_b.json @@ -0,0 +1,7 @@ +{ + "parent": "ae2:block/controller/controller_block_lights", + "textures": { + "block": "ae2:block/controller_powered", + "lights": "ae2:block/controller_conflict_b" + } +} diff --git a/src/main/resources/assets/ae2/models/block/controller/controller_block_offline.json b/src/main/resources/assets/ae2/models/block/controller/controller_block_offline_a.json similarity index 60% rename from src/main/resources/assets/ae2/models/block/controller/controller_block_offline.json rename to src/main/resources/assets/ae2/models/block/controller/controller_block_offline_a.json index 70ea229dec3..10713666c9d 100644 --- a/src/main/resources/assets/ae2/models/block/controller/controller_block_offline.json +++ b/src/main/resources/assets/ae2/models/block/controller/controller_block_offline_a.json @@ -1,6 +1,6 @@ { "parent": "block/cube_all", "textures": { - "all": "ae2:block/controller" + "all": "ae2:block/controller_a" } } diff --git a/src/main/resources/assets/ae2/models/block/controller/controller_block_offline_b.json b/src/main/resources/assets/ae2/models/block/controller/controller_block_offline_b.json new file mode 100644 index 00000000000..00c8b14ba54 --- /dev/null +++ b/src/main/resources/assets/ae2/models/block/controller/controller_block_offline_b.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "ae2:block/controller_b" + } +} diff --git a/src/main/resources/assets/ae2/models/block/controller/controller_block_conflicted.json b/src/main/resources/assets/ae2/models/block/controller/controller_block_online_a.json similarity index 73% rename from src/main/resources/assets/ae2/models/block/controller/controller_block_conflicted.json rename to src/main/resources/assets/ae2/models/block/controller/controller_block_online_a.json index cb813e899c7..b613b866a64 100644 --- a/src/main/resources/assets/ae2/models/block/controller/controller_block_conflicted.json +++ b/src/main/resources/assets/ae2/models/block/controller/controller_block_online_a.json @@ -2,6 +2,6 @@ "parent": "ae2:block/controller/controller_block_lights", "textures": { "block": "ae2:block/controller_powered", - "lights": "ae2:block/controller_conflict" + "lights": "ae2:block/controller_lights_a" } } diff --git a/src/main/resources/assets/ae2/models/block/controller/controller_block_online.json b/src/main/resources/assets/ae2/models/block/controller/controller_block_online_b.json similarity index 73% rename from src/main/resources/assets/ae2/models/block/controller/controller_block_online.json rename to src/main/resources/assets/ae2/models/block/controller/controller_block_online_b.json index f6c11a74f21..67262225698 100644 --- a/src/main/resources/assets/ae2/models/block/controller/controller_block_online.json +++ b/src/main/resources/assets/ae2/models/block/controller/controller_block_online_b.json @@ -2,6 +2,6 @@ "parent": "ae2:block/controller/controller_block_lights", "textures": { "block": "ae2:block/controller_powered", - "lights": "ae2:block/controller_lights" + "lights": "ae2:block/controller_lights_b" } } diff --git a/src/main/resources/assets/ae2/models/item/controller.json b/src/main/resources/assets/ae2/models/item/controller.json index 8552a05cdb8..258b64b81df 100644 --- a/src/main/resources/assets/ae2/models/item/controller.json +++ b/src/main/resources/assets/ae2/models/item/controller.json @@ -1,3 +1,3 @@ { - "parent": "ae2:block/controller/controller_block_offline" + "parent": "ae2:block/controller/controller_block_offline_a" } diff --git a/src/main/resources/assets/ae2/textures/block/controller_a.png b/src/main/resources/assets/ae2/textures/block/controller_a.png new file mode 100644 index 0000000000000000000000000000000000000000..7f5d83c4f3e14fb0d81ea2c39fd325a564da1c04 GIT binary patch literal 600 zcmV-e0;m0nP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf5dZ)S5dnW>Uy%R+0qsddK~y+TWm8Q{ zTTu`_CMi#)JW~Q)nT7s=?z*!pDU^`LHd30M=teAoQlU_-HP)6YxCn$wx~Uc_eqj7W z6zQt&+}JMM+C^Lmf_;YA*B~`#^2XexXYpq4eKT|Co;kO{ah!iJu#o$XhY#+exw#R= z;-70vL7 zr3i6)_8XlYcf?m{-0s?{*Z|wp)3TY@DE%#opBm31n;t3`*g|(aB70Vo1-JaaKl$!D z$H#lIHJ-G*w2Ae#9r;m@<=htB3m3y98H9o@h(3-AUp|uZb}WP3#vXe65)ypF?-vWd zPYjby9R11*Pb6D7C^)BRZwtdYb0mO??^DmD=R1CsM!2YOm2{R+wFAH-MG^Kf|ZquK!>#C(~MBF=dM zQGfh2m9;pi!Wz|;6WP|8%;%%?G# zwT{tsU9nu7V*0lCQ|=)1 z?+;nb+7rC$SKh1Vh*w&>>f8Ql4-oxQ4j~G>Kz}eWc)I$z JtaD0e0szBhVJrXu literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ae2/textures/block/controller_conflict.png b/src/main/resources/assets/ae2/textures/block/controller_conflict_b.png similarity index 100% rename from src/main/resources/assets/ae2/textures/block/controller_conflict.png rename to src/main/resources/assets/ae2/textures/block/controller_conflict_b.png diff --git a/src/main/resources/assets/ae2/textures/block/controller_lights_a.png b/src/main/resources/assets/ae2/textures/block/controller_lights_a.png new file mode 100644 index 0000000000000000000000000000000000000000..679b01e0a4a97f16065946f6fd0c0fad78267cf1 GIT binary patch literal 1642 zcmeAS@N?(olHy`uVBq!ia0vp^0ziC#gAF8d_OTz3Vk{1FcVbv~PUa<$!;&U>c zv7h@-A}f&3S>O>_%)r1c2*Ql@De)5-7+C*%x;TbpIIj)!?vM=?m@B7uto6tXrIsIz zqAneQNn(q3oOBE9>{ukw^x#k=i(%b_2TBt zfBt{3+kDAu2OoM*myR!ezEfZ1{=x=<&AAgL8bbx=J^9-+N!{3S{^V;WIfhq?9y-jI zb!ds?6BPW-Qlvjk!}eGC{iq%1RxA?TVE9&0)R6hLL(x56R*#9w4RR8^FU4L+Zdh?M zIWO&>so0D^BH#Z!PbsWnKkBfi`PrnW$HHybN3P))M6xW~cotLBHAXwL_=FXy`V-ck zlK*o->GYw?8(dR#Pch4~OZjR4fLr)+PtCzPllUCx2d;0b8PyIr@b|QpaF;NPnMR*E zduIPJrw4B?YfDZ2@p!grZ&Xjc{GXy1v+g{1{k<=%?*EHxe)nJJ*X_4+VQ`8&plryr zTFK^Qbi0Va7QPP~e=<4iRx|$k&*;Jy$)=Pv-$8Dg>ZxCUcIWHHq=#JOx-sKhN7szT zQU%NRZA?o}2tw?AfGrKr6qzBH>%w=GIf=EY{_4ujK*AdBA}6)+^qX59IdMdMRK9ox^Z7q{18v5_{p;tCvLehI`DPuJ?Ok7W?ws^1XBLGcIngR^ z385|OKX3IcYgka)(0^83BI_pih2IQH%{t728~qjdPYb2i{=2(fY@P9{4AvZK6(bHhp=q|3!3i^E@Sx&2zHi5AYb2J`p%=%)$}KxZnm;@HV9{JP}vc7@9x6&n`dz z=CZ)f-01S`D@kdx6%)`ms=tIuq6IN#uURto6n z+6~or-Fm%bc0aZPr{x^`4by(x6c#uaU*71s{JsDCOi)NaVYLxb-k^18@}5!;M#t9- z^0V~~u51!t@SWV0{JM&lqwI}k{9-Yn=d0~<(m!0%_5J+g Date: Sun, 11 Aug 2024 23:07:45 +0200 Subject: [PATCH 3/3] Controller textures: inside This extends the color matching to the inside variants of controller blocks. For those there were also minor bugs in the texture that were corrected as well. --- .../controller_inside_a_conflicted.json | 2 +- .../controller_inside_b_conflicted.json | 2 +- .../ae2/textures/block/controller_inside_a.png | Bin 547 -> 4650 bytes .../block/controller_inside_a_powered.png | Bin 535 -> 4842 bytes .../ae2/textures/block/controller_inside_b.png | Bin 519 -> 4634 bytes .../block/controller_inside_b_powered.png | Bin 548 -> 4835 bytes 6 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/ae2/models/block/controller/controller_inside_a_conflicted.json b/src/main/resources/assets/ae2/models/block/controller/controller_inside_a_conflicted.json index b9320a03b2a..9a6524dfdb2 100644 --- a/src/main/resources/assets/ae2/models/block/controller/controller_inside_a_conflicted.json +++ b/src/main/resources/assets/ae2/models/block/controller/controller_inside_a_conflicted.json @@ -2,6 +2,6 @@ "parent": "ae2:block/controller/controller_block_lights", "textures": { "block": "ae2:block/controller_inside_a_powered", - "lights": "ae2:block/controller_conflict" + "lights": "ae2:block/controller_conflict_a" } } diff --git a/src/main/resources/assets/ae2/models/block/controller/controller_inside_b_conflicted.json b/src/main/resources/assets/ae2/models/block/controller/controller_inside_b_conflicted.json index 2f36e54e263..b8c43ae41e7 100644 --- a/src/main/resources/assets/ae2/models/block/controller/controller_inside_b_conflicted.json +++ b/src/main/resources/assets/ae2/models/block/controller/controller_inside_b_conflicted.json @@ -2,6 +2,6 @@ "parent": "ae2:block/controller/controller_block_lights", "textures": { "block": "ae2:block/controller_inside_b_powered", - "lights": "ae2:block/controller_conflict" + "lights": "ae2:block/controller_conflict_b" } } diff --git a/src/main/resources/assets/ae2/textures/block/controller_inside_a.png b/src/main/resources/assets/ae2/textures/block/controller_inside_a.png index fe0250946c32e79d907ef67a7a2462461b30616c..5adeaec8f19581d7bfc0f72cf54a3bdb645dc84d 100644 GIT binary patch literal 4650 zcmeHKc~nzp7Jter2*m236_jUCE5(=fg(Po?2!tg_5MxwSwwL!_;0aks9wcZ*tl$7H zBZ_SgWpqkKS!NimR!>oD8TW$AXq6cmcibz>VBIP*UjhQ2_MADMGyRX8lf3uc<@eqD zyZ3%4UvYd~l!x0yHwc0}6wz`Oc(QC?S7-3+*WHVQ$BE_Y1V)8hV57;Pr86m*$u&|i zWu>(cWWAz`Z}m6|kA9U_vN1I?yjjvVuf~UYHMvne<$Hziy+3%~HhvV+(YfqKb?8OS zH*K-`-bmt<_1MGHrB6t&^r8U2*G`c!#yMWdir!OE}s+L*iHm8^tgFQE$? zooiUmS`<$`eZHhRW;1`3_kZ^7THWbD?_DBlt($uYf<_e5;o#*eFuh#Jk9nPvOK>O7}^nisld?bPGP=NS>n^F0aK#;nVi z8W*q}LuOY@su-8F<5=&sLT~X_usWv^N!yy8CkOIVU0ER)ZK+ny@4Yq z$o)?60|eo7c8nJqC#5{=?EH!I_r3o<*CSni=TIZ`$JxGAx&A!^>zuxP;=Pr(Sb@cY zE@@Xm-1w<^Z4GUmKKClmByW5Fg0Lp{7Hd!ZkEu0l7AqDNr4=3hs#5i>_|fj>+;w|Z zHG3}0UbwHx&7O89yWGEs7&U6@l-Xe(lsc6iRu@yUdfelaiLZ|C4^eQ66Dgi)=AYf1 zDj&P_uDO17V&Q{;4+17QG^EUYM2zd~7-M*O`2ZQ0|4jIDr!UXw{^T#x!(TtmdI^!$b$5Jj++a-z zR6T8II_U7H!#yi@Ub^n(=4QJ6$*sH%p!ITS&|(S7Sd1{}I5=t0P#mky2zn2Kfr0hEwTu^l}q5e|emmSe`*hNp{FAw_qy<0CW_C z!&Y6U-i%pgY&$Ln-fdzo8@8J;88UW)G9C^$m?#+Kpd20&VWo2f>{)Jbu!+=SDtTl- z1X#(~=?r7UxLk|H!m$WB22&cBFO^EUJONiAK!62e&eb!x715jhZ4iAJa>`7YXd^=# z^so&R*BG)H8Ji9C@SFH_Mx}B9UT^Ma0r0`K;zll?!{h37+@T(3CL#xb^au2-9%eO| zRIZ9L8?sFV6_G>f8ULXWBr)J`%r<4((;*2il}YJ{9xq-;Gg{P3q*tY#K(m>E8W`C6u zB8gZ;Ne~H1k_al5@DYiS6e6fZtP%1=8i__i4uMkW%?z$5C>s<2=gU7~r`Z)Y!m-eJg^VrW@CGIEnK+{b z4qygoJ!!C*2UTiXN6lw&8=ri!02K@YCe_Kx9VGF()MA3Vf$EMIMJ7a z8PB2mDh{yvR75(iPou#3(ciFd8 zcMa3^P7J)0@o;zj-{^81yi8Gg@DIoWu1dudT2_H;ma}F~lpJb;nxP-^Huxk0$tYv= zVlxD}kFkA6tRhoNfzX9fC?j0%yLx+m81%1=jyd2meL*1)RZE(5n;Vz4&StGWVy*ft zx!_#n?x`*}*PYH77n@$Ag!k=gQ@IwZ+^UN5;R4l+Dwg9Ho1ScDx#mPid*r%2sBUpB zJoZC$*tN-RNp+> z1-f0N*jo|YvFPv@P|IO#ea=U65Tu)e&=aqjmy}75y4|)YVCX^gQ|9PcAb0VfS zdn@7?*L3q{R@k;XkfY1Vo%#C8FMI;E3E~#Z*AKbLv;OvinX;iia>RGEv|?Lgs{1@l zel)oL3cmZm^A|539oVe;uxG<9`RSiT)2h_TCj&cPHg`ApB>nDqamg+D;wHz5$=Avi z!G)tcJ0*NH!>P9HlhB+cp3u|Ur1sFQb?rG%ZVNlEt*R-0&a4MJp3k|uxvtC|x!h9L z(xtY1S+}FC_Hjd1PGK_1_pN*1{_$wZmmaUqspz} zbHwrbw|O)EK}ui0E*e66WvU*B>1TdkQMYzO Q1SmM9h=`Ndhoye}UwPrl4*&oF delta 522 zcmV+l0`>i>B%=h7B!3BTNLh0L01FcU01FcV0GgZ_0005iNklrj7DCrLB1G{ZVOy);Q%+neTW5*NkGR(@mkdmR8q;|X_n_W=085TFu?X)x$QK4+!r zy2=&;r{VDMI3-In0D}D^Q$RP-(2eDDtm~`WrRuLP5z0p=uO4W4TLYqZS7{w-L1^Y)!kh3&nbaBJh_J1aRFeKP}Z&36HT>wsw&kGH7 z&=$gsuKva(NldIfO#NP`pq8^e-B$*|Q#uLMLI{j;6dL^?2KNwP9wL#RVq@cUm zLh$|D#{x~7;qM(9!9RWeQ6zgU@0o~U6sxA|n!zd$nHE_4rIhL)Ce8bMSb44s00000 MNkvXXt^-0~f{TFgVgLXD diff --git a/src/main/resources/assets/ae2/textures/block/controller_inside_a_powered.png b/src/main/resources/assets/ae2/textures/block/controller_inside_a_powered.png index 54a7a311a24f574570a8cdc296070ce82d6a4cbd..3bada30409544a105c269b7e59141d5a6243e2ba 100644 GIT binary patch literal 4842 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 CufePU delta 493 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 N07*qoL