PipeState

- Implemented dynamic models and blockstates of copper pipes
This commit is contained in:
simibubi 2020-06-14 22:24:46 +02:00
parent 0c150ff86f
commit 20de324b72
57 changed files with 1968 additions and 42 deletions

View file

@ -36,6 +36,7 @@ e5e3757e99c139d67b2a70288466d8a74d818841 assets\create\blockstates\cogwheel.json
f8eff64c75fc599e9a44a003f54ae9931cd8ce7c assets\create\blockstates\copper_block.json
cabf6b8c59eb0e3d56a0a5a856ca058bb3200882 assets\create\blockstates\copper_casing.json
3355a852cdc717e257ca19b3db836068964733e3 assets\create\blockstates\copper_ore.json
bc3bceb50a42599ace49c26240767afd02df565f assets\create\blockstates\copper_pipe.json
dc76bca1fdd41c8e6ada27fd59a2b73d7adc9596 assets\create\blockstates\copper_shingles.json
3df0d5d5170a2f6cbab0f8a9bc8f2d64229589af assets\create\blockstates\creative_crate.json
f0031f5e970b3d5695472ed384950b8631b015ed assets\create\blockstates\creative_motor.json
@ -273,7 +274,7 @@ b7829c2ef2c47188713f8cab21b2c9bc7f9c5b79 assets\create\blockstates\portable_stor
e8b0a401c10d1ba67ed71ba31bd5f9bc28571b65 assets\create\blockstates\powered_toggle_latch.json
3a739f9d4276828d83f2d2750bf3227c87bcd438 assets\create\blockstates\pulley_magnet.json
469e430d96cb0a5e1aaf6b7cc5d401d488c9e600 assets\create\blockstates\pulse_repeater.json
4e1fb033316e9230d2f024d67c27940ea731643a assets\create\blockstates\radial_chassis.json
ab2a1bf8f37f1c64d00538867f4c3a97195bd3c4 assets\create\blockstates\radial_chassis.json
8929677f2cc5354aa19ef182af69f9f0b41eb242 assets\create\blockstates\redstone_contact.json
c29213b77ac0c78d8979c5f6188d2b265696f9b9 assets\create\blockstates\redstone_link.json
1eac804cba08aebb5f4646758ae1ef9b32e01365 assets\create\blockstates\reinforced_rail.json
@ -325,8 +326,8 @@ c60c3115fd6eeaa3a696428a87a74d184ab7d62d assets\create\blockstates\weathered_lim
c77b46d8b459e5c7cc495393546f3fcca8a1fa1d assets\create\blockstates\weathered_limestone_pillar.json
7f39521b211441f5c3e06d60c5978cebe16cacfb assets\create\blockstates\zinc_block.json
b7181bcd8182b2f17088e5aa881f374c9c65470c assets\create\blockstates\zinc_ore.json
6bf74a9e1f74b41f53399c1f817942b01a010bf0 assets\create\lang\en_ud.json
966d4802e7f260d852e422c5f47b2a9389557373 assets\create\lang\en_us.json
88f2465e94bac0cd25432195825faaa457fa8b0e assets\create\lang\en_ud.json
8cb43c2910b0dedf4dd87adc900c165bec3d192f assets\create\lang\en_us.json
846200eb548d3bfa2e77b41039de159b4b6cfb45 assets\create\models\block\acacia_window.json
1930fa3a3c98d53dd19e4ee7f55bc27fd47aa281 assets\create\models\block\acacia_window_pane_noside.json
1763ea2c9b981d187f5031ba608f3d5d3be3986a assets\create\models\block\acacia_window_pane_noside_alt.json
@ -399,6 +400,27 @@ ac07568fa7b2d3fa84d0fe89a498514d30514291 assets\create\models\block\chiseled_sco
ecb2b85ee210dce329d2be66b98d0f0d4e6fc223 assets\create\models\block\chiseled_weathered_limestone.json
f9a3f0939ea43b404eb2826b94211a25fca5ebc2 assets\create\models\block\clockwork_bearing.json
70406933cc4fa5471af6e562fd84a397347dba17 assets\create\models\block\copper_casing.json
84d3ba609f4d977977ebb44b46a1623879b9f30d assets\create\models\block\copper_pipe\ld_x.json
a185744cb718e72b8ccd4cdf7b9f85dfed62227b assets\create\models\block\copper_pipe\ld_y.json
ce12231c7d40f242cbb2e4a789c01777e8c2e189 assets\create\models\block\copper_pipe\ld_z.json
ad91bc4b916fb0445f051680b1710f20c7e818c3 assets\create\models\block\copper_pipe\lr_x.json
a4d8803d7ced28ba0c5c40cc694914ca344bb9cc assets\create\models\block\copper_pipe\lr_y.json
33cf12086e8362cd84da0fc684156323537ac31a assets\create\models\block\copper_pipe\lr_z.json
c5c636b16425d7fa827361512f9233c6cb054945 assets\create\models\block\copper_pipe\lu_x.json
0e5f387899a23902d84c27277665a221f29afb1f assets\create\models\block\copper_pipe\lu_y.json
cbf217c4971622a70d151623ff9f6edfd7f881a4 assets\create\models\block\copper_pipe\lu_z.json
86fbb2a8d0475044394137a7a7aec2c58bff9a3b assets\create\models\block\copper_pipe\none_x.json
d8bc59c2a86253715c8e4160115d9b1ba7e536c9 assets\create\models\block\copper_pipe\none_y.json
718305fffa1b9e78bf03690fbe655b86bae40ae1 assets\create\models\block\copper_pipe\none_z.json
1d99c2889d06401b98207a924489337b0c77026f assets\create\models\block\copper_pipe\rd_x.json
521ddedf28ed1a1fed78d12f505e22cd45120caa assets\create\models\block\copper_pipe\rd_y.json
bd774fb0ab18e94c1c8969acfaca4d7b7b9a8564 assets\create\models\block\copper_pipe\rd_z.json
d8e06415a5f05fcd86004cb45207144f5ae74afe assets\create\models\block\copper_pipe\ru_x.json
d6c91e3025c48fee267c10acb9d0f77036f178e4 assets\create\models\block\copper_pipe\ru_y.json
df11c86477a785f7c61b2e0b491996fb49527a76 assets\create\models\block\copper_pipe\ru_z.json
d29742ac5c34f856adf29e3c4ce6e5abf5c17e0e assets\create\models\block\copper_pipe\ud_x.json
40b288882daf5a47759f8d9db27f90b17ad1d8e0 assets\create\models\block\copper_pipe\ud_y.json
657ae1d3a5de431ee852eb12006a1ce211944607 assets\create\models\block\copper_pipe\ud_z.json
1ef7060b0ca7e9c0bfc8151f98ca08da31862cda assets\create\models\block\crate\brass\bottom.json
4ef2c7c3018f2d219f159a3ce58ceb00610b9c5d assets\create\models\block\crate\brass\left.json
c76cfec1279d307c52f9502fdba3425f38219168 assets\create\models\block\crate\brass\right.json
@ -940,6 +962,7 @@ dcb09deae110077bcddf090996b51cc66e9a7de3 assets\create\models\item\cogwheel.json
c5bcfba46f5824654dedaa2c5d5f42deb29e3baf assets\create\models\item\copper_ingot.json
3cdb321193355af630ee0e0b18bf24a9469aabad assets\create\models\item\copper_nugget.json
51be7da59368681522de870f1e09036dac55aa77 assets\create\models\item\copper_ore.json
e950d4812c3488ca86f58260638208e8f64042f2 assets\create\models\item\copper_pipe.json
200ef8378a9c014571c414433d4aef73a204dc01 assets\create\models\item\copper_sheet.json
d7cb2f7bac8fae893fc5179af8140786a908f3f5 assets\create\models\item\copper_shingles.json
4e9126b349d55c65aa5407f05700579e52101c1f assets\create\models\item\crafter_slot_cover.json
@ -1712,6 +1735,7 @@ d76113310fc56eca6382d44df174096f2210d416 data\create\loot_tables\blocks\clutch.j
f38802b919c49f162f102d6e5d94113f05bf4ab1 data\create\loot_tables\blocks\copper_block.json
5a65a18ea787130ac7b8f5652bfa5ed187446649 data\create\loot_tables\blocks\copper_casing.json
31a51237763c374b7cdf39b9b62c14e965871047 data\create\loot_tables\blocks\copper_ore.json
f5930a4583844c3fc52b515131d54946dc6b24e0 data\create\loot_tables\blocks\copper_pipe.json
a5a7ba88a1d38da83b37bbe842dc7cc0544f37be data\create\loot_tables\blocks\copper_shingles.json
b160899aa785dc54d8c6cc095337f70b81f3e44f data\create\loot_tables\blocks\creative_crate.json
d8f2f8921b9200b1d9476a77ee1be32c25308ac3 data\create\loot_tables\blocks\creative_motor.json

View file

@ -0,0 +1,425 @@
{
"multipart": [
{
"when": {
"down": "true"
},
"apply": {
"model": "create:block/copper_pipe/block_end",
"x": 180,
"y": 90
}
},
{
"when": {
"up": "true"
},
"apply": {
"model": "create:block/copper_pipe/block_end",
"y": 90
}
},
{
"when": {
"north": "true"
},
"apply": {
"model": "create:block/copper_pipe/block_end",
"x": 90
}
},
{
"when": {
"south": "true"
},
"apply": {
"model": "create:block/copper_pipe/block_end",
"x": 90,
"y": 180
}
},
{
"when": {
"west": "true"
},
"apply": {
"model": "create:block/copper_pipe/block_end",
"x": 90,
"y": 270
}
},
{
"when": {
"east": "true"
},
"apply": {
"model": "create:block/copper_pipe/block_end",
"x": 90,
"y": 90
}
},
{
"when": {
"south": "false",
"north": "true",
"down": "false",
"up": "true"
},
"apply": {
"model": "create:block/copper_pipe/lu_x"
}
},
{
"when": {
"south": "true",
"north": "false",
"down": "false",
"up": "true"
},
"apply": {
"model": "create:block/copper_pipe/ru_x"
}
},
{
"when": {
"south": "false",
"north": "true",
"down": "true",
"up": "false"
},
"apply": {
"model": "create:block/copper_pipe/ld_x"
}
},
{
"when": {
"south": "true",
"north": "false",
"down": "true",
"up": "false"
},
"apply": {
"model": "create:block/copper_pipe/rd_x"
}
},
{
"when": {
"south": "false",
"north": "false",
"down": "true",
"up": "true"
},
"apply": {
"model": "create:block/copper_pipe/ud_x"
}
},
{
"when": {
"south": "false",
"north": "false",
"down": "false",
"up": "true"
},
"apply": {
"model": "create:block/copper_pipe/ud_x"
}
},
{
"when": {
"south": "false",
"north": "false",
"down": "true",
"up": "false"
},
"apply": {
"model": "create:block/copper_pipe/ud_x"
}
},
{
"when": {
"south": "true",
"north": "true",
"down": "false",
"up": "false"
},
"apply": {
"model": "create:block/copper_pipe/lr_x"
}
},
{
"when": {
"south": "false",
"north": "true",
"down": "false",
"up": "false"
},
"apply": {
"model": "create:block/copper_pipe/lr_x"
}
},
{
"when": {
"south": "true",
"north": "false",
"down": "false",
"up": "false"
},
"apply": {
"model": "create:block/copper_pipe/lr_x"
}
},
{
"when": {
"south": "false",
"north": "false",
"down": "false",
"up": "false"
},
"apply": {
"model": "create:block/copper_pipe/none_x"
}
},
{
"when": {
"south": "true",
"north": "false",
"east": "false",
"west": "true"
},
"apply": {
"model": "create:block/copper_pipe/lu_y"
}
},
{
"when": {
"south": "true",
"north": "false",
"east": "true",
"west": "false"
},
"apply": {
"model": "create:block/copper_pipe/ru_y"
}
},
{
"when": {
"south": "false",
"north": "true",
"east": "false",
"west": "true"
},
"apply": {
"model": "create:block/copper_pipe/ld_y"
}
},
{
"when": {
"south": "false",
"north": "true",
"east": "true",
"west": "false"
},
"apply": {
"model": "create:block/copper_pipe/rd_y"
}
},
{
"when": {
"south": "true",
"north": "true",
"east": "false",
"west": "false"
},
"apply": {
"model": "create:block/copper_pipe/ud_y"
}
},
{
"when": {
"south": "true",
"north": "false",
"east": "false",
"west": "false"
},
"apply": {
"model": "create:block/copper_pipe/ud_y"
}
},
{
"when": {
"south": "false",
"north": "true",
"east": "false",
"west": "false"
},
"apply": {
"model": "create:block/copper_pipe/ud_y"
}
},
{
"when": {
"south": "false",
"north": "false",
"east": "true",
"west": "true"
},
"apply": {
"model": "create:block/copper_pipe/lr_y"
}
},
{
"when": {
"south": "false",
"north": "false",
"east": "false",
"west": "true"
},
"apply": {
"model": "create:block/copper_pipe/lr_y"
}
},
{
"when": {
"south": "false",
"north": "false",
"east": "true",
"west": "false"
},
"apply": {
"model": "create:block/copper_pipe/lr_y"
}
},
{
"when": {
"south": "false",
"north": "false",
"east": "false",
"west": "false"
},
"apply": {
"model": "create:block/copper_pipe/none_y"
}
},
{
"when": {
"down": "false",
"east": "true",
"west": "false",
"up": "true"
},
"apply": {
"model": "create:block/copper_pipe/lu_z"
}
},
{
"when": {
"down": "false",
"east": "false",
"west": "true",
"up": "true"
},
"apply": {
"model": "create:block/copper_pipe/ru_z"
}
},
{
"when": {
"down": "true",
"east": "true",
"west": "false",
"up": "false"
},
"apply": {
"model": "create:block/copper_pipe/ld_z"
}
},
{
"when": {
"down": "true",
"east": "false",
"west": "true",
"up": "false"
},
"apply": {
"model": "create:block/copper_pipe/rd_z"
}
},
{
"when": {
"down": "true",
"east": "false",
"west": "false",
"up": "true"
},
"apply": {
"model": "create:block/copper_pipe/ud_z"
}
},
{
"when": {
"down": "false",
"east": "false",
"west": "false",
"up": "true"
},
"apply": {
"model": "create:block/copper_pipe/ud_z"
}
},
{
"when": {
"down": "true",
"east": "false",
"west": "false",
"up": "false"
},
"apply": {
"model": "create:block/copper_pipe/ud_z"
}
},
{
"when": {
"down": "false",
"east": "true",
"west": "true",
"up": "false"
},
"apply": {
"model": "create:block/copper_pipe/lr_z"
}
},
{
"when": {
"down": "false",
"east": "true",
"west": "false",
"up": "false"
},
"apply": {
"model": "create:block/copper_pipe/lr_z"
}
},
{
"when": {
"down": "false",
"east": "false",
"west": "true",
"up": "false"
},
"apply": {
"model": "create:block/copper_pipe/lr_z"
}
},
{
"when": {
"down": "false",
"east": "false",
"west": "false",
"up": "false"
},
"apply": {
"model": "create:block/copper_pipe/none_z"
}
}
]
}

View file

@ -149,8 +149,8 @@
},
{
"when": {
"sticky_north": "true",
"axis": "x"
"axis": "x",
"sticky_north": "true"
},
"apply": {
"model": "create:block/radial_chassis_side_x_sticky"
@ -158,8 +158,8 @@
},
{
"when": {
"sticky_north": "true",
"axis": "y"
"axis": "y",
"sticky_north": "true"
},
"apply": {
"model": "create:block/radial_chassis_side_y_sticky",
@ -168,8 +168,8 @@
},
{
"when": {
"sticky_north": "true",
"axis": "z"
"axis": "z",
"sticky_north": "true"
},
"apply": {
"model": "create:block/radial_chassis_side_x_sticky",
@ -178,8 +178,8 @@
},
{
"when": {
"sticky_north": "false",
"axis": "x"
"axis": "x",
"sticky_north": "false"
},
"apply": {
"model": "create:block/radial_chassis_side_x"
@ -187,8 +187,8 @@
},
{
"when": {
"sticky_north": "false",
"axis": "y"
"axis": "y",
"sticky_north": "false"
},
"apply": {
"model": "create:block/radial_chassis_side_y",
@ -197,8 +197,8 @@
},
{
"when": {
"sticky_north": "false",
"axis": "z"
"axis": "z",
"sticky_north": "false"
},
"apply": {
"model": "create:block/radial_chassis_side_x",

View file

@ -37,6 +37,7 @@
"block.create.copper_block": "\u029E\u0254o\u05DF\u15FA \u0279\u01DDddo\u0186",
"block.create.copper_casing": "bu\u0131s\u0250\u0186 \u0279\u01DDddo\u0186",
"block.create.copper_ore": "\u01DD\u0279O \u0279\u01DDddo\u0186",
"block.create.copper_pipe": "\u01DDd\u0131\u0500 \u0279\u01DDddo\u0186",
"block.create.copper_shingles": "s\u01DD\u05DFbu\u0131\u0265S \u0279\u01DDddo\u0186",
"block.create.creative_crate": "\u01DD\u0287\u0250\u0279\u0186 \u01DD\u028C\u0131\u0287\u0250\u01DD\u0279\u0186",
"block.create.creative_motor": "\u0279o\u0287oW \u01DD\u028C\u0131\u0287\u0250\u01DD\u0279\u0186",

View file

@ -40,6 +40,7 @@
"block.create.copper_block": "Copper Block",
"block.create.copper_casing": "Copper Casing",
"block.create.copper_ore": "Copper Ore",
"block.create.copper_pipe": "Copper Pipe",
"block.create.copper_shingles": "Copper Shingles",
"block.create.creative_crate": "Creative Crate",
"block.create.creative_motor": "Creative Motor",

View file

@ -0,0 +1,37 @@
{
"parent": "create:block/copper_pipe/core_x",
"elements": [
{
"from": [
4,
4,
4
],
"to": [
12,
12,
12
],
"faces": {
"west": {
"texture": "#0",
"uv": [
12.0,
8.0,
16.0,
12.0
]
},
"east": {
"texture": "#0",
"uv": [
16.0,
8.0,
12.0,
12.0
]
}
}
}
]
}

View file

@ -0,0 +1,37 @@
{
"parent": "create:block/copper_pipe/core_y",
"elements": [
{
"from": [
4,
4,
4
],
"to": [
12,
12,
12
],
"faces": {
"down": {
"texture": "#0",
"uv": [
12.0,
8.0,
16.0,
12.0
]
},
"up": {
"texture": "#0",
"uv": [
12.0,
12.0,
16.0,
8.0
]
}
}
}
]
}

View file

@ -0,0 +1,37 @@
{
"parent": "create:block/copper_pipe/core_z",
"elements": [
{
"from": [
4,
4,
4
],
"to": [
12,
12,
12
],
"faces": {
"north": {
"texture": "#0",
"uv": [
12.0,
8.0,
16.0,
12.0
]
},
"south": {
"texture": "#0",
"uv": [
16.0,
8.0,
12.0,
12.0
]
}
}
}
]
}

View file

@ -0,0 +1,37 @@
{
"parent": "create:block/copper_pipe/core_x",
"elements": [
{
"from": [
4,
4,
4
],
"to": [
12,
12,
12
],
"faces": {
"west": {
"texture": "#0",
"uv": [
4.0,
12.0,
8.0,
16.0
]
},
"east": {
"texture": "#0",
"uv": [
8.0,
12.0,
4.0,
16.0
]
}
}
}
]
}

View file

@ -0,0 +1,37 @@
{
"parent": "create:block/copper_pipe/core_y",
"elements": [
{
"from": [
4,
4,
4
],
"to": [
12,
12,
12
],
"faces": {
"down": {
"texture": "#0",
"uv": [
4.0,
12.0,
8.0,
16.0
]
},
"up": {
"texture": "#0",
"uv": [
4.0,
16.0,
8.0,
12.0
]
}
}
}
]
}

View file

@ -0,0 +1,37 @@
{
"parent": "create:block/copper_pipe/core_z",
"elements": [
{
"from": [
4,
4,
4
],
"to": [
12,
12,
12
],
"faces": {
"north": {
"texture": "#0",
"uv": [
4.0,
12.0,
8.0,
16.0
]
},
"south": {
"texture": "#0",
"uv": [
8.0,
12.0,
4.0,
16.0
]
}
}
}
]
}

View file

@ -0,0 +1,37 @@
{
"parent": "create:block/copper_pipe/core_x",
"elements": [
{
"from": [
4,
4,
4
],
"to": [
12,
12,
12
],
"faces": {
"west": {
"texture": "#0",
"uv": [
8.0,
12.0,
12.0,
16.0
]
},
"east": {
"texture": "#0",
"uv": [
12.0,
12.0,
8.0,
16.0
]
}
}
}
]
}

View file

@ -0,0 +1,37 @@
{
"parent": "create:block/copper_pipe/core_y",
"elements": [
{
"from": [
4,
4,
4
],
"to": [
12,
12,
12
],
"faces": {
"down": {
"texture": "#0",
"uv": [
8.0,
12.0,
12.0,
16.0
]
},
"up": {
"texture": "#0",
"uv": [
8.0,
16.0,
12.0,
12.0
]
}
}
}
]
}

View file

@ -0,0 +1,37 @@
{
"parent": "create:block/copper_pipe/core_z",
"elements": [
{
"from": [
4,
4,
4
],
"to": [
12,
12,
12
],
"faces": {
"north": {
"texture": "#0",
"uv": [
8.0,
12.0,
12.0,
16.0
]
},
"south": {
"texture": "#0",
"uv": [
12.0,
12.0,
8.0,
16.0
]
}
}
}
]
}

View file

@ -0,0 +1,37 @@
{
"parent": "create:block/copper_pipe/core_x",
"elements": [
{
"from": [
4,
4,
4
],
"to": [
12,
12,
12
],
"faces": {
"west": {
"texture": "#0",
"uv": [
12.0,
12.0,
16.0,
16.0
]
},
"east": {
"texture": "#0",
"uv": [
16.0,
12.0,
12.0,
16.0
]
}
}
}
]
}

View file

@ -0,0 +1,37 @@
{
"parent": "create:block/copper_pipe/core_y",
"elements": [
{
"from": [
4,
4,
4
],
"to": [
12,
12,
12
],
"faces": {
"down": {
"texture": "#0",
"uv": [
12.0,
12.0,
16.0,
16.0
]
},
"up": {
"texture": "#0",
"uv": [
12.0,
16.0,
16.0,
12.0
]
}
}
}
]
}

View file

@ -0,0 +1,37 @@
{
"parent": "create:block/copper_pipe/core_z",
"elements": [
{
"from": [
4,
4,
4
],
"to": [
12,
12,
12
],
"faces": {
"north": {
"texture": "#0",
"uv": [
12.0,
12.0,
16.0,
16.0
]
},
"south": {
"texture": "#0",
"uv": [
16.0,
12.0,
12.0,
16.0
]
}
}
}
]
}

View file

@ -0,0 +1,37 @@
{
"parent": "create:block/copper_pipe/core_x",
"elements": [
{
"from": [
4,
4,
4
],
"to": [
12,
12,
12
],
"faces": {
"west": {
"texture": "#0",
"uv": [
8.0,
8.0,
12.0,
12.0
]
},
"east": {
"texture": "#0",
"uv": [
12.0,
8.0,
8.0,
12.0
]
}
}
}
]
}

View file

@ -0,0 +1,37 @@
{
"parent": "create:block/copper_pipe/core_y",
"elements": [
{
"from": [
4,
4,
4
],
"to": [
12,
12,
12
],
"faces": {
"down": {
"texture": "#0",
"uv": [
8.0,
8.0,
12.0,
12.0
]
},
"up": {
"texture": "#0",
"uv": [
8.0,
12.0,
12.0,
8.0
]
}
}
}
]
}

View file

@ -0,0 +1,37 @@
{
"parent": "create:block/copper_pipe/core_z",
"elements": [
{
"from": [
4,
4,
4
],
"to": [
12,
12,
12
],
"faces": {
"north": {
"texture": "#0",
"uv": [
8.0,
8.0,
12.0,
12.0
]
},
"south": {
"texture": "#0",
"uv": [
12.0,
8.0,
8.0,
12.0
]
}
}
}
]
}

View file

@ -0,0 +1,37 @@
{
"parent": "create:block/copper_pipe/core_x",
"elements": [
{
"from": [
4,
4,
4
],
"to": [
12,
12,
12
],
"faces": {
"west": {
"texture": "#0",
"uv": [
0.0,
12.0,
4.0,
16.0
]
},
"east": {
"texture": "#0",
"uv": [
4.0,
12.0,
0.0,
16.0
]
}
}
}
]
}

View file

@ -0,0 +1,37 @@
{
"parent": "create:block/copper_pipe/core_y",
"elements": [
{
"from": [
4,
4,
4
],
"to": [
12,
12,
12
],
"faces": {
"down": {
"texture": "#0",
"uv": [
0.0,
12.0,
4.0,
16.0
]
},
"up": {
"texture": "#0",
"uv": [
0.0,
16.0,
4.0,
12.0
]
}
}
}
]
}

View file

@ -0,0 +1,37 @@
{
"parent": "create:block/copper_pipe/core_z",
"elements": [
{
"from": [
4,
4,
4
],
"to": [
12,
12,
12
],
"faces": {
"north": {
"texture": "#0",
"uv": [
0.0,
12.0,
4.0,
16.0
]
},
"south": {
"texture": "#0",
"uv": [
4.0,
12.0,
0.0,
16.0
]
}
}
}
]
}

View file

@ -0,0 +1,37 @@
{
"parent": "create:block/copper_pipe/core_x",
"elements": [
{
"from": [
4,
4,
4
],
"to": [
12,
12,
12
],
"faces": {
"west": {
"texture": "#0",
"uv": [
0.0,
8.0,
4.0,
12.0
]
},
"east": {
"texture": "#0",
"uv": [
4.0,
8.0,
0.0,
12.0
]
}
}
}
]
}

View file

@ -0,0 +1,37 @@
{
"parent": "create:block/copper_pipe/core_y",
"elements": [
{
"from": [
4,
4,
4
],
"to": [
12,
12,
12
],
"faces": {
"down": {
"texture": "#0",
"uv": [
0.0,
8.0,
4.0,
12.0
]
},
"up": {
"texture": "#0",
"uv": [
0.0,
12.0,
4.0,
8.0
]
}
}
}
]
}

View file

@ -0,0 +1,37 @@
{
"parent": "create:block/copper_pipe/core_z",
"elements": [
{
"from": [
4,
4,
4
],
"to": [
12,
12,
12
],
"faces": {
"north": {
"texture": "#0",
"uv": [
0.0,
8.0,
4.0,
12.0
]
},
"south": {
"texture": "#0",
"uv": [
4.0,
8.0,
0.0,
12.0
]
}
}
}
]
}

View file

@ -0,0 +1,3 @@
{
"parent": "create:block/copper_pipe/item"
}

View file

@ -0,0 +1,19 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "create:copper_pipe"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View file

@ -73,9 +73,17 @@ public enum AllBlockPartials {
SYMMETRY_PLANE("symmetry_effect/plane"),
SYMMETRY_CROSSPLANE("symmetry_effect/crossplane"),
SYMMETRY_TRIPLEPLANE("symmetry_effect/tripleplane"),
COPPER_PIPE_CASING("copper_pipe/casing"),
COPPER_PIPE_RIM_UP("copper_pipe/rim/up"),
COPPER_PIPE_RIM_DOWN("copper_pipe/rim/down"),
COPPER_PIPE_RIM_EAST("copper_pipe/rim/east"),
COPPER_PIPE_RIM_WEST("copper_pipe/rim/west"),
COPPER_PIPE_RIM_NORTH("copper_pipe/rim/north"),
COPPER_PIPE_RIM_SOUTH("copper_pipe/rim/south"),
;
private ResourceLocation modelLocation;
private IBakedModel bakedModel;

View file

@ -40,8 +40,8 @@ import com.simibubi.create.content.contraptions.components.structureMovement.cha
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.LinearChassisBlock.ChassisCTBehaviour;
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.RadialChassisBlock;
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerBlock;
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerBlockItem;
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerBlock.MinecartAnchorBlock;
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerBlockItem;
import com.simibubi.create.content.contraptions.components.structureMovement.piston.MechanicalPistonBlock;
import com.simibubi.create.content.contraptions.components.structureMovement.piston.MechanicalPistonHeadBlock;
import com.simibubi.create.content.contraptions.components.structureMovement.piston.PistonExtensionPoleBlock;
@ -49,6 +49,8 @@ import com.simibubi.create.content.contraptions.components.structureMovement.pul
import com.simibubi.create.content.contraptions.components.tracks.ReinforcedRailBlock;
import com.simibubi.create.content.contraptions.components.turntable.TurntableBlock;
import com.simibubi.create.content.contraptions.components.waterwheel.WaterWheelBlock;
import com.simibubi.create.content.contraptions.fluids.PipeBlock;
import com.simibubi.create.content.contraptions.fluids.PipeModel;
import com.simibubi.create.content.contraptions.processing.BasinBlock;
import com.simibubi.create.content.contraptions.relays.advanced.SpeedControllerBlock;
import com.simibubi.create.content.contraptions.relays.advanced.sequencer.SequencedGearshiftBlock;
@ -385,6 +387,19 @@ public class AllBlocks {
.transform(ModelGen.customItemModel("gauge", "_", "item"))
.register();
// Fluids
public static final BlockEntry<PipeBlock> COPPER_PIPE =
REGISTRATE.block("copper_pipe", PipeBlock::new)
.initialProperties(SharedProperties::softMetal)
.blockstate(BlockStateGen.pipe())
.onRegister(CreateRegistrate.blockModel(() -> PipeModel::new))
.item()
.transform(customItemModel())
.register();
// Contraptions
public static final BlockEntry<MechanicalPistonBlock> MECHANICAL_PISTON =
REGISTRATE.block("mechanical_piston", MechanicalPistonBlock::normal)
.transform(BuilderTransformers.mechanicalPiston(PistonType.DEFAULT))

View file

@ -9,7 +9,7 @@ import com.simibubi.create.content.contraptions.components.crafter.ConnectedInpu
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterTileEntity.Phase;
import com.simibubi.create.foundation.block.ITE;
import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.Pointing;
import com.simibubi.create.foundation.utility.VecHelper;
import net.minecraft.block.Block;
@ -26,7 +26,6 @@ import net.minecraft.util.Direction;
import net.minecraft.util.Direction.Axis;
import net.minecraft.util.Direction.AxisDirection;
import net.minecraft.util.Hand;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.util.math.Vec3d;
@ -263,30 +262,14 @@ public class MechanicalCrafterBlock extends HorizontalKineticBlock implements IT
return false;
if (crafterState.get(HORIZONTAL_FACING) != targetState.get(HORIZONTAL_FACING))
return false;
if (Math.abs(crafterState.get(POINTING).xRotation - targetState.get(POINTING).xRotation) == 180)
if (Math.abs(crafterState.get(POINTING)
.getXRotation()
- targetState.get(POINTING)
.getXRotation()) == 180)
return false;
return true;
}
public enum Pointing implements IStringSerializable {
UP(0), LEFT(270), DOWN(180), RIGHT(90);
private int xRotation;
private Pointing(int xRotation) {
this.xRotation = xRotation;
}
@Override
public String getName() {
return Lang.asId(name());
}
public int getXRotation() {
return xRotation;
}
}
@Override
public Class<MechanicalCrafterTileEntity> getTileEntityClass() {
return MechanicalCrafterTileEntity.class;

View file

@ -12,13 +12,13 @@ import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllItems;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.components.crafter.ConnectedInputHandler.ConnectedInput;
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterBlock.Pointing;
import com.simibubi.create.content.contraptions.components.crafter.RecipeGridHandler.GroupedItems;
import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity;
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
import com.simibubi.create.foundation.tileEntity.behaviour.edgeInteraction.EdgeInteractionBehaviour;
import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InsertingBehaviour;
import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InventoryManagementBehaviour.Attachments;
import com.simibubi.create.foundation.utility.Pointing;
import com.simibubi.create.foundation.utility.VecHelper;
import net.minecraft.block.BlockState;

View file

@ -15,7 +15,7 @@ import org.apache.commons.lang3.tuple.Pair;
import com.google.common.base.Predicates;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllRecipeTypes;
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterBlock.Pointing;
import com.simibubi.create.foundation.utility.Pointing;
import net.minecraft.block.BlockState;
import net.minecraft.inventory.CraftingInventory;

View file

@ -0,0 +1,126 @@
package com.simibubi.create.content.contraptions.fluids;
import javax.annotation.Nullable;
import com.simibubi.create.foundation.utility.Iterate;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.SixWayBlock;
import net.minecraft.item.BlockItemUseContext;
import net.minecraft.state.StateContainer.Builder;
import net.minecraft.util.Direction;
import net.minecraft.util.Direction.Axis;
import net.minecraft.util.Direction.AxisDirection;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.ILightReader;
import net.minecraft.world.IWorld;
public class PipeBlock extends SixWayBlock {
public PipeBlock(Properties properties) {
super(4 / 16f, properties);
}
@Override
protected void fillStateContainer(Builder<Block, BlockState> builder) {
builder.add(NORTH, EAST, SOUTH, WEST, UP, DOWN);
}
@Override
public BlockState getStateForPlacement(BlockItemUseContext context) {
return updateBlockState(getDefaultState(), context.getNearestLookingDirection(), null, context.getWorld(),
context.getPos());
}
@Override
public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState neighbourState,
IWorld world, BlockPos pos, BlockPos neighbourPos) {
return updateBlockState(state, direction, direction.getOpposite(), world, pos);
}
public BlockState updateBlockState(BlockState state, Direction preferredDirection, @Nullable Direction ignore,
ILightReader world, BlockPos pos) {
// Update sides that are not ignored
for (Direction d : Iterate.directions)
if (d != ignore)
state = state.with(FACING_TO_PROPERTY_MAP.get(d), this == world.getBlockState(pos.offset(d))
.getBlock());
// See if it has enough connections
Direction connectedDirection = null;
for (Direction d : Iterate.directions) {
if (state.get(FACING_TO_PROPERTY_MAP.get(d))) {
if (connectedDirection != null)
return state;
connectedDirection = d;
}
}
// Add opposite end if only one connection
if (connectedDirection != null)
return state.with(FACING_TO_PROPERTY_MAP.get(connectedDirection.getOpposite()), true);
// Use preferred
return state.with(FACING_TO_PROPERTY_MAP.get(preferredDirection), true)
.with(FACING_TO_PROPERTY_MAP.get(preferredDirection.getOpposite()), true);
}
public static boolean isPipe(BlockState state) {
return state.getBlock() instanceof PipeBlock;
}
public static boolean shouldDrawRim(ILightReader world, BlockPos pos, BlockState state, Direction direction) {
if (!isPipe(state))
return false;
if (!state.get(FACING_TO_PROPERTY_MAP.get(direction)))
return false;
BlockPos offsetPos = pos.offset(direction);
BlockState facingState = world.getBlockState(offsetPos);
if (!isPipe(facingState))
return true;
if (!isCornerOrEndPipe(world, pos, state))
return false;
if (isStraightPipe(world, offsetPos, facingState))
return true;
if (!shouldDrawCasing(world, pos, state) && shouldDrawCasing(world, offsetPos, facingState))
return true;
if (isCornerOrEndPipe(world, offsetPos, facingState))
return direction.getAxisDirection() == AxisDirection.POSITIVE;
return false;
}
public static boolean isCornerOrEndPipe(ILightReader world, BlockPos pos, BlockState state) {
return isPipe(state) && !isStraightPipe(world, pos, state) && !shouldDrawCasing(world, pos, state);
}
public static boolean isStraightPipe(ILightReader world, BlockPos pos, BlockState state) {
if (!isPipe(state))
return false;
boolean axisFound = false;
for (Axis axis : Iterate.axes) {
Direction d1 = Direction.getFacingFromAxis(AxisDirection.NEGATIVE, axis);
Direction d2 = Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis);
if (state.get(FACING_TO_PROPERTY_MAP.get(d1)) && state.get(FACING_TO_PROPERTY_MAP.get(d2)))
if (axisFound)
return false;
else
axisFound = true;
}
return axisFound;
}
public static boolean shouldDrawCasing(ILightReader world, BlockPos pos, BlockState state) {
if (!isPipe(state))
return false;
for (Axis axis : Iterate.axes) {
int connections = 0;
for (Direction direction : Iterate.directions)
if (direction.getAxis() != axis && state.get(FACING_TO_PROPERTY_MAP.get(direction)))
connections++;
if (connections > 2)
return true;
}
return false;
}
}

View file

@ -0,0 +1,99 @@
package com.simibubi.create.content.contraptions.fluids;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Random;
import com.google.common.collect.ImmutableMap;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.foundation.block.render.WrappedBakedModel;
import com.simibubi.create.foundation.utility.Iterate;
import net.minecraft.block.BlockState;
import net.minecraft.client.renderer.model.BakedQuad;
import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.util.Direction;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.ILightReader;
import net.minecraftforge.client.model.data.IModelData;
import net.minecraftforge.client.model.data.ModelDataMap;
import net.minecraftforge.client.model.data.ModelProperty;
public class PipeModel extends WrappedBakedModel {
public static Map<Direction, AllBlockPartials> RIMS = ImmutableMap.<Direction, AllBlockPartials>builder()
.put(Direction.UP, AllBlockPartials.COPPER_PIPE_RIM_UP)
.put(Direction.DOWN, AllBlockPartials.COPPER_PIPE_RIM_DOWN)
.put(Direction.EAST, AllBlockPartials.COPPER_PIPE_RIM_EAST)
.put(Direction.WEST, AllBlockPartials.COPPER_PIPE_RIM_WEST)
.put(Direction.NORTH, AllBlockPartials.COPPER_PIPE_RIM_NORTH)
.put(Direction.SOUTH, AllBlockPartials.COPPER_PIPE_RIM_SOUTH)
.build();
private static ModelProperty<PipeModelData> PIPE_PROPERTY = new ModelProperty<>();
public PipeModel(IBakedModel template) {
super(template);
}
@Override
public IModelData getModelData(ILightReader world, BlockPos pos, BlockState state, IModelData tileData) {
PipeModelData data = new PipeModelData();
for (Direction d : Iterate.directions)
data.putRim(d, PipeBlock.shouldDrawRim(world, pos, state, d));
data.setEncased(PipeBlock.shouldDrawCasing(world, pos, state));
return new ModelDataMap.Builder().withInitial(PIPE_PROPERTY, data)
.build();
}
@Override
public List<BakedQuad> getQuads(BlockState state, Direction side, Random rand, IModelData data) {
List<BakedQuad> quads = super.getQuads(state, side, rand, data);
if (data instanceof ModelDataMap) {
ModelDataMap modelDataMap = (ModelDataMap) data;
if (modelDataMap.hasProperty(PIPE_PROPERTY))
addQuads(quads, state, side, rand, modelDataMap, modelDataMap.getData(PIPE_PROPERTY));
}
return quads;
}
private void addQuads(List<BakedQuad> quads, BlockState state, Direction side, Random rand, IModelData data,
PipeModelData pipeData) {
for (Direction d : Iterate.directions)
if (pipeData.getRim(d))
quads.addAll(RIMS.get(d)
.get()
.getQuads(state, side, rand, data));
if (pipeData.isEncased())
quads.addAll(AllBlockPartials.COPPER_PIPE_CASING.get()
.getQuads(state, side, rand, data));
}
private class PipeModelData {
boolean[] rims;
boolean encased;
public PipeModelData() {
rims = new boolean[6];
Arrays.fill(rims, false);
}
public void putRim(Direction face, boolean rim) {
rims[face.getIndex()] = rim;
}
public void setEncased(boolean encased) {
this.encased = encased;
}
public boolean getRim(Direction face) {
return rims[face.getIndex()];
}
public boolean isEncased() {
return encased;
}
}
}

View file

@ -3,20 +3,27 @@ package com.simibubi.create.foundation.data;
import java.util.HashMap;
import java.util.IdentityHashMap;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import java.util.function.BiFunction;
import java.util.function.Function;
import org.apache.commons.lang3.tuple.Pair;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.simibubi.create.content.contraptions.base.DirectionalAxisKineticBlock;
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.LinearChassisBlock;
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.RadialChassisBlock;
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssembleRailType;
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerBlock;
import com.simibubi.create.content.contraptions.components.tracks.ReinforcedRailBlock;
import com.simibubi.create.content.contraptions.fluids.PipeBlock;
import com.simibubi.create.content.logistics.block.belts.observer.BeltObserverBlock;
import com.simibubi.create.content.palettes.PavedBlock;
import com.simibubi.create.foundation.utility.Iterate;
import com.simibubi.create.foundation.utility.Pointing;
import com.simibubi.create.foundation.worldgen.OxidizingBlock;
import com.tterrag.registrate.builders.BlockBuilder;
import com.tterrag.registrate.providers.DataGenContext;
@ -26,10 +33,12 @@ import com.tterrag.registrate.util.nullness.NonNullUnaryOperator;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.state.BooleanProperty;
import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.state.properties.RailShape;
import net.minecraft.util.Direction;
import net.minecraft.util.Direction.Axis;
import net.minecraft.util.Direction.AxisDirection;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.generators.ConfiguredModel;
import net.minecraftforge.client.model.generators.ModelFile;
@ -339,4 +348,104 @@ public class BlockStateGen {
};
}
public static <P extends PipeBlock> NonNullBiConsumer<DataGenContext<Block, P>, RegistrateBlockstateProvider> pipe() {
return (c, p) -> {
String path = "block/" + c.getName();
String LU = "lu";
String RU = "ru";
String LD = "ld";
String RD = "rd";
String LR = "lr";
String UD = "ud";
String NONE = "none";
List<String> orientations = ImmutableList.of(LU, RU, LD, RD, LR, UD, NONE);
Map<String, Pair<Integer, Integer>> uvs = ImmutableMap.<String, Pair<Integer, Integer>>builder()
.put(LU, Pair.of(8, 12))
.put(RU, Pair.of(0, 12))
.put(LD, Pair.of(12, 8))
.put(RD, Pair.of(8, 8))
.put(LR, Pair.of(4, 12))
.put(UD, Pair.of(0, 8))
.put(NONE, Pair.of(12, 12))
.build();
Map<Axis, ResourceLocation> coreTemplates = new IdentityHashMap<>();
Map<Pair<String, Axis>, ModelFile> coreModels = new HashMap<>();
for (Axis axis : Iterate.axes)
coreTemplates.put(axis, p.modLoc(path + "/core_" + axis.getName()));
ModelFile end = AssetLookup.partialBaseModel(c, p, "end");
for (Axis axis : Iterate.axes) {
ResourceLocation parent = coreTemplates.get(axis);
for (String s : orientations) {
Pair<String, Axis> key = Pair.of(s, axis);
String modelName = path + "/" + s + "_" + axis.getName();
coreModels.put(key, p.models()
.withExistingParent(modelName, parent)
.element()
.from(4, 4, 4)
.to(12, 12, 12)
.face(Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis))
.end()
.face(Direction.getFacingFromAxis(AxisDirection.NEGATIVE, axis))
.end()
.faces((d, builder) -> {
Pair<Integer, Integer> pair = uvs.get(s);
float u = pair.getKey();
float v = pair.getValue();
if (d == Direction.UP)
builder.uvs(u, v + 4, u + 4, v);
else if (d.getAxisDirection() == AxisDirection.POSITIVE)
builder.uvs(u + 4, v, u, v + 4);
else
builder.uvs(u, v, u + 4, v + 4);
builder.texture("#0");
})
.end());
}
}
MultiPartBlockStateBuilder builder = p.getMultipartBuilder(c.get());
for (Direction d : Iterate.directions)
builder.part()
.modelFile(end)
.rotationX(d == Direction.UP ? 0 : d == Direction.DOWN ? 180 : 90)
.rotationY((int) (d.getHorizontalAngle() + 180) % 360)
.addModel()
.condition(PipeBlock.FACING_TO_PROPERTY_MAP.get(d), true)
.end();
for (Axis axis : Iterate.axes) {
putPart(coreModels, builder, axis, LU, true, false, true, false);
putPart(coreModels, builder, axis, RU, true, false, false, true);
putPart(coreModels, builder, axis, LD, false, true, true, false);
putPart(coreModels, builder, axis, RD, false, true, false, true);
putPart(coreModels, builder, axis, UD, true, true, false, false);
putPart(coreModels, builder, axis, UD, true, false, false, false);
putPart(coreModels, builder, axis, UD, false, true, false, false);
putPart(coreModels, builder, axis, LR, false, false, true, true);
putPart(coreModels, builder, axis, LR, false, false, true, false);
putPart(coreModels, builder, axis, LR, false, false, false, true);
putPart(coreModels, builder, axis, NONE, false, false, false, false);
}
};
}
private static void putPart(Map<Pair<String, Axis>, ModelFile> coreModels, MultiPartBlockStateBuilder builder,
Axis axis, String s, boolean up, boolean down, boolean left, boolean right) {
Direction positiveAxis = Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis);
Map<Direction, BooleanProperty> propertyMap = PipeBlock.FACING_TO_PROPERTY_MAP;
builder.part()
.modelFile(coreModels.get(Pair.of(s, axis)))
.addModel()
.condition(propertyMap.get(Pointing.UP.getCombinedDirection(positiveAxis)), up)
.condition(propertyMap.get(Pointing.LEFT.getCombinedDirection(positiveAxis)), left)
.condition(propertyMap.get(Pointing.RIGHT.getCombinedDirection(positiveAxis)), right)
.condition(propertyMap.get(Pointing.DOWN.getCombinedDirection(positiveAxis)), down)
.end();
}
}

View file

@ -108,7 +108,8 @@ public class CreateRegistrate extends AbstractRegistrate<CreateRegistrate> {
final String location = "block/palettes/" + c.getName() + "/plain";
p.simpleBlock(c.get(), p.models()
.cubeAll(c.getName(), p.modLoc(location)));
// TODO tag with forge:stone; if TFWorldGen == true tag with forge:wg_stone aswell
// TODO tag with forge:stone; if TFWorldGen == true tag with forge:wg_stone
// aswell
})
.simpleItem();
}
@ -116,6 +117,10 @@ public class CreateRegistrate extends AbstractRegistrate<CreateRegistrate> {
public static <T extends Block> NonNullConsumer<? super T> connectedTextures(ConnectedTextureBehaviour behavior) {
return entry -> onClient(() -> () -> registerCTBehviour(entry, behavior));
}
public static <T extends Block> NonNullConsumer<? super T> blockModel(Supplier<NonNullFunction<IBakedModel, ? extends IBakedModel>> func) {
return entry -> onClient(() -> () -> registerBlockModel(entry, func));
}
public static <T extends Block> NonNullConsumer<? super T> blockColors(Supplier<Supplier<IBlockColor>> colorFunc) {
return entry -> onClient(() -> () -> registerBlockColor(entry, colorFunc));
@ -152,6 +157,13 @@ public class CreateRegistrate extends AbstractRegistrate<CreateRegistrate> {
.register(entry.delegate, model -> new CTModel(model, behavior));
}
@OnlyIn(Dist.CLIENT)
private static void registerBlockModel(Block entry,
Supplier<NonNullFunction<IBakedModel, ? extends IBakedModel>> func) {
CreateClient.getCustomBlockModels()
.register(entry.delegate, func.get());
}
@OnlyIn(Dist.CLIENT)
private static void registerItemModel(Item entry,
Supplier<NonNullFunction<IBakedModel, ? extends IBakedModel>> func) {

View file

@ -0,0 +1,35 @@
package com.simibubi.create.foundation.utility;
import net.minecraft.util.Direction;
import net.minecraft.util.Direction.Axis;
import net.minecraft.util.Direction.AxisDirection;
import net.minecraft.util.IStringSerializable;
public enum Pointing implements IStringSerializable {
UP(0), LEFT(270), DOWN(180), RIGHT(90);
private int xRotation;
private Pointing(int xRotation) {
this.xRotation = xRotation;
}
@Override
public String getName() {
return Lang.asId(name());
}
public int getXRotation() {
return xRotation;
}
public Direction getCombinedDirection(Direction direction) {
Axis axis = direction.getAxis();
Direction top = axis == Axis.Y ? Direction.SOUTH : Direction.UP;
int rotations = direction.getAxisDirection() == AxisDirection.NEGATIVE ? 4 - ordinal() : ordinal();
for (int i = 0; i < rotations; i++)
top = DirectionHelper.rotateAround(top, axis);
return top;
}
}

View file

@ -0,0 +1,19 @@
{
"credit": "Made with Blockbench",
"textures": {
"0": "create:block/copper_pipe",
"particle": "create:block/copper_pipe"
},
"elements": [
{
"from": [4, 12, 4],
"to": [12, 16, 12],
"faces": {
"north": {"uv": [0, 6, 4, 8], "rotation": 0, "texture": "#0"},
"east": {"uv": [0, 6, 4, 8], "rotation": 0, "texture": "#0"},
"south": {"uv": [0, 6, 4, 8], "rotation": 0, "texture": "#0"},
"west": {"uv": [0, 6, 4, 8], "rotation": 0, "texture": "#0"}
}
}
]
}

View file

@ -0,0 +1,21 @@
{
"credit": "Made with Blockbench",
"textures": {
"0": "create:block/copper_pipe",
"particle": "create:block/copper_pipe"
},
"elements": [
{
"from": [2, 2, 2],
"to": [14, 14, 14],
"faces": {
"north": {"uv": [0, 0, 6, 6], "texture": "#0"},
"east": {"uv": [0, 0, 6, 6], "texture": "#0"},
"south": {"uv": [0, 0, 6, 6], "texture": "#0"},
"west": {"uv": [0, 0, 6, 6], "texture": "#0"},
"up": {"uv": [0, 0, 6, 6], "texture": "#0"},
"down": {"uv": [0, 0, 6, 6], "texture": "#0"}
}
}
]
}

View file

@ -0,0 +1,17 @@
{
"credit": "Made with Blockbench",
"textures": {
"0": "create:block/copper_pipe",
"particle": "create:block/copper_pipe"
},
"elements": [
{
"from": [4, 4, 4],
"to": [12, 12, 12],
"faces": {
"east": {"uv": [1, 1, 5, 5], "rotation": 180, "texture": "#0"},
"west": {"uv": [1, 1, 5, 5], "rotation": 180, "texture": "#0"}
}
}
]
}

View file

@ -0,0 +1,17 @@
{
"credit": "Made with Blockbench",
"textures": {
"0": "create:block/copper_pipe",
"particle": "create:block/copper_pipe"
},
"elements": [
{
"from": [4, 4, 4],
"to": [12, 12, 12],
"faces": {
"up": {"uv": [1, 1, 5, 5], "rotation": 180, "texture": "#0"},
"down": {"uv": [1, 1, 5, 5], "rotation": 180, "texture": "#0"}
}
}
]
}

View file

@ -0,0 +1,17 @@
{
"credit": "Made with Blockbench",
"textures": {
"0": "create:block/copper_pipe",
"particle": "create:block/copper_pipe"
},
"elements": [
{
"from": [4, 4, 4],
"to": [12, 12, 12],
"faces": {
"north": {"uv": [1, 1, 5, 5], "rotation": 180, "texture": "#0"},
"south": {"uv": [1, 1, 5, 5], "rotation": 180, "texture": "#0"}
}
}
]
}

View file

@ -0,0 +1,70 @@
{
"credit": "Made with Blockbench",
"parent": "block/block",
"textures": {
"1": "create:block/copper_pipe",
"particle": "create:block/copper_pipe"
},
"elements": [
{
"from": [4, 4, 4],
"to": [12, 12, 12],
"faces": {
"north": {"uv": [4, 12, 8, 16], "rotation": 180, "texture": "#1"},
"east": {"uv": [4, 12, 8, 16], "rotation": 180, "texture": "#1"},
"south": {"uv": [4, 12, 8, 16], "rotation": 180, "texture": "#1"},
"west": {"uv": [4, 12, 8, 16], "rotation": 180, "texture": "#1"},
"up": {"uv": [4, 12, 8, 16], "rotation": 180, "texture": "#1"},
"down": {"uv": [4, 12, 8, 16], "rotation": 180, "texture": "#1"}
}
},
{
"from": [0, 4, 4],
"to": [4, 12, 12],
"rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 8]},
"faces": {
"north": {"uv": [0, 8, 4, 6], "rotation": 270, "texture": "#1"},
"south": {"uv": [0, 8, 4, 6], "rotation": 90, "texture": "#1"},
"up": {"uv": [0, 8, 4, 6], "rotation": 90, "texture": "#1"},
"down": {"uv": [0, 8, 4, 6], "rotation": 270, "texture": "#1"}
}
},
{
"from": [12, 4, 4],
"to": [16, 12, 12],
"rotation": {"angle": 0, "axis": "y", "origin": [16, 8, 8]},
"faces": {
"north": {"uv": [0, 6, 4, 8], "rotation": 270, "texture": "#1"},
"south": {"uv": [0, 6, 4, 8], "rotation": 90, "texture": "#1"},
"up": {"uv": [0, 6, 4, 8], "rotation": 90, "texture": "#1"},
"down": {"uv": [0, 6, 4, 8], "rotation": 270, "texture": "#1"}
}
},
{
"from": [0, 3, 3],
"to": [2, 13, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 8]},
"faces": {
"north": {"uv": [6, 6, 11, 5], "rotation": 90, "texture": "#1"},
"east": {"uv": [6, 0, 11, 5], "rotation": 180, "texture": "#1"},
"south": {"uv": [6, 6, 11, 5], "rotation": 90, "texture": "#1"},
"west": {"uv": [6, 0, 11, 5], "rotation": 180, "texture": "#1"},
"up": {"uv": [6, 6, 11, 5], "rotation": 90, "texture": "#1"},
"down": {"uv": [6, 6, 11, 5], "rotation": 90, "texture": "#1"}
}
},
{
"from": [14, 3, 3],
"to": [16, 13, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [16, 8, 8]},
"faces": {
"north": {"uv": [6, 5, 11, 6], "rotation": 90, "texture": "#1"},
"east": {"uv": [11, 0, 6, 5], "rotation": 180, "texture": "#1"},
"south": {"uv": [6, 5, 11, 6], "rotation": 90, "texture": "#1"},
"west": {"uv": [11, 0, 6, 5], "rotation": 180, "texture": "#1"},
"up": {"uv": [6, 5, 11, 6], "rotation": 90, "texture": "#1"},
"down": {"uv": [6, 5, 11, 6], "rotation": 90, "texture": "#1"}
}
}
]
}

View file

@ -0,0 +1,21 @@
{
"credit": "Made with Blockbench",
"textures": {
"0": "create:block/copper_pipe",
"particle": "create:block/copper_pipe"
},
"elements": [
{
"from": [3, -1, 3],
"to": [13, 1, 13],
"faces": {
"north": {"uv": [6, 6, 11, 5], "texture": "#0"},
"east": {"uv": [11, 5, 6, 6], "rotation": 180, "texture": "#0"},
"south": {"uv": [6, 6, 11, 5], "texture": "#0"},
"west": {"uv": [11, 5, 6, 6], "rotation": 180, "texture": "#0"},
"up": {"uv": [11, 0, 6, 5], "rotation": 90, "texture": "#0"},
"down": {"uv": [11, 0, 6, 5], "rotation": 90, "texture": "#0"}
}
}
]
}

View file

@ -0,0 +1,21 @@
{
"credit": "Made with Blockbench",
"textures": {
"0": "create:block/copper_pipe",
"particle": "create:block/copper_pipe"
},
"elements": [
{
"from": [15, 3, 3],
"to": [17, 13, 13],
"faces": {
"north": {"uv": [6, 6, 11, 5], "rotation": 90, "texture": "#0"},
"east": {"uv": [11, 0, 6, 5], "texture": "#0"},
"south": {"uv": [6, 6, 11, 5], "rotation": 270, "texture": "#0"},
"west": {"uv": [11, 0, 6, 5], "texture": "#0"},
"up": {"uv": [11, 5, 6, 6], "rotation": 90, "texture": "#0"},
"down": {"uv": [11, 5, 6, 6], "rotation": 90, "texture": "#0"}
}
}
]
}

View file

@ -0,0 +1,22 @@
{
"credit": "Made with Blockbench",
"textures": {
"0": "create:block/copper_pipe",
"particle": "create:block/copper_pipe"
},
"elements": [
{
"from": [3, 3, -1],
"to": [13, 13, 1],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, -5]},
"faces": {
"north": {"uv": [6, 0, 11, 5], "texture": "#0"},
"east": {"uv": [6, 5, 11, 6], "rotation": 90, "texture": "#0"},
"south": {"uv": [6, 0, 11, 5], "texture": "#0"},
"west": {"uv": [6, 5, 11, 6], "rotation": 270, "texture": "#0"},
"up": {"uv": [6, 5, 11, 6], "texture": "#0"},
"down": {"uv": [6, 5, 11, 6], "rotation": 180, "texture": "#0"}
}
}
]
}

View file

@ -0,0 +1,22 @@
{
"credit": "Made with Blockbench",
"textures": {
"0": "create:block/copper_pipe",
"particle": "create:block/copper_pipe"
},
"elements": [
{
"from": [3, 3, 15],
"to": [13, 13, 17],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 21]},
"faces": {
"north": {"uv": [6, 0, 11, 5], "texture": "#0"},
"east": {"uv": [6, 5, 11, 6], "rotation": 270, "texture": "#0"},
"south": {"uv": [6, 0, 11, 5], "texture": "#0"},
"west": {"uv": [6, 5, 11, 6], "rotation": 90, "texture": "#0"},
"up": {"uv": [11, 6, 6, 5], "texture": "#0"},
"down": {"uv": [11, 6, 6, 5], "rotation": 180, "texture": "#0"}
}
}
]
}

View file

@ -0,0 +1,21 @@
{
"credit": "Made with Blockbench",
"textures": {
"0": "create:block/copper_pipe",
"particle": "create:block/copper_pipe"
},
"elements": [
{
"from": [3, 15, 3],
"to": [13, 17, 13],
"faces": {
"north": {"uv": [6, 5, 11, 6], "texture": "#0"},
"east": {"uv": [11, 6, 6, 5], "rotation": 180, "texture": "#0"},
"south": {"uv": [6, 5, 11, 6], "texture": "#0"},
"west": {"uv": [11, 6, 6, 5], "rotation": 180, "texture": "#0"},
"up": {"uv": [6, 0, 11, 5], "rotation": 90, "texture": "#0"},
"down": {"uv": [6, 0, 11, 5], "rotation": 90, "texture": "#0"}
}
}
]
}

View file

@ -0,0 +1,21 @@
{
"credit": "Made with Blockbench",
"textures": {
"0": "create:block/copper_pipe",
"particle": "create:block/copper_pipe"
},
"elements": [
{
"from": [-1, 3, 3],
"to": [1, 13, 13],
"faces": {
"north": {"uv": [6, 5, 11, 6], "rotation": 90, "texture": "#0"},
"east": {"uv": [6, 0, 11, 5], "texture": "#0"},
"south": {"uv": [6, 5, 11, 6], "rotation": 270, "texture": "#0"},
"west": {"uv": [6, 0, 11, 5], "texture": "#0"},
"up": {"uv": [11, 6, 6, 5], "rotation": 90, "texture": "#0"},
"down": {"uv": [11, 6, 6, 5], "rotation": 90, "texture": "#0"}
}
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 288 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 285 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 282 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 296 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 B