From 4d4a959cfa85c24dcb269daf58071eb00c9ab745 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Fri, 23 Sep 2022 18:40:15 +0200 Subject: [PATCH] Mixing up a Storm - Reduced tps impact of basin recipe lookups noticeable in larger modpacks - Fixed Brass tunnels distributing back into the side items get inserted from - Fixed Brass tunnels distributing into sides blocked by an inserting funnel - Cargo Conditions in schedules now match any cargo if no filter is specified --- src/generated/resources/.cache/cache | 34 +++++----- .../resources/assets/create/lang/en_us.json | 2 + .../assets/create/lang/unfinished/de_de.json | 4 +- .../assets/create/lang/unfinished/es_cl.json | 4 +- .../assets/create/lang/unfinished/es_es.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/pl_pl.json | 4 +- .../assets/create/lang/unfinished/pt_br.json | 4 +- .../assets/create/lang/unfinished/pt_pt.json | 4 +- .../assets/create/lang/unfinished/ro_ro.json | 4 +- .../assets/create/lang/unfinished/ru_ru.json | 4 +- .../assets/create/lang/unfinished/uk_ua.json | 4 +- .../assets/create/lang/unfinished/zh_cn.json | 4 +- .../assets/create/lang/unfinished/zh_tw.json | 4 +- .../mixer/MechanicalMixerTileEntity.java | 12 ++-- .../processing/BasinOperatingTileEntity.java | 8 ++- .../contraptions/processing/BasinRecipe.java | 2 - .../processing/BasinTileEntity.java | 26 +++++--- .../relays/belt/BeltTileEntity.java | 2 +- .../BeltTunnelInteractionHandler.java | 2 +- .../block/belts/tunnel/BrassTunnelBlock.java | 21 +++---- .../belts/tunnel/BrassTunnelItemHandler.java | 2 +- .../belts/tunnel/BrassTunnelTileEntity.java | 62 ++++++++++++++----- .../condition/CargoThresholdCondition.java | 2 + .../condition/FluidThresholdCondition.java | 10 ++- .../condition/ItemThresholdCondition.java | 9 ++- .../assets/create/lang/default/interface.json | 2 + 31 files changed, 169 insertions(+), 91 deletions(-) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 904975162..0b8665128 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -559,23 +559,23 @@ bf2b0310500213ff853c748c236eb5d01f61658e assets/create/blockstates/yellow_toolbo 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json f85edc574ee6de0de7693ffb031266643db6724a assets/create/lang/en_ud.json -11fd391ac3015f4dace8138ab1ec423ee822c7b4 assets/create/lang/en_us.json -da8d1341de295391fbb917b5bd82ddb16e9f96da assets/create/lang/unfinished/de_de.json -b5487949ee53302706c15051157316bb60dfa070 assets/create/lang/unfinished/es_cl.json -6df40ff1c18bfb83a33bc17e4458feeeee058bf1 assets/create/lang/unfinished/es_es.json -bca24c29adf91e0ee09db39783c59fac843acb46 assets/create/lang/unfinished/fr_fr.json -c27d2ba08da3b2a326d57c8f4e92adfc431a5b13 assets/create/lang/unfinished/it_it.json -42a6713a509ecd676e7eae6e6492da1e20e79102 assets/create/lang/unfinished/ja_jp.json -38e01a060e0e468a51b1ca4f0bcbec203837ce04 assets/create/lang/unfinished/ko_kr.json -83d812a1003fa3f25a3c28bbf54bf93f583c594a assets/create/lang/unfinished/nl_nl.json -ca5cc394354887f89ecbc609f345eeb0dc41c20f assets/create/lang/unfinished/pl_pl.json -11b3809e9c4c3c61687f7789979fdbf2332fd6a4 assets/create/lang/unfinished/pt_br.json -dd52b8df6ea92c1218e398197a1cedae066b4e0e assets/create/lang/unfinished/pt_pt.json -954a947034232204bd415e4bfb6c59a3a448b604 assets/create/lang/unfinished/ro_ro.json -46d3024cd82c9a8dc74f670a1fa19f4fade6db97 assets/create/lang/unfinished/ru_ru.json -2f084cc7b66fe4ea82f5ac3338a1245caf67c54d assets/create/lang/unfinished/uk_ua.json -82490ac29a0c35c07cde11c340634bf8b416b6a3 assets/create/lang/unfinished/zh_cn.json -426b06805f08ef3fed15f404e9637b2d7082d660 assets/create/lang/unfinished/zh_tw.json +c219c77242e645f32704201dd80e279b3759b794 assets/create/lang/en_us.json +cf37534c3f98098f42b181083fd7cc1063ac2bbb assets/create/lang/unfinished/de_de.json +83d427726fdc38ec3c5b8c3c0f6f87f49d3e5ff3 assets/create/lang/unfinished/es_cl.json +d21caeb0cbe871e38dc101c34ab89ece3cbe2127 assets/create/lang/unfinished/es_es.json +2215688baa2b0beffe0c19f71a3238df1d01b0c1 assets/create/lang/unfinished/fr_fr.json +79484f2c3eba2b40f5d82ffdc3abeb3d2e6962d2 assets/create/lang/unfinished/it_it.json +d659570c9dc89653f03cd4cc82ed50db443638d8 assets/create/lang/unfinished/ja_jp.json +03c30521d9b1bc7a6eb85d2a59a4c4676dca581e assets/create/lang/unfinished/ko_kr.json +3a56d579d022cc1b20746e9d3a1483e6fa8fb4be assets/create/lang/unfinished/nl_nl.json +d5bfeacb442236c8b075fddb41364f85c8cb7feb assets/create/lang/unfinished/pl_pl.json +0f3f51d065d896a7e3b4abd8c2801fa3e8fbd8c3 assets/create/lang/unfinished/pt_br.json +9f2ec0b2f8fa9b380c7edb56bfb806bcce621cce assets/create/lang/unfinished/pt_pt.json +1f88f0d91bdf5c68224cb65249f77272771939c9 assets/create/lang/unfinished/ro_ro.json +d815a8642f6b7de3142877bb2a0b642a4e65ad32 assets/create/lang/unfinished/ru_ru.json +ed29ef4ae8f3633533485d56f7fa8cb77b790a0a assets/create/lang/unfinished/uk_ua.json +fa36855229bf63e2c4c6c8ce07cc2a1ab3c67592 assets/create/lang/unfinished/zh_cn.json +316dae07f95fb65c984fe7c424b566eb8ddba5f9 assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 9d201a099..f29227a7a 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -1484,6 +1484,7 @@ "create.schedule.condition.threshold.equal": "exactly", "create.schedule.condition.threshold.x_units_of_item": "%1$s %2$s of %3$s", "create.schedule.condition.threshold.matching_content": "Matching Content", + "create.schedule.condition.threshold.anything": "Anything", "create.schedule.condition.threshold.item_measure": "Item Measure", "create.schedule.condition.threshold.items": "Items", "create.schedule.condition.threshold.stacks": "Stacks", @@ -1491,6 +1492,7 @@ "create.schedule.condition.threshold.status": "Cargo: %1$s/%2$s %3$s", "create.schedule.condition.threshold.place_item": "Reference Item", "create.schedule.condition.threshold.place_item_2": "Filters can be used", + "create.schedule.condition.threshold.place_item_3": "Leave empty to match any", "create.schedule.condition.fluid_threshold": "Fluid Cargo Condition", "create.schedule.condition.item_threshold": "Item Cargo Condition", "create.schedule.condition.redstone_link": "Redstone Link", 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 e6014c2a4..ec0ab8c0d 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: 840", + "_": "Missing Localizations: 842", "_": "->------------------------] Game Elements [------------------------<-", @@ -1485,6 +1485,7 @@ "create.schedule.condition.threshold.equal": "genau", "create.schedule.condition.threshold.x_units_of_item": "%1$s %2$s %3$s", "create.schedule.condition.threshold.matching_content": "passender Inhalt", + "create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything", "create.schedule.condition.threshold.item_measure": "Maßeinheit", "create.schedule.condition.threshold.items": "Items", "create.schedule.condition.threshold.stacks": "Stacks", @@ -1492,6 +1493,7 @@ "create.schedule.condition.threshold.status": "Zugladestand: %1$s/%2$s %3$s", "create.schedule.condition.threshold.place_item": "Referenz-Item", "create.schedule.condition.threshold.place_item_2": "Filter können verwendet werden", + "create.schedule.condition.threshold.place_item_3": "UNLOCALIZED: Leave empty to match any", "create.schedule.condition.fluid_threshold": "Flüssigkeitsladestand", "create.schedule.condition.item_threshold": "Item-Ladestand", "create.schedule.condition.redstone_link": "Redstone-Link", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_cl.json b/src/generated/resources/assets/create/lang/unfinished/es_cl.json index 19a6d4e3a..b1cb4225f 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_cl.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_cl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 986", + "_": "Missing Localizations: 988", "_": "->------------------------] Game Elements [------------------------<-", @@ -1485,6 +1485,7 @@ "create.schedule.condition.threshold.equal": "UNLOCALIZED: exactly", "create.schedule.condition.threshold.x_units_of_item": "UNLOCALIZED: %1$s %2$s of %3$s", "create.schedule.condition.threshold.matching_content": "UNLOCALIZED: Matching Content", + "create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything", "create.schedule.condition.threshold.item_measure": "UNLOCALIZED: Item Measure", "create.schedule.condition.threshold.items": "UNLOCALIZED: Items", "create.schedule.condition.threshold.stacks": "UNLOCALIZED: Stacks", @@ -1492,6 +1493,7 @@ "create.schedule.condition.threshold.status": "UNLOCALIZED: Cargo: %1$s/%2$s %3$s", "create.schedule.condition.threshold.place_item": "UNLOCALIZED: Reference Item", "create.schedule.condition.threshold.place_item_2": "UNLOCALIZED: Filters can be used", + "create.schedule.condition.threshold.place_item_3": "UNLOCALIZED: Leave empty to match any", "create.schedule.condition.fluid_threshold": "UNLOCALIZED: Fluid Cargo Condition", "create.schedule.condition.item_threshold": "UNLOCALIZED: Item Cargo Condition", "create.schedule.condition.redstone_link": "UNLOCALIZED: Redstone Link", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_es.json b/src/generated/resources/assets/create/lang/unfinished/es_es.json index 408d3722f..9866e0ed4 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_es.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_es.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 6", + "_": "Missing Localizations: 8", "_": "->------------------------] Game Elements [------------------------<-", @@ -1485,6 +1485,7 @@ "create.schedule.condition.threshold.equal": "exactamente", "create.schedule.condition.threshold.x_units_of_item": "%1$s %2$s de %3$s", "create.schedule.condition.threshold.matching_content": "Contenido coincidente", + "create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything", "create.schedule.condition.threshold.item_measure": "Medición de objetos", "create.schedule.condition.threshold.items": "Objetos", "create.schedule.condition.threshold.stacks": "Pilas de objetos", @@ -1492,6 +1493,7 @@ "create.schedule.condition.threshold.status": "Cargamento: %1$s/%2$s %3$s", "create.schedule.condition.threshold.place_item": "Objeto de referencia", "create.schedule.condition.threshold.place_item_2": "Los filtros se pueden usar", + "create.schedule.condition.threshold.place_item_3": "UNLOCALIZED: Leave empty to match any", "create.schedule.condition.fluid_threshold": "Condición de cargamento de fluidos", "create.schedule.condition.item_threshold": "Condición de cargamento de objetos", "create.schedule.condition.redstone_link": "Enlace de redstone", 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 968ed3cff..a40d4bfce 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: 2137", + "_": "Missing Localizations: 2139", "_": "->------------------------] Game Elements [------------------------<-", @@ -1485,6 +1485,7 @@ "create.schedule.condition.threshold.equal": "UNLOCALIZED: exactly", "create.schedule.condition.threshold.x_units_of_item": "UNLOCALIZED: %1$s %2$s of %3$s", "create.schedule.condition.threshold.matching_content": "UNLOCALIZED: Matching Content", + "create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything", "create.schedule.condition.threshold.item_measure": "UNLOCALIZED: Item Measure", "create.schedule.condition.threshold.items": "UNLOCALIZED: Items", "create.schedule.condition.threshold.stacks": "UNLOCALIZED: Stacks", @@ -1492,6 +1493,7 @@ "create.schedule.condition.threshold.status": "UNLOCALIZED: Cargo: %1$s/%2$s %3$s", "create.schedule.condition.threshold.place_item": "UNLOCALIZED: Reference Item", "create.schedule.condition.threshold.place_item_2": "UNLOCALIZED: Filters can be used", + "create.schedule.condition.threshold.place_item_3": "UNLOCALIZED: Leave empty to match any", "create.schedule.condition.fluid_threshold": "UNLOCALIZED: Fluid Cargo Condition", "create.schedule.condition.item_threshold": "UNLOCALIZED: Item Cargo Condition", "create.schedule.condition.redstone_link": "UNLOCALIZED: Redstone Link", 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 615437ce1..39c5e5ac9 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: 0", + "_": "Missing Localizations: 2", "_": "->------------------------] Game Elements [------------------------<-", @@ -1485,6 +1485,7 @@ "create.schedule.condition.threshold.equal": "esattamente", "create.schedule.condition.threshold.x_units_of_item": "%1$s %2$s di %3$s", "create.schedule.condition.threshold.matching_content": "Contenuto corrispondente", + "create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything", "create.schedule.condition.threshold.item_measure": "Misura", "create.schedule.condition.threshold.items": "Oggetti", "create.schedule.condition.threshold.stacks": "Stack", @@ -1492,6 +1493,7 @@ "create.schedule.condition.threshold.status": "Carico: %1$s/%2$s %3$s", "create.schedule.condition.threshold.place_item": "Oggetto di riferimento", "create.schedule.condition.threshold.place_item_2": "È permesso usare Filtri", + "create.schedule.condition.threshold.place_item_3": "UNLOCALIZED: Leave empty to match any", "create.schedule.condition.fluid_threshold": "Carico di fluidi", "create.schedule.condition.item_threshold": "Carico di oggetti", "create.schedule.condition.redstone_link": "Connessione redstone", 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 ab56d3d1d..29408f90f 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: 2", + "_": "Missing Localizations: 4", "_": "->------------------------] Game Elements [------------------------<-", @@ -1485,6 +1485,7 @@ "create.schedule.condition.threshold.equal": "ぴったり", "create.schedule.condition.threshold.x_units_of_item": "%1$s %2$sの%3$s", "create.schedule.condition.threshold.matching_content": "一致する貨物", + "create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything", "create.schedule.condition.threshold.item_measure": "アイテム単位", "create.schedule.condition.threshold.items": "個", "create.schedule.condition.threshold.stacks": "スタック", @@ -1492,6 +1493,7 @@ "create.schedule.condition.threshold.status": "貨物: %1$s/%2$s%3$s", "create.schedule.condition.threshold.place_item": "参照アイテム", "create.schedule.condition.threshold.place_item_2": "フィルターも使えます", + "create.schedule.condition.threshold.place_item_3": "UNLOCALIZED: Leave empty to match any", "create.schedule.condition.fluid_threshold": "液体貨物の状態", "create.schedule.condition.item_threshold": "アイテム貨物の状態", "create.schedule.condition.redstone_link": "レッドストーンリンク", 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 448da4f33..92e403ed6 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: 6", + "_": "Missing Localizations: 8", "_": "->------------------------] Game Elements [------------------------<-", @@ -1485,6 +1485,7 @@ "create.schedule.condition.threshold.equal": "다음과 동일하면", "create.schedule.condition.threshold.x_units_of_item": "%3$s %1$s %2$s", "create.schedule.condition.threshold.matching_content": "내용물 일치", + "create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything", "create.schedule.condition.threshold.item_measure": "아이템 단위", "create.schedule.condition.threshold.items": "개", "create.schedule.condition.threshold.stacks": "스택", @@ -1492,6 +1493,7 @@ "create.schedule.condition.threshold.status": "저장소: %1$s/%2$s %3$s", "create.schedule.condition.threshold.place_item": "기준 아이템", "create.schedule.condition.threshold.place_item_2": "필터를 사용할 수 있음", + "create.schedule.condition.threshold.place_item_3": "UNLOCALIZED: Leave empty to match any", "create.schedule.condition.fluid_threshold": "액체 저장소 조건", "create.schedule.condition.item_threshold": "아이템 저장소 조건", "create.schedule.condition.redstone_link": "레드스톤 링크", 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 d0da85c4b..319e3974f 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: 2485", + "_": "Missing Localizations: 2487", "_": "->------------------------] Game Elements [------------------------<-", @@ -1485,6 +1485,7 @@ "create.schedule.condition.threshold.equal": "UNLOCALIZED: exactly", "create.schedule.condition.threshold.x_units_of_item": "UNLOCALIZED: %1$s %2$s of %3$s", "create.schedule.condition.threshold.matching_content": "UNLOCALIZED: Matching Content", + "create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything", "create.schedule.condition.threshold.item_measure": "UNLOCALIZED: Item Measure", "create.schedule.condition.threshold.items": "UNLOCALIZED: Items", "create.schedule.condition.threshold.stacks": "UNLOCALIZED: Stacks", @@ -1492,6 +1493,7 @@ "create.schedule.condition.threshold.status": "UNLOCALIZED: Cargo: %1$s/%2$s %3$s", "create.schedule.condition.threshold.place_item": "UNLOCALIZED: Reference Item", "create.schedule.condition.threshold.place_item_2": "UNLOCALIZED: Filters can be used", + "create.schedule.condition.threshold.place_item_3": "UNLOCALIZED: Leave empty to match any", "create.schedule.condition.fluid_threshold": "UNLOCALIZED: Fluid Cargo Condition", "create.schedule.condition.item_threshold": "UNLOCALIZED: Item Cargo Condition", "create.schedule.condition.redstone_link": "UNLOCALIZED: Redstone Link", diff --git a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json index fdd2f77be..be600d683 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json +++ b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 10", + "_": "Missing Localizations: 12", "_": "->------------------------] Game Elements [------------------------<-", @@ -1485,6 +1485,7 @@ "create.schedule.condition.threshold.equal": "dokładnie", "create.schedule.condition.threshold.x_units_of_item": "%1$s %2$s: %3$s", "create.schedule.condition.threshold.matching_content": "Pasująca zawartość", + "create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything", "create.schedule.condition.threshold.item_measure": "Jednostka przedmiotów", "create.schedule.condition.threshold.items": "Przemioty", "create.schedule.condition.threshold.stacks": "Stosy", @@ -1492,6 +1493,7 @@ "create.schedule.condition.threshold.status": "Ładunek: %1$s/%2$s %3$s", "create.schedule.condition.threshold.place_item": "Przedmiot odniesienia", "create.schedule.condition.threshold.place_item_2": "Filtry mogą zostać użyte", + "create.schedule.condition.threshold.place_item_3": "UNLOCALIZED: Leave empty to match any", "create.schedule.condition.fluid_threshold": "Warunek ładunku płynów", "create.schedule.condition.item_threshold": "Warunek ładunku przedmiotów", "create.schedule.condition.redstone_link": "Emiter sygnału", 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 52acd0236..4be946869 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: 1329", + "_": "Missing Localizations: 1331", "_": "->------------------------] Game Elements [------------------------<-", @@ -1485,6 +1485,7 @@ "create.schedule.condition.threshold.equal": "UNLOCALIZED: exactly", "create.schedule.condition.threshold.x_units_of_item": "UNLOCALIZED: %1$s %2$s of %3$s", "create.schedule.condition.threshold.matching_content": "UNLOCALIZED: Matching Content", + "create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything", "create.schedule.condition.threshold.item_measure": "UNLOCALIZED: Item Measure", "create.schedule.condition.threshold.items": "UNLOCALIZED: Items", "create.schedule.condition.threshold.stacks": "UNLOCALIZED: Stacks", @@ -1492,6 +1493,7 @@ "create.schedule.condition.threshold.status": "UNLOCALIZED: Cargo: %1$s/%2$s %3$s", "create.schedule.condition.threshold.place_item": "UNLOCALIZED: Reference Item", "create.schedule.condition.threshold.place_item_2": "UNLOCALIZED: Filters can be used", + "create.schedule.condition.threshold.place_item_3": "UNLOCALIZED: Leave empty to match any", "create.schedule.condition.fluid_threshold": "UNLOCALIZED: Fluid Cargo Condition", "create.schedule.condition.item_threshold": "UNLOCALIZED: Item Cargo Condition", "create.schedule.condition.redstone_link": "UNLOCALIZED: Redstone Link", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_pt.json b/src/generated/resources/assets/create/lang/unfinished/pt_pt.json index f750b5a9f..a62924d83 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_pt.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_pt.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 2194", + "_": "Missing Localizations: 2196", "_": "->------------------------] Game Elements [------------------------<-", @@ -1485,6 +1485,7 @@ "create.schedule.condition.threshold.equal": "UNLOCALIZED: exactly", "create.schedule.condition.threshold.x_units_of_item": "UNLOCALIZED: %1$s %2$s of %3$s", "create.schedule.condition.threshold.matching_content": "UNLOCALIZED: Matching Content", + "create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything", "create.schedule.condition.threshold.item_measure": "UNLOCALIZED: Item Measure", "create.schedule.condition.threshold.items": "UNLOCALIZED: Items", "create.schedule.condition.threshold.stacks": "UNLOCALIZED: Stacks", @@ -1492,6 +1493,7 @@ "create.schedule.condition.threshold.status": "UNLOCALIZED: Cargo: %1$s/%2$s %3$s", "create.schedule.condition.threshold.place_item": "UNLOCALIZED: Reference Item", "create.schedule.condition.threshold.place_item_2": "UNLOCALIZED: Filters can be used", + "create.schedule.condition.threshold.place_item_3": "UNLOCALIZED: Leave empty to match any", "create.schedule.condition.fluid_threshold": "UNLOCALIZED: Fluid Cargo Condition", "create.schedule.condition.item_threshold": "UNLOCALIZED: Item Cargo Condition", "create.schedule.condition.redstone_link": "UNLOCALIZED: Redstone Link", diff --git a/src/generated/resources/assets/create/lang/unfinished/ro_ro.json b/src/generated/resources/assets/create/lang/unfinished/ro_ro.json index 2d85ce256..25aa3227a 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ro_ro.json +++ b/src/generated/resources/assets/create/lang/unfinished/ro_ro.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 653", + "_": "Missing Localizations: 655", "_": "->------------------------] Game Elements [------------------------<-", @@ -1485,6 +1485,7 @@ "create.schedule.condition.threshold.equal": "UNLOCALIZED: exactly", "create.schedule.condition.threshold.x_units_of_item": "UNLOCALIZED: %1$s %2$s of %3$s", "create.schedule.condition.threshold.matching_content": "UNLOCALIZED: Matching Content", + "create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything", "create.schedule.condition.threshold.item_measure": "UNLOCALIZED: Item Measure", "create.schedule.condition.threshold.items": "UNLOCALIZED: Items", "create.schedule.condition.threshold.stacks": "UNLOCALIZED: Stacks", @@ -1492,6 +1493,7 @@ "create.schedule.condition.threshold.status": "UNLOCALIZED: Cargo: %1$s/%2$s %3$s", "create.schedule.condition.threshold.place_item": "UNLOCALIZED: Reference Item", "create.schedule.condition.threshold.place_item_2": "UNLOCALIZED: Filters can be used", + "create.schedule.condition.threshold.place_item_3": "UNLOCALIZED: Leave empty to match any", "create.schedule.condition.fluid_threshold": "UNLOCALIZED: Fluid Cargo Condition", "create.schedule.condition.item_threshold": "UNLOCALIZED: Item Cargo Condition", "create.schedule.condition.redstone_link": "UNLOCALIZED: Redstone Link", 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 f07e5ff6a..895d13915 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: 0", + "_": "Missing Localizations: 2", "_": "->------------------------] Game Elements [------------------------<-", @@ -1485,6 +1485,7 @@ "create.schedule.condition.threshold.equal": "точно", "create.schedule.condition.threshold.x_units_of_item": "%1$s %2$s (%3$s)", "create.schedule.condition.threshold.matching_content": "Определённое содержимое", + "create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything", "create.schedule.condition.threshold.item_measure": "Количество предметов", "create.schedule.condition.threshold.items": "штук", "create.schedule.condition.threshold.stacks": "стаков", @@ -1492,6 +1493,7 @@ "create.schedule.condition.threshold.status": "Груз: %1$s/%2$s %3$s", "create.schedule.condition.threshold.place_item": "Основной предмет", "create.schedule.condition.threshold.place_item_2": "Можно использовать фильтры", + "create.schedule.condition.threshold.place_item_3": "UNLOCALIZED: Leave empty to match any", "create.schedule.condition.fluid_threshold": "Состояние жидкого груза", "create.schedule.condition.item_threshold": "Состояние груза", "create.schedule.condition.redstone_link": "Беспроводной сигнал", diff --git a/src/generated/resources/assets/create/lang/unfinished/uk_ua.json b/src/generated/resources/assets/create/lang/unfinished/uk_ua.json index 3bd7b8953..94152cfd6 100644 --- a/src/generated/resources/assets/create/lang/unfinished/uk_ua.json +++ b/src/generated/resources/assets/create/lang/unfinished/uk_ua.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 984", + "_": "Missing Localizations: 986", "_": "->------------------------] Game Elements [------------------------<-", @@ -1485,6 +1485,7 @@ "create.schedule.condition.threshold.equal": "UNLOCALIZED: exactly", "create.schedule.condition.threshold.x_units_of_item": "UNLOCALIZED: %1$s %2$s of %3$s", "create.schedule.condition.threshold.matching_content": "UNLOCALIZED: Matching Content", + "create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything", "create.schedule.condition.threshold.item_measure": "UNLOCALIZED: Item Measure", "create.schedule.condition.threshold.items": "UNLOCALIZED: Items", "create.schedule.condition.threshold.stacks": "UNLOCALIZED: Stacks", @@ -1492,6 +1493,7 @@ "create.schedule.condition.threshold.status": "UNLOCALIZED: Cargo: %1$s/%2$s %3$s", "create.schedule.condition.threshold.place_item": "UNLOCALIZED: Reference Item", "create.schedule.condition.threshold.place_item_2": "UNLOCALIZED: Filters can be used", + "create.schedule.condition.threshold.place_item_3": "UNLOCALIZED: Leave empty to match any", "create.schedule.condition.fluid_threshold": "UNLOCALIZED: Fluid Cargo Condition", "create.schedule.condition.item_threshold": "UNLOCALIZED: Item Cargo Condition", "create.schedule.condition.redstone_link": "UNLOCALIZED: Redstone Link", 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 03c8d3828..515ec7d83 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: 2", + "_": "Missing Localizations: 4", "_": "->------------------------] Game Elements [------------------------<-", @@ -1485,6 +1485,7 @@ "create.schedule.condition.threshold.equal": "恰好", "create.schedule.condition.threshold.x_units_of_item": "%1$s%2$s%3$s", "create.schedule.condition.threshold.matching_content": "匹配内容", + "create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything", "create.schedule.condition.threshold.item_measure": "物品度量", "create.schedule.condition.threshold.items": "个", "create.schedule.condition.threshold.stacks": "组", @@ -1492,6 +1493,7 @@ "create.schedule.condition.threshold.status": "货物:%1$s/%2$s %3$s", "create.schedule.condition.threshold.place_item": "参考物品", "create.schedule.condition.threshold.place_item_2": "可以使用过滤器", + "create.schedule.condition.threshold.place_item_3": "UNLOCALIZED: Leave empty to match any", "create.schedule.condition.fluid_threshold": "流体货物条件", "create.schedule.condition.item_threshold": "物品货物条件", "create.schedule.condition.redstone_link": "无线红石", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index 2ee8e9a6c..1af6b480c 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 6", + "_": "Missing Localizations: 8", "_": "->------------------------] Game Elements [------------------------<-", @@ -1485,6 +1485,7 @@ "create.schedule.condition.threshold.equal": "剛好", "create.schedule.condition.threshold.x_units_of_item": "%1$s%2$s %3$s", "create.schedule.condition.threshold.matching_content": "比對內容", + "create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything", "create.schedule.condition.threshold.item_measure": "物品單位", "create.schedule.condition.threshold.items": "個", "create.schedule.condition.threshold.stacks": "組", @@ -1492,6 +1493,7 @@ "create.schedule.condition.threshold.status": "貨物:%1$s/%2$s %3$s", "create.schedule.condition.threshold.place_item": "參考物品", "create.schedule.condition.threshold.place_item_2": "可以使用過濾器", + "create.schedule.condition.threshold.place_item_3": "UNLOCALIZED: Leave empty to match any", "create.schedule.condition.fluid_threshold": "流體貨物條件", "create.schedule.condition.item_threshold": "物品貨物條件", "create.schedule.condition.redstone_link": "無線紅石連接", diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java index ed4e27367..a32b40ea5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java @@ -218,14 +218,18 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { protected List> getMatchingRecipes() { List> matchingRecipes = super.getMatchingRecipes(); - if (!AllConfigs.SERVER.recipes.allowBrewingInMixer.get()) { + if (!AllConfigs.SERVER.recipes.allowBrewingInMixer.get()) return matchingRecipes; - } - + Optional basin = getBasin(); if (!basin.isPresent()) return matchingRecipes; - IItemHandler availableItems = basin.get() + + BasinTileEntity basinTileEntity = basin.get(); + if (basin.isEmpty()) + return matchingRecipes; + + IItemHandler availableItems = basinTileEntity .getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) .orElse(null); if (availableItems == null) diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinOperatingTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinOperatingTileEntity.java index 3ba1d6a6c..925853aa2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinOperatingTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinOperatingTileEntity.java @@ -1,5 +1,6 @@ package com.simibubi.create.content.contraptions.processing; +import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @@ -64,7 +65,8 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity { return true; if (level == null || level.isClientSide) return true; - if (!getBasin().filter(BasinTileEntity::canContinueProcessing) + Optional basin = getBasin(); + if (!basin.filter(BasinTileEntity::canContinueProcessing) .isPresent()) return true; @@ -118,6 +120,10 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity { } protected List> getMatchingRecipes() { + if (getBasin().map(BasinTileEntity::isEmpty) + .orElse(true)) + return new ArrayList<>(); + List> list = RecipeFinder.get(getRecipeCacheKey(), level, this::matchStaticFilters); return list.stream() .filter(this::matchBasinRecipe) diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinRecipe.java index 7e213f2e8..d925fad4a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinRecipe.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.contraptions.processing; import java.util.ArrayList; import java.util.Collections; -import java.util.Comparator; import java.util.LinkedList; import java.util.List; @@ -78,7 +77,6 @@ public class BasinRecipe extends ProcessingRecipe { List recipeOutputFluids = new ArrayList<>(); List ingredients = new LinkedList<>(recipe.getIngredients()); - ingredients.sort(Comparator.comparingInt(i -> i.getItems().length)); List fluidIngredients = isBasinRecipe ? ((BasinRecipe) recipe).getFluidIngredients() : Collections.emptyList(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java index 32e2e3174..af01c8da1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java @@ -88,6 +88,7 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor Direction preferredSpoutput; protected List spoutputBuffer; protected List spoutputFluidBuffer; + int recipeBackupCheck; public static final int OUTPUT_ANIMATION_TIME = 10; List> visualizedOutputItems; @@ -115,6 +116,7 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor preferredSpoutput = null; spoutputBuffer = new ArrayList<>(); spoutputFluidBuffer = new ArrayList<>(); + recipeBackupCheck = 20; } @Override @@ -227,19 +229,32 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor @Override public void lazyTick() { super.lazyTick(); - updateSpoutput(); - if (!level.isClientSide) + + if (!level.isClientSide) { + updateSpoutput(); + if (recipeBackupCheck-- > 0) + return; + recipeBackupCheck = 20; + if (isEmpty()) + return; + notifyChangeOfContents(); return; + } BlockEntity tileEntity = level.getBlockEntity(worldPosition.above(2)); if (!(tileEntity instanceof MechanicalMixerTileEntity)) { setAreFluidsMoving(false); return; } + MechanicalMixerTileEntity mixer = (MechanicalMixerTileEntity) tileEntity; setAreFluidsMoving(mixer.running && mixer.runningTicks <= 20); } + public boolean isEmpty() { + return inputInventory.isEmpty() && outputInventory.isEmpty() && inputTank.isEmpty() && outputTank.isEmpty(); + } + public void onWrenched(Direction face) { BlockState blockState = getBlockState(); Direction currentFacing = blockState.getValue(BasinBlock.FACING); @@ -256,15 +271,8 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor } private void updateSpoutput() { - if (level.isClientSide) - return; - BlockState blockState = getBlockState(); Direction currentFacing = blockState.getValue(BasinBlock.FACING); - - if (currentFacing != Direction.DOWN) - notifyChangeOfContents(); - Direction newFacing = Direction.DOWN; for (Direction test : Iterate.horizontalDirections) { boolean canOutputTo = BasinBlock.canOutputTo(level, worldPosition, test); diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java index 6405eaf32..7ca722a56 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java @@ -465,7 +465,7 @@ public class BeltTileEntity extends KineticTileEntity { return inserted; if (!simulate) { BeltTunnelInteractionHandler.flapTunnel(nextInventory, index, side.getOpposite(), true); - tunnelTE.setStackToDistribute(inserted); + tunnelTE.setStackToDistribute(inserted, side.getOpposite()); } return empty; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltTunnelInteractionHandler.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltTunnelInteractionHandler.java index ab1c46c40..3a7143ac7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltTunnelInteractionHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltTunnelInteractionHandler.java @@ -54,7 +54,7 @@ public class BeltTunnelInteractionHandler { if (!brassTunnel.canTakeItems()) return true; if (onServer) { - brassTunnel.setStackToDistribute(current.stack); + brassTunnel.setStackToDistribute(current.stack, movementFacing.getOpposite()); current.stack = ItemStack.EMPTY; beltInventory.belt.sendData(); beltInventory.belt.setChanged(); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelBlock.java index 9716e1e39..dece4a44e 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelBlock.java @@ -3,7 +3,6 @@ package com.simibubi.create.content.logistics.block.belts.tunnel; import java.util.List; import com.simibubi.create.AllTileEntities; -import com.simibubi.create.Create; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; @@ -44,7 +43,7 @@ public class BrassTunnelBlock extends BeltTunnelBlock { for (ItemStack itemStack : stacksOfGroup) player.getInventory().placeItemBackInInventory(itemStack.copy()); world.playSound(null, pos, SoundEvents.ITEM_PICKUP, SoundSource.PLAYERS, .2f, - 1f + Create.RANDOM.nextFloat()); + 1f + world.random.nextFloat()); return InteractionResult.SUCCESS; }); } @@ -61,16 +60,16 @@ public class BrassTunnelBlock extends BeltTunnelBlock { } @Override - public void onRemove(BlockState p_196243_1_, Level p_196243_2_, BlockPos p_196243_3_, BlockState p_196243_4_, - boolean p_196243_5_) { - if (p_196243_1_.hasBlockEntity() - && (p_196243_1_.getBlock() != p_196243_4_.getBlock() || !p_196243_4_.hasBlockEntity())) { - TileEntityBehaviour.destroy(p_196243_2_, p_196243_3_, FilteringBehaviour.TYPE); - withTileEntityDo(p_196243_2_, p_196243_3_, te -> { - if (te instanceof BrassTunnelTileEntity) - Block.popResource(p_196243_2_, p_196243_3_, ((BrassTunnelTileEntity) te).stackToDistribute); + public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) { + if (state.hasBlockEntity() && (state.getBlock() != newState.getBlock() || !newState.hasBlockEntity())) { + TileEntityBehaviour.destroy(level, pos, FilteringBehaviour.TYPE); + withTileEntityDo(level, pos, te -> { + if (!(te instanceof BrassTunnelTileEntity btte)) + return; + Block.popResource(level, pos, btte.stackToDistribute); + btte.stackEnteredFrom = null; }); - p_196243_2_.removeBlockEntity(p_196243_3_); + level.removeBlockEntity(pos); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelItemHandler.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelItemHandler.java index 688740989..c9d7b1017 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelItemHandler.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelItemHandler.java @@ -34,7 +34,7 @@ public class BrassTunnelItemHandler implements IItemHandler { if (!te.canTakeItems()) return stack; if (!simulate) - te.setStackToDistribute(stack); + te.setStackToDistribute(stack, null); return ItemStack.EMPTY; } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelTileEntity.java index a4caf7cb4..0d6399094 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelTileEntity.java @@ -17,6 +17,9 @@ import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.goggles.IHaveGoggleInformation; 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.funnel.BeltFunnelBlock; +import com.simibubi.create.content.logistics.block.funnel.BeltFunnelBlock.Shape; +import com.simibubi.create.content.logistics.block.funnel.FunnelBlock; import com.simibubi.create.foundation.gui.AllIcons; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.CenteredSideValueBoxTransform; @@ -61,6 +64,8 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave boolean connectedRight; ItemStack stackToDistribute; + Direction stackEnteredFrom; + float distributionProgress; int distributionDistanceLeft; int distributionDistanceRight; @@ -81,6 +86,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave distributionTargets = Couple.create(ArrayList::new); syncSet = new HashSet<>(); stackToDistribute = ItemStack.EMPTY; + stackEnteredFrom = null; beltCapability = LazyOptional.empty(); tunnelCapability = LazyOptional.of(() -> new BrassTunnelItemHandler(this)); previousOutputIndex = 0; @@ -183,6 +189,8 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave for (Pair pair : list) { BlockPos tunnelPos = pair.getKey(); Direction output = pair.getValue(); + if (tunnelPos.equals(worldPosition) && output == stackEnteredFrom) + continue; BlockEntity te = level.getBlockEntity(tunnelPos); if (!(te instanceof BrassTunnelTileEntity)) continue; @@ -306,13 +314,16 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave toDistribute.grow(failedTransferrals); stackToDistribute = ItemHandlerHelper.copyStackWithSize(stackToDistribute, toDistribute.getCount()); + if (stackToDistribute.isEmpty()) + stackEnteredFrom = null; previousOutputIndex++; previousOutputIndex %= amountTargets; notifyUpdate(); } - public void setStackToDistribute(ItemStack stack) { + public void setStackToDistribute(ItemStack stack, @Nullable Direction enteredFrom) { stackToDistribute = stack; + stackEnteredFrom = enteredFrom; distributionProgress = -1; sendData(); setChanged(); @@ -329,7 +340,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave if (!own.isEmpty()) { list.add(own); if (!simulate) - setStackToDistribute(ItemStack.EMPTY); + setStackToDistribute(ItemStack.EMPTY, null); } for (boolean left : Iterate.trueAndFalse) { @@ -345,7 +356,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave continue; list.add(other); if (!simulate) - adjacent.setStackToDistribute(ItemStack.EMPTY); + adjacent.setStackToDistribute(ItemStack.EMPTY, null); } } @@ -514,22 +525,30 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave continue; if (direction == movementFacing.getOpposite()) continue; - if (tunnelTE.sides.contains(direction)) { - BlockPos offset = tunnelTE.worldPosition.below() - .relative(direction); - DirectBeltInputBehaviour inputBehaviour = - TileEntityBehaviour.get(level, offset, DirectBeltInputBehaviour.TYPE); - if (inputBehaviour == null) { - if (direction == movementFacing) - if (!BlockHelper.hasBlockSolidSide(level.getBlockState(offset), level, offset, - direction.getOpposite())) - validOutputs.add(Pair.of(tunnelTE, direction)); - continue; - } - if (inputBehaviour.canInsertFromSide(direction)) - validOutputs.add(Pair.of(tunnelTE, direction)); + if (!tunnelTE.sides.contains(direction)) + continue; + + BlockPos offset = tunnelTE.worldPosition.below() + .relative(direction); + + BlockState potentialFunnel = level.getBlockState(offset.above()); + if (potentialFunnel.getBlock() instanceof BeltFunnelBlock + && potentialFunnel.getValue(BeltFunnelBlock.SHAPE) == Shape.PULLING + && FunnelBlock.getFunnelFacing(potentialFunnel) == direction) + continue; + + DirectBeltInputBehaviour inputBehaviour = + TileEntityBehaviour.get(level, offset, DirectBeltInputBehaviour.TYPE); + if (inputBehaviour == null) { + if (direction == movementFacing) + if (!BlockHelper.hasBlockSolidSide(level.getBlockState(offset), level, offset, + direction.getOpposite())) + validOutputs.add(Pair.of(tunnelTE, direction)); continue; } + if (inputBehaviour.canInsertFromSide(direction)) + validOutputs.add(Pair.of(tunnelTE, direction)); + continue; } } } @@ -559,7 +578,11 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave compound.putBoolean("SyncedOutput", syncedOutputActive); compound.putBoolean("ConnectedLeft", connectedLeft); compound.putBoolean("ConnectedRight", connectedRight); + compound.put("StackToDistribute", stackToDistribute.serializeNBT()); + if (stackEnteredFrom != null) + NBTHelper.writeEnum(compound, "StackEnteredFrom", stackEnteredFrom); + compound.putFloat("DistributionProgress", distributionProgress); compound.putInt("PreviousIndex", previousOutputIndex); compound.putInt("DistanceLeft", distributionDistanceLeft); @@ -587,7 +610,12 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave syncedOutputActive = compound.getBoolean("SyncedOutput"); connectedLeft = compound.getBoolean("ConnectedLeft"); connectedRight = compound.getBoolean("ConnectedRight"); + stackToDistribute = ItemStack.of(compound.getCompound("StackToDistribute")); + stackEnteredFrom = + compound.contains("StackEnteredFrom") ? NBTHelper.readEnum(compound, "StackEnteredFrom", Direction.class) + : null; + distributionProgress = compound.getFloat("DistributionProgress"); previousOutputIndex = compound.getInt("PreviousIndex"); distributionDistanceLeft = compound.getInt("DistanceLeft"); diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/condition/CargoThresholdCondition.java b/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/condition/CargoThresholdCondition.java index a41d95ddd..75b1f0a07 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/condition/CargoThresholdCondition.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/condition/CargoThresholdCondition.java @@ -110,6 +110,8 @@ public abstract class CargoThresholdCondition extends LazyTickedScheduleConditio public List getSecondLineTooltip(int slot) { return ImmutableList.of(Lang.translateDirect("schedule.condition.threshold.place_item"), Lang.translateDirect("schedule.condition.threshold.place_item_2") + .withStyle(ChatFormatting.GRAY), + Lang.translateDirect("schedule.condition.threshold.place_item_3") .withStyle(ChatFormatting.GRAY)); } diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/condition/FluidThresholdCondition.java b/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/condition/FluidThresholdCondition.java index 1b8405070..0c3f25f55 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/condition/FluidThresholdCondition.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/condition/FluidThresholdCondition.java @@ -44,9 +44,6 @@ public class FluidThresholdCondition extends CargoThresholdCondition { Ops operator = getOperator(); int target = getThreshold(); - if (compareStack.isEmpty()) - return true; - int foundFluid = 0; for (Carriage carriage : train.carriages) { IFluidHandler fluids = carriage.storage.getFluids(); @@ -100,9 +97,10 @@ public class FluidThresholdCondition extends CargoThresholdCondition { Lang.translateDirect("schedule.condition.threshold." + Lang.asId(getOperator().name()))), Lang.translateDirect("schedule.condition.threshold.x_units_of_item", getThreshold(), Lang.translateDirect("schedule.condition.threshold.buckets"), - compareStack.getItem() instanceof FilterItem - ? Lang.translateDirect("schedule.condition.threshold.matching_content") - : loadFluid().getDisplayName()) + compareStack.isEmpty() ? Lang.translateDirect("schedule.condition.threshold.anything") + : compareStack.getItem() instanceof FilterItem + ? Lang.translateDirect("schedule.condition.threshold.matching_content") + : loadFluid().getDisplayName()) .withStyle(ChatFormatting.DARK_AQUA)); } diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/condition/ItemThresholdCondition.java b/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/condition/ItemThresholdCondition.java index 8b05e24d4..78905d201 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/condition/ItemThresholdCondition.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/condition/ItemThresholdCondition.java @@ -41,9 +41,6 @@ public class ItemThresholdCondition extends CargoThresholdCondition { int target = getThreshold(); boolean stacks = inStacks(); - if (stack.isEmpty()) - return true; - int foundItems = 0; for (Carriage carriage : train.carriages) { IItemHandlerModifiable items = carriage.storage.getItems(); @@ -97,8 +94,10 @@ public class ItemThresholdCondition extends CargoThresholdCondition { Lang.translateDirect("schedule.condition.threshold." + Lang.asId(getOperator().name()))), Lang.translateDirect("schedule.condition.threshold.x_units_of_item", getThreshold(), Lang.translateDirect("schedule.condition.threshold." + (inStacks() ? "stacks" : "items")), - stack.getItem() instanceof FilterItem ? Lang.translateDirect("schedule.condition.threshold.matching_content") - : stack.getHoverName()) + stack.isEmpty() ? Lang.translateDirect("schedule.condition.threshold.anything") + : stack.getItem() instanceof FilterItem + ? Lang.translateDirect("schedule.condition.threshold.matching_content") + : stack.getHoverName()) .withStyle(ChatFormatting.DARK_AQUA)); } diff --git a/src/main/resources/assets/create/lang/default/interface.json b/src/main/resources/assets/create/lang/default/interface.json index 0f57cb0aa..2c861151e 100644 --- a/src/main/resources/assets/create/lang/default/interface.json +++ b/src/main/resources/assets/create/lang/default/interface.json @@ -652,6 +652,7 @@ "create.schedule.condition.threshold.equal": "exactly", "create.schedule.condition.threshold.x_units_of_item": "%1$s %2$s of %3$s", "create.schedule.condition.threshold.matching_content": "Matching Content", + "create.schedule.condition.threshold.anything": "Anything", "create.schedule.condition.threshold.item_measure": "Item Measure", "create.schedule.condition.threshold.items": "Items", "create.schedule.condition.threshold.stacks": "Stacks", @@ -659,6 +660,7 @@ "create.schedule.condition.threshold.status": "Cargo: %1$s/%2$s %3$s", "create.schedule.condition.threshold.place_item": "Reference Item", "create.schedule.condition.threshold.place_item_2": "Filters can be used", + "create.schedule.condition.threshold.place_item_3": "Leave empty to match any", "create.schedule.condition.fluid_threshold": "Fluid Cargo Condition", "create.schedule.condition.item_threshold": "Item Cargo Condition", "create.schedule.condition.redstone_link": "Redstone Link",