diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 0aaba5826..06dfa4fe4 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -478,6 +478,8 @@ e815bfd854c2653f10828bb11950f7fb991d7efc assets/create/blockstates/speedometer.j d62b7908119fa4f51715a186d0882b388bb25cab assets/create/blockstates/spruce_window.json 8d7dfa60630a8b4bae4e8eca5c66e1cfa34dda1f assets/create/blockstates/spruce_window_pane.json 0378b27d9ad698b37d72cd958e15112f9ca418d3 assets/create/blockstates/steam_engine.json +9419d87b17175a5177854a2a508a0ffe0b43b018 assets/create/blockstates/steam_whistle.json +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 @@ -541,23 +543,23 @@ bf2b0310500213ff853c748c236eb5d01f61658e assets/create/blockstates/yellow_toolbo 6801fa1f466f172700e573e5b8ee8ee5f9ca4583 assets/create/blockstates/yellow_valve_handle.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json -d4cdc38cd19460fd9ba866f3ad3b2e4bd014cb98 assets/create/lang/en_ud.json -4111057d7de305bffb7133afbaea0aea45f7ce79 assets/create/lang/en_us.json -818f913210c5d3e21189a092759b4927ee032564 assets/create/lang/unfinished/de_de.json -23cb78876cf0892edc3b5b11d772d27969773b1c assets/create/lang/unfinished/es_cl.json -8d15c0a8f7d996667c6e38b2f84ed88542344929 assets/create/lang/unfinished/es_es.json -17ae724dfe4ca23b2e39157a9361b38094445e64 assets/create/lang/unfinished/fr_fr.json -c4a51cbb988e18ca1379eeb7256b70743df49bc2 assets/create/lang/unfinished/it_it.json -04d821a172dabdecc6d20eb44f409e9409e5066a assets/create/lang/unfinished/ja_jp.json -816a0b1dbc98a5ebdc013a19c1827dcff0f60461 assets/create/lang/unfinished/ko_kr.json -5ee0cf289312ad91cae5d3bf8e50b1aacb7e6508 assets/create/lang/unfinished/nl_nl.json -f35b613037e9d99dbeee151c1835222c26ce7b74 assets/create/lang/unfinished/pl_pl.json -436da9779b9e9cb943f88999fd77dad71f80779c assets/create/lang/unfinished/pt_br.json -80778b15cf9c92fd1baac3577d791ef7254aa080 assets/create/lang/unfinished/pt_pt.json -9175aa77343034a6cb50203d7ed26513ea1938b0 assets/create/lang/unfinished/ro_ro.json -95f7979d258cd2ddfc4166cae526b3571d17c630 assets/create/lang/unfinished/ru_ru.json -e0e311ce6878a910e9a14eef36c9d5faa6ff780b assets/create/lang/unfinished/zh_cn.json -bbdeb59c2b294eb6ef98aa75b610795f75a4dd7b assets/create/lang/unfinished/zh_tw.json +875f9aff979888b9d63d6a425cbf544431f1af5a assets/create/lang/en_ud.json +9920f89987afa7a5a534f913f930affb5fadaa33 assets/create/lang/en_us.json +13c213be9595e8fe1ad165a14cdd0ec16a092204 assets/create/lang/unfinished/de_de.json +687b9acd091e4222219057ac647402aab2f05ca2 assets/create/lang/unfinished/es_cl.json +20984bb318badfb2a49d1a5467de0aef5fa4a14f assets/create/lang/unfinished/es_es.json +3ef90285ab19e24ff80354849a253a5caf5062f4 assets/create/lang/unfinished/fr_fr.json +af40251171a29093bb6d4f99172af15a734a47f7 assets/create/lang/unfinished/it_it.json +98304b8aebf8db14d0a764140f2e4703bbcffb29 assets/create/lang/unfinished/ja_jp.json +4d7f1ba7e3ced59666d9113577d2e20af54d00ef assets/create/lang/unfinished/ko_kr.json +3530e4d047cf4a654a95d069d874ac73306cbac3 assets/create/lang/unfinished/nl_nl.json +3a82a8398f74ece7d5f6440613fecc14d7056b30 assets/create/lang/unfinished/pl_pl.json +5723fa37dbdd24e31bfd14f71586f67e3a23047f assets/create/lang/unfinished/pt_br.json +f394d6ff13e89051f7582a789ab1cf81905620b4 assets/create/lang/unfinished/pt_pt.json +01ccdd4a7c1beaa84cc6bdc7cd0cc912440fb0c7 assets/create/lang/unfinished/ro_ro.json +d0b58764408454fc6df71e0a340e210c0bc5f70b assets/create/lang/unfinished/ru_ru.json +bf4a93e64419cdacf1636e1a283086e33f853bf5 assets/create/lang/unfinished/zh_cn.json +6a615c911ea01faac6c52f58e98904aef5660dc5 assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json @@ -1473,6 +1475,12 @@ f6096d529b8f97f0bfdec75c13e4b31958346c58 assets/create/models/block/spruce_windo ea7952f49c78f0d7b95f3ed34df35a44a921ce15 assets/create/models/block/spruce_window_pane_post.json 04b92ecb2aea4264c58e2d3df0d77ab9fcdcf2d7 assets/create/models/block/spruce_window_pane_side.json a5bb90cb3f5353bbfe767b3d42f4d1dbac3b498a assets/create/models/block/spruce_window_pane_side_alt.json +c45b9d390c3119503209c0a950d4499116fbf828 assets/create/models/block/steam_whistle/block_large_floor_powered.json +76b70be89147d94471e3b36884dae2cfc51b35a5 assets/create/models/block/steam_whistle/block_large_wall_powered.json +b18fd30c44895bc993db27b6516addd2ad75fe55 assets/create/models/block/steam_whistle/block_medium_floor_powered.json +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 @@ -2076,6 +2084,7 @@ b9abe1331d49871838231f3a8e5d2973634e9325 assets/create/models/item/spout.json b305e81f1dc5272634745b6e822af40955a2ef28 assets/create/models/item/spruce_window.json f3ec8df2ee1690353ae1ec687b822d0fd962160e assets/create/models/item/spruce_window_pane.json 6c0693011f4104999c03328ba5e3bb25ffcf6359 assets/create/models/item/steam_engine.json +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 @@ -3769,6 +3778,8 @@ e257576e224e673ecf3aadc32d145e489c86349e data/create/loot_tables/blocks/small_ve 8f52215e5954a5a14b14db0304cb8471ad26f9fd data/create/loot_tables/blocks/spruce_window.json ad771358ecd71e2f0c4b71f7244947fc2dc2a1c9 data/create/loot_tables/blocks/spruce_window_pane.json e3f024bb8366efe8a8b4335a769a93595adcdb18 data/create/loot_tables/blocks/steam_engine.json +de42002e7b77c3bdc8e69407f6dcab57bf5fa96e data/create/loot_tables/blocks/steam_whistle.json +5c1df8443043b3fe3b665dba348e2ff188bcbe31 data/create/loot_tables/blocks/steam_whistle_extension.json 1ab6f4764b93da0e78494dd2deb3a4fff0ed9553 data/create/loot_tables/blocks/sticker.json 94f516dd7e6fd4bd4ee26fad2d2d84b79f40de0b data/create/loot_tables/blocks/sticky_mechanical_piston.json 69cc8ce9ff7b905b62f52d9ac4819e79f3235f58 data/create/loot_tables/blocks/stockpile_switch.json @@ -5294,7 +5305,7 @@ ff1900963bc4cd8ceffa78d58ef1952ceacb2fb7 data/forge/tags/items/storage_blocks/br 69f596fcb065e26b02ce246760432b5174191b76 data/minecraft/tags/blocks/impermeable.json 2db7759fe036160c14c6ed19a68604ca16f4de60 data/minecraft/tags/blocks/lush_ground_replaceable.json 02f7a9df2f9e154749266e7ac59c37aa076a3390 data/minecraft/tags/blocks/mineable/axe.json -5782184ce3d612e9cd747fa606f5cb87bd4d67ef data/minecraft/tags/blocks/mineable/pickaxe.json +85cae90448e40527a084352bd8283627213e7ba3 data/minecraft/tags/blocks/mineable/pickaxe.json 2db7759fe036160c14c6ed19a68604ca16f4de60 data/minecraft/tags/blocks/moss_replaceable.json e157c1d3af30e409e34bbefbe15a037e6e1c8daa data/minecraft/tags/blocks/needs_iron_tool.json a08f67865337f62601c5e333b4011382d10020e4 data/minecraft/tags/blocks/needs_stone_tool.json diff --git a/src/generated/resources/assets/create/blockstates/steam_whistle.json b/src/generated/resources/assets/create/blockstates/steam_whistle.json new file mode 100644 index 000000000..ee2ecba02 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/steam_whistle.json @@ -0,0 +1,184 @@ +{ + "variants": { + "facing=north,powered=false,size=small,wall=false": { + "model": "create:block/steam_whistle/block_small_floor", + "y": 180 + }, + "facing=south,powered=false,size=small,wall=false": { + "model": "create:block/steam_whistle/block_small_floor" + }, + "facing=west,powered=false,size=small,wall=false": { + "model": "create:block/steam_whistle/block_small_floor", + "y": 90 + }, + "facing=east,powered=false,size=small,wall=false": { + "model": "create:block/steam_whistle/block_small_floor", + "y": 270 + }, + "facing=north,powered=true,size=small,wall=false": { + "model": "create:block/steam_whistle/block_small_floor_powered", + "y": 180 + }, + "facing=south,powered=true,size=small,wall=false": { + "model": "create:block/steam_whistle/block_small_floor_powered" + }, + "facing=west,powered=true,size=small,wall=false": { + "model": "create:block/steam_whistle/block_small_floor_powered", + "y": 90 + }, + "facing=east,powered=true,size=small,wall=false": { + "model": "create:block/steam_whistle/block_small_floor_powered", + "y": 270 + }, + "facing=north,powered=false,size=medium,wall=false": { + "model": "create:block/steam_whistle/block_medium_floor", + "y": 180 + }, + "facing=south,powered=false,size=medium,wall=false": { + "model": "create:block/steam_whistle/block_medium_floor" + }, + "facing=west,powered=false,size=medium,wall=false": { + "model": "create:block/steam_whistle/block_medium_floor", + "y": 90 + }, + "facing=east,powered=false,size=medium,wall=false": { + "model": "create:block/steam_whistle/block_medium_floor", + "y": 270 + }, + "facing=north,powered=true,size=medium,wall=false": { + "model": "create:block/steam_whistle/block_medium_floor_powered", + "y": 180 + }, + "facing=south,powered=true,size=medium,wall=false": { + "model": "create:block/steam_whistle/block_medium_floor_powered" + }, + "facing=west,powered=true,size=medium,wall=false": { + "model": "create:block/steam_whistle/block_medium_floor_powered", + "y": 90 + }, + "facing=east,powered=true,size=medium,wall=false": { + "model": "create:block/steam_whistle/block_medium_floor_powered", + "y": 270 + }, + "facing=north,powered=false,size=large,wall=false": { + "model": "create:block/steam_whistle/block_large_floor", + "y": 180 + }, + "facing=south,powered=false,size=large,wall=false": { + "model": "create:block/steam_whistle/block_large_floor" + }, + "facing=west,powered=false,size=large,wall=false": { + "model": "create:block/steam_whistle/block_large_floor", + "y": 90 + }, + "facing=east,powered=false,size=large,wall=false": { + "model": "create:block/steam_whistle/block_large_floor", + "y": 270 + }, + "facing=north,powered=true,size=large,wall=false": { + "model": "create:block/steam_whistle/block_large_floor_powered", + "y": 180 + }, + "facing=south,powered=true,size=large,wall=false": { + "model": "create:block/steam_whistle/block_large_floor_powered" + }, + "facing=west,powered=true,size=large,wall=false": { + "model": "create:block/steam_whistle/block_large_floor_powered", + "y": 90 + }, + "facing=east,powered=true,size=large,wall=false": { + "model": "create:block/steam_whistle/block_large_floor_powered", + "y": 270 + }, + "facing=north,powered=false,size=small,wall=true": { + "model": "create:block/steam_whistle/block_small_wall", + "y": 180 + }, + "facing=south,powered=false,size=small,wall=true": { + "model": "create:block/steam_whistle/block_small_wall" + }, + "facing=west,powered=false,size=small,wall=true": { + "model": "create:block/steam_whistle/block_small_wall", + "y": 90 + }, + "facing=east,powered=false,size=small,wall=true": { + "model": "create:block/steam_whistle/block_small_wall", + "y": 270 + }, + "facing=north,powered=true,size=small,wall=true": { + "model": "create:block/steam_whistle/block_small_wall_powered", + "y": 180 + }, + "facing=south,powered=true,size=small,wall=true": { + "model": "create:block/steam_whistle/block_small_wall_powered" + }, + "facing=west,powered=true,size=small,wall=true": { + "model": "create:block/steam_whistle/block_small_wall_powered", + "y": 90 + }, + "facing=east,powered=true,size=small,wall=true": { + "model": "create:block/steam_whistle/block_small_wall_powered", + "y": 270 + }, + "facing=north,powered=false,size=medium,wall=true": { + "model": "create:block/steam_whistle/block_medium_wall", + "y": 180 + }, + "facing=south,powered=false,size=medium,wall=true": { + "model": "create:block/steam_whistle/block_medium_wall" + }, + "facing=west,powered=false,size=medium,wall=true": { + "model": "create:block/steam_whistle/block_medium_wall", + "y": 90 + }, + "facing=east,powered=false,size=medium,wall=true": { + "model": "create:block/steam_whistle/block_medium_wall", + "y": 270 + }, + "facing=north,powered=true,size=medium,wall=true": { + "model": "create:block/steam_whistle/block_medium_wall_powered", + "y": 180 + }, + "facing=south,powered=true,size=medium,wall=true": { + "model": "create:block/steam_whistle/block_medium_wall_powered" + }, + "facing=west,powered=true,size=medium,wall=true": { + "model": "create:block/steam_whistle/block_medium_wall_powered", + "y": 90 + }, + "facing=east,powered=true,size=medium,wall=true": { + "model": "create:block/steam_whistle/block_medium_wall_powered", + "y": 270 + }, + "facing=north,powered=false,size=large,wall=true": { + "model": "create:block/steam_whistle/block_large_wall", + "y": 180 + }, + "facing=south,powered=false,size=large,wall=true": { + "model": "create:block/steam_whistle/block_large_wall" + }, + "facing=west,powered=false,size=large,wall=true": { + "model": "create:block/steam_whistle/block_large_wall", + "y": 90 + }, + "facing=east,powered=false,size=large,wall=true": { + "model": "create:block/steam_whistle/block_large_wall", + "y": 270 + }, + "facing=north,powered=true,size=large,wall=true": { + "model": "create:block/steam_whistle/block_large_wall_powered", + "y": 180 + }, + "facing=south,powered=true,size=large,wall=true": { + "model": "create:block/steam_whistle/block_large_wall_powered" + }, + "facing=west,powered=true,size=large,wall=true": { + "model": "create:block/steam_whistle/block_large_wall_powered", + "y": 90 + }, + "facing=east,powered=true,size=large,wall=true": { + "model": "create:block/steam_whistle/block_large_wall_powered", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/steam_whistle_extension.json b/src/generated/resources/assets/create/blockstates/steam_whistle_extension.json new file mode 100644 index 000000000..f3b863a5d --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/steam_whistle_extension.json @@ -0,0 +1,85 @@ +{ + "multipart": [ + { + "when": { + "size": "small", + "shape": "double" + }, + "apply": { + "model": "create:block/steam_whistle/extension/small_top_rim" + } + }, + { + "when": { + "size": "small", + "shape": "single" + }, + "apply": { + "model": "create:block/steam_whistle/extension/small_single" + } + }, + { + "when": { + "size": "small", + "shape": "double|double_connected" + }, + "apply": { + "model": "create:block/steam_whistle/extension/small_double" + } + }, + { + "when": { + "size": "medium", + "shape": "double" + }, + "apply": { + "model": "create:block/steam_whistle/extension/medium_top_rim" + } + }, + { + "when": { + "size": "medium", + "shape": "single" + }, + "apply": { + "model": "create:block/steam_whistle/extension/medium_single" + } + }, + { + "when": { + "size": "medium", + "shape": "double|double_connected" + }, + "apply": { + "model": "create:block/steam_whistle/extension/medium_double" + } + }, + { + "when": { + "size": "large", + "shape": "double" + }, + "apply": { + "model": "create:block/steam_whistle/extension/large_top_rim" + } + }, + { + "when": { + "size": "large", + "shape": "single" + }, + "apply": { + "model": "create:block/steam_whistle/extension/large_single" + } + }, + { + "when": { + "size": "large", + "shape": "double|double_connected" + }, + "apply": { + "model": "create:block/steam_whistle/extension/large_double" + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index 4448f1e52..aa62ef82d 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -479,6 +479,8 @@ "block.create.spruce_window": "\u028Dopu\u0131M \u01DD\u0254n\u0279dS", "block.create.spruce_window_pane": "\u01DDu\u0250\u0500 \u028Dopu\u0131M \u01DD\u0254n\u0279dS", "block.create.steam_engine": "\u01DDu\u0131bu\u018E \u026F\u0250\u01DD\u0287S", + "block.create.steam_whistle": "\u01DD\u05DF\u0287s\u0131\u0265M \u026F\u0250\u01DD\u0287S", + "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", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index dbd3ef7a9..c9b5432fb 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -482,6 +482,8 @@ "block.create.spruce_window": "Spruce Window", "block.create.spruce_window_pane": "Spruce Window Pane", "block.create.steam_engine": "Steam Engine", + "block.create.steam_whistle": "Steam Whistle", + "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", diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index 8c8585a46..4f63971ec 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1529", + "_": "Missing Localizations: 1531", "_": "->------------------------] Game Elements [------------------------<-", @@ -483,6 +483,8 @@ "block.create.spruce_window": "Fichtenfenster", "block.create.spruce_window_pane": "Fichtenfensterscheibe", "block.create.steam_engine": "UNLOCALIZED: Steam Engine", + "block.create.steam_whistle": "UNLOCALIZED: Steam Whistle", + "block.create.steam_whistle_extension": "UNLOCALIZED: Steam Whistle Extension", "block.create.sticker": "Ankleber", "block.create.sticky_mechanical_piston": "Klebriger Mechanischer Kolben", "block.create.stockpile_switch": "Vorratssensor", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_cl.json b/src/generated/resources/assets/create/lang/unfinished/es_cl.json index e9d9b33e9..461e2323d 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_cl.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_cl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 551", + "_": "Missing Localizations: 553", "_": "->------------------------] Game Elements [------------------------<-", @@ -483,6 +483,8 @@ "block.create.spruce_window": "Ventana de Abeto", "block.create.spruce_window_pane": "Panel de Ventana de Abeto", "block.create.steam_engine": "UNLOCALIZED: Steam Engine", + "block.create.steam_whistle": "UNLOCALIZED: Steam Whistle", + "block.create.steam_whistle_extension": "UNLOCALIZED: Steam Whistle Extension", "block.create.sticker": "Pegador", "block.create.sticky_mechanical_piston": "Pistón Mecánico Pegajoso", "block.create.stockpile_switch": "Interruptor de Reservas", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_es.json b/src/generated/resources/assets/create/lang/unfinished/es_es.json index f3be2ed94..08b467612 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_es.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_es.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 222", + "_": "Missing Localizations: 224", "_": "->------------------------] Game Elements [------------------------<-", @@ -483,6 +483,8 @@ "block.create.spruce_window": "Ventana de abeto", "block.create.spruce_window_pane": "Panel de ventana de abeto", "block.create.steam_engine": "UNLOCALIZED: Steam Engine", + "block.create.steam_whistle": "UNLOCALIZED: Steam Whistle", + "block.create.steam_whistle_extension": "UNLOCALIZED: Steam Whistle Extension", "block.create.sticker": "Pegatina", "block.create.sticky_mechanical_piston": "Pistón mecánico pegajoso", "block.create.stockpile_switch": "Interruptor de acopio", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 02ecc0cdb..33f322bf5 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1791", + "_": "Missing Localizations: 1793", "_": "->------------------------] Game Elements [------------------------<-", @@ -483,6 +483,8 @@ "block.create.spruce_window": "UNLOCALIZED: Spruce Window", "block.create.spruce_window_pane": "UNLOCALIZED: Spruce Window Pane", "block.create.steam_engine": "UNLOCALIZED: Steam Engine", + "block.create.steam_whistle": "UNLOCALIZED: Steam Whistle", + "block.create.steam_whistle_extension": "UNLOCALIZED: Steam Whistle Extension", "block.create.sticker": "UNLOCALIZED: Sticker", "block.create.sticky_mechanical_piston": "Piston mécanique collant", "block.create.stockpile_switch": "Détecteur de stockage", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 4ca91e75b..d245ff753 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1480", + "_": "Missing Localizations: 1482", "_": "->------------------------] Game Elements [------------------------<-", @@ -483,6 +483,8 @@ "block.create.spruce_window": "Finestra di abete", "block.create.spruce_window_pane": "Pannello di finestra di abete", "block.create.steam_engine": "UNLOCALIZED: Steam Engine", + "block.create.steam_whistle": "UNLOCALIZED: Steam Whistle", + "block.create.steam_whistle_extension": "UNLOCALIZED: Steam Whistle Extension", "block.create.sticker": "UNLOCALIZED: Sticker", "block.create.sticky_mechanical_piston": "Pistone meccanico appiccicoso", "block.create.stockpile_switch": "Interruttore accumulatore", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index b1d4b442d..e99833cd2 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 217", + "_": "Missing Localizations: 219", "_": "->------------------------] Game Elements [------------------------<-", @@ -483,6 +483,8 @@ "block.create.spruce_window": "マツの窓", "block.create.spruce_window_pane": "マツの板窓", "block.create.steam_engine": "UNLOCALIZED: Steam Engine", + "block.create.steam_whistle": "UNLOCALIZED: Steam Whistle", + "block.create.steam_whistle_extension": "UNLOCALIZED: Steam Whistle Extension", "block.create.sticker": "スティッカー", "block.create.sticky_mechanical_piston": "メカニカル粘着ピストン", "block.create.stockpile_switch": "在庫スイッチ", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index c9c7c3814..213f16703 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 217", + "_": "Missing Localizations: 219", "_": "->------------------------] Game Elements [------------------------<-", @@ -483,6 +483,8 @@ "block.create.spruce_window": "가문비나무 유리창", "block.create.spruce_window_pane": "가문비나무 유리판", "block.create.steam_engine": "UNLOCALIZED: Steam Engine", + "block.create.steam_whistle": "UNLOCALIZED: Steam Whistle", + "block.create.steam_whistle_extension": "UNLOCALIZED: Steam Whistle Extension", "block.create.sticker": "부착기", "block.create.sticky_mechanical_piston": "기계식 끈끈이 피스톤", "block.create.stockpile_switch": "수량 스위치", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index d37e1ff8f..e6cdaba7b 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 2143", + "_": "Missing Localizations: 2145", "_": "->------------------------] Game Elements [------------------------<-", @@ -483,6 +483,8 @@ "block.create.spruce_window": "UNLOCALIZED: Spruce Window", "block.create.spruce_window_pane": "UNLOCALIZED: Spruce Window Pane", "block.create.steam_engine": "UNLOCALIZED: Steam Engine", + "block.create.steam_whistle": "UNLOCALIZED: Steam Whistle", + "block.create.steam_whistle_extension": "UNLOCALIZED: Steam Whistle Extension", "block.create.sticker": "UNLOCALIZED: Sticker", "block.create.sticky_mechanical_piston": "Mechanische Zuiger", "block.create.stockpile_switch": "Voorraad Schakelaar", diff --git a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json index 4fcdd20c8..b360388a0 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json +++ b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 590", + "_": "Missing Localizations: 592", "_": "->------------------------] Game Elements [------------------------<-", @@ -483,6 +483,8 @@ "block.create.spruce_window": "Świerkowe okno", "block.create.spruce_window_pane": "Świerkowa szyba okienna", "block.create.steam_engine": "UNLOCALIZED: Steam Engine", + "block.create.steam_whistle": "UNLOCALIZED: Steam Whistle", + "block.create.steam_whistle_extension": "UNLOCALIZED: Steam Whistle Extension", "block.create.sticker": "Przyklejacz", "block.create.sticky_mechanical_piston": "Lepki mechaniczny tłok", "block.create.stockpile_switch": "Przełącznik zawartościowy", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index 3df38f1ad..8f5aaa384 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1391", + "_": "Missing Localizations: 1393", "_": "->------------------------] Game Elements [------------------------<-", @@ -483,6 +483,8 @@ "block.create.spruce_window": "Janela de pinheiro", "block.create.spruce_window_pane": "Vidraça de pinheiro", "block.create.steam_engine": "UNLOCALIZED: Steam Engine", + "block.create.steam_whistle": "UNLOCALIZED: Steam Whistle", + "block.create.steam_whistle_extension": "UNLOCALIZED: Steam Whistle Extension", "block.create.sticker": "Adesivo", "block.create.sticky_mechanical_piston": "Pistão Mecânico Grudento", "block.create.stockpile_switch": "Disjuntor de Armazenamento", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_pt.json b/src/generated/resources/assets/create/lang/unfinished/pt_pt.json index 37fb8b33f..69709281c 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_pt.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_pt.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1763", + "_": "Missing Localizations: 1765", "_": "->------------------------] Game Elements [------------------------<-", @@ -483,6 +483,8 @@ "block.create.spruce_window": "UNLOCALIZED: Spruce Window", "block.create.spruce_window_pane": "UNLOCALIZED: Spruce Window Pane", "block.create.steam_engine": "UNLOCALIZED: Steam Engine", + "block.create.steam_whistle": "UNLOCALIZED: Steam Whistle", + "block.create.steam_whistle_extension": "UNLOCALIZED: Steam Whistle Extension", "block.create.sticker": "Adesivo", "block.create.sticky_mechanical_piston": "Pistão Mecânico Grudento", "block.create.stockpile_switch": "Disjuntor de Armazenamento", diff --git a/src/generated/resources/assets/create/lang/unfinished/ro_ro.json b/src/generated/resources/assets/create/lang/unfinished/ro_ro.json index f8ea537b8..f1007e046 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ro_ro.json +++ b/src/generated/resources/assets/create/lang/unfinished/ro_ro.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 218", + "_": "Missing Localizations: 220", "_": "->------------------------] Game Elements [------------------------<-", @@ -483,6 +483,8 @@ "block.create.spruce_window": "Sticlă De Molid", "block.create.spruce_window_pane": "Geam De Molid", "block.create.steam_engine": "UNLOCALIZED: Steam Engine", + "block.create.steam_whistle": "UNLOCALIZED: Steam Whistle", + "block.create.steam_whistle_extension": "UNLOCALIZED: Steam Whistle Extension", "block.create.sticker": "Abțipild", "block.create.sticky_mechanical_piston": "Piston Mecanic Lipicios", "block.create.stockpile_switch": "Comutator De Depozitare", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index 246f5a384..7348818a6 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 595", + "_": "Missing Localizations: 597", "_": "->------------------------] Game Elements [------------------------<-", @@ -483,6 +483,8 @@ "block.create.spruce_window": "Еловое окно", "block.create.spruce_window_pane": "Панель из елового окна", "block.create.steam_engine": "UNLOCALIZED: Steam Engine", + "block.create.steam_whistle": "UNLOCALIZED: Steam Whistle", + "block.create.steam_whistle_extension": "UNLOCALIZED: Steam Whistle Extension", "block.create.sticker": "Блок-липучка", "block.create.sticky_mechanical_piston": "Липкий механический поршень", "block.create.stockpile_switch": "Настраиваемый компаратор", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json index 2cf9ed0eb..038e3fe70 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 217", + "_": "Missing Localizations: 219", "_": "->------------------------] Game Elements [------------------------<-", @@ -483,6 +483,8 @@ "block.create.spruce_window": "云杉木窗户", "block.create.spruce_window_pane": "云杉木窗户板", "block.create.steam_engine": "UNLOCALIZED: Steam Engine", + "block.create.steam_whistle": "UNLOCALIZED: Steam Whistle", + "block.create.steam_whistle_extension": "UNLOCALIZED: Steam Whistle Extension", "block.create.sticker": "黏着器", "block.create.sticky_mechanical_piston": "黏性动力活塞", "block.create.stockpile_switch": "存量转换器", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index 97199a10d..0cf8de35c 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 609", + "_": "Missing Localizations: 611", "_": "->------------------------] Game Elements [------------------------<-", @@ -483,6 +483,8 @@ "block.create.spruce_window": "雲杉木窗戶", "block.create.spruce_window_pane": "雲杉木窗戶片", "block.create.steam_engine": "UNLOCALIZED: Steam Engine", + "block.create.steam_whistle": "UNLOCALIZED: Steam Whistle", + "block.create.steam_whistle_extension": "UNLOCALIZED: Steam Whistle Extension", "block.create.sticker": "方塊黏著器", "block.create.sticky_mechanical_piston": "黏性機械活塞", "block.create.stockpile_switch": "存量偵測器", diff --git a/src/generated/resources/assets/create/models/block/steam_whistle/block_large_floor_powered.json b/src/generated/resources/assets/create/models/block/steam_whistle/block_large_floor_powered.json new file mode 100644 index 000000000..4f14572f4 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/steam_whistle/block_large_floor_powered.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/steam_whistle/block_large_floor", + "textures": { + "2": "create:block/copper_redstone_plate_powered" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/steam_whistle/block_large_wall_powered.json b/src/generated/resources/assets/create/models/block/steam_whistle/block_large_wall_powered.json new file mode 100644 index 000000000..74a3f74e6 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/steam_whistle/block_large_wall_powered.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/steam_whistle/block_large_wall", + "textures": { + "2": "create:block/copper_redstone_plate_powered" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/steam_whistle/block_medium_floor_powered.json b/src/generated/resources/assets/create/models/block/steam_whistle/block_medium_floor_powered.json new file mode 100644 index 000000000..e54204653 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/steam_whistle/block_medium_floor_powered.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/steam_whistle/block_medium_floor", + "textures": { + "2": "create:block/copper_redstone_plate_powered" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/steam_whistle/block_medium_wall_powered.json b/src/generated/resources/assets/create/models/block/steam_whistle/block_medium_wall_powered.json new file mode 100644 index 000000000..55989869b --- /dev/null +++ b/src/generated/resources/assets/create/models/block/steam_whistle/block_medium_wall_powered.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/steam_whistle/block_medium_wall", + "textures": { + "2": "create:block/copper_redstone_plate_powered" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/steam_whistle/block_small_floor_powered.json b/src/generated/resources/assets/create/models/block/steam_whistle/block_small_floor_powered.json new file mode 100644 index 000000000..764483a4c --- /dev/null +++ b/src/generated/resources/assets/create/models/block/steam_whistle/block_small_floor_powered.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/steam_whistle/block_small_floor", + "textures": { + "2": "create:block/copper_redstone_plate_powered" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/steam_whistle/block_small_wall_powered.json b/src/generated/resources/assets/create/models/block/steam_whistle/block_small_wall_powered.json new file mode 100644 index 000000000..4ab4d8ffb --- /dev/null +++ b/src/generated/resources/assets/create/models/block/steam_whistle/block_small_wall_powered.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/steam_whistle/block_small_wall", + "textures": { + "2": "create:block/copper_redstone_plate_powered" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/steam_whistle.json b/src/generated/resources/assets/create/models/item/steam_whistle.json new file mode 100644 index 000000000..88d4687bc --- /dev/null +++ b/src/generated/resources/assets/create/models/item/steam_whistle.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/steam_whistle/item" +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/steam_whistle.json b/src/generated/resources/data/create/loot_tables/blocks/steam_whistle.json new file mode 100644 index 000000000..4d86977b2 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/steam_whistle.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "create:steam_whistle" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/steam_whistle_extension.json b/src/generated/resources/data/create/loot_tables/blocks/steam_whistle_extension.json new file mode 100644 index 000000000..3da3a59b4 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/steam_whistle_extension.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:air" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json index 0785c2325..64218b79e 100644 --- a/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -73,6 +73,8 @@ "create:spout", "create:portable_fluid_interface", "create:steam_engine", + "create:steam_whistle", + "create:steam_whistle_extension", "create:powered_shaft", "create:mechanical_piston", "create:sticky_mechanical_piston", diff --git a/src/main/java/com/simibubi/create/AllBlockPartials.java b/src/main/java/com/simibubi/create/AllBlockPartials.java index 677f1fdd1..3a3264bf7 100644 --- a/src/main/java/com/simibubi/create/AllBlockPartials.java +++ b/src/main/java/com/simibubi/create/AllBlockPartials.java @@ -137,6 +137,10 @@ public class AllBlockPartials { SIGNAL_RED = block("track_signal/red_tube"), SIGNAL_YELLOW_CUBE = block("track_signal/yellow_cube"), SIGNAL_YELLOW_GLOW = block("track_signal/yellow_glow"), SIGNAL_YELLOW = block("track_signal/yellow_tube"), + WHISTLE_MOUTH_LARGE = block("steam_whistle/large_mouth"), + WHISTLE_MOUTH_MEDIUM = block("steam_whistle/medium_mouth"), + WHISTLE_MOUTH_SMALL = block("steam_whistle/small_mouth"), + CRAFTING_BLUEPRINT_1x1 = entity("crafting_blueprint_small"), CRAFTING_BLUEPRINT_2x2 = entity("crafting_blueprint_medium"), CRAFTING_BLUEPRINT_3x3 = entity("crafting_blueprint_large"), diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index 575d40236..44b1fdb71 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -52,6 +52,9 @@ import com.simibubi.create.content.contraptions.components.saw.SawBlock; import com.simibubi.create.content.contraptions.components.saw.SawGenerator; import com.simibubi.create.content.contraptions.components.steam.PoweredShaftBlock; import com.simibubi.create.content.contraptions.components.steam.SteamEngineBlock; +import com.simibubi.create.content.contraptions.components.steam.whistle.WhistleBlock; +import com.simibubi.create.content.contraptions.components.steam.whistle.WhistleExtenderBlock; +import com.simibubi.create.content.contraptions.components.steam.whistle.WhistleGenerator; import com.simibubi.create.content.contraptions.components.structureMovement.bearing.BlankSailBlockItem; import com.simibubi.create.content.contraptions.components.structureMovement.bearing.ClockworkBearingBlock; import com.simibubi.create.content.contraptions.components.structureMovement.bearing.MechanicalBearingBlock; @@ -877,6 +880,21 @@ public class AllBlocks { .transform(customItemModel()) .register(); + public static final BlockEntry STEAM_WHISTLE = REGISTRATE.block("steam_whistle", WhistleBlock::new) + .initialProperties(SharedProperties::copperMetal) + .transform(pickaxeOnly()) + .blockstate(new WhistleGenerator()::generate) + .item() + .transform(customItemModel()) + .register(); + + public static final BlockEntry STEAM_WHISTLE_EXTENSION = + REGISTRATE.block("steam_whistle_extension", WhistleExtenderBlock::new) + .initialProperties(SharedProperties::copperMetal) + .transform(pickaxeOnly()) + .blockstate(BlockStateGen.whistleExtender()) + .register(); + public static final BlockEntry POWERED_SHAFT = REGISTRATE.block("powered_shaft", PoweredShaftBlock::new) .initialProperties(SharedProperties::stone) diff --git a/src/main/java/com/simibubi/create/AllShapes.java b/src/main/java/com/simibubi/create/AllShapes.java index 909b9c9a0..79aa796da 100644 --- a/src/main/java/com/simibubi/create/AllShapes.java +++ b/src/main/java/com/simibubi/create/AllShapes.java @@ -147,7 +147,10 @@ public class AllShapes { TRACK_ORTHO = shape(TrackVoxelShapes.orthogonal()).forHorizontal(NORTH), TRACK_ASC = shape(TrackVoxelShapes.ascending()).forHorizontal(SOUTH), - TRACK_DIAG = shape(TrackVoxelShapes.diagonal()).forHorizontal(SOUTH) + TRACK_DIAG = shape(TrackVoxelShapes.diagonal()).forHorizontal(SOUTH), + + WHISTLE_BASE = shape(1, 0, 1, 15, 3, 15).add(5, 0, 5, 11, 8, 11) + .forDirectional(UP) ; @@ -165,7 +168,10 @@ public class AllShapes { LOGISTICS_TABLE_SLOPE = shape(0, 10, 10.667, 16, 14, 15).add(0, 12, 6.333, 16, 16, 10.667) .add(0, 14, 2, 16, 18, 6.333) .build(), - TANK_BOTTOM_LID = shape(0, 0, 0, 16, 4, 16).build(), TANK_TOP_LID = shape(0, 12, 0, 16, 16, 16).build() + TANK_BOTTOM_LID = shape(0, 0, 0, 16, 4, 16).build(), TANK_TOP_LID = shape(0, 12, 0, 16, 16, 16).build(), + + WHISTLE_SMALL = shape(4, 3, 4, 12, 16, 12).build(), WHISTLE_MEDIUM = shape(3, 3, 3, 13, 16, 13).build(), + WHISTLE_LARGE = shape(2, 3, 2, 14, 16, 14).build() ; @@ -250,7 +256,24 @@ public class AllShapes { DEPOT = shape(CASING_11PX.get(Direction.UP)).add(1, 11, 1, 15, 13, 15) .build(), STATION = shape(0, 0, 0, 16, 2, 16).add(1, 0, 1, 15, 13, 15) - .build() + .build(), + + WHISTLE_SMALL_FLOOR = shape(WHISTLE_SMALL).add(WHISTLE_BASE.get(UP)) + .build(), + WHISTLE_MEDIUM_FLOOR = shape(WHISTLE_MEDIUM).add(WHISTLE_BASE.get(UP)) + .build(), + WHISTLE_LARGE_FLOOR = shape(WHISTLE_LARGE).add(WHISTLE_BASE.get(UP)) + .build(), + + WHISTLE_EXTENDER_SMALL = shape(4, 0, 4, 12, 10, 12).build(), + WHISTLE_EXTENDER_MEDIUM = shape(3, 0, 3, 13, 10, 13).build(), + WHISTLE_EXTENDER_LARGE = shape(2, 0, 2, 14, 10, 14).build(), + WHISTLE_EXTENDER_SMALL_DOUBLE = shape(4, 0, 4, 12, 18, 12).build(), + WHISTLE_EXTENDER_MEDIUM_DOUBLE = shape(3, 0, 3, 13, 18, 13).build(), + WHISTLE_EXTENDER_LARGE_DOUBLE = shape(2, 0, 2, 14, 18, 14).build(), + WHISTLE_EXTENDER_SMALL_DOUBLE_CONNECTED = shape(4, 0, 4, 12, 16, 12).build(), + WHISTLE_EXTENDER_MEDIUM_DOUBLE_CONNECTED = shape(3, 0, 3, 13, 16, 13).build(), + WHISTLE_EXTENDER_LARGE_DOUBLE_CONNECTED = shape(2, 0, 2, 14, 16, 14).build() ; @@ -275,7 +298,14 @@ public class AllShapes { .forHorizontal(SOUTH), SCHEMATICS_TABLE = shape(4, 0, 4, 12, 12, 12).add(0, 11, 2, 16, 14, 14) .forDirectional(SOUTH), - CHUTE_SLOPE = shape(ChuteShapes.createSlope()).forHorizontal(SOUTH) + CHUTE_SLOPE = shape(ChuteShapes.createSlope()).forHorizontal(SOUTH), + + WHISTLE_SMALL_WALL = shape(WHISTLE_SMALL).add(WHISTLE_BASE.get(NORTH)) + .forHorizontal(SOUTH), + WHISTLE_MEDIUM_WALL = shape(WHISTLE_MEDIUM).add(WHISTLE_BASE.get(NORTH)) + .forHorizontal(SOUTH), + WHISTLE_LARGE_WALL = shape(WHISTLE_LARGE).add(WHISTLE_BASE.get(NORTH)) + .forHorizontal(SOUTH) ; diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index a833f607b..0ca4afabb 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -54,6 +54,8 @@ import com.simibubi.create.content.contraptions.components.saw.SawTileEntity; import com.simibubi.create.content.contraptions.components.steam.PoweredShaftTileEntity; import com.simibubi.create.content.contraptions.components.steam.SteamEngineRenderer; import com.simibubi.create.content.contraptions.components.steam.SteamEngineTileEntity; +import com.simibubi.create.content.contraptions.components.steam.whistle.WhistleRenderer; +import com.simibubi.create.content.contraptions.components.steam.whistle.WhistleTileEntity; import com.simibubi.create.content.contraptions.components.structureMovement.bearing.BearingInstance; import com.simibubi.create.content.contraptions.components.structureMovement.bearing.BearingRenderer; import com.simibubi.create.content.contraptions.components.structureMovement.bearing.ClockworkBearingTileEntity; @@ -522,6 +524,12 @@ public class AllTileEntities { .renderer(() -> SteamEngineRenderer::new) .register(); + public static final BlockEntityEntry STEAM_WHISTLE = Create.registrate() + .tileEntity("steam_whistle", WhistleTileEntity::new) + .validBlocks(AllBlocks.STEAM_WHISTLE) + .renderer(() -> WhistleRenderer::new) + .register(); + public static final BlockEntityEntry POWERED_SHAFT = Create.registrate() .tileEntity("powered_shaft", PoweredShaftTileEntity::new) .instance(() -> SingleRotatingInstance::new, false) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/steam/SteamEngineBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/steam/SteamEngineBlock.java index 3b99e2cfa..b59de275e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/steam/SteamEngineBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/steam/SteamEngineBlock.java @@ -8,8 +8,6 @@ import com.simibubi.create.AllBlocks; import com.simibubi.create.AllShapes; import com.simibubi.create.AllTileEntities; import com.simibubi.create.content.contraptions.fluids.tank.FluidTankBlock; -import com.simibubi.create.content.contraptions.fluids.tank.FluidTankConnectivityHandler; -import com.simibubi.create.content.contraptions.fluids.tank.FluidTankTileEntity; import com.simibubi.create.content.contraptions.relays.elementary.ShaftBlock; import com.simibubi.create.content.contraptions.wrench.IWrenchable; import com.simibubi.create.foundation.block.ITE; @@ -98,7 +96,7 @@ public class SteamEngineBlock extends FaceAttachedHorizontalDirectionalBlock @Override public void onPlace(BlockState pState, Level pLevel, BlockPos pPos, BlockState pOldState, boolean pIsMoving) { - updateAttachedTank(pState, pLevel, pPos); + FluidTankBlock.updateBoilerState(pState, pLevel, pPos.relative(getFacing(pState).getOpposite())); BlockPos shaftPos = getShaftPos(pState, pPos); BlockState shaftState = pLevel.getBlockState(shaftPos); if (isShaftValid(pState, shaftState)) @@ -109,28 +107,13 @@ public class SteamEngineBlock extends FaceAttachedHorizontalDirectionalBlock public void onRemove(BlockState pState, Level pLevel, BlockPos pPos, BlockState pNewState, boolean pIsMoving) { if (pState.hasBlockEntity() && (!pState.is(pNewState.getBlock()) || !pNewState.hasBlockEntity())) pLevel.removeBlockEntity(pPos); - updateAttachedTank(pState, pLevel, pPos); - + FluidTankBlock.updateBoilerState(pState, pLevel, pPos.relative(getFacing(pState).getOpposite())); BlockPos shaftPos = getShaftPos(pState, pPos); BlockState shaftState = pLevel.getBlockState(shaftPos); if (AllBlocks.POWERED_SHAFT.has(shaftState)) pLevel.scheduleTick(shaftPos, shaftState.getBlock(), 1); } - private void updateAttachedTank(BlockState pState, Level pLevel, BlockPos pPos) { - BlockPos tankPos = pPos.relative(getFacing(pState).getOpposite()); - BlockState tankState = pLevel.getBlockState(tankPos); - if (!FluidTankBlock.isTank(tankState)) - return; - FluidTankTileEntity tankTE = FluidTankConnectivityHandler.anyTankAt(pLevel, tankPos); - if (tankTE == null) - return; - FluidTankTileEntity controllerTE = tankTE.getControllerTE(); - if (controllerTE == null) - return; - controllerTE.updateBoilerState(); - } - @Override public VoxelShape getShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, CollisionContext pContext) { AttachFace face = pState.getValue(FACE); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/steam/whistle/WhistleBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/steam/whistle/WhistleBlock.java new file mode 100644 index 000000000..e249ca9e5 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/steam/whistle/WhistleBlock.java @@ -0,0 +1,232 @@ +package com.simibubi.create.content.contraptions.components.steam.whistle; + +import java.util.Random; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllShapes; +import com.simibubi.create.AllTileEntities; +import com.simibubi.create.content.contraptions.components.steam.whistle.WhistleExtenderBlock.WhistleExtenderShape; +import com.simibubi.create.content.contraptions.fluids.tank.FluidTankBlock; +import com.simibubi.create.content.contraptions.wrench.IWrenchable; +import com.simibubi.create.foundation.block.ITE; +import com.simibubi.create.foundation.utility.Lang; + +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.util.StringRepresentable; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +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.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.Rotation; +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.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.level.pathfinder.PathComputationType; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class WhistleBlock extends Block implements ITE, IWrenchable { + + public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING; + public static final BooleanProperty WALL = BooleanProperty.create("wall"); + public static final BooleanProperty POWERED = BlockStateProperties.POWERED; + public static final EnumProperty SIZE = EnumProperty.create("size", WhistleSize.class); + + public static enum WhistleSize implements StringRepresentable { + + SMALL, MEDIUM, LARGE; + + @Override + public String getSerializedName() { + return Lang.asId(name()); + } + + } + + public WhistleBlock(Properties p_49795_) { + super(p_49795_); + registerDefaultState(defaultBlockState().setValue(POWERED, false) + .setValue(WALL, false) + .setValue(SIZE, WhistleSize.MEDIUM)); + } + + @Override + public boolean canSurvive(BlockState pState, LevelReader pLevel, BlockPos pPos) { + return FluidTankBlock.isTank(pLevel.getBlockState(pPos.relative(getAttachedDirection(pState)))); + } + + @Override + public BlockState getRotatedBlockState(BlockState originalState, Direction targetedFace) { + return originalState.cycle(SIZE); + } + + @Override + protected void createBlockStateDefinition(Builder pBuilder) { + super.createBlockStateDefinition(pBuilder.add(FACING, POWERED, SIZE, WALL)); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext pContext) { + Level level = pContext.getLevel(); + BlockPos clickedPos = pContext.getClickedPos(); + Direction face = pContext.getClickedFace(); + boolean wall = true; + if (face.getAxis() == Axis.Y) { + face = pContext.getHorizontalDirection() + .getOpposite(); + wall = false; + } + + BlockState state = super.getStateForPlacement(pContext).setValue(FACING, face.getOpposite()) + .setValue(POWERED, level.hasNeighborSignal(clickedPos)) + .setValue(WALL, wall); + if (!canSurvive(state, level, clickedPos)) + return null; + return state; + } + + @Override + public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, + BlockHitResult pHit) { + if (pPlayer == null) + return InteractionResult.PASS; + + ItemStack heldItem = pPlayer.getItemInHand(pHand); + if (AllBlocks.STEAM_WHISTLE.isIn(heldItem)) { + incrementSize(pLevel, pPos); + return InteractionResult.SUCCESS; + } + + return InteractionResult.PASS; + } + + public static void incrementSize(LevelAccessor pLevel, BlockPos pPos) { + BlockState base = pLevel.getBlockState(pPos); + if (!base.hasProperty(SIZE)) + return; + WhistleSize size = base.getValue(SIZE); + BlockPos currentPos = pPos.above(); + for (int i = 1; i <= 12; i++) { + BlockState blockState = pLevel.getBlockState(currentPos); + + if (AllBlocks.STEAM_WHISTLE_EXTENSION.has(blockState)) { + if (blockState.getValue(WhistleExtenderBlock.SHAPE) == WhistleExtenderShape.SINGLE) { + pLevel.setBlock(currentPos, + blockState.setValue(WhistleExtenderBlock.SHAPE, WhistleExtenderShape.DOUBLE), 3); + return; + } + currentPos = currentPos.above(); + continue; + } + + if (!blockState.getMaterial() + .isReplaceable()) + return; + + pLevel.setBlock(currentPos, AllBlocks.STEAM_WHISTLE_EXTENSION.getDefaultState() + .setValue(SIZE, size), 3); + return; + } + } + + public static void queuePitchUpdate(LevelAccessor level, BlockPos pos) { + BlockState blockState = level.getBlockState(pos); + if (blockState.getBlock()instanceof WhistleBlock whistle && !level.getBlockTicks() + .hasScheduledTick(pos, whistle)) + level.scheduleTick(pos, whistle, 1); + } + + @Override + public void tick(BlockState pState, ServerLevel pLevel, BlockPos pPos, Random pRandom) { + withTileEntityDo(pLevel, pPos, WhistleTileEntity::updatePitch); + } + + @Override + public void onPlace(BlockState pState, Level pLevel, BlockPos pPos, BlockState pOldState, boolean pIsMoving) { + FluidTankBlock.updateBoilerState(pState, pLevel, pPos.relative(getAttachedDirection(pState))); + if (pOldState.getBlock() != this || pOldState.getValue(SIZE) != pState.getValue(SIZE)) + queuePitchUpdate(pLevel, pPos); + } + + @Override + public void onRemove(BlockState pState, Level pLevel, BlockPos pPos, BlockState pNewState, boolean pIsMoving) { + if (pState.hasBlockEntity() && (!pState.is(pNewState.getBlock()) || !pNewState.hasBlockEntity())) + pLevel.removeBlockEntity(pPos); + FluidTankBlock.updateBoilerState(pState, pLevel, pPos.relative(getAttachedDirection(pState))); + } + + @Override + public void neighborChanged(BlockState state, Level worldIn, BlockPos pos, Block blockIn, BlockPos fromPos, + boolean isMoving) { + if (worldIn.isClientSide) + return; + boolean previouslyPowered = state.getValue(POWERED); + if (previouslyPowered != worldIn.hasNeighborSignal(pos)) + worldIn.setBlock(pos, state.cycle(POWERED), 2); + } + + public BlockState updateShape(BlockState pState, Direction pFacing, BlockState pFacingState, LevelAccessor pLevel, + BlockPos pCurrentPos, BlockPos pFacingPos) { + return getAttachedDirection(pState) == pFacing && !pState.canSurvive(pLevel, pCurrentPos) + ? Blocks.AIR.defaultBlockState() + : pState; + } + + @Override + public VoxelShape getShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, CollisionContext pContext) { + WhistleSize size = pState.getValue(SIZE); + if (!pState.getValue(WALL)) + return size == WhistleSize.SMALL ? AllShapes.WHISTLE_SMALL_FLOOR + : size == WhistleSize.MEDIUM ? AllShapes.WHISTLE_MEDIUM_FLOOR : AllShapes.WHISTLE_LARGE_FLOOR; + Direction direction = pState.getValue(FACING); + return (size == WhistleSize.SMALL ? AllShapes.WHISTLE_SMALL_WALL + : size == WhistleSize.MEDIUM ? AllShapes.WHISTLE_MEDIUM_WALL : AllShapes.WHISTLE_LARGE_WALL).get(direction); + } + + @Override + public boolean isPathfindable(BlockState state, BlockGetter reader, BlockPos pos, PathComputationType type) { + return false; + } + + public static Direction getAttachedDirection(BlockState state) { + return state.getValue(WALL) ? state.getValue(FACING) : Direction.DOWN; + } + + @Override + public Class getTileEntityClass() { + return WhistleTileEntity.class; + } + + @Override + public BlockEntityType getTileEntityType() { + return AllTileEntities.STEAM_WHISTLE.get(); + } + + @Override + public BlockState rotate(BlockState pState, Rotation pRotation) { + return pState.setValue(FACING, pRotation.rotate(pState.getValue(FACING))); + } + + @Override + @SuppressWarnings("deprecation") + public BlockState mirror(BlockState pState, Mirror pMirror) { + return pMirror == Mirror.NONE ? pState : pState.rotate(pMirror.getRotation(pState.getValue(FACING))); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/steam/whistle/WhistleExtenderBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/steam/whistle/WhistleExtenderBlock.java new file mode 100644 index 000000000..8fd4dd69a --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/steam/whistle/WhistleExtenderBlock.java @@ -0,0 +1,186 @@ +package com.simibubi.create.content.contraptions.components.steam.whistle; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllShapes; +import com.simibubi.create.content.contraptions.components.steam.whistle.WhistleBlock.WhistleSize; +import com.simibubi.create.content.contraptions.wrench.IWrenchable; +import com.simibubi.create.foundation.utility.Lang; + +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.util.StringRepresentable; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +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.EnumProperty; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class WhistleExtenderBlock extends Block implements IWrenchable { + + public static final EnumProperty SHAPE = + EnumProperty.create("shape", WhistleExtenderShape.class); + public static final EnumProperty SIZE = WhistleBlock.SIZE; + + public static enum WhistleExtenderShape implements StringRepresentable { + SINGLE, DOUBLE, DOUBLE_CONNECTED; + + @Override + public String getSerializedName() { + return Lang.asId(name()); + } + } + + public WhistleExtenderBlock(Properties p_49795_) { + super(p_49795_); + registerDefaultState(defaultBlockState().setValue(SHAPE, WhistleExtenderShape.SINGLE) + .setValue(SIZE, WhistleSize.MEDIUM)); + } + + @Override + public InteractionResult onSneakWrenched(BlockState state, UseOnContext context) { + Level world = context.getLevel(); + BlockPos pos = context.getClickedPos(); + + if (context.getClickLocation().y < context.getClickedPos() + .getY() + .5f || state.getValue(SHAPE) == WhistleExtenderShape.SINGLE) + return IWrenchable.super.onSneakWrenched(state, context); + if (!(world instanceof ServerLevel)) + return InteractionResult.SUCCESS; + world.setBlock(pos, state.setValue(SHAPE, WhistleExtenderShape.SINGLE), 3); + playRemoveSound(world, pos); + return InteractionResult.SUCCESS; + } + + protected UseOnContext relocateContext(UseOnContext context, BlockPos target) { + return new UseOnContext(context.getPlayer(), context.getHand(), + new BlockHitResult(context.getClickLocation(), context.getClickedFace(), target, context.isInside())); + } + + @Override + public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, + BlockHitResult pHit) { + if (pPlayer == null || !AllBlocks.STEAM_WHISTLE.isIn(pPlayer.getItemInHand(pHand))) + return InteractionResult.PASS; + Level level = pLevel; + BlockPos findRoot = findRoot(level, pPos); + BlockState blockState = level.getBlockState(findRoot); + if (blockState.getBlock()instanceof WhistleBlock whistle) + return whistle.use(blockState, pLevel, findRoot, pPlayer, pHand, + new BlockHitResult(pHit.getLocation(), pHit.getDirection(), findRoot, pHit.isInside())); + return InteractionResult.PASS; + } + + @Override + public InteractionResult onWrenched(BlockState state, UseOnContext context) { + Level level = context.getLevel(); + BlockPos findRoot = findRoot(level, context.getClickedPos()); + BlockState blockState = level.getBlockState(findRoot); + if (blockState.getBlock()instanceof WhistleBlock whistle) + return whistle.onWrenched(blockState, relocateContext(context, findRoot)); + return IWrenchable.super.onWrenched(state, context); + } + + @Override + public ItemStack getCloneItemStack(BlockState state, HitResult target, BlockGetter level, BlockPos pos, + Player player) { + return AllBlocks.STEAM_WHISTLE.asStack(); + } + + public static BlockPos findRoot(LevelAccessor pLevel, BlockPos pPos) { + BlockPos currentPos = pPos.below(); + while (true) { + BlockState blockState = pLevel.getBlockState(currentPos); + if (AllBlocks.STEAM_WHISTLE_EXTENSION.has(blockState)) { + currentPos = currentPos.below(); + continue; + } + return currentPos; + } + } + + @Override + public boolean canSurvive(BlockState pState, LevelReader pLevel, BlockPos pPos) { + BlockState below = pLevel.getBlockState(pPos.below()); + return below.is(this) && below.getValue(SHAPE) != WhistleExtenderShape.SINGLE + || AllBlocks.STEAM_WHISTLE.has(below); + } + + public BlockState updateShape(BlockState pState, Direction pFacing, BlockState pFacingState, LevelAccessor pLevel, + BlockPos pCurrentPos, BlockPos pFacingPos) { + if (pFacing.getAxis() != Axis.Y) + return pState; + + if (pFacing == Direction.UP) { + boolean connected = pState.getValue(SHAPE) == WhistleExtenderShape.DOUBLE_CONNECTED; + boolean shouldConnect = pLevel.getBlockState(pCurrentPos.above()) + .is(this); + if (!connected && shouldConnect) + return pState.setValue(SHAPE, WhistleExtenderShape.DOUBLE_CONNECTED); + if (connected && !shouldConnect) + return pState.setValue(SHAPE, WhistleExtenderShape.DOUBLE); + return pState; + } + + return !pState.canSurvive(pLevel, pCurrentPos) ? Blocks.AIR.defaultBlockState() + : pState.setValue(SIZE, pLevel.getBlockState(pCurrentPos.below()) + .getValue(SIZE)); + } + + @Override + public void onPlace(BlockState pState, Level pLevel, BlockPos pPos, BlockState pOldState, boolean pIsMoving) { + if (pOldState.getBlock() != this || pOldState.getValue(SHAPE) != pState.getValue(SHAPE)) + WhistleBlock.queuePitchUpdate(pLevel, findRoot(pLevel, pPos)); + } + + @Override + public void onRemove(BlockState pState, Level pLevel, BlockPos pPos, BlockState pNewState, boolean pIsMoving) { + if (pNewState.getBlock() != this) + WhistleBlock.queuePitchUpdate(pLevel, findRoot(pLevel, pPos)); + } + + @Override + protected void createBlockStateDefinition(Builder pBuilder) { + super.createBlockStateDefinition(pBuilder.add(SHAPE, SIZE)); + } + + @Override + public VoxelShape getShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, CollisionContext pContext) { + WhistleSize size = pState.getValue(SIZE); + switch (pState.getValue(SHAPE)) { + case DOUBLE: + return size == WhistleSize.LARGE ? AllShapes.WHISTLE_EXTENDER_LARGE_DOUBLE + : size == WhistleSize.MEDIUM ? AllShapes.WHISTLE_EXTENDER_MEDIUM_DOUBLE + : AllShapes.WHISTLE_EXTENDER_SMALL_DOUBLE; + case DOUBLE_CONNECTED: + return size == WhistleSize.LARGE ? AllShapes.WHISTLE_EXTENDER_LARGE_DOUBLE_CONNECTED + : size == WhistleSize.MEDIUM ? AllShapes.WHISTLE_EXTENDER_MEDIUM_DOUBLE_CONNECTED + : AllShapes.WHISTLE_EXTENDER_SMALL_DOUBLE_CONNECTED; + case SINGLE: + default: + return size == WhistleSize.LARGE ? AllShapes.WHISTLE_EXTENDER_LARGE + : size == WhistleSize.MEDIUM ? AllShapes.WHISTLE_EXTENDER_MEDIUM : AllShapes.WHISTLE_EXTENDER_SMALL; + } + } + + @Override + public boolean hidesNeighborFace(BlockGetter level, BlockPos pos, BlockState state, BlockState neighborState, + Direction dir) { + return AllBlocks.STEAM_WHISTLE.has(neighborState) && dir == Direction.DOWN; + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/steam/whistle/WhistleGenerator.java b/src/main/java/com/simibubi/create/content/contraptions/components/steam/whistle/WhistleGenerator.java new file mode 100644 index 000000000..15317a1ca --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/steam/whistle/WhistleGenerator.java @@ -0,0 +1,42 @@ +package com.simibubi.create.content.contraptions.components.steam.whistle; + +import com.simibubi.create.Create; +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.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.client.model.generators.ModelFile; + +public class WhistleGenerator extends SpecialBlockStateGen { + + @Override + protected int getXRotation(BlockState state) { + return 0; + } + + @Override + protected int getYRotation(BlockState state) { + return horizontalAngle(state.getValue(WhistleBlock.FACING)); + } + + @Override + public ModelFile getModel(DataGenContext ctx, RegistrateBlockstateProvider prov, + BlockState state) { + String wall = state.getValue(WhistleBlock.WALL) ? "wall" : "floor"; + String size = state.getValue(WhistleBlock.SIZE) + .getSerializedName(); + boolean powered = state.getValue(WhistleBlock.POWERED); + ModelFile model = AssetLookup.partialBaseModel(ctx, prov, size, wall); + if (!powered) + return model; + ResourceLocation parentLocation = model.getLocation(); + return prov.models() + .withExistingParent(parentLocation.getPath() + "_powered", parentLocation) + .texture("2", Create.asResource("block/copper_redstone_plate_powered")); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/steam/whistle/WhistleRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/steam/whistle/WhistleRenderer.java new file mode 100644 index 000000000..45edc082e --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/steam/whistle/WhistleRenderer.java @@ -0,0 +1,44 @@ +package com.simibubi.create.content.contraptions.components.steam.whistle; + +import com.jozufozu.flywheel.core.PartialModel; +import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.AllBlockPartials; +import com.simibubi.create.content.contraptions.components.steam.whistle.WhistleBlock.WhistleSize; +import com.simibubi.create.foundation.render.CachedBufferer; +import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer; +import com.simibubi.create.foundation.utility.AngleHelper; + +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.core.Direction; +import net.minecraft.world.level.block.state.BlockState; + +public class WhistleRenderer extends SafeTileEntityRenderer { + + public WhistleRenderer(BlockEntityRendererProvider.Context context) {} + + @Override + protected void renderSafe(WhistleTileEntity te, float partialTicks, PoseStack ms, MultiBufferSource buffer, + int light, int overlay) { + BlockState blockState = te.getBlockState(); + if (!(blockState.getBlock() instanceof WhistleBlock)) + return; + + Direction direction = blockState.getValue(WhistleBlock.FACING); + WhistleSize size = blockState.getValue(WhistleBlock.SIZE); + + PartialModel mouth = size == WhistleSize.LARGE ? AllBlockPartials.WHISTLE_MOUTH_LARGE + : size == WhistleSize.MEDIUM ? AllBlockPartials.WHISTLE_MOUTH_MEDIUM : AllBlockPartials.WHISTLE_MOUTH_SMALL; + + float offset = 0; + CachedBufferer.partial(mouth, blockState) + .centre() + .rotateY(AngleHelper.horizontalAngle(direction)) + .unCentre() + .translate(0, offset * 4 / 16f, 0) + .light(light) + .renderInto(ms, buffer.getBuffer(RenderType.solid())); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/steam/whistle/WhistleTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/steam/whistle/WhistleTileEntity.java new file mode 100644 index 000000000..9c8bb9d52 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/steam/whistle/WhistleTileEntity.java @@ -0,0 +1,65 @@ +package com.simibubi.create.content.contraptions.components.steam.whistle; + +import java.util.List; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.content.contraptions.components.steam.whistle.WhistleExtenderBlock.WhistleExtenderShape; +import com.simibubi.create.content.contraptions.goggles.IHaveGoggleInformation; +import com.simibubi.create.foundation.tileEntity.SmartTileEntity; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; + +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; + +public class WhistleTileEntity extends SmartTileEntity implements IHaveGoggleInformation { + + protected int pitch = 0; + + public WhistleTileEntity(BlockEntityType type, BlockPos pos, BlockState state) { + super(type, pos, state); + } + + @Override + public void addBehaviours(List behaviours) {} + + public void updatePitch() { + BlockPos currentPos = worldPosition.above(); + int prevPitch = pitch; + for (pitch = 0; pitch <= 24; pitch += 2) { + BlockState blockState = level.getBlockState(currentPos); + if (!AllBlocks.STEAM_WHISTLE_EXTENSION.has(blockState)) + break; + if (blockState.getValue(WhistleExtenderBlock.SHAPE) == WhistleExtenderShape.SINGLE) { + pitch++; + break; + } + currentPos = currentPos.above(); + } + if (prevPitch == pitch) + return; + notifyUpdate(); + } + + @Override + protected void write(CompoundTag tag, boolean clientPacket) { + tag.putInt("Pitch", pitch); + super.write(tag, clientPacket); + } + + @Override + protected void read(CompoundTag tag, boolean clientPacket) { + pitch = tag.getInt("Pitch"); + super.read(tag, clientPacket); + } + + @Override + public boolean addToGoggleTooltip(List tooltip, boolean isPlayerSneaking) { + tooltip.add(new TextComponent(spacing + "Pitch: " + pitch)); + return true; + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/BoilerData.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/BoilerData.java index 39f799f93..2af9d3999 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/BoilerData.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/BoilerData.java @@ -6,6 +6,7 @@ import java.util.List; import com.simibubi.create.AllBlocks; import com.simibubi.create.Create; import com.simibubi.create.content.contraptions.components.steam.SteamEngineBlock; +import com.simibubi.create.content.contraptions.components.steam.whistle.WhistleBlock; import com.simibubi.create.content.contraptions.goggles.IHaveGoggleInformation; import com.simibubi.create.foundation.block.BlockStressValues; import com.simibubi.create.foundation.fluid.FluidHelper; @@ -48,6 +49,7 @@ public class BoilerData { public float waterSupply; public int attachedEngines; + public int attachedWhistles; public LerpedFloat gauge = LerpedFloat.linear(); @@ -142,14 +144,6 @@ public class BoilerData { Component w = levelComponent("Water ... ", forWaterSupply, minValue, maxValue); Component s = levelComponent("Size ....... ", forBoilerSize, minValue, maxValue); - double totalSU = getEngineEfficiency(boilerSize) * 16 * Math.max(boilerLevel, attachedEngines) - * BlockStressValues.getCapacity(AllBlocks.STEAM_ENGINE.get()); - Component capacity = - new TextComponent(IHaveGoggleInformation.format(totalSU)).append(Lang.translate("generic.unit.stress")) - .withStyle(ChatFormatting.AQUA); - Component engines = - new TextComponent(" via " + attachedEngines + " engine(s)").withStyle(ChatFormatting.DARK_GRAY); - Component indent = new TextComponent(spacing); Component indent2 = new TextComponent(spacing + " "); @@ -159,6 +153,17 @@ public class BoilerData { .append(w)); tooltip.add(indent2.plainCopy() .append(h)); + + if (attachedEngines == 0) + return true; + + double totalSU = getEngineEfficiency(boilerSize) * 16 * Math.max(boilerLevel, attachedEngines) + * BlockStressValues.getCapacity(AllBlocks.STEAM_ENGINE.get()); + Component capacity = + new TextComponent(IHaveGoggleInformation.format(totalSU)).append(Lang.translate("generic.unit.stress")) + .withStyle(ChatFormatting.AQUA); + Component engines = + new TextComponent(" via " + attachedEngines + " engine(s)").withStyle(ChatFormatting.DARK_GRAY); tooltip.add(indent); tooltip.add(indent.plainCopy() @@ -194,8 +199,10 @@ public class BoilerData { public boolean evaluate(FluidTankTileEntity controller) { BlockPos controllerPos = controller.getBlockPos(); Level level = controller.getLevel(); - int prev = attachedEngines; + int prevEngines = attachedEngines; + int prevWhistles = attachedWhistles; attachedEngines = 0; + attachedWhistles = 0; for (int yOffset = 0; yOffset < controller.height; yOffset++) { for (int xOffset = 0; xOffset < controller.width; xOffset++) { @@ -206,20 +213,21 @@ public class BoilerData { if (!FluidTankBlock.isTank(blockState)) continue; for (Direction d : Iterate.directions) { - BlockPos enginePos = pos.relative(d); - BlockState engineState = level.getBlockState(enginePos); - if (!AllBlocks.STEAM_ENGINE.has(engineState)) - continue; - if (SteamEngineBlock.getFacing(engineState) != d) - continue; - attachedEngines++; + BlockPos attachedPos = pos.relative(d); + BlockState attachedState = level.getBlockState(attachedPos); + if (AllBlocks.STEAM_ENGINE.has(attachedState) && SteamEngineBlock.getFacing(attachedState) == d) + attachedEngines++; + if (AllBlocks.STEAM_WHISTLE.has(attachedState) + && WhistleBlock.getAttachedDirection(attachedState) + .getOpposite() == d) + attachedWhistles++; } } } } needsHeatLevelUpdate = true; - return prev != attachedEngines; + return prevEngines != attachedEngines || prevWhistles != attachedWhistles; } public boolean updateTemperature(FluidTankTileEntity controller) { @@ -251,7 +259,7 @@ public class BoilerData { } public boolean isActive() { - return attachedEngines > 0; + return attachedEngines > 0 || attachedWhistles > 0; } public void clear() { @@ -268,6 +276,7 @@ public class BoilerData { nbt.putInt("ActiveHeat", activeHeat); nbt.putBoolean("PassiveHeat", passiveHeat); nbt.putInt("Engines", attachedEngines); + nbt.putInt("Whistles", attachedWhistles); nbt.putBoolean("Update", needsHeatLevelUpdate); return nbt; } @@ -277,6 +286,7 @@ public class BoilerData { activeHeat = nbt.getInt("ActiveHeat"); passiveHeat = nbt.getBoolean("PassiveHeat"); attachedEngines = nbt.getInt("Engines"); + attachedWhistles = nbt.getInt("Whistles"); needsHeatLevelUpdate = nbt.getBoolean("Update"); Arrays.fill(supplyOverTime, (int) waterSupply); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankBlock.java index 26ac6e4de..db0fa64f2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankBlock.java @@ -329,5 +329,18 @@ public class FluidTankBlock extends Block implements IWrenchable, ITE ComparatorUtil.fractionToRedstoneLevel(te.getFillState())) .orElse(0); } + + public static void updateBoilerState(BlockState pState, Level pLevel, BlockPos tankPos) { + BlockState tankState = pLevel.getBlockState(tankPos); + if (!FluidTankBlock.isTank(tankState)) + return; + FluidTankTileEntity tankTE = FluidTankConnectivityHandler.anyTankAt(pLevel, tankPos); + if (tankTE == null) + return; + FluidTankTileEntity controllerTE = tankTE.getControllerTE(); + if (controllerTE == null) + return; + controllerTE.updateBoilerState(); + } } diff --git a/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java b/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java index 9932b7ef0..b9babc18c 100644 --- a/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java @@ -13,7 +13,11 @@ import org.apache.commons.lang3.tuple.Pair; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import com.simibubi.create.Create; import com.simibubi.create.content.contraptions.base.DirectionalAxisKineticBlock; +import com.simibubi.create.content.contraptions.components.steam.whistle.WhistleBlock.WhistleSize; +import com.simibubi.create.content.contraptions.components.steam.whistle.WhistleExtenderBlock; +import com.simibubi.create.content.contraptions.components.steam.whistle.WhistleExtenderBlock.WhistleExtenderShape; import com.simibubi.create.content.contraptions.components.structureMovement.chassis.LinearChassisBlock; import com.simibubi.create.content.contraptions.components.structureMovement.chassis.RadialChassisBlock; import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssembleRailType; @@ -36,8 +40,10 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.level.block.state.properties.RailShape; +import net.minecraftforge.client.model.generators.BlockModelProvider; import net.minecraftforge.client.model.generators.ConfiguredModel; import net.minecraftforge.client.model.generators.ModelFile; +import net.minecraftforge.client.model.generators.ModelFile.ExistingModelFile; import net.minecraftforge.client.model.generators.MultiPartBlockStateBuilder; public class BlockStateGen { @@ -339,6 +345,41 @@ public class BlockStateGen { }; } + public static

NonNullBiConsumer, RegistrateBlockstateProvider> whistleExtender() { + return (c, p) -> { + BlockModelProvider models = p.models(); + String basePath = "block/steam_whistle/extension/"; + MultiPartBlockStateBuilder builder = p.getMultipartBuilder(c.get()); + + for (WhistleSize size : WhistleSize.values()) { + String basePathSize = basePath + size.getSerializedName() + "_"; + ExistingModelFile topRim = models.getExistingFile(Create.asResource(basePathSize + "top_rim")); + ExistingModelFile single = models.getExistingFile(Create.asResource(basePathSize + "single")); + ExistingModelFile double_ = models.getExistingFile(Create.asResource(basePathSize + "double")); + + builder.part() + .modelFile(topRim) + .addModel() + .condition(WhistleExtenderBlock.SIZE, size) + .condition(WhistleExtenderBlock.SHAPE, WhistleExtenderShape.DOUBLE) + .end() + .part() + .modelFile(single) + .addModel() + .condition(WhistleExtenderBlock.SIZE, size) + .condition(WhistleExtenderBlock.SHAPE, WhistleExtenderShape.SINGLE) + .end() + .part() + .modelFile(double_) + .addModel() + .condition(WhistleExtenderBlock.SIZE, size) + .condition(WhistleExtenderBlock.SHAPE, WhistleExtenderShape.DOUBLE, + WhistleExtenderShape.DOUBLE_CONNECTED) + .end(); + } + }; + } + public static

NonNullBiConsumer, RegistrateBlockstateProvider> pipe() { return (c, p) -> { String path = "block/" + c.getName(); diff --git a/src/main/resources/assets/create/models/block/steam_whistle/Whistle.bbmodel b/src/main/resources/assets/create/models/block/steam_whistle/Whistle.bbmodel new file mode 100644 index 000000000..4d4b75d25 --- /dev/null +++ b/src/main/resources/assets/create/models/block/steam_whistle/Whistle.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.0","creation_time":1651860641,"model_format":"java_block","box_uv":false},"name":"","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"resolution":{"width":16,"height":16},"elements":[{"name":"Base","rescale":false,"locked":false,"from":[1,0,1],"to":[15,3,15],"autouv":0,"color":3,"origin":[0,0,0],"faces":{"north":{"uv":[1,13,15,16],"texture":2},"east":{"uv":[1,13,15,16],"texture":2},"south":{"uv":[1,13,15,16],"texture":2},"west":{"uv":[1,13,15,16],"texture":2},"up":{"uv":[1,0,15,14],"texture":2},"down":{"uv":[8.5,8.5,15.5,15.5],"texture":1}},"type":"cube","uuid":"3139ddbd-2b57-ab73-b87a-e90e81130a2b"},{"name":"Pipe Medium","rescale":false,"locked":false,"from":[5,3,5],"to":[11,11,11],"autouv":0,"color":3,"origin":[0,0,0],"faces":{"north":{"uv":[2.5,2.5,5.5,6.5],"texture":1},"east":{"uv":[2.5,2.5,5.5,6.5],"texture":1},"south":{"uv":[2.5,2.5,5.5,6.5],"texture":1},"west":{"uv":[2.5,2.5,5.5,6.5],"texture":1},"up":{"uv":[7.5,1,10.5,4],"texture":1},"down":{"uv":[0,0,0,0],"texture":null}},"type":"cube","uuid":"c2b59627-3820-46a7-5422-d4ea63457764"},{"name":"Pipe Large","rescale":false,"locked":false,"from":[4,3,4],"to":[12,12,12],"autouv":0,"color":3,"origin":[0,0,0],"faces":{"north":{"uv":[2,2,6,6.5],"texture":1},"east":{"uv":[2,2,6,6.5],"texture":1},"south":{"uv":[2,2,6,6.5],"texture":1},"west":{"uv":[2,2,6,6.5],"texture":1},"up":{"uv":[7,0.5,11,4.5],"texture":1},"down":{"uv":[0,0,0,0],"texture":null}},"type":"cube","uuid":"26b1f867-35cc-e6c9-0e32-2eece67707ce"},{"name":"Pipe Small","rescale":false,"locked":false,"from":[6,3,6],"to":[10,10,10],"autouv":0,"color":3,"origin":[0,0,0],"faces":{"north":{"uv":[3,3,5,6.5],"texture":1},"east":{"uv":[3,3,5,6.5],"texture":1},"south":{"uv":[3,3,5,6.5],"texture":1},"west":{"uv":[3,3,5,6.5],"texture":1},"up":{"uv":[8,1.5,10,3.5],"texture":1},"down":{"uv":[0,0,0,0],"texture":null}},"type":"cube","uuid":"38d955d0-b71a-b997-1b25-f1f670b972f8"},{"name":"Base","rescale":false,"locked":false,"from":[1,1,13],"to":[15,15,16],"autouv":0,"color":4,"origin":[8,8,8],"faces":{"north":{"uv":[1,0,15,14],"rotation":180,"texture":2},"east":{"uv":[1,13,15,16],"rotation":90,"texture":2},"south":{"uv":[8.5,8.5,15.5,15.5],"texture":1},"west":{"uv":[1,13,15,16],"rotation":270,"texture":2},"up":{"uv":[1,13,15,16],"texture":2},"down":{"uv":[1,13,15,16],"rotation":180,"texture":2}},"type":"cube","uuid":"d77c5bf7-db68-86df-054c-42b0bc6636cb"},{"name":"Pipe Medium","rescale":false,"locked":false,"from":[5,5,5],"to":[11,11,13],"autouv":0,"color":4,"origin":[8,8,8],"faces":{"north":{"uv":[7.5,1,10.5,4],"rotation":180,"texture":1},"east":{"uv":[2.5,2.5,5.5,6.5],"rotation":90,"texture":1},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[2.5,2.5,5.5,6.5],"rotation":270,"texture":1},"up":{"uv":[2.5,2.5,5.5,6.5],"texture":1},"down":{"uv":[2.5,2.5,5.5,6.5],"rotation":180,"texture":1}},"type":"cube","uuid":"63d65d9f-6a43-3d31-5827-f4cec1e6c978"},{"name":"Pipe Large","rescale":false,"locked":false,"from":[4,4,4],"to":[12,12,13],"autouv":0,"color":4,"origin":[8,8,8],"faces":{"north":{"uv":[7,0.5,11,4.5],"rotation":180,"texture":1},"east":{"uv":[2,2,6,6.5],"rotation":90,"texture":1},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[2,2,6,6.5],"rotation":270,"texture":1},"up":{"uv":[2,2,6,6.5],"texture":1},"down":{"uv":[2,2,6,6.5],"rotation":180,"texture":1}},"type":"cube","uuid":"b7f5567e-9a39-ac66-bc72-1b0aa6ec84e6"},{"name":"Pipe Small","rescale":false,"locked":false,"from":[6,6,6],"to":[10,10,13],"autouv":0,"color":4,"origin":[8,8,8],"faces":{"north":{"uv":[8,1.5,10,3.5],"rotation":180,"texture":1},"east":{"uv":[3,3,5,6.5],"rotation":90,"texture":1},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[3,3,5,6.5],"rotation":270,"texture":1},"up":{"uv":[3,3,5,6.5],"texture":1},"down":{"uv":[3,3,5,6.5],"rotation":180,"texture":1}},"type":"cube","uuid":"fc69c9fa-d323-7200-8aa6-bf40e136f574"},{"name":"Whistle Medium Base","rescale":false,"locked":false,"from":[4,4,4],"to":[12,16,12],"autouv":0,"color":3,"origin":[0,0,0],"faces":{"north":{"uv":[5,4.5,7,7.5],"texture":0},"east":{"uv":[9,4.5,11,7.5],"texture":0},"south":{"uv":[9,4.5,11,7.5],"texture":0},"west":{"uv":[9,4.5,11,7.5],"texture":0},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[13,13,15,15],"texture":0}},"type":"cube","uuid":"94b764d0-eb25-9ba7-8d72-2c879cbaa99d"},{"name":"Whistle Medium Extension","rescale":false,"locked":false,"from":[4,16,4],"to":[12,24,12],"autouv":0,"color":3,"origin":[0,0,0],"faces":{"north":{"uv":[13,5.5,15,7.5],"texture":0},"east":{"uv":[13,5.5,15,7.5],"texture":0},"south":{"uv":[13,5.5,15,7.5],"texture":0},"west":{"uv":[13,5.5,15,7.5],"texture":0},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[0,0,0,0],"texture":null}},"type":"cube","uuid":"2c31212b-11e2-cb14-b8e7-330d09e07aa5"},{"name":"Whistle Medium Cap","rescale":false,"locked":false,"from":[3,16,3],"to":[13,18,13],"autouv":0,"color":3,"origin":[0,0,0],"faces":{"north":{"uv":[12.75,4.75,15.25,5.25],"texture":0},"east":{"uv":[12.75,4.75,15.25,5.25],"texture":0},"south":{"uv":[12.75,4.75,15.25,5.25],"texture":0},"west":{"uv":[12.75,4.75,15.25,5.25],"texture":0},"up":{"uv":[4.75,12.75,7.25,15.25],"texture":0},"down":{"uv":[12.75,12.75,15.25,15.25],"texture":0}},"type":"cube","uuid":"a8861a90-8d63-3daf-fe0b-bf5c1eb99dfd"},{"name":"Centre","rescale":false,"locked":false,"from":[6,7,3.5],"to":[10,12,5],"autouv":0,"color":4,"origin":[0,0,0],"faces":{"north":{"uv":[1.5,4,2.5,5.25],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[0,0,4,5],"texture":null},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[13.5,14.5,14.5,15],"rotation":180,"texture":0},"down":{"uv":[5,5.5,5.5,6],"texture":0}},"type":"cube","uuid":"563fdd31-34a2-fbad-aa4c-e7dce0074059"},{"name":"Back","rescale":false,"locked":false,"from":[6,5,5],"to":[10,12,12.5],"autouv":0,"color":4,"origin":[0,0,0],"faces":{"north":{"uv":[5,5.5,5.5,6],"texture":0},"east":{"uv":[0,0,7.5,7],"texture":null},"south":{"uv":[1.5,6,2.5,7.75],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[13.5,12.75,14.5,14.75],"rotation":180,"texture":0},"down":{"uv":[5,5.5,5.5,6],"texture":0}},"type":"cube","uuid":"0c5233e2-ae78-39ad-a3e4-fa0b5c27cf49"},{"name":"Left","rescale":false,"locked":false,"from":[3.5,5,3.5],"to":[6,12,12.5],"autouv":0,"color":7,"origin":[0,0,0],"faces":{"north":{"uv":[2.5,4,3,5.75],"texture":0},"east":{"uv":[5,5.5,5.5,6],"texture":0},"south":{"uv":[1,6,1.5,7.75],"texture":0},"west":{"uv":[1,6,3,7.75],"texture":0},"up":{"uv":[14.5,13,15,15],"rotation":180,"texture":0},"down":{"uv":[5,5.5,5.5,6],"texture":0}},"type":"cube","uuid":"8e711c96-7d58-d7a6-c720-a97e87abc421"},{"name":"Right","rescale":false,"locked":false,"from":[10,5,3.5],"to":[12.5,12,12.5],"autouv":0,"color":7,"origin":[0,0,0],"faces":{"north":{"uv":[1,4,1.5,5.75],"texture":0},"east":{"uv":[1,6,3,7.75],"texture":0},"south":{"uv":[2.5,6,3,7.75],"texture":0},"west":{"uv":[5.5,1.5,5,2],"texture":0},"up":{"uv":[13,13,13.5,15],"rotation":180,"texture":0},"down":{"uv":[5,1.5,5.5,2],"texture":0}},"type":"cube","uuid":"2a8f8a1a-ef0c-3782-8988-7f0d012c3da8"},{"name":"Whistle Medium Cap","rescale":false,"locked":false,"from":[3,24,3],"to":[13,26,13],"autouv":0,"color":3,"origin":[0,0,0],"faces":{"north":{"uv":[12.75,4.75,15.25,5.25],"texture":0},"east":{"uv":[12.75,4.75,15.25,5.25],"texture":0},"south":{"uv":[12.75,4.75,15.25,5.25],"texture":0},"west":{"uv":[12.75,4.75,15.25,5.25],"texture":0},"up":{"uv":[4.75,12.75,7.25,15.25],"texture":0},"down":{"uv":[12.75,12.75,15.25,15.25],"texture":0}},"type":"cube","uuid":"12ef2bcd-d520-0950-3deb-9b51b84311b3"},{"name":"Whistle Large Base","rescale":false,"locked":false,"from":[3,4,3],"to":[13,16,13],"autouv":0,"color":3,"origin":[0,0,0],"faces":{"north":{"uv":[4.75,0.5,7.25,3.5],"texture":0},"east":{"uv":[8.75,0.5,11.25,3.5],"texture":0},"south":{"uv":[8.75,0.5,11.25,3.5],"texture":0},"west":{"uv":[8.75,0.5,11.25,3.5],"texture":0},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[13,13,15,15],"texture":0}},"type":"cube","uuid":"d38007bd-383c-efd5-ec9a-84b237b4b03b"},{"name":"Whistle large Cap","rescale":false,"locked":false,"from":[2,16,2],"to":[14,18,14],"autouv":0,"color":3,"origin":[0,0,0],"faces":{"north":{"uv":[12.5,0.75,15.5,1.25],"texture":0},"east":{"uv":[12.5,0.75,15.5,1.25],"texture":0},"south":{"uv":[12.5,0.75,15.5,1.25],"texture":0},"west":{"uv":[12.5,0.75,15.5,1.25],"texture":0},"up":{"uv":[0.5,12.5,3.5,15.5],"texture":0},"down":{"uv":[12.5,12.5,15.5,15.5],"texture":0}},"type":"cube","uuid":"9cf7b07f-de87-1bfb-edbe-2396840598d0"},{"name":"Centre","rescale":false,"locked":false,"from":[6,7,2.5],"to":[10,12,5],"autouv":0,"color":4,"origin":[0,0,0],"faces":{"north":{"uv":[1.5,0,2.5,1.25],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[0,0,4,5],"texture":null},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[13.5,14.5,14.5,15],"rotation":180,"texture":0},"down":{"uv":[5,5.5,5.5,6],"texture":0}},"type":"cube","uuid":"5f93ab1e-ea8c-5add-4777-e1390fc5f188"},{"name":"Back","rescale":false,"locked":false,"from":[6,5,5],"to":[10,12,13.5],"autouv":0,"color":4,"origin":[0,0,0],"faces":{"north":{"uv":[5,5.5,5.5,6],"texture":0},"east":{"uv":[0,0,7.5,7],"texture":null},"south":{"uv":[1.5,2,2.5,3.75],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[13.5,12.75,14.5,14.75],"rotation":180,"texture":0},"down":{"uv":[5,5.5,5.5,6],"texture":0}},"type":"cube","uuid":"9348d5d0-fa51-3fba-6ac3-d75cc5446ecd"},{"name":"Left","rescale":false,"locked":false,"from":[2.5,5,2.5],"to":[6,12,13.5],"autouv":0,"color":7,"origin":[0,0,0],"faces":{"north":{"uv":[2.5,0,3.25,1.75],"texture":0},"east":{"uv":[5,5.5,5.5,6],"texture":0},"south":{"uv":[0.75,2,1.5,3.75],"texture":0},"west":{"uv":[0.75,2,3.25,3.75],"texture":0},"up":{"uv":[14.5,12.75,15.25,15.25],"rotation":180,"texture":0},"down":{"uv":[5,5.5,5.5,6],"texture":0}},"type":"cube","uuid":"323b9004-d945-2064-5c9f-bd83f93b8fcd"},{"name":"Right","rescale":false,"locked":false,"from":[10,5,2.5],"to":[13.5,12,13.5],"autouv":0,"color":7,"origin":[0,0,0],"faces":{"north":{"uv":[0.75,0,1.5,1.75],"texture":0},"east":{"uv":[0.75,2,3.25,3.75],"texture":0},"south":{"uv":[2.5,2,3.25,3.75],"texture":0},"west":{"uv":[5.5,1.5,5,2],"texture":0},"up":{"uv":[12.75,12.75,13.5,15.25],"rotation":180,"texture":0},"down":{"uv":[5,1.5,5.5,2],"texture":0}},"type":"cube","uuid":"5473a6f1-75a5-c7d3-62b6-63c609b7a3c9"},{"name":"Whistle Large Cap","rescale":false,"locked":false,"from":[2,24,2],"to":[14,26,14],"autouv":0,"color":3,"origin":[0,0,0],"faces":{"north":{"uv":[12.5,0.75,15.5,1.25],"texture":0},"east":{"uv":[12.5,0.75,15.5,1.25],"texture":0},"south":{"uv":[12.5,0.75,15.5,1.25],"texture":0},"west":{"uv":[12.5,0.75,15.5,1.25],"texture":0},"up":{"uv":[0.5,12.5,3.5,15.5],"texture":0},"down":{"uv":[12.5,12.5,15.5,15.5],"texture":0}},"type":"cube","uuid":"f8bcde47-a20c-eef5-c51c-042262dc4d44"},{"name":"Whistle large Extension","rescale":false,"locked":false,"from":[3,16,3],"to":[13,24,13],"autouv":0,"color":3,"origin":[0,0,0],"faces":{"north":{"uv":[12.75,1.5,15.25,3.5],"texture":0},"east":{"uv":[12.75,1.5,15.25,3.5],"texture":0},"south":{"uv":[12.75,1.5,15.25,3.5],"texture":0},"west":{"uv":[12.75,1.5,15.25,3.5],"texture":0},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[0,0,0,0],"texture":null}},"type":"cube","uuid":"5746578e-3326-ba9b-6e91-10c9555bd3df"},{"name":"Whistle Small Base","rescale":false,"locked":false,"from":[5,4,5],"to":[11,16,11],"autouv":0,"color":3,"origin":[0,0,0],"faces":{"north":{"uv":[5.25,8.5,6.75,11.5],"texture":0},"east":{"uv":[9.25,8.5,10.75,11.5],"texture":0},"south":{"uv":[9.25,8.5,10.75,11.5],"texture":0},"west":{"uv":[9.25,8.5,10.75,11.5],"texture":0},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[13,13,15,15],"texture":0}},"type":"cube","uuid":"49581255-68f1-c4fc-7b4c-1c60202eaeac"},{"name":"Whistle Small Cap","rescale":false,"locked":false,"from":[4,16,4],"to":[12,18,12],"autouv":0,"color":3,"origin":[0,0,0],"faces":{"north":{"uv":[13,8.75,15,9.25],"texture":0},"east":{"uv":[13,8.75,15,9.25],"texture":0},"south":{"uv":[13,8.75,15,9.25],"texture":0},"west":{"uv":[13,8.75,15,9.25],"texture":0},"up":{"uv":[9,13,11,15],"texture":0},"down":{"uv":[13,13,15,15],"texture":0}},"type":"cube","uuid":"777fc4e3-01ed-dd12-2a6a-66878af5714a"},{"name":"Centre","rescale":false,"locked":false,"from":[7,6,4.5],"to":[9,12,5],"autouv":0,"color":4,"origin":[0,0,0],"faces":{"north":{"uv":[1.75,8,2.25,9.5],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[0,0,4,5],"texture":null},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[13.75,14.5,14.25,15],"rotation":180,"texture":0},"down":{"uv":[5,5.5,5.5,6],"texture":0}},"type":"cube","uuid":"8645ecb9-e12c-c8c9-a0cb-50d552438346"},{"name":"Back","rescale":false,"locked":false,"from":[7,5,6],"to":[9,12,11.5],"autouv":0,"color":4,"origin":[0,0,0],"faces":{"north":{"uv":[5,5.5,5.5,6],"texture":0},"east":{"uv":[0,0,7.5,7],"texture":null},"south":{"uv":[1.75,10,2.25,11.75],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[13.75,12.75,14.25,14.75],"rotation":180,"texture":0},"down":{"uv":[5,5.5,5.5,6],"texture":0}},"type":"cube","uuid":"47f391e5-0063-2b57-c973-14acb0ffff72"},{"name":"Left","rescale":false,"locked":false,"from":[4.5,5,4.5],"to":[7,12,11.5],"autouv":0,"color":7,"origin":[0,0,0],"faces":{"north":{"uv":[2.25,8,2.75,9.75],"texture":0},"east":{"uv":[5,5.5,5.5,6],"texture":0},"south":{"uv":[1.25,10,1.75,11.75],"texture":0},"west":{"uv":[1.25,10,2.75,11.75],"texture":0},"up":{"uv":[14.25,13.25,14.75,14.75],"rotation":180,"texture":0},"down":{"uv":[5,5.5,5.5,6],"texture":0}},"type":"cube","uuid":"65ff9958-6226-c119-93ba-28930cd18ec7"},{"name":"Right","rescale":false,"locked":false,"from":[9,5,4.5],"to":[11.5,12,11.5],"autouv":0,"color":7,"origin":[0,0,0],"faces":{"north":{"uv":[1.25,8,1.75,9.75],"texture":0},"east":{"uv":[1.25,10,2.75,11.75],"texture":0},"south":{"uv":[2.25,10,2.75,11.75],"texture":0},"west":{"uv":[5.5,1.5,5,2],"texture":0},"up":{"uv":[13.25,13.25,13.75,14.75],"rotation":180,"texture":0},"down":{"uv":[5,1.5,5.5,2],"texture":0}},"type":"cube","uuid":"e5eff405-9c7c-c464-3951-2b389e4ba9a2"},{"name":"Whistle Small Cap","rescale":false,"locked":false,"from":[4,24,4],"to":[12,26,12],"autouv":0,"color":3,"origin":[0,0,0],"faces":{"north":{"uv":[13,8.75,15,9.25],"texture":0},"east":{"uv":[13,8.75,15,9.25],"texture":0},"south":{"uv":[13,8.75,15,9.25],"texture":0},"west":{"uv":[13,8.75,15,9.25],"texture":0},"up":{"uv":[9,13,11,15],"texture":0},"down":{"uv":[13,13,15,15],"texture":0}},"type":"cube","uuid":"040350bf-d7a9-b283-758c-b3148169276d"},{"name":"Whistle Small Extension","rescale":false,"locked":false,"from":[5,16,5],"to":[11,24,11],"autouv":0,"color":3,"origin":[0,0,0],"faces":{"north":{"uv":[13.25,9.5,14.75,11.5],"texture":0},"east":{"uv":[13,5.5,15,7.5],"texture":0},"south":{"uv":[13,5.5,15,7.5],"texture":0},"west":{"uv":[13,5.5,15,7.5],"texture":0},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[0,0,0,0],"texture":null}},"type":"cube","uuid":"4604ea74-9647-115f-f17b-c68947bacd13"}],"outliner":[{"name":"Bases","origin":[0,0,0],"color":0,"uuid":"1176b0f5-db41-7140-0944-72528a900d23","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"Base Flat","origin":[0,0,0],"color":3,"uuid":"b073120a-404e-8059-3974-09c95def5c11","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["3139ddbd-2b57-ab73-b87a-e90e81130a2b","c2b59627-3820-46a7-5422-d4ea63457764","26b1f867-35cc-e6c9-0e32-2eece67707ce","38d955d0-b71a-b997-1b25-f1f670b972f8"]},{"name":"Base Wall","origin":[0,0,0],"color":0,"uuid":"902ede01-2dde-cb5f-7297-26f31c911d1f","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["d77c5bf7-db68-86df-054c-42b0bc6636cb","63d65d9f-6a43-3d31-5827-f4cec1e6c978","b7f5567e-9a39-ac66-bc72-1b0aa6ec84e6","fc69c9fa-d323-7200-8aa6-bf40e136f574"]}]},{"name":"Whistle Medium","origin":[8,8,8],"color":0,"uuid":"74da1a14-6ce5-8a0f-1b30-4e65e4d52851","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["94b764d0-eb25-9ba7-8d72-2c879cbaa99d","a8861a90-8d63-3daf-fe0b-bf5c1eb99dfd",{"name":"Whistle Medium Mouth","origin":[8,8,8],"color":0,"uuid":"3da6494d-0a91-ed2b-de9e-ff4cfcfe8832","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["563fdd31-34a2-fbad-aa4c-e7dce0074059","0c5233e2-ae78-39ad-a3e4-fa0b5c27cf49","8e711c96-7d58-d7a6-c720-a97e87abc421","2a8f8a1a-ef0c-3782-8988-7f0d012c3da8"]},{"name":"Extension","origin":[8,8,8],"color":0,"uuid":"6532a120-6b2a-ec5e-e2d3-34bc40f1fa58","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["12ef2bcd-d520-0950-3deb-9b51b84311b3","2c31212b-11e2-cb14-b8e7-330d09e07aa5"]}]},{"name":"Whistle Large","origin":[8,8,8],"color":0,"uuid":"a9f9c9fb-916d-407a-9438-8ab8fa17d15d","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["d38007bd-383c-efd5-ec9a-84b237b4b03b","9cf7b07f-de87-1bfb-edbe-2396840598d0",{"name":"Whistle Large Mouth","origin":[8,8,8],"color":0,"uuid":"1974936a-df00-0399-61be-263295ccbb67","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["5f93ab1e-ea8c-5add-4777-e1390fc5f188","9348d5d0-fa51-3fba-6ac3-d75cc5446ecd","323b9004-d945-2064-5c9f-bd83f93b8fcd","5473a6f1-75a5-c7d3-62b6-63c609b7a3c9"]},{"name":"Extension","origin":[8,8,8],"color":0,"uuid":"2fd9e46e-dc33-78a8-7501-85f1fcd55557","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["f8bcde47-a20c-eef5-c51c-042262dc4d44","5746578e-3326-ba9b-6e91-10c9555bd3df"]}]},{"name":"Whistle Small","origin":[8,8,8],"color":0,"uuid":"6a850b4e-0931-ef53-d841-0b8117333acd","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["49581255-68f1-c4fc-7b4c-1c60202eaeac","777fc4e3-01ed-dd12-2a6a-66878af5714a",{"name":"Whistle Small Mouth","origin":[8,8,8],"color":0,"uuid":"d29a3610-8ffc-d7ca-bae2-9762525bb10e","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["8645ecb9-e12c-c8c9-a0cb-50d552438346","47f391e5-0063-2b57-c973-14acb0ffff72","65ff9958-6226-c119-93ba-28930cd18ec7","e5eff405-9c7c-c464-3951-2b389e4ba9a2"]},{"name":"Extension","origin":[8,8,8],"color":0,"uuid":"6b7e981c-6b91-36a3-7672-f99e7bd7f89b","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["040350bf-d7a9-b283-758c-b3148169276d","4604ea74-9647-115f-f17b-c68947bacd13"]}]}],"textures":[{"path":"C:\\Users\\simon\\Desktop\\Modding\\Forge 18 Concealed\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\whistle.png","name":"whistle.png","folder":"block","namespace":"create","id":"0","particle":true,"render_mode":"default","visible":true,"mode":"bitmap","saved":true,"uuid":"b6e181c9-dee4-93d2-c367-bb034704fa2a","relative_path":"../../../../textures/block/whistle.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAB+1JREFUeF7tW1tsFVUU3U18BG17pdEi9IGEomArEpMi0KA1QvADTcAoQYiPGBLwxyYmgjEh/BjLh4IfCEqMxogGH5AIIZJigjaA0h8Ean0UgT5AiiHcexGjEMesc++enjn3nJkzD3pLcb76mD1z9jr7sfbeZ0pIuvauf9SprC2nqqk1VD4mRVS6iuhCq7ij/0gvZX5P00BPhppbdpTIclfzzx5FPn3pQSdVcQPVTKl0QWDFoWRv1wClz/1DT77xzcgEYPdrc51bKm6krt8u0TOrm4lKG6n/wDaxwbu3/kwNk0fR+XN/07xX27QAAMDxdWVUdW8tVd1TI+QyZ9KUHcgI68meSdPJ7qwRwLjyUSzRowgAONR5kU73ZmndrsUuAFj8u+uO0NiaMmqePZruX7HTDoDSRsoc2xMdgBDy32+c75SNSVH57akc+KWNOTwudLi4nOrso/Sp82IjWIcCAMbUpujWiZWeHcQTsIt/HBugMz1powXwIgZjSA4AlmcrMAEYRx7Wg/fAhXHBkuULlosLLoyL3bggBtw57TaaMLOOUnWtnv+lu1c5xw900y+HzhpNeO1TTU7FzURT7xst3EC4gGT66cxlOvcn0cqP92ktSCcvAvAPPcJ1guRju8CP25Y4MKGyynItAOzLdy/cYnSBT7Ye813H4kUTfWNAXHnEILjClLkNVjEo0WgOM4yrQFx5DwAWMcQDAPMARk8EknwQQTTvP9zrywNkAMpGXe+xhOxfl8TvQ2oBYQFgHlD/0CThBiBDzAMQORFI/HgAfPi7b08KRU0AzHhgfGAMSJVfR9hJ+bKJAZxGI7sA0iBIkJxKOIpj93GBDJl4wOZlTU773lO+MWB28zhatlkfBKMoIL+sQD6sBSQJwJJn69xUBMvZ8kG3WGsoACwUuLIA5JmcSEUhLWDV2lnCkjgVtq7cP/QAWDBRbS0QJwZMGJvzX2ZlKhc4fvpyYAyoveMmYT14Bi6OPz0nLlrxCMhDB/ndsEKdvAcAmQeIapCInH8dyp7N5BaS5/QmHhCFiBRbJlEeUGxlory/AABYwSAPKOwHjKTdB2AFACCVNDRVF/QDgkrZKOgPB5kCAFCRufW81A8IquRYGQaQrUgmUn69gKTkw4JaAEDL7KkO6v6X35nv6Qfs+PyE6BOsbz/sGzc8AOQBtGmGaAEIKc9BPKgfILuxNga4TFDJo1hkUAxQLUhtiJh6AQxAHHmm8niWXz9AbulpXWDy3AZtOfxT21FjN4gVAB0Gl0ccYSIk1/MmGizLy/0EQcKkfkCQfGwXgBmho6NriIANBlnAgupq0ZkxXdv7+nxdKK582BiUOA+Iq0Bc+bAxKIAHDPYDOJrbWoCpHB5SC7AIoloeMOvxem0/wCaN8Q5GBQA9Ba4nZDfCu/3qiKhpNHEe8PSkCb4x4MNfj1ulUcQhuf6wJWKJuIDcEOHBiC0RYgBM/QBbAASRsjBhNdjGBsCTh/MzQbwkLAByPwBpbMObnWKtQwqANNM0WVDiMYB9WMcDbHwY8tPq9f0ATK1MMwW2BJbX9QN08oFMEP0AjJTYCoKyQFgiUuz7E+cBxVYo7Pu1APTtf8HJFRTefkD1rLdHHGBahXhIiUjMAxF5ohoW5eF8vxYAt6ycudAz3rb1fwA4fWmT0FvuBwRVgnJFGEc+DOBaAN578WFn3qK7qEoCAAcknn/raysXcAFQ8nhoACLID7qv/nxA1YwNHh20CslNEbjAptXtVs0QRt7tKyqDDVsLiiOP4Y5fP0Cdavm7QP6Yi20hpPJxtR9ge7aI2VxU+dgugMMQmAuUlL0iAHKyrzuwBLVHYHqRqR4IYoH8PFNJHFRJRokhVj4dBlHcO2wAsIghATwg1w/gk162POCqBwBRHH1B9XyAbRQHH+/s8I7J6xvHBfJ4OYbwfFGUxAHH61QLDZOGjUGQy1G5q2sbxRHEdn7Z41nX/MdqrQ9YytOpKEQsTBoOdIEoACAV8XkARgH9AdPBCnUH1TSIZmwYJpocAMpcwNYCGAD0BHDhbEBRALBgosZaIE4MUPM4milH9/VZuwAf2VXPB9haEOR1/QCdvBYA5gGCA+TPB+BsgG0WCJs2i3n/FeEBxVQo7Lv/ByAsYiPtftcCuAdgoyCCmm1GsHleEveggsVzMNr3uzDix8VjfhcA1NH7v8i1rtVTmvxATGdwYXKkC4ie+TwLSef2w1aVYYBhAPxAYOV9AUA7m1mgWEC+FsCPICRIZyYA/EAMAo+VlS3RPehwocPtLJksD/RbVlC1BPV/3F73WAAGGKIVpRyS5uNxGFfhjACO0OgsAGXzZ2u+EmcDpix4TgveE2seccts3Q7rQLQBDwDgeToQdH8zA7C8xVMB8kQISuMAtS8Azh7n4Kb1NH15S8GXIgweAOY+gw4ABnHeipni3wy+n+XhPgaAQdBZgPy3QADkZiYYGX8Gc/CjfWYLYACWNnm6yTJ4gQDknwEmyjUA5Nk6TeDJANjEDl8XkCsw9UMk7LCfCwAgLB47h0Wr4ME6SkrmGPkHLIBBluVheX6yiQGgLp4/ocl9SNlItgBg91gWO1I+cY6QDQKAYwDPFuF2uHZvPEB+8SMxF2DT8yiOFeQDo68LSEGQ5/sMXNf290UGGdZBEDyAT4mKXcvvOqfDrrajQ5YG1RSINfgRsETSYKJESPPh4rAmQtc8FbZJHSPxnmu+HP4PuYk3yJ4osFoAAAAASUVORK5CYII="},{"path":"C:\\Users\\simon\\Desktop\\Modding\\Forge 18 Concealed\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\engine.png","name":"engine.png","folder":"block","namespace":"create","id":"1","particle":false,"render_mode":"default","visible":true,"mode":"bitmap","saved":true,"uuid":"7ec814e1-5c85-e96d-a06b-e36ce90e2086","relative_path":"../../../../textures/block/engine.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAABNNJREFUWEfFV2toW2UYfrM0ze2krUuytGvZ7E28bYsoVlrHZCudjFF1ihc6/eGvOaHDH1oQ2Y86hDH94QTdLxV1KKJThwqObkwdUaFiOx0Dt15W2qVZE2yak1uT7Mjznn2n56RpSJaK75+cc77vfb/ne95rTHQTMnb4acVsd5CrycXa0gYv/8pTc/wbm45RLpmgI99NU221lZxrFMMp8esmii6m6dhP50wm/UqphnH4mZ+D5LZbyOkgcq2zqQdfS1E8QRRJZmj71gbes8FtIUe1mcx1Ft6Tm89QYjFHU5EM9Q10kQHAYM92pdWrGpPMVQbUci7L72NzKXpx3yY69/UEjc7K5JFsZDOrN0zlTBSWU7SlXqIHH23mPd469XCfR+I9obDMIObmc7zHAODdPbuURqlKU2rzNzCdeqUZOUtP7W2nP05N0N/XsnTbuiq+IQRGsY5v9/Q08x7cdDqapqZaK+8Rz2Cm7U6PEcDxvl0Kbg5aYXR92y3a4aAN9IKJJ17qpJGT5+nCxRjd3mDT6IULcOBdd7jI37uZ9/zwa5h2PuAhXAZyeSSofcO7gYFvnutVxOFYBHWgCwIAEIB4uP9+Nv77XzL5m6zaPuwBK/feLTGAYGCc4wDxABYhcIX4dvXyP8UB5DMgAMB3oDcwLrO/AVoIvnW2SOwC3BYgAQjsQMDsyHRa+1aQAbExP3L1ABBggatxTjGkFUQ8d653coDpQSIYRZwgeAESbBoA5MeA3gVCGTHQ1VFfUhqODoc5KJEZepDIHAR7IpEpnAXFghAGd3bUUCmF6MfhaNFakcukb64OHDx1xsDcUgSU9/Rmb7diMPTbwScVj3MN1bX72BJKrCiveJ+/FKJw/Dp1DH6+KgAO9TxkBCAKkXAB0koUGVEH4IL9J75fFQCvb7sBIND/mOJrtLJfIcWaDNbRaEIzaeo8+lVFQAa6tqkMoAcgMmvtRD6X2gNw83wGQrEs9whkAnrCasQCAxjo3qEghwECAiCFmlE0qQaZSKvDQ6crYgC2KjZQXtwv380AKo2BShhkABhEPj09q8Gz2YyzgFhIpdSZAPLMjnpqHfhMi6F4XG1WUpWJ7LWF9ZPRLMlZdXZwOs0cQ2xg8ujzyiffjlNrjX1FRh0OC5dOBryQpL27W+jW/vdZH+l7JRQnf4OuK+VZ0uuPBBO00efkdNYAfDE0RY3VFppZzFB7nUPrcKIOsKsmY7z25+zCMgCRSILavPaS9ddKjiUAkRMHlA8+vMAAgFS01/xZDiAw9QDAC/u2kHvP23wBNLFgbLEs/Wavg/qO32BAD8DrUYdIiGjHGCL0Y1k+AAwyl+YTDKBU/U31NfTIRydVF6SHDynvDJ5lekXfFhMQ5jYcjoECwAQDL7/RTdb7XmN9AaAc/WUAjrw6RPgIAOJwMW6LURoDBNzzy8UFeuUtIwCwUo7+5o06BuCC946NchaAQshKh2MNAPYfWIoBMAAA5egXBaA/HAfqGZmdTNH5K0YACMKJuYQGoBT9liZdEKIOfPzlOAEVgmmrf632R0KfzkhV+BkAnn3cWAeQhuXou926NBQAkMdIQ65UeTUF/hdSCIAoRKXoB8aixkIkSrGSXrEQaiWU48NpKlqKC1kRJVisGUrx/96MVr73f7/yLxn0juUSP7i0AAAAAElFTkSuQmCC"},{"path":"C:\\Users\\simon\\Desktop\\Modding\\Forge 18 Concealed\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\copper_redstone_plate.png","name":"copper_redstone_plate.png","folder":"block","namespace":"create","id":"2","particle":false,"render_mode":"default","visible":true,"mode":"bitmap","saved":true,"uuid":"ca02505d-86ae-a249-8bdd-d807a5b42339","relative_path":"../../../../textures/block/copper_redstone_plate.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAiJJREFUOE91kz9oE1Ecx78vaWrvco2xXBI1g2IjgkMpqNQUBDGii4MiSFN0cRU6SCGbg5OF4FBQnFwUk0FRxEVpxCmlWEGKDqIpUQhtkqKhuVzSNpefvHe8467G3/Le/d79Pr//DACKM1coFt8Dv6IiFhnB2XQWYebDPhD+gDnnq2e3Ua3/htU2Ua1sYXL+JWMcUJqbolxhnV+F1IyWc3dfolrQ+Uyn9mM0k7cB5fmb9PTNKkZDSl9DrlTVAExzR7yXNtu4fukIDs88tgHt3Cw9yH1GfDCAyvYOjoZVBFWbpQ76HWix3BRv3xsmbqXHoaSzNuAi89Gx5AkkD+rCk9vYHw4IgNWwvdcbFgo/1rBU/IglwAZMMUbR5EkBiOgBx6s0jukaqhuGgEjAt8VPeEs9bwSpxAFEwnbI5rYlzsRxXRg3ax0BloDa4jLyRN4IJEAaD0eHnPC5rmVCpPd6ZQ19I5ApcKv/GfM3DvBEMAHQxOQppwZuY3c6XL9e7ogieiLgbcw+WsbYoZBo0ZnxEfDC7ZbnC7/6t5EP0pMXq0hEFNFGLrKVEsLzl7LycxM3rroGSY4ybQFGl9Am19+uMBRmT9dwkMEzyruX6fL0/X8WqUE9fMjN9l+muxfOka4NYa8CnB4LYTqTd7axyT0CYisf3ruGL19NGFYXpXoHd969t+cgcz5FQR+BQ+LagPhB8w94aih1FaOLDaODVo9hbqHA/gIv4hQgUwRHoAAAAABJRU5ErkJggg=="}]} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/steam_whistle/block_large_floor.json b/src/main/resources/assets/create/models/block/steam_whistle/block_large_floor.json new file mode 100644 index 000000000..554ce39a2 --- /dev/null +++ b/src/main/resources/assets/create/models/block/steam_whistle/block_large_floor.json @@ -0,0 +1,102 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/whistle", + "1": "create:block/engine", + "2": "create:block/copper_redstone_plate", + "particle": "create:block/whistle_particle" + }, + "elements": [ + { + "name": "Base", + "from": [1, 0, 1], + "to": [15, 3, 15], + "faces": { + "north": {"uv": [1, 13, 15, 16], "texture": "#2"}, + "east": {"uv": [1, 13, 15, 16], "texture": "#2"}, + "south": {"uv": [1, 13, 15, 16], "texture": "#2"}, + "west": {"uv": [1, 13, 15, 16], "texture": "#2"}, + "up": {"uv": [1, 0, 15, 14], "texture": "#2"}, + "down": {"uv": [8.5, 8.5, 15.5, 15.5], "texture": "#1"} + } + }, + { + "name": "Pipe Large", + "from": [4, 3, 4], + "to": [12, 12, 12], + "faces": { + "north": {"uv": [2, 2, 6, 6.5], "texture": "#1"}, + "east": {"uv": [2, 2, 6, 6.5], "texture": "#1"}, + "south": {"uv": [2, 2, 6, 6.5], "texture": "#1"}, + "west": {"uv": [2, 2, 6, 6.5], "texture": "#1"}, + "up": {"uv": [7, 0.5, 11, 4.5], "texture": "#1"} + } + }, + { + "name": "Whistle Large Base", + "from": [3, 4, 3], + "to": [13, 16, 13], + "faces": { + "north": {"uv": [4.75, 0.5, 7.25, 3.5], "texture": "#0"}, + "east": {"uv": [8.75, 0.5, 11.25, 3.5], "texture": "#0"}, + "south": {"uv": [8.75, 0.5, 11.25, 3.5], "texture": "#0"}, + "west": {"uv": [8.75, 0.5, 11.25, 3.5], "texture": "#0"}, + "down": {"uv": [13, 13, 15, 15], "texture": "#0"} + } + }, + { + "name": "Whistle Large Cap", + "from": [2, 16, 2], + "to": [14, 18, 14], + "faces": { + "north": {"uv": [12.5, 0.75, 15.5, 1.25], "texture": "#0", "cullface": "up"}, + "east": {"uv": [12.5, 0.75, 15.5, 1.25], "texture": "#0", "cullface": "up"}, + "south": {"uv": [12.5, 0.75, 15.5, 1.25], "texture": "#0", "cullface": "up"}, + "west": {"uv": [12.5, 0.75, 15.5, 1.25], "texture": "#0", "cullface": "up"}, + "up": {"uv": [0.5, 12.5, 3.5, 15.5], "texture": "#0", "cullface": "up"}, + "down": {"uv": [12.5, 12.5, 15.5, 15.5], "texture": "#0", "cullface": "up"} + } + } + ], + "groups": [ + { + "name": "Bases", + "origin": [0, 0, 0], + "color": 0, + "children": [ + { + "name": "Base Flat", + "origin": [0, 0, 0], + "color": 3, + "children": [0, 1] + } + ] + }, + { + "name": "Whistle Large", + "origin": [8, 8, 8], + "color": 0, + "children": [2] + }, + { + "name": "large_top_rim", + "origin": [8, 8, 8], + "color": 0, + "children": [ + { + "name": "Whistle Large", + "origin": [8, 8, 8], + "color": 0, + "children": [ + { + "name": "Extension", + "origin": [8, 8, 8], + "color": 0, + "children": [3] + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/steam_whistle/block_large_wall.json b/src/main/resources/assets/create/models/block/steam_whistle/block_large_wall.json new file mode 100644 index 000000000..f71fa358f --- /dev/null +++ b/src/main/resources/assets/create/models/block/steam_whistle/block_large_wall.json @@ -0,0 +1,104 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/whistle", + "1": "create:block/engine", + "2": "create:block/copper_redstone_plate", + "particle": "create:block/whistle_particle" + }, + "elements": [ + { + "name": "Base", + "from": [1, 1, 13], + "to": [15, 15, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [1, 0, 15, 14], "rotation": 180, "texture": "#2"}, + "east": {"uv": [1, 13, 15, 16], "rotation": 90, "texture": "#2"}, + "south": {"uv": [8.5, 8.5, 15.5, 15.5], "texture": "#1"}, + "west": {"uv": [1, 13, 15, 16], "rotation": 270, "texture": "#2"}, + "up": {"uv": [1, 13, 15, 16], "texture": "#2"}, + "down": {"uv": [1, 13, 15, 16], "rotation": 180, "texture": "#2"} + } + }, + { + "name": "Pipe Large", + "from": [4, 5, 4], + "to": [12, 13, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [7, 0.5, 11, 4.5], "rotation": 180, "texture": "#1"}, + "east": {"uv": [2, 2, 6, 6.5], "rotation": 90, "texture": "#1"}, + "west": {"uv": [2, 2, 6, 6.5], "rotation": 270, "texture": "#1"}, + "up": {"uv": [2, 2, 6, 6.5], "texture": "#1"}, + "down": {"uv": [2, 2, 6, 6.5], "rotation": 180, "texture": "#1"} + } + }, + { + "name": "Whistle Large Base", + "from": [3, 4, 3], + "to": [13, 16, 13], + "faces": { + "north": {"uv": [4.75, 0.5, 7.25, 3.5], "texture": "#0"}, + "east": {"uv": [8.75, 0.5, 11.25, 3.5], "texture": "#0"}, + "south": {"uv": [8.75, 0.5, 11.25, 3.5], "texture": "#0"}, + "west": {"uv": [8.75, 0.5, 11.25, 3.5], "texture": "#0"}, + "down": {"uv": [13, 13, 15, 15], "texture": "#0"} + } + }, + { + "name": "Whistle Large Cap", + "from": [2, 16, 2], + "to": [14, 18, 14], + "faces": { + "north": {"uv": [12.5, 0.75, 15.5, 1.25], "texture": "#0", "cullface": "up"}, + "east": {"uv": [12.5, 0.75, 15.5, 1.25], "texture": "#0", "cullface": "up"}, + "south": {"uv": [12.5, 0.75, 15.5, 1.25], "texture": "#0", "cullface": "up"}, + "west": {"uv": [12.5, 0.75, 15.5, 1.25], "texture": "#0", "cullface": "up"}, + "up": {"uv": [0.5, 12.5, 3.5, 15.5], "texture": "#0", "cullface": "up"}, + "down": {"uv": [12.5, 12.5, 15.5, 15.5], "texture": "#0", "cullface": "up"} + } + } + ], + "groups": [ + { + "name": "Bases", + "origin": [0, 0, 0], + "color": 0, + "children": [ + { + "name": "Base Wall", + "origin": [0, 0, 0], + "color": 0, + "children": [0, 1] + } + ] + }, + { + "name": "Whistle Large", + "origin": [8, 8, 8], + "color": 0, + "children": [2] + }, + { + "name": "large_top_rim", + "origin": [8, 8, 8], + "color": 0, + "children": [ + { + "name": "Whistle Large", + "origin": [8, 8, 8], + "color": 0, + "children": [ + { + "name": "Extension", + "origin": [8, 8, 8], + "color": 0, + "children": [3] + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/steam_whistle/block_medium_floor.json b/src/main/resources/assets/create/models/block/steam_whistle/block_medium_floor.json new file mode 100644 index 000000000..720041aa9 --- /dev/null +++ b/src/main/resources/assets/create/models/block/steam_whistle/block_medium_floor.json @@ -0,0 +1,95 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/whistle", + "1": "create:block/engine", + "2": "create:block/copper_redstone_plate", + "particle": "create:block/whistle_particle" + }, + "elements": [ + { + "name": "Base", + "from": [1, 0, 1], + "to": [15, 3, 15], + "faces": { + "north": {"uv": [1, 13, 15, 16], "texture": "#2"}, + "east": {"uv": [1, 13, 15, 16], "texture": "#2"}, + "south": {"uv": [1, 13, 15, 16], "texture": "#2"}, + "west": {"uv": [1, 13, 15, 16], "texture": "#2"}, + "up": {"uv": [1, 0, 15, 14], "texture": "#2"}, + "down": {"uv": [8.5, 8.5, 15.5, 15.5], "texture": "#1"} + } + }, + { + "name": "Pipe Medium", + "from": [5, 3, 5], + "to": [11, 11, 11], + "faces": { + "north": {"uv": [2.5, 2.5, 5.5, 6.5], "texture": "#1"}, + "east": {"uv": [2.5, 2.5, 5.5, 6.5], "texture": "#1"}, + "south": {"uv": [2.5, 2.5, 5.5, 6.5], "texture": "#1"}, + "west": {"uv": [2.5, 2.5, 5.5, 6.5], "texture": "#1"}, + "up": {"uv": [7.5, 1, 10.5, 4], "texture": "#1"} + } + }, + { + "name": "Whistle Medium Base", + "from": [4, 4, 4], + "to": [12, 16, 12], + "faces": { + "north": {"uv": [5, 4.5, 7, 7.5], "texture": "#0"}, + "east": {"uv": [9, 4.5, 11, 7.5], "texture": "#0"}, + "south": {"uv": [9, 4.5, 11, 7.5], "texture": "#0"}, + "west": {"uv": [9, 4.5, 11, 7.5], "texture": "#0"}, + "down": {"uv": [13, 13, 15, 15], "texture": "#0"} + } + }, + { + "name": "Whistle Medium Cap", + "from": [3, 16, 3], + "to": [13, 18, 13], + "faces": { + "north": {"uv": [12.75, 4.75, 15.25, 5.25], "texture": "#0", "cullface": "up"}, + "east": {"uv": [12.75, 4.75, 15.25, 5.25], "texture": "#0", "cullface": "up"}, + "south": {"uv": [12.75, 4.75, 15.25, 5.25], "texture": "#0", "cullface": "up"}, + "west": {"uv": [12.75, 4.75, 15.25, 5.25], "texture": "#0", "cullface": "up"}, + "up": {"uv": [4.75, 12.75, 7.25, 15.25], "texture": "#0", "cullface": "up"}, + "down": {"uv": [12.75, 12.75, 15.25, 15.25], "texture": "#0", "cullface": "up"} + } + } + ], + "groups": [ + { + "name": "Bases", + "origin": [0, 0, 0], + "color": 0, + "children": [ + { + "name": "Base Flat", + "origin": [0, 0, 0], + "color": 3, + "children": [0, 1] + } + ] + }, + { + "name": "Whistle Medium", + "origin": [8, 8, 8], + "color": 0, + "children": [2] + }, + { + "name": "medium_top_rim", + "origin": [8, 8, 8], + "color": 0, + "children": [ + { + "name": "Whistle Medium", + "origin": [8, 8, 8], + "color": 0, + "children": [3] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/steam_whistle/block_medium_wall.json b/src/main/resources/assets/create/models/block/steam_whistle/block_medium_wall.json new file mode 100644 index 000000000..d5c4da3de --- /dev/null +++ b/src/main/resources/assets/create/models/block/steam_whistle/block_medium_wall.json @@ -0,0 +1,97 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/whistle", + "1": "create:block/engine", + "2": "create:block/copper_redstone_plate", + "particle": "create:block/whistle_particle" + }, + "elements": [ + { + "name": "Base", + "from": [1, 1, 13], + "to": [15, 15, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [1, 0, 15, 14], "rotation": 180, "texture": "#2"}, + "east": {"uv": [1, 13, 15, 16], "rotation": 90, "texture": "#2"}, + "south": {"uv": [8.5, 8.5, 15.5, 15.5], "texture": "#1"}, + "west": {"uv": [1, 13, 15, 16], "rotation": 270, "texture": "#2"}, + "up": {"uv": [1, 13, 15, 16], "texture": "#2"}, + "down": {"uv": [1, 13, 15, 16], "rotation": 180, "texture": "#2"} + } + }, + { + "name": "Pipe Medium", + "from": [5, 5, 5], + "to": [11, 11, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [7.5, 1, 10.5, 4], "rotation": 180, "texture": "#1"}, + "east": {"uv": [2.5, 2.5, 5.5, 6.5], "rotation": 90, "texture": "#1"}, + "west": {"uv": [2.5, 2.5, 5.5, 6.5], "rotation": 270, "texture": "#1"}, + "up": {"uv": [2.5, 2.5, 5.5, 6.5], "texture": "#1"}, + "down": {"uv": [2.5, 2.5, 5.5, 6.5], "rotation": 180, "texture": "#1"} + } + }, + { + "name": "Whistle Medium Base", + "from": [4, 4, 4], + "to": [12, 16, 12], + "faces": { + "north": {"uv": [5, 4.5, 7, 7.5], "texture": "#0"}, + "east": {"uv": [9, 4.5, 11, 7.5], "texture": "#0"}, + "south": {"uv": [9, 4.5, 11, 7.5], "texture": "#0"}, + "west": {"uv": [9, 4.5, 11, 7.5], "texture": "#0"}, + "down": {"uv": [13, 13, 15, 15], "texture": "#0"} + } + }, + { + "name": "Whistle Medium Cap", + "from": [3, 16, 3], + "to": [13, 18, 13], + "faces": { + "north": {"uv": [12.75, 4.75, 15.25, 5.25], "texture": "#0", "cullface": "up"}, + "east": {"uv": [12.75, 4.75, 15.25, 5.25], "texture": "#0", "cullface": "up"}, + "south": {"uv": [12.75, 4.75, 15.25, 5.25], "texture": "#0", "cullface": "up"}, + "west": {"uv": [12.75, 4.75, 15.25, 5.25], "texture": "#0", "cullface": "up"}, + "up": {"uv": [4.75, 12.75, 7.25, 15.25], "texture": "#0", "cullface": "up"}, + "down": {"uv": [12.75, 12.75, 15.25, 15.25], "texture": "#0", "cullface": "up"} + } + } + ], + "groups": [ + { + "name": "Bases", + "origin": [0, 0, 0], + "color": 0, + "children": [ + { + "name": "Base Wall", + "origin": [0, 0, 0], + "color": 0, + "children": [0, 1] + } + ] + }, + { + "name": "Whistle Medium", + "origin": [8, 8, 8], + "color": 0, + "children": [2] + }, + { + "name": "medium_top_rim", + "origin": [8, 8, 8], + "color": 0, + "children": [ + { + "name": "Whistle Medium", + "origin": [8, 8, 8], + "color": 0, + "children": [3] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/steam_whistle/block_small_floor.json b/src/main/resources/assets/create/models/block/steam_whistle/block_small_floor.json new file mode 100644 index 000000000..89a37f9c6 --- /dev/null +++ b/src/main/resources/assets/create/models/block/steam_whistle/block_small_floor.json @@ -0,0 +1,102 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/whistle", + "1": "create:block/engine", + "2": "create:block/copper_redstone_plate", + "particle": "create:block/whistle_particle" + }, + "elements": [ + { + "name": "Base", + "from": [1, 0, 1], + "to": [15, 3, 15], + "faces": { + "north": {"uv": [1, 13, 15, 16], "texture": "#2"}, + "east": {"uv": [1, 13, 15, 16], "texture": "#2"}, + "south": {"uv": [1, 13, 15, 16], "texture": "#2"}, + "west": {"uv": [1, 13, 15, 16], "texture": "#2"}, + "up": {"uv": [1, 0, 15, 14], "texture": "#2"}, + "down": {"uv": [8.5, 8.5, 15.5, 15.5], "texture": "#1"} + } + }, + { + "name": "Pipe Small", + "from": [6, 3, 6], + "to": [10, 10, 10], + "faces": { + "north": {"uv": [3, 3, 5, 6.5], "texture": "#1"}, + "east": {"uv": [3, 3, 5, 6.5], "texture": "#1"}, + "south": {"uv": [3, 3, 5, 6.5], "texture": "#1"}, + "west": {"uv": [3, 3, 5, 6.5], "texture": "#1"}, + "up": {"uv": [8, 1.5, 10, 3.5], "texture": "#1"} + } + }, + { + "name": "Whistle Small Base", + "from": [5, 4, 5], + "to": [11, 16, 11], + "faces": { + "north": {"uv": [5.25, 8.5, 6.75, 11.5], "texture": "#0"}, + "east": {"uv": [9.25, 8.5, 10.75, 11.5], "texture": "#0"}, + "south": {"uv": [9.25, 8.5, 10.75, 11.5], "texture": "#0"}, + "west": {"uv": [9.25, 8.5, 10.75, 11.5], "texture": "#0"}, + "down": {"uv": [13, 13, 15, 15], "texture": "#0"} + } + }, + { + "name": "Whistle Small Cap", + "from": [4, 16, 4], + "to": [12, 18, 12], + "faces": { + "north": {"uv": [13, 8.75, 15, 9.25], "texture": "#0", "cullface": "up"}, + "east": {"uv": [13, 8.75, 15, 9.25], "texture": "#0", "cullface": "up"}, + "south": {"uv": [13, 8.75, 15, 9.25], "texture": "#0", "cullface": "up"}, + "west": {"uv": [13, 8.75, 15, 9.25], "texture": "#0", "cullface": "up"}, + "up": {"uv": [9, 13, 11, 15], "texture": "#0", "cullface": "up"}, + "down": {"uv": [13, 13, 15, 15], "texture": "#0", "cullface": "up"} + } + } + ], + "groups": [ + { + "name": "Bases", + "origin": [0, 0, 0], + "color": 0, + "children": [ + { + "name": "Base Flat", + "origin": [0, 0, 0], + "color": 3, + "children": [0, 1] + } + ] + }, + { + "name": "Whistle Small", + "origin": [8, 8, 8], + "color": 0, + "children": [2] + }, + { + "name": "small_top_rim", + "origin": [8, 8, 8], + "color": 0, + "children": [ + { + "name": "Whistle Small", + "origin": [8, 8, 8], + "color": 0, + "children": [ + { + "name": "Extension", + "origin": [8, 8, 8], + "color": 0, + "children": [3] + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/steam_whistle/block_small_wall.json b/src/main/resources/assets/create/models/block/steam_whistle/block_small_wall.json new file mode 100644 index 000000000..475745ff3 --- /dev/null +++ b/src/main/resources/assets/create/models/block/steam_whistle/block_small_wall.json @@ -0,0 +1,104 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/whistle", + "1": "create:block/engine", + "2": "create:block/copper_redstone_plate", + "particle": "create:block/whistle_particle" + }, + "elements": [ + { + "name": "Base", + "from": [1, 1, 13], + "to": [15, 15, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [1, 0, 15, 14], "rotation": 180, "texture": "#2"}, + "east": {"uv": [1, 13, 15, 16], "rotation": 90, "texture": "#2"}, + "south": {"uv": [8.5, 8.5, 15.5, 15.5], "texture": "#1"}, + "west": {"uv": [1, 13, 15, 16], "rotation": 270, "texture": "#2"}, + "up": {"uv": [1, 13, 15, 16], "texture": "#2"}, + "down": {"uv": [1, 13, 15, 16], "rotation": 180, "texture": "#2"} + } + }, + { + "name": "Pipe Small", + "from": [6, 6, 6], + "to": [10, 10, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [8, 1.5, 10, 3.5], "rotation": 180, "texture": "#1"}, + "east": {"uv": [3, 3, 5, 6.5], "rotation": 90, "texture": "#1"}, + "west": {"uv": [3, 3, 5, 6.5], "rotation": 270, "texture": "#1"}, + "up": {"uv": [3, 3, 5, 6.5], "texture": "#1"}, + "down": {"uv": [3, 3, 5, 6.5], "rotation": 180, "texture": "#1"} + } + }, + { + "name": "Whistle Small Base", + "from": [5, 4, 5], + "to": [11, 16, 11], + "faces": { + "north": {"uv": [5.25, 8.5, 6.75, 11.5], "texture": "#0"}, + "east": {"uv": [9.25, 8.5, 10.75, 11.5], "texture": "#0"}, + "south": {"uv": [9.25, 8.5, 10.75, 11.5], "texture": "#0"}, + "west": {"uv": [9.25, 8.5, 10.75, 11.5], "texture": "#0"}, + "down": {"uv": [13, 13, 15, 15], "texture": "#0"} + } + }, + { + "name": "Whistle Small Cap", + "from": [4, 16, 4], + "to": [12, 18, 12], + "faces": { + "north": {"uv": [13, 8.75, 15, 9.25], "texture": "#0", "cullface": "up"}, + "east": {"uv": [13, 8.75, 15, 9.25], "texture": "#0", "cullface": "up"}, + "south": {"uv": [13, 8.75, 15, 9.25], "texture": "#0", "cullface": "up"}, + "west": {"uv": [13, 8.75, 15, 9.25], "texture": "#0", "cullface": "up"}, + "up": {"uv": [9, 13, 11, 15], "texture": "#0", "cullface": "up"}, + "down": {"uv": [13, 13, 15, 15], "texture": "#0", "cullface": "up"} + } + } + ], + "groups": [ + { + "name": "Bases", + "origin": [0, 0, 0], + "color": 0, + "children": [ + { + "name": "Base Wall", + "origin": [0, 0, 0], + "color": 0, + "children": [0, 1] + } + ] + }, + { + "name": "Whistle Small", + "origin": [8, 8, 8], + "color": 0, + "children": [2] + }, + { + "name": "small_top_rim", + "origin": [8, 8, 8], + "color": 0, + "children": [ + { + "name": "Whistle Small", + "origin": [8, 8, 8], + "color": 0, + "children": [ + { + "name": "Extension", + "origin": [8, 8, 8], + "color": 0, + "children": [3] + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/steam_whistle/extension/large_bottom_rim.json b/src/main/resources/assets/create/models/block/steam_whistle/extension/large_bottom_rim.json new file mode 100644 index 000000000..3a08b6b23 --- /dev/null +++ b/src/main/resources/assets/create/models/block/steam_whistle/extension/large_bottom_rim.json @@ -0,0 +1,31 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/whistle", + "particle": "create:block/whistle_particle" + }, + "elements": [ + { + "name": "Whistle large Cap", + "from": [2, 0, 2], + "to": [14, 2, 14], + "faces": { + "north": {"uv": [12.5, 0.75, 15.5, 1.25], "texture": "#0"}, + "east": {"uv": [12.5, 0.75, 15.5, 1.25], "texture": "#0"}, + "south": {"uv": [12.5, 0.75, 15.5, 1.25], "texture": "#0"}, + "west": {"uv": [12.5, 0.75, 15.5, 1.25], "texture": "#0"}, + "up": {"uv": [0.5, 12.5, 3.5, 15.5], "texture": "#0"}, + "down": {"uv": [12.5, 12.5, 15.5, 15.5], "texture": "#0"} + } + } + ], + "display": {}, + "groups": [ + { + "name": "Whistle Large", + "origin": [8, 8, 8], + "color": 0, + "children": [0] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/steam_whistle/extension/large_double.json b/src/main/resources/assets/create/models/block/steam_whistle/extension/large_double.json new file mode 100644 index 000000000..8d0d6dace --- /dev/null +++ b/src/main/resources/assets/create/models/block/steam_whistle/extension/large_double.json @@ -0,0 +1,47 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/whistle", + "particle": "create:block/whistle_particle" + }, + "elements": [ + { + "name": "Whistle large Extension", + "from": [3, 0, 3], + "to": [13, 8, 13], + "faces": { + "north": {"uv": [12.75, 1.5, 15.25, 3.5], "texture": "#0"}, + "east": {"uv": [12.75, 1.5, 15.25, 3.5], "texture": "#0"}, + "south": {"uv": [12.75, 1.5, 15.25, 3.5], "texture": "#0"}, + "west": {"uv": [12.75, 1.5, 15.25, 3.5], "texture": "#0"} + } + }, + { + "name": "Whistle large Extension", + "from": [3, 8, 3], + "to": [13, 16, 13], + "faces": { + "north": {"uv": [12.75, 1.5, 15.25, 3.5], "texture": "#0"}, + "east": {"uv": [12.75, 1.5, 15.25, 3.5], "texture": "#0"}, + "south": {"uv": [12.75, 1.5, 15.25, 3.5], "texture": "#0"}, + "west": {"uv": [12.75, 1.5, 15.25, 3.5], "texture": "#0"} + } + } + ], + "display": {}, + "groups": [ + { + "name": "Whistle Large", + "origin": [8, 8, 8], + "color": 0, + "children": [ + { + "name": "Extension", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/steam_whistle/extension/large_single.json b/src/main/resources/assets/create/models/block/steam_whistle/extension/large_single.json new file mode 100644 index 000000000..0148e2464 --- /dev/null +++ b/src/main/resources/assets/create/models/block/steam_whistle/extension/large_single.json @@ -0,0 +1,49 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/whistle", + "particle": "create:block/whistle_particle" + }, + "elements": [ + { + "name": "Whistle Large Cap", + "from": [2, 8, 2], + "to": [14, 10, 14], + "faces": { + "north": {"uv": [12.5, 0.75, 15.5, 1.25], "texture": "#0"}, + "east": {"uv": [12.5, 0.75, 15.5, 1.25], "texture": "#0"}, + "south": {"uv": [12.5, 0.75, 15.5, 1.25], "texture": "#0"}, + "west": {"uv": [12.5, 0.75, 15.5, 1.25], "texture": "#0"}, + "up": {"uv": [0.5, 12.5, 3.5, 15.5], "texture": "#0"}, + "down": {"uv": [12.5, 12.5, 15.5, 15.5], "texture": "#0"} + } + }, + { + "name": "Whistle large Extension", + "from": [3, 0, 3], + "to": [13, 8, 13], + "faces": { + "north": {"uv": [12.75, 1.5, 15.25, 3.5], "texture": "#0"}, + "east": {"uv": [12.75, 1.5, 15.25, 3.5], "texture": "#0"}, + "south": {"uv": [12.75, 1.5, 15.25, 3.5], "texture": "#0"}, + "west": {"uv": [12.75, 1.5, 15.25, 3.5], "texture": "#0"} + } + } + ], + "display": {}, + "groups": [ + { + "name": "Whistle Large", + "origin": [8, 8, 8], + "color": 0, + "children": [ + { + "name": "Extension", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/steam_whistle/extension/large_top_rim.json b/src/main/resources/assets/create/models/block/steam_whistle/extension/large_top_rim.json new file mode 100644 index 000000000..600abc871 --- /dev/null +++ b/src/main/resources/assets/create/models/block/steam_whistle/extension/large_top_rim.json @@ -0,0 +1,37 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/whistle", + "particle": "create:block/whistle_particle" + }, + "elements": [ + { + "name": "Whistle Large Cap", + "from": [2, 16, 2], + "to": [14, 18, 14], + "faces": { + "north": {"uv": [12.5, 0.75, 15.5, 1.25], "texture": "#0", "cullface": "up"}, + "east": {"uv": [12.5, 0.75, 15.5, 1.25], "texture": "#0", "cullface": "up"}, + "south": {"uv": [12.5, 0.75, 15.5, 1.25], "texture": "#0", "cullface": "up"}, + "west": {"uv": [12.5, 0.75, 15.5, 1.25], "texture": "#0", "cullface": "up"}, + "up": {"uv": [0.5, 12.5, 3.5, 15.5], "texture": "#0", "cullface": "up"}, + "down": {"uv": [12.5, 12.5, 15.5, 15.5], "texture": "#0", "cullface": "up"} + } + } + ], + "groups": [ + { + "name": "Whistle Large", + "origin": [8, 8, 8], + "color": 0, + "children": [ + { + "name": "Extension", + "origin": [8, 8, 8], + "color": 0, + "children": [0] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/steam_whistle/extension/medium_bottom_rim.json b/src/main/resources/assets/create/models/block/steam_whistle/extension/medium_bottom_rim.json new file mode 100644 index 000000000..9a3d69237 --- /dev/null +++ b/src/main/resources/assets/create/models/block/steam_whistle/extension/medium_bottom_rim.json @@ -0,0 +1,31 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/whistle", + "particle": "create:block/whistle_particle" + }, + "elements": [ + { + "name": "Whistle Medium Cap", + "from": [3, 0, 3], + "to": [13, 2, 13], + "faces": { + "north": {"uv": [12.75, 4.75, 15.25, 5.25], "texture": "#0"}, + "east": {"uv": [12.75, 4.75, 15.25, 5.25], "texture": "#0"}, + "south": {"uv": [12.75, 4.75, 15.25, 5.25], "texture": "#0"}, + "west": {"uv": [12.75, 4.75, 15.25, 5.25], "texture": "#0"}, + "up": {"uv": [4.75, 12.75, 7.25, 15.25], "texture": "#0"}, + "down": {"uv": [12.75, 12.75, 15.25, 15.25], "texture": "#0"} + } + } + ], + "display": {}, + "groups": [ + { + "name": "Whistle Medium", + "origin": [8, 8, 8], + "color": 0, + "children": [0] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/steam_whistle/extension/medium_double.json b/src/main/resources/assets/create/models/block/steam_whistle/extension/medium_double.json new file mode 100644 index 000000000..e2a1eab6e --- /dev/null +++ b/src/main/resources/assets/create/models/block/steam_whistle/extension/medium_double.json @@ -0,0 +1,47 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/whistle", + "particle": "create:block/whistle_particle" + }, + "elements": [ + { + "name": "Whistle Medium Extension", + "from": [4, 0, 4], + "to": [12, 8, 12], + "faces": { + "north": {"uv": [13, 5.5, 15, 7.5], "texture": "#0"}, + "east": {"uv": [13, 5.5, 15, 7.5], "texture": "#0"}, + "south": {"uv": [13, 5.5, 15, 7.5], "texture": "#0"}, + "west": {"uv": [13, 5.5, 15, 7.5], "texture": "#0"} + } + }, + { + "name": "Whistle Medium Extension", + "from": [4, 8, 4], + "to": [12, 16, 12], + "faces": { + "north": {"uv": [13, 5.5, 15, 7.5], "texture": "#0"}, + "east": {"uv": [13, 5.5, 15, 7.5], "texture": "#0"}, + "south": {"uv": [13, 5.5, 15, 7.5], "texture": "#0"}, + "west": {"uv": [13, 5.5, 15, 7.5], "texture": "#0"} + } + } + ], + "display": {}, + "groups": [ + { + "name": "Whistle Medium", + "origin": [8, 8, 8], + "color": 0, + "children": [ + { + "name": "Extension", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/steam_whistle/extension/medium_single.json b/src/main/resources/assets/create/models/block/steam_whistle/extension/medium_single.json new file mode 100644 index 000000000..5d7ce29cb --- /dev/null +++ b/src/main/resources/assets/create/models/block/steam_whistle/extension/medium_single.json @@ -0,0 +1,49 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/whistle", + "particle": "create:block/whistle_particle" + }, + "elements": [ + { + "name": "Whistle Medium Cap", + "from": [3, 8, 3], + "to": [13, 10, 13], + "faces": { + "north": {"uv": [12.75, 4.75, 15.25, 5.25], "texture": "#0"}, + "east": {"uv": [12.75, 4.75, 15.25, 5.25], "texture": "#0"}, + "south": {"uv": [12.75, 4.75, 15.25, 5.25], "texture": "#0"}, + "west": {"uv": [12.75, 4.75, 15.25, 5.25], "texture": "#0"}, + "up": {"uv": [4.75, 12.75, 7.25, 15.25], "texture": "#0"}, + "down": {"uv": [12.75, 12.75, 15.25, 15.25], "texture": "#0"} + } + }, + { + "name": "Whistle Medium Extension", + "from": [4, 0, 4], + "to": [12, 8, 12], + "faces": { + "north": {"uv": [13, 5.5, 15, 7.5], "texture": "#0"}, + "east": {"uv": [13, 5.5, 15, 7.5], "texture": "#0"}, + "south": {"uv": [13, 5.5, 15, 7.5], "texture": "#0"}, + "west": {"uv": [13, 5.5, 15, 7.5], "texture": "#0"} + } + } + ], + "display": {}, + "groups": [ + { + "name": "Whistle Medium", + "origin": [8, 8, 8], + "color": 0, + "children": [ + { + "name": "Extension", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/steam_whistle/extension/medium_top_rim.json b/src/main/resources/assets/create/models/block/steam_whistle/extension/medium_top_rim.json new file mode 100644 index 000000000..dcf986f02 --- /dev/null +++ b/src/main/resources/assets/create/models/block/steam_whistle/extension/medium_top_rim.json @@ -0,0 +1,30 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/whistle", + "particle": "create:block/whistle_particle" + }, + "elements": [ + { + "name": "Whistle Medium Cap", + "from": [3, 16, 3], + "to": [13, 18, 13], + "faces": { + "north": {"uv": [12.75, 4.75, 15.25, 5.25], "texture": "#0", "cullface": "up"}, + "east": {"uv": [12.75, 4.75, 15.25, 5.25], "texture": "#0", "cullface": "up"}, + "south": {"uv": [12.75, 4.75, 15.25, 5.25], "texture": "#0", "cullface": "up"}, + "west": {"uv": [12.75, 4.75, 15.25, 5.25], "texture": "#0", "cullface": "up"}, + "up": {"uv": [4.75, 12.75, 7.25, 15.25], "texture": "#0", "cullface": "up"}, + "down": {"uv": [12.75, 12.75, 15.25, 15.25], "texture": "#0", "cullface": "up"} + } + } + ], + "groups": [ + { + "name": "Whistle Medium", + "origin": [8, 8, 8], + "color": 0, + "children": [0] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/steam_whistle/extension/small_bottom_rim.json b/src/main/resources/assets/create/models/block/steam_whistle/extension/small_bottom_rim.json new file mode 100644 index 000000000..56efc20f2 --- /dev/null +++ b/src/main/resources/assets/create/models/block/steam_whistle/extension/small_bottom_rim.json @@ -0,0 +1,31 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/whistle", + "particle": "create:block/whistle_particle" + }, + "elements": [ + { + "name": "Whistle Small Cap", + "from": [4, 0, 4], + "to": [12, 2, 12], + "faces": { + "north": {"uv": [13, 8.75, 15, 9.25], "texture": "#0"}, + "east": {"uv": [13, 8.75, 15, 9.25], "texture": "#0"}, + "south": {"uv": [13, 8.75, 15, 9.25], "texture": "#0"}, + "west": {"uv": [13, 8.75, 15, 9.25], "texture": "#0"}, + "up": {"uv": [9, 13, 11, 15], "texture": "#0"}, + "down": {"uv": [13, 13, 15, 15], "texture": "#0"} + } + } + ], + "display": {}, + "groups": [ + { + "name": "Whistle Small", + "origin": [8, 8, 8], + "color": 0, + "children": [0] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/steam_whistle/extension/small_double.json b/src/main/resources/assets/create/models/block/steam_whistle/extension/small_double.json new file mode 100644 index 000000000..8d0b068db --- /dev/null +++ b/src/main/resources/assets/create/models/block/steam_whistle/extension/small_double.json @@ -0,0 +1,47 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/whistle", + "particle": "create:block/whistle_particle" + }, + "elements": [ + { + "name": "Whistle Small Extension", + "from": [5, 0, 5], + "to": [11, 8, 11], + "faces": { + "north": {"uv": [13.25, 9.5, 14.75, 11.5], "texture": "#0"}, + "east": {"uv": [13.25, 9.5, 14.75, 11.5], "texture": "#0"}, + "south": {"uv": [13.25, 9.5, 14.75, 11.5], "texture": "#0"}, + "west": {"uv": [13.25, 9.5, 14.75, 11.5], "texture": "#0"} + } + }, + { + "name": "Whistle Small Extension", + "from": [5, 8, 5], + "to": [11, 16, 11], + "faces": { + "north": {"uv": [13.25, 9.5, 14.75, 11.5], "texture": "#0"}, + "east": {"uv": [13.25, 9.5, 14.75, 11.5], "texture": "#0"}, + "south": {"uv": [13.25, 9.5, 14.75, 11.5], "texture": "#0"}, + "west": {"uv": [13.25, 9.5, 14.75, 11.5], "texture": "#0"} + } + } + ], + "display": {}, + "groups": [ + { + "name": "Whistle Small", + "origin": [8, 8, 8], + "color": 0, + "children": [ + { + "name": "Extension", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/steam_whistle/extension/small_single.json b/src/main/resources/assets/create/models/block/steam_whistle/extension/small_single.json new file mode 100644 index 000000000..2a342a98b --- /dev/null +++ b/src/main/resources/assets/create/models/block/steam_whistle/extension/small_single.json @@ -0,0 +1,49 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/whistle", + "particle": "create:block/whistle_particle" + }, + "elements": [ + { + "name": "Whistle Small Cap", + "from": [4, 8, 4], + "to": [12, 10, 12], + "faces": { + "north": {"uv": [13, 8.75, 15, 9.25], "texture": "#0"}, + "east": {"uv": [13, 8.75, 15, 9.25], "texture": "#0"}, + "south": {"uv": [13, 8.75, 15, 9.25], "texture": "#0"}, + "west": {"uv": [13, 8.75, 15, 9.25], "texture": "#0"}, + "up": {"uv": [9, 13, 11, 15], "texture": "#0"}, + "down": {"uv": [13, 13, 15, 15], "texture": "#0"} + } + }, + { + "name": "Whistle Small Extension", + "from": [5, 0, 5], + "to": [11, 8, 11], + "faces": { + "north": {"uv": [13.25, 9.5, 14.75, 11.5], "texture": "#0"}, + "east": {"uv": [13.25, 9.5, 14.75, 11.5], "texture": "#0"}, + "south": {"uv": [13.25, 9.5, 14.75, 11.5], "texture": "#0"}, + "west": {"uv": [13.25, 9.5, 14.75, 11.5], "texture": "#0"} + } + } + ], + "display": {}, + "groups": [ + { + "name": "Whistle Small", + "origin": [8, 8, 8], + "color": 0, + "children": [ + { + "name": "Extension", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/steam_whistle/extension/small_top_rim.json b/src/main/resources/assets/create/models/block/steam_whistle/extension/small_top_rim.json new file mode 100644 index 000000000..7a9cf319a --- /dev/null +++ b/src/main/resources/assets/create/models/block/steam_whistle/extension/small_top_rim.json @@ -0,0 +1,37 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/whistle", + "particle": "create:block/whistle_particle" + }, + "elements": [ + { + "name": "Whistle Small Cap", + "from": [4, 16, 4], + "to": [12, 18, 12], + "faces": { + "north": {"uv": [13, 8.75, 15, 9.25], "texture": "#0", "cullface": "up"}, + "east": {"uv": [13, 8.75, 15, 9.25], "texture": "#0", "cullface": "up"}, + "south": {"uv": [13, 8.75, 15, 9.25], "texture": "#0", "cullface": "up"}, + "west": {"uv": [13, 8.75, 15, 9.25], "texture": "#0", "cullface": "up"}, + "up": {"uv": [9, 13, 11, 15], "texture": "#0", "cullface": "up"}, + "down": {"uv": [13, 13, 15, 15], "texture": "#0", "cullface": "up"} + } + } + ], + "groups": [ + { + "name": "Whistle Small", + "origin": [8, 8, 8], + "color": 0, + "children": [ + { + "name": "Extension", + "origin": [8, 8, 8], + "color": 0, + "children": [0] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/steam_whistle/item.json b/src/main/resources/assets/create/models/block/steam_whistle/item.json new file mode 100644 index 000000000..7e9e29a7c --- /dev/null +++ b/src/main/resources/assets/create/models/block/steam_whistle/item.json @@ -0,0 +1,178 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/whistle", + "1": "create:block/engine", + "2": "create:block/copper_redstone_plate", + "particle": "create:block/whistle_particle" + }, + "elements": [ + { + "name": "Base", + "from": [1, 0, 1], + "to": [15, 3, 15], + "faces": { + "north": {"uv": [1, 13, 15, 16], "texture": "#2"}, + "east": {"uv": [1, 13, 15, 16], "texture": "#2"}, + "south": {"uv": [1, 13, 15, 16], "texture": "#2"}, + "west": {"uv": [1, 13, 15, 16], "texture": "#2"}, + "up": {"uv": [1, 0, 15, 14], "texture": "#2"}, + "down": {"uv": [8.5, 8.5, 15.5, 15.5], "texture": "#1"} + } + }, + { + "name": "Pipe Medium", + "from": [5, 3, 5], + "to": [11, 11, 11], + "faces": { + "north": {"uv": [2.5, 2.5, 5.5, 6.5], "texture": "#1"}, + "east": {"uv": [2.5, 2.5, 5.5, 6.5], "texture": "#1"}, + "south": {"uv": [2.5, 2.5, 5.5, 6.5], "texture": "#1"}, + "west": {"uv": [2.5, 2.5, 5.5, 6.5], "texture": "#1"}, + "up": {"uv": [7.5, 1, 10.5, 4], "texture": "#1"} + } + }, + { + "name": "Whistle Medium Base", + "from": [4, 4, 4], + "to": [12, 16, 12], + "faces": { + "north": {"uv": [5, 4.5, 7, 7.5], "texture": "#0"}, + "east": {"uv": [9, 4.5, 11, 7.5], "texture": "#0"}, + "south": {"uv": [9, 4.5, 11, 7.5], "texture": "#0"}, + "west": {"uv": [9, 4.5, 11, 7.5], "texture": "#0"}, + "down": {"uv": [13, 13, 15, 15], "texture": "#0"} + } + }, + { + "name": "Whistle Medium Cap", + "from": [3, 16, 3], + "to": [13, 18, 13], + "faces": { + "north": {"uv": [12.75, 4.75, 15.25, 5.25], "texture": "#0"}, + "east": {"uv": [12.75, 4.75, 15.25, 5.25], "texture": "#0"}, + "south": {"uv": [12.75, 4.75, 15.25, 5.25], "texture": "#0"}, + "west": {"uv": [12.75, 4.75, 15.25, 5.25], "texture": "#0"}, + "up": {"uv": [4.75, 12.75, 7.25, 15.25], "texture": "#0"}, + "down": {"uv": [12.75, 12.75, 15.25, 15.25], "texture": "#0"} + } + }, + { + "name": "Centre", + "from": [6, 7, 3.5], + "to": [10, 12, 5], + "faces": { + "north": {"uv": [1.5, 4, 2.5, 5.25], "texture": "#0"}, + "up": {"uv": [13.5, 14.5, 14.5, 15], "rotation": 180, "texture": "#0"}, + "down": {"uv": [5, 5.5, 5.5, 6], "texture": "#0"} + } + }, + { + "name": "Back", + "from": [6, 5, 5], + "to": [10, 12, 12.5], + "faces": { + "north": {"uv": [5, 5.5, 5.5, 6], "texture": "#0"}, + "south": {"uv": [1.5, 6, 2.5, 7.75], "texture": "#0"}, + "up": {"uv": [13.5, 12.75, 14.5, 14.75], "rotation": 180, "texture": "#0"}, + "down": {"uv": [5, 5.5, 5.5, 6], "texture": "#0"} + } + }, + { + "name": "Left", + "from": [3.5, 5, 3.5], + "to": [6, 12, 12.5], + "faces": { + "north": {"uv": [2.5, 4, 3, 5.75], "texture": "#0"}, + "east": {"uv": [5, 5.5, 5.5, 6], "texture": "#0"}, + "south": {"uv": [1, 6, 1.5, 7.75], "texture": "#0"}, + "west": {"uv": [1, 6, 3, 7.75], "texture": "#0"}, + "up": {"uv": [14.5, 13, 15, 15], "rotation": 180, "texture": "#0"}, + "down": {"uv": [5, 5.5, 5.5, 6], "texture": "#0"} + } + }, + { + "name": "Right", + "from": [10, 5, 3.5], + "to": [12.5, 12, 12.5], + "faces": { + "north": {"uv": [1, 4, 1.5, 5.75], "texture": "#0"}, + "east": {"uv": [1, 6, 3, 7.75], "texture": "#0"}, + "south": {"uv": [2.5, 6, 3, 7.75], "texture": "#0"}, + "west": {"uv": [5.5, 1.5, 5, 2], "texture": "#0"}, + "up": {"uv": [13, 13, 13.5, 15], "rotation": 180, "texture": "#0"}, + "down": {"uv": [5, 1.5, 5.5, 2], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "translation": [0, 13, 0] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "Bases", + "origin": [0, 0, 0], + "color": 0, + "children": [ + { + "name": "Base Flat", + "origin": [0, 0, 0], + "color": 3, + "children": [0, 1] + } + ] + }, + { + "name": "Whistle Medium", + "origin": [8, 8, 8], + "color": 0, + "children": [ + 2, + 3, + { + "name": "Whistle Medium Mouth", + "origin": [8, 8, 8], + "color": 0, + "children": [4, 5, 6, 7] + }, + { + "name": "Extension", + "origin": [8, 8, 8], + "color": 0, + "children": [] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/steam_whistle/large_mouth.json b/src/main/resources/assets/create/models/block/steam_whistle/large_mouth.json new file mode 100644 index 000000000..53af4c784 --- /dev/null +++ b/src/main/resources/assets/create/models/block/steam_whistle/large_mouth.json @@ -0,0 +1,71 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/whistle", + "particle": "create:block/whistle" + }, + "elements": [ + { + "name": "Centre", + "from": [6, 7, 2.5], + "to": [10, 12, 5], + "faces": { + "north": {"uv": [1.5, 0, 2.5, 1.25], "texture": "#0"}, + "up": {"uv": [13.5, 14.5, 14.5, 15], "rotation": 180, "texture": "#0"}, + "down": {"uv": [5, 5.5, 5.5, 6], "texture": "#0"} + } + }, + { + "name": "Back", + "from": [6, 5, 5], + "to": [10, 12, 13.5], + "faces": { + "north": {"uv": [5, 5.5, 5.5, 6], "texture": "#0"}, + "south": {"uv": [1.5, 2, 2.5, 3.75], "texture": "#0"}, + "up": {"uv": [13.5, 12.75, 14.5, 14.75], "rotation": 180, "texture": "#0"}, + "down": {"uv": [5, 5.5, 5.5, 6], "texture": "#0"} + } + }, + { + "name": "Left", + "from": [2.5, 5, 2.5], + "to": [6, 12, 13.5], + "faces": { + "north": {"uv": [2.5, 0, 3.25, 1.75], "texture": "#0"}, + "east": {"uv": [5, 5.5, 5.5, 6], "texture": "#0"}, + "south": {"uv": [0.75, 2, 1.5, 3.75], "texture": "#0"}, + "west": {"uv": [0.75, 2, 3.25, 3.75], "texture": "#0"}, + "up": {"uv": [14.5, 12.75, 15.25, 15.25], "rotation": 180, "texture": "#0"}, + "down": {"uv": [5, 5.5, 5.5, 6], "texture": "#0"} + } + }, + { + "name": "Right", + "from": [10, 5, 2.5], + "to": [13.5, 12, 13.5], + "faces": { + "north": {"uv": [0.75, 0, 1.5, 1.75], "texture": "#0"}, + "east": {"uv": [0.75, 2, 3.25, 3.75], "texture": "#0"}, + "south": {"uv": [2.5, 2, 3.25, 3.75], "texture": "#0"}, + "west": {"uv": [5.5, 1.5, 5, 2], "texture": "#0"}, + "up": {"uv": [12.75, 12.75, 13.5, 15.25], "rotation": 180, "texture": "#0"}, + "down": {"uv": [5, 1.5, 5.5, 2], "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "Whistle Large", + "origin": [8, 8, 8], + "color": 0, + "children": [ + { + "name": "Whistle Large Mouth", + "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/steam_whistle/medium_mouth.json b/src/main/resources/assets/create/models/block/steam_whistle/medium_mouth.json new file mode 100644 index 000000000..64085e5e9 --- /dev/null +++ b/src/main/resources/assets/create/models/block/steam_whistle/medium_mouth.json @@ -0,0 +1,71 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/whistle", + "particle": "create:block/whistle" + }, + "elements": [ + { + "name": "Centre", + "from": [6, 7, 3.5], + "to": [10, 12, 5], + "faces": { + "north": {"uv": [1.5, 4, 2.5, 5.25], "texture": "#0"}, + "up": {"uv": [13.5, 14.5, 14.5, 15], "rotation": 180, "texture": "#0"}, + "down": {"uv": [5, 5.5, 5.5, 6], "texture": "#0"} + } + }, + { + "name": "Back", + "from": [6, 5, 5], + "to": [10, 12, 12.5], + "faces": { + "north": {"uv": [5, 5.5, 5.5, 6], "texture": "#0"}, + "south": {"uv": [1.5, 6, 2.5, 7.75], "texture": "#0"}, + "up": {"uv": [13.5, 12.75, 14.5, 14.75], "rotation": 180, "texture": "#0"}, + "down": {"uv": [5, 5.5, 5.5, 6], "texture": "#0"} + } + }, + { + "name": "Left", + "from": [3.5, 5, 3.5], + "to": [6, 12, 12.5], + "faces": { + "north": {"uv": [2.5, 4, 3, 5.75], "texture": "#0"}, + "east": {"uv": [5, 5.5, 5.5, 6], "texture": "#0"}, + "south": {"uv": [1, 6, 1.5, 7.75], "texture": "#0"}, + "west": {"uv": [1, 6, 3, 7.75], "texture": "#0"}, + "up": {"uv": [14.5, 13, 15, 15], "rotation": 180, "texture": "#0"}, + "down": {"uv": [5, 5.5, 5.5, 6], "texture": "#0"} + } + }, + { + "name": "Right", + "from": [10, 5, 3.5], + "to": [12.5, 12, 12.5], + "faces": { + "north": {"uv": [1, 4, 1.5, 5.75], "texture": "#0"}, + "east": {"uv": [1, 6, 3, 7.75], "texture": "#0"}, + "south": {"uv": [2.5, 6, 3, 7.75], "texture": "#0"}, + "west": {"uv": [5.5, 1.5, 5, 2], "texture": "#0"}, + "up": {"uv": [13, 13, 13.5, 15], "rotation": 180, "texture": "#0"}, + "down": {"uv": [5, 1.5, 5.5, 2], "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "Whistle Medium", + "origin": [8, 8, 8], + "color": 0, + "children": [ + { + "name": "Whistle Medium Mouth", + "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/steam_whistle/small_mouth.json b/src/main/resources/assets/create/models/block/steam_whistle/small_mouth.json new file mode 100644 index 000000000..892a8ee38 --- /dev/null +++ b/src/main/resources/assets/create/models/block/steam_whistle/small_mouth.json @@ -0,0 +1,71 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/whistle", + "particle": "create:block/whistle" + }, + "elements": [ + { + "name": "Centre", + "from": [7, 6, 4.5], + "to": [9, 12, 5], + "faces": { + "north": {"uv": [1.75, 8, 2.25, 9.5], "texture": "#0"}, + "up": {"uv": [13.75, 14.5, 14.25, 15], "rotation": 180, "texture": "#0"}, + "down": {"uv": [5, 5.5, 5.5, 6], "texture": "#0"} + } + }, + { + "name": "Back", + "from": [7, 5, 6], + "to": [9, 12, 11.5], + "faces": { + "north": {"uv": [5, 5.5, 5.5, 6], "texture": "#0"}, + "south": {"uv": [1.75, 10, 2.25, 11.75], "texture": "#0"}, + "up": {"uv": [13.75, 12.75, 14.25, 14.75], "rotation": 180, "texture": "#0"}, + "down": {"uv": [5, 5.5, 5.5, 6], "texture": "#0"} + } + }, + { + "name": "Left", + "from": [4.5, 5, 4.5], + "to": [7, 12, 11.5], + "faces": { + "north": {"uv": [2.25, 8, 2.75, 9.75], "texture": "#0"}, + "east": {"uv": [5, 5.5, 5.5, 6], "texture": "#0"}, + "south": {"uv": [1.25, 10, 1.75, 11.75], "texture": "#0"}, + "west": {"uv": [1.25, 10, 2.75, 11.75], "texture": "#0"}, + "up": {"uv": [14.25, 13.25, 14.75, 14.75], "rotation": 180, "texture": "#0"}, + "down": {"uv": [5, 5.5, 5.5, 6], "texture": "#0"} + } + }, + { + "name": "Right", + "from": [9, 5, 4.5], + "to": [11.5, 12, 11.5], + "faces": { + "north": {"uv": [1.25, 8, 1.75, 9.75], "texture": "#0"}, + "east": {"uv": [1.25, 10, 2.75, 11.75], "texture": "#0"}, + "south": {"uv": [2.25, 10, 2.75, 11.75], "texture": "#0"}, + "west": {"uv": [5.5, 1.5, 5, 2], "texture": "#0"}, + "up": {"uv": [13.25, 13.25, 13.75, 14.75], "rotation": 180, "texture": "#0"}, + "down": {"uv": [5, 1.5, 5.5, 2], "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "Whistle Small", + "origin": [8, 8, 8], + "color": 0, + "children": [ + { + "name": "Whistle Small Mouth", + "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/textures/block/copper_redstone_plate.png b/src/main/resources/assets/create/textures/block/copper_redstone_plate.png new file mode 100644 index 000000000..417f6adeb Binary files /dev/null and b/src/main/resources/assets/create/textures/block/copper_redstone_plate.png differ diff --git a/src/main/resources/assets/create/textures/block/copper_redstone_plate_powered.png b/src/main/resources/assets/create/textures/block/copper_redstone_plate_powered.png new file mode 100644 index 000000000..5f72d6e49 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/copper_redstone_plate_powered.png differ diff --git a/src/main/resources/assets/create/textures/block/whistle.png b/src/main/resources/assets/create/textures/block/whistle.png new file mode 100644 index 000000000..cee73874a Binary files /dev/null and b/src/main/resources/assets/create/textures/block/whistle.png differ diff --git a/src/main/resources/assets/create/textures/block/whistle_particle.png b/src/main/resources/assets/create/textures/block/whistle_particle.png new file mode 100644 index 000000000..28301641d Binary files /dev/null and b/src/main/resources/assets/create/textures/block/whistle_particle.png differ