Logistics' final stretch, Part II
- Belt observer -> Content observer - Content observers can now monitor any inventory and funnel transactions - Stockpile switches no longer only access slots exposed to a specific side of an inventory - Stockpile switches can now take a filter
|
@ -20,7 +20,6 @@ a579c40c43dc2174afb66f42d00d0c4a0efaaeee assets/create/blockstates/andesite_bric
|
|||
1d2d8081581e07d9be4b382aede4f2de4401cc6b assets/create/blockstates/andesite_tunnel.json
|
||||
f9fa6aa530eb0891a74eadfbebc663172a57147a assets/create/blockstates/basin.json
|
||||
f25693a9429f6337149ff24f27900dc4eb82a7c2 assets/create/blockstates/belt.json
|
||||
40d10934934ea142d71fc6ce598b1455c3ad47b4 assets/create/blockstates/belt_observer.json
|
||||
cf9045eb16e5299a1d917c4cb536289f49411276 assets/create/blockstates/birch_window.json
|
||||
94a1a91403eb4b035fec48071e7fcae57a8a6abd assets/create/blockstates/birch_window_pane.json
|
||||
58b07d2af6030342f0354f6d3fd0ee128d2d74b4 assets/create/blockstates/black_seat.json
|
||||
|
@ -43,6 +42,7 @@ b59324f051f21d8ce1a48a08f4721a61a3c414d6 assets/create/blockstates/chute.json
|
|||
4947c261310445fa55b92038326ac82967d192dd assets/create/blockstates/clockwork_bearing.json
|
||||
1f33834c685e3243882acfe20183fe64dfa872be assets/create/blockstates/clutch.json
|
||||
e5e3757e99c139d67b2a70288466d8a74d818841 assets/create/blockstates/cogwheel.json
|
||||
36f54136a7756c97f71bc6b47ef4e8e575e72879 assets/create/blockstates/content_observer.json
|
||||
f8eff64c75fc599e9a44a003f54ae9931cd8ce7c assets/create/blockstates/copper_block.json
|
||||
cabf6b8c59eb0e3d56a0a5a856ca058bb3200882 assets/create/blockstates/copper_casing.json
|
||||
3355a852cdc717e257ca19b3db836068964733e3 assets/create/blockstates/copper_ore.json
|
||||
|
@ -349,17 +349,17 @@ c77b46d8b459e5c7cc495393546f3fcca8a1fa1d assets/create/blockstates/weathered_lim
|
|||
a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.json
|
||||
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
|
||||
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
|
||||
c87674f2935327f78657f1bb44b3b10b6697a548 assets/create/lang/en_ud.json
|
||||
62a4c9e5454fd6e899495c95d6fddd020d472bc7 assets/create/lang/en_us.json
|
||||
42081320880e3248cc1e7e667d38bb3be682790a assets/create/lang/unfinished/de_de.json
|
||||
8fc3d8467436b5dd9221b0ed72b1a64bf83d0767 assets/create/lang/unfinished/fr_fr.json
|
||||
a5125e0ca8bb93c7c4f11d49a80a155a7ea14b16 assets/create/lang/unfinished/it_it.json
|
||||
b173b6500f8a675e266864310ab8e205721dbe12 assets/create/lang/unfinished/ja_jp.json
|
||||
1af8e96a3129f8aac458b75eff69378a0cc9dd7d assets/create/lang/unfinished/ko_kr.json
|
||||
343a4455ca0f29b2ae6ac439030c0dfde0e4c59b assets/create/lang/unfinished/nl_nl.json
|
||||
d7bd8d85e3b8def1b4fe72da0a43845d1bb61c1c assets/create/lang/unfinished/pt_br.json
|
||||
6e7fdb53ae3121e5575021bb224d1bfbe257c38b assets/create/lang/unfinished/ru_ru.json
|
||||
1a3e1309d92024445dae821d25168dab74ff5cdd assets/create/lang/unfinished/zh_cn.json
|
||||
5e8bf32d45aae9207aa4063803d073dda12fefc9 assets/create/lang/en_ud.json
|
||||
a623a699b4b15b1793846f2981f5ddfcf5f70eaa assets/create/lang/en_us.json
|
||||
20b98763fcc45b49d4f08c0567de1305ae2ca08b assets/create/lang/unfinished/de_de.json
|
||||
49356dba136af4ba87c61adcec8a5e86ffed0d19 assets/create/lang/unfinished/fr_fr.json
|
||||
7aeadfee8cf3f5037a892d20dc5ed5a73015822d assets/create/lang/unfinished/it_it.json
|
||||
da24efa68279d5bd95c55210cc5ecb46f7b28550 assets/create/lang/unfinished/ja_jp.json
|
||||
e391370d913d9ea71b061ead791e335c5fd5abe1 assets/create/lang/unfinished/ko_kr.json
|
||||
920688bd6cfdbb4a3f3a35700868b5639f10bf2a assets/create/lang/unfinished/nl_nl.json
|
||||
d57b0279090380d35f6f56a34864114b210d815c assets/create/lang/unfinished/pt_br.json
|
||||
4f957b1130d5f2ae953d687d754417de0f62fd61 assets/create/lang/unfinished/ru_ru.json
|
||||
c2198b6cee5fdba4049fd2166f6382e5bbaf6581 assets/create/lang/unfinished/zh_cn.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
|
||||
|
@ -415,22 +415,6 @@ aaf2e4259bcfcedd3400e9acb2d64c0cf06f7fb1 assets/create/models/block/andesite_tun
|
|||
c9aec5c30e6821c8f125202cad236afa48f6c358 assets/create/models/block/andesite_tunnel/t_left.json
|
||||
1dcb8fe81a275ef8a49c04db021ad29abe8b38ae assets/create/models/block/andesite_tunnel/t_right.json
|
||||
e2801a0c3fe8e1c2485291485b977f581fdc8b7c assets/create/models/block/andesite_tunnel/window.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
|
||||
0bddcf5449e18abbc11e984f4b125141b14baaf7 assets/create/models/block/belt_observer/detect_powered.json
|
||||
c521e51b557f4643027fe7a8ec9d4f6a4ade1279 assets/create/models/block/belt_observer/eject.json
|
||||
79863633fc1fec21241650a5eb3203cf4d3fd210 assets/create/models/block/belt_observer/eject_belt.json
|
||||
a6d8262629371113147f8b13986a6f72c51fc100 assets/create/models/block/belt_observer/eject_belt_powered.json
|
||||
2dad3c6bd49c4b608ad7c30567bb3e5845c46cf8 assets/create/models/block/belt_observer/eject_powered.json
|
||||
e1b801f2f37a78f18a787f4484f7b8ec57671c4f assets/create/models/block/belt_observer/pulse.json
|
||||
fc6dd3e43af11ede6ef5d402d30715ebf69dac2e assets/create/models/block/belt_observer/pulse_belt.json
|
||||
7d2490e4228ce4f0ee8875d5ac5fef92eea68015 assets/create/models/block/belt_observer/pulse_belt_powered.json
|
||||
fa79580db6187c864bc8148a41987ecdd1eb03b7 assets/create/models/block/belt_observer/pulse_powered.json
|
||||
4f14a279e486242a65b4d6dbcdfc33db9b71942b assets/create/models/block/belt_observer/split.json
|
||||
670adf5eee3f7a4b99267bd837334be6a8173e4e assets/create/models/block/belt_observer/split_belt.json
|
||||
819d3107908ce21220ad45b0ae3e1c92c13c601d assets/create/models/block/belt_observer/split_belt_powered.json
|
||||
76078947044ca9fc7860708ae9717a0ae47ebb1e assets/create/models/block/belt_observer/split_powered.json
|
||||
87f90e8256060683b834d57d3c11248d5ea84e34 assets/create/models/block/birch_window.json
|
||||
94317904054cbf651846716d8af3bca618d3130f assets/create/models/block/birch_window_pane_noside.json
|
||||
7a4cae5b075c4ac96a3113afafa391d024fc117f assets/create/models/block/birch_window_pane_noside_alt.json
|
||||
|
@ -1028,7 +1012,6 @@ b0f664dd6de3d0ee9afcb6223fbcd53b97fa0d65 assets/create/models/item/andesite_cobb
|
|||
c0e35daccfb398947532e9499d6bda963387cd9c assets/create/models/item/andesite_tunnel.json
|
||||
bf1fc6bdf7fca6f1958a2d3e96202c1cecb50669 assets/create/models/item/basin.json
|
||||
1da382e7e58eaa9788f5b1d92221ccac573e068f assets/create/models/item/belt_connector.json
|
||||
695a69d5854e2eb134b55d855bd2b7b18808a01d assets/create/models/item/belt_observer.json
|
||||
9044243882cfd49a2827e1b910a4c9b0e46daa47 assets/create/models/item/birch_window.json
|
||||
6ed49f59ea91068ef68720f43e67a9237594bdf0 assets/create/models/item/birch_window_pane.json
|
||||
22632bd681c8a605f0845f7549770389a741156a assets/create/models/item/black_seat.json
|
||||
|
@ -1054,6 +1037,7 @@ fe67c3f380d17735a9436a4579a8be1a02b8e4a0 assets/create/models/item/chute.json
|
|||
b1531a7bd3f7f27b9587d13e818a93dc2d088bc8 assets/create/models/item/clockwork_bearing.json
|
||||
0a2a0f0aafeab0088172f77afd40c1fa2cc1f2b8 assets/create/models/item/clutch.json
|
||||
dcb09deae110077bcddf090996b51cc66e9a7de3 assets/create/models/item/cogwheel.json
|
||||
7717e3b21cff39f497f07687c70c1fa40eaa756d assets/create/models/item/content_observer.json
|
||||
965a90a882d85dba93b30af9bce7ecf8e68ce747 assets/create/models/item/copper_block.json
|
||||
759bcb5fe7dfdd628716f9b4ff19a5ab00393381 assets/create/models/item/copper_casing.json
|
||||
c5bcfba46f5824654dedaa2c5d5f42deb29e3baf assets/create/models/item/copper_ingot.json
|
||||
|
@ -1540,9 +1524,9 @@ afc74c4dda92c4976703a1c488182188c3482839 data/create/advancements/recipes/create
|
|||
4793d335955c9d6c293e1358dc227eac93a5fe61 data/create/advancements/recipes/create.base/crafting/logistics/adjustable_repeater.json
|
||||
bbcf2a888e12c41aedf7b44a1b0d92b7b9fe853b data/create/advancements/recipes/create.base/crafting/logistics/andesite_funnel.json
|
||||
b53ed0a286512d2695caf0430433483bdeeeef95 data/create/advancements/recipes/create.base/crafting/logistics/andesite_tunnel.json
|
||||
678bdd68437274edf4630af1440525764be35dc6 data/create/advancements/recipes/create.base/crafting/logistics/belt_observer.json
|
||||
66dbb3486c5d38d309dd480e3f2ab0eb5ff9e559 data/create/advancements/recipes/create.base/crafting/logistics/brass_funnel.json
|
||||
2127c0f1d822cc88a24d98ebb9eead9de5837ffe data/create/advancements/recipes/create.base/crafting/logistics/brass_tunnel.json
|
||||
ca9ad1e9129745c3d21af86bc795b5a65ba086a2 data/create/advancements/recipes/create.base/crafting/logistics/content_observer.json
|
||||
b9b0a8bfff61a89149d4fcadf679f753385212d0 data/create/advancements/recipes/create.base/crafting/logistics/powered_latch.json
|
||||
9951f2d35f7444c98c022142119b18b1289ca734 data/create/advancements/recipes/create.base/crafting/logistics/powered_toggle_latch.json
|
||||
76d4c5f04d0a3e6817127a828594388b18f210c4 data/create/advancements/recipes/create.base/crafting/logistics/pulse_repeater.json
|
||||
|
@ -2010,7 +1994,6 @@ d3202a337c15c8b8ec41fa5879bb94327bb75057 data/create/loot_tables/blocks/andesite
|
|||
317aa99086127c649981b7b2fc85e66774a30f58 data/create/loot_tables/blocks/andesite_tunnel.json
|
||||
14bf1764b9313893b6a6f57094f9506ac9fa71a8 data/create/loot_tables/blocks/basin.json
|
||||
c7f81e30c31837a287d6d6040cdb02c7dec11441 data/create/loot_tables/blocks/belt.json
|
||||
1104e323abb2a8c25769c47dc5d1154965113cc9 data/create/loot_tables/blocks/belt_observer.json
|
||||
67a8e2513c3cb09e6fe80279fda94f79d5018c37 data/create/loot_tables/blocks/birch_window.json
|
||||
bf1d5843f93533f84bc4adec5b77da2114fa2025 data/create/loot_tables/blocks/birch_window_pane.json
|
||||
cccc209d172cc7bac76f1b4ac79085ee90742ab2 data/create/loot_tables/blocks/black_seat.json
|
||||
|
@ -2033,6 +2016,7 @@ adde89e46b12de1eee6fd0c5cb98c5f45feefc15 data/create/loot_tables/blocks/chiseled
|
|||
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
|
||||
096af6b5df6e87d36cb936eea9b00982a554f4af data/create/loot_tables/blocks/content_observer.json
|
||||
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
|
||||
|
@ -2480,9 +2464,9 @@ c465151b64381e2222203bf069b717435fdc2b26 data/create/recipes/crafting/logistics/
|
|||
34bcdffae0b104829161c86b7d161068f890daa2 data/create/recipes/crafting/logistics/adjustable_repeater.json
|
||||
fc75c87159569cb6ee978e6d51b0c3b0f504b5de data/create/recipes/crafting/logistics/andesite_funnel.json
|
||||
660e824ab6042c145f02ffcfe95a34c38f113e19 data/create/recipes/crafting/logistics/andesite_tunnel.json
|
||||
95cc99c90cb146eb85023748c4230840a4e6568e data/create/recipes/crafting/logistics/belt_observer.json
|
||||
9b4e74f9a950191134d978bf45c3339212677b0d data/create/recipes/crafting/logistics/brass_funnel.json
|
||||
2ae06df0357c494b53db0ddf9655c60ef2022d0b data/create/recipes/crafting/logistics/brass_tunnel.json
|
||||
8559045b42abd99490fb9a3cf5d06b08fd014b38 data/create/recipes/crafting/logistics/content_observer.json
|
||||
a32ac53848862837f3044ff9c81ed62c1134fe4f data/create/recipes/crafting/logistics/powered_latch.json
|
||||
660eb73bcc66c1528cbd4d4204ad6b771f4bd721 data/create/recipes/crafting/logistics/powered_toggle_latch.json
|
||||
74b8a38d252cce564cc63db2ade41ed2d656d025 data/create/recipes/crafting/logistics/pulse_repeater.json
|
||||
|
|
|
@ -1,244 +0,0 @@
|
|||
{
|
||||
"variants": {
|
||||
"belt=false,facing=north,mode=detect,powered=false": {
|
||||
"model": "create:block/belt_observer/detect",
|
||||
"y": 180
|
||||
},
|
||||
"belt=true,facing=north,mode=detect,powered=false": {
|
||||
"model": "create:block/belt_observer/detect_belt",
|
||||
"y": 180
|
||||
},
|
||||
"belt=false,facing=south,mode=detect,powered=false": {
|
||||
"model": "create:block/belt_observer/detect"
|
||||
},
|
||||
"belt=true,facing=south,mode=detect,powered=false": {
|
||||
"model": "create:block/belt_observer/detect_belt"
|
||||
},
|
||||
"belt=false,facing=west,mode=detect,powered=false": {
|
||||
"model": "create:block/belt_observer/detect",
|
||||
"y": 90
|
||||
},
|
||||
"belt=true,facing=west,mode=detect,powered=false": {
|
||||
"model": "create:block/belt_observer/detect_belt",
|
||||
"y": 90
|
||||
},
|
||||
"belt=false,facing=east,mode=detect,powered=false": {
|
||||
"model": "create:block/belt_observer/detect",
|
||||
"y": 270
|
||||
},
|
||||
"belt=true,facing=east,mode=detect,powered=false": {
|
||||
"model": "create:block/belt_observer/detect_belt",
|
||||
"y": 270
|
||||
},
|
||||
"belt=false,facing=north,mode=pulse,powered=false": {
|
||||
"model": "create:block/belt_observer/pulse",
|
||||
"y": 180
|
||||
},
|
||||
"belt=true,facing=north,mode=pulse,powered=false": {
|
||||
"model": "create:block/belt_observer/pulse_belt",
|
||||
"y": 180
|
||||
},
|
||||
"belt=false,facing=south,mode=pulse,powered=false": {
|
||||
"model": "create:block/belt_observer/pulse"
|
||||
},
|
||||
"belt=true,facing=south,mode=pulse,powered=false": {
|
||||
"model": "create:block/belt_observer/pulse_belt"
|
||||
},
|
||||
"belt=false,facing=west,mode=pulse,powered=false": {
|
||||
"model": "create:block/belt_observer/pulse",
|
||||
"y": 90
|
||||
},
|
||||
"belt=true,facing=west,mode=pulse,powered=false": {
|
||||
"model": "create:block/belt_observer/pulse_belt",
|
||||
"y": 90
|
||||
},
|
||||
"belt=false,facing=east,mode=pulse,powered=false": {
|
||||
"model": "create:block/belt_observer/pulse",
|
||||
"y": 270
|
||||
},
|
||||
"belt=true,facing=east,mode=pulse,powered=false": {
|
||||
"model": "create:block/belt_observer/pulse_belt",
|
||||
"y": 270
|
||||
},
|
||||
"belt=false,facing=north,mode=eject,powered=false": {
|
||||
"model": "create:block/belt_observer/eject",
|
||||
"y": 180
|
||||
},
|
||||
"belt=true,facing=north,mode=eject,powered=false": {
|
||||
"model": "create:block/belt_observer/eject_belt",
|
||||
"y": 180
|
||||
},
|
||||
"belt=false,facing=south,mode=eject,powered=false": {
|
||||
"model": "create:block/belt_observer/eject"
|
||||
},
|
||||
"belt=true,facing=south,mode=eject,powered=false": {
|
||||
"model": "create:block/belt_observer/eject_belt"
|
||||
},
|
||||
"belt=false,facing=west,mode=eject,powered=false": {
|
||||
"model": "create:block/belt_observer/eject",
|
||||
"y": 90
|
||||
},
|
||||
"belt=true,facing=west,mode=eject,powered=false": {
|
||||
"model": "create:block/belt_observer/eject_belt",
|
||||
"y": 90
|
||||
},
|
||||
"belt=false,facing=east,mode=eject,powered=false": {
|
||||
"model": "create:block/belt_observer/eject",
|
||||
"y": 270
|
||||
},
|
||||
"belt=true,facing=east,mode=eject,powered=false": {
|
||||
"model": "create:block/belt_observer/eject_belt",
|
||||
"y": 270
|
||||
},
|
||||
"belt=false,facing=north,mode=split,powered=false": {
|
||||
"model": "create:block/belt_observer/split",
|
||||
"y": 180
|
||||
},
|
||||
"belt=true,facing=north,mode=split,powered=false": {
|
||||
"model": "create:block/belt_observer/split_belt",
|
||||
"y": 180
|
||||
},
|
||||
"belt=false,facing=south,mode=split,powered=false": {
|
||||
"model": "create:block/belt_observer/split"
|
||||
},
|
||||
"belt=true,facing=south,mode=split,powered=false": {
|
||||
"model": "create:block/belt_observer/split_belt"
|
||||
},
|
||||
"belt=false,facing=west,mode=split,powered=false": {
|
||||
"model": "create:block/belt_observer/split",
|
||||
"y": 90
|
||||
},
|
||||
"belt=true,facing=west,mode=split,powered=false": {
|
||||
"model": "create:block/belt_observer/split_belt",
|
||||
"y": 90
|
||||
},
|
||||
"belt=false,facing=east,mode=split,powered=false": {
|
||||
"model": "create:block/belt_observer/split",
|
||||
"y": 270
|
||||
},
|
||||
"belt=true,facing=east,mode=split,powered=false": {
|
||||
"model": "create:block/belt_observer/split_belt",
|
||||
"y": 270
|
||||
},
|
||||
"belt=false,facing=north,mode=detect,powered=true": {
|
||||
"model": "create:block/belt_observer/detect_powered",
|
||||
"y": 180
|
||||
},
|
||||
"belt=true,facing=north,mode=detect,powered=true": {
|
||||
"model": "create:block/belt_observer/detect_belt_powered",
|
||||
"y": 180
|
||||
},
|
||||
"belt=false,facing=south,mode=detect,powered=true": {
|
||||
"model": "create:block/belt_observer/detect_powered"
|
||||
},
|
||||
"belt=true,facing=south,mode=detect,powered=true": {
|
||||
"model": "create:block/belt_observer/detect_belt_powered"
|
||||
},
|
||||
"belt=false,facing=west,mode=detect,powered=true": {
|
||||
"model": "create:block/belt_observer/detect_powered",
|
||||
"y": 90
|
||||
},
|
||||
"belt=true,facing=west,mode=detect,powered=true": {
|
||||
"model": "create:block/belt_observer/detect_belt_powered",
|
||||
"y": 90
|
||||
},
|
||||
"belt=false,facing=east,mode=detect,powered=true": {
|
||||
"model": "create:block/belt_observer/detect_powered",
|
||||
"y": 270
|
||||
},
|
||||
"belt=true,facing=east,mode=detect,powered=true": {
|
||||
"model": "create:block/belt_observer/detect_belt_powered",
|
||||
"y": 270
|
||||
},
|
||||
"belt=false,facing=north,mode=pulse,powered=true": {
|
||||
"model": "create:block/belt_observer/pulse_powered",
|
||||
"y": 180
|
||||
},
|
||||
"belt=true,facing=north,mode=pulse,powered=true": {
|
||||
"model": "create:block/belt_observer/pulse_belt_powered",
|
||||
"y": 180
|
||||
},
|
||||
"belt=false,facing=south,mode=pulse,powered=true": {
|
||||
"model": "create:block/belt_observer/pulse_powered"
|
||||
},
|
||||
"belt=true,facing=south,mode=pulse,powered=true": {
|
||||
"model": "create:block/belt_observer/pulse_belt_powered"
|
||||
},
|
||||
"belt=false,facing=west,mode=pulse,powered=true": {
|
||||
"model": "create:block/belt_observer/pulse_powered",
|
||||
"y": 90
|
||||
},
|
||||
"belt=true,facing=west,mode=pulse,powered=true": {
|
||||
"model": "create:block/belt_observer/pulse_belt_powered",
|
||||
"y": 90
|
||||
},
|
||||
"belt=false,facing=east,mode=pulse,powered=true": {
|
||||
"model": "create:block/belt_observer/pulse_powered",
|
||||
"y": 270
|
||||
},
|
||||
"belt=true,facing=east,mode=pulse,powered=true": {
|
||||
"model": "create:block/belt_observer/pulse_belt_powered",
|
||||
"y": 270
|
||||
},
|
||||
"belt=false,facing=north,mode=eject,powered=true": {
|
||||
"model": "create:block/belt_observer/eject_powered",
|
||||
"y": 180
|
||||
},
|
||||
"belt=true,facing=north,mode=eject,powered=true": {
|
||||
"model": "create:block/belt_observer/eject_belt_powered",
|
||||
"y": 180
|
||||
},
|
||||
"belt=false,facing=south,mode=eject,powered=true": {
|
||||
"model": "create:block/belt_observer/eject_powered"
|
||||
},
|
||||
"belt=true,facing=south,mode=eject,powered=true": {
|
||||
"model": "create:block/belt_observer/eject_belt_powered"
|
||||
},
|
||||
"belt=false,facing=west,mode=eject,powered=true": {
|
||||
"model": "create:block/belt_observer/eject_powered",
|
||||
"y": 90
|
||||
},
|
||||
"belt=true,facing=west,mode=eject,powered=true": {
|
||||
"model": "create:block/belt_observer/eject_belt_powered",
|
||||
"y": 90
|
||||
},
|
||||
"belt=false,facing=east,mode=eject,powered=true": {
|
||||
"model": "create:block/belt_observer/eject_powered",
|
||||
"y": 270
|
||||
},
|
||||
"belt=true,facing=east,mode=eject,powered=true": {
|
||||
"model": "create:block/belt_observer/eject_belt_powered",
|
||||
"y": 270
|
||||
},
|
||||
"belt=false,facing=north,mode=split,powered=true": {
|
||||
"model": "create:block/belt_observer/split_powered",
|
||||
"y": 180
|
||||
},
|
||||
"belt=true,facing=north,mode=split,powered=true": {
|
||||
"model": "create:block/belt_observer/split_belt_powered",
|
||||
"y": 180
|
||||
},
|
||||
"belt=false,facing=south,mode=split,powered=true": {
|
||||
"model": "create:block/belt_observer/split_powered"
|
||||
},
|
||||
"belt=true,facing=south,mode=split,powered=true": {
|
||||
"model": "create:block/belt_observer/split_belt_powered"
|
||||
},
|
||||
"belt=false,facing=west,mode=split,powered=true": {
|
||||
"model": "create:block/belt_observer/split_powered",
|
||||
"y": 90
|
||||
},
|
||||
"belt=true,facing=west,mode=split,powered=true": {
|
||||
"model": "create:block/belt_observer/split_belt_powered",
|
||||
"y": 90
|
||||
},
|
||||
"belt=false,facing=east,mode=split,powered=true": {
|
||||
"model": "create:block/belt_observer/split_powered",
|
||||
"y": 270
|
||||
},
|
||||
"belt=true,facing=east,mode=split,powered=true": {
|
||||
"model": "create:block/belt_observer/split_belt_powered",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
"variants": {
|
||||
"facing=north,powered=false": {
|
||||
"model": "create:block/content_observer/block"
|
||||
},
|
||||
"facing=south,powered=false": {
|
||||
"model": "create:block/content_observer/block",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=false": {
|
||||
"model": "create:block/content_observer/block",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=false": {
|
||||
"model": "create:block/content_observer/block",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,powered=true": {
|
||||
"model": "create:block/content_observer/block_powered"
|
||||
},
|
||||
"facing=south,powered=true": {
|
||||
"model": "create:block/content_observer/block_powered",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=true": {
|
||||
"model": "create:block/content_observer/block_powered",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=true": {
|
||||
"model": "create:block/content_observer/block_powered",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
|
@ -21,7 +21,6 @@
|
|||
"block.create.andesite_tunnel": "\u05DF\u01DDuun\u27D8 \u01DD\u0287\u0131s\u01DDpu\u2C6F",
|
||||
"block.create.basin": "u\u0131s\u0250\u15FA",
|
||||
"block.create.belt": "\u0287\u05DF\u01DD\u15FA",
|
||||
"block.create.belt_observer": "\u0279\u01DD\u028C\u0279\u01DDsqO \u0287\u05DF\u01DD\u15FA",
|
||||
"block.create.birch_window": "\u028Dopu\u0131M \u0265\u0254\u0279\u0131\u15FA",
|
||||
"block.create.birch_window_pane": "\u01DDu\u0250\u0500 \u028Dopu\u0131M \u0265\u0254\u0279\u0131\u15FA",
|
||||
"block.create.black_seat": "\u0287\u0250\u01DDS \u029E\u0254\u0250\u05DF\u15FA",
|
||||
|
@ -44,6 +43,7 @@
|
|||
"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",
|
||||
"block.create.content_observer": "\u0279\u01DD\u028C\u0279\u01DDsqO \u0287u\u01DD\u0287uo\u0186",
|
||||
"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",
|
||||
|
|
|
@ -24,7 +24,6 @@
|
|||
"block.create.andesite_tunnel": "Andesite Tunnel",
|
||||
"block.create.basin": "Basin",
|
||||
"block.create.belt": "Belt",
|
||||
"block.create.belt_observer": "Belt Observer",
|
||||
"block.create.birch_window": "Birch Window",
|
||||
"block.create.birch_window_pane": "Birch Window Pane",
|
||||
"block.create.black_seat": "Black Seat",
|
||||
|
@ -47,6 +46,7 @@
|
|||
"block.create.clockwork_bearing": "Clockwork Bearing",
|
||||
"block.create.clutch": "Clutch",
|
||||
"block.create.cogwheel": "Cogwheel",
|
||||
"block.create.content_observer": "Content Observer",
|
||||
"block.create.copper_block": "Copper Block",
|
||||
"block.create.copper_casing": "Copper Casing",
|
||||
"block.create.copper_ore": "Copper Ore",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 804",
|
||||
"_": "Missing Localizations: 805",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -25,7 +25,6 @@
|
|||
"block.create.andesite_tunnel": "UNLOCALIZED: Andesite Tunnel",
|
||||
"block.create.basin": "UNLOCALIZED: Basin",
|
||||
"block.create.belt": "Mechanischer Riemen",
|
||||
"block.create.belt_observer": "Fließband-Beobachter",
|
||||
"block.create.birch_window": "UNLOCALIZED: Birch Window",
|
||||
"block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane",
|
||||
"block.create.black_seat": "UNLOCALIZED: Black Seat",
|
||||
|
@ -48,6 +47,7 @@
|
|||
"block.create.clockwork_bearing": "UNLOCALIZED: Clockwork Bearing",
|
||||
"block.create.clutch": "Kupplung",
|
||||
"block.create.cogwheel": "Zahnrad",
|
||||
"block.create.content_observer": "UNLOCALIZED: Content Observer",
|
||||
"block.create.copper_block": "UNLOCALIZED: Copper Block",
|
||||
"block.create.copper_casing": "UNLOCALIZED: Copper Casing",
|
||||
"block.create.copper_ore": "UNLOCALIZED: Copper Ore",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 428",
|
||||
"_": "Missing Localizations: 429",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -25,7 +25,6 @@
|
|||
"block.create.andesite_tunnel": "UNLOCALIZED: Andesite Tunnel",
|
||||
"block.create.basin": "Bassin",
|
||||
"block.create.belt": "Tapis roulant",
|
||||
"block.create.belt_observer": "Observateur d'entité",
|
||||
"block.create.birch_window": "UNLOCALIZED: Birch Window",
|
||||
"block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane",
|
||||
"block.create.black_seat": "UNLOCALIZED: Black Seat",
|
||||
|
@ -48,6 +47,7 @@
|
|||
"block.create.clockwork_bearing": "Roulement mécanique horloger",
|
||||
"block.create.clutch": "Embrayage",
|
||||
"block.create.cogwheel": "Roue dentée",
|
||||
"block.create.content_observer": "UNLOCALIZED: Content Observer",
|
||||
"block.create.copper_block": "Bloc de cuivre",
|
||||
"block.create.copper_casing": "Boîtier en cuivre",
|
||||
"block.create.copper_ore": "Minerai de cuivre",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 412",
|
||||
"_": "Missing Localizations: 413",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -25,7 +25,6 @@
|
|||
"block.create.andesite_tunnel": "UNLOCALIZED: Andesite Tunnel",
|
||||
"block.create.basin": "Bacinella",
|
||||
"block.create.belt": "Nastro Meccanico",
|
||||
"block.create.belt_observer": "Osservatore a Cinghia",
|
||||
"block.create.birch_window": "UNLOCALIZED: Birch Window",
|
||||
"block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane",
|
||||
"block.create.black_seat": "UNLOCALIZED: Black Seat",
|
||||
|
@ -48,6 +47,7 @@
|
|||
"block.create.clockwork_bearing": "Supporto del Orologio",
|
||||
"block.create.clutch": "Frizione",
|
||||
"block.create.cogwheel": "Ruota Dentata",
|
||||
"block.create.content_observer": "UNLOCALIZED: Content Observer",
|
||||
"block.create.copper_block": "Blocco di Rame",
|
||||
"block.create.copper_casing": "Involucro di Rame",
|
||||
"block.create.copper_ore": "Rame Grezzo",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 407",
|
||||
"_": "Missing Localizations: 408",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -25,7 +25,6 @@
|
|||
"block.create.andesite_tunnel": "UNLOCALIZED: Andesite Tunnel",
|
||||
"block.create.basin": "鉢",
|
||||
"block.create.belt": "メカニカルベルト",
|
||||
"block.create.belt_observer": "ベルトオブザーバー",
|
||||
"block.create.birch_window": "UNLOCALIZED: Birch Window",
|
||||
"block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane",
|
||||
"block.create.black_seat": "UNLOCALIZED: Black Seat",
|
||||
|
@ -48,6 +47,7 @@
|
|||
"block.create.clockwork_bearing": "時計仕掛けのベアリング",
|
||||
"block.create.clutch": "クラッチ",
|
||||
"block.create.cogwheel": "歯車",
|
||||
"block.create.content_observer": "UNLOCALIZED: Content Observer",
|
||||
"block.create.copper_block": "銅ブロック",
|
||||
"block.create.copper_casing": "銅ケーシング",
|
||||
"block.create.copper_ore": "銅鉱石",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 412",
|
||||
"_": "Missing Localizations: 413",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -25,7 +25,6 @@
|
|||
"block.create.andesite_tunnel": "UNLOCALIZED: Andesite Tunnel",
|
||||
"block.create.basin": "대야",
|
||||
"block.create.belt": "컨베이어 벨트",
|
||||
"block.create.belt_observer": "벨트 감지기",
|
||||
"block.create.birch_window": "UNLOCALIZED: Birch Window",
|
||||
"block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane",
|
||||
"block.create.black_seat": "UNLOCALIZED: Black Seat",
|
||||
|
@ -48,6 +47,7 @@
|
|||
"block.create.clockwork_bearing": "시계 베어링",
|
||||
"block.create.clutch": "클러치",
|
||||
"block.create.cogwheel": "톱나버퀴",
|
||||
"block.create.content_observer": "UNLOCALIZED: Content Observer",
|
||||
"block.create.copper_block": "구리 블럭",
|
||||
"block.create.copper_casing": "구리 케이스",
|
||||
"block.create.copper_ore": "구리 광석",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 742",
|
||||
"_": "Missing Localizations: 743",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -25,7 +25,6 @@
|
|||
"block.create.andesite_tunnel": "UNLOCALIZED: Andesite Tunnel",
|
||||
"block.create.basin": "Bekken",
|
||||
"block.create.belt": "Mechanische Transportband",
|
||||
"block.create.belt_observer": "Transportband Observeerder",
|
||||
"block.create.birch_window": "UNLOCALIZED: Birch Window",
|
||||
"block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane",
|
||||
"block.create.black_seat": "UNLOCALIZED: Black Seat",
|
||||
|
@ -48,6 +47,7 @@
|
|||
"block.create.clockwork_bearing": "UNLOCALIZED: Clockwork Bearing",
|
||||
"block.create.clutch": "Koppeling",
|
||||
"block.create.cogwheel": "Tandwiel",
|
||||
"block.create.content_observer": "UNLOCALIZED: Content Observer",
|
||||
"block.create.copper_block": "UNLOCALIZED: Copper Block",
|
||||
"block.create.copper_casing": "UNLOCALIZED: Copper Casing",
|
||||
"block.create.copper_ore": "UNLOCALIZED: Copper Ore",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 811",
|
||||
"_": "Missing Localizations: 812",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -25,7 +25,6 @@
|
|||
"block.create.andesite_tunnel": "UNLOCALIZED: Andesite Tunnel",
|
||||
"block.create.basin": "UNLOCALIZED: Basin",
|
||||
"block.create.belt": "Esteira Mecânica",
|
||||
"block.create.belt_observer": "Observador de Esteira",
|
||||
"block.create.birch_window": "UNLOCALIZED: Birch Window",
|
||||
"block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane",
|
||||
"block.create.black_seat": "UNLOCALIZED: Black Seat",
|
||||
|
@ -48,6 +47,7 @@
|
|||
"block.create.clockwork_bearing": "UNLOCALIZED: Clockwork Bearing",
|
||||
"block.create.clutch": "Embreagem",
|
||||
"block.create.cogwheel": "Roda Dentada",
|
||||
"block.create.content_observer": "UNLOCALIZED: Content Observer",
|
||||
"block.create.copper_block": "UNLOCALIZED: Copper Block",
|
||||
"block.create.copper_casing": "UNLOCALIZED: Copper Casing",
|
||||
"block.create.copper_ore": "UNLOCALIZED: Copper Ore",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 805",
|
||||
"_": "Missing Localizations: 806",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -25,7 +25,6 @@
|
|||
"block.create.andesite_tunnel": "UNLOCALIZED: Andesite Tunnel",
|
||||
"block.create.basin": "UNLOCALIZED: Basin",
|
||||
"block.create.belt": "Механическая лента",
|
||||
"block.create.belt_observer": "Ленточный сканер",
|
||||
"block.create.birch_window": "UNLOCALIZED: Birch Window",
|
||||
"block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane",
|
||||
"block.create.black_seat": "UNLOCALIZED: Black Seat",
|
||||
|
@ -48,6 +47,7 @@
|
|||
"block.create.clockwork_bearing": "UNLOCALIZED: Clockwork Bearing",
|
||||
"block.create.clutch": "Переключаемая муфта",
|
||||
"block.create.cogwheel": "Шестерня",
|
||||
"block.create.content_observer": "UNLOCALIZED: Content Observer",
|
||||
"block.create.copper_block": "UNLOCALIZED: Copper Block",
|
||||
"block.create.copper_casing": "UNLOCALIZED: Copper Casing",
|
||||
"block.create.copper_ore": "UNLOCALIZED: Copper Ore",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 92",
|
||||
"_": "Missing Localizations: 93",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -25,7 +25,6 @@
|
|||
"block.create.andesite_tunnel": "UNLOCALIZED: Andesite Tunnel",
|
||||
"block.create.basin": "工作盆",
|
||||
"block.create.belt": "传送带",
|
||||
"block.create.belt_observer": "传送带侦测器",
|
||||
"block.create.birch_window": "白桦窗户",
|
||||
"block.create.birch_window_pane": "白桦窗户板",
|
||||
"block.create.black_seat": "UNLOCALIZED: Black Seat",
|
||||
|
@ -48,6 +47,7 @@
|
|||
"block.create.clockwork_bearing": "时钟轴承",
|
||||
"block.create.clutch": "离合器",
|
||||
"block.create.cogwheel": "齿轮",
|
||||
"block.create.content_observer": "UNLOCALIZED: Content Observer",
|
||||
"block.create.copper_block": "铜块",
|
||||
"block.create.copper_casing": "铜机壳",
|
||||
"block.create.copper_ore": "铜矿石",
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/belt_observer/base",
|
||||
"textures": {
|
||||
"texture": "create:block/belt_observer_detect"
|
||||
}
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/belt_observer/base_belt",
|
||||
"textures": {
|
||||
"texture": "create:block/belt_observer_detect"
|
||||
}
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/belt_observer/base_belt_powered",
|
||||
"textures": {
|
||||
"texture": "create:block/belt_observer_detect_powered"
|
||||
}
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/belt_observer/base_powered",
|
||||
"textures": {
|
||||
"texture": "create:block/belt_observer_detect_powered"
|
||||
}
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/belt_observer/base",
|
||||
"textures": {
|
||||
"texture": "create:block/belt_observer_eject"
|
||||
}
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/belt_observer/base_belt",
|
||||
"textures": {
|
||||
"texture": "create:block/belt_observer_eject"
|
||||
}
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/belt_observer/base_belt_powered",
|
||||
"textures": {
|
||||
"texture": "create:block/belt_observer_eject_powered"
|
||||
}
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/belt_observer/base_powered",
|
||||
"textures": {
|
||||
"texture": "create:block/belt_observer_eject_powered"
|
||||
}
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/belt_observer/base",
|
||||
"textures": {
|
||||
"texture": "create:block/belt_observer_pulse"
|
||||
}
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/belt_observer/base_belt",
|
||||
"textures": {
|
||||
"texture": "create:block/belt_observer_pulse"
|
||||
}
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/belt_observer/base_belt_powered",
|
||||
"textures": {
|
||||
"texture": "create:block/belt_observer_pulse_powered"
|
||||
}
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/belt_observer/base_powered",
|
||||
"textures": {
|
||||
"texture": "create:block/belt_observer_pulse_powered"
|
||||
}
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/belt_observer/base",
|
||||
"textures": {
|
||||
"texture": "create:block/belt_observer_split"
|
||||
}
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/belt_observer/base_belt",
|
||||
"textures": {
|
||||
"texture": "create:block/belt_observer_split"
|
||||
}
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/belt_observer/base_belt_powered",
|
||||
"textures": {
|
||||
"texture": "create:block/belt_observer_split_powered"
|
||||
}
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/belt_observer/base_powered",
|
||||
"textures": {
|
||||
"texture": "create:block/belt_observer_split_powered"
|
||||
}
|
||||
}
|
|
@ -1,3 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/belt_observer/item"
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"parent": "create:block/content_observer/block"
|
||||
}
|
|
@ -2,7 +2,7 @@
|
|||
"parent": "minecraft:recipes/root",
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"create:crafting/logistics/belt_observer"
|
||||
"create:crafting/logistics/content_observer"
|
||||
]
|
||||
},
|
||||
"criteria": {
|
||||
|
@ -19,7 +19,7 @@
|
|||
"has_the_recipe": {
|
||||
"trigger": "minecraft:recipe_unlocked",
|
||||
"conditions": {
|
||||
"recipe": "create:crafting/logistics/belt_observer"
|
||||
"recipe": "create:crafting/logistics/content_observer"
|
||||
}
|
||||
}
|
||||
},
|
|
@ -6,7 +6,7 @@
|
|||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"name": "create:belt_observer"
|
||||
"name": "create:content_observer"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
|
@ -19,6 +19,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "create:belt_observer"
|
||||
"item": "create:content_observer"
|
||||
}
|
||||
}
|
|
@ -91,7 +91,6 @@ import com.simibubi.create.content.contraptions.relays.encased.GearshiftBlock;
|
|||
import com.simibubi.create.content.contraptions.relays.gauge.GaugeBlock;
|
||||
import com.simibubi.create.content.contraptions.relays.gauge.GaugeGenerator;
|
||||
import com.simibubi.create.content.contraptions.relays.gearbox.GearboxBlock;
|
||||
import com.simibubi.create.content.logistics.block.belts.observer.BeltObserverBlock;
|
||||
import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelBlock;
|
||||
import com.simibubi.create.content.logistics.block.belts.tunnel.BrassTunnelBlock;
|
||||
import com.simibubi.create.content.logistics.block.belts.tunnel.BrassTunnelCTBehaviour;
|
||||
|
@ -120,6 +119,7 @@ import com.simibubi.create.content.logistics.block.mechanicalArm.ArmBlock;
|
|||
import com.simibubi.create.content.logistics.block.mechanicalArm.ArmItem;
|
||||
import com.simibubi.create.content.logistics.block.redstone.AnalogLeverBlock;
|
||||
import com.simibubi.create.content.logistics.block.redstone.ContactMovementBehaviour;
|
||||
import com.simibubi.create.content.logistics.block.redstone.ContentObserverBlock;
|
||||
import com.simibubi.create.content.logistics.block.redstone.NixieTubeBlock;
|
||||
import com.simibubi.create.content.logistics.block.redstone.NixieTubeGenerator;
|
||||
import com.simibubi.create.content.logistics.block.redstone.RedstoneContactBlock;
|
||||
|
@ -140,9 +140,6 @@ import com.simibubi.create.foundation.utility.DyeHelper;
|
|||
import com.simibubi.create.foundation.worldgen.OxidizingBlock;
|
||||
import com.tterrag.registrate.util.entry.BlockEntry;
|
||||
|
||||
import net.minecraft.advancements.criterion.InventoryChangeTrigger;
|
||||
import net.minecraft.advancements.criterion.ItemPredicate;
|
||||
import net.minecraft.advancements.criterion.MinMaxBounds;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.Blocks;
|
||||
import net.minecraft.block.SoundType;
|
||||
|
@ -712,24 +709,14 @@ public class AllBlocks {
|
|||
.patternLine("-")
|
||||
.key('#', DyeHelper.getWoolOfDye(colour))
|
||||
.key('-', ItemTags.WOODEN_SLABS)
|
||||
.addCriterion("has_wool",
|
||||
new InventoryChangeTrigger.Instance(MinMaxBounds.IntBound.UNBOUNDED,
|
||||
MinMaxBounds.IntBound.UNBOUNDED, MinMaxBounds.IntBound.UNBOUNDED,
|
||||
new ItemPredicate[] { ItemPredicate.Builder.create()
|
||||
.tag(ItemTags.WOOL)
|
||||
.build() }))
|
||||
.addCriterion("has_wool", p.hasItem(ItemTags.WOOL))
|
||||
.build(p, Create.asResource("crafting/kinetics/" + c.getName()));
|
||||
ShapedRecipeBuilder.shapedRecipe(c.get())
|
||||
.patternLine("#")
|
||||
.patternLine("-")
|
||||
.key('#', DyeHelper.getTagOfDye(colour))
|
||||
.key('-', AllItemTags.SEATS.tag)
|
||||
.addCriterion("has_seat",
|
||||
new InventoryChangeTrigger.Instance(MinMaxBounds.IntBound.UNBOUNDED,
|
||||
MinMaxBounds.IntBound.UNBOUNDED, MinMaxBounds.IntBound.UNBOUNDED,
|
||||
new ItemPredicate[] { ItemPredicate.Builder.create()
|
||||
.tag(AllItemTags.SEATS.tag)
|
||||
.build() }))
|
||||
.addCriterion("has_seat", p.hasItem(AllItemTags.SEATS.tag))
|
||||
.build(p, Create.asResource("crafting/kinetics/" + c.getName() + "_from_other_seat"));
|
||||
})
|
||||
.tag(AllBlockTags.SEATS.tag)
|
||||
|
@ -881,12 +868,12 @@ public class AllBlocks {
|
|||
.transform(customItemModel("_", "block"))
|
||||
.register();
|
||||
|
||||
public static final BlockEntry<BeltObserverBlock> BELT_OBSERVER =
|
||||
REGISTRATE.block("belt_observer", BeltObserverBlock::new)
|
||||
public static final BlockEntry<ContentObserverBlock> CONTENT_OBSERVER =
|
||||
REGISTRATE.block("content_observer", ContentObserverBlock::new)
|
||||
.initialProperties(SharedProperties::stone)
|
||||
.blockstate(BlockStateGen.beltObserver())
|
||||
.blockstate((c, p) -> p.horizontalBlock(c.get(), AssetLookup.forPowered(c, p)))
|
||||
.item()
|
||||
.transform(customItemModel())
|
||||
.transform(customItemModel("_", "block"))
|
||||
.register();
|
||||
|
||||
public static final BlockEntry<StockpileSwitchBlock> STOCKPILE_SWITCH =
|
||||
|
|
|
@ -52,7 +52,11 @@ public class AllShapes {
|
|||
.forHorizontalAxis(),
|
||||
STOCKPILE_SWITCH = shape(0, 0, 0, 16, 2, 16).add(1, 0, 1, 15, 16, 15)
|
||||
.add(0, 14, 0, 16, 16, 16)
|
||||
.add(3, 3, -1, 13, 13, 2)
|
||||
.add(3, 3, -2, 13, 13, 2)
|
||||
.forHorizontal(NORTH),
|
||||
CONTENT_OBSERVER = shape(0, 0, 0, 16, 6, 16).add(1, 0, 1, 15, 16, 15)
|
||||
.add(0, 14, 0, 16, 16, 16)
|
||||
.add(3, 3, -2, 13, 13, 2)
|
||||
.forHorizontal(NORTH),
|
||||
NIXIE_TUBE = shape(0, 0, 0, 16, 4, 16).add(9, 0, 5, 15, 15, 11)
|
||||
.add(1, 0, 5, 7, 15, 11)
|
||||
|
@ -68,13 +72,9 @@ public class AllShapes {
|
|||
.add(2, 6, 2, 14, 10, 14)
|
||||
.add(0, 10, 0, 16, 13, 16)
|
||||
.forDirectional(UP),
|
||||
BELT_FUNNEL_RETRACTED =
|
||||
shape(2, -5, 14, 12, 14, 18)
|
||||
.add(0, -5, 8, 16, 16, 14)
|
||||
BELT_FUNNEL_RETRACTED = shape(2, -5, 14, 12, 14, 18).add(0, -5, 8, 16, 16, 14)
|
||||
.forHorizontal(NORTH),
|
||||
BELT_FUNNEL_EXTENDED =
|
||||
shape(2, -4, 14, 14, 14, 18)
|
||||
.add(3, -4, 10, 13, 13, 14)
|
||||
BELT_FUNNEL_EXTENDED = shape(2, -4, 14, 14, 14, 18).add(3, -4, 10, 13, 13, 14)
|
||||
.add(2, -4, 6, 14, 14, 10)
|
||||
.add(0, -5, 0, 16, 16, 6)
|
||||
.forHorizontal(NORTH),
|
||||
|
|
|
@ -73,8 +73,6 @@ import com.simibubi.create.content.contraptions.relays.gauge.StressGaugeTileEnti
|
|||
import com.simibubi.create.content.contraptions.relays.gearbox.GearboxRenderer;
|
||||
import com.simibubi.create.content.contraptions.relays.gearbox.GearboxTileEntity;
|
||||
import com.simibubi.create.content.contraptions.relays.gearbox.GearshiftTileEntity;
|
||||
import com.simibubi.create.content.logistics.block.belts.observer.BeltObserverRenderer;
|
||||
import com.simibubi.create.content.logistics.block.belts.observer.BeltObserverTileEntity;
|
||||
import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelRenderer;
|
||||
import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelTileEntity;
|
||||
import com.simibubi.create.content.logistics.block.belts.tunnel.BrassTunnelTileEntity;
|
||||
|
@ -93,6 +91,7 @@ import com.simibubi.create.content.logistics.block.mechanicalArm.ArmRenderer;
|
|||
import com.simibubi.create.content.logistics.block.mechanicalArm.ArmTileEntity;
|
||||
import com.simibubi.create.content.logistics.block.redstone.AnalogLeverRenderer;
|
||||
import com.simibubi.create.content.logistics.block.redstone.AnalogLeverTileEntity;
|
||||
import com.simibubi.create.content.logistics.block.redstone.ContentObserverTileEntity;
|
||||
import com.simibubi.create.content.logistics.block.redstone.NixieTubeRenderer;
|
||||
import com.simibubi.create.content.logistics.block.redstone.NixieTubeTileEntity;
|
||||
import com.simibubi.create.content.logistics.block.redstone.RedstoneLinkTileEntity;
|
||||
|
@ -427,7 +426,7 @@ public class AllTileEntities {
|
|||
public static final TileEntityEntry<StockpileSwitchTileEntity> STOCKPILE_SWITCH = Create.registrate()
|
||||
.tileEntity("stockpile_switch", StockpileSwitchTileEntity::new)
|
||||
.validBlocks(AllBlocks.STOCKPILE_SWITCH)
|
||||
//.renderer(() -> renderer)
|
||||
.renderer(() -> SmartTileEntityRenderer::new)
|
||||
.register();
|
||||
|
||||
public static final TileEntityEntry<AdjustableCrateTileEntity> ADJUSTABLE_CRATE = Create.registrate()
|
||||
|
@ -454,10 +453,10 @@ public class AllTileEntities {
|
|||
.renderer(() -> FunnelRenderer::new)
|
||||
.register();
|
||||
|
||||
public static final TileEntityEntry<BeltObserverTileEntity> BELT_OBSERVER = Create.registrate()
|
||||
.tileEntity("belt_observer", BeltObserverTileEntity::new)
|
||||
.validBlocks(AllBlocks.BELT_OBSERVER)
|
||||
.renderer(() -> BeltObserverRenderer::new)
|
||||
public static final TileEntityEntry<ContentObserverTileEntity> CONTENT_OBSERVER = Create.registrate()
|
||||
.tileEntity("content_observer", ContentObserverTileEntity::new)
|
||||
.validBlocks(AllBlocks.CONTENT_OBSERVER)
|
||||
.renderer(() -> SmartTileEntityRenderer::new)
|
||||
.register();
|
||||
|
||||
public static final TileEntityEntry<AdjustableRepeaterTileEntity> ADJUSTABLE_REPEATER = Create.registrate()
|
||||
|
|
|
@ -2,14 +2,19 @@ package com.simibubi.create.content.contraptions.components.actors;
|
|||
|
||||
import java.util.List;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
|
||||
import com.simibubi.create.AllShapes;
|
||||
|
||||
import mcp.MethodsReturnNonnullByDefault;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.Blocks;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
import net.minecraft.entity.MobEntity;
|
||||
import net.minecraft.entity.item.minecart.AbstractMinecartEntity;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.item.ItemGroup;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
@ -25,11 +30,6 @@ import net.minecraft.util.math.shapes.VoxelShape;
|
|||
import net.minecraft.world.IBlockReader;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
import mcp.MethodsReturnNonnullByDefault;
|
||||
|
||||
@ParametersAreNonnullByDefault
|
||||
@MethodsReturnNonnullByDefault
|
||||
public class SeatBlock extends Block {
|
||||
|
@ -56,7 +56,7 @@ public class SeatBlock extends Block {
|
|||
@Override
|
||||
public void onLanded(IBlockReader reader, Entity entity) {
|
||||
BlockPos pos = entity.getPosition();
|
||||
if (entity instanceof PlayerEntity || !(entity instanceof LivingEntity) || isSeatOccupied(entity.world, pos)) {
|
||||
if (!canBePickedUp(entity) || isSeatOccupied(entity.world, pos)) {
|
||||
Blocks.PINK_BED.onLanded(reader, entity);
|
||||
return;
|
||||
}
|
||||
|
@ -67,7 +67,8 @@ public class SeatBlock extends Block {
|
|||
}
|
||||
|
||||
@Override
|
||||
public PathNodeType getAiPathNodeType(BlockState state, IBlockReader world, BlockPos pos, @Nullable MobEntity entity) {
|
||||
public PathNodeType getAiPathNodeType(BlockState state, IBlockReader world, BlockPos pos,
|
||||
@Nullable MobEntity entity) {
|
||||
return PathNodeType.RAIL;
|
||||
}
|
||||
|
||||
|
@ -113,6 +114,11 @@ public class SeatBlock extends Block {
|
|||
.isEmpty();
|
||||
}
|
||||
|
||||
public static boolean canBePickedUp(Entity passenger) {
|
||||
return !(passenger instanceof PlayerEntity)
|
||||
&& (passenger instanceof LivingEntity || passenger instanceof AbstractMinecartEntity);
|
||||
}
|
||||
|
||||
public static void sitDown(World world, BlockPos pos, Entity entity) {
|
||||
if (world.isRemote)
|
||||
return;
|
||||
|
|
|
@ -12,8 +12,6 @@ import com.simibubi.create.foundation.utility.VecHelper;
|
|||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.SlabBlock;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.state.properties.SlabType;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
|
@ -73,12 +71,10 @@ public class SeatMovementBehaviour extends MovementBehaviour {
|
|||
if (solid)
|
||||
return;
|
||||
|
||||
List<LivingEntity> entitiesWithinAABB = context.world.getEntitiesWithinAABB(LivingEntity.class,
|
||||
new AxisAlignedBB(pos).shrink(1 / 16f), e -> !(e instanceof PlayerEntity));
|
||||
if (entitiesWithinAABB.isEmpty())
|
||||
return;
|
||||
LivingEntity passenger = entitiesWithinAABB.get(0);
|
||||
contraptionEntity.addSittingPassenger(passenger, index);
|
||||
List<Entity> nearbyEntities = context.world.getEntitiesWithinAABB(Entity.class,
|
||||
new AxisAlignedBB(pos).shrink(1 / 16f), SeatBlock::canBePickedUp);
|
||||
if (!nearbyEntities.isEmpty())
|
||||
contraptionEntity.addSittingPassenger(nearbyEntities.get(0), index);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -159,7 +159,7 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE<BeltTileEnt
|
|||
|
||||
@Override
|
||||
public void onEntityCollision(BlockState state, World worldIn, BlockPos pos, Entity entityIn) {
|
||||
if (!canTransport(state))
|
||||
if (!canTransportObjects(state))
|
||||
return;
|
||||
if (entityIn instanceof PlayerEntity) {
|
||||
PlayerEntity player = (PlayerEntity) entityIn;
|
||||
|
@ -204,7 +204,7 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE<BeltTileEnt
|
|||
}
|
||||
}
|
||||
|
||||
public static boolean canTransport(BlockState state) {
|
||||
public static boolean canTransportObjects(BlockState state) {
|
||||
if (!AllBlocks.BELT.has(state))
|
||||
return false;
|
||||
BeltSlope slope = state.get(SLOPE);
|
||||
|
@ -413,7 +413,7 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE<BeltTileEnt
|
|||
te.markDirty();
|
||||
te.sendData();
|
||||
|
||||
if (te.isController() && !canTransport(currentState))
|
||||
if (te.isController() && !canTransportObjects(currentState))
|
||||
te.getInventory()
|
||||
.ejectAll();
|
||||
} else {
|
||||
|
|
|
@ -1,171 +0,0 @@
|
|||
package com.simibubi.create.content.logistics.block.belts.observer;
|
||||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.AllTileEntities;
|
||||
import com.simibubi.create.content.contraptions.relays.belt.BeltBlock;
|
||||
import com.simibubi.create.content.contraptions.relays.belt.BeltPart;
|
||||
import com.simibubi.create.content.contraptions.relays.belt.BeltSlope;
|
||||
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
|
||||
import com.simibubi.create.foundation.block.ITE;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
|
||||
import com.simibubi.create.foundation.utility.Lang;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.HorizontalBlock;
|
||||
import net.minecraft.block.material.PushReaction;
|
||||
import net.minecraft.item.BlockItemUseContext;
|
||||
import net.minecraft.item.ItemUseContext;
|
||||
import net.minecraft.state.BooleanProperty;
|
||||
import net.minecraft.state.EnumProperty;
|
||||
import net.minecraft.state.StateContainer.Builder;
|
||||
import net.minecraft.state.properties.BlockStateProperties;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.ActionResultType;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.IStringSerializable;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.IBlockReader;
|
||||
import net.minecraft.world.IWorld;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class BeltObserverBlock extends HorizontalBlock
|
||||
implements ITE<BeltObserverTileEntity>, IWrenchable {
|
||||
|
||||
public static final BooleanProperty POWERED = BlockStateProperties.POWERED;
|
||||
public static final BooleanProperty BELT = BooleanProperty.create("belt");
|
||||
public static final EnumProperty<Mode> MODE = EnumProperty.create("mode", Mode.class);
|
||||
|
||||
public BeltObserverBlock(Properties properties) {
|
||||
super(properties);
|
||||
setDefaultState(getDefaultState().with(POWERED, false).with(BELT, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||
return AllTileEntities.BELT_OBSERVER.create();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PushReaction getPushReaction(BlockState state) {
|
||||
return PushReaction.BLOCK;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasTileEntity(BlockState state) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState updatePostPlacement(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn,
|
||||
BlockPos currentPos, BlockPos facingPos) {
|
||||
if (facing == stateIn.get(HORIZONTAL_FACING))
|
||||
stateIn = stateIn.with(BELT, shouldHaveExtension(stateIn, worldIn, currentPos));
|
||||
return stateIn;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void fillStateContainer(Builder<Block, BlockState> builder) {
|
||||
builder.add(POWERED, HORIZONTAL_FACING, BELT, MODE);
|
||||
super.fillStateContainer(builder);
|
||||
}
|
||||
|
||||
private boolean shouldHaveExtension(BlockState state, IWorld world, BlockPos pos) {
|
||||
Direction direction = state.get(HORIZONTAL_FACING);
|
||||
BlockState blockState = world.getBlockState(pos.offset(direction));
|
||||
|
||||
if (!AllBlocks.BELT.has(blockState))
|
||||
return false;
|
||||
if (blockState.get(BeltBlock.SLOPE) != BeltSlope.HORIZONTAL)
|
||||
return false;
|
||||
if (blockState.get(BeltBlock.PART) != BeltPart.MIDDLE)
|
||||
return false;
|
||||
if (blockState.get(BeltBlock.HORIZONTAL_FACING).getAxis() == direction.getAxis())
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState getStateForPlacement(BlockItemUseContext context) {
|
||||
BlockState state = getDefaultState();
|
||||
|
||||
Direction preferredFacing = null;
|
||||
for (Direction face : Direction.values()) {
|
||||
if (face.getAxis().isVertical())
|
||||
continue;
|
||||
|
||||
BlockState blockState = context.getWorld().getBlockState(context.getPos().offset(face));
|
||||
if (AllBlocks.BELT.has(blockState)
|
||||
&& blockState.get(BlockStateProperties.HORIZONTAL_FACING).getAxis() != face.getAxis()
|
||||
&& blockState.get(BeltBlock.SLOPE) == BeltSlope.HORIZONTAL)
|
||||
if (preferredFacing == null)
|
||||
preferredFacing = face;
|
||||
else {
|
||||
preferredFacing = null;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (preferredFacing != null) {
|
||||
state = state.with(HORIZONTAL_FACING, preferredFacing);
|
||||
} else if (context.getFace().getAxis().isHorizontal()) {
|
||||
state = state.with(HORIZONTAL_FACING, context.getFace());
|
||||
} else {
|
||||
state = state.with(HORIZONTAL_FACING, context.getPlacementHorizontalFacing());
|
||||
}
|
||||
|
||||
state = state.with(BELT, shouldHaveExtension(state, context.getWorld(), context.getPos()));
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canProvidePower(BlockState state) {
|
||||
return state.get(POWERED);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWeakPower(BlockState blockState, IBlockReader blockAccess, BlockPos pos, Direction side) {
|
||||
return canProvidePower(blockState) ? 15 : 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canConnectRedstone(BlockState state, IBlockReader world, BlockPos pos, Direction side) {
|
||||
return side != state.get(HORIZONTAL_FACING).getOpposite();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) {
|
||||
if (state.hasTileEntity() && state.getBlock() != newState.getBlock()) {
|
||||
TileEntityBehaviour.destroy(worldIn, pos, FilteringBehaviour.TYPE);
|
||||
worldIn.removeTileEntity(pos);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActionResultType onWrenched(BlockState state, ItemUseContext context) {
|
||||
World world = context.getWorld();
|
||||
if (!world.isRemote) {
|
||||
world.setBlockState(context.getPos(), state.with(POWERED, false).cycle(MODE), 3);
|
||||
world.notifyNeighborsOfStateChange(context.getPos(), this);
|
||||
}
|
||||
return ActionResultType.SUCCESS;
|
||||
}
|
||||
|
||||
public enum Mode implements IStringSerializable {
|
||||
DETECT, PULSE, EJECT, SPLIT;
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return Lang.asId(name());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<BeltObserverTileEntity> getTileEntityClass() {
|
||||
return BeltObserverTileEntity.class;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,27 +0,0 @@
|
|||
package com.simibubi.create.content.logistics.block.belts.observer;
|
||||
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringRenderer;
|
||||
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
|
||||
|
||||
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
||||
import net.minecraft.client.renderer.WorldRenderer;
|
||||
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
|
||||
import net.minecraft.state.properties.BlockStateProperties;
|
||||
|
||||
public class BeltObserverRenderer extends SafeTileEntityRenderer<BeltObserverTileEntity> {
|
||||
|
||||
public BeltObserverRenderer(TileEntityRendererDispatcher dispatcher) {
|
||||
super(dispatcher);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderSafe(BeltObserverTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer,
|
||||
int light, int overlay) {
|
||||
light = WorldRenderer.getLightmapCoordinates(te.getWorld(),
|
||||
te.getPos().up().offset(te.getBlockState().get(BlockStateProperties.HORIZONTAL_FACING)));
|
||||
|
||||
FilteringRenderer.renderOnTileEntity(te, partialTicks, ms, buffer, light, overlay);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,87 +0,0 @@
|
|||
package com.simibubi.create.content.logistics.block.belts.observer;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.simibubi.create.content.contraptions.relays.belt.BeltHelper;
|
||||
import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity;
|
||||
import com.simibubi.create.content.logistics.block.belts.observer.BeltObserverBlock.Mode;
|
||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
|
||||
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.tileentity.TileEntityType;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
|
||||
public class BeltObserverTileEntity extends SmartTileEntity {
|
||||
|
||||
private FilteringBehaviour filtering;
|
||||
public int turnOffTicks = 0;
|
||||
|
||||
public BeltObserverTileEntity(TileEntityType<? extends BeltObserverTileEntity> type) {
|
||||
super(type);
|
||||
setLazyTickRate(20);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addBehaviours(List<TileEntityBehaviour> behaviours) {
|
||||
filtering = new FilteringBehaviour(this, new BeltObserverFilterSlot()).moveText(new Vec3d(0, 5, 0));
|
||||
behaviours.add(filtering);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
super.tick();
|
||||
if (turnOffTicks > 0) {
|
||||
turnOffTicks--;
|
||||
if (turnOffTicks == 0)
|
||||
world.getPendingBlockTicks().scheduleTick(pos, getBlockState().getBlock(), 1);
|
||||
}
|
||||
|
||||
if (!isActive())
|
||||
return;
|
||||
if (getBlockState().get(BeltObserverBlock.MODE) != Mode.DETECT)
|
||||
return;
|
||||
|
||||
BlockPos targetPos = pos.offset(getBlockState().get(BeltObserverBlock.HORIZONTAL_FACING));
|
||||
|
||||
BeltTileEntity beltTE = BeltHelper.getSegmentTE(world, targetPos);
|
||||
if (beltTE == null)
|
||||
return;
|
||||
BeltTileEntity controllerTE = beltTE.getControllerTE();
|
||||
if (controllerTE == null)
|
||||
return;
|
||||
|
||||
controllerTE.getInventory().applyToEachWithin(beltTE.index + .5f, .45f, stack -> {
|
||||
if (filtering.test(stack.stack) && turnOffTicks != 6) {
|
||||
world.setBlockState(pos, getBlockState().with(BeltObserverBlock.POWERED, true));
|
||||
world.notifyNeighborsOfStateChange(pos, getBlockState().getBlock());
|
||||
resetTurnOffCooldown();
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private boolean isActive() {
|
||||
return getBlockState().get(BeltObserverBlock.BELT);
|
||||
}
|
||||
|
||||
public void resetTurnOffCooldown() {
|
||||
turnOffTicks = 6;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(CompoundNBT compound, boolean clientPacket) {
|
||||
compound.putInt("TurnOff", turnOffTicks);
|
||||
super.write(compound, clientPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void read(CompoundNBT compound, boolean clientPacket) {
|
||||
turnOffTicks = compound.getInt("TurnOff");
|
||||
super.read(compound, clientPacket);
|
||||
}
|
||||
|
||||
}
|
|
@ -306,19 +306,19 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
|||
private boolean handleDownwardOutput(boolean simulate) {
|
||||
BlockState blockState = getBlockState();
|
||||
ChuteTileEntity targetChute = getTargetChute(blockState);
|
||||
Direction direction = blockState.get(ChuteBlock.FACING);
|
||||
|
||||
if (targetChute != null) {
|
||||
boolean canInsert = targetChute.item.isEmpty();
|
||||
if (!simulate && canInsert) {
|
||||
targetChute.setItem(item, 1);
|
||||
targetChute.setItem(item, direction == Direction.DOWN ? 1 : .51f);
|
||||
setItem(ItemStack.EMPTY);
|
||||
}
|
||||
return canInsert;
|
||||
}
|
||||
|
||||
// Diagonal chutes can only insert into other chutes
|
||||
if (blockState.get(ChuteBlock.FACING)
|
||||
.getAxis()
|
||||
if (direction.getAxis()
|
||||
.isHorizontal())
|
||||
return false;
|
||||
|
||||
|
|
|
@ -99,7 +99,7 @@ public abstract class BeltFunnelBlock extends HorizontalInteractionFunnelBlock {
|
|||
return true;
|
||||
if (!(stateBelow.getBlock() instanceof BeltBlock))
|
||||
return false;
|
||||
if (!BeltBlock.canTransport(stateBelow))
|
||||
if (!BeltBlock.canTransportObjects(stateBelow))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -125,6 +125,11 @@ public abstract class FunnelBlock extends ProperDirectionalBlock implements ITE<
|
|||
return toInsert;
|
||||
if (simulate)
|
||||
inserter.simulate();
|
||||
if (!simulate) {
|
||||
TileEntity tileEntity = worldIn.getTileEntity(pos);
|
||||
if (tileEntity instanceof FunnelTileEntity)
|
||||
((FunnelTileEntity) tileEntity).onTransfer(toInsert);
|
||||
}
|
||||
return inserter.insert(toInsert);
|
||||
}
|
||||
|
||||
|
|
|
@ -108,6 +108,8 @@ public class FunnelTileEntity extends SmartTileEntity {
|
|||
ItemStack stack = autoExtractor.extract(amountToExtract, filter, amountThreshold);
|
||||
if (stack.isEmpty())
|
||||
return;
|
||||
|
||||
onTransfer(stack);
|
||||
invManipulation.insert(stack);
|
||||
startCooldown();
|
||||
}
|
||||
|
@ -142,6 +144,7 @@ public class FunnelTileEntity extends SmartTileEntity {
|
|||
if (stack.isEmpty())
|
||||
return;
|
||||
flap(false);
|
||||
onTransfer(stack);
|
||||
inputBehaviour.handleInsertion(stack, facing, false);
|
||||
startCooldown();
|
||||
}
|
||||
|
@ -160,6 +163,7 @@ public class FunnelTileEntity extends SmartTileEntity {
|
|||
return ignore;
|
||||
|
||||
flap(true);
|
||||
onTransfer(toInsert);
|
||||
|
||||
if (remainder.isEmpty())
|
||||
return TransportedResult.removeItem();
|
||||
|
@ -216,6 +220,8 @@ public class FunnelTileEntity extends SmartTileEntity {
|
|||
return inserted;
|
||||
if (simulate)
|
||||
invManipulation.simulate();
|
||||
if (!simulate)
|
||||
onTransfer(inserted);
|
||||
return invManipulation.insert(inserted);
|
||||
}
|
||||
|
||||
|
@ -254,4 +260,8 @@ public class FunnelTileEntity extends SmartTileEntity {
|
|||
return hasFlap() ? super.getMaxRenderDistanceSquared() : 64;
|
||||
}
|
||||
|
||||
public void onTransfer(ItemStack stack) {
|
||||
AllBlocks.CONTENT_OBSERVER.get().onFunnelTransfer(world, pos, stack);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ import com.simibubi.create.AllBlocks;
|
|||
import com.simibubi.create.content.contraptions.components.saw.SawBlock;
|
||||
import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelBlock;
|
||||
import com.simibubi.create.content.logistics.block.funnel.FunnelBlock;
|
||||
import com.simibubi.create.content.logistics.block.funnel.FunnelTileEntity;
|
||||
import com.simibubi.create.foundation.advancement.AllTriggers;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
|
||||
|
@ -346,6 +347,11 @@ public abstract class ArmInteractionPoint {
|
|||
return stack;
|
||||
if (simulate)
|
||||
inserter.simulate();
|
||||
if (!simulate) {
|
||||
TileEntity tileEntity = world.getTileEntity(pos);
|
||||
if (tileEntity instanceof FunnelTileEntity)
|
||||
((FunnelTileEntity) tileEntity).onTransfer(stack);
|
||||
}
|
||||
return inserter.insert(stack);
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,156 @@
|
|||
package com.simibubi.create.content.logistics.block.redstone;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.AllShapes;
|
||||
import com.simibubi.create.AllTileEntities;
|
||||
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
|
||||
import com.simibubi.create.content.logistics.block.funnel.FunnelTileEntity;
|
||||
import com.simibubi.create.foundation.block.ITE;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
|
||||
import com.simibubi.create.foundation.utility.Iterate;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.HorizontalBlock;
|
||||
import net.minecraft.item.BlockItemUseContext;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.state.BooleanProperty;
|
||||
import net.minecraft.state.StateContainer.Builder;
|
||||
import net.minecraft.state.properties.BlockStateProperties;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
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.World;
|
||||
import net.minecraft.world.server.ServerWorld;
|
||||
import net.minecraftforge.items.CapabilityItemHandler;
|
||||
|
||||
public class ContentObserverBlock extends HorizontalBlock implements ITE<ContentObserverTileEntity>, IWrenchable {
|
||||
|
||||
public static final BooleanProperty POWERED = BlockStateProperties.POWERED;
|
||||
|
||||
public ContentObserverBlock(Properties properties) {
|
||||
super(properties);
|
||||
setDefaultState(getDefaultState().with(POWERED, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
public VoxelShape getShape(BlockState state, IBlockReader p_220053_2_, BlockPos p_220053_3_,
|
||||
ISelectionContext p_220053_4_) {
|
||||
return AllShapes.CONTENT_OBSERVER.get(state.get(HORIZONTAL_FACING));
|
||||
}
|
||||
|
||||
@Override
|
||||
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||
return AllTileEntities.CONTENT_OBSERVER.create();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasTileEntity(BlockState state) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void fillStateContainer(Builder<Block, BlockState> builder) {
|
||||
builder.add(POWERED, HORIZONTAL_FACING);
|
||||
super.fillStateContainer(builder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState getStateForPlacement(BlockItemUseContext context) {
|
||||
BlockState state = getDefaultState();
|
||||
|
||||
Direction preferredFacing = null;
|
||||
for (Direction face : Iterate.horizontalDirections) {
|
||||
BlockPos offsetPos = context.getPos()
|
||||
.offset(face);
|
||||
World world = context.getWorld();
|
||||
boolean canDetect = false;
|
||||
TileEntity tileEntity = world.getTileEntity(offsetPos);
|
||||
|
||||
if (TileEntityBehaviour.get(tileEntity, TransportedItemStackHandlerBehaviour.TYPE) != null)
|
||||
canDetect = true;
|
||||
else if (tileEntity != null && tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
|
||||
.isPresent())
|
||||
canDetect = true;
|
||||
else if (tileEntity instanceof FunnelTileEntity)
|
||||
canDetect = true;
|
||||
|
||||
if (canDetect) {
|
||||
if (preferredFacing != null) {
|
||||
preferredFacing = null;
|
||||
break;
|
||||
}
|
||||
preferredFacing = face;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (preferredFacing != null)
|
||||
return state.with(HORIZONTAL_FACING, preferredFacing);
|
||||
return state.with(HORIZONTAL_FACING, context.getPlacementHorizontalFacing()
|
||||
.getOpposite());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canProvidePower(BlockState state) {
|
||||
return state.get(POWERED);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWeakPower(BlockState blockState, IBlockReader blockAccess, BlockPos pos, Direction side) {
|
||||
return canProvidePower(blockState) && (side == null || side != blockState.get(HORIZONTAL_FACING)
|
||||
.getOpposite()) ? 15 : 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void scheduledTick(BlockState state, ServerWorld worldIn, BlockPos pos, Random random) {
|
||||
worldIn.setBlockState(pos, state.with(POWERED, false), 2);
|
||||
worldIn.notifyNeighborsOfStateChange(pos, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canConnectRedstone(BlockState state, IBlockReader world, BlockPos pos, Direction side) {
|
||||
return side != state.get(HORIZONTAL_FACING)
|
||||
.getOpposite();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) {
|
||||
if (state.hasTileEntity() && state.getBlock() != newState.getBlock()) {
|
||||
TileEntityBehaviour.destroy(worldIn, pos, FilteringBehaviour.TYPE);
|
||||
worldIn.removeTileEntity(pos);
|
||||
}
|
||||
}
|
||||
|
||||
public void onFunnelTransfer(World world, BlockPos funnelPos, ItemStack transferred) {
|
||||
for (Direction direction : Iterate.horizontalDirections) {
|
||||
BlockPos detectorPos = funnelPos.offset(direction);
|
||||
BlockState detectorState = world.getBlockState(detectorPos);
|
||||
if (!AllBlocks.CONTENT_OBSERVER.has(detectorState))
|
||||
continue;
|
||||
if (detectorState.get(HORIZONTAL_FACING) != direction.getOpposite())
|
||||
continue;
|
||||
withTileEntityDo(world, detectorPos, te -> {
|
||||
FilteringBehaviour filteringBehaviour = TileEntityBehaviour.get(te, FilteringBehaviour.TYPE);
|
||||
if (filteringBehaviour == null)
|
||||
return;
|
||||
if (!filteringBehaviour.test(transferred))
|
||||
return;
|
||||
te.activate(4);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<ContentObserverTileEntity> getTileEntityClass() {
|
||||
return ContentObserverTileEntity.class;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,108 @@
|
|||
package com.simibubi.create.content.logistics.block.redstone;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour.TransportedResult;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InvManipulationBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InvManipulationBehaviour.InterfaceProvider;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.tileentity.TileEntityType;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
|
||||
public class ContentObserverTileEntity extends SmartTileEntity {
|
||||
|
||||
private static final int DEFAULT_DELAY = 6;
|
||||
private FilteringBehaviour filtering;
|
||||
private InvManipulationBehaviour observedInventory;
|
||||
public int turnOffTicks = 0;
|
||||
|
||||
public ContentObserverTileEntity(TileEntityType<? extends ContentObserverTileEntity> type) {
|
||||
super(type);
|
||||
setLazyTickRate(20);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addBehaviours(List<TileEntityBehaviour> behaviours) {
|
||||
filtering = new FilteringBehaviour(this, new FilteredDetectorFilterSlot()).moveText(new Vec3d(0, 5, 0));
|
||||
behaviours.add(filtering);
|
||||
|
||||
observedInventory = new InvManipulationBehaviour(this, InterfaceProvider.towardBlockFacing()).bypassSidedness();
|
||||
behaviours.add(observedInventory);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
super.tick();
|
||||
BlockState state = getBlockState();
|
||||
if (turnOffTicks > 0) {
|
||||
turnOffTicks--;
|
||||
if (turnOffTicks == 0)
|
||||
world.getPendingBlockTicks()
|
||||
.scheduleTick(pos, state.getBlock(), 1);
|
||||
}
|
||||
|
||||
if (!isActive())
|
||||
return;
|
||||
|
||||
Direction facing = state.get(ContentObserverBlock.HORIZONTAL_FACING);
|
||||
BlockPos targetPos = pos.offset(facing);
|
||||
|
||||
TransportedItemStackHandlerBehaviour behaviour =
|
||||
TileEntityBehaviour.get(world, targetPos, TransportedItemStackHandlerBehaviour.TYPE);
|
||||
if (behaviour != null) {
|
||||
behaviour.handleCenteredProcessingOnAllItems(.45f, stack -> {
|
||||
if (!filtering.test(stack.stack) || turnOffTicks == 6)
|
||||
return TransportedResult.doNothing();
|
||||
|
||||
activate();
|
||||
return TransportedResult.doNothing();
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
if (!observedInventory.simulate()
|
||||
.extract()
|
||||
.isEmpty()) {
|
||||
activate();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public void activate() {
|
||||
activate(DEFAULT_DELAY);
|
||||
}
|
||||
|
||||
public void activate(int ticks) {
|
||||
BlockState state = getBlockState();
|
||||
turnOffTicks = ticks;
|
||||
if (state.get(ContentObserverBlock.POWERED))
|
||||
return;
|
||||
world.setBlockState(pos, state.with(ContentObserverBlock.POWERED, true));
|
||||
world.notifyNeighborsOfStateChange(pos, state.getBlock());
|
||||
}
|
||||
|
||||
private boolean isActive() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(CompoundNBT compound, boolean clientPacket) {
|
||||
compound.putInt("TurnOff", turnOffTicks);
|
||||
super.write(compound, clientPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void read(CompoundNBT compound, boolean clientPacket) {
|
||||
turnOffTicks = compound.getInt("TurnOff");
|
||||
super.read(compound, clientPacket);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package com.simibubi.create.content.logistics.block.belts.observer;
|
||||
package com.simibubi.create.content.logistics.block.redstone;
|
||||
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform;
|
||||
|
@ -10,9 +10,9 @@ import net.minecraft.block.BlockState;
|
|||
import net.minecraft.block.HorizontalBlock;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
|
||||
public class BeltObserverFilterSlot extends ValueBoxTransform {
|
||||
public class FilteredDetectorFilterSlot extends ValueBoxTransform {
|
||||
|
||||
Vec3d position = VecHelper.voxelSpace(8f, 14.5f, 16f);
|
||||
Vec3d position = VecHelper.voxelSpace(8f, 15.5f, 11f);
|
||||
|
||||
@Override
|
||||
protected Vec3d getLocalOffset(BlockState state) {
|
|
@ -4,17 +4,15 @@ import java.util.List;
|
|||
|
||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InvManipulationBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InvManipulationBehaviour.InterfaceProvider;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.state.properties.BlockStateProperties;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.tileentity.TileEntityType;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraftforge.common.util.LazyOptional;
|
||||
import net.minecraftforge.items.CapabilityItemHandler;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
|
||||
public class StockpileSwitchTileEntity extends SmartTileEntity {
|
||||
|
@ -23,7 +21,9 @@ public class StockpileSwitchTileEntity extends SmartTileEntity {
|
|||
public float offWhenBelow;
|
||||
public float currentLevel;
|
||||
public boolean powered;
|
||||
private LazyOptional<IItemHandler> observedInventory;
|
||||
|
||||
private FilteringBehaviour filtering;
|
||||
private InvManipulationBehaviour observedInventory;
|
||||
|
||||
public StockpileSwitchTileEntity(TileEntityType<?> typeIn) {
|
||||
super(typeIn);
|
||||
|
@ -31,7 +31,6 @@ public class StockpileSwitchTileEntity extends SmartTileEntity {
|
|||
offWhenBelow = .25f;
|
||||
currentLevel = -1;
|
||||
powered = false;
|
||||
observedInventory = LazyOptional.empty();
|
||||
setLazyTickRate(10);
|
||||
}
|
||||
|
||||
|
@ -41,7 +40,6 @@ public class StockpileSwitchTileEntity extends SmartTileEntity {
|
|||
offWhenBelow = compound.getFloat("OffBelow");
|
||||
currentLevel = compound.getFloat("Current");
|
||||
powered = compound.getBoolean("Powered");
|
||||
|
||||
super.read(compound, clientPacket);
|
||||
}
|
||||
|
||||
|
@ -51,7 +49,6 @@ public class StockpileSwitchTileEntity extends SmartTileEntity {
|
|||
compound.putFloat("OffBelow", offWhenBelow);
|
||||
compound.putFloat("Current", currentLevel);
|
||||
compound.putBoolean("Powered", powered);
|
||||
|
||||
super.write(compound, clientPacket);
|
||||
}
|
||||
|
||||
|
@ -60,19 +57,19 @@ public class StockpileSwitchTileEntity extends SmartTileEntity {
|
|||
}
|
||||
|
||||
public void updateCurrentLevel() {
|
||||
if (!observedInventory.isPresent()) {
|
||||
if (!findNewInventory() && currentLevel != -1) {
|
||||
if (!observedInventory.hasInventory()) {
|
||||
if (currentLevel == -1)
|
||||
return;
|
||||
world.setBlockState(pos, getBlockState().with(StockpileSwitchBlock.INDICATOR, 0), 3);
|
||||
currentLevel = -1;
|
||||
powered = false;
|
||||
world.notifyNeighbors(pos, getBlockState().getBlock());
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
float occupied = 0;
|
||||
float totalSpace = 0;
|
||||
IItemHandler inv = observedInventory.orElse(null);
|
||||
IItemHandler inv = observedInventory.getInventory();
|
||||
|
||||
for (int slot = 0; slot < inv.getSlots(); slot++) {
|
||||
ItemStack stackInSlot = inv.getStackInSlot(slot);
|
||||
|
@ -83,6 +80,8 @@ public class StockpileSwitchTileEntity extends SmartTileEntity {
|
|||
continue;
|
||||
|
||||
totalSpace += 1;
|
||||
|
||||
if (filtering.test(stackInSlot))
|
||||
occupied += count * (1f / space);
|
||||
}
|
||||
|
||||
|
@ -109,36 +108,16 @@ public class StockpileSwitchTileEntity extends SmartTileEntity {
|
|||
super.lazyTick();
|
||||
if (world.isRemote)
|
||||
return;
|
||||
findNewInventory();
|
||||
updateCurrentLevel();
|
||||
}
|
||||
|
||||
private boolean findNewInventory() {
|
||||
observedInventory = LazyOptional.empty();
|
||||
BlockPos invPos = getPos().offset(getBlockState().get(BlockStateProperties.HORIZONTAL_FACING));
|
||||
|
||||
if (!world.isBlockPresent(invPos))
|
||||
return false;
|
||||
BlockState invState = world.getBlockState(invPos);
|
||||
|
||||
if (!invState.hasTileEntity())
|
||||
return false;
|
||||
TileEntity invTE = world.getTileEntity(invPos);
|
||||
if (invTE == null)
|
||||
return false;
|
||||
|
||||
observedInventory = invTE.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY);
|
||||
if (observedInventory.isPresent()) {
|
||||
updateCurrentLevel();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addBehaviours(List<TileEntityBehaviour> behaviours) {
|
||||
filtering = new FilteringBehaviour(this, new FilteredDetectorFilterSlot()).moveText(new Vec3d(0, 5, 0))
|
||||
.withCallback($ -> updateCurrentLevel());
|
||||
behaviours.add(filtering);
|
||||
|
||||
observedInventory = new InvManipulationBehaviour(this, InterfaceProvider.towardBlockFacing()).bypassSidedness();
|
||||
behaviours.add(observedInventory);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -21,7 +21,6 @@ import com.simibubi.create.content.contraptions.components.structureMovement.mou
|
|||
import com.simibubi.create.content.contraptions.components.tracks.ReinforcedRailBlock;
|
||||
import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeBlock;
|
||||
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock;
|
||||
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;
|
||||
|
@ -233,48 +232,6 @@ public class BlockStateGen {
|
|||
});
|
||||
}
|
||||
|
||||
public static NonNullBiConsumer<DataGenContext<Block, BeltObserverBlock>, RegistrateBlockstateProvider> beltObserver() {
|
||||
return (c, p) -> {
|
||||
|
||||
Map<BeltObserverBlock.Mode, Map<String, ModelFile>> models = new IdentityHashMap<>();
|
||||
Map<String, ResourceLocation> baseModels = new HashMap<>();
|
||||
|
||||
for (boolean powered : Iterate.trueAndFalse) {
|
||||
for (boolean belt : Iterate.trueAndFalse) {
|
||||
String suffix = (belt ? "_belt" : "") + (powered ? "_powered" : "");
|
||||
baseModels.put(suffix, p.modLoc("block/belt_observer/base" + suffix));
|
||||
}
|
||||
}
|
||||
|
||||
for (BeltObserverBlock.Mode mode : BeltObserverBlock.Mode.values()) {
|
||||
String modeName = mode.getName();
|
||||
HashMap<String, ModelFile> map = new HashMap<>();
|
||||
for (boolean powered : Iterate.trueAndFalse) {
|
||||
for (boolean belt : Iterate.trueAndFalse) {
|
||||
String suffix = (belt ? "_belt" : "") + (powered ? "_powered" : "");
|
||||
map.put(suffix, p.models()
|
||||
.withExistingParent("block/belt_observer/" + modeName + suffix, baseModels.get(suffix))
|
||||
.texture("texture",
|
||||
p.modLoc("block/belt_observer_" + modeName + (powered ? "_powered" : ""))));
|
||||
}
|
||||
}
|
||||
models.put(mode, map);
|
||||
}
|
||||
|
||||
p.getVariantBuilder(c.get())
|
||||
.forAllStates(state -> {
|
||||
String suffix = (state.get(BeltObserverBlock.BELT) ? "_belt" : "")
|
||||
+ (state.get(BeltObserverBlock.POWERED) ? "_powered" : "");
|
||||
return ConfiguredModel.builder()
|
||||
.modelFile(models.get(state.get(BeltObserverBlock.MODE))
|
||||
.get(suffix))
|
||||
.rotationY((int) state.get(BeltObserverBlock.HORIZONTAL_FACING)
|
||||
.getHorizontalAngle())
|
||||
.build();
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
public static <B extends LinearChassisBlock> NonNullBiConsumer<DataGenContext<Block, B>, RegistrateBlockstateProvider> linearChassis() {
|
||||
return (c, p) -> {
|
||||
ResourceLocation side = p.modLoc("block/" + c.getName() + "_side");
|
||||
|
|
|
@ -655,7 +655,7 @@ public class StandardRecipeGen extends CreateRecipeProvider {
|
|||
.patternLine("B B")
|
||||
.patternLine("BBB")),
|
||||
|
||||
BELT_OBSERVER = create(AllBlocks.BELT_OBSERVER).unlockedBy(AllItems.BELT_CONNECTOR::get)
|
||||
BELT_OBSERVER = create(AllBlocks.CONTENT_OBSERVER).unlockedBy(AllItems.BELT_CONNECTOR::get)
|
||||
.viaShaped(b -> b.key('B', I.brassCasing())
|
||||
.key('R', I.redstone())
|
||||
.key('I', I.iron())
|
||||
|
|
|
@ -3,6 +3,8 @@ package com.simibubi.create.foundation.tileEntity.behaviour.inventory;
|
|||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import com.google.common.base.Predicates;
|
||||
import com.simibubi.create.foundation.config.AllConfigs;
|
||||
import com.simibubi.create.foundation.item.ItemHelper;
|
||||
|
@ -33,6 +35,7 @@ public class InvManipulationBehaviour extends TileEntityBehaviour {
|
|||
protected InterfaceProvider target;
|
||||
protected LazyOptional<IItemHandler> targetCapability;
|
||||
protected boolean simulateNext;
|
||||
protected boolean bypassSided;
|
||||
|
||||
private BehaviourType<InvManipulationBehaviour> behaviourType;
|
||||
|
||||
|
@ -56,6 +59,12 @@ public class InvManipulationBehaviour extends TileEntityBehaviour {
|
|||
this.target = target;
|
||||
this.targetCapability = LazyOptional.empty();
|
||||
simulateNext = false;
|
||||
bypassSided = false;
|
||||
}
|
||||
|
||||
public InvManipulationBehaviour bypassSidedness() {
|
||||
bypassSided = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -70,6 +79,11 @@ public class InvManipulationBehaviour extends TileEntityBehaviour {
|
|||
return targetCapability.isPresent();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public IItemHandler getInventory() {
|
||||
return targetCapability.orElse(null);
|
||||
}
|
||||
|
||||
public ItemStack extract() {
|
||||
return extract(getAmountFromFilter());
|
||||
}
|
||||
|
@ -158,8 +172,8 @@ public class InvManipulationBehaviour extends TileEntityBehaviour {
|
|||
TileEntity invTE = world.getTileEntity(pos);
|
||||
if (invTE == null)
|
||||
return;
|
||||
targetCapability =
|
||||
invTE.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, targetBlockFace.getFace());
|
||||
targetCapability = bypassSided ? invTE.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
|
||||
: invTE.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, targetBlockFace.getFace());
|
||||
if (targetCapability.isPresent())
|
||||
targetCapability.addListener(this::onHandlerInvalidated);
|
||||
}
|
||||
|
|
|
@ -1,116 +0,0 @@
|
|||
{
|
||||
"credit": "Made with Blockbench",
|
||||
"parent": "block/block",
|
||||
"textures": {
|
||||
"brass_casing": "create:block/brass_casing",
|
||||
"extractor": "create:block/extractor",
|
||||
"particle": "#texture",
|
||||
"entity_detector_off": "#texture",
|
||||
"entity_detector_front": "create:block/belt_observer_front"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"name": "Bottom",
|
||||
"from": [0, 0, 0],
|
||||
"to": [16, 2, 16],
|
||||
"faces": {
|
||||
"north": {"uv": [0, 14, 16, 16], "texture": "#brass_casing"},
|
||||
"east": {"uv": [0, 0, 2, 16], "rotation": 270, "texture": "#entity_detector_off"},
|
||||
"south": {"uv": [0, 14, 16, 16], "texture": "#brass_casing"},
|
||||
"west": {"uv": [14, 0, 16, 16], "rotation": 90, "texture": "#entity_detector_off"},
|
||||
"up": {"uv": [0, 0, 16, 16], "texture": "#brass_casing"},
|
||||
"down": {"uv": [0, 0, 16, 16], "texture": "#entity_detector_off"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Top",
|
||||
"from": [0, 14, 0],
|
||||
"to": [5, 16, 16],
|
||||
"faces": {
|
||||
"north": {"uv": [11, 0, 16, 2], "texture": "#brass_casing"},
|
||||
"east": {"uv": [14, 0, 16, 16], "rotation": 270, "texture": "#entity_detector_off"},
|
||||
"south": {"uv": [0, 0, 5, 2], "texture": "#brass_casing"},
|
||||
"west": {"uv": [0, 0, 2, 16], "rotation": 90, "texture": "#entity_detector_off"},
|
||||
"up": {"uv": [11, 0, 16, 16], "rotation": 180, "texture": "#entity_detector_off"},
|
||||
"down": {"uv": [0, 0, 5, 16], "texture": "#brass_casing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Top",
|
||||
"from": [11, 14, 0],
|
||||
"to": [16, 16, 16],
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 5, 2], "texture": "#brass_casing"},
|
||||
"east": {"uv": [14, 0, 16, 16], "rotation": 270, "texture": "#entity_detector_off"},
|
||||
"south": {"uv": [11, 0, 16, 2], "texture": "#brass_casing"},
|
||||
"west": {"uv": [0, 0, 2, 16], "rotation": 90, "texture": "#entity_detector_off"},
|
||||
"up": {"uv": [0, 0, 5, 16], "rotation": 180, "texture": "#entity_detector_off"},
|
||||
"down": {"uv": [0, 0, 5, 16], "texture": "#brass_casing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Top",
|
||||
"from": [5, 14, 0],
|
||||
"to": [11, 16, 14],
|
||||
"faces": {
|
||||
"north": {"uv": [5, 0, 11, 2], "texture": "#brass_casing"},
|
||||
"east": {"uv": [14, 0, 16, 14], "rotation": 270, "texture": "#entity_detector_off"},
|
||||
"south": {"uv": [5, 1, 11, 3], "rotation": 180, "texture": "#entity_detector_off"},
|
||||
"west": {"uv": [0, 0, 2, 14], "rotation": 90, "texture": "#entity_detector_off"},
|
||||
"up": {"uv": [5, 2, 11, 16], "rotation": 180, "texture": "#entity_detector_off"},
|
||||
"down": {"uv": [5, 2, 11, 16], "texture": "#brass_casing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Side",
|
||||
"from": [0, 2, 0],
|
||||
"to": [2, 14, 16],
|
||||
"faces": {
|
||||
"north": {"uv": [14, 2, 16, 14], "texture": "#brass_casing"},
|
||||
"east": {"uv": [2, 0, 14, 16], "rotation": 90, "texture": "#brass_casing"},
|
||||
"south": {"uv": [0, 2, 2, 14], "texture": "#brass_casing"},
|
||||
"west": {"uv": [2, 0, 14, 16], "rotation": 90, "texture": "#entity_detector_off"},
|
||||
"down": {"uv": [0, 0, 2, 16], "texture": "#entity_detector_off"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Side",
|
||||
"from": [14, 2, 0],
|
||||
"to": [16, 14, 16],
|
||||
"faces": {
|
||||
"north": {"uv": [0, 2, 2, 14], "texture": "#brass_casing"},
|
||||
"east": {"uv": [2, 0, 14, 16], "rotation": 270, "texture": "#entity_detector_off"},
|
||||
"south": {"uv": [14, 2, 16, 14], "texture": "#brass_casing"},
|
||||
"west": {"uv": [2, 0, 14, 16], "rotation": 90, "texture": "#brass_casing"},
|
||||
"down": {"uv": [0, 0, 2, 16], "texture": "#entity_detector_off"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Center",
|
||||
"from": [2, 2, 1],
|
||||
"to": [14, 14, 17],
|
||||
"faces": {
|
||||
"north": {"uv": [2, 2, 14, 14], "texture": "#brass_casing"},
|
||||
"east": {"uv": [0, 2, 16, 14], "texture": "#entity_detector_front"},
|
||||
"south": {"uv": [2, 2, 14, 14], "texture": "#entity_detector_front"},
|
||||
"west": {"uv": [0, 2, 16, 14], "texture": "#entity_detector_front"},
|
||||
"up": {"uv": [0, 0, 12, 16], "texture": "#brass_casing"},
|
||||
"down": {"uv": [0, 0, 12, 16], "texture": "#brass_casing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Filter",
|
||||
"from": [5, 13, 13],
|
||||
"to": [11, 15, 18],
|
||||
"rotation": {"angle": 0, "axis": "x", "origin": [9, 15, 16]},
|
||||
"faces": {
|
||||
"north": {"uv": [4, 1, 6, 7], "rotation": 270, "texture": "#extractor"},
|
||||
"east": {"uv": [4, 2, 6, 7], "rotation": 270, "texture": "#extractor"},
|
||||
"south": {"uv": [4, 1, 6, 7], "rotation": 270, "texture": "#extractor"},
|
||||
"west": {"uv": [4, 2, 6, 7], "rotation": 270, "texture": "#extractor"},
|
||||
"up": {"uv": [0, 9, 5, 15], "rotation": 90, "texture": "#extractor"},
|
||||
"down": {"uv": [5, 5, 11, 10], "texture": "#entity_detector_off"}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,131 +0,0 @@
|
|||
{
|
||||
"credit": "Made with Blockbench",
|
||||
"parent": "block/block",
|
||||
"textures": {
|
||||
"3": "create:block/extractor",
|
||||
"brass_casing": "create:block/brass_casing",
|
||||
"particle": "#texture",
|
||||
"entity_detector_off": "#texture",
|
||||
"entity_detector_front": "create:block/belt_observer_front"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"name": "Bottom",
|
||||
"from": [0, 0, 0],
|
||||
"to": [16, 2, 16],
|
||||
"faces": {
|
||||
"north": {"uv": [0, 14, 16, 16], "texture": "#brass_casing"},
|
||||
"east": {"uv": [0, 0, 2, 16], "rotation": 270, "texture": "#entity_detector_off"},
|
||||
"south": {"uv": [0, 14, 16, 16], "texture": "#brass_casing"},
|
||||
"west": {"uv": [14, 0, 16, 16], "rotation": 90, "texture": "#entity_detector_off"},
|
||||
"up": {"uv": [0, 0, 16, 16], "texture": "#brass_casing"},
|
||||
"down": {"uv": [0, 0, 16, 16], "texture": "#entity_detector_off"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Side",
|
||||
"from": [0, 2, 0],
|
||||
"to": [2, 14, 16],
|
||||
"faces": {
|
||||
"north": {"uv": [14, 2, 16, 14], "texture": "#brass_casing"},
|
||||
"east": {"uv": [2, 0, 14, 16], "rotation": 90, "texture": "#brass_casing"},
|
||||
"south": {"uv": [0, 2, 2, 14], "texture": "#brass_casing"},
|
||||
"west": {"uv": [2, 0, 14, 16], "rotation": 90, "texture": "#entity_detector_off"},
|
||||
"up": {"uv": [0, 0, 2, 16], "texture": "#entity_detector_off"},
|
||||
"down": {"uv": [0, 0, 2, 16], "texture": "#entity_detector_off"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Side",
|
||||
"from": [14, 2, 0],
|
||||
"to": [16, 14, 16],
|
||||
"faces": {
|
||||
"north": {"uv": [0, 2, 2, 14], "texture": "#brass_casing"},
|
||||
"east": {"uv": [2, 0, 14, 16], "rotation": 270, "texture": "#entity_detector_off"},
|
||||
"south": {"uv": [14, 2, 16, 14], "texture": "#brass_casing"},
|
||||
"west": {"uv": [2, 0, 14, 16], "rotation": 90, "texture": "#brass_casing"},
|
||||
"up": {"uv": [0, 0, 2, 16], "texture": "#entity_detector_off"},
|
||||
"down": {"uv": [0, 0, 2, 16], "texture": "#entity_detector_off"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Center",
|
||||
"from": [2, 2, 1],
|
||||
"to": [14, 14, 17],
|
||||
"faces": {
|
||||
"north": {"uv": [2, 2, 14, 14], "texture": "#brass_casing"},
|
||||
"east": {"uv": [0, 2, 16, 14], "texture": "#entity_detector_front"},
|
||||
"south": {"uv": [2, 2, 14, 14], "texture": "#entity_detector_front"},
|
||||
"west": {"uv": [0, 2, 16, 14], "texture": "#entity_detector_front"},
|
||||
"up": {"uv": [0, 0, 12, 16], "texture": "#brass_casing"},
|
||||
"down": {"uv": [0, 0, 12, 16], "texture": "#brass_casing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Belt Thing",
|
||||
"from": [1, 5, 16],
|
||||
"to": [15, 11, 30],
|
||||
"faces": {
|
||||
"north": {"uv": [1, 0, 15, 6], "texture": "#entity_detector_off"},
|
||||
"east": {"uv": [1, 0, 15, 6], "texture": "#entity_detector_off"},
|
||||
"south": {"uv": [1, 0, 15, 6], "texture": "#entity_detector_off"},
|
||||
"west": {"uv": [2, 0, 16, 6], "texture": "#entity_detector_off"},
|
||||
"up": {"uv": [1, 1, 15, 15], "texture": "#brass_casing"},
|
||||
"down": {"uv": [1, 1, 15, 15], "texture": "#brass_casing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Top",
|
||||
"from": [0, 14, 0],
|
||||
"to": [5, 16, 16],
|
||||
"faces": {
|
||||
"north": {"uv": [11, 0, 16, 2], "texture": "#brass_casing"},
|
||||
"east": {"uv": [14, 0, 16, 16], "rotation": 270, "texture": "#entity_detector_off"},
|
||||
"south": {"uv": [0, 0, 5, 2], "texture": "#brass_casing"},
|
||||
"west": {"uv": [0, 0, 2, 16], "rotation": 90, "texture": "#entity_detector_off"},
|
||||
"up": {"uv": [11, 0, 16, 16], "rotation": 180, "texture": "#entity_detector_off"},
|
||||
"down": {"uv": [0, 0, 5, 16], "texture": "#entity_detector_off"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Top",
|
||||
"from": [5, 14, 0],
|
||||
"to": [11, 16, 14],
|
||||
"faces": {
|
||||
"north": {"uv": [5, 0, 11, 2], "texture": "#brass_casing"},
|
||||
"east": {"uv": [14, 0, 16, 14], "rotation": 270, "texture": "#entity_detector_off"},
|
||||
"south": {"uv": [5, 1, 11, 3], "rotation": 180, "texture": "#entity_detector_off"},
|
||||
"west": {"uv": [0, 0, 2, 14], "rotation": 90, "texture": "#entity_detector_off"},
|
||||
"up": {"uv": [5, 2, 11, 16], "rotation": 180, "texture": "#entity_detector_off"},
|
||||
"down": {"uv": [5, 2, 11, 16], "texture": "#entity_detector_off"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Top",
|
||||
"from": [11, 14, 0],
|
||||
"to": [16, 16, 16],
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 5, 2], "texture": "#brass_casing"},
|
||||
"east": {"uv": [14, 0, 16, 16], "rotation": 270, "texture": "#entity_detector_off"},
|
||||
"south": {"uv": [11, 0, 16, 2], "texture": "#brass_casing"},
|
||||
"west": {"uv": [0, 0, 2, 16], "rotation": 90, "texture": "#entity_detector_off"},
|
||||
"up": {"uv": [0, 0, 5, 16], "rotation": 180, "texture": "#entity_detector_off"},
|
||||
"down": {"uv": [0, 0, 5, 16], "texture": "#entity_detector_off"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Filter",
|
||||
"from": [5, 13, 13],
|
||||
"to": [11, 15, 18],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [9, 15, 16]},
|
||||
"faces": {
|
||||
"north": {"uv": [4, 1, 6, 7], "rotation": 270, "texture": "#3"},
|
||||
"east": {"uv": [4, 2, 6, 7], "rotation": 270, "texture": "#3"},
|
||||
"south": {"uv": [4, 1, 6, 7], "rotation": 270, "texture": "#3"},
|
||||
"west": {"uv": [4, 2, 6, 7], "rotation": 270, "texture": "#3"},
|
||||
"up": {"uv": [0, 9, 5, 15], "rotation": 90, "texture": "#3"},
|
||||
"down": {"uv": [5, 5, 11, 10], "texture": "#3"}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/belt_observer/base_belt",
|
||||
"textures": {
|
||||
"3": "create:block/extractor_powered"
|
||||
}
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/belt_observer/base",
|
||||
"textures": {
|
||||
"extractor": "create:block/extractor_powered"
|
||||
}
|
||||
}
|
|
@ -1,88 +0,0 @@
|
|||
{
|
||||
"__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)",
|
||||
"parent": "block/block",
|
||||
"display": {
|
||||
"gui": {
|
||||
"rotation": [ 30, 45, 0 ],
|
||||
"translation": [ 0, 0, 0],
|
||||
"scale":[ 0.625, 0.625, 0.625 ]
|
||||
},
|
||||
"fixed": {
|
||||
"rotation": [ 0, 180, 0 ],
|
||||
"translation": [ 0, 0, 0],
|
||||
"scale":[ 0.5, 0.5, 0.5 ]
|
||||
}
|
||||
},
|
||||
"textures": {
|
||||
"brass_casing": "create:block/brass_casing",
|
||||
"entity_detector_off": "create:block/belt_observer_detect",
|
||||
"entity_detector_front": "create:block/belt_observer_front"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"name": "Bottom",
|
||||
"from": [ 0, 0, 0 ],
|
||||
"to": [ 16, 2, 16 ],
|
||||
"faces": {
|
||||
"north": { "texture": "#brass_casing", "uv": [ 0, 14, 16, 16 ] },
|
||||
"east": { "texture": "#entity_detector_off", "uv": [ 0, 0, 2, 16 ], "rotation": 270 },
|
||||
"south": { "texture": "#brass_casing", "uv": [ 0, 14, 16, 16 ] },
|
||||
"west": { "texture": "#entity_detector_off", "uv": [ 14, 0, 16, 16 ], "rotation": 90 },
|
||||
"up": { "texture": "#brass_casing", "uv": [ 0, 0, 16, 16 ] },
|
||||
"down": { "texture": "#entity_detector_off", "uv": [ 0, 0, 16, 16 ] }
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Top",
|
||||
"from": [ 0, 14, 0 ],
|
||||
"to": [ 16, 16, 16 ],
|
||||
"faces": {
|
||||
"north": { "texture": "#brass_casing", "uv": [ 0, 0, 16, 2 ] },
|
||||
"east": { "texture": "#entity_detector_off", "uv": [ 14, 0, 16, 16 ], "rotation": 270 },
|
||||
"south": { "texture": "#brass_casing", "uv": [ 0, 0, 16, 2 ] },
|
||||
"west": { "texture": "#entity_detector_off", "uv": [ 0, 0, 2, 16 ], "rotation": 90 },
|
||||
"up": { "texture": "#entity_detector_off", "uv": [ 0, 0, 16, 16 ], "rotation": 180 },
|
||||
"down": { "texture": "#brass_casing", "uv": [ 0, 0, 16, 16 ] }
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Side",
|
||||
"from": [ 0, 2, 0 ],
|
||||
"to": [ 2, 14, 16 ],
|
||||
"faces": {
|
||||
"north": { "texture": "#brass_casing", "uv": [ 14, 2, 16, 14 ] },
|
||||
"east": { "texture": "#brass_casing", "uv": [ 2, 0, 14, 16 ], "rotation": 90 },
|
||||
"south": { "texture": "#brass_casing", "uv": [ 0, 2, 2, 14 ] },
|
||||
"west": { "texture": "#entity_detector_off", "uv": [ 2, 0, 14, 16 ], "rotation": 90 },
|
||||
"up": { "texture": "#entity_detector_off", "uv": [ 0, 0, 2, 16 ] },
|
||||
"down": { "texture": "#entity_detector_off", "uv": [ 0, 0, 2, 16 ] }
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Side",
|
||||
"from": [ 14, 2, 0 ],
|
||||
"to": [ 16, 14, 16 ],
|
||||
"faces": {
|
||||
"north": { "texture": "#brass_casing", "uv": [ 0, 2, 2, 14 ] },
|
||||
"east": { "texture": "#entity_detector_off", "uv": [ 2, 0, 14, 16 ], "rotation": 270 },
|
||||
"south": { "texture": "#brass_casing", "uv": [ 14, 2, 16, 14 ] },
|
||||
"west": { "texture": "#brass_casing", "uv": [ 2, 0, 14, 16 ], "rotation": 90 },
|
||||
"up": { "texture": "#entity_detector_off", "uv": [ 0, 0, 2, 16 ] },
|
||||
"down": { "texture": "#entity_detector_off", "uv": [ 0, 0, 2, 16 ] }
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Center",
|
||||
"from": [ 2, 2, 1 ],
|
||||
"to": [ 14, 14, 17 ],
|
||||
"faces": {
|
||||
"north": { "texture": "#brass_casing", "uv": [ 2, 2, 14, 14 ] },
|
||||
"east": { "texture": "#entity_detector_front", "uv": [ 0, 2, 16, 14 ] },
|
||||
"south": { "texture": "#entity_detector_front", "uv": [ 2, 2, 14, 14 ] },
|
||||
"west": { "texture": "#entity_detector_front", "uv": [ 0, 2, 16, 14 ] },
|
||||
"up": { "texture": "#brass_casing", "uv": [ 0, 0, 12, 16 ] },
|
||||
"down": { "texture": "#brass_casing", "uv": [ 0, 0, 12, 16 ] }
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,80 @@
|
|||
{
|
||||
"credit": "Made with Blockbench",
|
||||
"parent": "block/block",
|
||||
"textures": {
|
||||
"5": "create:block/brass_casing_inner",
|
||||
"8": "create:block/content_observer",
|
||||
"9": "create:block/content_observer_inner",
|
||||
"10": "create:block/filtered_detector_top",
|
||||
"brass_casing": "create:block/brass_casing",
|
||||
"particle": "create:block/brass_casing_side",
|
||||
"1_brass_casing": "create:block/brass_casing_side",
|
||||
"end": "create:block/filtered_detector_front"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"name": "Bottom Plate",
|
||||
"from": [0, 0, 0],
|
||||
"to": [16, 6, 16],
|
||||
"faces": {
|
||||
"north": {"uv": [0, 10, 16, 16], "texture": "#8"},
|
||||
"east": {"uv": [0, 10, 16, 16], "texture": "#8"},
|
||||
"south": {"uv": [0, 10, 16, 16], "texture": "#8"},
|
||||
"west": {"uv": [0, 10, 16, 16], "texture": "#8"},
|
||||
"up": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#9"},
|
||||
"down": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#brass_casing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Center",
|
||||
"from": [0.9, 2, 0.9],
|
||||
"to": [15.1, 14, 15.1],
|
||||
"faces": {
|
||||
"north": {"uv": [0, 1, 12, 15], "rotation": 90, "texture": "#5"},
|
||||
"east": {"uv": [0, 1, 12, 15], "rotation": 90, "texture": "#5"},
|
||||
"south": {"uv": [0, 1, 12, 15], "rotation": 90, "texture": "#5"},
|
||||
"west": {"uv": [0, 1, 12, 15], "rotation": 90, "texture": "#5"},
|
||||
"up": {"uv": [0, 0, 14, 14], "rotation": 90, "texture": "#5"},
|
||||
"down": {"uv": [0, 0, 14, 14], "rotation": 270, "texture": "#5"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Indicator",
|
||||
"from": [3.1, 3.1, -1.9],
|
||||
"to": [12.9, 12.9, 1.1],
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 10, 10], "texture": "#end"},
|
||||
"east": {"uv": [10, 0, 13, 10], "texture": "#end"},
|
||||
"west": {"uv": [10, 0, 13, 10], "texture": "#end"},
|
||||
"up": {"uv": [10, 0, 13, 10], "rotation": 90, "texture": "#end"},
|
||||
"down": {"uv": [10, 0, 13, 10], "rotation": 270, "texture": "#end"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Top Plate",
|
||||
"from": [0, 14, 0],
|
||||
"to": [16, 16, 16],
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 16, 2], "texture": "#1_brass_casing"},
|
||||
"east": {"uv": [0, 0, 16, 2], "texture": "#1_brass_casing"},
|
||||
"south": {"uv": [0, 0, 16, 2], "texture": "#1_brass_casing"},
|
||||
"west": {"uv": [0, 0, 16, 2], "texture": "#1_brass_casing"},
|
||||
"up": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#10"},
|
||||
"down": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#brass_casing"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
"gui": {
|
||||
"rotation": [30, -135, 0],
|
||||
"scale": [0.625, 0.625, 0.625]
|
||||
}
|
||||
},
|
||||
"groups": [
|
||||
{
|
||||
"name": "stockpile_switch",
|
||||
"origin": [8, 8, 8],
|
||||
"children": [0, 1, 2, 3]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"parent": "create:block/content_observer/block",
|
||||
"textures": {
|
||||
"8": "create:block/content_observer_powered",
|
||||
"9": "create:block/content_observer_inner_powered"
|
||||
}
|
||||
}
|
|
@ -4,10 +4,11 @@
|
|||
"textures": {
|
||||
"5": "create:block/brass_casing_inner",
|
||||
"6": "create:block/brass_casing",
|
||||
"7": "create:block/filtered_detector_top",
|
||||
"indicator": "create:block/indicator/0",
|
||||
"particle": "create:block/brass_casing_side",
|
||||
"brass_casing": "create:block/brass_casing_side",
|
||||
"end": "create:block/stockpile_switch_end"
|
||||
"end": "create:block/filtered_detector_front"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
|
@ -32,16 +33,16 @@
|
|||
"east": {"uv": [0, 0, 16, 2], "texture": "#brass_casing"},
|
||||
"south": {"uv": [0, 0, 16, 2], "texture": "#brass_casing"},
|
||||
"west": {"uv": [0, 0, 16, 2], "texture": "#brass_casing"},
|
||||
"up": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#6"},
|
||||
"up": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#7"},
|
||||
"down": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#6"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Center",
|
||||
"from": [1, 2, 1],
|
||||
"to": [15, 14, 15],
|
||||
"from": [0.9, 2, 0.9],
|
||||
"to": [15.1, 14, 15.1],
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 14, 12], "texture": "#5"},
|
||||
"north": {"uv": [0, 1, 12, 15], "rotation": 90, "texture": "#5"},
|
||||
"east": {"uv": [0, 1, 12, 15], "rotation": 90, "texture": "#5"},
|
||||
"south": {"uv": [0, 1, 12, 15], "rotation": 90, "texture": "#5"},
|
||||
"west": {"uv": [0, 1, 12, 15], "rotation": 90, "texture": "#5"},
|
||||
|
|
Before Width: | Height: | Size: 492 B |
Before Width: | Height: | Size: 481 B |
Before Width: | Height: | Size: 503 B |
Before Width: | Height: | Size: 533 B |
Before Width: | Height: | Size: 388 B |
Before Width: | Height: | Size: 514 B |
Before Width: | Height: | Size: 536 B |
Before Width: | Height: | Size: 534 B |
Before Width: | Height: | Size: 530 B |
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 315 B |
After Width: | Height: | Size: 308 B |
After Width: | Height: | Size: 310 B |
After Width: | Height: | Size: 305 B |
Before Width: | Height: | Size: 351 B After Width: | Height: | Size: 351 B |
After Width: | Height: | Size: 453 B |