From 1b54827feb9db6baac047dc0754f5330c2731ccc Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Sat, 29 Apr 2023 15:53:07 +0200 Subject: [PATCH 1/2] Switch it up - Added tripwire to #movable_empty_collider - Netherite armor can now be upgraded to Netherite diving gear - Stockpile Switch -> Threshold Switch - Content Observer -> Smart Observer - Smart observer and threshold switch can now be oriented to face blocks above or below them - Smart observer will now also emit redstone when the block in front of it matches its filter - Gui touch-ups --- src/generated/resources/.cache/cache | 57 ++-- .../create/blockstates/content_observer.json | 92 +++++- .../create/blockstates/stockpile_switch.json | 277 ++++++++++++++---- .../resources/assets/create/lang/en_ud.json | 4 +- .../resources/assets/create/lang/en_us.json | 12 +- .../models/block/stockpile_switch_0.json | 6 - .../models/block/stockpile_switch_1.json | 6 - .../models/block/stockpile_switch_2.json | 6 - .../models/block/stockpile_switch_3.json | 6 - .../models/block/stockpile_switch_4.json | 6 - .../models/block/stockpile_switch_5.json | 6 - .../models/block/stockpile_switch_6.json | 6 - .../create/models/item/stockpile_switch.json | 2 +- .../threshold_switch/block_ceiling_0.json | 6 + .../threshold_switch/block_ceiling_1.json | 6 + .../threshold_switch/block_ceiling_2.json | 6 + .../threshold_switch/block_ceiling_3.json | 6 + .../threshold_switch/block_ceiling_4.json | 6 + .../threshold_switch/block_ceiling_5.json | 6 + .../threshold_switch/block_floor_0.json | 6 + .../threshold_switch/block_floor_1.json | 6 + .../threshold_switch/block_floor_2.json | 6 + .../threshold_switch/block_floor_3.json | 6 + .../threshold_switch/block_floor_4.json | 6 + .../threshold_switch/block_floor_5.json | 6 + .../models/threshold_switch/block_wall_0.json | 6 + .../models/threshold_switch/block_wall_1.json | 6 + .../models/threshold_switch/block_wall_2.json | 6 + .../models/threshold_switch/block_wall_3.json | 6 + .../models/threshold_switch/block_wall_4.json | 6 + .../models/threshold_switch/block_wall_5.json | 6 + .../netherite_backtank_from_netherite.json} | 6 +- ...netherite_diving_boots_from_netherite.json | 34 +++ ...etherite_diving_helmet_from_netherite.json | 34 +++ ...e.json => large_cogwheel_from_little.json} | 4 +- .../crafting/logistics/content_observer.json | 2 +- ..._conversion.json => stockpile_switch.json} | 6 +- .../netherite_backtank_from_netherite.json | 12 + ...netherite_diving_boots_from_netherite.json | 12 + ...etherite_diving_helmet_from_netherite.json | 12 + ...e.json => large_cogwheel_from_little.json} | 0 .../crafting/logistics/content_observer.json | 6 +- .../content_observerfrom_conversion.json | 11 - .../crafting/logistics/stockpile_switch.json | 22 ++ .../stockpile_switchfrom_conversion.json | 11 - .../tags/blocks/movable_empty_collider.json | 2 + .../simibubi/create/AllBlockEntityTypes.java | 16 +- .../java/com/simibubi/create/AllBlocks.java | 26 +- .../pulley/PulleyBlockEntity.java | 4 +- .../sequencer/SequencedGearshiftScreen.java | 14 +- .../symmetry/SymmetryWandScreen.java | 2 +- .../curiosities/toolbox/ToolboxScreen.java | 2 +- .../block/display/DisplayLinkScreen.java | 2 +- .../source/FillLevelDisplaySource.java | 4 +- .../source/FluidAmountDisplaySource.java | 4 +- .../source/FluidListDisplaySource.java | 4 +- .../source/ItemCountDisplaySource.java | 4 +- .../display/source/ItemListDisplaySource.java | 4 +- .../block/funnel/FunnelBlockEntity.java | 2 +- .../redstone/DirectedDirectionalBlock.java | 98 +++++++ .../redstone/FilteredDetectorFilterSlot.java | 46 ++- ...rverBlock.java => SmartObserverBlock.java} | 56 ++-- ...ity.java => SmartObserverBlockEntity.java} | 29 +- .../redstone/SmartObserverGenerator.java | 35 +++ ...chBlock.java => ThresholdSwitchBlock.java} | 84 ++---- ...y.java => ThresholdSwitchBlockEntity.java} | 26 +- .../redstone/ThresholdSwitchGenerator.java | 36 +++ ...le.java => ThresholdSwitchObservable.java} | 2 +- ...Screen.java => ThresholdSwitchScreen.java} | 54 ++-- .../item/LinkedControllerScreen.java | 2 +- .../item/filter/AbstractFilterScreen.java | 26 +- .../item/filter/AttributeFilterMenu.java | 6 +- .../item/filter/AttributeFilterScreen.java | 22 +- .../logistics/item/filter/FilterMenu.java | 4 +- .../logistics/item/filter/FilterScreen.java | 16 +- .../packet/ConfigureStockswitchPacket.java | 6 +- .../edgePoint/station/StationScreen.java | 2 +- .../create/foundation/data/TagGen.java | 4 +- .../data/recipe/StandardRecipeGen.java | 36 ++- .../create/foundation/gui/AllGuiTextures.java | 24 +- .../ponder/content/PonderIndex.java | 8 +- .../foundation/utility/RemapHelper.java | 8 +- .../assets/create/lang/default/interface.json | 8 +- .../models/block/content_observer/block.json | 75 +---- .../block/content_observer/block_powered.json | 5 +- .../create/models/block/stockpile_switch.json | 98 ------- .../block/threshold_switch/block_ceiling.json | 44 +++ .../block/threshold_switch/block_floor.json | 44 +++ .../block/threshold_switch/block_wall.json | 42 +++ .../block/filtered_detector_front.png | Bin 221 -> 0 bytes .../textures/block/filtered_detector_top.png | Bin 2049 -> 0 bytes .../create/textures/block/smart_observer.png | Bin 0 -> 343 bytes .../textures/block/smart_observer_front.png | Bin 0 -> 335 bytes .../textures/block/smart_observer_powered.png | Bin 0 -> 369 bytes .../textures/block/smart_observer_side.png | Bin 0 -> 328 bytes .../block/smart_observer_side_powered.png | Bin 0 -> 338 bytes .../textures/block/smart_observer_top.png | Bin 0 -> 293 bytes .../block/threshold_switch/level_0.png | Bin 0 -> 335 bytes .../block/threshold_switch/level_1.png | Bin 0 -> 362 bytes .../block/threshold_switch/level_2.png | Bin 0 -> 364 bytes .../block/threshold_switch/level_3.png | Bin 0 -> 370 bytes .../block/threshold_switch/level_4.png | Bin 0 -> 373 bytes .../block/threshold_switch/level_5.png | Bin 0 -> 359 bytes .../textures/block/threshold_switch_back.png | Bin 0 -> 322 bytes .../textures/block/threshold_switch_front.png | Bin 0 -> 329 bytes .../assets/create/textures/gui/clipboard.pdn | Bin 24482 -> 0 bytes .../create/textures/gui/curiosities.png | Bin 1349 -> 1999 bytes .../create/textures/gui/curiosities_2.png | Bin 1196 -> 1895 bytes .../create/textures/gui/display_link.png | Bin 2141 -> 1992 bytes .../assets/create/textures/gui/filters.png | Bin 1234 -> 1872 bytes .../assets/create/textures/gui/logistics.png | Bin 1855 -> 2617 bytes .../assets/create/textures/gui/schedule_2.png | Bin 2150 -> 2040 bytes .../assets/create/textures/gui/sequencer.png | Bin 1163 -> 1839 bytes .../assets/create/textures/gui/toolbox.png | Bin 975 -> 1473 bytes 114 files changed, 1208 insertions(+), 594 deletions(-) delete mode 100644 src/generated/resources/assets/create/models/block/stockpile_switch_0.json delete mode 100644 src/generated/resources/assets/create/models/block/stockpile_switch_1.json delete mode 100644 src/generated/resources/assets/create/models/block/stockpile_switch_2.json delete mode 100644 src/generated/resources/assets/create/models/block/stockpile_switch_3.json delete mode 100644 src/generated/resources/assets/create/models/block/stockpile_switch_4.json delete mode 100644 src/generated/resources/assets/create/models/block/stockpile_switch_5.json delete mode 100644 src/generated/resources/assets/create/models/block/stockpile_switch_6.json create mode 100644 src/generated/resources/assets/create/models/threshold_switch/block_ceiling_0.json create mode 100644 src/generated/resources/assets/create/models/threshold_switch/block_ceiling_1.json create mode 100644 src/generated/resources/assets/create/models/threshold_switch/block_ceiling_2.json create mode 100644 src/generated/resources/assets/create/models/threshold_switch/block_ceiling_3.json create mode 100644 src/generated/resources/assets/create/models/threshold_switch/block_ceiling_4.json create mode 100644 src/generated/resources/assets/create/models/threshold_switch/block_ceiling_5.json create mode 100644 src/generated/resources/assets/create/models/threshold_switch/block_floor_0.json create mode 100644 src/generated/resources/assets/create/models/threshold_switch/block_floor_1.json create mode 100644 src/generated/resources/assets/create/models/threshold_switch/block_floor_2.json create mode 100644 src/generated/resources/assets/create/models/threshold_switch/block_floor_3.json create mode 100644 src/generated/resources/assets/create/models/threshold_switch/block_floor_4.json create mode 100644 src/generated/resources/assets/create/models/threshold_switch/block_floor_5.json create mode 100644 src/generated/resources/assets/create/models/threshold_switch/block_wall_0.json create mode 100644 src/generated/resources/assets/create/models/threshold_switch/block_wall_1.json create mode 100644 src/generated/resources/assets/create/models/threshold_switch/block_wall_2.json create mode 100644 src/generated/resources/assets/create/models/threshold_switch/block_wall_3.json create mode 100644 src/generated/resources/assets/create/models/threshold_switch/block_wall_4.json create mode 100644 src/generated/resources/assets/create/models/threshold_switch/block_wall_5.json rename src/generated/resources/data/create/advancements/recipes/create.base/crafting/{logistics/stockpile_switchfrom_conversion.json => appliances/netherite_backtank_from_netherite.json} (70%) create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/netherite_diving_boots_from_netherite.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/netherite_diving_helmet_from_netherite.json rename src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/{large_cogwheelfrom_little.json => large_cogwheel_from_little.json} (79%) rename src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/{content_observerfrom_conversion.json => stockpile_switch.json} (72%) create mode 100644 src/generated/resources/data/create/recipes/crafting/appliances/netherite_backtank_from_netherite.json create mode 100644 src/generated/resources/data/create/recipes/crafting/appliances/netherite_diving_boots_from_netherite.json create mode 100644 src/generated/resources/data/create/recipes/crafting/appliances/netherite_diving_helmet_from_netherite.json rename src/generated/resources/data/create/recipes/crafting/kinetics/{large_cogwheelfrom_little.json => large_cogwheel_from_little.json} (100%) delete mode 100644 src/generated/resources/data/create/recipes/crafting/logistics/content_observerfrom_conversion.json create mode 100644 src/generated/resources/data/create/recipes/crafting/logistics/stockpile_switch.json delete mode 100644 src/generated/resources/data/create/recipes/crafting/logistics/stockpile_switchfrom_conversion.json create mode 100644 src/main/java/com/simibubi/create/content/logistics/block/redstone/DirectedDirectionalBlock.java rename src/main/java/com/simibubi/create/content/logistics/block/redstone/{ContentObserverBlock.java => SmartObserverBlock.java} (78%) rename src/main/java/com/simibubi/create/content/logistics/block/redstone/{ContentObserverBlockEntity.java => SmartObserverBlockEntity.java} (79%) create mode 100644 src/main/java/com/simibubi/create/content/logistics/block/redstone/SmartObserverGenerator.java rename src/main/java/com/simibubi/create/content/logistics/block/redstone/{StockpileSwitchBlock.java => ThresholdSwitchBlock.java} (62%) rename src/main/java/com/simibubi/create/content/logistics/block/redstone/{StockpileSwitchBlockEntity.java => ThresholdSwitchBlockEntity.java} (88%) create mode 100644 src/main/java/com/simibubi/create/content/logistics/block/redstone/ThresholdSwitchGenerator.java rename src/main/java/com/simibubi/create/content/logistics/block/redstone/{StockpileSwitchObservable.java => ThresholdSwitchObservable.java} (68%) rename src/main/java/com/simibubi/create/content/logistics/block/redstone/{StockpileSwitchScreen.java => ThresholdSwitchScreen.java} (71%) delete mode 100644 src/main/resources/assets/create/models/block/stockpile_switch.json create mode 100644 src/main/resources/assets/create/models/block/threshold_switch/block_ceiling.json create mode 100644 src/main/resources/assets/create/models/block/threshold_switch/block_floor.json create mode 100644 src/main/resources/assets/create/models/block/threshold_switch/block_wall.json delete mode 100644 src/main/resources/assets/create/textures/block/filtered_detector_front.png delete mode 100644 src/main/resources/assets/create/textures/block/filtered_detector_top.png create mode 100644 src/main/resources/assets/create/textures/block/smart_observer.png create mode 100644 src/main/resources/assets/create/textures/block/smart_observer_front.png create mode 100644 src/main/resources/assets/create/textures/block/smart_observer_powered.png create mode 100644 src/main/resources/assets/create/textures/block/smart_observer_side.png create mode 100644 src/main/resources/assets/create/textures/block/smart_observer_side_powered.png create mode 100644 src/main/resources/assets/create/textures/block/smart_observer_top.png create mode 100644 src/main/resources/assets/create/textures/block/threshold_switch/level_0.png create mode 100644 src/main/resources/assets/create/textures/block/threshold_switch/level_1.png create mode 100644 src/main/resources/assets/create/textures/block/threshold_switch/level_2.png create mode 100644 src/main/resources/assets/create/textures/block/threshold_switch/level_3.png create mode 100644 src/main/resources/assets/create/textures/block/threshold_switch/level_4.png create mode 100644 src/main/resources/assets/create/textures/block/threshold_switch/level_5.png create mode 100644 src/main/resources/assets/create/textures/block/threshold_switch_back.png create mode 100644 src/main/resources/assets/create/textures/block/threshold_switch_front.png delete mode 100644 src/main/resources/assets/create/textures/gui/clipboard.pdn diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 6c7f1c120..09d057eca 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -55,7 +55,7 @@ d01a750e6e8214ca8481e40aa69cedeb5c7210f8 assets/create/blockstates/cart_assemble 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 +e4efa0811219796fedb9277151a4d99831688914 assets/create/blockstates/content_observer.json 7ecbf72c0557d97514aadc5a794bd8720c2fc48b assets/create/blockstates/contraption_controls.json 7d11142092c89ccba3e74e0a3bdd0ccb446d63b5 assets/create/blockstates/controller_rail.json 80d71365995d4c2a61dd1c15e99cae18551af6e8 assets/create/blockstates/controls.json @@ -513,7 +513,7 @@ d62b7908119fa4f51715a186d0882b388bb25cab assets/create/blockstates/spruce_window 442d959d019088d9dbe04c530f5fcabbbb65819f assets/create/blockstates/steam_whistle_extension.json 5d7385d28a23dcfc95a221d36d82337908582726 assets/create/blockstates/sticker.json 3d93eabbb327aecc526beae9c62283f1d43eb710 assets/create/blockstates/sticky_mechanical_piston.json -f385988cb6fa9c48b5d59a6942ec50ed2b60c8bf assets/create/blockstates/stockpile_switch.json +4a007c7e2ac1dac5e838c86a46dd3dbdedb1a607 assets/create/blockstates/stockpile_switch.json e815bfd854c2653f10828bb11950f7fb991d7efc assets/create/blockstates/stressometer.json 8b0c2c7ac72529565b3339aa8df7565858100afa assets/create/blockstates/tiled_glass.json a2454400b1cf9889f70aebdc89c52a1be25f543c assets/create/blockstates/tiled_glass_pane.json @@ -578,8 +578,8 @@ bf2b0310500213ff853c748c236eb5d01f61658e assets/create/blockstates/yellow_toolbo 5616dda664dd106d576848124fc0fc1de18d0fd3 assets/create/blockstates/yellow_valve_handle.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json -ce9a5edbf3f6d35c11ce3894efb89d012a3e643b assets/create/lang/en_ud.json -e19381716210baa2b86cd113017ab3ded998376f assets/create/lang/en_us.json +a4e6b545d4b9fac623de034ab8d063b2c621742c assets/create/lang/en_ud.json +aac2ef619ff4e427e50aa8d2e635c311f1780b6f assets/create/lang/en_us.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 @@ -1546,13 +1546,6 @@ b18fd30c44895bc993db27b6516addd2ad75fe55 assets/create/models/block/steam_whistl 7820c8787d56b3f9beb283512a01ac8fc44dfc57 assets/create/models/block/steam_whistle/block_medium_wall_powered.json d144085e04718356d8b1fec7a4f46650b943e180 assets/create/models/block/steam_whistle/block_small_floor_powered.json 1fae9dd3da45f35b63ea9282d24723b2794869d0 assets/create/models/block/steam_whistle/block_small_wall_powered.json -3bda065e24a71b82b92b9c805790ba6d1791ef6a assets/create/models/block/stockpile_switch_0.json -335d6bc2b19d3cdbc9ed8b344142e2e3aa397994 assets/create/models/block/stockpile_switch_1.json -655d5cd249291a550bb3508c97f5a7a3606a7848 assets/create/models/block/stockpile_switch_2.json -cd8242a881e78831f6573c1fef99f9941ecf6ef7 assets/create/models/block/stockpile_switch_3.json -ad1950ba333cb2095c0dba5c0c020517acbfeb28 assets/create/models/block/stockpile_switch_4.json -ba22751c2d11fbe0ee03d90d408250edb4148080 assets/create/models/block/stockpile_switch_5.json -d6a49bf3c26ab83de70190db5f8a9c6dca85df52 assets/create/models/block/stockpile_switch_6.json 050ba6ad19c79ca0c7e5a2876981f47b54c1dad1 assets/create/models/block/tiled_glass.json 105f953f708c78f95de5db5def20c6ff0d1af4c9 assets/create/models/block/tiled_glass_pane_noside.json d257b024117a6003196c1feb85e759a3e1c180f7 assets/create/models/block/tiled_glass_pane_noside_alt.json @@ -2202,7 +2195,7 @@ f3ec8df2ee1690353ae1ec687b822d0fd962160e assets/create/models/item/spruce_window ba37dbd2da76713468312b2fe66a3706ffb2ae3e assets/create/models/item/steam_whistle.json bb546e5342c6d1a6b4040cf7ccdd2f10c6f79965 assets/create/models/item/sticker.json 891abc24593d53d282773eca5534065056d89b4c assets/create/models/item/sticky_mechanical_piston.json -bbb5773adc23128c70174bfc531af936e6e063e3 assets/create/models/item/stockpile_switch.json +23b90f68439de1f60cb9d307e1c40c2549746c8f assets/create/models/item/stockpile_switch.json bab8f78c319b2a79ed55c5d2a94b521ddaa44996 assets/create/models/item/stressometer.json 6a8f7af1715484d1e7aa4aa548db921f90899cb2 assets/create/models/item/sturdy_sheet.json 67cbfc1413ad5201f462c618a8fc6265edb3b8ad assets/create/models/item/super_glue.json @@ -2275,6 +2268,24 @@ be7a2d59d43083d7f2427193dcb9d68004224dd3 assets/create/models/item/white_valve_h 866fbb0ce2878a73e0440d1caf6534c8bd7c384f assets/create/models/item/zinc_ingot.json a80fb25a0b655e76be986b5b49fcb0f03461a1ab assets/create/models/item/zinc_nugget.json b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json +2f53104ec02684b16107e0f435cdd038d4183260 assets/create/models/threshold_switch/block_ceiling_0.json +e6732c3e32699550a238773e575ba826b5cb9d46 assets/create/models/threshold_switch/block_ceiling_1.json +6fa36705a93d5bf1c5e1887ee9a3c14c59f1889a assets/create/models/threshold_switch/block_ceiling_2.json +935c1bd1779d56d65b38cd6dc59d6d0eedf78fbe assets/create/models/threshold_switch/block_ceiling_3.json +c66ab242ccdad92aec72668a828a97b72581ce37 assets/create/models/threshold_switch/block_ceiling_4.json +6abc787ff6ac758938e29d15c60b37823e427378 assets/create/models/threshold_switch/block_ceiling_5.json +e6f0ec2a5956c383b3ebc1420c3ac546a774db11 assets/create/models/threshold_switch/block_floor_0.json +6f0ec6f68ae405fb88f2fca08825df3c7bd46464 assets/create/models/threshold_switch/block_floor_1.json +e997fc367ffc354b89dc01a44cdf350f9a34345c assets/create/models/threshold_switch/block_floor_2.json +14ca62bd8a15495d5ca3e0994a118fa9f01f8574 assets/create/models/threshold_switch/block_floor_3.json +46289bd92ce7f21d9f0d8b806e7e93ba5f11d47f assets/create/models/threshold_switch/block_floor_4.json +12438e288860e84895e3f296cb3e82389d1be3e4 assets/create/models/threshold_switch/block_floor_5.json +fb29b0323fcbaf96bef197db89a6943626091998 assets/create/models/threshold_switch/block_wall_0.json +9ff3206513232878964219efefc613bc683893db assets/create/models/threshold_switch/block_wall_1.json +e66e4cbab3bd9c8338b032adba7a689e96d5b185 assets/create/models/threshold_switch/block_wall_2.json +32cfe5661b8bf9886e7282c088d731883c38f1ec assets/create/models/threshold_switch/block_wall_3.json +37b2f0f29bda5eadc84a147887ce7ba9fc0ef2d1 assets/create/models/threshold_switch/block_wall_4.json +533746594ff508be13438cc3f297aa71dc48cec5 assets/create/models/threshold_switch/block_wall_5.json de7cdf8d734a067af32883e9d86a10e0542a0f5b assets/create/sounds.json 7048adc6db09a949173a824b26569ade94081d3e data/create/advancements/andesite_alloy.json 595a47eb334ca5110fe30134d4aec87b97e53f42 data/create/advancements/andesite_casing.json @@ -2390,8 +2401,11 @@ fa2e18298f7710465d9b0798a69288e846c646fd data/create/advancements/recipes/create 048a24b84c19c47802c5aed069001925eedd087d data/create/advancements/recipes/create.base/crafting/appliances/filter_clear.json a9b163744b1c494d07ec256d0367884f9601176d data/create/advancements/recipes/create.base/crafting/appliances/linked_controller.json ab1e704db4a41a8d2cba357942f95c411a80a0c8 data/create/advancements/recipes/create.base/crafting/appliances/netherite_backtank.json +98bfe4af094326e6d82bc9d779830056ca65e827 data/create/advancements/recipes/create.base/crafting/appliances/netherite_backtank_from_netherite.json f714a7fa70ed9e9b0c145d466357cd1ef4de184b data/create/advancements/recipes/create.base/crafting/appliances/netherite_diving_boots.json +7a9ad7923d3cd805da8696530fc59745b9607e26 data/create/advancements/recipes/create.base/crafting/appliances/netherite_diving_boots_from_netherite.json 99efa64a74ad29cf3b6cc565eabdd9b7e7e0cc40 data/create/advancements/recipes/create.base/crafting/appliances/netherite_diving_helmet.json +f06e0d8259e447d27494105566d306f17ec88daa data/create/advancements/recipes/create.base/crafting/appliances/netherite_diving_helmet_from_netherite.json 4f591309b0d47e2940f60e0e43f65fdf250b0dfa data/create/advancements/recipes/create.base/crafting/appliances/schedule_clear.json c4769d7ac9c537eb4409b02883e89d0930514a8b data/create/advancements/recipes/create.base/crafting/appliances/tree_fertilizer.json bb138bedd2aec741fa54b6b52be384fdbd741249 data/create/advancements/recipes/create.base/crafting/curiosities/brown_toolbox.json @@ -2459,7 +2473,7 @@ f4e8fd79cb27e0677460f5c260b106338f2a48cc data/create/advancements/recipes/create a9f2c8a0b0b322741575ef833a461006ef2f0421 data/create/advancements/recipes/create.base/crafting/kinetics/item_drain.json 2ccfaf572456e8642a0070ea6928a082f98c63af data/create/advancements/recipes/create.base/crafting/kinetics/item_vault.json 73433a5cd400ed392796a4e543f15c42dd499fe8 data/create/advancements/recipes/create.base/crafting/kinetics/large_cogwheel.json -1c9e9888ccc51ddf76b9df0c186e74efaefb1256 data/create/advancements/recipes/create.base/crafting/kinetics/large_cogwheelfrom_little.json +dce186637ad5dacdbe352fb8a711df8e8687ccdc data/create/advancements/recipes/create.base/crafting/kinetics/large_cogwheel_from_little.json 5a1df5831fe5d2e2a6cbedcbc67216dd566e7fa0 data/create/advancements/recipes/create.base/crafting/kinetics/large_water_wheel.json eb007bb079bbe6b6aaad2ca90f5af84261e3f8ea data/create/advancements/recipes/create.base/crafting/kinetics/light_blue_seat.json 571da50fbf5f2fcd3363b3dab91e7233e0ebffa0 data/create/advancements/recipes/create.base/crafting/kinetics/light_blue_seat_from_other_seat.json @@ -2556,8 +2570,7 @@ f05bbae1e39eabb51dffa0babecf07f5de2cee3d data/create/advancements/recipes/create 3443156df3d50b283be20d466797075064ddd59d data/create/advancements/recipes/create.base/crafting/logistics/andesite_tunnel.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 -6ee9a16973001dcce16afc4c085f6dc3abbc344a data/create/advancements/recipes/create.base/crafting/logistics/content_observer.json -e20925f3c67f4a7b4acbbd61f8375efe09416edc data/create/advancements/recipes/create.base/crafting/logistics/content_observerfrom_conversion.json +34ca78bb33f7832d4953d1287533fd067fbc5227 data/create/advancements/recipes/create.base/crafting/logistics/content_observer.json cf8418ddb94198b900c6b8a281e59cee404b1b63 data/create/advancements/recipes/create.base/crafting/logistics/display_link.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 @@ -2565,7 +2578,7 @@ b9b0a8bfff61a89149d4fcadf679f753385212d0 data/create/advancements/recipes/create 76d4c5f04d0a3e6817127a828594388b18f210c4 data/create/advancements/recipes/create.base/crafting/logistics/pulse_repeater.json 0020b5c5cc6301c576d392ace447235de3e1b70c data/create/advancements/recipes/create.base/crafting/logistics/redstone_contact.json 4bb511d1407ad4e21a53f7d67daa3b0de9b6c01e data/create/advancements/recipes/create.base/crafting/logistics/redstone_link.json -5da3e404c9195ee68c25e91a4fd29ab21a8e9316 data/create/advancements/recipes/create.base/crafting/logistics/stockpile_switchfrom_conversion.json +675c980c5b9088233b8d777fa03aba4c44650c4e data/create/advancements/recipes/create.base/crafting/logistics/stockpile_switch.json 8e137e9ad4870708d4c015400f91d78cb37b4a92 data/create/advancements/recipes/create.base/crafting/materials/andesite_alloy.json fccf9862a45c8847a45b301b191aef3e138fa1d4 data/create/advancements/recipes/create.base/crafting/materials/andesite_alloy_from_block.json 6ad84f6f8b4ef85e67ebcc68c5326a22b59bc81a data/create/advancements/recipes/create.base/crafting/materials/andesite_alloy_from_zinc.json @@ -3871,8 +3884,11 @@ edf96556bb2357f54fd398fe573641afa15239b2 data/create/recipes/crafting/appliances 96feda6a0556a73851a41c6b7b7be1e8d9d5a028 data/create/recipes/crafting/appliances/filter_clear.json 75cdbd88973a8ca943ebe890153b01a344b96b01 data/create/recipes/crafting/appliances/linked_controller.json 9ef7bae26db471741096abd2b02f738202913994 data/create/recipes/crafting/appliances/netherite_backtank.json +2e3649e36c433b520cd7cb020fa40df35dfa83e9 data/create/recipes/crafting/appliances/netherite_backtank_from_netherite.json e84952517f02a7c1ba10f12e2e0e32b94f720e58 data/create/recipes/crafting/appliances/netherite_diving_boots.json +3af37967d6ef033389955f212a0c3976a8b11e1c data/create/recipes/crafting/appliances/netherite_diving_boots_from_netherite.json 664421c08143e4eb60332f53da17f70b4be83e74 data/create/recipes/crafting/appliances/netherite_diving_helmet.json +538b9154155ec7f8c1e63ff4c201eeb90936e013 data/create/recipes/crafting/appliances/netherite_diving_helmet_from_netherite.json 9c40eb131b4e8161654e00f47b654abf5ed75804 data/create/recipes/crafting/appliances/schedule_clear.json 7b5f863dda3d05a79cb85943a178eba0bd8a7dc7 data/create/recipes/crafting/appliances/slime_ball.json b159ba84428eee6ef6e23df1766f2a18f2c8a63e data/create/recipes/crafting/appliances/tree_fertilizer.json @@ -3968,7 +3984,7 @@ fe806e84a575e83da4709e1d48426bda1b6421d1 data/create/recipes/crafting/kinetics/h f4fbb11ef55f3431bd387f3f6f258513bfbc8011 data/create/recipes/crafting/kinetics/item_drain.json 8f7110447f039f80a6f5b1d854bc760c3d77da82 data/create/recipes/crafting/kinetics/item_vault.json 7f105694e02d4ce69a02740edfa4a0d0bc4f4eac data/create/recipes/crafting/kinetics/large_cogwheel.json -197c174c28f294b23ae6496b7a31c35e7e8b4771 data/create/recipes/crafting/kinetics/large_cogwheelfrom_little.json +197c174c28f294b23ae6496b7a31c35e7e8b4771 data/create/recipes/crafting/kinetics/large_cogwheel_from_little.json 5609b12dde7127965c70da2760038c456ba3cfd6 data/create/recipes/crafting/kinetics/large_water_wheel.json 0397b107ab380cd23390c96f298971a70e9bceef data/create/recipes/crafting/kinetics/light_blue_seat.json aa06f0594e1b2d31aa41bace309ed95a16529498 data/create/recipes/crafting/kinetics/light_blue_seat_from_other_seat.json @@ -4066,8 +4082,7 @@ cdef45f9fe02b031648b7b4dd4786b838f7ad105 data/create/recipes/crafting/logistics/ 660e824ab6042c145f02ffcfe95a34c38f113e19 data/create/recipes/crafting/logistics/andesite_tunnel.json 262879a029ed80e2068a4de26a6117e8847069e3 data/create/recipes/crafting/logistics/brass_funnel.json 2ae06df0357c494b53db0ddf9655c60ef2022d0b data/create/recipes/crafting/logistics/brass_tunnel.json -ce2228d3cbec4b770ba95a3940c36dfe156ebc1b data/create/recipes/crafting/logistics/content_observer.json -22d18bf94275f8e4153da4f03c657b7eaa766716 data/create/recipes/crafting/logistics/content_observerfrom_conversion.json +91cdf493edb22c012969642427dcf5c11d2f5500 data/create/recipes/crafting/logistics/content_observer.json abef83d640e02a715854ec4f7a90aa1fab8f4f5f data/create/recipes/crafting/logistics/display_link.json a32ac53848862837f3044ff9c81ed62c1134fe4f data/create/recipes/crafting/logistics/powered_latch.json 660eb73bcc66c1528cbd4d4204ad6b771f4bd721 data/create/recipes/crafting/logistics/powered_toggle_latch.json @@ -4075,7 +4090,7 @@ a32ac53848862837f3044ff9c81ed62c1134fe4f data/create/recipes/crafting/logistics/ 9f079a853c128f68f15277448bbf72dfbc212f26 data/create/recipes/crafting/logistics/pulse_repeater.json 739f0d8b7f98a5639ed37f7fb8ce474d5e6ba0c6 data/create/recipes/crafting/logistics/redstone_contact.json 8de2f5220d719feeaeab99cb526e890cdc97340d data/create/recipes/crafting/logistics/redstone_link.json -7dd23fbdd0fbd5471ed78108e6171e43db9b75f3 data/create/recipes/crafting/logistics/stockpile_switchfrom_conversion.json +cbef498e433c05b7989946ef02fcc47aa02d8a9c data/create/recipes/crafting/logistics/stockpile_switch.json 0dc99b8a8c68d6a9250c3a1167ffb565be9622ec data/create/recipes/crafting/materials/andesite_alloy.json 2bc954f42ddc6ecc9e1bbbc5ad03e3946ddaf368 data/create/recipes/crafting/materials/andesite_alloy_block.json 9531694c30fd06ff34ae081ab64b8cba192cb9c4 data/create/recipes/crafting/materials/andesite_alloy_from_block.json @@ -5286,7 +5301,7 @@ d99d5c67bdffff60789a19bd51a5c5267c75e0a4 data/create/tags/blocks/casing.json bc203f09dd7f48965d146d0bd035fb904cb75e7d data/create/tags/blocks/copycat_allow.json d4a3b66f4b763b9a2dcdea74b7273f0ae85cb335 data/create/tags/blocks/copycat_deny.json 73c2c85233075d2854d209b71ff2160308a7919c data/create/tags/blocks/fan_transparent.json -ee6d2b53d81f2bed492662b6c06f46c4f2b9ef9b data/create/tags/blocks/movable_empty_collider.json +5445d23a146003f0aa8de86643c4315d4afd4ef6 data/create/tags/blocks/movable_empty_collider.json 6e5d3b2123fbb00e7f439c091623619502551bca data/create/tags/blocks/non_movable.json 10781e8cfcbb3486327aace3aa00e437fb44b331 data/create/tags/blocks/ore_override_stone.json 760adb521c2e475a6414f97291f46c02d294fa74 data/create/tags/blocks/passive_boiler_heaters.json diff --git a/src/generated/resources/assets/create/blockstates/content_observer.json b/src/generated/resources/assets/create/blockstates/content_observer.json index e66a1472c..458e8b3d6 100644 --- a/src/generated/resources/assets/create/blockstates/content_observer.json +++ b/src/generated/resources/assets/create/blockstates/content_observer.json @@ -1,34 +1,110 @@ { "variants": { - "facing=north,powered=false": { + "facing=north,powered=false,target=floor": { + "model": "create:block/content_observer/block", + "x": 90 + }, + "facing=south,powered=false,target=floor": { + "model": "create:block/content_observer/block", + "x": 90, + "y": 180 + }, + "facing=west,powered=false,target=floor": { + "model": "create:block/content_observer/block", + "x": 90, + "y": 270 + }, + "facing=east,powered=false,target=floor": { + "model": "create:block/content_observer/block", + "x": 90, + "y": 90 + }, + "facing=north,powered=true,target=floor": { + "model": "create:block/content_observer/block_powered", + "x": 90 + }, + "facing=south,powered=true,target=floor": { + "model": "create:block/content_observer/block_powered", + "x": 90, + "y": 180 + }, + "facing=west,powered=true,target=floor": { + "model": "create:block/content_observer/block_powered", + "x": 90, + "y": 270 + }, + "facing=east,powered=true,target=floor": { + "model": "create:block/content_observer/block_powered", + "x": 90, + "y": 90 + }, + "facing=north,powered=false,target=wall": { "model": "create:block/content_observer/block" }, - "facing=south,powered=false": { + "facing=south,powered=false,target=wall": { "model": "create:block/content_observer/block", "y": 180 }, - "facing=west,powered=false": { + "facing=west,powered=false,target=wall": { "model": "create:block/content_observer/block", "y": 270 }, - "facing=east,powered=false": { + "facing=east,powered=false,target=wall": { "model": "create:block/content_observer/block", "y": 90 }, - "facing=north,powered=true": { + "facing=north,powered=true,target=wall": { "model": "create:block/content_observer/block_powered" }, - "facing=south,powered=true": { + "facing=south,powered=true,target=wall": { "model": "create:block/content_observer/block_powered", "y": 180 }, - "facing=west,powered=true": { + "facing=west,powered=true,target=wall": { "model": "create:block/content_observer/block_powered", "y": 270 }, - "facing=east,powered=true": { + "facing=east,powered=true,target=wall": { "model": "create:block/content_observer/block_powered", "y": 90 + }, + "facing=north,powered=false,target=ceiling": { + "model": "create:block/content_observer/block", + "x": 270 + }, + "facing=south,powered=false,target=ceiling": { + "model": "create:block/content_observer/block", + "x": 270, + "y": 180 + }, + "facing=west,powered=false,target=ceiling": { + "model": "create:block/content_observer/block", + "x": 270, + "y": 270 + }, + "facing=east,powered=false,target=ceiling": { + "model": "create:block/content_observer/block", + "x": 270, + "y": 90 + }, + "facing=north,powered=true,target=ceiling": { + "model": "create:block/content_observer/block_powered", + "x": 270 + }, + "facing=south,powered=true,target=ceiling": { + "model": "create:block/content_observer/block_powered", + "x": 270, + "y": 180 + }, + "facing=west,powered=true,target=ceiling": { + "model": "create:block/content_observer/block_powered", + "x": 270, + "y": 270 + }, + "facing=east,powered=true,target=ceiling": { + "model": "create:block/content_observer/block_powered", + "x": 270, + "y": 90 } } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/stockpile_switch.json b/src/generated/resources/assets/create/blockstates/stockpile_switch.json index c5f9e6ae3..f270ea11c 100644 --- a/src/generated/resources/assets/create/blockstates/stockpile_switch.json +++ b/src/generated/resources/assets/create/blockstates/stockpile_switch.json @@ -1,108 +1,273 @@ { "variants": { - "facing=north,indicator=0": { - "model": "create:block/stockpile_switch_0" + "facing=north,level=0,target=floor": { + "model": "create:threshold_switch/block_floor_0" }, - "facing=south,indicator=0": { - "model": "create:block/stockpile_switch_0", + "facing=south,level=0,target=floor": { + "model": "create:threshold_switch/block_floor_0", "y": 180 }, - "facing=west,indicator=0": { - "model": "create:block/stockpile_switch_0", + "facing=west,level=0,target=floor": { + "model": "create:threshold_switch/block_floor_0", "y": 270 }, - "facing=east,indicator=0": { - "model": "create:block/stockpile_switch_0", + "facing=east,level=0,target=floor": { + "model": "create:threshold_switch/block_floor_0", "y": 90 }, - "facing=north,indicator=1": { - "model": "create:block/stockpile_switch_1" + "facing=north,level=1,target=floor": { + "model": "create:threshold_switch/block_floor_1" }, - "facing=south,indicator=1": { - "model": "create:block/stockpile_switch_1", + "facing=south,level=1,target=floor": { + "model": "create:threshold_switch/block_floor_1", "y": 180 }, - "facing=west,indicator=1": { - "model": "create:block/stockpile_switch_1", + "facing=west,level=1,target=floor": { + "model": "create:threshold_switch/block_floor_1", "y": 270 }, - "facing=east,indicator=1": { - "model": "create:block/stockpile_switch_1", + "facing=east,level=1,target=floor": { + "model": "create:threshold_switch/block_floor_1", "y": 90 }, - "facing=north,indicator=2": { - "model": "create:block/stockpile_switch_2" + "facing=north,level=2,target=floor": { + "model": "create:threshold_switch/block_floor_2" }, - "facing=south,indicator=2": { - "model": "create:block/stockpile_switch_2", + "facing=south,level=2,target=floor": { + "model": "create:threshold_switch/block_floor_2", "y": 180 }, - "facing=west,indicator=2": { - "model": "create:block/stockpile_switch_2", + "facing=west,level=2,target=floor": { + "model": "create:threshold_switch/block_floor_2", "y": 270 }, - "facing=east,indicator=2": { - "model": "create:block/stockpile_switch_2", + "facing=east,level=2,target=floor": { + "model": "create:threshold_switch/block_floor_2", "y": 90 }, - "facing=north,indicator=3": { - "model": "create:block/stockpile_switch_3" + "facing=north,level=3,target=floor": { + "model": "create:threshold_switch/block_floor_3" }, - "facing=south,indicator=3": { - "model": "create:block/stockpile_switch_3", + "facing=south,level=3,target=floor": { + "model": "create:threshold_switch/block_floor_3", "y": 180 }, - "facing=west,indicator=3": { - "model": "create:block/stockpile_switch_3", + "facing=west,level=3,target=floor": { + "model": "create:threshold_switch/block_floor_3", "y": 270 }, - "facing=east,indicator=3": { - "model": "create:block/stockpile_switch_3", + "facing=east,level=3,target=floor": { + "model": "create:threshold_switch/block_floor_3", "y": 90 }, - "facing=north,indicator=4": { - "model": "create:block/stockpile_switch_4" + "facing=north,level=4,target=floor": { + "model": "create:threshold_switch/block_floor_4" }, - "facing=south,indicator=4": { - "model": "create:block/stockpile_switch_4", + "facing=south,level=4,target=floor": { + "model": "create:threshold_switch/block_floor_4", "y": 180 }, - "facing=west,indicator=4": { - "model": "create:block/stockpile_switch_4", + "facing=west,level=4,target=floor": { + "model": "create:threshold_switch/block_floor_4", "y": 270 }, - "facing=east,indicator=4": { - "model": "create:block/stockpile_switch_4", + "facing=east,level=4,target=floor": { + "model": "create:threshold_switch/block_floor_4", "y": 90 }, - "facing=north,indicator=5": { - "model": "create:block/stockpile_switch_5" + "facing=north,level=5,target=floor": { + "model": "create:threshold_switch/block_floor_5" }, - "facing=south,indicator=5": { - "model": "create:block/stockpile_switch_5", + "facing=south,level=5,target=floor": { + "model": "create:threshold_switch/block_floor_5", "y": 180 }, - "facing=west,indicator=5": { - "model": "create:block/stockpile_switch_5", + "facing=west,level=5,target=floor": { + "model": "create:threshold_switch/block_floor_5", "y": 270 }, - "facing=east,indicator=5": { - "model": "create:block/stockpile_switch_5", + "facing=east,level=5,target=floor": { + "model": "create:threshold_switch/block_floor_5", "y": 90 }, - "facing=north,indicator=6": { - "model": "create:block/stockpile_switch_6" + "facing=north,level=0,target=wall": { + "model": "create:threshold_switch/block_wall_0" }, - "facing=south,indicator=6": { - "model": "create:block/stockpile_switch_6", + "facing=south,level=0,target=wall": { + "model": "create:threshold_switch/block_wall_0", "y": 180 }, - "facing=west,indicator=6": { - "model": "create:block/stockpile_switch_6", + "facing=west,level=0,target=wall": { + "model": "create:threshold_switch/block_wall_0", "y": 270 }, - "facing=east,indicator=6": { - "model": "create:block/stockpile_switch_6", + "facing=east,level=0,target=wall": { + "model": "create:threshold_switch/block_wall_0", + "y": 90 + }, + "facing=north,level=1,target=wall": { + "model": "create:threshold_switch/block_wall_1" + }, + "facing=south,level=1,target=wall": { + "model": "create:threshold_switch/block_wall_1", + "y": 180 + }, + "facing=west,level=1,target=wall": { + "model": "create:threshold_switch/block_wall_1", + "y": 270 + }, + "facing=east,level=1,target=wall": { + "model": "create:threshold_switch/block_wall_1", + "y": 90 + }, + "facing=north,level=2,target=wall": { + "model": "create:threshold_switch/block_wall_2" + }, + "facing=south,level=2,target=wall": { + "model": "create:threshold_switch/block_wall_2", + "y": 180 + }, + "facing=west,level=2,target=wall": { + "model": "create:threshold_switch/block_wall_2", + "y": 270 + }, + "facing=east,level=2,target=wall": { + "model": "create:threshold_switch/block_wall_2", + "y": 90 + }, + "facing=north,level=3,target=wall": { + "model": "create:threshold_switch/block_wall_3" + }, + "facing=south,level=3,target=wall": { + "model": "create:threshold_switch/block_wall_3", + "y": 180 + }, + "facing=west,level=3,target=wall": { + "model": "create:threshold_switch/block_wall_3", + "y": 270 + }, + "facing=east,level=3,target=wall": { + "model": "create:threshold_switch/block_wall_3", + "y": 90 + }, + "facing=north,level=4,target=wall": { + "model": "create:threshold_switch/block_wall_4" + }, + "facing=south,level=4,target=wall": { + "model": "create:threshold_switch/block_wall_4", + "y": 180 + }, + "facing=west,level=4,target=wall": { + "model": "create:threshold_switch/block_wall_4", + "y": 270 + }, + "facing=east,level=4,target=wall": { + "model": "create:threshold_switch/block_wall_4", + "y": 90 + }, + "facing=north,level=5,target=wall": { + "model": "create:threshold_switch/block_wall_5" + }, + "facing=south,level=5,target=wall": { + "model": "create:threshold_switch/block_wall_5", + "y": 180 + }, + "facing=west,level=5,target=wall": { + "model": "create:threshold_switch/block_wall_5", + "y": 270 + }, + "facing=east,level=5,target=wall": { + "model": "create:threshold_switch/block_wall_5", + "y": 90 + }, + "facing=north,level=0,target=ceiling": { + "model": "create:threshold_switch/block_ceiling_0" + }, + "facing=south,level=0,target=ceiling": { + "model": "create:threshold_switch/block_ceiling_0", + "y": 180 + }, + "facing=west,level=0,target=ceiling": { + "model": "create:threshold_switch/block_ceiling_0", + "y": 270 + }, + "facing=east,level=0,target=ceiling": { + "model": "create:threshold_switch/block_ceiling_0", + "y": 90 + }, + "facing=north,level=1,target=ceiling": { + "model": "create:threshold_switch/block_ceiling_1" + }, + "facing=south,level=1,target=ceiling": { + "model": "create:threshold_switch/block_ceiling_1", + "y": 180 + }, + "facing=west,level=1,target=ceiling": { + "model": "create:threshold_switch/block_ceiling_1", + "y": 270 + }, + "facing=east,level=1,target=ceiling": { + "model": "create:threshold_switch/block_ceiling_1", + "y": 90 + }, + "facing=north,level=2,target=ceiling": { + "model": "create:threshold_switch/block_ceiling_2" + }, + "facing=south,level=2,target=ceiling": { + "model": "create:threshold_switch/block_ceiling_2", + "y": 180 + }, + "facing=west,level=2,target=ceiling": { + "model": "create:threshold_switch/block_ceiling_2", + "y": 270 + }, + "facing=east,level=2,target=ceiling": { + "model": "create:threshold_switch/block_ceiling_2", + "y": 90 + }, + "facing=north,level=3,target=ceiling": { + "model": "create:threshold_switch/block_ceiling_3" + }, + "facing=south,level=3,target=ceiling": { + "model": "create:threshold_switch/block_ceiling_3", + "y": 180 + }, + "facing=west,level=3,target=ceiling": { + "model": "create:threshold_switch/block_ceiling_3", + "y": 270 + }, + "facing=east,level=3,target=ceiling": { + "model": "create:threshold_switch/block_ceiling_3", + "y": 90 + }, + "facing=north,level=4,target=ceiling": { + "model": "create:threshold_switch/block_ceiling_4" + }, + "facing=south,level=4,target=ceiling": { + "model": "create:threshold_switch/block_ceiling_4", + "y": 180 + }, + "facing=west,level=4,target=ceiling": { + "model": "create:threshold_switch/block_ceiling_4", + "y": 270 + }, + "facing=east,level=4,target=ceiling": { + "model": "create:threshold_switch/block_ceiling_4", + "y": 90 + }, + "facing=north,level=5,target=ceiling": { + "model": "create:threshold_switch/block_ceiling_5" + }, + "facing=south,level=5,target=ceiling": { + "model": "create:threshold_switch/block_ceiling_5", + "y": 180 + }, + "facing=west,level=5,target=ceiling": { + "model": "create:threshold_switch/block_ceiling_5", + "y": 270 + }, + "facing=east,level=5,target=ceiling": { + "model": "create:threshold_switch/block_ceiling_5", "y": 90 } } diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index 8190a4e7a..01df8f8fc 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -56,7 +56,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.content_observer": "\u0279\u01DD\u028C\u0279\u01DDsqO \u0287\u0279\u0250\u026FS", "block.create.contraption_controls": "s\u05DFo\u0279\u0287uo\u0186 uo\u0131\u0287d\u0250\u0279\u0287uo\u0186", "block.create.controller_rail": "\u05DF\u0131\u0250\u1D1A \u0279\u01DD\u05DF\u05DFo\u0279\u0287uo\u0186", "block.create.controls": "s\u05DFo\u0279\u0287uo\u0186 u\u0131\u0250\u0279\u27D8", @@ -514,7 +514,7 @@ "block.create.steam_whistle_extension": "uo\u0131su\u01DD\u0287x\u018E \u01DD\u05DF\u0287s\u0131\u0265M \u026F\u0250\u01DD\u0287S", "block.create.sticker": "\u0279\u01DD\u029E\u0254\u0131\u0287S", "block.create.sticky_mechanical_piston": "uo\u0287s\u0131\u0500 \u05DF\u0250\u0254\u0131u\u0250\u0265\u0254\u01DDW \u028E\u029E\u0254\u0131\u0287S", - "block.create.stockpile_switch": "\u0265\u0254\u0287\u0131\u028DS \u01DD\u05DF\u0131d\u029E\u0254o\u0287S", + "block.create.stockpile_switch": "\u0265\u0254\u0287\u0131\u028DS p\u05DFo\u0265s\u01DD\u0279\u0265\u27D8", "block.create.stressometer": "\u0279\u01DD\u0287\u01DD\u026Foss\u01DD\u0279\u0287S", "block.create.tiled_glass": "ss\u0250\u05DF\u2141 p\u01DD\u05DF\u0131\u27D8", "block.create.tiled_glass_pane": "\u01DDu\u0250\u0500 ss\u0250\u05DF\u2141 p\u01DD\u05DF\u0131\u27D8", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 8e8696543..937ca32a8 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -59,7 +59,7 @@ "block.create.clockwork_bearing": "Clockwork Bearing", "block.create.clutch": "Clutch", "block.create.cogwheel": "Cogwheel", - "block.create.content_observer": "Content Observer", + "block.create.content_observer": "Smart Observer", "block.create.contraption_controls": "Contraption Controls", "block.create.controller_rail": "Controller Rail", "block.create.controls": "Train Controls", @@ -517,7 +517,7 @@ "block.create.steam_whistle_extension": "Steam Whistle Extension", "block.create.sticker": "Sticker", "block.create.sticky_mechanical_piston": "Sticky Mechanical Piston", - "block.create.stockpile_switch": "Stockpile Switch", + "block.create.stockpile_switch": "Threshold Switch", "block.create.stressometer": "Stressometer", "block.create.tiled_glass": "Tiled Glass", "block.create.tiled_glass_pane": "Tiled Glass Pane", @@ -1143,10 +1143,10 @@ "create.gui.contraptions.network_overstressed": "It appears that this contraption is _overstressed_. Add more sources or _slow_ _down_ the components with a high _stress_ _impact_.", "create.gui.adjustable_crate.title": "Adjustable Crate", "create.gui.adjustable_crate.storageSpace": "Storage Space", - "create.gui.stockpile_switch.title": "Stockpile Switch", - "create.gui.stockpile_switch.invert_signal": "Invert Signal", - "create.gui.stockpile_switch.move_to_lower_at": "Move to lower lane at %1$s%%", - "create.gui.stockpile_switch.move_to_upper_at": "Move to upper lane at %1$s%%", + "create.gui.threshold_switch.title": "Threshold Switch", + "create.gui.threshold_switch.invert_signal": "Invert Signal", + "create.gui.threshold_switch.move_to_lower_at": "Move to lower lane at %1$s%%", + "create.gui.threshold_switch.move_to_upper_at": "Move to upper lane at %1$s%%", "create.gui.sequenced_gearshift.title": "Sequenced Gearshift", "create.gui.sequenced_gearshift.instruction": "Instruction", "create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "Turn by angle", diff --git a/src/generated/resources/assets/create/models/block/stockpile_switch_0.json b/src/generated/resources/assets/create/models/block/stockpile_switch_0.json deleted file mode 100644 index 4d1b9b70e..000000000 --- a/src/generated/resources/assets/create/models/block/stockpile_switch_0.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/stockpile_switch", - "textures": { - "indicator": "create:block/indicator/0" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/stockpile_switch_1.json b/src/generated/resources/assets/create/models/block/stockpile_switch_1.json deleted file mode 100644 index 288dc2927..000000000 --- a/src/generated/resources/assets/create/models/block/stockpile_switch_1.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/stockpile_switch", - "textures": { - "indicator": "create:block/indicator/1" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/stockpile_switch_2.json b/src/generated/resources/assets/create/models/block/stockpile_switch_2.json deleted file mode 100644 index 8b0da8a21..000000000 --- a/src/generated/resources/assets/create/models/block/stockpile_switch_2.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/stockpile_switch", - "textures": { - "indicator": "create:block/indicator/2" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/stockpile_switch_3.json b/src/generated/resources/assets/create/models/block/stockpile_switch_3.json deleted file mode 100644 index fc3e40132..000000000 --- a/src/generated/resources/assets/create/models/block/stockpile_switch_3.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/stockpile_switch", - "textures": { - "indicator": "create:block/indicator/3" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/stockpile_switch_4.json b/src/generated/resources/assets/create/models/block/stockpile_switch_4.json deleted file mode 100644 index 2194e2c69..000000000 --- a/src/generated/resources/assets/create/models/block/stockpile_switch_4.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/stockpile_switch", - "textures": { - "indicator": "create:block/indicator/4" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/stockpile_switch_5.json b/src/generated/resources/assets/create/models/block/stockpile_switch_5.json deleted file mode 100644 index eb0f8298c..000000000 --- a/src/generated/resources/assets/create/models/block/stockpile_switch_5.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/stockpile_switch", - "textures": { - "indicator": "create:block/indicator/5" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/stockpile_switch_6.json b/src/generated/resources/assets/create/models/block/stockpile_switch_6.json deleted file mode 100644 index 58a83e646..000000000 --- a/src/generated/resources/assets/create/models/block/stockpile_switch_6.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/stockpile_switch", - "textures": { - "indicator": "create:block/indicator/6" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/stockpile_switch.json b/src/generated/resources/assets/create/models/item/stockpile_switch.json index 3e623a7d5..8455dde8b 100644 --- a/src/generated/resources/assets/create/models/item/stockpile_switch.json +++ b/src/generated/resources/assets/create/models/item/stockpile_switch.json @@ -1,3 +1,3 @@ { - "parent": "create:block/stockpile_switch" + "parent": "create:block/threshold_switch/block_wall" } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/threshold_switch/block_ceiling_0.json b/src/generated/resources/assets/create/models/threshold_switch/block_ceiling_0.json new file mode 100644 index 000000000..f5da60e99 --- /dev/null +++ b/src/generated/resources/assets/create/models/threshold_switch/block_ceiling_0.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/threshold_switch/block_ceiling", + "textures": { + "level": "create:block/threshold_switch/level_0" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/threshold_switch/block_ceiling_1.json b/src/generated/resources/assets/create/models/threshold_switch/block_ceiling_1.json new file mode 100644 index 000000000..77d321740 --- /dev/null +++ b/src/generated/resources/assets/create/models/threshold_switch/block_ceiling_1.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/threshold_switch/block_ceiling", + "textures": { + "level": "create:block/threshold_switch/level_1" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/threshold_switch/block_ceiling_2.json b/src/generated/resources/assets/create/models/threshold_switch/block_ceiling_2.json new file mode 100644 index 000000000..041c46a2d --- /dev/null +++ b/src/generated/resources/assets/create/models/threshold_switch/block_ceiling_2.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/threshold_switch/block_ceiling", + "textures": { + "level": "create:block/threshold_switch/level_2" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/threshold_switch/block_ceiling_3.json b/src/generated/resources/assets/create/models/threshold_switch/block_ceiling_3.json new file mode 100644 index 000000000..8ccaf704a --- /dev/null +++ b/src/generated/resources/assets/create/models/threshold_switch/block_ceiling_3.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/threshold_switch/block_ceiling", + "textures": { + "level": "create:block/threshold_switch/level_3" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/threshold_switch/block_ceiling_4.json b/src/generated/resources/assets/create/models/threshold_switch/block_ceiling_4.json new file mode 100644 index 000000000..fc36e6d52 --- /dev/null +++ b/src/generated/resources/assets/create/models/threshold_switch/block_ceiling_4.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/threshold_switch/block_ceiling", + "textures": { + "level": "create:block/threshold_switch/level_4" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/threshold_switch/block_ceiling_5.json b/src/generated/resources/assets/create/models/threshold_switch/block_ceiling_5.json new file mode 100644 index 000000000..b708eae93 --- /dev/null +++ b/src/generated/resources/assets/create/models/threshold_switch/block_ceiling_5.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/threshold_switch/block_ceiling", + "textures": { + "level": "create:block/threshold_switch/level_5" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/threshold_switch/block_floor_0.json b/src/generated/resources/assets/create/models/threshold_switch/block_floor_0.json new file mode 100644 index 000000000..2fff31978 --- /dev/null +++ b/src/generated/resources/assets/create/models/threshold_switch/block_floor_0.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/threshold_switch/block_floor", + "textures": { + "level": "create:block/threshold_switch/level_0" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/threshold_switch/block_floor_1.json b/src/generated/resources/assets/create/models/threshold_switch/block_floor_1.json new file mode 100644 index 000000000..9ecd2edad --- /dev/null +++ b/src/generated/resources/assets/create/models/threshold_switch/block_floor_1.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/threshold_switch/block_floor", + "textures": { + "level": "create:block/threshold_switch/level_1" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/threshold_switch/block_floor_2.json b/src/generated/resources/assets/create/models/threshold_switch/block_floor_2.json new file mode 100644 index 000000000..f9fa8d137 --- /dev/null +++ b/src/generated/resources/assets/create/models/threshold_switch/block_floor_2.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/threshold_switch/block_floor", + "textures": { + "level": "create:block/threshold_switch/level_2" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/threshold_switch/block_floor_3.json b/src/generated/resources/assets/create/models/threshold_switch/block_floor_3.json new file mode 100644 index 000000000..116663358 --- /dev/null +++ b/src/generated/resources/assets/create/models/threshold_switch/block_floor_3.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/threshold_switch/block_floor", + "textures": { + "level": "create:block/threshold_switch/level_3" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/threshold_switch/block_floor_4.json b/src/generated/resources/assets/create/models/threshold_switch/block_floor_4.json new file mode 100644 index 000000000..b2e82e522 --- /dev/null +++ b/src/generated/resources/assets/create/models/threshold_switch/block_floor_4.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/threshold_switch/block_floor", + "textures": { + "level": "create:block/threshold_switch/level_4" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/threshold_switch/block_floor_5.json b/src/generated/resources/assets/create/models/threshold_switch/block_floor_5.json new file mode 100644 index 000000000..7a8bc7ac3 --- /dev/null +++ b/src/generated/resources/assets/create/models/threshold_switch/block_floor_5.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/threshold_switch/block_floor", + "textures": { + "level": "create:block/threshold_switch/level_5" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/threshold_switch/block_wall_0.json b/src/generated/resources/assets/create/models/threshold_switch/block_wall_0.json new file mode 100644 index 000000000..e602f46ef --- /dev/null +++ b/src/generated/resources/assets/create/models/threshold_switch/block_wall_0.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/threshold_switch/block_wall", + "textures": { + "level": "create:block/threshold_switch/level_0" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/threshold_switch/block_wall_1.json b/src/generated/resources/assets/create/models/threshold_switch/block_wall_1.json new file mode 100644 index 000000000..f4fa237f5 --- /dev/null +++ b/src/generated/resources/assets/create/models/threshold_switch/block_wall_1.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/threshold_switch/block_wall", + "textures": { + "level": "create:block/threshold_switch/level_1" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/threshold_switch/block_wall_2.json b/src/generated/resources/assets/create/models/threshold_switch/block_wall_2.json new file mode 100644 index 000000000..7c489af9c --- /dev/null +++ b/src/generated/resources/assets/create/models/threshold_switch/block_wall_2.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/threshold_switch/block_wall", + "textures": { + "level": "create:block/threshold_switch/level_2" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/threshold_switch/block_wall_3.json b/src/generated/resources/assets/create/models/threshold_switch/block_wall_3.json new file mode 100644 index 000000000..1ac6d64dd --- /dev/null +++ b/src/generated/resources/assets/create/models/threshold_switch/block_wall_3.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/threshold_switch/block_wall", + "textures": { + "level": "create:block/threshold_switch/level_3" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/threshold_switch/block_wall_4.json b/src/generated/resources/assets/create/models/threshold_switch/block_wall_4.json new file mode 100644 index 000000000..79047ddc6 --- /dev/null +++ b/src/generated/resources/assets/create/models/threshold_switch/block_wall_4.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/threshold_switch/block_wall", + "textures": { + "level": "create:block/threshold_switch/level_4" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/threshold_switch/block_wall_5.json b/src/generated/resources/assets/create/models/threshold_switch/block_wall_5.json new file mode 100644 index 000000000..8e5ea3d59 --- /dev/null +++ b/src/generated/resources/assets/create/models/threshold_switch/block_wall_5.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/threshold_switch/block_wall", + "textures": { + "level": "create:block/threshold_switch/level_5" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/stockpile_switchfrom_conversion.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/netherite_backtank_from_netherite.json similarity index 70% rename from src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/stockpile_switchfrom_conversion.json rename to src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/netherite_backtank_from_netherite.json index 47a661215..b65a4ed69 100644 --- a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/stockpile_switchfrom_conversion.json +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/netherite_backtank_from_netherite.json @@ -2,7 +2,7 @@ "parent": "minecraft:recipes/root", "rewards": { "recipes": [ - "create:crafting/logistics/stockpile_switchfrom_conversion" + "create:crafting/appliances/netherite_backtank_from_netherite" ] }, "criteria": { @@ -12,7 +12,7 @@ "items": [ { "items": [ - "create:content_observer" + "minecraft:netherite_chestplate" ] } ] @@ -21,7 +21,7 @@ "has_the_recipe": { "trigger": "minecraft:recipe_unlocked", "conditions": { - "recipe": "create:crafting/logistics/stockpile_switchfrom_conversion" + "recipe": "create:crafting/appliances/netherite_backtank_from_netherite" } } }, diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/netherite_diving_boots_from_netherite.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/netherite_diving_boots_from_netherite.json new file mode 100644 index 000000000..0a74df979 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/netherite_diving_boots_from_netherite.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/appliances/netherite_diving_boots_from_netherite" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "items": [ + "minecraft:netherite_boots" + ] + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/appliances/netherite_diving_boots_from_netherite" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/netherite_diving_helmet_from_netherite.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/netherite_diving_helmet_from_netherite.json new file mode 100644 index 000000000..ec5ee2750 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/netherite_diving_helmet_from_netherite.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/appliances/netherite_diving_helmet_from_netherite" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "items": [ + "minecraft:netherite_helmet" + ] + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/appliances/netherite_diving_helmet_from_netherite" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/large_cogwheelfrom_little.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/large_cogwheel_from_little.json similarity index 79% rename from src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/large_cogwheelfrom_little.json rename to src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/large_cogwheel_from_little.json index d711440e9..f0735db63 100644 --- a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/large_cogwheelfrom_little.json +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/large_cogwheel_from_little.json @@ -2,7 +2,7 @@ "parent": "minecraft:recipes/root", "rewards": { "recipes": [ - "create:crafting/kinetics/large_cogwheelfrom_little" + "create:crafting/kinetics/large_cogwheel_from_little" ] }, "criteria": { @@ -21,7 +21,7 @@ "has_the_recipe": { "trigger": "minecraft:recipe_unlocked", "conditions": { - "recipe": "create:crafting/kinetics/large_cogwheelfrom_little" + "recipe": "create:crafting/kinetics/large_cogwheel_from_little" } } }, diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/content_observer.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/content_observer.json index 0d7b86747..3d2320e59 100644 --- a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/content_observer.json +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/content_observer.json @@ -12,7 +12,7 @@ "items": [ { "items": [ - "create:belt_connector" + "create:brass_casing" ] } ] diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/content_observerfrom_conversion.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/stockpile_switch.json similarity index 72% rename from src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/content_observerfrom_conversion.json rename to src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/stockpile_switch.json index 69c294f67..ad1c6d7a2 100644 --- a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/content_observerfrom_conversion.json +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/stockpile_switch.json @@ -2,7 +2,7 @@ "parent": "minecraft:recipes/root", "rewards": { "recipes": [ - "create:crafting/logistics/content_observerfrom_conversion" + "create:crafting/logistics/stockpile_switch" ] }, "criteria": { @@ -12,7 +12,7 @@ "items": [ { "items": [ - "create:stockpile_switch" + "create:brass_casing" ] } ] @@ -21,7 +21,7 @@ "has_the_recipe": { "trigger": "minecraft:recipe_unlocked", "conditions": { - "recipe": "create:crafting/logistics/content_observerfrom_conversion" + "recipe": "create:crafting/logistics/stockpile_switch" } } }, diff --git a/src/generated/resources/data/create/recipes/crafting/appliances/netherite_backtank_from_netherite.json b/src/generated/resources/data/create/recipes/crafting/appliances/netherite_backtank_from_netherite.json new file mode 100644 index 000000000..eb05b3617 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/appliances/netherite_backtank_from_netherite.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smithing", + "base": { + "item": "minecraft:netherite_chestplate" + }, + "addition": { + "item": "create:copper_backtank" + }, + "result": { + "item": "create:netherite_backtank" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/appliances/netherite_diving_boots_from_netherite.json b/src/generated/resources/data/create/recipes/crafting/appliances/netherite_diving_boots_from_netherite.json new file mode 100644 index 000000000..f1d242feb --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/appliances/netherite_diving_boots_from_netherite.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smithing", + "base": { + "item": "minecraft:netherite_boots" + }, + "addition": { + "item": "create:copper_diving_boots" + }, + "result": { + "item": "create:netherite_diving_boots" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/appliances/netherite_diving_helmet_from_netherite.json b/src/generated/resources/data/create/recipes/crafting/appliances/netherite_diving_helmet_from_netherite.json new file mode 100644 index 000000000..bc034e266 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/appliances/netherite_diving_helmet_from_netherite.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smithing", + "base": { + "item": "minecraft:netherite_helmet" + }, + "addition": { + "item": "create:copper_diving_helmet" + }, + "result": { + "item": "create:netherite_diving_helmet" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/large_cogwheelfrom_little.json b/src/generated/resources/data/create/recipes/crafting/kinetics/large_cogwheel_from_little.json similarity index 100% rename from src/generated/resources/data/create/recipes/crafting/kinetics/large_cogwheelfrom_little.json rename to src/generated/resources/data/create/recipes/crafting/kinetics/large_cogwheel_from_little.json diff --git a/src/generated/resources/data/create/recipes/crafting/logistics/content_observer.json b/src/generated/resources/data/create/recipes/crafting/logistics/content_observer.json index 6e21a750f..ab4e7a50c 100644 --- a/src/generated/resources/data/create/recipes/crafting/logistics/content_observer.json +++ b/src/generated/resources/data/create/recipes/crafting/logistics/content_observer.json @@ -1,9 +1,9 @@ { "type": "minecraft:crafting_shaped", "pattern": [ - "I", + "R", "B", - "R" + "I" ], "key": { "B": { @@ -13,7 +13,7 @@ "item": "create:electron_tube" }, "I": { - "item": "minecraft:comparator" + "item": "minecraft:observer" } }, "result": { diff --git a/src/generated/resources/data/create/recipes/crafting/logistics/content_observerfrom_conversion.json b/src/generated/resources/data/create/recipes/crafting/logistics/content_observerfrom_conversion.json deleted file mode 100644 index d6d558236..000000000 --- a/src/generated/resources/data/create/recipes/crafting/logistics/content_observerfrom_conversion.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "item": "create:stockpile_switch" - } - ], - "result": { - "item": "create:content_observer" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/logistics/stockpile_switch.json b/src/generated/resources/data/create/recipes/crafting/logistics/stockpile_switch.json new file mode 100644 index 000000000..00f52e58e --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/logistics/stockpile_switch.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "R", + "B", + "I" + ], + "key": { + "B": { + "item": "create:brass_casing" + }, + "R": { + "item": "create:electron_tube" + }, + "I": { + "item": "minecraft:comparator" + } + }, + "result": { + "item": "create:stockpile_switch" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/logistics/stockpile_switchfrom_conversion.json b/src/generated/resources/data/create/recipes/crafting/logistics/stockpile_switchfrom_conversion.json deleted file mode 100644 index 34cb0c277..000000000 --- a/src/generated/resources/data/create/recipes/crafting/logistics/stockpile_switchfrom_conversion.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "item": "create:content_observer" - } - ], - "result": { - "item": "create:stockpile_switch" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/create/tags/blocks/movable_empty_collider.json b/src/generated/resources/data/create/tags/blocks/movable_empty_collider.json index e31c42d8d..527ad16b9 100644 --- a/src/generated/resources/data/create/tags/blocks/movable_empty_collider.json +++ b/src/generated/resources/data/create/tags/blocks/movable_empty_collider.json @@ -3,6 +3,8 @@ "values": [ "minecraft:cobweb", "minecraft:powder_snow", + "minecraft:tripwire", + "minecraft:tripwire_hook", "#minecraft:fence_gates" ] } \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/AllBlockEntityTypes.java b/src/main/java/com/simibubi/create/AllBlockEntityTypes.java index 7364e9513..767d7ec82 100644 --- a/src/main/java/com/simibubi/create/AllBlockEntityTypes.java +++ b/src/main/java/com/simibubi/create/AllBlockEntityTypes.java @@ -186,11 +186,11 @@ import com.simibubi.create.content.logistics.block.mechanicalArm.ArmRenderer; import com.simibubi.create.content.logistics.block.redstone.AnalogLeverBlockEntity; import com.simibubi.create.content.logistics.block.redstone.AnalogLeverInstance; import com.simibubi.create.content.logistics.block.redstone.AnalogLeverRenderer; -import com.simibubi.create.content.logistics.block.redstone.ContentObserverBlockEntity; import com.simibubi.create.content.logistics.block.redstone.NixieTubeBlockEntity; import com.simibubi.create.content.logistics.block.redstone.NixieTubeRenderer; import com.simibubi.create.content.logistics.block.redstone.RedstoneLinkBlockEntity; -import com.simibubi.create.content.logistics.block.redstone.StockpileSwitchBlockEntity; +import com.simibubi.create.content.logistics.block.redstone.SmartObserverBlockEntity; +import com.simibubi.create.content.logistics.block.redstone.ThresholdSwitchBlockEntity; import com.simibubi.create.content.logistics.block.vault.ItemVaultBlockEntity; import com.simibubi.create.content.logistics.item.LecternControllerBlockEntity; import com.simibubi.create.content.logistics.item.LecternControllerRenderer; @@ -742,9 +742,9 @@ public class AllBlockEntityTypes { .renderer(() -> DisplayLinkRenderer::new) .register(); - public static final BlockEntityEntry STOCKPILE_SWITCH = REGISTRATE - .blockEntity("stockpile_switch", StockpileSwitchBlockEntity::new) - .validBlocks(AllBlocks.STOCKPILE_SWITCH) + public static final BlockEntityEntry THRESHOLD_SWITCH = REGISTRATE + .blockEntity("stockpile_switch", ThresholdSwitchBlockEntity::new) + .validBlocks(AllBlocks.THRESHOLD_SWITCH) .renderer(() -> SmartBlockEntityRenderer::new) .register(); @@ -775,9 +775,9 @@ public class AllBlockEntityTypes { .renderer(() -> FunnelRenderer::new) .register(); - public static final BlockEntityEntry CONTENT_OBSERVER = REGISTRATE - .blockEntity("content_observer", ContentObserverBlockEntity::new) - .validBlocks(AllBlocks.CONTENT_OBSERVER) + public static final BlockEntityEntry SMART_OBSERVER = REGISTRATE + .blockEntity("content_observer", SmartObserverBlockEntity::new) + .validBlocks(AllBlocks.SMART_OBSERVER) .renderer(() -> SmartBlockEntityRenderer::new) .register(); diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index babc77b93..16da50350 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -215,7 +215,6 @@ 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; @@ -223,7 +222,10 @@ import com.simibubi.create.content.logistics.block.redstone.RedstoneContactItem; import com.simibubi.create.content.logistics.block.redstone.RedstoneLinkBlock; import com.simibubi.create.content.logistics.block.redstone.RedstoneLinkGenerator; import com.simibubi.create.content.logistics.block.redstone.RoseQuartzLampBlock; -import com.simibubi.create.content.logistics.block.redstone.StockpileSwitchBlock; +import com.simibubi.create.content.logistics.block.redstone.SmartObserverBlock; +import com.simibubi.create.content.logistics.block.redstone.SmartObserverGenerator; +import com.simibubi.create.content.logistics.block.redstone.ThresholdSwitchBlock; +import com.simibubi.create.content.logistics.block.redstone.ThresholdSwitchGenerator; import com.simibubi.create.content.logistics.block.vault.ItemVaultBlock; import com.simibubi.create.content.logistics.block.vault.ItemVaultCTBehaviour; import com.simibubi.create.content.logistics.block.vault.ItemVaultItem; @@ -1814,29 +1816,33 @@ public class AllBlocks { .onRegister(connectedTextures(BrassTunnelCTBehaviour::new)) .register(); - public static final BlockEntry CONTENT_OBSERVER = - REGISTRATE.block("content_observer", ContentObserverBlock::new) + public static final BlockEntry SMART_OBSERVER = + REGISTRATE.block("content_observer", SmartObserverBlock::new) .initialProperties(SharedProperties::stone) .properties(p -> p.color(MaterialColor.TERRACOTTA_BROWN)) + .properties(p -> p.noOcclusion()) .transform(axeOrPickaxe()) - .blockstate((c, p) -> p.horizontalBlock(c.get(), AssetLookup.forPowered(c, p))) + .blockstate(new SmartObserverGenerator()::generate) .onRegister(assignDataBehaviour(new ItemCountDisplaySource(), "count_items")) .onRegister(assignDataBehaviour(new ItemListDisplaySource(), "list_items")) .onRegister(assignDataBehaviour(new FluidAmountDisplaySource(), "count_fluids")) .onRegister(assignDataBehaviour(new FluidListDisplaySource(), "list_fluids")) + .lang("Smart Observer") .item() .transform(customItemModel("_", "block")) .register(); - public static final BlockEntry STOCKPILE_SWITCH = - REGISTRATE.block("stockpile_switch", StockpileSwitchBlock::new) + public static final BlockEntry THRESHOLD_SWITCH = + REGISTRATE.block("stockpile_switch", ThresholdSwitchBlock::new) .initialProperties(SharedProperties::stone) .properties(p -> p.color(MaterialColor.TERRACOTTA_BROWN)) + .properties(p -> p.noOcclusion()) .transform(axeOrPickaxe()) - .blockstate((c, p) -> p.horizontalBlock(c.get(), - AssetLookup.withIndicator(c, p, $ -> AssetLookup.standardModel(c, p), StockpileSwitchBlock.INDICATOR))) + .blockstate(new ThresholdSwitchGenerator()::generate) .onRegister(assignDataBehaviour(new FillLevelDisplaySource(), "fill_level")) - .simpleItem() + .lang("Threshold Switch") + .item() + .transform(customItemModel("threshold_switch", "block_wall")) .register(); public static final BlockEntry CREATIVE_CRATE = diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyBlockEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyBlockEntity.java index f70846943..1fde9db07 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyBlockEntity.java @@ -13,7 +13,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.Blo import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionCollider; import com.simibubi.create.content.contraptions.components.structureMovement.ControlledContraptionEntity; import com.simibubi.create.content.contraptions.components.structureMovement.piston.LinearActuatorBlockEntity; -import com.simibubi.create.content.logistics.block.redstone.StockpileSwitchObservable; +import com.simibubi.create.content.logistics.block.redstone.ThresholdSwitchObservable; import com.simibubi.create.foundation.advancement.AllAdvancements; import com.simibubi.create.foundation.blockEntity.BlockEntityBehaviour; import com.simibubi.create.foundation.blockEntity.behaviour.CenteredSideValueBoxTransform; @@ -35,7 +35,7 @@ import net.minecraft.world.level.material.Fluids; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; -public class PulleyBlockEntity extends LinearActuatorBlockEntity implements StockpileSwitchObservable { +public class PulleyBlockEntity extends LinearActuatorBlockEntity implements ThresholdSwitchObservable { protected int initialOffset; private float prevAnimatedOffset; diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftScreen.java b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftScreen.java index 5d1f79e78..ef80d1cb2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftScreen.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftScreen.java @@ -65,7 +65,7 @@ public class SequencedGearshiftScreen extends AbstractSimiScreen { public void initInputsOfRow(int row, int backgroundX, int backgroundY) { int x = backgroundX + 30; - int y = backgroundY + 18; + int y = backgroundY + 20; int rowHeight = 22; Vector rowInputs = inputs.get(row); @@ -138,25 +138,25 @@ public class SequencedGearshiftScreen extends AbstractSimiScreen { AllGuiTextures toDraw = AllGuiTextures.SEQUENCER_EMPTY; int yOffset = toDraw.height * row; if (row >= instructions.size()) { - toDraw.render(ms, x, y + 14 + yOffset, this); + toDraw.render(ms, x, y + 16 + yOffset, this); continue; } Instruction instruction = instructions.get(row); SequencerInstructions def = instruction.instruction; - def.background.render(ms, x, y + 14 + yOffset, this); + def.background.render(ms, x, y + 16 + yOffset, this); - label(ms, 36, yOffset - 3, Lang.translateDirect(def.translationKey)); + label(ms, 36, yOffset - 1, Lang.translateDirect(def.translationKey)); if (def.hasValueParameter) { String text = def.formatValue(instruction.value); int stringWidth = font.width(text); - label(ms, 90 + (12 - stringWidth / 2), yOffset - 3, Components.literal(text)); + label(ms, 90 + (12 - stringWidth / 2), yOffset - 1, Components.literal(text)); } if (def.hasSpeedParameter) - label(ms, 127, yOffset - 3, instruction.speedModifier.label); + label(ms, 127, yOffset - 1, instruction.speedModifier.label); } - drawCenteredString(ms, font, title, x + (background.width - 8) / 2, y + 3, 0xFFFFFF); + font.draw(ms, title, x + (background.width - 8) / 2 - font.width(title) / 2, y + 4, 0x592424); GuiGameElement.of(renderedItem) .at(x + background.width + 6, y + background.height - 56, -200) diff --git a/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandScreen.java b/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandScreen.java index 6a19ce86f..018b8c49a 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandScreen.java +++ b/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandScreen.java @@ -122,7 +122,7 @@ public class SymmetryWandScreen extends AbstractSimiScreen { int y = guiTop; background.render(ms, x, y, this); - font.draw(ms, wand.getHoverName(), x + 11, y + 4, 0x6B3802); + font.draw(ms, wand.getHoverName(), x + 11, y + 4, 0x592424); renderBlock(ms, x, y); GuiGameElement.of(wand) diff --git a/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxScreen.java b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxScreen.java index 080b6afc2..fb43ef25f 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxScreen.java +++ b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxScreen.java @@ -81,7 +81,7 @@ public class ToolboxScreen extends AbstractSimiContainerScreen { int y = topPos; BG.render(ms, x, y, this); - font.draw(ms, title, x + 15, y + 4, 0x442000); + font.draw(ms, title, x + 15, y + 4, 0x592424); int invX = leftPos; int invY = topPos + imageHeight - PLAYER.height; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/display/DisplayLinkScreen.java b/src/main/java/com/simibubi/create/content/logistics/block/display/DisplayLinkScreen.java index 8ed97800a..0cae4ae23 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/display/DisplayLinkScreen.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/display/DisplayLinkScreen.java @@ -255,7 +255,7 @@ public class DisplayLinkScreen extends AbstractSimiScreen { background.render(ms, x, y, this); MutableComponent header = Lang.translateDirect("display_link.title"); - font.draw(ms, header, x + background.width / 2 - font.width(header) / 2, y + 4, 0x442000); + font.draw(ms, header, x + background.width / 2 - font.width(header) / 2, y + 4, 0x592424); if (sources.isEmpty()) font.drawShadow(ms, Lang.translateDirect("display_link.no_source"), x + 65, y + 30, 0xD3D3D3); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/display/source/FillLevelDisplaySource.java b/src/main/java/com/simibubi/create/content/logistics/block/display/source/FillLevelDisplaySource.java index cf921bbd5..58c8d0ea7 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/display/source/FillLevelDisplaySource.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/display/source/FillLevelDisplaySource.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.logistics.block.display.source; import com.simibubi.create.content.logistics.block.display.DisplayLinkContext; -import com.simibubi.create.content.logistics.block.redstone.StockpileSwitchBlockEntity; +import com.simibubi.create.content.logistics.block.redstone.ThresholdSwitchBlockEntity; import com.simibubi.create.foundation.gui.ModularGuiLineBuilder; import com.simibubi.create.foundation.utility.Lang; @@ -14,7 +14,7 @@ public class FillLevelDisplaySource extends PercentOrProgressBarDisplaySource { @Override protected Float getProgress(DisplayLinkContext context) { BlockEntity be = context.getSourceBlockEntity(); - if (!(be instanceof StockpileSwitchBlockEntity sste)) + if (!(be instanceof ThresholdSwitchBlockEntity sste)) return null; return sste.currentLevel; } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/display/source/FluidAmountDisplaySource.java b/src/main/java/com/simibubi/create/content/logistics/block/display/source/FluidAmountDisplaySource.java index 9c702a7c4..e5f57243a 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/display/source/FluidAmountDisplaySource.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/display/source/FluidAmountDisplaySource.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.logistics.block.display.source; import com.simibubi.create.content.logistics.block.display.DisplayLinkContext; import com.simibubi.create.content.logistics.block.display.target.DisplayTargetStats; -import com.simibubi.create.content.logistics.block.redstone.ContentObserverBlockEntity; +import com.simibubi.create.content.logistics.block.redstone.SmartObserverBlockEntity; import com.simibubi.create.foundation.blockEntity.behaviour.filtering.FilteringBehaviour; import com.simibubi.create.foundation.blockEntity.behaviour.inventory.TankManipulationBehaviour; import com.simibubi.create.foundation.utility.Components; @@ -18,7 +18,7 @@ public class FluidAmountDisplaySource extends SingleLineDisplaySource { @Override protected MutableComponent provideLine(DisplayLinkContext context, DisplayTargetStats stats) { BlockEntity sourceBE = context.getSourceBlockEntity(); - if (!(sourceBE instanceof ContentObserverBlockEntity cobe)) + if (!(sourceBE instanceof SmartObserverBlockEntity cobe)) return EMPTY_LINE; TankManipulationBehaviour tankManipulationBehaviour = cobe.getBehaviour(TankManipulationBehaviour.OBSERVE); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/display/source/FluidListDisplaySource.java b/src/main/java/com/simibubi/create/content/logistics/block/display/source/FluidListDisplaySource.java index 7222810fc..2e83e9aba 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/display/source/FluidListDisplaySource.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/display/source/FluidListDisplaySource.java @@ -9,7 +9,7 @@ import java.util.stream.Stream; import org.apache.commons.lang3.mutable.MutableInt; import com.simibubi.create.content.logistics.block.display.DisplayLinkContext; -import com.simibubi.create.content.logistics.block.redstone.ContentObserverBlockEntity; +import com.simibubi.create.content.logistics.block.redstone.SmartObserverBlockEntity; import com.simibubi.create.content.logistics.trains.management.display.FlapDisplayBlockEntity; import com.simibubi.create.content.logistics.trains.management.display.FlapDisplayLayout; import com.simibubi.create.content.logistics.trains.management.display.FlapDisplaySection; @@ -32,7 +32,7 @@ public class FluidListDisplaySource extends ValueListDisplaySource { @Override protected Stream> provideEntries(DisplayLinkContext context, int maxRows) { BlockEntity sourceBE = context.getSourceBlockEntity(); - if (!(sourceBE instanceof ContentObserverBlockEntity cobe)) + if (!(sourceBE instanceof SmartObserverBlockEntity cobe)) return Stream.empty(); TankManipulationBehaviour tankManipulationBehaviour = cobe.getBehaviour(TankManipulationBehaviour.OBSERVE); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/display/source/ItemCountDisplaySource.java b/src/main/java/com/simibubi/create/content/logistics/block/display/source/ItemCountDisplaySource.java index d54178c64..c1b635397 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/display/source/ItemCountDisplaySource.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/display/source/ItemCountDisplaySource.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.logistics.block.display.source; import com.simibubi.create.content.logistics.block.display.DisplayLinkContext; import com.simibubi.create.content.logistics.block.display.target.DisplayTargetStats; -import com.simibubi.create.content.logistics.block.redstone.ContentObserverBlockEntity; +import com.simibubi.create.content.logistics.block.redstone.SmartObserverBlockEntity; import com.simibubi.create.foundation.blockEntity.behaviour.filtering.FilteringBehaviour; import com.simibubi.create.foundation.blockEntity.behaviour.inventory.InvManipulationBehaviour; import com.simibubi.create.foundation.utility.Components; @@ -17,7 +17,7 @@ public class ItemCountDisplaySource extends NumericSingleLineDisplaySource { @Override protected MutableComponent provideLine(DisplayLinkContext context, DisplayTargetStats stats) { BlockEntity sourceBE = context.getSourceBlockEntity(); - if (!(sourceBE instanceof ContentObserverBlockEntity cobe)) + if (!(sourceBE instanceof SmartObserverBlockEntity cobe)) return ZERO.copy(); InvManipulationBehaviour invManipulationBehaviour = cobe.getBehaviour(InvManipulationBehaviour.TYPE); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/display/source/ItemListDisplaySource.java b/src/main/java/com/simibubi/create/content/logistics/block/display/source/ItemListDisplaySource.java index d0c436426..c01283c05 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/display/source/ItemListDisplaySource.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/display/source/ItemListDisplaySource.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.logistics.block.display.source; import java.util.stream.Stream; import com.simibubi.create.content.logistics.block.display.DisplayLinkContext; -import com.simibubi.create.content.logistics.block.redstone.ContentObserverBlockEntity; +import com.simibubi.create.content.logistics.block.redstone.SmartObserverBlockEntity; import com.simibubi.create.foundation.blockEntity.behaviour.filtering.FilteringBehaviour; import com.simibubi.create.foundation.blockEntity.behaviour.inventory.InvManipulationBehaviour; import com.simibubi.create.foundation.item.CountedItemStackList; @@ -18,7 +18,7 @@ public class ItemListDisplaySource extends ValueListDisplaySource { @Override protected Stream> provideEntries(DisplayLinkContext context, int maxRows) { BlockEntity sourceBE = context.getSourceBlockEntity(); - if (!(sourceBE instanceof ContentObserverBlockEntity cobe)) + if (!(sourceBE instanceof SmartObserverBlockEntity cobe)) return Stream.empty(); InvManipulationBehaviour invManipulationBehaviour = cobe.getBehaviour(InvManipulationBehaviour.TYPE); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlockEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlockEntity.java index 55bf7fa0d..fff1808de 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlockEntity.java @@ -343,7 +343,7 @@ public class FunnelBlockEntity extends SmartBlockEntity implements IHaveHovering } public void onTransfer(ItemStack stack) { - AllBlocks.CONTENT_OBSERVER.get() + AllBlocks.SMART_OBSERVER.get() .onFunnelTransfer(level, worldPosition, stack); award(AllAdvancements.FUNNEL); } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/DirectedDirectionalBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/DirectedDirectionalBlock.java new file mode 100644 index 000000000..8759cbc37 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/DirectedDirectionalBlock.java @@ -0,0 +1,98 @@ +package com.simibubi.create.content.logistics.block.redstone; + +import javax.annotation.Nullable; + +import com.simibubi.create.content.contraptions.components.structureMovement.ITransformableBlock; +import com.simibubi.create.content.contraptions.components.structureMovement.StructureTransform; +import com.simibubi.create.content.contraptions.wrench.IWrenchable; + +import net.minecraft.core.Direction; +import net.minecraft.core.Direction.Axis; +import net.minecraft.core.Direction.AxisDirection; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition.Builder; +import net.minecraft.world.level.block.state.properties.AttachFace; +import net.minecraft.world.level.block.state.properties.EnumProperty; + +public class DirectedDirectionalBlock extends HorizontalDirectionalBlock implements IWrenchable, ITransformableBlock { + + public static final EnumProperty TARGET = EnumProperty.create("target", AttachFace.class); + + public DirectedDirectionalBlock(Properties pProperties) { + super(pProperties); + registerDefaultState(defaultBlockState().setValue(TARGET, AttachFace.WALL)); + } + + @Override + protected void createBlockStateDefinition(Builder pBuilder) { + super.createBlockStateDefinition(pBuilder.add(TARGET, FACING)); + } + + @Nullable + public BlockState getStateForPlacement(BlockPlaceContext pContext) { + for (Direction direction : pContext.getNearestLookingDirections()) { + BlockState blockstate; + if (direction.getAxis() == Direction.Axis.Y) { + blockstate = this.defaultBlockState() + .setValue(TARGET, direction == Direction.UP ? AttachFace.CEILING : AttachFace.FLOOR) + .setValue(FACING, pContext.getHorizontalDirection()); + } else { + blockstate = this.defaultBlockState() + .setValue(TARGET, AttachFace.WALL) + .setValue(FACING, direction.getOpposite()); + } + + return blockstate; + } + + return null; + } + + protected static Direction getTargetDirection(BlockState pState) { + switch ((AttachFace) pState.getValue(TARGET)) { + case CEILING: + return Direction.UP; + case FLOOR: + return Direction.DOWN; + default: + return pState.getValue(FACING); + } + } + + @Override + public BlockState getRotatedBlockState(BlockState originalState, Direction targetedFace) { + if (targetedFace.getAxis() == Axis.Y) + return IWrenchable.super.getRotatedBlockState(originalState, targetedFace); + + Direction targetDirection = getTargetDirection(originalState); + Direction newFacing = targetDirection.getClockWise(targetedFace.getAxis()); + if (targetedFace.getAxisDirection() == AxisDirection.NEGATIVE) + newFacing = newFacing.getOpposite(); + + if (newFacing.getAxis() == Axis.Y) + return originalState.setValue(TARGET, newFacing == Direction.UP ? AttachFace.CEILING : AttachFace.FLOOR); + return originalState.setValue(TARGET, AttachFace.WALL) + .setValue(FACING, newFacing); + } + + @Override + @SuppressWarnings("deprecation") + public BlockState transform(BlockState state, StructureTransform transform) { + if (transform.mirror != null) + state = mirror(state, transform.mirror); + if (transform.rotationAxis == Direction.Axis.Y) + return rotate(state, transform.rotation); + + Direction targetDirection = getTargetDirection(state); + Direction newFacing = transform.rotateFacing(targetDirection); + + if (newFacing.getAxis() == Axis.Y) + return state.setValue(TARGET, newFacing == Direction.UP ? AttachFace.CEILING : AttachFace.FLOOR); + return state.setValue(TARGET, AttachFace.WALL) + .setValue(FACING, newFacing); + } + +} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/FilteredDetectorFilterSlot.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/FilteredDetectorFilterSlot.java index 43eb210d3..9238af5b6 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/FilteredDetectorFilterSlot.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/FilteredDetectorFilterSlot.java @@ -6,24 +6,54 @@ import com.simibubi.create.foundation.blockEntity.behaviour.ValueBoxTransform; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.VecHelper; -import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.core.Direction; +import net.minecraft.core.Direction.Axis; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.Vec3; -public class FilteredDetectorFilterSlot extends ValueBoxTransform { - Vec3 position = VecHelper.voxelSpace(8f, 15.5f, 11f); +public class FilteredDetectorFilterSlot extends ValueBoxTransform.Sided { + + private boolean hasSlotAtBottom; + + public FilteredDetectorFilterSlot(boolean hasSlotAtBottom) { + this.hasSlotAtBottom = hasSlotAtBottom; + } @Override - protected Vec3 getLocalOffset(BlockState state) { - return rotateHorizontally(state, position); + protected boolean isSideActive(BlockState state, Direction direction) { + Direction targetDirection = DirectedDirectionalBlock.getTargetDirection(state); + if (direction == targetDirection) + return false; + if (targetDirection.getOpposite() == direction) + return true; + + if (targetDirection.getAxis() != Axis.Y) + return direction == Direction.UP || direction == Direction.DOWN && hasSlotAtBottom; + if (targetDirection == Direction.UP) + direction = direction.getOpposite(); + if (!hasSlotAtBottom) + return direction == state.getValue(DirectedDirectionalBlock.FACING); + + return direction.getAxis() == state.getValue(DirectedDirectionalBlock.FACING) + .getClockWise() + .getAxis(); } @Override protected void rotate(BlockState state, PoseStack ms) { - float yRot = AngleHelper.horizontalAngle(state.getValue(HorizontalDirectionalBlock.FACING)) + 180; + super.rotate(state, ms); + Direction facing = state.getValue(DirectedDirectionalBlock.FACING); + if (facing.getAxis() == Axis.Y) + return; + if (getSide() != Direction.UP) + return; TransformStack.cast(ms) - .rotateY(yRot) - .rotateX(90); + .rotateZ(-AngleHelper.horizontalAngle(facing) + 180); + } + + @Override + protected Vec3 getSouthLocation() { + return VecHelper.voxelSpace(8f, 8f, 15.5f); } } 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/SmartObserverBlock.java similarity index 78% rename from src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverBlock.java rename to src/main/java/com/simibubi/create/content/logistics/block/redstone/SmartObserverBlock.java index 82148aa67..9a379b1af 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/SmartObserverBlock.java @@ -4,9 +4,7 @@ import java.util.Random; import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlocks; -import com.simibubi.create.AllShapes; import com.simibubi.create.content.contraptions.fluids.FluidTransportBehaviour; -import com.simibubi.create.content.contraptions.wrench.IWrenchable; import com.simibubi.create.content.logistics.block.funnel.FunnelBlockEntity; import com.simibubi.create.foundation.block.IBE; import com.simibubi.create.foundation.blockEntity.BlockEntityBehaviour; @@ -17,46 +15,38 @@ import com.simibubi.create.foundation.utility.Iterate; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.Direction.Axis; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.HorizontalDirectionalBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition.Builder; +import net.minecraft.world.level.block.state.properties.AttachFace; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.phys.shapes.CollisionContext; -import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; -public class ContentObserverBlock extends HorizontalDirectionalBlock implements IBE, IWrenchable { +public class SmartObserverBlock extends DirectedDirectionalBlock implements IBE { public static final BooleanProperty POWERED = BlockStateProperties.POWERED; - public ContentObserverBlock(Properties properties) { + public SmartObserverBlock(Properties properties) { super(properties); registerDefaultState(defaultBlockState().setValue(POWERED, false)); } - @Override - public VoxelShape getShape(BlockState state, BlockGetter p_220053_2_, BlockPos p_220053_3_, - CollisionContext p_220053_4_) { - return AllShapes.CONTENT_OBSERVER.get(state.getValue(FACING)); - } - @Override protected void createBlockStateDefinition(Builder builder) { - builder.add(POWERED, FACING); - super.createBlockStateDefinition(builder); + super.createBlockStateDefinition(builder.add(POWERED)); } @Override @@ -66,7 +56,7 @@ public class ContentObserverBlock extends HorizontalDirectionalBlock implements Capability fluidCap = CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY; Direction preferredFacing = null; - for (Direction face : Iterate.horizontalDirections) { + for (Direction face : context.getNearestLookingDirections()) { BlockPos offsetPos = context.getClickedPos() .relative(face); Level world = context.getLevel(); @@ -86,19 +76,23 @@ public class ContentObserverBlock extends HorizontalDirectionalBlock implements canDetect = true; if (canDetect) { - if (preferredFacing != null) { - preferredFacing = null; - break; - } preferredFacing = face; + break; } - } - if (preferredFacing != null) - return state.setValue(FACING, preferredFacing); - return state.setValue(FACING, context.getHorizontalDirection() - .getOpposite()); + if (preferredFacing == null) { + Direction facing = context.getNearestLookingDirection(); + preferredFacing = context.getPlayer() != null && context.getPlayer() + .isSteppingCarefully() ? facing : facing.getOpposite(); + } + + if (preferredFacing.getAxis() == Axis.Y) { + state = state.setValue(TARGET, preferredFacing == Direction.UP ? AttachFace.CEILING : AttachFace.FLOOR); + preferredFacing = context.getHorizontalDirection(); + } + + return state.setValue(FACING, preferredFacing); } @Override @@ -141,7 +135,7 @@ public class ContentObserverBlock extends HorizontalDirectionalBlock implements for (Direction direction : Iterate.horizontalDirections) { BlockPos detectorPos = funnelPos.relative(direction); BlockState detectorState = world.getBlockState(detectorPos); - if (!AllBlocks.CONTENT_OBSERVER.has(detectorState)) + if (!AllBlocks.SMART_OBSERVER.has(detectorState)) continue; if (detectorState.getValue(FACING) != direction.getOpposite()) continue; @@ -157,13 +151,13 @@ public class ContentObserverBlock extends HorizontalDirectionalBlock implements } @Override - public Class getBlockEntityClass() { - return ContentObserverBlockEntity.class; + public Class getBlockEntityClass() { + return SmartObserverBlockEntity.class; } - + @Override - public BlockEntityType getBlockEntityType() { - return AllBlockEntityTypes.CONTENT_OBSERVER.get(); + public BlockEntityType getBlockEntityType() { + return AllBlockEntityTypes.SMART_OBSERVER.get(); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverBlockEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/SmartObserverBlockEntity.java similarity index 79% rename from src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverBlockEntity.java rename to src/main/java/com/simibubi/create/content/logistics/block/redstone/SmartObserverBlockEntity.java index 4d46d511b..382d4fdd6 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/SmartObserverBlockEntity.java @@ -12,15 +12,18 @@ import com.simibubi.create.foundation.blockEntity.behaviour.filtering.FilteringB import com.simibubi.create.foundation.blockEntity.behaviour.inventory.CapManipulationBehaviourBase.InterfaceProvider; import com.simibubi.create.foundation.blockEntity.behaviour.inventory.InvManipulationBehaviour; import com.simibubi.create.foundation.blockEntity.behaviour.inventory.TankManipulationBehaviour; +import com.simibubi.create.foundation.utility.BlockFace; import com.simibubi.create.foundation.utility.Iterate; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -public class ContentObserverBlockEntity extends SmartBlockEntity { +public class SmartObserverBlockEntity extends SmartBlockEntity { private static final int DEFAULT_DELAY = 6; private FilteringBehaviour filtering; @@ -28,17 +31,18 @@ public class ContentObserverBlockEntity extends SmartBlockEntity { private TankManipulationBehaviour observedTank; public int turnOffTicks = 0; - public ContentObserverBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { + public SmartObserverBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { super(type, pos, state); setLazyTickRate(20); } @Override public void addBehaviours(List behaviours) { - filtering = new FilteringBehaviour(this, new FilteredDetectorFilterSlot()); - behaviours.add(filtering); + behaviours.add(filtering = new FilteringBehaviour(this, new FilteredDetectorFilterSlot(false))); + + InterfaceProvider towardBlockFacing = + (w, p, s) -> new BlockFace(p, DirectedDirectionalBlock.getTargetDirection(s)); - InterfaceProvider towardBlockFacing = InterfaceProvider.towardBlockFacing(); behaviours.add(observedInventory = new InvManipulationBehaviour(this, towardBlockFacing).bypassSidedness()); behaviours.add(observedTank = new TankManipulationBehaviour(this, towardBlockFacing).bypassSidedness()); } @@ -56,8 +60,15 @@ public class ContentObserverBlockEntity extends SmartBlockEntity { if (!isActive()) return; - Direction facing = state.getValue(ContentObserverBlock.FACING); - BlockPos targetPos = worldPosition.relative(facing); + BlockPos targetPos = worldPosition.relative(SmartObserverBlock.getTargetDirection(state)); + Block block = level.getBlockState(targetPos) + .getBlock(); + + if (!filtering.getFilter() + .isEmpty() && block.asItem() != null && filtering.test(new ItemStack(block))) { + activate(3); + return; + } // Detect items on belt TransportedItemStackHandlerBehaviour behaviour = @@ -110,9 +121,9 @@ public class ContentObserverBlockEntity extends SmartBlockEntity { public void activate(int ticks) { BlockState state = getBlockState(); turnOffTicks = ticks; - if (state.getValue(ContentObserverBlock.POWERED)) + if (state.getValue(SmartObserverBlock.POWERED)) return; - level.setBlockAndUpdate(worldPosition, state.setValue(ContentObserverBlock.POWERED, true)); + level.setBlockAndUpdate(worldPosition, state.setValue(SmartObserverBlock.POWERED, true)); level.updateNeighborsAt(worldPosition, state.getBlock()); } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/SmartObserverGenerator.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/SmartObserverGenerator.java new file mode 100644 index 000000000..45007f969 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/SmartObserverGenerator.java @@ -0,0 +1,35 @@ +package com.simibubi.create.content.logistics.block.redstone; + +import com.simibubi.create.foundation.data.AssetLookup; +import com.simibubi.create.foundation.data.SpecialBlockStateGen; +import com.tterrag.registrate.providers.DataGenContext; +import com.tterrag.registrate.providers.RegistrateBlockstateProvider; + +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.client.model.generators.ModelFile; + +public class SmartObserverGenerator extends SpecialBlockStateGen { + + @Override + protected int getXRotation(BlockState state) { + return switch (state.getValue(SmartObserverBlock.TARGET)) { + case CEILING -> -90; + case WALL -> 0; + case FLOOR -> 90; + }; + } + + @Override + protected int getYRotation(BlockState state) { + return horizontalAngle(state.getValue(ThresholdSwitchBlock.FACING)) + 180; + } + + @Override + public ModelFile getModel(DataGenContext ctx, RegistrateBlockstateProvider prov, + BlockState state) { + return AssetLookup.forPowered(ctx, prov) + .apply(state); + } + +} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/ThresholdSwitchBlock.java similarity index 62% rename from src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchBlock.java rename to src/main/java/com/simibubi/create/content/logistics/block/redstone/ThresholdSwitchBlock.java index 3df474836..289c64ed1 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/ThresholdSwitchBlock.java @@ -4,15 +4,13 @@ import java.util.Random; import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllItems; -import com.simibubi.create.AllShapes; -import com.simibubi.create.content.contraptions.wrench.IWrenchable; import com.simibubi.create.foundation.block.IBE; import com.simibubi.create.foundation.gui.ScreenOpener; -import com.simibubi.create.foundation.utility.Iterate; import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.Direction.Axis; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; @@ -22,15 +20,13 @@ import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.HorizontalDirectionalBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition.Builder; +import net.minecraft.world.level.block.state.properties.AttachFace; import net.minecraft.world.level.block.state.properties.IntegerProperty; import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.shapes.CollisionContext; -import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.capabilities.Capability; @@ -40,12 +36,11 @@ import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; -public class StockpileSwitchBlock extends HorizontalDirectionalBlock - implements IBE, IWrenchable { +public class ThresholdSwitchBlock extends DirectedDirectionalBlock implements IBE { - public static final IntegerProperty INDICATOR = IntegerProperty.create("indicator", 0, 6); + public static final IntegerProperty LEVEL = IntegerProperty.create("level", 0, 5); - public StockpileSwitchBlock(Properties p_i48377_1_) { + public ThresholdSwitchBlock(Properties p_i48377_1_) { super(p_i48377_1_); } @@ -54,23 +49,8 @@ public class StockpileSwitchBlock extends HorizontalDirectionalBlock updateObservedInventory(state, worldIn, pos); } - @Override - public void onNeighborChange(BlockState state, LevelReader world, BlockPos pos, BlockPos neighbor) { -// if (world.isClientSide()) -// return; -// if (!isObserving(state, pos, neighbor)) -// return; -// updateObservedInventory(state, world, pos); - } - - @Override - public VoxelShape getShape(BlockState state, BlockGetter p_220053_2_, BlockPos p_220053_3_, - CollisionContext p_220053_4_) { - return AllShapes.STOCKPILE_SWITCH.get(state.getValue(FACING)); - } - private void updateObservedInventory(BlockState state, LevelReader world, BlockPos pos) { - withBlockEntityDo(world, pos, StockpileSwitchBlockEntity::updateCurrentLevel); + withBlockEntityDo(world, pos, ThresholdSwitchBlockEntity::updateCurrentLevel); } @Override @@ -88,20 +68,19 @@ public class StockpileSwitchBlock extends HorizontalDirectionalBlock if (side == blockState.getValue(FACING) .getOpposite()) return 0; - return getBlockEntityOptional(blockAccess, pos).filter(StockpileSwitchBlockEntity::isPowered) + return getBlockEntityOptional(blockAccess, pos).filter(ThresholdSwitchBlockEntity::isPowered) .map($ -> 15) .orElse(0); } @Override public void tick(BlockState blockState, ServerLevel world, BlockPos pos, Random random) { - getBlockEntityOptional(world, pos).ifPresent(StockpileSwitchBlockEntity::updatePowerAfterDelay); + getBlockEntityOptional(world, pos).ifPresent(ThresholdSwitchBlockEntity::updatePowerAfterDelay); } @Override protected void createBlockStateDefinition(Builder builder) { - builder.add(FACING, INDICATOR); - super.createBlockStateDefinition(builder); + super.createBlockStateDefinition(builder.add(LEVEL)); } @Override @@ -115,9 +94,9 @@ public class StockpileSwitchBlock extends HorizontalDirectionalBlock } @OnlyIn(value = Dist.CLIENT) - protected void displayScreen(StockpileSwitchBlockEntity be, Player player) { + protected void displayScreen(ThresholdSwitchBlockEntity be, Player player) { if (player instanceof LocalPlayer) - ScreenOpener.open(new StockpileSwitchScreen(be)); + ScreenOpener.open(new ThresholdSwitchScreen(be)); } @Override @@ -127,42 +106,41 @@ public class StockpileSwitchBlock extends HorizontalDirectionalBlock Capability fluidCap = CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY; Direction preferredFacing = null; - for (Direction face : Iterate.horizontalDirections) { + for (Direction face : context.getNearestLookingDirections()) { BlockEntity be = context.getLevel() .getBlockEntity(context.getClickedPos() .relative(face)); if (be != null && (be.getCapability(itemCap) .isPresent() || be.getCapability(fluidCap) - .isPresent())) - if (preferredFacing == null) - preferredFacing = face; - else { - preferredFacing = null; - break; - } + .isPresent())) { + preferredFacing = face; + break; + } } - if (preferredFacing != null) - return state.setValue(FACING, preferredFacing); + if (preferredFacing == null) { + Direction facing = context.getNearestLookingDirection(); + preferredFacing = context.getPlayer() != null && context.getPlayer() + .isSteppingCarefully() ? facing : facing.getOpposite(); + } - Direction facing = context.getClickedFace() - .getAxis() - .isHorizontal() ? context.getClickedFace() - : context.getHorizontalDirection() - .getOpposite(); - return state.setValue(FACING, context.getPlayer() != null && context.getPlayer() - .isSteppingCarefully() ? facing.getOpposite() : facing); + if (preferredFacing.getAxis() == Axis.Y) { + state = state.setValue(TARGET, preferredFacing == Direction.UP ? AttachFace.CEILING : AttachFace.FLOOR); + preferredFacing = context.getHorizontalDirection(); + } + + return state.setValue(FACING, preferredFacing); } @Override - public Class getBlockEntityClass() { - return StockpileSwitchBlockEntity.class; + public Class getBlockEntityClass() { + return ThresholdSwitchBlockEntity.class; } @Override - public BlockEntityType getBlockEntityType() { - return AllBlockEntityTypes.STOCKPILE_SWITCH.get(); + public BlockEntityType getBlockEntityType() { + return AllBlockEntityTypes.THRESHOLD_SWITCH.get(); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchBlockEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/ThresholdSwitchBlockEntity.java similarity index 88% rename from src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchBlockEntity.java rename to src/main/java/com/simibubi/create/content/logistics/block/redstone/ThresholdSwitchBlockEntity.java index 1f88952c4..c51f9b26a 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/ThresholdSwitchBlockEntity.java @@ -10,9 +10,9 @@ import com.simibubi.create.foundation.blockEntity.behaviour.filtering.FilteringB import com.simibubi.create.foundation.blockEntity.behaviour.inventory.CapManipulationBehaviourBase.InterfaceProvider; import com.simibubi.create.foundation.blockEntity.behaviour.inventory.InvManipulationBehaviour; import com.simibubi.create.foundation.blockEntity.behaviour.inventory.TankManipulationBehaviour; +import com.simibubi.create.foundation.utility.BlockFace; import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.util.Mth; import net.minecraft.world.item.ItemStack; @@ -25,7 +25,7 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.items.IItemHandler; -public class StockpileSwitchBlockEntity extends SmartBlockEntity { +public class ThresholdSwitchBlockEntity extends SmartBlockEntity { public float onWhenAbove; public float offWhenBelow; @@ -38,7 +38,7 @@ public class StockpileSwitchBlockEntity extends SmartBlockEntity { private InvManipulationBehaviour observedInventory; private TankManipulationBehaviour observedTank; - public StockpileSwitchBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { + public ThresholdSwitchBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { super(type, pos, state); onWhenAbove = .75f; offWhenBelow = .25f; @@ -94,11 +94,10 @@ public class StockpileSwitchBlockEntity extends SmartBlockEntity { observedInventory.findNewCapability(); observedTank.findNewCapability(); - BlockPos target = worldPosition.relative(getBlockState().getOptionalValue(StockpileSwitchBlock.FACING) - .orElse(Direction.NORTH)); + BlockPos target = worldPosition.relative(ThresholdSwitchBlock.getTargetDirection(getBlockState())); BlockEntity targetBlockEntity = level.getBlockEntity(target); - if (targetBlockEntity instanceof StockpileSwitchObservable observable) { + if (targetBlockEntity instanceof ThresholdSwitchObservable observable) { currentLevel = observable.getPercent() / 100f; } else if (StorageDrawers.isDrawer(targetBlockEntity) && observedInventory.hasInventory()) { @@ -143,7 +142,7 @@ public class StockpileSwitchBlockEntity extends SmartBlockEntity { // No compatible inventories found if (currentLevel == -1) return; - level.setBlock(worldPosition, getBlockState().setValue(StockpileSwitchBlock.INDICATOR, 0), 3); + level.setBlock(worldPosition, getBlockState().setValue(ThresholdSwitchBlock.LEVEL, 0), 3); currentLevel = -1; redstoneState = false; sendData(); @@ -163,8 +162,8 @@ public class StockpileSwitchBlockEntity extends SmartBlockEntity { int displayLevel = 0; if (currentLevel > 0) - displayLevel = (int) (currentLevel * 6); - level.setBlock(worldPosition, getBlockState().setValue(StockpileSwitchBlock.INDICATOR, displayLevel), + displayLevel = (int) (1 + currentLevel * 4); + level.setBlock(worldPosition, getBlockState().setValue(ThresholdSwitchBlock.LEVEL, displayLevel), update ? 3 : 2); if (update) @@ -193,11 +192,12 @@ public class StockpileSwitchBlockEntity extends SmartBlockEntity { @Override public void addBehaviours(List behaviours) { - filtering = - new FilteringBehaviour(this, new FilteredDetectorFilterSlot()).withCallback($ -> this.updateCurrentLevel()); - behaviours.add(filtering); + behaviours.add(filtering = new FilteringBehaviour(this, new FilteredDetectorFilterSlot(true)) + .withCallback($ -> this.updateCurrentLevel())); + + InterfaceProvider towardBlockFacing = + (w, p, s) -> new BlockFace(p, DirectedDirectionalBlock.getTargetDirection(s)); - InterfaceProvider towardBlockFacing = InterfaceProvider.towardBlockFacing(); behaviours.add(observedInventory = new InvManipulationBehaviour(this, towardBlockFacing).bypassSidedness()); behaviours.add(observedTank = new TankManipulationBehaviour(this, towardBlockFacing).bypassSidedness()); } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/ThresholdSwitchGenerator.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/ThresholdSwitchGenerator.java new file mode 100644 index 000000000..c31dda70b --- /dev/null +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/ThresholdSwitchGenerator.java @@ -0,0 +1,36 @@ +package com.simibubi.create.content.logistics.block.redstone; + +import com.simibubi.create.Create; +import com.simibubi.create.foundation.data.SpecialBlockStateGen; +import com.simibubi.create.foundation.utility.Lang; +import com.tterrag.registrate.providers.DataGenContext; +import com.tterrag.registrate.providers.RegistrateBlockstateProvider; + +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.client.model.generators.ModelFile; + +public class ThresholdSwitchGenerator extends SpecialBlockStateGen { + + @Override + protected int getXRotation(BlockState state) { + return 0; + } + + @Override + protected int getYRotation(BlockState state) { + return horizontalAngle(state.getValue(ThresholdSwitchBlock.FACING)) + 180; + } + + @Override + public ModelFile getModel(DataGenContext ctx, RegistrateBlockstateProvider prov, + BlockState state) { + int level = state.getValue(ThresholdSwitchBlock.LEVEL); + String path = "threshold_switch/block_" + Lang.asId(state.getValue(ThresholdSwitchBlock.TARGET) + .name()); + return prov.models() + .withExistingParent(path + "_" + level, Create.asResource("block/" + path)) + .texture("level", Create.asResource("block/threshold_switch/level_" + level)); + } + +} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchObservable.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/ThresholdSwitchObservable.java similarity index 68% rename from src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchObservable.java rename to src/main/java/com/simibubi/create/content/logistics/block/redstone/ThresholdSwitchObservable.java index 1c4eff748..8343d9dbb 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchObservable.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/ThresholdSwitchObservable.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.logistics.block.redstone; -public interface StockpileSwitchObservable { +public interface ThresholdSwitchObservable { public float getPercent(); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchScreen.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/ThresholdSwitchScreen.java similarity index 71% rename from src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchScreen.java rename to src/main/java/com/simibubi/create/content/logistics/block/redstone/ThresholdSwitchScreen.java index a90eb962d..844432ac1 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchScreen.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/ThresholdSwitchScreen.java @@ -18,25 +18,25 @@ import com.simibubi.create.foundation.utility.animation.LerpedFloat.Chaser; import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; -public class StockpileSwitchScreen extends AbstractSimiScreen { +public class ThresholdSwitchScreen extends AbstractSimiScreen { private ScrollInput offBelow; private ScrollInput onAbove; private IconButton confirmButton; private IconButton flipSignals; - private final Component invertSignal = Lang.translateDirect("gui.stockpile_switch.invert_signal"); - private final ItemStack renderedItem = new ItemStack(AllBlocks.STOCKPILE_SWITCH.get()); + private final Component invertSignal = Lang.translateDirect("gui.threshold_switch.invert_signal"); + private final ItemStack renderedItem = new ItemStack(AllBlocks.THRESHOLD_SWITCH.get()); private AllGuiTextures background; - private StockpileSwitchBlockEntity blockEntity; + private ThresholdSwitchBlockEntity blockEntity; private int lastModification; private LerpedFloat cursor; private LerpedFloat cursorLane; - public StockpileSwitchScreen(StockpileSwitchBlockEntity be) { - super(Lang.translateDirect("gui.stockpile_switch.title")); + public ThresholdSwitchScreen(ThresholdSwitchBlockEntity be) { + super(Lang.translateDirect("gui.threshold_switch.title")); background = AllGuiTextures.STOCKSWITCH; this.blockEntity = be; lastModification = -1; @@ -56,11 +56,11 @@ public class StockpileSwitchScreen extends AbstractSimiScreen { cursorLane = LerpedFloat.linear() .startWithValue(blockEntity.getState() ? 1 : 0); - offBelow = new ScrollInput(x + 36, y + 40, 102, 18).withRange(0, 100) + offBelow = new ScrollInput(x + 36, y + 42, 102, 18).withRange(0, 100) .titled(Components.empty()) .calling(state -> { lastModification = 0; - offBelow.titled(Lang.translateDirect("gui.stockpile_switch.move_to_upper_at", state)); + offBelow.titled(Lang.translateDirect("gui.threshold_switch.move_to_upper_at", state)); if (onAbove.getState() <= state) { onAbove.setState(state + 1); onAbove.onChanged(); @@ -68,11 +68,11 @@ public class StockpileSwitchScreen extends AbstractSimiScreen { }) .setState((int) (blockEntity.offWhenBelow * 100)); - onAbove = new ScrollInput(x + 36, y + 18, 102, 18).withRange(1, 101) + onAbove = new ScrollInput(x + 36, y + 20, 102, 18).withRange(1, 101) .titled(Components.empty()) .calling(state -> { lastModification = 0; - onAbove.titled(Lang.translateDirect("gui.stockpile_switch.move_to_lower_at", state)); + onAbove.titled(Lang.translateDirect("gui.threshold_switch.move_to_lower_at", state)); if (offBelow.getState() >= state) { offBelow.setState(state - 1); offBelow.onChanged(); @@ -86,14 +86,13 @@ public class StockpileSwitchScreen extends AbstractSimiScreen { addRenderableWidget(onAbove); addRenderableWidget(offBelow); - confirmButton = - new IconButton(x + background.width - 33, y + background.height - 24, AllIcons.I_CONFIRM); + confirmButton = new IconButton(x + background.width - 33, y + background.height - 24, AllIcons.I_CONFIRM); confirmButton.withCallback(() -> { onClose(); }); addRenderableWidget(confirmButton); - flipSignals = new IconButton(x + 14, y + 40, AllIcons.I_FLIP); + flipSignals = new IconButton(x + background.width - 62, y + background.height - 24, AllIcons.I_FLIP); flipSignals.withCallback(() -> { send(!blockEntity.isInverted()); }); @@ -108,35 +107,35 @@ public class StockpileSwitchScreen extends AbstractSimiScreen { background.render(ms, x, y, this); - AllGuiTextures.STOCKSWITCH_POWERED_LANE.render(ms, x + 36, y + (blockEntity.isInverted() ? 18 : 40), this); - AllGuiTextures.STOCKSWITCH_UNPOWERED_LANE.render(ms, x + 36, y + (blockEntity.isInverted() ? 40 : 18), this); - drawCenteredString(ms, font, title, x + (background.width - 8) / 2, y + 3, 0xFFFFFF); + AllGuiTextures.STOCKSWITCH_POWERED_LANE.render(ms, x + 37, y + (blockEntity.isInverted() ? 20 : 42), this); + AllGuiTextures.STOCKSWITCH_UNPOWERED_LANE.render(ms, x + 37, y + (blockEntity.isInverted() ? 42 : 20), this); + font.draw(ms, title, x + (background.width - 8) / 2 - font.width(title) / 2, y + 4, 0x592424); AllGuiTextures sprite = AllGuiTextures.STOCKSWITCH_INTERVAL; float lowerBound = offBelow.getState(); float upperBound = onAbove.getState(); sprite.bind(); - blit(ms, (int) (x + upperBound) + 37, y + 18, (int) (sprite.startX + upperBound), sprite.startY, + blit(ms, (int) (x + upperBound) + 37, y + 20, (int) (sprite.startX + upperBound), sprite.startY, (int) (sprite.width - upperBound), sprite.height); - blit(ms, x + 37, y + 40, sprite.startX, sprite.startY, (int) (lowerBound), sprite.height); + blit(ms, x + 37, y + 42, sprite.startX, sprite.startY, (int) (lowerBound), sprite.height); - AllGuiTextures.STOCKSWITCH_ARROW_UP.render(ms, (int) (x + lowerBound + 36) - 2, y + 35, this); - AllGuiTextures.STOCKSWITCH_ARROW_DOWN.render(ms, (int) (x + upperBound + 36) - 3, y + 17, this); + AllGuiTextures.STOCKSWITCH_ARROW_UP.render(ms, (int) (x + lowerBound + 36) - 2, y + 37, this); + AllGuiTextures.STOCKSWITCH_ARROW_DOWN.render(ms, (int) (x + upperBound + 36) - 3, y + 19, this); if (blockEntity.currentLevel != -1) { AllGuiTextures cursor = AllGuiTextures.STOCKSWITCH_CURSOR; ms.pushPose(); ms.translate(Math.min(99, this.cursor.getValue(partialTicks) * sprite.width), cursorLane.getValue(partialTicks) * 22, 0); - cursor.render(ms, x + 34, y + 19, this); + cursor.render(ms, x + 34, y + 21, this); ms.popPose(); } - GuiGameElement.of(renderedItem) - .at(x + background.width + 6, y + background.height - 56, -200) - .scale(5) - .render(ms); + GuiGameElement.of(renderedItem).at(x + background.width + 6, y + background.height - 56, -200) + .scale(5) + .render(ms); } @Override @@ -163,8 +162,9 @@ public class StockpileSwitchScreen extends AbstractSimiScreen { } protected void send(boolean invert) { - AllPackets.getChannel().sendToServer(new ConfigureStockswitchPacket(blockEntity.getBlockPos(), offBelow.getState() / 100f, - onAbove.getState() / 100f, invert)); + AllPackets.getChannel() + .sendToServer(new ConfigureStockswitchPacket(blockEntity.getBlockPos(), offBelow.getState() / 100f, + onAbove.getState() / 100f, invert)); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerScreen.java b/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerScreen.java index 8b6f721e8..ad2803c5c 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerScreen.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerScreen.java @@ -70,7 +70,7 @@ public class LinkedControllerScreen extends AbstractSimiContainerScreenat(x + background.width - 4, y + background.height - 56, -200) diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/AbstractFilterScreen.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/AbstractFilterScreen.java index 3b6af0d04..3d50b60d4 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/AbstractFilterScreen.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/AbstractFilterScreen.java @@ -7,6 +7,7 @@ import java.util.List; import com.google.common.collect.ImmutableList; import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.AllItems; import com.simibubi.create.content.logistics.item.filter.FilterScreenPacket.Option; import com.simibubi.create.foundation.gui.AllGuiTextures; import com.simibubi.create.foundation.gui.AllIcons; @@ -27,7 +28,7 @@ import net.minecraft.world.entity.player.Inventory; public abstract class AbstractFilterScreen extends AbstractSimiContainerScreen { protected AllGuiTextures background; - private List extraAreas = Collections.emptyList(); + private List extraAreas = Collections.emptyList(); private IconButton resetButton; private IconButton confirmButton; @@ -39,7 +40,8 @@ public abstract class AbstractFilterScreen extends @Override protected void init() { - setWindowSize(Math.max(background.width, PLAYER_INVENTORY.width), background.height + 4 + PLAYER_INVENTORY.height); + setWindowSize(Math.max(background.width, PLAYER_INVENTORY.width), + background.height + 4 + PLAYER_INVENTORY.height); super.init(); int x = leftPos; @@ -59,9 +61,7 @@ public abstract class AbstractFilterScreen extends addRenderableWidget(resetButton); addRenderableWidget(confirmButton); - extraAreas = ImmutableList.of( - new Rect2i(x + background.width, y + background.height - 40, 80, 48) - ); + extraAreas = ImmutableList.of(new Rect2i(x + background.width, y + background.height - 40, 80, 48)); } @Override @@ -74,18 +74,19 @@ public abstract class AbstractFilterScreen extends int y = topPos; background.render(ms, x, y, this); - drawCenteredString(ms, font, title, x + (background.width - 8) / 2, y + 3, 0xFFFFFF); + font.draw(ms, title, x + (background.width - 8) / 2 - font.width(title) / 2, y + 4, + AllItems.FILTER.isIn(menu.contentHolder) ? 0x303030 : 0x592424); - GuiGameElement.of(menu.contentHolder) - .at(x + background.width + 8, y + background.height - 52, -200) - .scale(4) - .render(ms); + GuiGameElement.of(menu.contentHolder).at(x + background.width + 8, y + background.height - 52, -200) + .scale(4) + .render(ms); } @Override protected void containerTick() { if (!menu.player.getMainHandItem() - .equals(menu.contentHolder, false)) + .equals(menu.contentHolder, false)) menu.player.closeContainer(); super.containerTick(); @@ -147,7 +148,8 @@ public abstract class AbstractFilterScreen extends protected void contentsCleared() {} protected void sendOptionUpdate(Option option) { - AllPackets.getChannel().sendToServer(new FilterScreenPacket(option)); + AllPackets.getChannel() + .sendToServer(new FilterScreenPacket(option)); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/AttributeFilterMenu.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/AttributeFilterMenu.java index bf4256c15..5d3c57149 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/AttributeFilterMenu.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/AttributeFilterMenu.java @@ -63,13 +63,13 @@ public class AttributeFilterMenu extends AbstractFilterMenu { @Override protected int getPlayerInventoryYOffset() { - return 105; + return 107; } @Override protected void addFilterSlots() { - this.addSlot(new SlotItemHandler(ghostInventory, 0, 16, 22)); - this.addSlot(new SlotItemHandler(ghostInventory, 1, 22, 57) { + this.addSlot(new SlotItemHandler(ghostInventory, 0, 16, 24)); + this.addSlot(new SlotItemHandler(ghostInventory, 1, 22, 59) { @Override public boolean mayPickup(Player playerIn) { return false; diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/AttributeFilterScreen.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/AttributeFilterScreen.java index 413aa8c26..e191250bc 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/AttributeFilterScreen.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/AttributeFilterScreen.java @@ -67,34 +67,34 @@ public class AttributeFilterScreen extends AbstractFilterScreen { menu.whitelistMode = WhitelistMode.WHITELIST_DISJ; sendOptionUpdate(Option.WHITELIST); }); whitelistDis.setToolTip(allowDisN); - whitelistCon = new IconButton(x + 65, y + 59, AllIcons.I_WHITELIST_AND); + whitelistCon = new IconButton(x + 65, y + 61, AllIcons.I_WHITELIST_AND); whitelistCon.withCallback(() -> { menu.whitelistMode = WhitelistMode.WHITELIST_CONJ; sendOptionUpdate(Option.WHITELIST2); }); whitelistCon.setToolTip(allowConN); - blacklist = new IconButton(x + 83, y + 59, AllIcons.I_WHITELIST_NOT); + blacklist = new IconButton(x + 83, y + 61, AllIcons.I_WHITELIST_NOT); blacklist.withCallback(() -> { menu.whitelistMode = WhitelistMode.BLACKLIST; sendOptionUpdate(Option.BLACKLIST); }); blacklist.setToolTip(denyN); - whitelistDisIndicator = new Indicator(x + 47, y + 53, Components.immutableEmpty()); - whitelistConIndicator = new Indicator(x + 65, y + 53, Components.immutableEmpty()); - blacklistIndicator = new Indicator(x + 83, y + 53, Components.immutableEmpty()); + whitelistDisIndicator = new Indicator(x + 47, y + 55, Components.immutableEmpty()); + whitelistConIndicator = new Indicator(x + 65, y + 55, Components.immutableEmpty()); + blacklistIndicator = new Indicator(x + 83, y + 55, Components.immutableEmpty()); addRenderableWidgets(blacklist, whitelistCon, whitelistDis, blacklistIndicator, whitelistConIndicator, whitelistDisIndicator); - addRenderableWidget(add = new IconButton(x + 182, y + 21, AllIcons.I_ADD)); - addRenderableWidget(addInverted = new IconButton(x + 200, y + 21, AllIcons.I_ADD_INVERTED_ATTRIBUTE)); + addRenderableWidget(add = new IconButton(x + 182, y + 23, AllIcons.I_ADD)); + addRenderableWidget(addInverted = new IconButton(x + 200, y + 23, AllIcons.I_ADD_INVERTED_ATTRIBUTE)); add.withCallback(() -> { handleAddedAttibute(false); }); @@ -106,9 +106,9 @@ public class AttributeFilterScreen extends AbstractFilterScreen { int x = leftPos; int y = topPos; - blacklist = new IconButton(x + 18, y + 73, AllIcons.I_BLACKLIST); + blacklist = new IconButton(x + 18, y + 75, AllIcons.I_BLACKLIST); blacklist.withCallback(() -> { menu.blacklist = true; sendOptionUpdate(Option.BLACKLIST); }); blacklist.setToolTip(denyN); - whitelist = new IconButton(x + 36, y + 73, AllIcons.I_WHITELIST); + whitelist = new IconButton(x + 36, y + 75, AllIcons.I_WHITELIST); whitelist.withCallback(() -> { menu.blacklist = false; sendOptionUpdate(Option.WHITELIST); }); whitelist.setToolTip(allowN); - blacklistIndicator = new Indicator(x + 18, y + 67, Components.immutableEmpty()); - whitelistIndicator = new Indicator(x + 36, y + 67, Components.immutableEmpty()); + blacklistIndicator = new Indicator(x + 18, y + 69, Components.immutableEmpty()); + whitelistIndicator = new Indicator(x + 36, y + 69, Components.immutableEmpty()); addRenderableWidgets(blacklist, whitelist, blacklistIndicator, whitelistIndicator); - respectNBT = new IconButton(x + 60, y + 73, AllIcons.I_RESPECT_NBT); + respectNBT = new IconButton(x + 60, y + 75, AllIcons.I_RESPECT_NBT); respectNBT.withCallback(() -> { menu.respectNBT = true; sendOptionUpdate(Option.RESPECT_DATA); }); respectNBT.setToolTip(respectDataN); - ignoreNBT = new IconButton(x + 78, y + 73, AllIcons.I_IGNORE_NBT); + ignoreNBT = new IconButton(x + 78, y + 75, AllIcons.I_IGNORE_NBT); ignoreNBT.withCallback(() -> { menu.respectNBT = false; sendOptionUpdate(Option.IGNORE_DATA); }); ignoreNBT.setToolTip(ignoreDataN); - respectNBTIndicator = new Indicator(x + 60, y + 67, Components.immutableEmpty()); - ignoreNBTIndicator = new Indicator(x + 78, y + 67, Components.immutableEmpty()); + respectNBTIndicator = new Indicator(x + 60, y + 69, Components.immutableEmpty()); + ignoreNBTIndicator = new Indicator(x + 78, y + 69, Components.immutableEmpty()); addRenderableWidgets(respectNBT, ignoreNBT, respectNBTIndicator, ignoreNBTIndicator); handleIndicators(); diff --git a/src/main/java/com/simibubi/create/content/logistics/packet/ConfigureStockswitchPacket.java b/src/main/java/com/simibubi/create/content/logistics/packet/ConfigureStockswitchPacket.java index 81eea750e..bb6020b37 100644 --- a/src/main/java/com/simibubi/create/content/logistics/packet/ConfigureStockswitchPacket.java +++ b/src/main/java/com/simibubi/create/content/logistics/packet/ConfigureStockswitchPacket.java @@ -1,12 +1,12 @@ package com.simibubi.create.content.logistics.packet; -import com.simibubi.create.content.logistics.block.redstone.StockpileSwitchBlockEntity; +import com.simibubi.create.content.logistics.block.redstone.ThresholdSwitchBlockEntity; import com.simibubi.create.foundation.networking.BlockEntityConfigurationPacket; import net.minecraft.core.BlockPos; import net.minecraft.network.FriendlyByteBuf; -public class ConfigureStockswitchPacket extends BlockEntityConfigurationPacket { +public class ConfigureStockswitchPacket extends BlockEntityConfigurationPacket { private float offBelow; private float onAbove; @@ -38,7 +38,7 @@ public class ConfigureStockswitchPacket extends BlockEntityConfigurationPacket b.requires(I.cog()) .requires(I.planks())), @@ -908,15 +908,21 @@ public class StandardRecipeGen extends CreateRecipeProvider { .pattern("AA") .pattern("KK")), - CONTENT_OBSERVER = create(AllBlocks.CONTENT_OBSERVER).unlockedBy(AllItems.BELT_CONNECTOR::get) + SMART_OBSERVER = create(AllBlocks.SMART_OBSERVER).unlockedBy(I::brassCasing) + .viaShaped(b -> b.define('B', I.brassCasing()) + .define('R', I.electronTube()) + .define('I', Blocks.OBSERVER) + .pattern("R") + .pattern("B") + .pattern("I")), + + THRESHOLD_SWITCH = create(AllBlocks.THRESHOLD_SWITCH).unlockedBy(I::brassCasing) .viaShaped(b -> b.define('B', I.brassCasing()) .define('R', I.electronTube()) .define('I', Blocks.COMPARATOR) - .pattern("I") + .pattern("R") .pattern("B") - .pattern("R")), - - OBSERVER_CYCLE = conversionCycle(ImmutableList.of(AllBlocks.CONTENT_OBSERVER, AllBlocks.STOCKPILE_SWITCH)), + .pattern("I")), PULSE_EXTENDER = create(AllBlocks.PULSE_EXTENDER).unlockedByTag(I::redstone) .viaShaped(b -> b.define('T', Blocks.REDSTONE_TORCH) @@ -1080,10 +1086,18 @@ public class StandardRecipeGen extends CreateRecipeProvider { .requires(Items.BONE_MEAL)), NETHERITE_DIVING_HELMET = - create(AllItems.NETHERITE_DIVING_HELMET).viaSmithing(AllItems.COPPER_DIVING_HELMET, I.netherite()), - NETHERITE_BACKTANK = create(AllItems.NETHERITE_BACKTANK).viaSmithing(AllItems.COPPER_BACKTANK, I.netherite()), + create(AllItems.NETHERITE_DIVING_HELMET).viaSmithing(AllItems.COPPER_DIVING_HELMET::get, I::netherite), + NETHERITE_BACKTANK = + create(AllItems.NETHERITE_BACKTANK).viaSmithing(AllItems.COPPER_BACKTANK::get, I::netherite), NETHERITE_DIVING_BOOTS = - create(AllItems.NETHERITE_DIVING_BOOTS).viaSmithing(AllItems.COPPER_DIVING_BOOTS, I.netherite()) + create(AllItems.NETHERITE_DIVING_BOOTS).viaSmithing(AllItems.COPPER_DIVING_BOOTS::get, I::netherite), + + NETHERITE_DIVING_HELMET_2 = create(AllItems.NETHERITE_DIVING_HELMET).withSuffix("_from_netherite") + .viaSmithing(() -> Items.NETHERITE_HELMET, () -> Ingredient.of(AllItems.COPPER_DIVING_HELMET.get())), + NETHERITE_BACKTANK_2 = create(AllItems.NETHERITE_BACKTANK).withSuffix("_from_netherite") + .viaSmithing(() -> Items.NETHERITE_CHESTPLATE, () -> Ingredient.of(AllItems.COPPER_BACKTANK.get())), + NETHERITE_DIVING_BOOTS_2 = create(AllItems.NETHERITE_DIVING_BOOTS).withSuffix("_from_netherite") + .viaSmithing(() -> Items.NETHERITE_BOOTS, () -> Ingredient.of(AllItems.COPPER_DIVING_BOOTS.get())) ; @@ -1327,10 +1341,10 @@ public class StandardRecipeGen extends CreateRecipeProvider { }); } - GeneratedRecipe viaSmithing(ItemEntry base, Ingredient upgradeMaterial) { + GeneratedRecipe viaSmithing(Supplier base, Supplier upgradeMaterial) { return register(consumer -> { UpgradeRecipeBuilder b = - UpgradeRecipeBuilder.smithing(Ingredient.of(base.get()), upgradeMaterial, result.get() + UpgradeRecipeBuilder.smithing(Ingredient.of(base.get()), upgradeMaterial.get(), result.get() .asItem()); b.unlocks("has_item", inventoryTrigger(ItemPredicate.Builder.item() .of(base.get()) diff --git a/src/main/java/com/simibubi/create/foundation/gui/AllGuiTextures.java b/src/main/java/com/simibubi/create/foundation/gui/AllGuiTextures.java index bc15a7ac4..f9429281b 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/AllGuiTextures.java +++ b/src/main/java/com/simibubi/create/foundation/gui/AllGuiTextures.java @@ -40,16 +40,16 @@ public enum AllGuiTextures implements ScreenElement { SCHEMATICANNON_FUEL("schematics_2", 28, 222, 47, 16), SCHEMATICANNON_FUEL_CREATIVE("schematics_2", 28, 239, 47, 16), - STOCKSWITCH("logistics", 182, 93), + STOCKSWITCH("logistics", 182, 95), STOCKSWITCH_ARROW_UP("logistics", 191, 0, 7, 24), STOCKSWITCH_ARROW_DOWN("logistics", 198, 0, 7, 24), STOCKSWITCH_CURSOR("logistics", 206, 0, 7, 16), - STOCKSWITCH_INTERVAL("logistics", 0, 93, 100, 18), - STOCKSWITCH_UNPOWERED_LANE("logistics", 36, 18, 102, 18), - STOCKSWITCH_POWERED_LANE("logistics", 36, 40, 102, 18), + STOCKSWITCH_INTERVAL("logistics", 0, 95, 100, 18), + STOCKSWITCH_UNPOWERED_LANE("logistics", 37, 20, 100, 18), + STOCKSWITCH_POWERED_LANE("logistics", 37, 42, 100, 18), - FILTER("filters", 214, 97), - ATTRIBUTE_FILTER("filters", 0, 97, 241, 83), + FILTER("filters", 214, 99), + ATTRIBUTE_FILTER("filters", 0, 99, 241, 85), TOOLBOX("toolbox", 188, 171), TOOLBELT_SLOT("minecraft", "widgets", 24, 23, 22, 22), @@ -63,12 +63,12 @@ public enum AllGuiTextures implements ScreenElement { TOOLBELT_SELECTED_OFF("widgets", 0, 155, 22, 22), TOOLBELT_SELECTED_ON("widgets", 22, 155, 22, 22), - SEQUENCER("sequencer", 173, 159), - SEQUENCER_INSTRUCTION("sequencer", 0, 14, 162, 22), - SEQUENCER_DELAY("sequencer", 0, 58, 162, 22), - SEQUENCER_END("sequencer", 0, 80, 162, 22), - SEQUENCER_EMPTY("sequencer", 0, 102, 162, 22), - SEQUENCER_AWAIT("sequencer", 0, 160, 162, 22), + SEQUENCER("sequencer", 173, 161), + SEQUENCER_INSTRUCTION("sequencer", 0, 16, 162, 22), + SEQUENCER_DELAY("sequencer", 0, 60, 162, 22), + SEQUENCER_END("sequencer", 0, 82, 162, 22), + SEQUENCER_EMPTY("sequencer", 0, 104, 162, 22), + SEQUENCER_AWAIT("sequencer", 0, 162, 162, 22), LINKED_CONTROLLER("curiosities_2", 179, 109), BLUEPRINT("curiosities_2", 0, 109, 179, 109), diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndex.java b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndex.java index b7a59c32c..f0465a76a 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndex.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndex.java @@ -453,8 +453,8 @@ public class PonderIndex { .add(AllBlocks.BRASS_FUNNEL) .add(AllBlocks.ANDESITE_TUNNEL) .add(AllBlocks.BRASS_TUNNEL) - .add(AllBlocks.CONTENT_OBSERVER) - .add(AllBlocks.STOCKPILE_SWITCH) + .add(AllBlocks.SMART_OBSERVER) + .add(AllBlocks.THRESHOLD_SWITCH) .add(AllBlocks.CREATIVE_CRATE) .add(AllBlocks.PORTABLE_STORAGE_INTERFACE); @@ -531,8 +531,8 @@ public class PonderIndex { PonderRegistry.TAGS.forTag(PonderTag.DISPLAY_SOURCES) .add(AllBlocks.SEATS.get(DyeColor.WHITE)) .add(AllBlocks.ORANGE_NIXIE_TUBE) - .add(AllBlocks.STOCKPILE_SWITCH) - .add(AllBlocks.CONTENT_OBSERVER) + .add(AllBlocks.THRESHOLD_SWITCH) + .add(AllBlocks.SMART_OBSERVER) .add(AllBlocks.ANDESITE_TUNNEL) .add(AllBlocks.TRACK_OBSERVER) .add(AllBlocks.TRACK_STATION) diff --git a/src/main/java/com/simibubi/create/foundation/utility/RemapHelper.java b/src/main/java/com/simibubi/create/foundation/utility/RemapHelper.java index ed53d8ea8..54914e65b 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/RemapHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/RemapHelper.java @@ -4,7 +4,7 @@ import static com.simibubi.create.AllBlocks.ADJUSTABLE_CHAIN_GEARSHIFT; import static com.simibubi.create.AllBlocks.ANDESITE_ENCASED_SHAFT; import static com.simibubi.create.AllBlocks.BRASS_BELT_FUNNEL; import static com.simibubi.create.AllBlocks.BRASS_TUNNEL; -import static com.simibubi.create.AllBlocks.CONTENT_OBSERVER; +import static com.simibubi.create.AllBlocks.SMART_OBSERVER; import static com.simibubi.create.AllBlocks.ENCASED_CHAIN_DRIVE; import static com.simibubi.create.AllBlocks.LINEAR_CHASSIS; import static com.simibubi.create.AllBlocks.MECHANICAL_DRILL; @@ -21,7 +21,7 @@ import static com.simibubi.create.AllBlocks.REDSTONE_CONTACT; import static com.simibubi.create.AllBlocks.REDSTONE_LINK; import static com.simibubi.create.AllBlocks.SECONDARY_LINEAR_CHASSIS; import static com.simibubi.create.AllBlocks.SPEEDOMETER; -import static com.simibubi.create.AllBlocks.STOCKPILE_SWITCH; +import static com.simibubi.create.AllBlocks.THRESHOLD_SWITCH; import static com.simibubi.create.AllBlocks.STRESSOMETER; import static com.simibubi.create.AllItems.ATTRIBUTE_FILTER; import static com.simibubi.create.AllItems.COPPER_DIVING_BOOTS; @@ -78,11 +78,11 @@ public class RemapHelper { reMap.put("encased_shaft", ANDESITE_ENCASED_SHAFT.getId()); reMap.put("encased_belt", ENCASED_CHAIN_DRIVE.getId()); reMap.put("adjustable_pulley", ADJUSTABLE_CHAIN_GEARSHIFT.getId()); - reMap.put("stockswitch", STOCKPILE_SWITCH.getId()); + reMap.put("stockswitch", THRESHOLD_SWITCH.getId()); reMap.put("redstone_latch", POWERED_LATCH.getId()); reMap.put("contact", REDSTONE_CONTACT.getId()); reMap.put("belt_funnel", BRASS_BELT_FUNNEL.getId()); - reMap.put("entity_detector", CONTENT_OBSERVER.getId()); + reMap.put("entity_detector", SMART_OBSERVER.getId()); reMap.put("saw", MECHANICAL_SAW.getId()); reMap.put("flexpulsepeater", PULSE_REPEATER.getId()); reMap.put("stress_gauge", STRESSOMETER.getId()); diff --git a/src/main/resources/assets/create/lang/default/interface.json b/src/main/resources/assets/create/lang/default/interface.json index 3e45522b0..ad29e976a 100644 --- a/src/main/resources/assets/create/lang/default/interface.json +++ b/src/main/resources/assets/create/lang/default/interface.json @@ -278,10 +278,10 @@ "create.gui.adjustable_crate.title": "Adjustable Crate", "create.gui.adjustable_crate.storageSpace": "Storage Space", - "create.gui.stockpile_switch.title": "Stockpile Switch", - "create.gui.stockpile_switch.invert_signal": "Invert Signal", - "create.gui.stockpile_switch.move_to_lower_at": "Move to lower lane at %1$s%%", - "create.gui.stockpile_switch.move_to_upper_at": "Move to upper lane at %1$s%%", + "create.gui.threshold_switch.title": "Threshold Switch", + "create.gui.threshold_switch.invert_signal": "Invert Signal", + "create.gui.threshold_switch.move_to_lower_at": "Move to lower lane at %1$s%%", + "create.gui.threshold_switch.move_to_upper_at": "Move to upper lane at %1$s%%", "create.gui.sequenced_gearshift.title": "Sequenced Gearshift", "create.gui.sequenced_gearshift.instruction": "Instruction", 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 index d473b5f8f..721e6d00f 100644 --- a/src/main/resources/assets/create/models/block/content_observer/block.json +++ b/src/main/resources/assets/create/models/block/content_observer/block.json @@ -2,76 +2,25 @@ "credit": "Made with Blockbench", "parent": "block/block", "textures": { - "7": "create:block/brass_casing_connected", - "8": "create:block/content_observer", - "9": "create:block/content_observer_inner", - "10": "create:block/filtered_detector_top", - "particle": "create:block/filtered_detector_top", - "end": "create:block/filtered_detector_front" + "0": "create:block/smart_observer", + "2": "create:block/smart_observer_front", + "4": "create:block/smart_observer_top", + "6": "block/observer_top", + "7": "create:block/smart_observer_side", + "particle": "create:block/smart_observer" }, "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, 2, 2], "rotation": 270, "texture": "#7"} - } - }, - { - "name": "Center", - "from": [0.9, 2, 0.9], - "to": [15.1, 14, 15.1], - "faces": { - "north": {"uv": [12, 12.125, 13.625, 13.875], "rotation": 90, "texture": "#7"}, - "east": {"uv": [12, 12.125, 13.625, 13.875], "rotation": 90, "texture": "#7"}, - "south": {"uv": [12, 12.125, 13.625, 13.875], "rotation": 90, "texture": "#7"}, - "west": {"uv": [12, 12.125, 13.625, 13.875], "rotation": 90, "texture": "#7"} - } - }, - { - "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": [3.875, 0, 6, 0.25], "texture": "#7"}, - "east": {"uv": [3.875, 0, 6, 0.25], "texture": "#7"}, - "south": {"uv": [3.875, 0, 6, 0.25], "texture": "#7"}, - "west": {"uv": [3.875, 0, 6, 0.25], "texture": "#7"}, - "up": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#10"}, - "down": {"uv": [0, 0, 2, 2], "rotation": 270, "texture": "#7"} + "north": {"uv": [0, 0, 16, 16], "texture": "#2"}, + "east": {"uv": [0, 0, 16, 16], "texture": "#7"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#0"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#7"}, + "up": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#4"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#6"} } } - ], - "display": { - "gui": { - "rotation": [30, -135, 0], - "scale": [0.625, 0.625, 0.625] - } - }, - "groups": [ - { - "name": "stockpile_switch", - "origin": [8, 8, 8], - "color": 0, - "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 index 7ae7927b3..c82bfd54f 100644 --- 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 @@ -1,7 +1,8 @@ { "parent": "create:block/content_observer/block", "textures": { - "8": "create:block/content_observer_powered", - "9": "create:block/content_observer_inner_powered" + "0": "create:block/smart_observer_powered", + "7": "create:block/smart_observer_side_powered", + "particle": "create:block/smart_observer_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 deleted file mode 100644 index ad6cb4947..000000000 --- a/src/main/resources/assets/create/models/block/stockpile_switch.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "credit": "Made with Blockbench", - "parent": "block/block", - "textures": { - "7": "create:block/filtered_detector_top", - "8": "create:block/brass_casing_connected", - "particle": "create:block/filtered_detector_top", - "indicator": "create:block/indicator/0", - "end": "create:block/filtered_detector_front" - }, - "elements": [ - { - "name": "Bottom Plate", - "from": [0, 0, 0], - "to": [16, 2, 16], - "faces": { - "north": {"uv": [1.875, 1.75, 4, 2], "texture": "#8"}, - "east": {"uv": [1.875, 1.75, 4, 2], "texture": "#8"}, - "south": {"uv": [1.875, 1.75, 4, 2], "texture": "#8"}, - "west": {"uv": [1.875, 1.75, 4, 2], "texture": "#8"}, - "up": {"uv": [0, 0, 2, 2], "rotation": 270, "texture": "#8"}, - "down": {"uv": [0, 0, 2, 2], "rotation": 270, "texture": "#8"} - } - }, - { - "name": "Top Plate", - "from": [0, 14, 0], - "to": [16, 16, 16], - "faces": { - "north": {"uv": [3.875, 0, 6, 0.25], "texture": "#8"}, - "east": {"uv": [3.875, 0, 6, 0.25], "texture": "#8"}, - "south": {"uv": [3.875, 0, 6, 0.25], "texture": "#8"}, - "west": {"uv": [3.875, 0, 6, 0.25], "texture": "#8"}, - "up": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#7"}, - "down": {"uv": [0, 0, 2, 2], "rotation": 270, "texture": "#8"} - } - }, - { - "name": "Center", - "from": [0.9, 2, 0.9], - "to": [15.1, 14, 15.1], - "faces": { - "north": {"uv": [12, 12.125, 13.625, 13.875], "rotation": 90, "texture": "#8"}, - "east": {"uv": [12, 12.125, 13.625, 13.875], "rotation": 90, "texture": "#8"}, - "south": {"uv": [12, 12.125, 13.625, 13.875], "rotation": 90, "texture": "#8"}, - "west": {"uv": [12, 12.125, 13.625, 13.875], "rotation": 90, "texture": "#8"} - } - }, - { - "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": "Indicator", - "from": [13, 2, 6], - "to": [16, 14, 10], - "faces": { - "north": {"uv": [0, 0, 3, 12], "texture": "#indicator"}, - "east": {"uv": [0, 0, 4, 12], "texture": "#indicator"}, - "south": {"uv": [1, 0, 4, 12], "texture": "#indicator"} - } - }, - { - "name": "Indicator", - "from": [0, 2, 6], - "to": [3, 14, 10], - "faces": { - "north": {"uv": [3, 0, 0, 12], "texture": "#indicator"}, - "south": {"uv": [4, 0, 1, 12], "texture": "#indicator"}, - "west": {"uv": [4, 0, 0, 12], "texture": "#indicator"} - } - }, - { - "name": "Indicator", - "from": [6, 2, 13], - "to": [10, 14, 16], - "faces": { - "east": {"uv": [4, 0, 1, 12], "texture": "#indicator"}, - "south": {"uv": [4, 0, 0, 12], "texture": "#indicator"}, - "west": {"uv": [3, 0, 0, 12], "texture": "#indicator"} - } - } - ], - "display": { - "gui": { - "rotation": [30, -135, 0], - "scale": [0.625, 0.625, 0.625] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/threshold_switch/block_ceiling.json b/src/main/resources/assets/create/models/block/threshold_switch/block_ceiling.json new file mode 100644 index 000000000..8cad025ad --- /dev/null +++ b/src/main/resources/assets/create/models/block/threshold_switch/block_ceiling.json @@ -0,0 +1,44 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "3": "create:block/threshold_switch_back", + "level": "create:block/threshold_switch/level_0", + "5": "create:block/threshold_switch_front", + "7": "create:block/brass_block", + "8": "create:block/tunnel/brass_tunnel_top", + "particle": "#level" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#level"}, + "east": {"uv": [0, 0, 16, 16], "texture": "#3"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#level"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#7"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#8"} + } + }, + { + "from": [2.95, 15.9, 2.95], + "to": [13.05, 17.95, 13.05], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [13, 11, 3, 13], "rotation": 180, "texture": "#5"}, + "east": {"uv": [5, 3, 3, 13], "rotation": 270, "texture": "#5"}, + "south": {"uv": [13, 3, 3, 5], "texture": "#5"}, + "west": {"uv": [13, 3, 11, 13], "rotation": 90, "texture": "#5"}, + "up": {"uv": [3, 3, 13, 13], "rotation": 180, "texture": "#5"} + } + } + ], + "display": { + "gui": { + "rotation": [30, -135, 0], + "scale": [0.625, 0.625, 0.625] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/threshold_switch/block_floor.json b/src/main/resources/assets/create/models/block/threshold_switch/block_floor.json new file mode 100644 index 000000000..077012a6a --- /dev/null +++ b/src/main/resources/assets/create/models/block/threshold_switch/block_floor.json @@ -0,0 +1,44 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "3": "create:block/threshold_switch_back", + "level": "create:block/threshold_switch/level_0", + "5": "create:block/threshold_switch_front", + "7": "create:block/brass_block", + "8": "create:block/tunnel/brass_tunnel_top", + "particle": "#level" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#level"}, + "east": {"uv": [0, 0, 16, 16], "texture": "#3"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#level"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#8"}, + "down": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#7"} + } + }, + { + "from": [2.95, -1.95, 2.95], + "to": [13.05, 0.1, 13.05], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [13, 3, 3, 5], "rotation": 180, "texture": "#5"}, + "east": {"uv": [5, 3, 3, 13], "rotation": 90, "texture": "#5"}, + "south": {"uv": [13, 11, 3, 13], "texture": "#5"}, + "west": {"uv": [13, 3, 11, 13], "rotation": 270, "texture": "#5"}, + "down": {"uv": [3, 3, 13, 13], "rotation": 180, "texture": "#5"} + } + } + ], + "display": { + "gui": { + "rotation": [30, -135, 0], + "scale": [0.625, 0.625, 0.625] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/threshold_switch/block_wall.json b/src/main/resources/assets/create/models/block/threshold_switch/block_wall.json new file mode 100644 index 000000000..60981d9a6 --- /dev/null +++ b/src/main/resources/assets/create/models/block/threshold_switch/block_wall.json @@ -0,0 +1,42 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "3": "create:block/threshold_switch_back", + "level": "create:block/threshold_switch/level_0", + "5": "create:block/threshold_switch_front", + "6": "create:block/smart_observer_top", + "particle": "#level" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#5"}, + "east": {"uv": [0, 0, 16, 16], "texture": "#level"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#3"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#level"}, + "up": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#6"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#6"} + } + }, + { + "from": [2.95, 2.95, -1.95], + "to": [13.05, 13.05, 0.1], + "faces": { + "north": {"uv": [3, 3, 13, 13], "texture": "#5"}, + "east": {"uv": [5, 3, 3, 13], "texture": "#5"}, + "west": {"uv": [13, 3, 11, 13], "texture": "#5"}, + "up": {"uv": [13, 3, 3, 5], "texture": "#5"}, + "down": {"uv": [13, 11, 3, 13], "texture": "#5"} + } + } + ], + "display": { + "gui": { + "rotation": [30, -135, 0], + "scale": [0.625, 0.625, 0.625] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/filtered_detector_front.png b/src/main/resources/assets/create/textures/block/filtered_detector_front.png deleted file mode 100644 index 3b362a2817ba38cf70f24596291b4d344b2533a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFn(W{rmUNo;|y3*RBm4Hmq8;YWecz6DLlLU}W@WWYl41h>EaktaVuGazqFK-mp36nLnJ6DjF-u%DQ!vWDho>k1B=qNw-&x)5#c;{ ztM-hE#EF7a_iBAqIdn>&u|%B8jEY*W8L@HGq)A#Hr>>fsh@>b~GB8wnN;u?A-}4Y? OK7*&LpUXO@geCw%!%YeR 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 deleted file mode 100644 index 898b47e18b84fe62f2f7bd234cbbb6d712a4c18f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2049 zcmV+c2>$npP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1bxlI*As{AU%j1SBCI%fUP%?ha=8lNj0Us_EOO zI%4e81?DL!Qwhh7zyCMgUwD`zyPzq@5~IfxN+?`W$^PpZR_-?P;rzWGvR`uFb}&jo zDZ4QR>lJIi#>czFLf>?dzD7QES4-zfO*n?LY2D#Rq%KTvm6Y0{vMvQdMLfd?m)%#G!2 z%aXWo6E7rTy)-#VkuF(S8V?Z(PWZNk&V9?dU!#njJ7Fjj79&jg@pXS1@X0%8^N0}< zyeEql>|$Ox&?IDRFK)?60Kqs#x%ow@ zFVy&CNxmnA3%Uqxx+{fA`#eR@CbWjPNH)xEAMus z3h+^hl7LN-3a~;@@F#@~4pkKmsv0$E)}qx#i6Lr?F~ya0HAxCdQ%ou4R8q~7L)IK~ z$~l)@3l~93YKbM4TuP}Gd)DBpR?My#QR~5n9O2L-9_h$OIcfuaT4>s0OD(t3YUeIJ zbnUUHo_pza&;XU(2t!94Y2;Bxo#5J(8K%xS)6BEXdZT8j{_Fh(YGkPKiPRdGZq(44 z(puhS4QhQUVLK7qS-4{A1=%+O=Zb$*T$}1g*`Lk#ylWW$ z%hLUJ!jO8_#sT0CT2(%Z@6L}FcMpt3psXXt)+s0{gfp*7P*CQF(tXzvMbAY_=`RaD z+mr0kz&=l|^>pp%5poRl&JPdj^k_k(5K}92&*@47oHMp_`618A%9j-@^%ah z-YvUQbNR84QFE0GM)e|l)7DDo)Vl7^qk@H?@%q3S)j+N7=?LIcYO$NG;;4aYdu<#W zM>;#!)NpUu_gsd&npajqR&J;9?Q{pDa`<+UvKLti)T4#BRS=hkPiBoT83!b9ATrW= z4D%1Za+ze7%usRW9vcZr!M$PB9i}5NcqF@ybG2?W0p~^UE5z%2#|h_yEx9nZxN|_S zJHrTBn5t#~w^T!dwPp`P>VAlK+6KDR87{`LlMP|NLt88%yU!4;-Jc;27B&7dXgTY) zw=wMQ1G;wTwR^Q7U;(ab1P52-;z})QeQP zhh`a978xEW-c)Mc=m$j`5d6J)Y%_#O>h^bU?>h3ZdKrCOMhECIn^Cx$STcp^F5zOJ z^+4|biD4px5b9Pe+&G(BcDr5)1lp_AxR}x}rVzZ?O!=88?n(2_@@j;PD_A=}a~so? zJ<8!{GSP4ApseR)2VU2kS)rP(=?!$+9aV_MBnD@Dp*^UOv`c=DS7)-8x90JTA&g83{cnbp9C;^Z#M{cgl@`{%dMVIip^j+ zPl@2zHQDXi{V9}BGe(%kpo-(Gb<@OkyM6V-eeXs#H*kT*APUN&Bl%HPE$R=t`9XAC#!-wJyX&ibl z-;Afr%uHVg*ruYcY?&^6NTk|qbI8Cfa)DFn@q)0LM zn*XCH;TUa(s5_9mmh_9ZmT9=^d~)A=l+OQh!q@%K7}33!Ij8FdSKEI86%7;%9IiR3 z00006VoOIv0RI600RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru=K~85 z4>}$E{tEyA0iH=jK~y-)osz+7+dvdWkL=MniXbL-P$-3B3|W|Xk%mIQpmfs5j_#>8pl3L{INk*qF+6e$rQg*2t4&Tl{5&J#>@p8%4%>wQoY8JQQ zQ-VNgq$P`^nNB=>PjfWbtJJha1Lv@mLFBp>TRD7B)9#qHp;jE^hZO4+CDS6LvNC{5 zQes_`L4H-sb+&=gc$Upv!u)#0T!l}Z3V`XvWBl`Lq1-*NiZv~6L!3jau$<%9<$Xp_ fr}k3JuUGsBkqODxf3VOW00000NkvXXu0mjfH_yzQ diff --git a/src/main/resources/assets/create/textures/block/smart_observer.png b/src/main/resources/assets/create/textures/block/smart_observer.png new file mode 100644 index 0000000000000000000000000000000000000000..b4c7a86c79e23f9b497a38b562ec933ca3f99f6f GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|y0G|-oB6q`ineG|pI_DNdeLtP^`%dlu*FEbi{rC5UUSAdW?qG(giHVVs zk*$r5rlzKwlT&|xe^pgg1q-7WBU5T>YIu0KDkHPCwe_kS>ox+-t((iUHTa6}fJAXIj zjOo$IOn2_9&1hGUY%mL!+#%@i)zh^-#PBn-g83Kb8J#z@Sr$Iu({K1(ra*aicI6@a jY+v?$TKnD}e8c`~0ngHs!pNmSH!^s-`njxgN@xNA>`#94 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/smart_observer_front.png b/src/main/resources/assets/create/textures/block/smart_observer_front.png new file mode 100644 index 0000000000000000000000000000000000000000..6d395e0d7a4c18587faa86a0dc2ffb0978a4182b GIT binary patch literal 335 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|y0G|-oB6q`ineG|pI_DNdeLtP^`%dlu*FEbi{rC5UUSAdW?qG(kjg6a= zlc|Zx(W6J#uU|iR?%cknwpx{*4AtH$bJC|aTa()7BevL9RguS zQ4OyKpx^{g7sn8d;LzS^zQYPUEOQ0qI+-Qf5B<%*W%@Id{oz!%3dLLhZe$j>^B?^E z;IJTHJG-IUb0Iyq9s$j{&r9cKFLBv&S>F0%t?~0eYNS%LiU0G|-oB6q`ineG|pI_DNdeLtP^`%dlu*FEbi{rC5UUSAdW?qG(giHVVs zk*$r5rlw|;xwV^zopr0Ayi>vj6}9 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/smart_observer_side.png b/src/main/resources/assets/create/textures/block/smart_observer_side.png new file mode 100644 index 0000000000000000000000000000000000000000..d3e44ca979d36527be139ee248f676ec3accbd04 GIT binary patch literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|y0G|-oB6q`ineG|pI_DNdeLtP^`%dlu*FEbi{rC5UUSAdW?qG(giHVVs zk*$r5o0F3&BeNGHQw0m7wY9aTre;-DReyhfYHDhDcsM6prU=kX&H|6fVg?4jLmwpFE#TnNfV0mZSNg8w`1dYYAVg#< z-@_p7e-{|-RNS%Lh(0G|-oB6q`ineG|pI_DNdeLtP^`%dlu*FEbi{rC5UUSAdW?qG(giHVVs zk*$r5o0F59u0a|D!*m9QvkVOD7#O0=t${#OQ?sh7s=vQKH8nLnJbcgV2_VZj3p^r= z85sBugD~Uq{1quc!7fi1#}JL+P#?=m~$WgEnl+o-1eE5OwM{MO65sp z8eFS}V{f8~28+a*%O>Y9JDzb-zH1Ovvqa+KI#12%_DfuL>b(BED*U8D z-S1sF1_hfkqcTrR)@Lw2_h>I%^I}Dt$J$S-;6 bu8I7=d3YVFjjcBVUB%$(>gTe~DWM4fHL`tl literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/smart_observer_top.png b/src/main/resources/assets/create/textures/block/smart_observer_top.png new file mode 100644 index 0000000000000000000000000000000000000000..c83df0bcd5327c8dec37afd0f40430e3e12428ba GIT binary patch literal 293 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF+o}<=ld(@27Kq->Loox@Uc*|Ng$v>#O449n5&LJ-Lnj zxhqgTXMsm#F#`kNVGw3Kp1&dmDA?uc;us=vIXOXug;|j;@%okvSEh(CvrXjke%$wL zCLhnDv#Zmk&fj@?Kp{<3YTB$#mCVgI-hAlmyCmtLdHO@ZbfIou2e)0t=Z*!^CF=(=TLAc;vU>(WH}nJWA6fC#P?XXxQQ&@h)#8L)V!zGxl!YeYer^hU%@O ksomX-%}mT31_q1_b<=e&?4L9JFVIyCp00i_>zopr01j4jKmY&$ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/threshold_switch/level_0.png b/src/main/resources/assets/create/textures/block/threshold_switch/level_0.png new file mode 100644 index 0000000000000000000000000000000000000000..a7c53a9580cef01bdb570de43ed395d7093289c8 GIT binary patch literal 335 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}l0G|-oB6q`ineG|pI_DNdeLtP^`%dlu*FEbi{rC5UUSAdW?qG&HBa;Io zl5sZx9jEs>gDpo3@2694nnqr>%(*8y=!De!alNl?3267g7L>4nJ@ErnSMo|r~ z2B6?%PZ!4!jo{e6+kDK59IP83tX;R8_2B>iSGsO5$>g`2(<98P@aG95qvkS^CCSrc$nF0H$$#);DT*I_x*NNS%LiU0G|-oB6q`ineG|pI_DNdeLtP^`%dlu*FEbi{rC5UUSAdW?qG&HBa;Io zl5sZx9jEs>gDpo3@2694nnqr>%(*8y=!Dez^3PS4`7|t>P!B z` znC#5km2NS%LiU0G|-oB6q`ineG|pI_DNdeLtP^`%dlu*FEbi{rC5UUSAdW?qG&HBa;Io zl5sZx9jEs>gDpo3@2694nnqr>%(*8y=j#2{a7#PknFa(>)c_|1@XJBY&U{I=j z{|IOWXMsm#F#`kNArNL1)$nQn3eNL%aSYK24(*NPJFLLN>YKYw$RkqN<9+?Pq@b0r zX7nHb!O3t$o?pNtNKvbyO{a5gymsgI9{I)JVj`#9U^jQu z->A~D^oiBF?_cxwKGD3i$oCz~p~o_IG68GO*E7^G%y#9ve)i^5PNS%Lhh0G|-oB6q`ineG|pI_DNdeLtP^`%dlu*FEbi{rC5UUSAdW?qG&HBa;Io zl5sZx9jEu#G>gyO7&N47Ws;F40hfk$L90|Vb75M~tB@M-`GF7$M94ABSyvJ{c@)FN>!## z)|*c0mDeNuJGM@nw(k4ab9<*Lp7WHu!`X7&u*PD+jQc+rKQO+zzNS%Li60G|-oB6q`ineG|pI_DNdeLtP^`%dlu*FEbi{rC5UUSAdW?qG&HBa;Io zl5sZwBW9`>5Fq~yz*p%&7Y^WZoqGF{Y>ZKs$C?#O0DP|xidgMqWaBeIx*f$tCqGm2_>H2?({db&7oDp+HGm^GV!89n&jE+_FrkGc3GzM@V|( zwiwAN7nGzoP7UzmSo%b2{qJ4D+B=(zRleHrwj8&s*|9+4{twm%+(tWif`XZ2?17GD N@O1TaS?83{1OSr8fd>Ep literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/threshold_switch/level_5.png b/src/main/resources/assets/create/textures/block/threshold_switch/level_5.png new file mode 100644 index 0000000000000000000000000000000000000000..159e28a7699c769f025a366dd7e8b711540a1572 GIT binary patch literal 359 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%LhJ0G|-oB6q`ineG|pI_DNdeLtP^`%dlu*FEbi{rC5UE{?UozAEnB!HiAW zZqpeU+8G$0Y)?MRz_5;iq1aG8Qbol|Mbt|{$WcnbPE*W4PRLVV+TTbf*i5cjxK0yj zK4*bPWHAE+-$4*&+%YlxEl_Zdr;B5VMsR4~TfV~z9Ik~6ww}AT?epRXzxO{sq8nNE z;P}^PM;H?RRWvwmIv4qRjk3E1OO(wzVV*{}L|ePZ+w!Y~7p zp8l)9UAa|$Np*g?d~)frr7u|{HM6eVach~a>K(ecEOU-x_m;S;8kc5g9NZ~x>h=7L zdCD_2SN_#=Z)?2sl&uk((UM$Zx?pDdABGC%uNS%G|;0G|-oB6q`ineG|pI_DNdeLtP^`%dlu*FEbi{rC5UUSAdW?qJ4~?a9Zd zM?|WqSgDBGX^I)h33=*E`y0swo5^YH(+&Wd!&%@FSNS%G|~0G|-oB6q`ineG|pI_DNdeLtP^`%dlu*FBk;Nx|WPd$z5cKYQ|%?a3`o zrEmBTW+g9EEM8i8wWwW(U!%`c8ZyXxaqq3C~Gngz)1Eb%n6(sdII;}MmUBVwz zoEcud{fI65v8a%Y;2&{nYMz2iIr=LT&#d(RczErjU(D}5M3t@icuwpmQw8(#7aVr3 T&A*QT-NxYQ>gTe~DWM4fZ0~XH literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/gui/clipboard.pdn b/src/main/resources/assets/create/textures/gui/clipboard.pdn deleted file mode 100644 index a44cea80b775d3d56c35f787570aaff7901f2b9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24482 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 diff --git a/src/main/resources/assets/create/textures/gui/curiosities.png b/src/main/resources/assets/create/textures/gui/curiosities.png index d2fedc84c7821c0b839a3859b0b893f7ee37312d..1a2f1104b6d88870b896911f2e08482731b963cb 100644 GIT binary patch literal 1999 zcma)6X;f3!7CtvOAp|7|VxgE|tbh>(EQXRWXrMu$B8Ev(42HqTR8&YH0>Xt?mPk}$ zks^Z?2{H*z7}P3*LKS5&43!|YAawu)2OI(fa^J=Ge!O3Ab+2{S-rrt(pL5ne-*=93 zz1?+nOmqMMx}F{!UjQI1gn%}Tx#*fe{{+T9Jc2UMKfZyk`)dhenIg92(2pAS{ zz5LxUPaqI*IGmQ27G?QLYpV^Dc_V8r*E>78LJ)L0wvt2N#9K@SogmTA$ zH$wHd11XHjdKBGe-KOuO-}yPax#88uRoNEL8d)yq3rhOzMY6uy;L*_YaZ!6JV|NY= z-fob$mseMfeIA|Mwr%Lh?72SP3*WYeZq+8O*{X!Z#I)@-YBhv3CEZzqTFTHgyNHQ9yiu{|Xc2`llDh zVETPLT|hRL6u|dphsfe@`s!4-mpk%Z^yc_EDM{tMi-MnWhM=Y+Ph=B@m1Cx9a@e%H zEKAW?kv94d_g<7Pg@u_K(a@?ckdAdAL9^5I{a z2IUU?_qV9k5;qpPIj{DA_em-4xOF_B;^=RIF%yXSo|9MHt>FKjj$C64zcO+M~~T8dJnWBmV>iYp6(|<_}Q@PeW!i&~YHfA!5xZ z`1FIOBoIHd1J9om-4P6VX_i6STYxrz5Ue zY93%e*p36{LH{&?DKG5h+6Eu{c6pHH+~KMAp4#3my$^#L((7|Qs#GJK@m=!dH1sk8-d6t7P`z4Wl_-o)G1;EIXV9pdk{gJI`nXeFlL zk}-w>F$;Dj8}m$@lu2GD1suN(eijFtBdYZ&8wzd0+_rXdPPRf}pgxrm_AtA!P!b+Q zEIGL5R0Vvw!1WL&AW~mZ?of^uRmwnH@aei#DHA2(23a&rJAckK?Yrd0i+P187`Yd! z3aBm7K1RzwLnPAhDuujKqN_&w@EJ38H_3{MJN0(+${r}rhNi+r?ACeE0G`+$Gb0=8 zWhrOhe>}NX=f|%%8xWsUJSo!nEVvbla5#RKEcFQ~&MtoP8pM=Kcauu3T9l8Wh2}gO z)*Mb=zo{q2q-R}^3i|q(P7p|l%<(KlU&`)wLAt=Nh>6y^XNpEl0k7yP+!o@mY(#&B zZyeWAL8o^KWOpwvil8>f`YS(XY!*=OmpSX!*N(Z{60hM411PyySDZ?QuI)7@QHQHU zz$D)_&IYMpyy_?%?$7+&V+1Mw9{VTRy^&_vjI-d===GZhnf1ACUUhzjZ4g6dvvbXN z@rnuIc)#buLrblIquHy-{ZTBax$mTRr(t$QZ^6&(LxB7$KE`1_I)H{u3upVQIiL)m z4e literal 1349 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 literal 1196 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 delta 1991 zcmZ8ieK?fq8o%FnUS?)x2yL>_Y-vRD5izY|lqp}sWPC-KlF|o}kD2XjUVFCXw2R3V zhJ3Uu95G5ChpjYkib}*5wJ~99(;ga0h$LYL5hPYYge`0( zu@b^b*g%*KU>GKqO2uOFfddDcnwt3T)}Btxlj$BbUF+sq@&u=o%_~lJGbE5))|^AG z=}F#OQveu>xrVTH1eO3)hL4wLusHfnDP8o!+2nYqzhA%gEf*bM*N3SUZ}?2D_Rh~Q z-6I+ABAymh9v)oVFvhMKcXd4xo40w(5y6oaCvr!JH%iRsg*aY1^;KGJRLx{PkDDyJ z`bGGMS~h!~+9l3hVm=@0R9wI~fZ`ZfEYFziX3HLSkTw6(_Wc1F#83ns}!(3rrcyop^gjr#oyA3nCo={2GMu6#REzkOyy z%OBx9Ngk+w4nl|A8E+6nYE=~v7{WcP3Zc$UE~K*+JsWfnmQd_Et>WuMl&n^55Iw6+ zyMdl{N796uqAeAAgn8Ti72&9J#zFb}<%R|sNp$`t0)LOk(=dO|@GC@ZnG2iM<=t;#$CD z3EQy!$sy@`bkqf=#)JrAaoX0yP~M;KS|&{$k(38Wa86>C2YsM4s8jZQh| zRV$UBI%pb`m4ygx~SY$UzU~8AXKvyP;XtL ze5P+yz83lYZB2J%d0AN`-O^y_kI$bgvpFiTh>q@~?SwO>oO94)5{||%m#zSf1s@Sh z#NQ@ZN?Gt?5Sf@zsroofA9$?LJ5$7ofV$-A^N9G!kq!#397E!#%KQ8{MfMsuDAriH zQrWXBVb$!T)7VPwa@<8bf+S%epLK%nw;o5qd{%&7XbqY09lnvSwMHg>1R4&)-t)gq zt3r6EtZVf+s_#M+edC=HPV25qf-AkTYdQj3htsP^19E#EJQkduDYelX8ra|NhY^K< z(D2TL0hsFYxZr4&4;@`Ge~ssv4USeJ_6QHYO38Dg+o0)@s&eU&;6B1{*8fscS=ZR; z4zmGaGqA3@1(Pnol`&}hH5&@CgWvuI6s(yKh{O=m1GbQ_&w9ANT%HIudhS=Q!>EGA z<9!&+bAcxHtHGVMv-_U2;O#P_+GC*HY#BP2bA_Ayp&-o>DZ|d3{57WEV#fBDRXGDS z4fOZ~bJ3I7a&Bs7g=lXo+I_uirMfiSY+h)K;-|<8W4wCG*9h+wo2*7?`C)kysB5c` z(h0$#{MN;!t$nt1THSRTr)j#1anrd@d??$kIE|5YlBi4J{Dke|K^J9d33Ve2tO}!j z&dO(A zSqoqvlSl5qnI_v_%uEEles86}sNqoKqzJ*0ZVI89d(y!! z;|Tm~R|QIZZD>NUweO*O99ba2&-IJFVVR~2C8kAis`;N3)bzE4F_(lK8iqNjJaPi* zgjuH644nJ)XhP?VJ;>co3)tgqYD9#i0x5_bX~J8h0JgXQth(E?CG3XkSbuep<40Oj&+?(V|T9^8_DmfLHwn H;dlQAkhMp% diff --git a/src/main/resources/assets/create/textures/gui/filters.png b/src/main/resources/assets/create/textures/gui/filters.png index 98273fe3e9cce325279142053a0569ee348e7c4a..1a210a37348417cf357370adf9eef49a23bd9742 100644 GIT binary patch literal 1872 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 AVgLXD diff --git a/src/main/resources/assets/create/textures/gui/logistics.png b/src/main/resources/assets/create/textures/gui/logistics.png index 48d7c14e85dd8a7a4539efa9147d3d7e6aced585..bca9f8497226c90199edbd8edc5d5cab3e5ba6a5 100644 GIT binary patch literal 2617 zcmd5;i8mWq7k?qBt?5Tq#S(3`HEJpvrBhUFMVUrXVvlw#W2q$?yO^d->0&GuZK;ly z+SOK6C8-u|wWxikw)iB7iJc^0%uMHe=lcu3ch0-_-QTnio^+hvDF}N52 zK+?k8#0CHee+dD5g!#%Pq`+&}!rPb`fwFdmfAbBfx8aY508}K4?|2CDZP6feM?3&~ z-|kLGYhb}oe5~EV#LzC>ZDG{4K*2!~ur3qvisbCY|hOjBg;2X zQ}bn0guldT!(B(CX z(#2Obge{FUHh5#a2tj|6Lf@&0RC3sW^it**hJ^78U# z?m1zx*yYFu1lc{u?}WYl5ez6LsuP?#0shhY%%MP&eZstZin^7zWi=9}yYM5w0i~Fg zFU+QRaY1R?8Xnce9yQOja867%RAE})P1!0ob)c2u zZu8o$<)9Ojz0ViybK&4^M%be)E+s|1T@^_ z!`p*&aD@Xss-7*ria&&?G=$7t_;Pb=u+r1=W!Tc#3;1d_AxjQDwIr;5g~1%G8pKek zy4(H4Yo0kf1Fu#4PAY8-whc;S^!`=WKco_u&)7^>%$GJoH&n-pGi{bD zC^Zr6+1H9!Dhg9_RvoSiD{CLiUweNfdD=4E+PwZ;!1*%B4lCaFs;s2(CA!FXbS1rx zNL{8*UY?(vTXwKt>3+6FRm(4d+?*Vv#B4_j$AsIX>s;#+n<>33DshMyx}R}aOJE1* z2VDXayWDD46}7(TzbcKWewz4Lgpz%<-c;v&vTN?f5rJ!kp^8 zT--Dqt)6!FWN@_gyFd4R7JD7szqgONZ-Il05Utzf!0M%p*S4#~%US6xPHe@>onO27 zaWsjz3-Y%!i+II{mmffo>ASIs9efaFBbe#v1?(Qi!)fX$!6&J3S|~~or&`FbTq;Kn z-0uPTkN#55sdBV3*Mbkb5=@J#TeNkyOE$kZvvnZ^fyg~Gvo zZJFSaSoq2!Vg*sFCgr{4Z+=6G{=f6*xIA04;VsNGhUzts_SI_z~D|vtt&C<oM-Wh5OXOtwE!^`M)fJdHM_{*_LRv zm=}fYhC6=}r!ij(o@Vw0CqC_crIGv(Roaws3-HbIn~R2;_wp{MYP4cMfe0kaczS>9D7b<8Dfy)|n&O2g;h0>80x1 zVNs&xfSBXAFtfIXsgn=7u&NTbst22B zrJhZ5tq;lDn0m^8_iafc7Zau;mCZRT1~8lrziNG$G9|?ubb{ij^Pz^3<&Ac~0yrpV1m8Nt_McPVg2+ATz`RneayIUUPFZbEF<`$|x&> zA`|f$q7(IW3R!=LW$bZT>R?(j&}u<-=%vB96Q6a)CEl#}Urhx*>5Trj(qd<)+@ucX zK+#h!)YwLB8nopo#9BORjroD>VIdG~4p1dT+I><`BPrPB>EmK6f!}X^FM8*^K<1^H zCk&k;&Be`zG+Le|`H$XcLE{wQ_1=j@iHZ`dNbR^Quai_`C51gMiffTTZCq`K zHU*0u%^0BT22IfZXkw|v$<_2tBtL-OSj4|m+W9JCk!Sn-V*G@Nk#Q>UvP&{Vgd$K` z-4o@qqPT>ckp9Nd+nNU*P;&#C?cS_pjDT|DA|#O2|0@)I%40%)XZ0|oQ&pJgA_eYx zuv%rg5PcXfDf?W^S!!*p3nM~__N?9U7$6xaiN>XrW`JX+0=GKMK&FQj_=Mzl9P1`{ zCUz%$>mmS?Y3#Y7F) zdJe6Zaa!bwzX5YE`fTSBWb5T_L2W zWLH-AmP!^DK=#k~CG773zI_Sl-{cSo?H?*HrmXFSoaWb!y;?JvqQ_ literal 1855 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 J#z0ZQzX99?0nq>e delta 1874 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 ABLDyZ diff --git a/src/main/resources/assets/create/textures/gui/toolbox.png b/src/main/resources/assets/create/textures/gui/toolbox.png index 9af44d1230925dde7f4175ee56b08fdfd4491be4..6ab53d8f62513e839e5de3d240c682e823ae0a0d 100644 GIT binary patch literal 1473 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5D>38$lZxy-8q?;Kn_c~qpu?a z!^VE@KZ&eBenNmxh%1n0Wo2bzVq#-sV`OCf|GMYN_T)$v6&4m2W@hFI6DCwtRP5NX z!&6_}N=48>j?diOysLM5cX#*y|NlFCrapS~sHCK%zrX+3v16g3p=oJpH*Va#apT7I z>(`eoSpqct(Y5Dafs{f?kY6xR3qHUQ6C?c=sFt(9BeIx*f$ty)Gwzs}4HRVA=jq}Y zQW5udZf}^Bp+M{6gpE_eqP1CBD*taUiCp*Q#5=W*DOr=|{ywYu*uP_PwcYj`%~y6x zm%qNVX6Me{bh+-}MKjm!wDq;jzGtcR=uT{@#hG;`?Kl7Y(C=Z_ z(>Krl{r>Lx37fyod#hXZTP!X7pzPgG?x8xN=j*u=zJ3n(-Fk`N;Z2<5-*$#0??gp- z7cff1vP(HIXE5*z>|TDgnSH0;N-whq4-0$l^B2ViiRK=7JYR6$8i|I_-zpX{0!1!1 z)UZ9Mvh&!jl))gzU-VDv;i-&<_e%HIaYzZ=QCw6cC159i@BPQThC|;y!k7(m`)_<^ zE$`3(T4At@&!mCv0)v!7+4rztKbx#w(5$c4{#$cUR;df9re|IAI>!3>#|)Ah+IPq* ztx92TGA(6pas|5c-G#+`%r@ecJM;EjDnF6kzz$?=s1VqBE?kmVW3iD`fZIg|sfLTC z3m6009yr-{#E6IQc&t!#w;MQ9nL2}AiiN9K%%81opQPZCOG zfuXj5(Zu16T@Z+WNDfGzDD_=?ZF%^wpAEXq{~q2y$O19b!NvD>L&vI%4HrJ&w+jV1 z;y^Q!%N8s-mE_cg*7#+V1Q!HOJw@&-}^e3UdVRy*CtP{!rI{qXin6%phkruyx$sJGE}# z13p2RML+`_n2)@>=Vc#X(B82K=)uLWKWH*Lt^Y6Jm+@%5f}q)f!#}fIv==iTykuY# zA<4@Tc7dT6qHaNU!>i3N-Bx8V+ngx%4Bf;SAEYY%K^4tt(J6Hd$Nqo*Ds}LUmPPyg zFfAwB2H(OQTjRH7JPeyxA7GGh*va_d>I-OFZwSahr+0&=* zO=1#d+i>%}sPGCyhN~>AI2Y_>iDSCpvtSy7Up;#XW6n4BwJchk3vBmuBotf7lnAX* zZutB&l_85$MDD=P2NwU^8MfVC+skk-e;v~WtNM@kna)1ce=g3rV($Jw*$o!;;tltH zYVY7Ed%mA#LB&5VCIJP8v!Aa^G`#w$&ExR>k1P9y`q*9HidQ|?w`xcP=gb+gtk2`( xXTQ!0)nE@$1oEz)&1zv>FuQf|W9g?AHO#)V+EX~xg$^+Qfv2mV%Q~loCIIX6h*tmr literal 975 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5Fo{p?&#~tz_78O`%fY(kk47* z5n0T@z;_6Q8AUa`8i0a~#X;^)4C~IxyaaM$1AIbUf%O0X{~tYibmPX&8#iuTzkdDG z!Q5lVj_ug7W66>w`)9dKm@uKgzrU+@dS}nn?(Xi2ii(nwlC-q6(9qC0BSv#`^KeZD zD-}UaDIPX9Hda$Ur)~CghEC^Z6ktH09aD~QKR9aHaQWq@ zt$xePa{fItDEn8MyeDRr{ZFonN$MA?Dl?8f%YPP;yLZd^jDNRg2W~I<{rg94_T#8e z--1_EX-nUqRJ6DMOXweFj;sH-t_fsd5@=vxQD9)?c(G@B&1@$J%loUotF|^2{i|5K z4M@i^d}Ia6?sdH=^PuP ziSe4jO%Gu@l@~vCN($302AJcK?5%jq^ere{ zkMVs^?cIwk8^UMoJ@oBk{@LmGbF>8>6r5ZCKBva&%<{t=A9Pt19_(Lpk8_>ELj&gH zT*Ye&QW!ZvKJ-^yu>C~wJ%#7IO2BYIG8)RX}x&JRebYNhapv=H@(#g5>c)BlZQHOSluZUuKxaGKpowZ|#QEIc_IK8osS(%<#RelF4-8 zpJ~H>ArFBAdEYnxw`zF&afUL(-=zXeUfDY`{J#7BR<`Hm`X*C{-`6KC`_IDo!f1hN z?tjVqoLT=XnJ@hN%(md~bB+Z4(oBYv<(-1S)YXvBP+opKLAA!>*HT*x0bufG5O|Vr fd*Z4nh=~pySiEBxw$}~ From 08bd9360b0bbee7736869ac6159710e9a54beb40 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Sat, 29 Apr 2023 18:43:15 +0200 Subject: [PATCH 2/2] Z counseling - Bezier track segments now render with a slight angle --- .../logistics/trains/BezierConnection.java | 2 +- .../logistics/trains/track/TrackInstance.java | 4 +- .../logistics/trains/track/TrackRenderer.java | 4 - .../models/block/track/segment_left.json | 52 +-------- .../models/block/track/segment_left.obj | 81 ++++++++++++++ .../models/block/track/segment_right.json | 52 +-------- .../models/block/track/segment_right.obj | 81 ++++++++++++++ .../assets/create/models/block/track/tie.json | 63 +---------- .../assets/create/models/block/track/tie.obj | 103 ++++++++++++++++++ 9 files changed, 279 insertions(+), 163 deletions(-) create mode 100644 src/main/resources/assets/create/models/block/track/segment_left.obj create mode 100644 src/main/resources/assets/create/models/block/track/segment_right.obj create mode 100644 src/main/resources/assets/create/models/block/track/tie.obj diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/BezierConnection.java b/src/main/java/com/simibubi/create/content/logistics/trains/BezierConnection.java index a4f3274fc..d81ac4bb0 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/BezierConnection.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/BezierConnection.java @@ -533,7 +533,7 @@ public class BezierConnection implements Iterable { .rotateYRadians(anglesI.y) .rotateXRadians(anglesI.x) .rotateZRadians(anglesI.z) - .translate(0, -2 / 16f + (i % 2 == 0 ? 1 : -1) / 2048f - 1 / 256f, -1 / 32f) + .translate(0, -2 / 16f - 1 / 256f, -1 / 32f) .scale(1, 1, (float) diff.length() * scale); angles.railTransforms.set(first, poseStack.last()); } diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/track/TrackInstance.java b/src/main/java/com/simibubi/create/content/logistics/trains/track/TrackInstance.java index 42bf2fa01..708442730 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/track/TrackInstance.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/track/TrackInstance.java @@ -97,9 +97,7 @@ public class TrackInstance extends BlockEntityInstance { PoseStack pose = new PoseStack(); TransformStack.cast(pose) - .translate(getInstancePosition()) - .nudge((int) bc.tePositions.getFirst() - .asLong()); + .translate(getInstancePosition()); var mat = materialManager.cutout(RenderType.cutoutMipped()) .material(Materials.TRANSFORMED); diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/track/TrackRenderer.java b/src/main/java/com/simibubi/create/content/logistics/trains/track/TrackRenderer.java index e53f7b716..467feca51 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/track/TrackRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/track/TrackRenderer.java @@ -8,7 +8,6 @@ import static com.simibubi.create.AllPartialModels.TRACK_SEGMENT_RIGHT; import static com.simibubi.create.AllPartialModels.TRACK_TIE; import com.jozufozu.flywheel.backend.Backend; -import com.jozufozu.flywheel.util.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack.Pose; import com.mojang.blaze3d.vertex.VertexConsumer; @@ -57,9 +56,6 @@ public class TrackRenderer extends SafeBlockEntityRenderer { BlockState air = Blocks.AIR.defaultBlockState(); SegmentAngles[] segments = bc.getBakedSegments(); - TransformStack.cast(ms) - .nudge((int) tePosition.asLong()); - renderGirder(level, bc, ms, vb, tePosition); for (int i = 1; i < segments.length; i++) { diff --git a/src/main/resources/assets/create/models/block/track/segment_left.json b/src/main/resources/assets/create/models/block/track/segment_left.json index 9de716ae5..e418fc395 100644 --- a/src/main/resources/assets/create/models/block/track/segment_left.json +++ b/src/main/resources/assets/create/models/block/track/segment_left.json @@ -1,50 +1,6 @@ { - "credit": "Made with Blockbench", - "texture_size": [32, 32], - "textures": { - "1": "create:block/standard_track", - "particle": "create:block/palettes/stone_types/polished/andesite_cut_polished" - }, - "elements": [ - { - "name": "tie1", - "from": [-2.1, 0, 0], - "to": [2.1, 0.05, 8], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]}, - "faces": { - "up": {"uv": [0, 8.5, 4, 10.5], "rotation": 90, "texture": "#1"}, - "down": {"uv": [0, 8.5, 4, 10.5], "rotation": 90, "texture": "#1"} - } - }, - { - "name": "tie2", - "from": [-2, 4.4, 0], - "to": [2, 4.45, 8], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]}, - "faces": { - "up": {"uv": [7.5, 13.5, 3.5, 11.5], "rotation": 90, "texture": "#1"}, - "down": {"uv": [0, 8.5, 4, 10.5], "rotation": 90, "texture": "#1"} - } - }, - { - "name": "tie3", - "from": [-1.55, 0.05, 0], - "to": [1.55, 4.45, 8], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]}, - "faces": { - "north": {"uv": [11, 2, 12.5, 4], "texture": "#1"}, - "east": {"uv": [0, 6, 4, 8], "texture": "#1"}, - "south": {"uv": [11, 2, 12.5, 4], "texture": "#1"}, - "west": {"uv": [0, 6, 4, 8], "texture": "#1"} - } - } - ], - "groups": [ - { - "name": "group", - "origin": [0, 0, 0], - "color": 0, - "children": [0, 1, 2] - } - ] + "parent": "create:block/track/obj_track", + "loader": "forge:obj", + "flip-v": true, + "model": "create:models/block/track/segment_left.obj" } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/track/segment_left.obj b/src/main/resources/assets/create/models/block/track/segment_left.obj new file mode 100644 index 000000000..dc4df8fdb --- /dev/null +++ b/src/main/resources/assets/create/models/block/track/segment_left.obj @@ -0,0 +1,81 @@ +# Made in Blockbench 4.7.1 +mtllib track.mtl + +o tie1 +v 0.13124999999999998 0.0031250000000000444 0.5 +v 0.13124999999999998 0.0031250000000000444 0 +v 0.13124999999999998 0 0.5 +v 0.13124999999999998 0 0 +v -0.13124999999999998 0.0031250000000000444 0 +v -0.13124999999999998 0.0031250000000000444 0.5 +v -0.13124999999999998 0 0 +v -0.13124999999999998 0 0.5 +vt 0 0.34375 +vt 0 0.46875 +vt 0.25 0.46875 +vt 0.25 0.34375 +vt 0 0.34375 +vt 0 0.46875 +vt 0.25 0.46875 +vt 0.25 0.34375 +vn 0 1 0 +vn 0 -1 0 +usemtl m_0 +f 6/4/1 1/3/1 2/2/1 5/1/1 +f 7/8/2 4/7/2 3/6/2 8/5/2 +o tie3 +v 0.09687500000000004 0.27374999999999994 0.5 +v 0.09687500000000004 0.27374999999999994 0 +v 0.09687500000000004 0.0031250000000000444 0.5 +v 0.09687500000000004 0.0031250000000000444 0 +v -0.09687500000000004 0.27374999999999994 0 +v -0.09687500000000004 0.27374999999999994 0.5 +v -0.09687500000000004 0.0031250000000000444 0 +v -0.09687500000000004 0.0031250000000000444 0.5 +vt 0.6875 0.875 +vt 0.78125 0.875 +vt 0.78125 0.75 +vt 0.6875 0.75 +vt 0 0.625 +vt 0.25 0.625 +vt 0.25 0.5 +vt 0 0.5 +vt 0.6875 0.875 +vt 0.78125 0.875 +vt 0.78125 0.75 +vt 0.6875 0.75 +vt 0 0.625 +vt 0.25 0.625 +vt 0.25 0.5 +vt 0 0.5 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +usemtl m_0 +f 12/12/3 15/11/3 13/10/3 10/9/3 +f 11/16/4 12/15/4 10/14/4 9/13/4 +f 16/20/5 11/19/5 9/18/5 14/17/5 +f 15/24/6 16/23/6 14/22/6 13/21/6 +o tie2 +v 0.12494918299049051 0.2726710894255546 0.5 +v 0.12494918299049051 0.2726710894255546 0 +v 0.12481287240497385 0.2695490637331114 0.5 +v 0.12481287240497385 0.2695490637331114 0 +v -0.1248128724049739 0.2835759362668886 0 +v -0.1248128724049739 0.2835759362668886 0.5 +v -0.12494918299049057 0.28045391057444535 0 +v -0.12494918299049057 0.28045391057444535 0.5 +vt 0.46875 0.28125 +vt 0.46875 0.15625 +vt 0.21875 0.15625 +vt 0.21875 0.28125 +vt 0 0.34375 +vt 0 0.46875 +vt 0.25 0.46875 +vt 0.25 0.34375 +vn 0.043619387365336 0.9990482215818578 0 +vn -0.043619387365336 -0.9990482215818578 0 +usemtl m_0 +f 22/28/7 17/27/7 18/26/7 21/25/7 +f 23/32/8 20/31/8 19/30/8 24/29/8 \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/track/segment_right.json b/src/main/resources/assets/create/models/block/track/segment_right.json index 166821106..913ce3600 100644 --- a/src/main/resources/assets/create/models/block/track/segment_right.json +++ b/src/main/resources/assets/create/models/block/track/segment_right.json @@ -1,50 +1,6 @@ { - "credit": "Made with Blockbench", - "texture_size": [32, 32], - "textures": { - "1": "create:block/standard_track", - "particle": "create:block/palettes/stone_types/polished/andesite_cut_polished" - }, - "elements": [ - { - "name": "tie1", - "from": [-2.1, 0, 0], - "to": [2.1, 0.05, 8], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]}, - "faces": { - "up": {"uv": [0, 8.5, 4, 10.5], "rotation": 90, "texture": "#1"}, - "down": {"uv": [0, 8.5, 4, 10.5], "rotation": 90, "texture": "#1"} - } - }, - { - "name": "tie2", - "from": [-2, 4.4, 0], - "to": [2, 4.45, 8], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]}, - "faces": { - "up": {"uv": [7.5, 11.5, 3.5, 13.5], "rotation": 90, "texture": "#1"}, - "down": {"uv": [0, 8.5, 4, 10.5], "rotation": 90, "texture": "#1"} - } - }, - { - "name": "tie3", - "from": [-1.55, 0.05, 0], - "to": [1.55, 4.45, 8], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]}, - "faces": { - "north": {"uv": [11, 2, 12.5, 4], "texture": "#1"}, - "east": {"uv": [0, 6, 4, 8], "texture": "#1"}, - "south": {"uv": [11, 2, 12.5, 4], "texture": "#1"}, - "west": {"uv": [0, 6, 4, 8], "texture": "#1"} - } - } - ], - "groups": [ - { - "name": "group", - "origin": [0, 0, 0], - "color": 0, - "children": [0, 1, 2] - } - ] + "parent": "create:block/track/obj_track", + "loader": "forge:obj", + "flip-v": true, + "model": "create:models/block/track/segment_right.obj" } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/track/segment_right.obj b/src/main/resources/assets/create/models/block/track/segment_right.obj new file mode 100644 index 000000000..9d571f13c --- /dev/null +++ b/src/main/resources/assets/create/models/block/track/segment_right.obj @@ -0,0 +1,81 @@ +# Made in Blockbench 4.7.1 +mtllib track.mtl + +o tie1 +v 0.13124999999999998 0.0031250000000000444 0.5 +v 0.13124999999999998 0.0031250000000000444 0 +v 0.13124999999999998 0 0.5 +v 0.13124999999999998 0 0 +v -0.13124999999999998 0.0031250000000000444 0 +v -0.13124999999999998 0.0031250000000000444 0.5 +v -0.13124999999999998 0 0 +v -0.13124999999999998 0 0.5 +vt 0 0.34375 +vt 0 0.46875 +vt 0.25 0.46875 +vt 0.25 0.34375 +vt 0 0.34375 +vt 0 0.46875 +vt 0.25 0.46875 +vt 0.25 0.34375 +vn 0 1 0 +vn 0 -1 0 +usemtl m_0 +f 6/4/1 1/3/1 2/2/1 5/1/1 +f 7/8/2 4/7/2 3/6/2 8/5/2 +o tie3 +v 0.09687500000000004 0.27374999999999994 0.5 +v 0.09687500000000004 0.27374999999999994 0 +v 0.09687500000000004 0.0031250000000000444 0.5 +v 0.09687500000000004 0.0031250000000000444 0 +v -0.09687500000000004 0.27374999999999994 0 +v -0.09687500000000004 0.27374999999999994 0.5 +v -0.09687500000000004 0.0031250000000000444 0 +v -0.09687500000000004 0.0031250000000000444 0.5 +vt 0.6875 0.875 +vt 0.78125 0.875 +vt 0.78125 0.75 +vt 0.6875 0.75 +vt 0 0.625 +vt 0.25 0.625 +vt 0.25 0.5 +vt 0 0.5 +vt 0.6875 0.875 +vt 0.78125 0.875 +vt 0.78125 0.75 +vt 0.6875 0.75 +vt 0 0.625 +vt 0.25 0.625 +vt 0.25 0.5 +vt 0 0.5 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +usemtl m_0 +f 12/12/3 15/11/3 13/10/3 10/9/3 +f 11/16/4 12/15/4 10/14/4 9/13/4 +f 16/20/5 11/19/5 9/18/5 14/17/5 +f 15/24/6 16/23/6 14/22/6 13/21/6 +o tie2 +v 0.12481287240497385 0.2835759362668886 0.5 +v 0.12481287240497385 0.2835759362668886 0 +v 0.12494918299049051 0.28045391057444535 0.5 +v 0.12494918299049051 0.28045391057444535 0 +v -0.12494918299049057 0.2726710894255546 0 +v -0.12494918299049057 0.2726710894255546 0.5 +v -0.1248128724049739 0.2695490637331114 0 +v -0.1248128724049739 0.2695490637331114 0.5 +vt 0.46875 0.15625 +vt 0.46875 0.28125 +vt 0.21875 0.28125 +vt 0.21875 0.15625 +vt 0 0.34375 +vt 0 0.46875 +vt 0.25 0.46875 +vt 0.25 0.34375 +vn -0.043619387365336 0.9990482215818578 0 +vn 0.043619387365336 -0.9990482215818578 0 +usemtl m_0 +f 22/28/7 17/27/7 18/26/7 21/25/7 +f 23/32/8 20/31/8 19/30/8 24/29/8 \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/track/tie.json b/src/main/resources/assets/create/models/block/track/tie.json index dd469183c..046605fa3 100644 --- a/src/main/resources/assets/create/models/block/track/tie.json +++ b/src/main/resources/assets/create/models/block/track/tie.json @@ -1,61 +1,6 @@ { - "credit": "Made with Blockbench", - "texture_size": [32, 32], - "textures": { - "1": "create:block/standard_track", - "2": "create:block/standard_track_mip", - "particle": "create:block/palettes/stone_types/polished/andesite_cut_polished" - }, - "elements": [ - { - "name": "cube1", - "from": [-13.95, -3.05, 2], - "to": [8, 1.05, 6], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]}, - "faces": { - "north": {"uv": [0, 2, 11, 4], "texture": "#1"}, - "south": {"uv": [11, 2, 0, 4], "texture": "#1"}, - "down": {"uv": [0, 4, 11, 6], "rotation": 180, "texture": "#1"} - } - }, - { - "name": "cube2", - "from": [-13.95, -3.05, -1.75], - "to": [8, 1.05, 9.75], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]}, - "faces": { - "west": {"uv": [11, 3.75, 13, 9.25], "rotation": 90, "texture": "#2"}, - "up": {"uv": [0, 3.75, 11, 9.25], "rotation": 180, "texture": "#2"} - } - }, - { - "name": "cube3", - "from": [8, -3.05, -1.75], - "to": [29.95, 1.05, 9.75], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]}, - "faces": { - "east": {"uv": [11, 3.75, 13, 9.25], "rotation": 90, "texture": "#2"}, - "up": {"uv": [0, 3.75, 11, 9.25], "texture": "#2"} - } - }, - { - "name": "cube2", - "from": [8, -3.05, 2], - "to": [29.95, 1.05, 6], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]}, - "faces": { - "north": {"uv": [11, 2, 0, 4], "texture": "#1"}, - "south": {"uv": [0, 2, 11, 4], "texture": "#1"}, - "down": {"uv": [0, 4, 11, 6], "texture": "#1"} - } - } - ], - "groups": [ - { - "name": "group", - "origin": [0, 0, 0], - "color": 0, - "children": [0, 1, 2, 3] - } - ] + "parent": "create:block/track/obj_track", + "loader": "forge:obj", + "flip-v": true, + "model": "create:models/block/track/tie.obj" } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/track/tie.obj b/src/main/resources/assets/create/models/block/track/tie.obj new file mode 100644 index 000000000..b07f2e65e --- /dev/null +++ b/src/main/resources/assets/create/models/block/track/tie.obj @@ -0,0 +1,103 @@ +# Made in Blockbench 4.7.1 +mtllib track.mtl + +o mip1 +v 0.5022361747214583 0.06561524278519393 0.609375 +v 0.5022361747214583 0.06561524278519393 -0.109375 +v 0.5 -0.190625 0.609375 +v 0.5 -0.190625 -0.109375 +v -0.8695865884822016 0.0775869586720257 -0.109375 +v -0.8695865884822016 0.0775869586720257 0.609375 +v -0.8718227632036599 -0.17865328411316828 -0.109375 +v -0.8718227632036599 -0.17865328411316828 0.609375 +vt 0.6875 0.421875 +vt 0.6875 0.765625 +vt 0.8125 0.765625 +vt 0.8125 0.421875 +vt 0.6875 0.421875 +vt 0 0.421875 +vt 0 0.765625 +vt 0.6875 0.765625 +vn -0.9999619230641713 0.008726535498373935 0 +vn 0.008726535498373935 0.9999619230641713 0 +usemtl m_1 +f 7/4/1 8/3/1 6/2/1 5/1/1 +f 6/8/2 1/7/2 2/6/2 5/5/2 +o base1 +v 0.5022361747214583 0.06561524278519393 0.375 +v 0.5022361747214583 0.06561524278519393 0.125 +v 0.5 -0.190625 0.375 +v 0.5 -0.190625 0.125 +v -0.8695865884822016 0.0775869586720257 0.125 +v -0.8695865884822016 0.0775869586720257 0.375 +v -0.8718227632036599 -0.17865328411316828 0.125 +v -0.8718227632036599 -0.17865328411316828 0.375 +vt 0 0.875 +vt 0.6875 0.875 +vt 0.6875 0.75 +vt 0 0.75 +vt 0.6875 0.875 +vt 0 0.875 +vt 0 0.75 +vt 0.6875 0.75 +vt 0.6875 0.625 +vt 0 0.625 +vt 0 0.75 +vt 0.6875 0.75 +vn 0 0 -1 +vn 0 0 1 +vn -0.008726535498373935 -0.9999619230641713 0 +usemtl m_0 +f 12/12/3 15/11/3 13/10/3 10/9/3 +f 16/16/4 11/15/4 9/14/4 14/13/4 +f 15/20/5 12/19/5 11/18/5 16/17/5 +o base2 +v 1.8695865884822016 0.0775869586720257 0.375 +v 1.8695865884822016 0.0775869586720257 0.125 +v 1.8718227632036601 -0.17865328411316828 0.375 +v 1.8718227632036601 -0.17865328411316828 0.125 +v 0.4977638252785417 0.06561524278519393 0.125 +v 0.4977638252785417 0.06561524278519393 0.375 +v 0.5 -0.190625 0.125 +v 0.5 -0.190625 0.375 +vt 0.6875 0.875 +vt 0 0.875 +vt 0 0.75 +vt 0.6875 0.75 +vt 0 0.875 +vt 0.6875 0.875 +vt 0.6875 0.75 +vt 0 0.75 +vt 0 0.75 +vt 0.6875 0.75 +vt 0.6875 0.625 +vt 0 0.625 +vn 0 0 -1 +vn 0 0 1 +vn 0.008726535498373935 -0.9999619230641713 0 +usemtl m_0 +f 20/24/6 23/23/6 21/22/6 18/21/6 +f 24/28/7 19/27/7 17/26/7 22/25/7 +f 23/32/8 20/31/8 19/30/8 24/29/8 +o mip2 +v 1.8695865884822016 0.0775869586720257 0.609375 +v 1.8695865884822016 0.0775869586720257 -0.109375 +v 1.8718227632036601 -0.17865328411316828 0.609375 +v 1.8718227632036601 -0.17865328411316828 -0.109375 +v 0.4977638252785417 0.06561524278519393 -0.109375 +v 0.4977638252785417 0.06561524278519393 0.609375 +v 0.5 -0.190625 -0.109375 +v 0.5 -0.190625 0.609375 +vt 0.6875 0.421875 +vt 0.6875 0.765625 +vt 0.8125 0.765625 +vt 0.8125 0.421875 +vt 0 0.765625 +vt 0.6875 0.765625 +vt 0.6875 0.421875 +vt 0 0.421875 +vn 0.9999619230641713 0.008726535498373935 0 +vn -0.008726535498373935 0.9999619230641713 0 +usemtl m_1 +f 27/36/9 28/35/9 26/34/9 25/33/9 +f 30/40/10 25/39/10 26/38/10 29/37/10 \ No newline at end of file