From aef451e3bfcffeab25fabdcd9200388fdb306762 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Sun, 20 Sep 2020 21:34:36 +0200 Subject: [PATCH] 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 --- src/generated/resources/.cache/cache | 48 ++-- .../create/blockstates/belt_observer.json | 244 ------------------ .../create/blockstates/content_observer.json | 34 +++ .../resources/assets/create/lang/en_ud.json | 2 +- .../resources/assets/create/lang/en_us.json | 2 +- .../assets/create/lang/unfinished/de_de.json | 4 +- .../assets/create/lang/unfinished/fr_fr.json | 4 +- .../assets/create/lang/unfinished/it_it.json | 4 +- .../assets/create/lang/unfinished/ja_jp.json | 4 +- .../assets/create/lang/unfinished/ko_kr.json | 4 +- .../assets/create/lang/unfinished/nl_nl.json | 4 +- .../assets/create/lang/unfinished/pt_br.json | 4 +- .../assets/create/lang/unfinished/ru_ru.json | 4 +- .../assets/create/lang/unfinished/zh_cn.json | 4 +- .../models/block/belt_observer/detect.json | 6 - .../block/belt_observer/detect_belt.json | 6 - .../belt_observer/detect_belt_powered.json | 6 - .../block/belt_observer/detect_powered.json | 6 - .../models/block/belt_observer/eject.json | 6 - .../block/belt_observer/eject_belt.json | 6 - .../belt_observer/eject_belt_powered.json | 6 - .../block/belt_observer/eject_powered.json | 6 - .../models/block/belt_observer/pulse.json | 6 - .../block/belt_observer/pulse_belt.json | 6 - .../belt_observer/pulse_belt_powered.json | 6 - .../block/belt_observer/pulse_powered.json | 6 - .../models/block/belt_observer/split.json | 6 - .../block/belt_observer/split_belt.json | 6 - .../belt_observer/split_belt_powered.json | 6 - .../block/belt_observer/split_powered.json | 6 - .../create/models/item/belt_observer.json | 3 - .../create/models/item/content_observer.json | 3 + ...lt_observer.json => content_observer.json} | 4 +- ...lt_observer.json => content_observer.json} | 2 +- ...lt_observer.json => content_observer.json} | 2 +- .../java/com/simibubi/create/AllBlocks.java | 27 +- .../java/com/simibubi/create/AllShapes.java | 14 +- .../com/simibubi/create/AllTileEntities.java | 13 +- .../components/actors/SeatBlock.java | 22 +- .../actors/SeatMovementBehaviour.java | 12 +- .../contraptions/relays/belt/BeltBlock.java | 6 +- .../belts/observer/BeltObserverBlock.java | 171 ------------ .../belts/observer/BeltObserverRenderer.java | 27 -- .../observer/BeltObserverTileEntity.java | 87 ------- .../block/chute/ChuteTileEntity.java | 6 +- .../block/funnel/BeltFunnelBlock.java | 2 +- .../logistics/block/funnel/FunnelBlock.java | 5 + .../block/funnel/FunnelTileEntity.java | 10 + .../mechanicalArm/ArmInteractionPoint.java | 6 + .../block/redstone/ContentObserverBlock.java | 156 +++++++++++ .../redstone/ContentObserverTileEntity.java | 108 ++++++++ .../FilteredDetectorFilterSlot.java} | 6 +- .../redstone/StockpileSwitchTileEntity.java | 67 ++--- .../create/foundation/data/BlockStateGen.java | 43 --- .../data/recipe/StandardRecipeGen.java | 2 +- .../inventory/InvManipulationBehaviour.java | 22 +- .../models/block/belt_observer/base.json | 116 --------- .../models/block/belt_observer/base_belt.json | 131 ---------- .../belt_observer/base_belt_powered.json | 6 - .../block/belt_observer/base_powered.json | 6 - .../models/block/belt_observer/item.json | 88 ------- .../models/block/content_observer/block.json | 80 ++++++ .../block/content_observer/block_powered.json | 7 + .../create/models/block/stockpile_switch.json | 11 +- .../textures/block/belt_observer_detect.png | Bin 492 -> 0 bytes .../block/belt_observer_detect_powered.png | Bin 481 -> 0 bytes .../textures/block/belt_observer_eject.png | Bin 503 -> 0 bytes .../block/belt_observer_eject_powered.png | Bin 533 -> 0 bytes .../textures/block/belt_observer_front.png | Bin 388 -> 0 bytes .../textures/block/belt_observer_pulse.png | Bin 514 -> 0 bytes .../block/belt_observer_pulse_powered.png | Bin 536 -> 0 bytes .../textures/block/belt_observer_split.png | Bin 534 -> 0 bytes .../block/belt_observer_split_powered.png | Bin 530 -> 0 bytes .../assets/create/textures/block/chute.png | Bin 8002 -> 1564 bytes .../textures/block/content_observer.png | Bin 0 -> 315 bytes .../textures/block/content_observer_inner.png | Bin 0 -> 308 bytes .../block/content_observer_inner_powered.png | Bin 0 -> 310 bytes .../block/content_observer_powered.png | Bin 0 -> 305 bytes ...ch_end.png => filtered_detector_front.png} | Bin .../textures/block/filtered_detector_top.png | Bin 0 -> 453 bytes 80 files changed, 545 insertions(+), 1188 deletions(-) delete mode 100644 src/generated/resources/assets/create/blockstates/belt_observer.json create mode 100644 src/generated/resources/assets/create/blockstates/content_observer.json delete mode 100644 src/generated/resources/assets/create/models/block/belt_observer/detect.json delete mode 100644 src/generated/resources/assets/create/models/block/belt_observer/detect_belt.json delete mode 100644 src/generated/resources/assets/create/models/block/belt_observer/detect_belt_powered.json delete mode 100644 src/generated/resources/assets/create/models/block/belt_observer/detect_powered.json delete mode 100644 src/generated/resources/assets/create/models/block/belt_observer/eject.json delete mode 100644 src/generated/resources/assets/create/models/block/belt_observer/eject_belt.json delete mode 100644 src/generated/resources/assets/create/models/block/belt_observer/eject_belt_powered.json delete mode 100644 src/generated/resources/assets/create/models/block/belt_observer/eject_powered.json delete mode 100644 src/generated/resources/assets/create/models/block/belt_observer/pulse.json delete mode 100644 src/generated/resources/assets/create/models/block/belt_observer/pulse_belt.json delete mode 100644 src/generated/resources/assets/create/models/block/belt_observer/pulse_belt_powered.json delete mode 100644 src/generated/resources/assets/create/models/block/belt_observer/pulse_powered.json delete mode 100644 src/generated/resources/assets/create/models/block/belt_observer/split.json delete mode 100644 src/generated/resources/assets/create/models/block/belt_observer/split_belt.json delete mode 100644 src/generated/resources/assets/create/models/block/belt_observer/split_belt_powered.json delete mode 100644 src/generated/resources/assets/create/models/block/belt_observer/split_powered.json delete mode 100644 src/generated/resources/assets/create/models/item/belt_observer.json create mode 100644 src/generated/resources/assets/create/models/item/content_observer.json rename src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/{belt_observer.json => content_observer.json} (81%) rename src/generated/resources/data/create/loot_tables/blocks/{belt_observer.json => content_observer.json} (85%) rename src/generated/resources/data/create/recipes/crafting/logistics/{belt_observer.json => content_observer.json} (89%) delete mode 100644 src/main/java/com/simibubi/create/content/logistics/block/belts/observer/BeltObserverBlock.java delete mode 100644 src/main/java/com/simibubi/create/content/logistics/block/belts/observer/BeltObserverRenderer.java delete mode 100644 src/main/java/com/simibubi/create/content/logistics/block/belts/observer/BeltObserverTileEntity.java create mode 100644 src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverBlock.java create mode 100644 src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverTileEntity.java rename src/main/java/com/simibubi/create/content/logistics/block/{belts/observer/BeltObserverFilterSlot.java => redstone/FilteredDetectorFilterSlot.java} (80%) delete mode 100644 src/main/resources/assets/create/models/block/belt_observer/base.json delete mode 100644 src/main/resources/assets/create/models/block/belt_observer/base_belt.json delete mode 100644 src/main/resources/assets/create/models/block/belt_observer/base_belt_powered.json delete mode 100644 src/main/resources/assets/create/models/block/belt_observer/base_powered.json delete mode 100644 src/main/resources/assets/create/models/block/belt_observer/item.json create mode 100644 src/main/resources/assets/create/models/block/content_observer/block.json create mode 100644 src/main/resources/assets/create/models/block/content_observer/block_powered.json delete mode 100644 src/main/resources/assets/create/textures/block/belt_observer_detect.png delete mode 100644 src/main/resources/assets/create/textures/block/belt_observer_detect_powered.png delete mode 100644 src/main/resources/assets/create/textures/block/belt_observer_eject.png delete mode 100644 src/main/resources/assets/create/textures/block/belt_observer_eject_powered.png delete mode 100644 src/main/resources/assets/create/textures/block/belt_observer_front.png delete mode 100644 src/main/resources/assets/create/textures/block/belt_observer_pulse.png delete mode 100644 src/main/resources/assets/create/textures/block/belt_observer_pulse_powered.png delete mode 100644 src/main/resources/assets/create/textures/block/belt_observer_split.png delete mode 100644 src/main/resources/assets/create/textures/block/belt_observer_split_powered.png create mode 100644 src/main/resources/assets/create/textures/block/content_observer.png create mode 100644 src/main/resources/assets/create/textures/block/content_observer_inner.png create mode 100644 src/main/resources/assets/create/textures/block/content_observer_inner_powered.png create mode 100644 src/main/resources/assets/create/textures/block/content_observer_powered.png rename src/main/resources/assets/create/textures/block/{stockpile_switch_end.png => filtered_detector_front.png} (100%) create mode 100644 src/main/resources/assets/create/textures/block/filtered_detector_top.png diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 870f56f0e..10d8136e7 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -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 diff --git a/src/generated/resources/assets/create/blockstates/belt_observer.json b/src/generated/resources/assets/create/blockstates/belt_observer.json deleted file mode 100644 index 218931245..000000000 --- a/src/generated/resources/assets/create/blockstates/belt_observer.json +++ /dev/null @@ -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 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/content_observer.json b/src/generated/resources/assets/create/blockstates/content_observer.json new file mode 100644 index 000000000..e66a1472c --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/content_observer.json @@ -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 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index 164f096ac..720fa1360 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -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", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 9475d69b2..7e02b0a84 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -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", diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index 2f46228b6..09c9e0774 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -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", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 820163344..0dbeb86da 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -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", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 299ac1c3a..2951abe01 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -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", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index 4c339d77d..0da7ed792 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -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": "銅鉱石", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index fc1468e89..d0b4cc6a4 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -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": "구리 광석", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index a120cfccd..d41a674fe 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -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", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index f1753a13b..85dbbd4b5 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -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", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index 4ea84c952..a1b2f184b 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -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", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json index de1d2d829..a71cef0e7 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -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": "铜矿石", diff --git a/src/generated/resources/assets/create/models/block/belt_observer/detect.json b/src/generated/resources/assets/create/models/block/belt_observer/detect.json deleted file mode 100644 index 2d895145a..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/detect.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base", - "textures": { - "texture": "create:block/belt_observer_detect" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_observer/detect_belt.json b/src/generated/resources/assets/create/models/block/belt_observer/detect_belt.json deleted file mode 100644 index 457f5d21d..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/detect_belt.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base_belt", - "textures": { - "texture": "create:block/belt_observer_detect" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_observer/detect_belt_powered.json b/src/generated/resources/assets/create/models/block/belt_observer/detect_belt_powered.json deleted file mode 100644 index a0b2b28d3..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/detect_belt_powered.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base_belt_powered", - "textures": { - "texture": "create:block/belt_observer_detect_powered" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_observer/detect_powered.json b/src/generated/resources/assets/create/models/block/belt_observer/detect_powered.json deleted file mode 100644 index 5e47b062d..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/detect_powered.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base_powered", - "textures": { - "texture": "create:block/belt_observer_detect_powered" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_observer/eject.json b/src/generated/resources/assets/create/models/block/belt_observer/eject.json deleted file mode 100644 index b3ca66e24..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/eject.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base", - "textures": { - "texture": "create:block/belt_observer_eject" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_observer/eject_belt.json b/src/generated/resources/assets/create/models/block/belt_observer/eject_belt.json deleted file mode 100644 index a9f7029e7..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/eject_belt.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base_belt", - "textures": { - "texture": "create:block/belt_observer_eject" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_observer/eject_belt_powered.json b/src/generated/resources/assets/create/models/block/belt_observer/eject_belt_powered.json deleted file mode 100644 index 77cc7bee9..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/eject_belt_powered.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base_belt_powered", - "textures": { - "texture": "create:block/belt_observer_eject_powered" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_observer/eject_powered.json b/src/generated/resources/assets/create/models/block/belt_observer/eject_powered.json deleted file mode 100644 index ba74df7ba..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/eject_powered.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base_powered", - "textures": { - "texture": "create:block/belt_observer_eject_powered" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_observer/pulse.json b/src/generated/resources/assets/create/models/block/belt_observer/pulse.json deleted file mode 100644 index 96053ebdd..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/pulse.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base", - "textures": { - "texture": "create:block/belt_observer_pulse" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_observer/pulse_belt.json b/src/generated/resources/assets/create/models/block/belt_observer/pulse_belt.json deleted file mode 100644 index 17c00b4d2..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/pulse_belt.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base_belt", - "textures": { - "texture": "create:block/belt_observer_pulse" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_observer/pulse_belt_powered.json b/src/generated/resources/assets/create/models/block/belt_observer/pulse_belt_powered.json deleted file mode 100644 index 5b36ec7ed..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/pulse_belt_powered.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base_belt_powered", - "textures": { - "texture": "create:block/belt_observer_pulse_powered" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_observer/pulse_powered.json b/src/generated/resources/assets/create/models/block/belt_observer/pulse_powered.json deleted file mode 100644 index 316f2a16f..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/pulse_powered.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base_powered", - "textures": { - "texture": "create:block/belt_observer_pulse_powered" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_observer/split.json b/src/generated/resources/assets/create/models/block/belt_observer/split.json deleted file mode 100644 index 2c36d0dce..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/split.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base", - "textures": { - "texture": "create:block/belt_observer_split" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_observer/split_belt.json b/src/generated/resources/assets/create/models/block/belt_observer/split_belt.json deleted file mode 100644 index d6e303816..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/split_belt.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base_belt", - "textures": { - "texture": "create:block/belt_observer_split" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_observer/split_belt_powered.json b/src/generated/resources/assets/create/models/block/belt_observer/split_belt_powered.json deleted file mode 100644 index 1ae9418ca..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/split_belt_powered.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base_belt_powered", - "textures": { - "texture": "create:block/belt_observer_split_powered" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_observer/split_powered.json b/src/generated/resources/assets/create/models/block/belt_observer/split_powered.json deleted file mode 100644 index 3b2229601..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/split_powered.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base_powered", - "textures": { - "texture": "create:block/belt_observer_split_powered" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/belt_observer.json b/src/generated/resources/assets/create/models/item/belt_observer.json deleted file mode 100644 index 84c140675..000000000 --- a/src/generated/resources/assets/create/models/item/belt_observer.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "create:block/belt_observer/item" -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/content_observer.json b/src/generated/resources/assets/create/models/item/content_observer.json new file mode 100644 index 000000000..01c7ba5ef --- /dev/null +++ b/src/generated/resources/assets/create/models/item/content_observer.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/content_observer/block" +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/belt_observer.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/content_observer.json similarity index 81% rename from src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/belt_observer.json rename to src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/content_observer.json index 9e9f647d0..84dde5a75 100644 --- a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/belt_observer.json +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/content_observer.json @@ -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" } } }, diff --git a/src/generated/resources/data/create/loot_tables/blocks/belt_observer.json b/src/generated/resources/data/create/loot_tables/blocks/content_observer.json similarity index 85% rename from src/generated/resources/data/create/loot_tables/blocks/belt_observer.json rename to src/generated/resources/data/create/loot_tables/blocks/content_observer.json index 3919e58e4..09c12c01b 100644 --- a/src/generated/resources/data/create/loot_tables/blocks/belt_observer.json +++ b/src/generated/resources/data/create/loot_tables/blocks/content_observer.json @@ -6,7 +6,7 @@ "entries": [ { "type": "minecraft:item", - "name": "create:belt_observer" + "name": "create:content_observer" } ], "conditions": [ diff --git a/src/generated/resources/data/create/recipes/crafting/logistics/belt_observer.json b/src/generated/resources/data/create/recipes/crafting/logistics/content_observer.json similarity index 89% rename from src/generated/resources/data/create/recipes/crafting/logistics/belt_observer.json rename to src/generated/resources/data/create/recipes/crafting/logistics/content_observer.json index c802d8aaa..6bc6b13f4 100644 --- a/src/generated/resources/data/create/recipes/crafting/logistics/belt_observer.json +++ b/src/generated/resources/data/create/recipes/crafting/logistics/content_observer.json @@ -19,6 +19,6 @@ } }, "result": { - "item": "create:belt_observer" + "item": "create:content_observer" } } \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index cab3ae747..fba5eac5b 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -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 BELT_OBSERVER = - REGISTRATE.block("belt_observer", BeltObserverBlock::new) + public static final BlockEntry 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 STOCKPILE_SWITCH = diff --git a/src/main/java/com/simibubi/create/AllShapes.java b/src/main/java/com/simibubi/create/AllShapes.java index 7b1739db2..096b9bb76 100644 --- a/src/main/java/com/simibubi/create/AllShapes.java +++ b/src/main/java/com/simibubi/create/AllShapes.java @@ -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), diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index 70e537b4a..2a1e145f2 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -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 STOCKPILE_SWITCH = Create.registrate() .tileEntity("stockpile_switch", StockpileSwitchTileEntity::new) .validBlocks(AllBlocks.STOCKPILE_SWITCH) - //.renderer(() -> renderer) + .renderer(() -> SmartTileEntityRenderer::new) .register(); public static final TileEntityEntry ADJUSTABLE_CRATE = Create.registrate() @@ -454,10 +453,10 @@ public class AllTileEntities { .renderer(() -> FunnelRenderer::new) .register(); - public static final TileEntityEntry BELT_OBSERVER = Create.registrate() - .tileEntity("belt_observer", BeltObserverTileEntity::new) - .validBlocks(AllBlocks.BELT_OBSERVER) - .renderer(() -> BeltObserverRenderer::new) + public static final TileEntityEntry CONTENT_OBSERVER = Create.registrate() + .tileEntity("content_observer", ContentObserverTileEntity::new) + .validBlocks(AllBlocks.CONTENT_OBSERVER) + .renderer(() -> SmartTileEntityRenderer::new) .register(); public static final TileEntityEntry ADJUSTABLE_REPEATER = Create.registrate() diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatBlock.java index 584df561a..f0211af6b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatBlock.java @@ -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; } @@ -76,7 +77,7 @@ public class SeatBlock extends Block { ISelectionContext p_220053_4_) { return AllShapes.SEAT; } - + @Override public VoxelShape getCollisionShape(BlockState p_220071_1_, IBlockReader p_220071_2_, BlockPos p_220071_3_, ISelectionContext p_220071_4_) { @@ -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; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatMovementBehaviour.java index e400628cd..00ec2db8f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatMovementBehaviour.java @@ -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 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 nearbyEntities = context.world.getEntitiesWithinAABB(Entity.class, + new AxisAlignedBB(pos).shrink(1 / 16f), SeatBlock::canBePickedUp); + if (!nearbyEntities.isEmpty()) + contraptionEntity.addSittingPassenger(nearbyEntities.get(0), index); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java index db898b03c..586082bdb 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java @@ -159,7 +159,7 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE, IWrenchable { - - public static final BooleanProperty POWERED = BlockStateProperties.POWERED; - public static final BooleanProperty BELT = BooleanProperty.create("belt"); - public static final EnumProperty 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 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 getTileEntityClass() { - return BeltObserverTileEntity.class; - } - -} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/observer/BeltObserverRenderer.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/observer/BeltObserverRenderer.java deleted file mode 100644 index 0461fd6cd..000000000 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/observer/BeltObserverRenderer.java +++ /dev/null @@ -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 { - - 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); - } - -} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/observer/BeltObserverTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/observer/BeltObserverTileEntity.java deleted file mode 100644 index 969fc6ab2..000000000 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/observer/BeltObserverTileEntity.java +++ /dev/null @@ -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 type) { - super(type); - setLazyTickRate(20); - } - - @Override - public void addBehaviours(List 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); - } - -} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java index e7f2987fb..fe71af5cf 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java @@ -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; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelBlock.java index 570eef9bf..b6f949a5a 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelBlock.java @@ -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; } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlock.java index 4ad08eea1..a9a41f804 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlock.java @@ -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); } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java index c606f8bf4..979b10795 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java @@ -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); } @@ -253,5 +259,9 @@ public class FunnelTileEntity extends SmartTileEntity { public double getMaxRenderDistanceSquared() { return hasFlap() ? super.getMaxRenderDistanceSquared() : 64; } + + public void onTransfer(ItemStack stack) { + AllBlocks.CONTENT_OBSERVER.get().onFunnelTransfer(world, pos, stack); + } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPoint.java b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPoint.java index 0a8b96359..338ee843f 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPoint.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPoint.java @@ -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); } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverBlock.java new file mode 100644 index 000000000..689d48caf --- /dev/null +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverBlock.java @@ -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, 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 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 getTileEntityClass() { + return ContentObserverTileEntity.class; + } + +} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverTileEntity.java new file mode 100644 index 000000000..83759928b --- /dev/null +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverTileEntity.java @@ -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 type) { + super(type); + setLazyTickRate(20); + } + + @Override + public void addBehaviours(List 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); + } + +} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/observer/BeltObserverFilterSlot.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/FilteredDetectorFilterSlot.java similarity index 80% rename from src/main/java/com/simibubi/create/content/logistics/block/belts/observer/BeltObserverFilterSlot.java rename to src/main/java/com/simibubi/create/content/logistics/block/redstone/FilteredDetectorFilterSlot.java index 01ee5b54c..461c286f8 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/observer/BeltObserverFilterSlot.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/FilteredDetectorFilterSlot.java @@ -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) { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchTileEntity.java index af7e59e8d..863070eb1 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchTileEntity.java @@ -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 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) { - world.setBlockState(pos, getBlockState().with(StockpileSwitchBlock.INDICATOR, 0), 3); - currentLevel = -1; - powered = false; - world.notifyNeighbors(pos, getBlockState().getBlock()); - } + 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,7 +80,9 @@ public class StockpileSwitchTileEntity extends SmartTileEntity { continue; totalSpace += 1; - occupied += count * (1f / space); + + if (filtering.test(stackInSlot)) + occupied += count * (1f / space); } currentLevel = (float) occupied / totalSpace; @@ -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 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); } - } diff --git a/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java b/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java index 6cf438249..604161694 100644 --- a/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java @@ -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, RegistrateBlockstateProvider> beltObserver() { - return (c, p) -> { - - Map> models = new IdentityHashMap<>(); - Map 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 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 NonNullBiConsumer, RegistrateBlockstateProvider> linearChassis() { return (c, p) -> { ResourceLocation side = p.modLoc("block/" + c.getName() + "_side"); diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java index cd8f69208..4f8716c89 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java @@ -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()) diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/InvManipulationBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/InvManipulationBehaviour.java index e8ca01bb1..0a23edb51 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/InvManipulationBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/InvManipulationBehaviour.java @@ -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,17 +35,18 @@ public class InvManipulationBehaviour extends TileEntityBehaviour { protected InterfaceProvider target; protected LazyOptional targetCapability; protected boolean simulateNext; + protected boolean bypassSided; private BehaviourType behaviourType; public static InvManipulationBehaviour forExtraction(SmartTileEntity te, InterfaceProvider target) { return new InvManipulationBehaviour(EXTRACT, te, target); } - + public static InvManipulationBehaviour forInsertion(SmartTileEntity te, InterfaceProvider target) { return new InvManipulationBehaviour(INSERT, te, target); } - + public InvManipulationBehaviour(SmartTileEntity te, InterfaceProvider target) { this(TYPE, te, target); } @@ -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); } diff --git a/src/main/resources/assets/create/models/block/belt_observer/base.json b/src/main/resources/assets/create/models/block/belt_observer/base.json deleted file mode 100644 index 32c14f1ba..000000000 --- a/src/main/resources/assets/create/models/block/belt_observer/base.json +++ /dev/null @@ -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"} - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/belt_observer/base_belt.json b/src/main/resources/assets/create/models/block/belt_observer/base_belt.json deleted file mode 100644 index baed95503..000000000 --- a/src/main/resources/assets/create/models/block/belt_observer/base_belt.json +++ /dev/null @@ -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"} - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/belt_observer/base_belt_powered.json b/src/main/resources/assets/create/models/block/belt_observer/base_belt_powered.json deleted file mode 100644 index a81d7492c..000000000 --- a/src/main/resources/assets/create/models/block/belt_observer/base_belt_powered.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base_belt", - "textures": { - "3": "create:block/extractor_powered" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/belt_observer/base_powered.json b/src/main/resources/assets/create/models/block/belt_observer/base_powered.json deleted file mode 100644 index 17177a585..000000000 --- a/src/main/resources/assets/create/models/block/belt_observer/base_powered.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base", - "textures": { - "extractor": "create:block/extractor_powered" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/belt_observer/item.json b/src/main/resources/assets/create/models/block/belt_observer/item.json deleted file mode 100644 index c00967dc9..000000000 --- a/src/main/resources/assets/create/models/block/belt_observer/item.json +++ /dev/null @@ -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 ] } - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/content_observer/block.json b/src/main/resources/assets/create/models/block/content_observer/block.json new file mode 100644 index 000000000..4e3ce8d38 --- /dev/null +++ b/src/main/resources/assets/create/models/block/content_observer/block.json @@ -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] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/content_observer/block_powered.json b/src/main/resources/assets/create/models/block/content_observer/block_powered.json new file mode 100644 index 000000000..7ae7927b3 --- /dev/null +++ b/src/main/resources/assets/create/models/block/content_observer/block_powered.json @@ -0,0 +1,7 @@ +{ + "parent": "create:block/content_observer/block", + "textures": { + "8": "create:block/content_observer_powered", + "9": "create:block/content_observer_inner_powered" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/stockpile_switch.json b/src/main/resources/assets/create/models/block/stockpile_switch.json index cfe456960..9439bb80c 100644 --- a/src/main/resources/assets/create/models/block/stockpile_switch.json +++ b/src/main/resources/assets/create/models/block/stockpile_switch.json @@ -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"}, diff --git a/src/main/resources/assets/create/textures/block/belt_observer_detect.png b/src/main/resources/assets/create/textures/block/belt_observer_detect.png deleted file mode 100644 index 4faaaaf6e45fa91531c25adf08c92cd4792e6984..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 492 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!TZf$0OWV41rHT`eEFkMU0KW-vD#sEwP zGfa|cEHjd+h*aGJ+9N%BW1#^S{ss=?e#{l28U??|ZSc@!ZnzQt1EMcBYvyxlt9;4;0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!T@PAyoQ(W{#lgT_1Pn;41 zBK0sFPEPOKo|DkS&2h{$V=Rn3a2;7{z;%C=61_YQp$-N+;K}>=+h?urYNcgTt^=m2 z1k>foRx-;{Wurip&(bKHLj;0@p^YyxQ#$LdKy#vDzvJh{?d#}+v2(`W7~B1WpAXxq zWxNsixV>~50}gbt-!`%=w=`1d@mXHb^=a1&_~%4!v{v9c)E|w?l`SCVO1H6fZ?i!K zi+mwfK28)B1U9;m+Cpnn2u|)`1~)~o6G~$R=YfD*#t4MSv|Ve4ZVp5EgK4HQrfp9B zUK2ye2aW@gDC-hCI3K8fT6BO_WsRe<{cm7klqzww-9&oS09*!FCdmwrtK=Aw(2Zj~ z(qlIc7U1A*;4;3C`$S;p;1zj3{d7P|hPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!TBF_Dw+m zCR^Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!TDK8P1Dg@UK*MWroiYnx3r zo5U~O5_8j!VRq)*o!R+ex0m}i1w>S^a?n}$LP2MFM=++Iu_!wR>+wTSQmw9^BDX>Nge3R6)#F7tQ{+ z9Jv8xEYv}F91%5%5c5SO241&h4ki*Z@zlf*lO9k#>aLa-ToHaa!dD1MP{<`+)hm{E z@jpIcXNPMj20s3ch1`5~PG`AKh@OdFh~9TA=stbJT8(8`MKcdd$KV<|$vFdDXr!OJ zjr9@^{kv^)SB7axfaZbpYTg4Vj9E`3JNqo~0FzDj;K>M+2CxtaTx`Sj6$DFwt+l5@ zjMYGTT|EQ|Ai7+11<{6PFrr+Z{q}$=VPt#IBpBE!$sVtdwe=_5DYJ_)yE(^N{|%xa XT88|{_fyBX00000NkvXXu0mjf;!xmJ diff --git a/src/main/resources/assets/create/textures/block/belt_observer_front.png b/src/main/resources/assets/create/textures/block/belt_observer_front.png deleted file mode 100644 index d5f96f35569754e65bbbd924cd359d1b170dffa6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 388 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 UPsc0sZvX%Q07*qoM6N<$g3kr()c^nh diff --git a/src/main/resources/assets/create/textures/block/chute.png b/src/main/resources/assets/create/textures/block/chute.png index dbc6085e0c745859090913f732dc2f086ff4daaf..03bedacdcccd66bdfc09a7660b556b95ffb57492 100644 GIT binary patch delta 1548 zcmV+n2J`vCKAa4YBYyw^b5ch_0Itp)=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vG? zA^-p`A_1!6-I4$R1+hs)K~z{rotMu~V^tK#Z%bQBf6yre5==~7F@{Wl2n?f9@W+N( zu_4A}qRA|be*r6Zt_^P7>CT15g)YIEI1v&OVo*#bW+ao0iGOj>p#stlPzpTn=d|DF z>tluxzsc>r@4WlY`QCHSIrla(J3AY6c6Pe6von`Yr`_r4sRJDy9ZwuHFPTib&CN}F z-q_ek+?<&SGF}JBb#+~W_jd%3N^}0JaICkGJf0syNba;5!6$%AYoXh2m z2&6PdPS5k;;D4a2dj(OT?1hn$=GYqmQR9N%O^l6sT^SoE`SGi;2aEv72*}jHg9i_6 z%*tuVP`0wVYVWm5AQC{H0jq0kMj9j=jfN@Is#tk9Mhz!2CE+me1##V{bIR z4T9v%4LyKcqefDxlvj9QV~Frf(|gFqNk|!pt~BZah=0j5iUD9AsMTurfRU4v6B`2p zFD?@iAH3EBl%dqd5kpZAh?wSu9)JKrM$a~|T7hS6je5vJLeBtY1XifLWi0LiK(;V9 z^ne142BNEFd*YDsqrWa{>-%OMIrPN&zEb(aGN>&JwBIsB z0g4(2%m>HE$Ds`5^Eq!QV@9*t&bA&;rcxc&ip8Ak@9%4U^@J<{j~_oa!(@YELhqFY zCq6)#^WN>-CNGtWHm6kTc6qO}x2Np7i^Z@n`G1V+YHa~Tg|;lv$~DG-JR*n)B#|r1 z6AAOEEBdX>WHRPG#TD<6K};kBBQQETY9v@ON|DhR@9yq44ejsS2Yr1__pztQ6>uo0 zi3qDK6tZS8o$fFhr0_+7z= z$BhNBCz$eNPyIF`qfThf;?k1o3zZHI4h0{4`L%m%^s33e*!VSIyz%I-;LVp`^T+Qm zZ3N;N8=DNsjEpxZFX|X)8xH+eH9Qf5I)4ZPx4yo1p1`}GeCFn-$3hv#=`SL{eS$5C zW)U!%_hQ`}qpx{#Q7G1$R6XL+3Coebelr?>7lqPNLCb|j0sZIBjs-D2vgkbBG5#aq ztJTwR(K}X-qUfcjTrQgtdKz*X^P-m;zD=lvQb^wU_|vv60BpnCZ_N18xohlILVtx@ zw{8U}1NZOW4>RZJ=*W7(jQOp=n?plGrVCk8C6pX~wp1|J(}a5u_v~G~ghqifRwv`z z+uN>Mt+usFrDA$582x-9sS*l)|EK0YT>deLrr`6>TxpHkOK2R@f$^t7BosFwDP!ew z(LBHwy#Li==mI>zyQc+W!IxM-kblM9{vptFbcOiWL`ZW>alrh;^)dH!lYTWWgN+zrOZZv@o+maY(Zj@H}T+mf6IM>)YPvXE%|Uk7w?j9#e)o&CgzPP1qs z;{PIxfiMSC6x<5|m5}=fC4ZWDu>01?wQKI@yLUt5K(|?X83xSdIE{jpOiWDJn84)} zR93KByoe0oB|HHEU|B#Q#=Q{t03>wpCnor3%a~g=1T3dpM)3%%Q@RPPp5vJy6cXV% y?hDHQInQ+*16C(cpmY?gRzOsMWTVk={{l*RuH90vaA^Pl002ovP6b4+LSTaC>H6;g literal 8002 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 EU%mq*w*UYD diff --git a/src/main/resources/assets/create/textures/block/content_observer.png b/src/main/resources/assets/create/textures/block/content_observer.png new file mode 100644 index 0000000000000000000000000000000000000000..fae25ed398e5b6521869477025f69902d09cb543 GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sEXgD|57Yp@DX@Pem{V~B-+@}K|z?U_{@IK3wGy75Zzuo?KB zGXJZueCnjZ%5MhEECCN}nU$Lr4%g55lD=TpdWSjJb54JF^0l0;OIYafF0tMJ6((Qv zwK{x&SL6X}lGC~h#t`OWM&XVhAHEnfTL%a&k$mDZBe?LQ!d8RYo`YgR|NsB_b^OC? z{Uh4(^?%te8yq-$j4RcV!6$CQtb2I!_4|?%*SFsI`~TNt@#e;jMgcP#A3pBpPmmJ-@$s$s zjDKJLvd>5>NJ#m^Z^XhO;c-yGR$;HtBY|QMHihu!J!e>o3_6^(e*AjPZxJ(tr9mc- z&#XhElR;#KkN!fLphgLK@x$B-wlaqrV#FI5N@EzjZa-m~5VtJfp(#ec!AR7?xUopo zl3_}B;3i`Y-v%a85xpH56E-`pYfE|lo`*q6t1aT(`N=v!PceA9`njxgN@xNAfBbDw literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/content_observer_inner_powered.png b/src/main/resources/assets/create/textures/block/content_observer_inner_powered.png new file mode 100644 index 0000000000000000000000000000000000000000..b99b2d00993b50a4176804a58b687b449d589c9d GIT binary patch literal 310 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1en@U*9kV~B-+@|-F8zvA7dOn&HkR*}t)jg5_0 zp^oK95lcp!n01@_`u)ZR>#{fg=6}?D;JW;NiGBZmF+Y9CzQ4}Ms6i)f#<2q*>iySC z-w{Y+Jn=NsVXx1h0LG#QTLI(7KW7delUaN?;6PyutchF=x{OPX)GgwE(q8&k~rq58c?2F=N*E z`Tv`Yg}utm*u9$muog+_Nr`-CZ@j@gXYPJu28J4w;JnD=GM|CoV(@hJb6Mw<&;$U& Cq;GNn literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/content_observer_powered.png b/src/main/resources/assets/create/textures/block/content_observer_powered.png new file mode 100644 index 0000000000000000000000000000000000000000..e0d087040c676897b038d50f826eddcc6a15b7a6 GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sEXgD|57Yp@DX@R+BIV~B-+@}K|z?U_{@IK3wGy75Zzuo?KB zGXJZueCp(fMb8A9Edw4X3Y>ntFrVS0qr$h0jmZ_Cepxdg(-!82TKUYY?5 zR|m79rd|S*p!~c#w(MukT8EZOy3{iz@hh~wOy=1(;n)A?*X`Tl>lNdE{(5abqm41o zEKGx&DdAJooE)C_`~N2;T$%ES@pVdiV$y@8WH#@*-(ROcd_KQE!Hna;6Ng6%4La<7 vtQxabKD^adW)}Zm&vr~nK9_4zVgTe~DWM4f=;Ll_ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/stockpile_switch_end.png b/src/main/resources/assets/create/textures/block/filtered_detector_front.png similarity index 100% rename from src/main/resources/assets/create/textures/block/stockpile_switch_end.png rename to src/main/resources/assets/create/textures/block/filtered_detector_front.png diff --git a/src/main/resources/assets/create/textures/block/filtered_detector_top.png b/src/main/resources/assets/create/textures/block/filtered_detector_top.png new file mode 100644 index 0000000000000000000000000000000000000000..0a037bd0d81568933dd8729b38cc429b17d0637e GIT binary patch literal 453 zcmV;$0XqJPP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGizW@LZzX3P}QzQTY0a{5!K~y+Tjgiet z!$1^;XY#8FwcQj2SH(?13WBfUvJc?SeNk}jL-`yo+>0xJDl`owX{TxR8*ZFrQN%;I zoO|cax%W);{dAJ3jZ!K;42WH;!N-GEQYW4i| zX>X?o(aqf>BnWlA`QA&w?e&D{Ny5Rf7pGAOA0Anf!~rBP>V6tQs23|k^hy;9+lwUf ziKgC3N^>&-nC))!djJUo&ur~7wx~6vF!l{ROydC-1@>}jwnRbXYgSET-wDy&onZCY z0fM{~fz%xu4?KmeLFsK#$v4l}@-EuxNeyv;3ly(jW9|g)}0_8+$&iR?#I1;mAFJ{G)ze8mcO>BjM=qs vtskc2!D+9_{zO^mEUWbF>bxoZ2TJ__?Xk2Qc!(!j00000NkvXXu0mjfFIT>< literal 0 HcmV?d00001