Directed Funneling and Chute Funnels
- Added a funnel block variant that interacts with chutes horizontally (same item) - Belt and Chute Funnels now have a push/pull property - Removed Chute Ports
|
@ -17,7 +17,7 @@ a579c40c43dc2174afb66f42d00d0c4a0efaaeee assets\create\blockstates\andesite_bric
|
|||
398922758a6219544e5b85c91c9cf8a543b437e5 assets\create\blockstates\andesite_pillar.json
|
||||
f9fa6aa530eb0891a74eadfbebc663172a57147a assets\create\blockstates\basin.json
|
||||
96a4fae5883eda130f8ec1a57d34534f6d0793c4 assets\create\blockstates\belt.json
|
||||
fe0278550e4795cc9757e726b88db12b599ec9ef assets\create\blockstates\belt_funnel.json
|
||||
9bbc9a2dc2428175ae0cadf7537ed6815e3e241d assets\create\blockstates\belt_funnel.json
|
||||
40d10934934ea142d71fc6ce598b1455c3ad47b4 assets\create\blockstates\belt_observer.json
|
||||
4325605fbdea60d5f54286c309c825bebcd74b95 assets\create\blockstates\belt_tunnel.json
|
||||
cf9045eb16e5299a1d917c4cb536289f49411276 assets\create\blockstates\birch_window.json
|
||||
|
@ -32,7 +32,7 @@ b8dd6e505943e06706d0718ece620ab3cf943650 assets\create\blockstates\brass_casing.
|
|||
cbcdab42d01f8085db9e5f8db884f8adf7f17625 assets\create\blockstates\chiseled_scoria.json
|
||||
291952556c52fba2af5bbd793c71af81abd27e71 assets\create\blockstates\chiseled_weathered_limestone.json
|
||||
99def0a786714a337e2b1b17db844e4d1aee6234 assets\create\blockstates\chute.json
|
||||
9ca4713c8efed79da6ab11354a25e5f8fbd6341c assets\create\blockstates\chute_port.json
|
||||
dabf21c320b6d33486478cb0e4b4bbd62a753c7a assets\create\blockstates\chute_funnel.json
|
||||
4947c261310445fa55b92038326ac82967d192dd assets\create\blockstates\clockwork_bearing.json
|
||||
1f33834c685e3243882acfe20183fe64dfa872be assets\create\blockstates\clutch.json
|
||||
e5e3757e99c139d67b2a70288466d8a74d818841 assets\create\blockstates\cogwheel.json
|
||||
|
@ -335,8 +335,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
|
||||
5753bc985f4c202fe16387c32fb8ad80c631c933 assets\create\lang\en_ud.json
|
||||
0640b1b64ac1a1e337178f932f22b0b2aea61d46 assets\create\lang\en_us.json
|
||||
d6d4eaadc6f2c86dd69b8a818ca7352b85be52cd assets\create\lang\en_ud.json
|
||||
0cc26662a5c436a5703926fe3509f0a9536ee737 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
|
||||
|
@ -377,6 +377,12 @@ a033fbac3129bba9211c6c4a0e16c905643afa39 assets\create\models\block\andesite_cob
|
|||
1c574ee47aeb6fcb305bfc95dd131e153b795a0e assets\create\models\block\andesite_cobblestone_wall_post.json
|
||||
0ed983628e8868f77301bea1111570d3631f24fb assets\create\models\block\andesite_cobblestone_wall_side.json
|
||||
b1d0bb538fc8285b7d3fd77a977d78a104b83b62 assets\create\models\block\andesite_pillar.json
|
||||
3928a75e18fc9fe02e3d72696e5dfddd40ef164c assets\create\models\block\belt_funnel_pull_off_extended.json
|
||||
024fdab5f6bb0559bb18d2c3cffa1d5a7baf76e9 assets\create\models\block\belt_funnel_pull_off_retracted.json
|
||||
eecd774d431bd9c30649e824421ead350b5333cd assets\create\models\block\belt_funnel_pull_on_extended.json
|
||||
8e6e5caf8befa95d68280ecfaca9a07313570524 assets\create\models\block\belt_funnel_pull_on_retracted.json
|
||||
5e93193368ebdf0fa4d53b19a306431e6d3ab099 assets\create\models\block\belt_funnel_push_on_extended.json
|
||||
08f8ffc241e9a49a0981026602deb0230dd8258a assets\create\models\block\belt_funnel_push_on_retracted.json
|
||||
e8bfb63e0a4426f9d95cd111640169b218dead1b assets\create\models\block\belt_observer\detect.json
|
||||
a2e63810eceb028484b193ddf4315e1811950dc8 assets\create\models\block\belt_observer\detect_belt.json
|
||||
034c308d46def892e6638ac0b3374849a6a88a26 assets\create\models\block\belt_observer\detect_belt_powered.json
|
||||
|
@ -407,6 +413,9 @@ cd7751090cf3d55296b8e415d0af9b6f18d69770 assets\create\models\block\chiseled_gab
|
|||
d2e195aa2e90c712e51d855a9a4a334b52f62a69 assets\create\models\block\chiseled_limestone.json
|
||||
ac07568fa7b2d3fa84d0fe89a498514d30514291 assets\create\models\block\chiseled_scoria.json
|
||||
ecb2b85ee210dce329d2be66b98d0f0d4e6fc223 assets\create\models\block\chiseled_weathered_limestone.json
|
||||
d3a156e746f890b8a0b92caa70b8eb6e690f0fb6 assets\create\models\block\chute_funnel_pull_off.json
|
||||
5e4424fb63041a449ddffe143ee766018d064c8f assets\create\models\block\chute_funnel_pull_on.json
|
||||
ac32d22841b5d37ef182869f605b9a97075f3d33 assets\create\models\block\chute_funnel_push_on.json
|
||||
f9a3f0939ea43b404eb2826b94211a25fca5ebc2 assets\create\models\block\clockwork_bearing.json
|
||||
70406933cc4fa5471af6e562fd84a397347dba17 assets\create\models\block\copper_casing.json
|
||||
1ef7060b0ca7e9c0bfc8151f98ca08da31862cda assets\create\models\block\crate\brass\bottom.json
|
||||
|
@ -964,7 +973,6 @@ afd697168c9786eb80e54eccdc6a23afa6c7fb0e assets\create\models\item\chiseled_gabb
|
|||
a47fbe5f2da79080d99ef0975bfa8da4d08f8be4 assets\create\models\item\chiseled_scoria.json
|
||||
70232ce9b88119fb383717e2c1ad113f7aad6a99 assets\create\models\item\chiseled_weathered_limestone.json
|
||||
fe67c3f380d17735a9436a4579a8be1a02b8e4a0 assets\create\models\item\chute.json
|
||||
3b91cda68b823bf8d49a2e0cccd1b7f7c090e103 assets\create\models\item\chute_port.json
|
||||
b1531a7bd3f7f27b9587d13e818a93dc2d088bc8 assets\create\models\item\clockwork_bearing.json
|
||||
0a2a0f0aafeab0088172f77afd40c1fa2cc1f2b8 assets\create\models\item\clutch.json
|
||||
dcb09deae110077bcddf090996b51cc66e9a7de3 assets\create\models\item\cogwheel.json
|
||||
|
@ -1748,7 +1756,7 @@ ab820bbaaf67c6697dfbab33c05fb73b18c70bfb data\create\loot_tables\blocks\chiseled
|
|||
43f446abd3c1c184a08645979edf620e59955a30 data\create\loot_tables\blocks\chiseled_scoria.json
|
||||
adde89e46b12de1eee6fd0c5cb98c5f45feefc15 data\create\loot_tables\blocks\chiseled_weathered_limestone.json
|
||||
07ccc1576a71338cb73c4e06f8c28a2c86843877 data\create\loot_tables\blocks\chute.json
|
||||
dcd45562a3459e5fd620727090d9c3c01c8ce0a4 data\create\loot_tables\blocks\chute_port.json
|
||||
617f27876863dda6a16d6818231bc52de104fc70 data\create\loot_tables\blocks\chute_funnel.json
|
||||
778b53c36d73b6e9c78fd6c091c9c3535c3c18f7 data\create\loot_tables\blocks\clockwork_bearing.json
|
||||
d76113310fc56eca6382d44df174096f2210d416 data\create\loot_tables\blocks\clutch.json
|
||||
673ba3a5deae9133b917d16c9eb87fe4c2873c8a data\create\loot_tables\blocks\cogwheel.json
|
||||
|
|
|
@ -1,63 +1,123 @@
|
|||
{
|
||||
"variants": {
|
||||
"facing=north,powered=false,shape=retracted": {
|
||||
"facing=north,powered=false,pushing=false,shape=retracted": {
|
||||
"model": "create:block/belt_funnel_pull_off_retracted"
|
||||
},
|
||||
"facing=south,powered=false,pushing=false,shape=retracted": {
|
||||
"model": "create:block/belt_funnel_pull_off_retracted",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=false,pushing=false,shape=retracted": {
|
||||
"model": "create:block/belt_funnel_pull_off_retracted",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=false,pushing=false,shape=retracted": {
|
||||
"model": "create:block/belt_funnel_pull_off_retracted",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,powered=true,pushing=false,shape=retracted": {
|
||||
"model": "create:block/belt_funnel_pull_on_retracted"
|
||||
},
|
||||
"facing=south,powered=true,pushing=false,shape=retracted": {
|
||||
"model": "create:block/belt_funnel_pull_on_retracted",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=true,pushing=false,shape=retracted": {
|
||||
"model": "create:block/belt_funnel_pull_on_retracted",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=true,pushing=false,shape=retracted": {
|
||||
"model": "create:block/belt_funnel_pull_on_retracted",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,powered=false,pushing=true,shape=retracted": {
|
||||
"model": "create:block/belt_funnel/block_retracted"
|
||||
},
|
||||
"facing=south,powered=false,shape=retracted": {
|
||||
"facing=south,powered=false,pushing=true,shape=retracted": {
|
||||
"model": "create:block/belt_funnel/block_retracted",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=false,shape=retracted": {
|
||||
"facing=west,powered=false,pushing=true,shape=retracted": {
|
||||
"model": "create:block/belt_funnel/block_retracted",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=false,shape=retracted": {
|
||||
"facing=east,powered=false,pushing=true,shape=retracted": {
|
||||
"model": "create:block/belt_funnel/block_retracted",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,powered=true,shape=retracted": {
|
||||
"model": "create:block/belt_funnel/block_retracted_powered"
|
||||
"facing=north,powered=true,pushing=true,shape=retracted": {
|
||||
"model": "create:block/belt_funnel_push_on_retracted"
|
||||
},
|
||||
"facing=south,powered=true,shape=retracted": {
|
||||
"model": "create:block/belt_funnel/block_retracted_powered",
|
||||
"facing=south,powered=true,pushing=true,shape=retracted": {
|
||||
"model": "create:block/belt_funnel_push_on_retracted",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=true,shape=retracted": {
|
||||
"model": "create:block/belt_funnel/block_retracted_powered",
|
||||
"facing=west,powered=true,pushing=true,shape=retracted": {
|
||||
"model": "create:block/belt_funnel_push_on_retracted",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=true,shape=retracted": {
|
||||
"model": "create:block/belt_funnel/block_retracted_powered",
|
||||
"facing=east,powered=true,pushing=true,shape=retracted": {
|
||||
"model": "create:block/belt_funnel_push_on_retracted",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,powered=false,shape=extended": {
|
||||
"facing=north,powered=false,pushing=false,shape=extended": {
|
||||
"model": "create:block/belt_funnel_pull_off_extended"
|
||||
},
|
||||
"facing=south,powered=false,pushing=false,shape=extended": {
|
||||
"model": "create:block/belt_funnel_pull_off_extended",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=false,pushing=false,shape=extended": {
|
||||
"model": "create:block/belt_funnel_pull_off_extended",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=false,pushing=false,shape=extended": {
|
||||
"model": "create:block/belt_funnel_pull_off_extended",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,powered=true,pushing=false,shape=extended": {
|
||||
"model": "create:block/belt_funnel_pull_on_extended"
|
||||
},
|
||||
"facing=south,powered=true,pushing=false,shape=extended": {
|
||||
"model": "create:block/belt_funnel_pull_on_extended",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=true,pushing=false,shape=extended": {
|
||||
"model": "create:block/belt_funnel_pull_on_extended",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=true,pushing=false,shape=extended": {
|
||||
"model": "create:block/belt_funnel_pull_on_extended",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,powered=false,pushing=true,shape=extended": {
|
||||
"model": "create:block/belt_funnel/block_extended"
|
||||
},
|
||||
"facing=south,powered=false,shape=extended": {
|
||||
"facing=south,powered=false,pushing=true,shape=extended": {
|
||||
"model": "create:block/belt_funnel/block_extended",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=false,shape=extended": {
|
||||
"facing=west,powered=false,pushing=true,shape=extended": {
|
||||
"model": "create:block/belt_funnel/block_extended",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=false,shape=extended": {
|
||||
"facing=east,powered=false,pushing=true,shape=extended": {
|
||||
"model": "create:block/belt_funnel/block_extended",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,powered=true,shape=extended": {
|
||||
"model": "create:block/belt_funnel/block_extended_powered"
|
||||
"facing=north,powered=true,pushing=true,shape=extended": {
|
||||
"model": "create:block/belt_funnel_push_on_extended"
|
||||
},
|
||||
"facing=south,powered=true,shape=extended": {
|
||||
"model": "create:block/belt_funnel/block_extended_powered",
|
||||
"facing=south,powered=true,pushing=true,shape=extended": {
|
||||
"model": "create:block/belt_funnel_push_on_extended",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=true,shape=extended": {
|
||||
"model": "create:block/belt_funnel/block_extended_powered",
|
||||
"facing=west,powered=true,pushing=true,shape=extended": {
|
||||
"model": "create:block/belt_funnel_push_on_extended",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=true,shape=extended": {
|
||||
"model": "create:block/belt_funnel/block_extended_powered",
|
||||
"facing=east,powered=true,pushing=true,shape=extended": {
|
||||
"model": "create:block/belt_funnel_push_on_extended",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,64 @@
|
|||
{
|
||||
"variants": {
|
||||
"facing=north,powered=false,pushing=false": {
|
||||
"model": "create:block/chute_funnel_pull_off"
|
||||
},
|
||||
"facing=south,powered=false,pushing=false": {
|
||||
"model": "create:block/chute_funnel_pull_off",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=false,pushing=false": {
|
||||
"model": "create:block/chute_funnel_pull_off",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=false,pushing=false": {
|
||||
"model": "create:block/chute_funnel_pull_off",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,powered=true,pushing=false": {
|
||||
"model": "create:block/chute_funnel_pull_on"
|
||||
},
|
||||
"facing=south,powered=true,pushing=false": {
|
||||
"model": "create:block/chute_funnel_pull_on",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=true,pushing=false": {
|
||||
"model": "create:block/chute_funnel_pull_on",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=true,pushing=false": {
|
||||
"model": "create:block/chute_funnel_pull_on",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,powered=false,pushing=true": {
|
||||
"model": "create:block/chute_funnel/block"
|
||||
},
|
||||
"facing=south,powered=false,pushing=true": {
|
||||
"model": "create:block/chute_funnel/block",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=false,pushing=true": {
|
||||
"model": "create:block/chute_funnel/block",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=false,pushing=true": {
|
||||
"model": "create:block/chute_funnel/block",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,powered=true,pushing=true": {
|
||||
"model": "create:block/chute_funnel_push_on"
|
||||
},
|
||||
"facing=south,powered=true,pushing=true": {
|
||||
"model": "create:block/chute_funnel_push_on",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=true,pushing=true": {
|
||||
"model": "create:block/chute_funnel_push_on",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=true,pushing=true": {
|
||||
"model": "create:block/chute_funnel_push_on",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
{
|
||||
"variants": {
|
||||
"facing=north": {
|
||||
"model": "create:block/chute_port"
|
||||
},
|
||||
"facing=south": {
|
||||
"model": "create:block/chute_port",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "create:block/chute_port",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east": {
|
||||
"model": "create:block/chute_port",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
|
@ -33,7 +33,7 @@
|
|||
"block.create.chiseled_scoria": "\u0250\u0131\u0279o\u0254S p\u01DD\u05DF\u01DDs\u0131\u0265\u0186",
|
||||
"block.create.chiseled_weathered_limestone": "\u01DDuo\u0287s\u01DD\u026F\u0131\uA780 p\u01DD\u0279\u01DD\u0265\u0287\u0250\u01DDM p\u01DD\u05DF\u01DDs\u0131\u0265\u0186",
|
||||
"block.create.chute": "\u01DD\u0287n\u0265\u0186",
|
||||
"block.create.chute_port": "\u0287\u0279o\u0500 \u01DD\u0287n\u0265\u0186",
|
||||
"block.create.chute_funnel": "\u05DF\u01DDuun\u2132 \u01DD\u0287n\u0265\u0186",
|
||||
"block.create.clockwork_bearing": "bu\u0131\u0279\u0250\u01DD\u15FA \u029E\u0279o\u028D\u029E\u0254o\u05DF\u0186",
|
||||
"block.create.clutch": "\u0265\u0254\u0287n\u05DF\u0186",
|
||||
"block.create.cogwheel": "\u05DF\u01DD\u01DD\u0265\u028Dbo\u0186",
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
"block.create.chiseled_scoria": "Chiseled Scoria",
|
||||
"block.create.chiseled_weathered_limestone": "Chiseled Weathered Limestone",
|
||||
"block.create.chute": "Chute",
|
||||
"block.create.chute_port": "Chute Port",
|
||||
"block.create.chute_funnel": "Chute Funnel",
|
||||
"block.create.clockwork_bearing": "Clockwork Bearing",
|
||||
"block.create.clutch": "Clutch",
|
||||
"block.create.cogwheel": "Cogwheel",
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "create:block/belt_funnel/block_extended",
|
||||
"textures": {
|
||||
"2": "create:block/belt_funnel_pull_off"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "create:block/belt_funnel/block_retracted",
|
||||
"textures": {
|
||||
"2": "create:block/belt_funnel_pull_off"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "create:block/belt_funnel/block_extended",
|
||||
"textures": {
|
||||
"2": "create:block/belt_funnel_pull_on"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "create:block/belt_funnel/block_retracted",
|
||||
"textures": {
|
||||
"2": "create:block/belt_funnel_pull_on"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "create:block/belt_funnel/block_extended",
|
||||
"textures": {
|
||||
"2": "create:block/belt_funnel_push_on"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "create:block/belt_funnel/block_retracted",
|
||||
"textures": {
|
||||
"2": "create:block/belt_funnel_push_on"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "create:block/chute_funnel/block",
|
||||
"textures": {
|
||||
"3": "create:block/belt_funnel_pull_off"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "create:block/chute_funnel/block",
|
||||
"textures": {
|
||||
"3": "create:block/belt_funnel_pull_on"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "create:block/chute_funnel/block",
|
||||
"textures": {
|
||||
"3": "create:block/belt_funnel_push_on"
|
||||
}
|
||||
}
|
|
@ -1,3 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/chute_port"
|
||||
}
|
|
@ -6,7 +6,7 @@
|
|||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"name": "create:chute_port"
|
||||
"name": "create:reality_funnel"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
|
@ -78,7 +78,6 @@ import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelBlock;
|
|||
import com.simibubi.create.content.logistics.block.chute.ChuteBlock;
|
||||
import com.simibubi.create.content.logistics.block.chute.ChuteGenerator;
|
||||
import com.simibubi.create.content.logistics.block.chute.ChuteItem;
|
||||
import com.simibubi.create.content.logistics.block.chute.ChutePortBlock;
|
||||
import com.simibubi.create.content.logistics.block.depot.DepotBlock;
|
||||
import com.simibubi.create.content.logistics.block.diodes.AbstractDiodeGenerator;
|
||||
import com.simibubi.create.content.logistics.block.diodes.AdjustableRepeaterBlock;
|
||||
|
@ -99,6 +98,9 @@ import com.simibubi.create.content.logistics.block.inventories.CreativeCrateBloc
|
|||
import com.simibubi.create.content.logistics.block.mechanicalArm.ArmBlock;
|
||||
import com.simibubi.create.content.logistics.block.packager.PackagerBlock;
|
||||
import com.simibubi.create.content.logistics.block.realityFunnel.BeltFunnelBlock;
|
||||
import com.simibubi.create.content.logistics.block.realityFunnel.BeltFunnelGenerator;
|
||||
import com.simibubi.create.content.logistics.block.realityFunnel.ChuteFunnelBlock;
|
||||
import com.simibubi.create.content.logistics.block.realityFunnel.ChuteFunnelGenerator;
|
||||
import com.simibubi.create.content.logistics.block.realityFunnel.FunnelItem;
|
||||
import com.simibubi.create.content.logistics.block.realityFunnel.RealityFunnelBlock;
|
||||
import com.simibubi.create.content.logistics.block.redstone.AnalogLeverBlock;
|
||||
|
@ -720,12 +722,6 @@ public class AllBlocks {
|
|||
.transform(customItemModel("_", "block"))
|
||||
.register();
|
||||
|
||||
public static final BlockEntry<ChutePortBlock> CHUTE_PORT = REGISTRATE.block("chute_port", ChutePortBlock::new)
|
||||
.initialProperties(SharedProperties::softMetal)
|
||||
.blockstate((c, p) -> p.horizontalBlock(c.get(), AssetLookup.standardModel(c, p)))
|
||||
.simpleItem()
|
||||
.register();
|
||||
|
||||
public static final BlockEntry<PackagerBlock> PACKAGER = REGISTRATE.block("packager", PackagerBlock::new)
|
||||
.initialProperties(SharedProperties::softMetal)
|
||||
.transform(StressConfigDefaults.setImpact(4.0))
|
||||
|
@ -749,12 +745,13 @@ public class AllBlocks {
|
|||
|
||||
public static final BlockEntry<BeltFunnelBlock> BELT_FUNNEL = REGISTRATE.block("belt_funnel", BeltFunnelBlock::new)
|
||||
.initialProperties(SharedProperties::softMetal)
|
||||
.blockstate((c, p) -> p.horizontalBlock(c.get(), s -> {
|
||||
String shape = s.get(BeltFunnelBlock.SHAPE)
|
||||
.getName();
|
||||
return s.get(BeltFunnelBlock.POWERED) ? AssetLookup.partialBaseModel(c, p, shape, "powered")
|
||||
: AssetLookup.partialBaseModel(c, p, shape);
|
||||
}))
|
||||
.blockstate(new BeltFunnelGenerator()::generate)
|
||||
.loot((p, b) -> p.registerDropping(b, REALITY_FUNNEL.get()))
|
||||
.register();
|
||||
|
||||
public static final BlockEntry<ChuteFunnelBlock> CHUTE_FUNNEL = REGISTRATE.block("chute_funnel", ChuteFunnelBlock::new)
|
||||
.initialProperties(SharedProperties::softMetal)
|
||||
.blockstate(new ChuteFunnelGenerator()::generate)
|
||||
.loot((p, b) -> p.registerDropping(b, REALITY_FUNNEL.get()))
|
||||
.register();
|
||||
|
||||
|
|
|
@ -69,6 +69,10 @@ public class AllShapes {
|
|||
.add(1, 6, 1, 15, 10, 15)
|
||||
.add(0, 10, 0, 16, 16, 16)
|
||||
.forDirectional(UP),
|
||||
CHUTE_FUNNEL = shape(3, -2, 3, 13, 2, 13).add(2, 2, 2, 14, 6, 14)
|
||||
.add(1, 5, 1, 15, 16, 15)
|
||||
.add(0, 8, 0, 16, 14, 16)
|
||||
.forDirectional(UP),
|
||||
BELT_FUNNEL_RETRACTED = shape(3, -5, 14, 13, 13, 19).add(0, -5, 8, 16, 16, 14)
|
||||
.forHorizontal(NORTH),
|
||||
BELT_FUNNEL_DEFAULT = shape(3, -5, 12, 13, 13, 17).add(0, -5, 6, 16, 16, 12)
|
||||
|
|
|
@ -1,25 +0,0 @@
|
|||
package com.simibubi.create.content.logistics.block.chute;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.HorizontalBlock;
|
||||
import net.minecraft.item.BlockItemUseContext;
|
||||
import net.minecraft.state.StateContainer.Builder;
|
||||
|
||||
public class ChutePortBlock extends HorizontalBlock {
|
||||
|
||||
public ChutePortBlock(Properties p_i48377_1_) {
|
||||
super(p_i48377_1_);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void fillStateContainer(Builder<Block, BlockState> p_206840_1_) {
|
||||
super.fillStateContainer(p_206840_1_.add(HORIZONTAL_FACING));
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState getStateForPlacement(BlockItemUseContext p_196258_1_) {
|
||||
return getDefaultState().with(HORIZONTAL_FACING, p_196258_1_.getPlacementHorizontalFacing());
|
||||
}
|
||||
|
||||
}
|
|
@ -1,10 +1,8 @@
|
|||
package com.simibubi.create.content.logistics.block.realityFunnel;
|
||||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.AllShapes;
|
||||
import com.simibubi.create.content.contraptions.relays.belt.BeltBlock;
|
||||
import com.simibubi.create.content.contraptions.relays.belt.BeltBlock.Slope;
|
||||
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
|
||||
import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelBlock;
|
||||
import com.simibubi.create.content.logistics.block.depot.DepotBlock;
|
||||
import com.simibubi.create.foundation.utility.Lang;
|
||||
|
@ -12,33 +10,22 @@ import com.simibubi.create.foundation.utility.VoxelShaper;
|
|||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.HorizontalBlock;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.item.BlockItemUseContext;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.ItemUseContext;
|
||||
import net.minecraft.state.BooleanProperty;
|
||||
import net.minecraft.state.EnumProperty;
|
||||
import net.minecraft.state.IProperty;
|
||||
import net.minecraft.state.StateContainer.Builder;
|
||||
import net.minecraft.state.properties.BlockStateProperties;
|
||||
import net.minecraft.util.ActionResultType;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.IStringSerializable;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.RayTraceResult;
|
||||
import net.minecraft.util.math.shapes.ISelectionContext;
|
||||
import net.minecraft.util.math.shapes.VoxelShape;
|
||||
import net.minecraft.world.IBlockReader;
|
||||
import net.minecraft.world.ILightReader;
|
||||
import net.minecraft.world.IWorld;
|
||||
import net.minecraft.world.IWorldReader;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class BeltFunnelBlock extends HorizontalBlock implements IWrenchable {
|
||||
public class BeltFunnelBlock extends HorizontalInteractionFunnelBlock {
|
||||
|
||||
public static final IProperty<Shape> SHAPE = EnumProperty.create("shape", Shape.class);
|
||||
public static final BooleanProperty POWERED = BlockStateProperties.POWERED;
|
||||
|
||||
public enum Shape implements IStringSerializable {
|
||||
RETRACTED(AllShapes.BELT_FUNNEL_RETRACTED), EXTENDED(AllShapes.BELT_FUNNEL_EXTENDED);
|
||||
|
@ -57,13 +44,12 @@ public class BeltFunnelBlock extends HorizontalBlock implements IWrenchable {
|
|||
|
||||
public BeltFunnelBlock(Properties p_i48377_1_) {
|
||||
super(p_i48377_1_);
|
||||
setDefaultState(getDefaultState().with(SHAPE, Shape.RETRACTED)
|
||||
.with(POWERED, false));
|
||||
setDefaultState(getDefaultState().with(SHAPE, Shape.RETRACTED));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void fillStateContainer(Builder<Block, BlockState> p_206840_1_) {
|
||||
super.fillStateContainer(p_206840_1_.add(HORIZONTAL_FACING, SHAPE, POWERED));
|
||||
super.fillStateContainer(p_206840_1_.add(SHAPE));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -72,35 +58,13 @@ public class BeltFunnelBlock extends HorizontalBlock implements IWrenchable {
|
|||
return state.get(SHAPE).shaper.get(state.get(HORIZONTAL_FACING));
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState getStateForPlacement(BlockItemUseContext ctx) {
|
||||
return updateShape(super.getStateForPlacement(ctx), ctx.getWorld(), ctx.getPos()).with(POWERED, ctx.getWorld()
|
||||
.isBlockPowered(ctx.getPos()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getPickBlock(BlockState state, RayTraceResult target, IBlockReader world, BlockPos pos,
|
||||
PlayerEntity player) {
|
||||
return AllBlocks.REALITY_FUNNEL.asStack();
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState neighbour, IWorld world,
|
||||
BlockPos pos, BlockPos p_196271_6_) {
|
||||
if (direction == Direction.DOWN && !isOnValidBelt(state, world, pos))
|
||||
return AllBlocks.REALITY_FUNNEL.getDefaultState()
|
||||
.with(RealityFunnelBlock.FACING, state.get(HORIZONTAL_FACING));
|
||||
if (direction == state.get(HORIZONTAL_FACING))
|
||||
return updateShape(state, world, pos);
|
||||
return state;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isValidPosition(BlockState state, IWorldReader world, BlockPos pos) {
|
||||
return !world.getBlockState(pos.offset(state.get(HORIZONTAL_FACING)
|
||||
.getOpposite()))
|
||||
.getShape(world, pos)
|
||||
.isEmpty();
|
||||
else
|
||||
return super.updatePostPlacement(state, direction, neighbour, world, pos, p_196271_6_);
|
||||
}
|
||||
|
||||
public static boolean isOnValidBelt(BlockState state, IWorldReader world, BlockPos pos) {
|
||||
|
@ -118,24 +82,7 @@ public class BeltFunnelBlock extends HorizontalBlock implements IWrenchable {
|
|||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos,
|
||||
boolean isMoving) {
|
||||
if (worldIn.isRemote)
|
||||
return;
|
||||
|
||||
Direction blockFacing = state.get(HORIZONTAL_FACING)
|
||||
.getOpposite();
|
||||
if (fromPos.equals(pos.offset(blockFacing)))
|
||||
if (!isValidPosition(state, worldIn, pos))
|
||||
worldIn.destroyBlock(pos, true);
|
||||
|
||||
boolean previouslyPowered = state.get(POWERED);
|
||||
if (previouslyPowered != worldIn.isBlockPowered(pos))
|
||||
worldIn.setBlockState(pos, state.cycle(POWERED), 2);
|
||||
}
|
||||
|
||||
private BlockState updateShape(BlockState state, ILightReader world, BlockPos pos) {
|
||||
public static BlockState updateShape(BlockState state, ILightReader world, BlockPos pos) {
|
||||
state = state.with(SHAPE, Shape.RETRACTED);
|
||||
BlockState neighbour = world.getBlockState(pos.offset(state.get(HORIZONTAL_FACING)));
|
||||
if (canConnectTo(state, neighbour))
|
||||
|
@ -143,21 +90,19 @@ public class BeltFunnelBlock extends HorizontalBlock implements IWrenchable {
|
|||
return state;
|
||||
}
|
||||
|
||||
private boolean canConnectTo(BlockState state, BlockState neighbour) {
|
||||
private static boolean canConnectTo(BlockState state, BlockState neighbour) {
|
||||
if (neighbour.getBlock() instanceof BeltTunnelBlock)
|
||||
return true;
|
||||
if (neighbour.getBlock() == this && neighbour.get(HORIZONTAL_FACING) == state.get(HORIZONTAL_FACING)
|
||||
.getOpposite())
|
||||
if (neighbour.getBlock() instanceof BeltFunnelBlock
|
||||
&& neighbour.get(HORIZONTAL_FACING) == state.get(HORIZONTAL_FACING)
|
||||
.getOpposite())
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActionResultType onWrenched(BlockState state, ItemUseContext context) {
|
||||
if (!context.getWorld().isRemote)
|
||||
context.getWorld()
|
||||
.setBlockState(context.getPos(), state.cycle(SHAPE));
|
||||
return ActionResultType.SUCCESS;
|
||||
protected boolean canStillInteract(BlockState state, IWorldReader world, BlockPos pos) {
|
||||
return isOnValidBelt(state, world, pos);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
package com.simibubi.create.content.logistics.block.realityFunnel;
|
||||
|
||||
import com.simibubi.create.foundation.data.AssetLookup;
|
||||
import com.simibubi.create.foundation.data.SpecialBlockStateGen;
|
||||
import com.tterrag.registrate.providers.DataGenContext;
|
||||
import com.tterrag.registrate.providers.RegistrateBlockstateProvider;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraftforge.client.model.generators.ModelFile;
|
||||
|
||||
public class BeltFunnelGenerator extends SpecialBlockStateGen {
|
||||
|
||||
@Override
|
||||
protected int getXRotation(BlockState state) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getYRotation(BlockState state) {
|
||||
return horizontalAngle(state.get(BeltFunnelBlock.HORIZONTAL_FACING)) + 180;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends Block> ModelFile getModel(DataGenContext<Block, T> ctx, RegistrateBlockstateProvider prov,
|
||||
BlockState state) {
|
||||
boolean pushing = state.get(BeltFunnelBlock.PUSHING);
|
||||
boolean powered = state.get(BeltFunnelBlock.POWERED);
|
||||
String shapeName = state.get(BeltFunnelBlock.SHAPE)
|
||||
.getName();
|
||||
if (pushing && !powered)
|
||||
return AssetLookup.partialBaseModel(ctx, prov, shapeName);
|
||||
String name = ctx.getName() + "_" + (pushing ? "push_" : "pull_") + (powered ? "on" : "off");
|
||||
return prov.models()
|
||||
.withExistingParent(name + "_" + shapeName, prov.modLoc("block/" + ctx.getName() + "/block_" + shapeName))
|
||||
.texture("2", prov.modLoc("block/" + name));
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
package com.simibubi.create.content.logistics.block.realityFunnel;
|
||||
|
||||
import com.simibubi.create.AllShapes;
|
||||
import com.simibubi.create.content.logistics.block.chute.ChuteBlock;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.shapes.ISelectionContext;
|
||||
import net.minecraft.util.math.shapes.VoxelShape;
|
||||
import net.minecraft.world.IBlockReader;
|
||||
import net.minecraft.world.IWorldReader;
|
||||
|
||||
public class ChuteFunnelBlock extends HorizontalInteractionFunnelBlock {
|
||||
|
||||
public ChuteFunnelBlock(Properties p_i48377_1_) {
|
||||
super(p_i48377_1_);
|
||||
}
|
||||
|
||||
public static boolean isOnValidChute(BlockState state, IWorldReader world, BlockPos pos) {
|
||||
Direction direction = state.get(HORIZONTAL_FACING);
|
||||
if (world.getBlockState(pos.offset(direction))
|
||||
.getBlock() instanceof ChuteBlock)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VoxelShape getShape(BlockState state, IBlockReader p_220053_2_, BlockPos p_220053_3_,
|
||||
ISelectionContext p_220053_4_) {
|
||||
return AllShapes.CHUTE_FUNNEL.get(state.get(HORIZONTAL_FACING));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean canStillInteract(BlockState state, IWorldReader world, BlockPos pos) {
|
||||
return isOnValidChute(state, world, pos);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
package com.simibubi.create.content.logistics.block.realityFunnel;
|
||||
|
||||
import com.simibubi.create.foundation.data.AssetLookup;
|
||||
import com.simibubi.create.foundation.data.SpecialBlockStateGen;
|
||||
import com.tterrag.registrate.providers.DataGenContext;
|
||||
import com.tterrag.registrate.providers.RegistrateBlockstateProvider;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraftforge.client.model.generators.ModelFile;
|
||||
|
||||
public class ChuteFunnelGenerator extends SpecialBlockStateGen {
|
||||
|
||||
@Override
|
||||
protected int getXRotation(BlockState state) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getYRotation(BlockState state) {
|
||||
return horizontalAngle(state.get(BeltFunnelBlock.HORIZONTAL_FACING)) + 180;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends Block> ModelFile getModel(DataGenContext<Block, T> ctx, RegistrateBlockstateProvider prov,
|
||||
BlockState state) {
|
||||
boolean pushing = state.get(ChuteFunnelBlock.PUSHING);
|
||||
boolean powered = state.get(ChuteFunnelBlock.POWERED);
|
||||
if (pushing && !powered)
|
||||
return AssetLookup.partialBaseModel(ctx, prov);
|
||||
String suffix = (pushing ? "push_" : "pull_") + (powered ? "on" : "off");
|
||||
String textureName = "belt_funnel_" + suffix;
|
||||
String modelName = ctx.getName() + "_" + suffix;
|
||||
return prov.models()
|
||||
.withExistingParent(modelName, prov.modLoc("block/" + ctx.getName() + "/block"))
|
||||
.texture("3", prov.modLoc("block/" + textureName));
|
||||
}
|
||||
|
||||
}
|
|
@ -7,6 +7,9 @@ import net.minecraft.block.BlockState;
|
|||
import net.minecraft.item.BlockItem;
|
||||
import net.minecraft.item.BlockItemUseContext;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.Rotation;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class FunnelItem extends BlockItem {
|
||||
|
||||
|
@ -25,11 +28,25 @@ public class FunnelItem extends BlockItem {
|
|||
if (!direction.getAxis()
|
||||
.isHorizontal())
|
||||
return state;
|
||||
|
||||
BlockState equivalentBeltFunnel = AllBlocks.BELT_FUNNEL.get()
|
||||
.getStateForPlacement(ctx)
|
||||
.with(BeltFunnelBlock.HORIZONTAL_FACING, direction);
|
||||
if (BeltFunnelBlock.isOnValidBelt(equivalentBeltFunnel, ctx.getWorld(), ctx.getPos()))
|
||||
return equivalentBeltFunnel;
|
||||
BlockState equivalentChuteFunnel = AllBlocks.CHUTE_FUNNEL.get()
|
||||
.getStateForPlacement(ctx)
|
||||
.with(ChuteFunnelBlock.HORIZONTAL_FACING, direction);
|
||||
BlockState reversedChuteFunnel = equivalentChuteFunnel.rotate(Rotation.CLOCKWISE_180)
|
||||
.cycle(ChuteFunnelBlock.PUSHING);
|
||||
|
||||
World world = ctx.getWorld();
|
||||
BlockPos pos = ctx.getPos();
|
||||
if (BeltFunnelBlock.isOnValidBelt(equivalentBeltFunnel, world, pos))
|
||||
return BeltFunnelBlock.updateShape(equivalentBeltFunnel, world, pos);
|
||||
if (ChuteFunnelBlock.isOnValidChute(equivalentChuteFunnel, world, pos))
|
||||
return equivalentChuteFunnel;
|
||||
if (ChuteFunnelBlock.isOnValidChute(reversedChuteFunnel, world, pos))
|
||||
return reversedChuteFunnel;
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,90 @@
|
|||
package com.simibubi.create.content.logistics.block.realityFunnel;
|
||||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.HorizontalBlock;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.item.BlockItemUseContext;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.ItemUseContext;
|
||||
import net.minecraft.state.BooleanProperty;
|
||||
import net.minecraft.state.StateContainer.Builder;
|
||||
import net.minecraft.state.properties.BlockStateProperties;
|
||||
import net.minecraft.util.ActionResultType;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.RayTraceResult;
|
||||
import net.minecraft.world.IBlockReader;
|
||||
import net.minecraft.world.IWorld;
|
||||
import net.minecraft.world.IWorldReader;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public abstract class HorizontalInteractionFunnelBlock extends HorizontalBlock implements IWrenchable {
|
||||
|
||||
public static final BooleanProperty POWERED = BlockStateProperties.POWERED;
|
||||
public static final BooleanProperty PUSHING = BooleanProperty.create("pushing");
|
||||
|
||||
public HorizontalInteractionFunnelBlock(Properties p_i48377_1_) {
|
||||
super(p_i48377_1_);
|
||||
setDefaultState(getDefaultState().with(PUSHING, true)
|
||||
.with(POWERED, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void fillStateContainer(Builder<Block, BlockState> p_206840_1_) {
|
||||
super.fillStateContainer(p_206840_1_.add(HORIZONTAL_FACING, POWERED, PUSHING));
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState getStateForPlacement(BlockItemUseContext ctx) {
|
||||
return super.getStateForPlacement(ctx).with(POWERED, ctx.getWorld()
|
||||
.isBlockPowered(ctx.getPos()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getPickBlock(BlockState state, RayTraceResult target, IBlockReader world, BlockPos pos,
|
||||
PlayerEntity player) {
|
||||
return AllBlocks.REALITY_FUNNEL.asStack();
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState neighbour, IWorld world,
|
||||
BlockPos pos, BlockPos p_196271_6_) {
|
||||
if (!canStillInteract(state, world, pos))
|
||||
return AllBlocks.REALITY_FUNNEL.getDefaultState()
|
||||
.with(RealityFunnelBlock.FACING, state.get(HORIZONTAL_FACING));
|
||||
return state;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isValidPosition(BlockState state, IWorldReader world, BlockPos pos) {
|
||||
return !world.getBlockState(pos.offset(state.get(HORIZONTAL_FACING)
|
||||
.getOpposite()))
|
||||
.getShape(world, pos)
|
||||
.isEmpty();
|
||||
}
|
||||
|
||||
protected abstract boolean canStillInteract(BlockState state, IWorldReader world, BlockPos pos);
|
||||
|
||||
@Override
|
||||
public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos,
|
||||
boolean isMoving) {
|
||||
if (worldIn.isRemote)
|
||||
return;
|
||||
boolean previouslyPowered = state.get(POWERED);
|
||||
if (previouslyPowered != worldIn.isBlockPowered(pos))
|
||||
worldIn.setBlockState(pos, state.cycle(POWERED), 2);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActionResultType onWrenched(BlockState state, ItemUseContext context) {
|
||||
if (!context.getWorld().isRemote)
|
||||
context.getWorld()
|
||||
.setBlockState(context.getPos(), state.cycle(PUSHING));
|
||||
return ActionResultType.SUCCESS;
|
||||
}
|
||||
|
||||
}
|
|
@ -2,6 +2,7 @@ package com.simibubi.create.content.logistics.block.realityFunnel;
|
|||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.AllShapes;
|
||||
import com.simibubi.create.content.logistics.block.chute.ChuteBlock;
|
||||
import com.simibubi.create.foundation.block.ProperDirectionalBlock;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
|
@ -22,7 +23,7 @@ import net.minecraft.world.World;
|
|||
public class RealityFunnelBlock extends ProperDirectionalBlock {
|
||||
|
||||
public static final BooleanProperty POWERED = BlockStateProperties.POWERED;
|
||||
|
||||
|
||||
public RealityFunnelBlock(Properties p_i48415_1_) {
|
||||
super(p_i48415_1_);
|
||||
setDefaultState(getDefaultState().with(POWERED, false));
|
||||
|
@ -30,16 +31,24 @@ public class RealityFunnelBlock extends ProperDirectionalBlock {
|
|||
|
||||
@Override
|
||||
public BlockState getStateForPlacement(BlockItemUseContext context) {
|
||||
return getDefaultState().with(FACING, context.getFace())
|
||||
Direction facing = context.getFace();
|
||||
if (facing.getAxis()
|
||||
.isVertical()
|
||||
&& context.getWorld()
|
||||
.getBlockState(context.getPos()
|
||||
.offset(facing.getOpposite()))
|
||||
.getBlock() instanceof ChuteBlock)
|
||||
facing = facing.getOpposite();
|
||||
return getDefaultState().with(FACING, facing)
|
||||
.with(POWERED, context.getWorld()
|
||||
.isBlockPowered(context.getPos()));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void fillStateContainer(Builder<Block, BlockState> builder) {
|
||||
super.fillStateContainer(builder.add(POWERED));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public VoxelShape getShape(BlockState state, IBlockReader p_220053_2_, BlockPos p_220053_3_,
|
||||
ISelectionContext p_220053_4_) {
|
||||
|
@ -49,13 +58,31 @@ public class RealityFunnelBlock extends ProperDirectionalBlock {
|
|||
@Override
|
||||
public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState p_196271_3_, IWorld world,
|
||||
BlockPos pos, BlockPos p_196271_6_) {
|
||||
if (state.get(FACING)
|
||||
.getAxis()
|
||||
.isHorizontal() && direction == Direction.DOWN) {
|
||||
BlockState equivalentFunnel = AllBlocks.BELT_FUNNEL.getDefaultState()
|
||||
.with(BeltFunnelBlock.HORIZONTAL_FACING, state.get(FACING));
|
||||
if (BeltFunnelBlock.isOnValidBelt(equivalentFunnel, world, pos))
|
||||
return equivalentFunnel;
|
||||
Direction facing = state.get(FACING);
|
||||
if (facing.getAxis()
|
||||
.isHorizontal()) {
|
||||
if (direction == Direction.DOWN) {
|
||||
BlockState equivalentFunnel = AllBlocks.BELT_FUNNEL.getDefaultState()
|
||||
.with(BeltFunnelBlock.HORIZONTAL_FACING, facing)
|
||||
.with(BeltFunnelBlock.POWERED, state.get(POWERED));
|
||||
if (BeltFunnelBlock.isOnValidBelt(equivalentFunnel, world, pos))
|
||||
return equivalentFunnel;
|
||||
}
|
||||
if (direction == facing) {
|
||||
BlockState equivalentFunnel = AllBlocks.CHUTE_FUNNEL.getDefaultState()
|
||||
.with(ChuteFunnelBlock.HORIZONTAL_FACING, facing)
|
||||
.with(ChuteFunnelBlock.POWERED, state.get(POWERED));
|
||||
if (ChuteFunnelBlock.isOnValidChute(equivalentFunnel, world, pos))
|
||||
return equivalentFunnel;
|
||||
}
|
||||
if (direction == facing.getOpposite()) {
|
||||
BlockState equivalentFunnel = AllBlocks.CHUTE_FUNNEL.getDefaultState()
|
||||
.with(ChuteFunnelBlock.HORIZONTAL_FACING, facing.getOpposite())
|
||||
.cycle(ChuteFunnelBlock.PUSHING)
|
||||
.with(ChuteFunnelBlock.POWERED, state.get(POWERED));
|
||||
if (ChuteFunnelBlock.isOnValidChute(equivalentFunnel, world, pos))
|
||||
return equivalentFunnel;
|
||||
}
|
||||
}
|
||||
return state;
|
||||
}
|
||||
|
@ -65,13 +92,6 @@ public class RealityFunnelBlock extends ProperDirectionalBlock {
|
|||
boolean isMoving) {
|
||||
if (worldIn.isRemote)
|
||||
return;
|
||||
|
||||
Direction blockFacing = state.get(FACING)
|
||||
.getOpposite();
|
||||
if (fromPos.equals(pos.offset(blockFacing)))
|
||||
if (!isValidPosition(state, worldIn, pos))
|
||||
worldIn.destroyBlock(pos, true);
|
||||
|
||||
boolean previouslyPowered = state.get(POWERED);
|
||||
if (previouslyPowered != worldIn.isBlockPowered(pos))
|
||||
worldIn.setBlockState(pos, state.cycle(POWERED), 2);
|
||||
|
@ -79,10 +99,10 @@ public class RealityFunnelBlock extends ProperDirectionalBlock {
|
|||
|
||||
@Override
|
||||
public boolean isValidPosition(BlockState state, IWorldReader world, BlockPos pos) {
|
||||
return !world.getBlockState(pos.offset(state.get(FACING)
|
||||
Block block = world.getBlockState(pos.offset(state.get(FACING)
|
||||
.getOpposite()))
|
||||
.getShape(world, pos)
|
||||
.isEmpty();
|
||||
.getBlock();
|
||||
return !(block instanceof RealityFunnelBlock) && !(block instanceof HorizontalInteractionFunnelBlock);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"credit": "Made with Blockbench",
|
||||
"parent": "block/block",
|
||||
"textures": {
|
||||
"2": "create:block/funnel_off",
|
||||
"2": "create:block/belt_funnel_push_off",
|
||||
"3": "create:block/funnel_back",
|
||||
"4": "create:block/funnel_plating",
|
||||
"particle": "create:block/brass_block"
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/belt_funnel/block_extended",
|
||||
"textures": {
|
||||
"2": "create:block/funnel_on"
|
||||
}
|
||||
}
|
|
@ -2,7 +2,7 @@
|
|||
"credit": "Made with Blockbench",
|
||||
"parent": "block/block",
|
||||
"textures": {
|
||||
"2": "create:block/funnel_off",
|
||||
"2": "create:block/belt_funnel_push_off",
|
||||
"3": "create:block/funnel_back",
|
||||
"4": "create:block/funnel_plating",
|
||||
"particle": "create:block/brass_block"
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/belt_funnel/block_retracted",
|
||||
"textures": {
|
||||
"2": "create:block/funnel_on"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,248 @@
|
|||
{
|
||||
"credit": "Made with Blockbench",
|
||||
"parent": "block/block",
|
||||
"textures": {
|
||||
"3": "create:block/belt_funnel_push_off",
|
||||
"4": "create:block/funnel_plating",
|
||||
"13": "create:block/chute",
|
||||
"3_particle": "create:block/brass_block",
|
||||
"particle": "create:block/brass_block",
|
||||
"1_2": "create:block/funnel_back"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"name": "RightWall",
|
||||
"from": [0, 0, 2],
|
||||
"to": [2, 16, 8],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 10]},
|
||||
"faces": {
|
||||
"north": {"uv": [14, 0, 16, 16], "texture": "#3_particle"},
|
||||
"east": {"uv": [0, 0, 16, 6], "rotation": 90, "texture": "#3"},
|
||||
"south": {"uv": [0, 0, 2, 16], "texture": "#3_particle"},
|
||||
"west": {"uv": [0, 0, 16, 6], "rotation": 270, "texture": "#3"},
|
||||
"up": {"uv": [0, 0, 2, 6], "texture": "#3"},
|
||||
"down": {"uv": [14, 0, 16, 6], "rotation": 180, "texture": "#3"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "LeftWall",
|
||||
"from": [14, 0, 2],
|
||||
"to": [16, 16, 8],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 10]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 2, 16], "texture": "#3_particle"},
|
||||
"east": {"uv": [0, 0, 16, 6], "rotation": 90, "texture": "#3"},
|
||||
"south": {"uv": [14, 0, 16, 16], "texture": "#3_particle"},
|
||||
"west": {"uv": [0, 0, 16, 6], "rotation": 270, "texture": "#3"},
|
||||
"up": {"uv": [14, 0, 16, 6], "texture": "#3"},
|
||||
"down": {"uv": [0, 0, 2, 6], "rotation": 180, "texture": "#3"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Top",
|
||||
"from": [2, 14, 2],
|
||||
"to": [14, 16, 8],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [6, 8, 10]},
|
||||
"faces": {
|
||||
"north": {"uv": [2, 0, 14, 2], "texture": "#3_particle"},
|
||||
"south": {"uv": [2, 0, 14, 2], "texture": "#3_particle"},
|
||||
"up": {"uv": [2, 0, 14, 6], "texture": "#3"},
|
||||
"down": {"uv": [2, 0, 14, 6], "rotation": 180, "texture": "#3"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Top",
|
||||
"from": [2, 0, 2],
|
||||
"to": [14, 2, 8],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [6, 8, 10]},
|
||||
"faces": {
|
||||
"north": {"uv": [2, 14, 14, 16], "texture": "#3_particle"},
|
||||
"south": {"uv": [2, 14, 14, 16], "texture": "#3_particle"},
|
||||
"up": {"uv": [2, 0, 14, 6], "texture": "#3"},
|
||||
"down": {"uv": [2, 0, 14, 6], "rotation": 180, "texture": "#3"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "F5",
|
||||
"from": [11, 1.5, 3],
|
||||
"to": [14, 14.5, 4],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [14, 8, 9.5]},
|
||||
"faces": {
|
||||
"north": {"uv": [6.5, 0, 8, 6.5], "texture": "#4"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "F6",
|
||||
"from": [5, 1.5, 3],
|
||||
"to": [8, 14.5, 4],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 9.5]},
|
||||
"faces": {
|
||||
"north": {"uv": [6.5, 0, 8, 6.5], "texture": "#4"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "F6",
|
||||
"from": [8, 1.5, 3],
|
||||
"to": [11, 14.5, 4],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [14, 8, 9.5]},
|
||||
"faces": {
|
||||
"north": {"uv": [6.5, 0, 8, 6.5], "texture": "#4"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "F7",
|
||||
"from": [2, 1.5, 3],
|
||||
"to": [5, 14.5, 4],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 9.5]},
|
||||
"faces": {
|
||||
"north": {"uv": [6.5, 0, 8, 6.5], "texture": "#4"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "BackExtension",
|
||||
"from": [2, 2, 10],
|
||||
"to": [14, 14, 14],
|
||||
"faces": {
|
||||
"east": {"uv": [13, 10, 15, 16], "texture": "#1_2"},
|
||||
"south": {"uv": [9, 0.5, 15, 6.5], "texture": "#1_2"},
|
||||
"west": {"uv": [13, 10, 15, 16], "rotation": 180, "texture": "#1_2"},
|
||||
"up": {"uv": [13, 10, 15, 16], "rotation": 270, "texture": "#1_2"},
|
||||
"down": {"uv": [13, 10, 15, 16], "rotation": 90, "texture": "#1_2"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "MidExtension",
|
||||
"from": [1, 1, 7],
|
||||
"to": [15, 15, 11],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 7]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 9, 7, 16], "texture": "#1_2"},
|
||||
"east": {"uv": [11, 9, 13, 16], "rotation": 180, "texture": "#1_2"},
|
||||
"south": {"uv": [8.5, 0, 15.5, 7], "texture": "#1_2"},
|
||||
"west": {"uv": [11, 9, 13, 16], "texture": "#1_2"},
|
||||
"up": {"uv": [11, 9, 13, 16], "rotation": 90, "texture": "#1_2"},
|
||||
"down": {"uv": [11, 9, 13, 16], "rotation": 270, "texture": "#1_2"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Back",
|
||||
"from": [3, 3, 14],
|
||||
"to": [13, 13, 18],
|
||||
"faces": {
|
||||
"east": {"uv": [9.5, 9, 14.5, 11], "rotation": 90, "texture": "#4"},
|
||||
"south": {"uv": [9.5, 11, 14.5, 16], "texture": "#4"},
|
||||
"west": {"uv": [9.5, 9, 14.5, 11], "rotation": 270, "texture": "#4"},
|
||||
"up": {"uv": [9.5, 9, 14.5, 11], "texture": "#4"},
|
||||
"down": {"uv": [9.5, 9, 14.5, 11], "rotation": 180, "texture": "#4"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Back",
|
||||
"from": [1.1, 1.1, -2.9],
|
||||
"to": [14.9, 14.9, 2.1],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 6]},
|
||||
"faces": {
|
||||
"north": {"uv": [8.5, 8.5, 15.5, 15.5], "texture": "#13"},
|
||||
"east": {"uv": [0, 13.5, 7, 16], "rotation": 90, "texture": "#13"},
|
||||
"west": {"uv": [0, 13.5, 7, 16], "rotation": 270, "texture": "#13"},
|
||||
"up": {"uv": [0, 13.5, 7, 16], "texture": "#13"},
|
||||
"down": {"uv": [0, 13.5, 7, 16], "rotation": 180, "texture": "#13"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Back",
|
||||
"from": [2.1, 1.1, -6.7],
|
||||
"to": [13.9, 4.9, -2.9],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, -54]},
|
||||
"faces": {
|
||||
"north": {"uv": [9, 6, 15, 8], "texture": "#13"},
|
||||
"east": {"uv": [11, 6, 13, 8], "texture": "#13"},
|
||||
"south": {"uv": [0, 0, 7, 7], "texture": "#13"},
|
||||
"west": {"uv": [11, 6, 13, 8], "texture": "#13"},
|
||||
"up": {"uv": [8.5, 1, 15.5, 3], "rotation": 180, "texture": "#13"},
|
||||
"down": {"uv": [9, 4.5, 15, 6.5], "texture": "#13"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
"thirdperson_righthand": {
|
||||
"rotation": [75, 45, 0],
|
||||
"translation": [0, 2.5, 0],
|
||||
"scale": [0.375, 0.375, 0.375]
|
||||
},
|
||||
"thirdperson_lefthand": {
|
||||
"rotation": [75, 45, 0],
|
||||
"translation": [0, 2.5, 0],
|
||||
"scale": [0.375, 0.375, 0.375]
|
||||
},
|
||||
"firstperson_righthand": {
|
||||
"rotation": [0, 45, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"firstperson_lefthand": {
|
||||
"rotation": [0, 225, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"ground": {
|
||||
"translation": [0, 3.25, 0],
|
||||
"scale": [0.25, 0.25, 0.25]
|
||||
},
|
||||
"gui": {
|
||||
"rotation": [30, 225, 0],
|
||||
"translation": [0, 1, 0],
|
||||
"scale": [0.5, 0.5, 0.5]
|
||||
},
|
||||
"head": {
|
||||
"rotation": [0, 90, 0]
|
||||
},
|
||||
"fixed": {
|
||||
"rotation": [0, 90, 0],
|
||||
"translation": [0, 1.5, 0],
|
||||
"scale": [0.5, 0.5, 0.5]
|
||||
}
|
||||
},
|
||||
"groups": [
|
||||
{
|
||||
"name": "block",
|
||||
"origin": [8, 8, 8],
|
||||
"children": [
|
||||
{
|
||||
"name": "BeltFunnel",
|
||||
"origin": [9, -4, 8],
|
||||
"children": [
|
||||
{
|
||||
"name": "FrontSection",
|
||||
"origin": [9, -4, 8],
|
||||
"children": [0, 1, 2, 3,
|
||||
{
|
||||
"name": "Flap",
|
||||
"origin": [8, 8, 8],
|
||||
"children": [4, 5, 6, 7]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Extension",
|
||||
"origin": [9, -4, 8],
|
||||
"children": [8, 9]
|
||||
},
|
||||
{
|
||||
"name": "DELETABLEEXTENSION",
|
||||
"origin": [9, -4, 8],
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"name": "DELETABLEEXTESNIONMID",
|
||||
"origin": [35, 12, 4],
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"name": "Base",
|
||||
"origin": [9, -4, 8],
|
||||
"children": [10, 11]
|
||||
}
|
||||
]
|
||||
}, 12]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
{
|
||||
"credit": "Made with Blockbench",
|
||||
"parent": "block/block",
|
||||
"textures": {
|
||||
"14": "create:block/chute_port",
|
||||
"particle": "create:block/zinc_block"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"name": "Port",
|
||||
"from": [0, 0, 0],
|
||||
"to": [16, 16, 16],
|
||||
"faces": {
|
||||
"north": {"uv": [12, 0, 16, 4], "texture": "#14"},
|
||||
"east": {"uv": [0, 0, 4, 4], "texture": "#14"},
|
||||
"south": {"uv": [0, 0, 4, 4], "texture": "#14"},
|
||||
"west": {"uv": [0, 0, 4, 4], "texture": "#14"},
|
||||
"up": {"uv": [4, 4, 8, 8], "texture": "#14"},
|
||||
"down": {"uv": [0, 4, 4, 8], "texture": "#14"}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
After Width: | Height: | Size: 438 B |
After Width: | Height: | Size: 433 B |
After Width: | Height: | Size: 423 B |
After Width: | Height: | Size: 426 B |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 370 B After Width: | Height: | Size: 372 B |
Before Width: | Height: | Size: 378 B After Width: | Height: | Size: 370 B |