diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 487ff2435..48c7845c2 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -426,20 +426,20 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json e1d3c02695cbd2ee7bbede97f72941835634a3a5 assets/create/lang/en_ud.json -3e74ffe81510f420f5f1821808291c0539a14c13 assets/create/lang/en_us.json -82571338ff8edf812ae01f0a5d45c58718374469 assets/create/lang/unfinished/de_de.json -6cf3dd48a1708deedbb7ed1029616d932094aa93 assets/create/lang/unfinished/es_es.json -a6a3d443ff8ef03952f3e1843a88c91349f52680 assets/create/lang/unfinished/es_mx.json -c5fff5dee93fcb5eb5576bdf0598139e11b91e5c assets/create/lang/unfinished/fr_fr.json -1647117134ac3fcda2110abe13504d3699135f9c assets/create/lang/unfinished/it_it.json -ed0fd66cfa74b2390f127262242c8385fb699d72 assets/create/lang/unfinished/ja_jp.json -f0b83a1f5377c07e6a3beaa40d13ffe34ae4a269 assets/create/lang/unfinished/ko_kr.json -8e2ba058fa004c86d48c869232b85a6a1cdfa7f9 assets/create/lang/unfinished/nl_nl.json -0d99e0a375d6d1cf5f00ab48e090f4472fff94ad assets/create/lang/unfinished/pl_pl.json -2d1882cf35f0e09d9e820bd408183d902ed64b50 assets/create/lang/unfinished/pt_br.json -295b171018e6f8c2c488f109f4b080d9019e2ae2 assets/create/lang/unfinished/ru_ru.json -5f238e588fc997b23cb332fb9a0c3594d6cbfaaf assets/create/lang/unfinished/zh_cn.json -274a919cbefb9e83213e579dbc8cc0c507f65df8 assets/create/lang/unfinished/zh_tw.json +e45592394573a5e5bae6520976ef0760e27833b1 assets/create/lang/en_us.json +3e80da8da3fd705c5a9abcef3bb88c848d694452 assets/create/lang/unfinished/de_de.json +2957ff5031fce02979fe0029756705c80909160f assets/create/lang/unfinished/es_es.json +58c0101a854c4a717058b593572707a035b2bd17 assets/create/lang/unfinished/es_mx.json +2dca9cad484ec7991d4303f7b79b613da85aa213 assets/create/lang/unfinished/fr_fr.json +93c30ea554df1b96d493f3c15660665342ea54e2 assets/create/lang/unfinished/it_it.json +2d19c1bd0b16c7f4d3cab91566b10f8b20fd92b8 assets/create/lang/unfinished/ja_jp.json +00a5e891f481ddbbd2e043f05d4c60c8519d30b4 assets/create/lang/unfinished/ko_kr.json +3264c35ea11ad73c63b42d3c3e86b3e4a683e8a7 assets/create/lang/unfinished/nl_nl.json +284b09bca2e8dafbf6c39d562a6bec7d6d9e277e assets/create/lang/unfinished/pl_pl.json +ebabdc30b05702af5cc4b28e95fa5792035db73a assets/create/lang/unfinished/pt_br.json +ab37de7ff2c14415e29782bba6382233e585fa6f assets/create/lang/unfinished/ru_ru.json +f70cb0834d60693a62bef99c2b81b40fae37417a assets/create/lang/unfinished/zh_cn.json +f78d0693929030d6ede68d4233407f6c832ea93e 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 @@ -1698,7 +1698,7 @@ d080b1b25e5bc8baf5aee68691b08c7f12ece3b0 assets/create/models/item/windmill_bear 866fbb0ce2878a73e0440d1caf6534c8bd7c384f assets/create/models/item/zinc_ingot.json a80fb25a0b655e76be986b5b49fcb0f03461a1ab assets/create/models/item/zinc_nugget.json b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json -bbe7fc4aef29420319f59d02d4cd376a78244e70 assets/create/sounds.json +58880e397902f8ca5b3b59ed4423e626109ddc4c assets/create/sounds.json 5d0cc4c0255dc241e61c173b31ddca70c88d08e4 data/create/advancements/aesthetics.json 187921fa131b06721bfaf63f2623a28c141aae9a data/create/advancements/andesite_alloy.json 0ea2db7173b5be28b289ea7c9a6a0cf5805c60c7 data/create/advancements/andesite_casing.json diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index a597e594b..8cbb2a13c 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -1064,6 +1064,11 @@ "create.item_attributes.in_item_group.inverted": "is not in group '%1$s'", "create.item_attributes.added_by": "was added by %1$s", "create.item_attributes.added_by.inverted": "was not added by %1$s", + "create.item_attributes.shulker_level": "is shulker %1$s", + "create.item_attributes.shulker_level.inverted": "is shulker not %1$s", + "create.item_attributes.shulker_level.full": "full", + "create.item_attributes.shulker_level.empty": "empty", + "create.item_attributes.shulker_level.partial": "partially filled", "create.item_attributes.has_enchant": "is enchanted with %1$s", "create.item_attributes.has_enchant.inverted": "is not enchanted with %1$s", "create.item_attributes.color": "is dyed %1$s", @@ -1216,6 +1221,7 @@ "create.subtitle.mechanical_press_activation_belt": "Mechanical Press bonks", "create.subtitle.fwoomp": "Potato Launcher fwoomps", "create.subtitle.worldshaper_place": "Worldshaper zaps", + "create.subtitle.crushing_1": "Crushing noises", "create.subtitle.depot_slide": "Item slides", "create.subtitle.saw_activate_stone": "Mechanical Saw activates", "create.subtitle.blaze_munch": "Blaze Burner munches", 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 b143ebadf..be3d6d8bd 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: 1119", + "_": "Missing Localizations: 1125", "_": "->------------------------] Game Elements [------------------------<-", @@ -1065,6 +1065,11 @@ "create.item_attributes.in_item_group.inverted": "UNLOCALIZED: is not in group '%1$s'", "create.item_attributes.added_by": "UNLOCALIZED: was added by %1$s", "create.item_attributes.added_by.inverted": "UNLOCALIZED: was not added by %1$s", + "create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s", + "create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s", + "create.item_attributes.shulker_level.full": "UNLOCALIZED: full", + "create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty", + "create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled", "create.item_attributes.has_enchant": "UNLOCALIZED: is enchanted with %1$s", "create.item_attributes.has_enchant.inverted": "UNLOCALIZED: is not enchanted with %1$s", "create.item_attributes.color": "UNLOCALIZED: is dyed %1$s", @@ -1217,6 +1222,7 @@ "create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks", "create.subtitle.fwoomp": "UNLOCALIZED: Potato Launcher fwoomps", "create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps", + "create.subtitle.crushing_1": "UNLOCALIZED: Crushing noises", "create.subtitle.depot_slide": "UNLOCALIZED: Item slides", "create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates", "create.subtitle.blaze_munch": "Lohe kaut glücklich", 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 21074e3b5..c9364aa5f 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: 42", + "_": "Missing Localizations: 48", "_": "->------------------------] Game Elements [------------------------<-", @@ -1065,6 +1065,11 @@ "create.item_attributes.in_item_group.inverted": "no está en el grupo '%1$s'", "create.item_attributes.added_by": "fue añadido por %1$s", "create.item_attributes.added_by.inverted": "no fue añadida por %1$s", + "create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s", + "create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s", + "create.item_attributes.shulker_level.full": "UNLOCALIZED: full", + "create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty", + "create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled", "create.item_attributes.has_enchant": "está encantado con %1$s", "create.item_attributes.has_enchant.inverted": "no está encantado con %1$s", "create.item_attributes.color": "Está teñido %1$s", @@ -1217,6 +1222,7 @@ "create.subtitle.mechanical_press_activation_belt": "", "create.subtitle.fwoomp": "", "create.subtitle.worldshaper_place": "", + "create.subtitle.crushing_1": "UNLOCALIZED: Crushing noises", "create.subtitle.depot_slide": "", "create.subtitle.saw_activate_stone": "", "create.subtitle.blaze_munch": "", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_mx.json b/src/generated/resources/assets/create/lang/unfinished/es_mx.json index 971203175..3f38ce3fe 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_mx.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_mx.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1486", + "_": "Missing Localizations: 1492", "_": "->------------------------] Game Elements [------------------------<-", @@ -1065,6 +1065,11 @@ "create.item_attributes.in_item_group.inverted": "UNLOCALIZED: is not in group '%1$s'", "create.item_attributes.added_by": "UNLOCALIZED: was added by %1$s", "create.item_attributes.added_by.inverted": "UNLOCALIZED: was not added by %1$s", + "create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s", + "create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s", + "create.item_attributes.shulker_level.full": "UNLOCALIZED: full", + "create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty", + "create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled", "create.item_attributes.has_enchant": "UNLOCALIZED: is enchanted with %1$s", "create.item_attributes.has_enchant.inverted": "UNLOCALIZED: is not enchanted with %1$s", "create.item_attributes.color": "UNLOCALIZED: is dyed %1$s", @@ -1217,6 +1222,7 @@ "create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks", "create.subtitle.fwoomp": "UNLOCALIZED: Potato Launcher fwoomps", "create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps", + "create.subtitle.crushing_1": "UNLOCALIZED: Crushing noises", "create.subtitle.depot_slide": "UNLOCALIZED: Item slides", "create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates", "create.subtitle.blaze_munch": "UNLOCALIZED: Blaze Burner munches", 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 94e8e3196..18bf25b10 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: 1371", + "_": "Missing Localizations: 1377", "_": "->------------------------] Game Elements [------------------------<-", @@ -1065,6 +1065,11 @@ "create.item_attributes.in_item_group.inverted": "n'appartient pas à %1$s'", "create.item_attributes.added_by": "a été ajouté par %1$s", "create.item_attributes.added_by.inverted": "n'a pas été ajouté par %1$s", + "create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s", + "create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s", + "create.item_attributes.shulker_level.full": "UNLOCALIZED: full", + "create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty", + "create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled", "create.item_attributes.has_enchant": "est enchanté %1$s", "create.item_attributes.has_enchant.inverted": "n'est pas enchenté %1$s", "create.item_attributes.color": "UNLOCALIZED: is dyed %1$s", @@ -1217,6 +1222,7 @@ "create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks", "create.subtitle.fwoomp": "UNLOCALIZED: Potato Launcher fwoomps", "create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps", + "create.subtitle.crushing_1": "UNLOCALIZED: Crushing noises", "create.subtitle.depot_slide": "UNLOCALIZED: Item slides", "create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates", "create.subtitle.blaze_munch": "UNLOCALIZED: Blaze Burner munches", 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 b305be2b8..4411d5325 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: 899", + "_": "Missing Localizations: 905", "_": "->------------------------] Game Elements [------------------------<-", @@ -1065,6 +1065,11 @@ "create.item_attributes.in_item_group.inverted": "non appartiene a '%1$s'", "create.item_attributes.added_by": "è stato aggiunto da %1$s", "create.item_attributes.added_by.inverted": "non è stato aggiunto da %1$s", + "create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s", + "create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s", + "create.item_attributes.shulker_level.full": "UNLOCALIZED: full", + "create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty", + "create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled", "create.item_attributes.has_enchant": "è stato incantato con %1$s", "create.item_attributes.has_enchant.inverted": "non è stato incantato con %1$s", "create.item_attributes.color": "UNLOCALIZED: is dyed %1$s", @@ -1217,6 +1222,7 @@ "create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks", "create.subtitle.fwoomp": "UNLOCALIZED: Potato Launcher fwoomps", "create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps", + "create.subtitle.crushing_1": "UNLOCALIZED: Crushing noises", "create.subtitle.depot_slide": "UNLOCALIZED: Item slides", "create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates", "create.subtitle.blaze_munch": "Il blaze lo gusta felicemente", 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 ff6ee296d..6d61c2587 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: 31", + "_": "Missing Localizations: 37", "_": "->------------------------] Game Elements [------------------------<-", @@ -1065,6 +1065,11 @@ "create.item_attributes.in_item_group.inverted": "%1$sに属していないか", "create.item_attributes.added_by": "%1$sによって追加されたか", "create.item_attributes.added_by.inverted": "%1$sによって追加されていないか", + "create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s", + "create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s", + "create.item_attributes.shulker_level.full": "UNLOCALIZED: full", + "create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty", + "create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled", "create.item_attributes.has_enchant": "エンチャントされているか%1$s", "create.item_attributes.has_enchant.inverted": "エンチャントがされていないか", "create.item_attributes.color": "%1$sで染められているか", @@ -1217,6 +1222,7 @@ "create.subtitle.mechanical_press_activation_belt": "メカニカルプレスがボンと鳴る", "create.subtitle.fwoomp": "ポテトランチャーがバキューンと鳴る", "create.subtitle.worldshaper_place": "ワールドシェーパーが設置する", + "create.subtitle.crushing_1": "UNLOCALIZED: Crushing noises", "create.subtitle.depot_slide": "アイテムが滑る", "create.subtitle.saw_activate_stone": "メカニカルソーが動作する", "create.subtitle.blaze_munch": "ブレイズの咀嚼音", 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 849b7d5d0..a371fe7ac 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: 277", + "_": "Missing Localizations: 283", "_": "->------------------------] Game Elements [------------------------<-", @@ -1065,6 +1065,11 @@ "create.item_attributes.in_item_group.inverted": "'%1$s' 그룹에 속해 있지 않은", "create.item_attributes.added_by": "%1$s에 의해 추가된", "create.item_attributes.added_by.inverted": "%1$s에 의해 추가되지 않은", + "create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s", + "create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s", + "create.item_attributes.shulker_level.full": "UNLOCALIZED: full", + "create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty", + "create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled", "create.item_attributes.has_enchant": "%1$s 마법이 부여된", "create.item_attributes.has_enchant.inverted": "%1$s 마법이 부여되지 않은", "create.item_attributes.color": "염색된 %1$s", @@ -1217,6 +1222,7 @@ "create.subtitle.mechanical_press_activation_belt": "기계식 압착기가 무언가를 압착함", "create.subtitle.fwoomp": "UNLOCALIZED: Potato Launcher fwoomps", "create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps", + "create.subtitle.crushing_1": "UNLOCALIZED: Crushing noises", "create.subtitle.depot_slide": "UNLOCALIZED: Item slides", "create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates", "create.subtitle.blaze_munch": "블레이즈 가열기가 무언가를 먹어 치움", 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 b2204fd12..e6b4c86d5 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: 1752", + "_": "Missing Localizations: 1758", "_": "->------------------------] Game Elements [------------------------<-", @@ -1065,6 +1065,11 @@ "create.item_attributes.in_item_group.inverted": "UNLOCALIZED: is not in group '%1$s'", "create.item_attributes.added_by": "UNLOCALIZED: was added by %1$s", "create.item_attributes.added_by.inverted": "UNLOCALIZED: was not added by %1$s", + "create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s", + "create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s", + "create.item_attributes.shulker_level.full": "UNLOCALIZED: full", + "create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty", + "create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled", "create.item_attributes.has_enchant": "UNLOCALIZED: is enchanted with %1$s", "create.item_attributes.has_enchant.inverted": "UNLOCALIZED: is not enchanted with %1$s", "create.item_attributes.color": "UNLOCALIZED: is dyed %1$s", @@ -1217,6 +1222,7 @@ "create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks", "create.subtitle.fwoomp": "UNLOCALIZED: Potato Launcher fwoomps", "create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps", + "create.subtitle.crushing_1": "UNLOCALIZED: Crushing noises", "create.subtitle.depot_slide": "UNLOCALIZED: Item slides", "create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates", "create.subtitle.blaze_munch": "UNLOCALIZED: Blaze Burner munches", 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 8d16ccfee..d7abc6373 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: 241", + "_": "Missing Localizations: 247", "_": "->------------------------] Game Elements [------------------------<-", @@ -1065,6 +1065,11 @@ "create.item_attributes.in_item_group.inverted": "nie jest w grupie \"%1$s\"", "create.item_attributes.added_by": "dodany przez %1$s", "create.item_attributes.added_by.inverted": "niedodany przez %1$s", + "create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s", + "create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s", + "create.item_attributes.shulker_level.full": "UNLOCALIZED: full", + "create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty", + "create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled", "create.item_attributes.has_enchant": "posiada zaklęcie %1$s", "create.item_attributes.has_enchant.inverted": "nie posiada zaklęcia %1$s", "create.item_attributes.color": "jest zafarbowane, kolor %1$s", @@ -1217,6 +1222,7 @@ "create.subtitle.mechanical_press_activation_belt": "Mechaniczna prasa stuka", "create.subtitle.fwoomp": "UNLOCALIZED: Potato Launcher fwoomps", "create.subtitle.worldshaper_place": "Kształter strzela", + "create.subtitle.crushing_1": "UNLOCALIZED: Crushing noises", "create.subtitle.depot_slide": "Przedmiot ślizga się", "create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates", "create.subtitle.blaze_munch": "Płomyk szczęśliwie przeżuwa", 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 6163cba3a..392f1d8a1 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: 1793", + "_": "Missing Localizations: 1799", "_": "->------------------------] Game Elements [------------------------<-", @@ -1065,6 +1065,11 @@ "create.item_attributes.in_item_group.inverted": "UNLOCALIZED: is not in group '%1$s'", "create.item_attributes.added_by": "UNLOCALIZED: was added by %1$s", "create.item_attributes.added_by.inverted": "UNLOCALIZED: was not added by %1$s", + "create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s", + "create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s", + "create.item_attributes.shulker_level.full": "UNLOCALIZED: full", + "create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty", + "create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled", "create.item_attributes.has_enchant": "UNLOCALIZED: is enchanted with %1$s", "create.item_attributes.has_enchant.inverted": "UNLOCALIZED: is not enchanted with %1$s", "create.item_attributes.color": "UNLOCALIZED: is dyed %1$s", @@ -1217,6 +1222,7 @@ "create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks", "create.subtitle.fwoomp": "UNLOCALIZED: Potato Launcher fwoomps", "create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps", + "create.subtitle.crushing_1": "UNLOCALIZED: Crushing noises", "create.subtitle.depot_slide": "UNLOCALIZED: Item slides", "create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates", "create.subtitle.blaze_munch": "UNLOCALIZED: Blaze Burner munches", 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 8a6c396f5..cf74c44a8 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: 272", + "_": "Missing Localizations: 278", "_": "->------------------------] Game Elements [------------------------<-", @@ -1065,6 +1065,11 @@ "create.item_attributes.in_item_group.inverted": "не принадлежит '%1$s'", "create.item_attributes.added_by": "был добавлен %1$s", "create.item_attributes.added_by.inverted": "не был добавлен %1$s", + "create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s", + "create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s", + "create.item_attributes.shulker_level.full": "UNLOCALIZED: full", + "create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty", + "create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled", "create.item_attributes.has_enchant": "зачарован на %1$s", "create.item_attributes.has_enchant.inverted": "не зачарован на %1$s", "create.item_attributes.color": "Покрашено в %1$s", @@ -1217,6 +1222,7 @@ "create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks", "create.subtitle.fwoomp": "UNLOCALIZED: Potato Launcher fwoomps", "create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps", + "create.subtitle.crushing_1": "UNLOCALIZED: Crushing noises", "create.subtitle.depot_slide": "UNLOCALIZED: Item slides", "create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates", "create.subtitle.blaze_munch": "Всполох радостно жуёт", 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 d7b417dfc..9acfa3846 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: 282", + "_": "Missing Localizations: 288", "_": "->------------------------] Game Elements [------------------------<-", @@ -1065,6 +1065,11 @@ "create.item_attributes.in_item_group.inverted": "不属于%1$s", "create.item_attributes.added_by": "由%1$s添加", "create.item_attributes.added_by.inverted": "不是由%1$s添加", + "create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s", + "create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s", + "create.item_attributes.shulker_level.full": "UNLOCALIZED: full", + "create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty", + "create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled", "create.item_attributes.has_enchant": "有附魔效果%1$s", "create.item_attributes.has_enchant.inverted": "没有附魔效果%1$s", "create.item_attributes.color": "染色为%1$s", @@ -1217,6 +1222,7 @@ "create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks", "create.subtitle.fwoomp": "UNLOCALIZED: Potato Launcher fwoomps", "create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps", + "create.subtitle.crushing_1": "UNLOCALIZED: Crushing noises", "create.subtitle.depot_slide": "UNLOCALIZED: Item slides", "create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates", "create.subtitle.blaze_munch": "烈焰人:咀嚼", 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 8724d55b5..5b001c079 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: 277", + "_": "Missing Localizations: 283", "_": "->------------------------] Game Elements [------------------------<-", @@ -1065,6 +1065,11 @@ "create.item_attributes.in_item_group.inverted": "不屬於%1$s", "create.item_attributes.added_by": "由%1$s添加", "create.item_attributes.added_by.inverted": "不是由%1$s添加", + "create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s", + "create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s", + "create.item_attributes.shulker_level.full": "UNLOCALIZED: full", + "create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty", + "create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled", "create.item_attributes.has_enchant": "有附魔效果%1$s", "create.item_attributes.has_enchant.inverted": "沒有附魔效果%1$s", "create.item_attributes.color": "已被染色成 %1$s", @@ -1217,6 +1222,7 @@ "create.subtitle.mechanical_press_activation_belt": "液壓機工作", "create.subtitle.fwoomp": "UNLOCALIZED: Potato Launcher fwoomps", "create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps", + "create.subtitle.crushing_1": "UNLOCALIZED: Crushing noises", "create.subtitle.depot_slide": "UNLOCALIZED: Item slides", "create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates", "create.subtitle.blaze_munch": "烈焰使者開心地吃著", diff --git a/src/generated/resources/assets/create/sounds.json b/src/generated/resources/assets/create/sounds.json index bfcbfc44e..5e22450ae 100644 --- a/src/generated/resources/assets/create/sounds.json +++ b/src/generated/resources/assets/create/sounds.json @@ -128,6 +128,31 @@ } ] }, + "crushing_1": { + "sounds": [ + { + "name": "minecraft:block.netherrack.hit", + "type": "event" + } + ], + "subtitle": "create.subtitle.crushing_1" + }, + "crushing_2": { + "sounds": [ + { + "name": "minecraft:block.gravel.place", + "type": "event" + } + ] + }, + "crushing_3": { + "sounds": [ + { + "name": "minecraft:block.netherite_block.break", + "type": "event" + } + ] + }, "deny": { "sounds": [ { diff --git a/src/main/java/com/simibubi/create/AllColorHandlers.java b/src/main/java/com/simibubi/create/AllColorHandlers.java deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index de9051c5e..8e7c0bea4 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -1,10 +1,10 @@ package com.simibubi.create; +import static com.simibubi.create.AllTags.forgeItemTag; import static com.simibubi.create.AllTags.AllItemTags.CREATE_INGOTS; import static com.simibubi.create.AllTags.AllItemTags.CRUSHED_ORES; import static com.simibubi.create.AllTags.AllItemTags.NUGGETS; import static com.simibubi.create.AllTags.AllItemTags.PLATES; -import static com.simibubi.create.AllTags.forgeItemTag; import static com.simibubi.create.content.AllSections.CURIOSITIES; import static com.simibubi.create.content.AllSections.KINETICS; import static com.simibubi.create.content.AllSections.LOGISTICS; diff --git a/src/main/java/com/simibubi/create/AllSoundEvents.java b/src/main/java/com/simibubi/create/AllSoundEvents.java index 2d7b4afa0..8b2f07adf 100644 --- a/src/main/java/com/simibubi/create/AllSoundEvents.java +++ b/src/main/java/com/simibubi/create/AllSoundEvents.java @@ -199,6 +199,21 @@ public class AllSoundEvents { .category(SoundCategory.BLOCKS) .build(), + CRUSHING_1 = create("crushing_1").subtitle("Crushing noises") + .playExisting(SoundEvents.BLOCK_NETHERRACK_HIT) + .category(SoundCategory.BLOCKS) + .build(), + + CRUSHING_2 = create("crushing_2").noSubtitle() + .playExisting(SoundEvents.BLOCK_GRAVEL_PLACE) + .category(SoundCategory.BLOCKS) + .build(), + + CRUSHING_3 = create("crushing_3").noSubtitle() + .playExisting(SoundEvents.BLOCK_NETHERITE_BLOCK_BREAK) + .category(SoundCategory.BLOCKS) + .build(), + PECULIAR_BELL_USE = create("peculiar_bell_use").subtitle("Peculiar Bell tolls") .playExisting(SoundEvents.BLOCK_BELL_USE) .category(SoundCategory.BLOCKS) @@ -230,7 +245,8 @@ public class AllSoundEvents { public static JsonElement provideLangEntries() { JsonObject object = new JsonObject(); for (SoundEntry entry : entries.values()) - object.addProperty(entry.getSubtitleKey(), entry.getSubtitle()); + if (entry.hasSubtitle()) + object.addProperty(entry.getSubtitleKey(), entry.getSubtitle()); return object; } @@ -306,6 +322,11 @@ public class AllSoundEvents { this.subtitle = subtitle; return this; } + + public SoundEntryBuilder noSubtitle() { + this.subtitle = null; + return this; + } public SoundEntryBuilder category(SoundCategory category) { this.category = category; @@ -361,6 +382,10 @@ public class AllSoundEvents { public ResourceLocation getLocation() { return Create.asResource(id); } + + public boolean hasSubtitle() { + return subtitle != null; + } public String getSubtitle() { return subtitle; @@ -460,7 +485,7 @@ public class AllSoundEvents { s.addProperty("type", "event"); list.add(s); entry.add("sounds", list); - if (i == 0) + if (i == 0 && hasSubtitle()) entry.addProperty("subtitle", getSubtitleKey()); json.add(getIdOf(i), entry); } diff --git a/src/main/java/com/simibubi/create/compat/Mods.java b/src/main/java/com/simibubi/create/compat/Mods.java index cf9ec4e2a..85b23626a 100644 --- a/src/main/java/com/simibubi/create/compat/Mods.java +++ b/src/main/java/com/simibubi/create/compat/Mods.java @@ -1,10 +1,10 @@ package com.simibubi.create.compat; -import net.minecraftforge.fml.ModList; - import java.util.Optional; import java.util.function.Supplier; +import net.minecraftforge.fml.ModList; + /** * For compatibility with and without another mod present, we have to define load conditions of the specific code */ diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterTileEntity.java index f76448e23..cd10367d2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterTileEntity.java @@ -4,6 +4,8 @@ import com.simibubi.create.foundation.tileEntity.SyncedTileEntity; import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.math.AxisAlignedBB; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; public class HarvesterTileEntity extends SyncedTileEntity { @@ -17,6 +19,7 @@ public class HarvesterTileEntity extends SyncedTileEntity { } @Override + @OnlyIn(Dist.CLIENT) public AxisAlignedBB getRenderBoundingBox() { return RENDER_BOX.offset(pos); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/SawMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/SawMovementBehaviour.java index 77aebb0c3..d3a78dc13 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/SawMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/SawMovementBehaviour.java @@ -1,11 +1,13 @@ package com.simibubi.create.content.contraptions.components.actors; +import java.util.Optional; + import com.simibubi.create.content.contraptions.components.saw.SawBlock; import com.simibubi.create.content.contraptions.components.saw.SawRenderer; import com.simibubi.create.content.contraptions.components.saw.SawTileEntity; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; -import com.simibubi.create.foundation.utility.AbstractBlockBreakQueue; import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionMatrices; +import com.simibubi.create.foundation.utility.AbstractBlockBreakQueue; import com.simibubi.create.foundation.utility.TreeCutter; import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld; @@ -24,8 +26,6 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.items.ItemHandlerHelper; -import java.util.Optional; - public class SawMovementBehaviour extends BlockBreakingMovementBehaviour { @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankTileEntity.java index 259a89b10..13c10c6e3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankTileEntity.java @@ -9,6 +9,8 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.nbt.CompoundNBT; import net.minecraft.tileentity.TileEntityType; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; public class HandCrankTileEntity extends GeneratingKineticTileEntity { @@ -82,6 +84,7 @@ public class HandCrankTileEntity extends GeneratingKineticTileEntity { } @Override + @OnlyIn(Dist.CLIENT) public void tickAudio() { super.tickAudio(); if (inUse > 0 && AnimationTickHolder.getTicks() % 10 == 0) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java index e8562843c..dbe728ad9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java @@ -13,6 +13,8 @@ import com.simibubi.create.content.contraptions.processing.ProcessingInventory; import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.item.ItemHelper; +import com.simibubi.create.foundation.sound.SoundScapes; +import com.simibubi.create.foundation.sound.SoundScapes.AmbienceGroup; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour; @@ -38,8 +40,11 @@ import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.vector.Vector3d; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.wrapper.RecipeWrapper; @@ -87,37 +92,41 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { if (searchForEntity) { searchForEntity = false; List search = world.getEntitiesInAABBexcluding(null, new AxisAlignedBB(getPos()), - e -> entityUUID.equals(e.getUniqueID())); + e -> entityUUID.equals(e.getUniqueID())); if (search.isEmpty()) clear(); else processingEntity = search.get(0); } - - if (!isOccupied()) return; if (crushingspeed == 0) return; + if (world.isRemote) + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> this.tickAudio()); + float speed = crushingspeed * 4; Vector3d centerPos = VecHelper.getCenterOf(pos); Direction facing = getBlockState().get(FACING); - int offset = facing.getAxisDirection().getOffset(); - Vector3d outSpeed = new Vector3d((facing.getAxis() == Axis.X ? 0.25D : 0.0D) * offset - , offset == 1 ? (facing.getAxis() == Axis.Y ? 0.5D : 0.0D) : 0.0D //Increased upwards speed so upwards crushing wheels shoot out the item properly. - , (facing.getAxis() == Axis.Z ? 0.25D : 0.0D) * offset); //No downwards speed, so downwards crushing wheels drop the items as before. - Vector3d outPos = centerPos.add((facing.getAxis() == Axis.X ? .55f * offset : 0f) - , (facing.getAxis() == Axis.Y ? .55f * offset : 0f) - , (facing.getAxis() == Axis.Z ? .55f * offset : 0f)); + int offset = facing.getAxisDirection() + .getOffset(); + Vector3d outSpeed = new Vector3d((facing.getAxis() == Axis.X ? 0.25D : 0.0D) * offset, + offset == 1 ? (facing.getAxis() == Axis.Y ? 0.5D : 0.0D) : 0.0D // Increased upwards speed so upwards + // crushing wheels shoot out the item + // properly. + , (facing.getAxis() == Axis.Z ? 0.25D : 0.0D) * offset); // No downwards speed, so downwards crushing wheels + // drop the items as before. + Vector3d outPos = centerPos.add((facing.getAxis() == Axis.X ? .55f * offset : 0f), + (facing.getAxis() == Axis.Y ? .55f * offset : 0f), (facing.getAxis() == Axis.Z ? .55f * offset : 0f)); if (!hasEntity()) { float processingSpeed = - MathHelper.clamp((speed) / (!inventory.appliedRecipe ? MathHelper.log2(inventory.getStackInSlot(0) - .getCount()) : 1), .25f, 20); + MathHelper.clamp((speed) / (!inventory.appliedRecipe ? MathHelper.log2(inventory.getStackInSlot(0) + .getCount()) : 1), .25f, 20); inventory.remainingTime -= processingSpeed; spawnParticles(inventory.getStackInSlot(0)); @@ -136,12 +145,13 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { } inventory.remainingTime = 0; - //Output Items - if (facing.getAxis().isHorizontal() || facing == Direction.DOWN) { - BlockPos nextPos = pos.add(facing.getAxis() == Axis.X ? 1f * offset : 0f - , (-1f) - , facing.getAxis() == Axis.Z ? 1f * offset : 0f); - DirectBeltInputBehaviour behaviour = TileEntityBehaviour.get(world, nextPos, DirectBeltInputBehaviour.TYPE); + // Output Items + if (facing.getAxis() + .isHorizontal() || facing == Direction.DOWN) { + BlockPos nextPos = pos.add(facing.getAxis() == Axis.X ? 1f * offset : 0f, (-1f), + facing.getAxis() == Axis.Z ? 1f * offset : 0f); + DirectBeltInputBehaviour behaviour = + TileEntityBehaviour.get(world, nextPos, DirectBeltInputBehaviour.TYPE); if (behaviour != null) { boolean changed = false; if (!behaviour.canInsertFromSide(facing)) @@ -164,7 +174,7 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { } } - //Eject Items + // Eject Items for (int slot = 0; slot < inventory.getSlots(); slot++) { ItemStack stack = inventory.getStackInSlot(slot); if (stack.isEmpty()) @@ -172,18 +182,17 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { ItemEntity entityIn = new ItemEntity(world, outPos.x, outPos.y, outPos.z, stack); entityIn.setMotion(outSpeed); entityIn.getPersistentData() - .put("BypassCrushingWheel", NBTUtil.writeBlockPos(pos)); + .put("BypassCrushingWheel", NBTUtil.writeBlockPos(pos)); world.addEntity(entityIn); } inventory.clear(); world.notifyBlockUpdate(pos, getBlockState(), getBlockState(), 2 | 16); - return; } if (!processingEntity.isAlive() || !processingEntity.getBoundingBox() - .intersects(new AxisAlignedBB(pos).grow(.5f))) { + .intersects(new AxisAlignedBB(pos).grow(.5f))) { clear(); return; } @@ -193,33 +202,40 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { if (processingEntity.isSneaking()) xMotion = zMotion = 0; double movement = Math.max(-speed / 4f, -.5f) * -offset; - processingEntity.setMotion(new Vector3d(facing.getAxis() == Axis.X ? movement : xMotion - , facing.getAxis() == Axis.Y ? movement : 0f //Do not move entities upwards or downwards for horizontal crushers, - , facing.getAxis() == Axis.Z ? movement : zMotion)); //Or they'll only get their feet crushed. + processingEntity.setMotion( + new Vector3d(facing.getAxis() == Axis.X ? movement : xMotion, facing.getAxis() == Axis.Y ? movement : 0f // Do + // not + // move + // entities + // upwards + // or + // downwards + // for + // horizontal + // crushers, + , facing.getAxis() == Axis.Z ? movement : zMotion)); // Or they'll only get their feet crushed. if (world.isRemote) return; if (!(processingEntity instanceof ItemEntity)) { - Vector3d entityOutPos = outPos.add(facing.getAxis() == Axis.X ? .5f * offset : 0f - , facing.getAxis() == Axis.Y ? .5f * offset : 0f - , facing.getAxis() == Axis.Z ? .5f * offset : 0f); + Vector3d entityOutPos = outPos.add(facing.getAxis() == Axis.X ? .5f * offset : 0f, + facing.getAxis() == Axis.Y ? .5f * offset : 0f, facing.getAxis() == Axis.Z ? .5f * offset : 0f); int crusherDamage = AllConfigs.SERVER.kinetics.crushingDamage.get(); if (processingEntity instanceof LivingEntity) { - if ((((LivingEntity) processingEntity).getHealth() - crusherDamage <= 0) //Takes LivingEntity instances as exception, so it can move them before it would kill them. - && (((LivingEntity) processingEntity).hurtTime <= 0)) { //This way it can actually output the items to the right spot. - processingEntity.setPosition(entityOutPos.x - , entityOutPos.y - , entityOutPos.z); + if ((((LivingEntity) processingEntity).getHealth() - crusherDamage <= 0) // Takes LivingEntity instances + // as exception, so it can + // move them before it would + // kill them. + && (((LivingEntity) processingEntity).hurtTime <= 0)) { // This way it can actually output the items + // to the right spot. + processingEntity.setPosition(entityOutPos.x, entityOutPos.y, entityOutPos.z); } } - processingEntity.attackEntityFrom(CrushingWheelTileEntity.damageSource, - crusherDamage); + processingEntity.attackEntityFrom(CrushingWheelTileEntity.damageSource, crusherDamage); if (!processingEntity.isAlive()) { - processingEntity.setPosition(entityOutPos.x - , entityOutPos.y - , entityOutPos.z); + processingEntity.setPosition(entityOutPos.x, entityOutPos.y, entityOutPos.z); } return; } @@ -227,24 +243,33 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { ItemEntity itemEntity = (ItemEntity) processingEntity; itemEntity.setPickupDelay(20); if (facing.getAxis() == Axis.Y) { - if (processingEntity.getY() * -offset < (centerPos.y - .25f) * -offset) { + if (processingEntity.getY() * -offset < (centerPos.y - .25f) * -offset) { intakeItem(itemEntity); } } else if (facing.getAxis() == Axis.Z) { - if (processingEntity.getZ() * -offset < (centerPos.z - .25f) * -offset) { + if (processingEntity.getZ() * -offset < (centerPos.z - .25f) * -offset) { intakeItem(itemEntity); } } else { - if (processingEntity.getX() * -offset < (centerPos.x - .25f) * -offset) { + if (processingEntity.getX() * -offset < (centerPos.x - .25f) * -offset) { intakeItem(itemEntity); } } } + @OnlyIn(Dist.CLIENT) + public void tickAudio() { + float pitch = MathHelper.clamp((crushingspeed / 256f) + .45f, .85f, 1f); + if (entityUUID == null && inventory.getStackInSlot(0) + .isEmpty()) + return; + SoundScapes.play(AmbienceGroup.CRUSHING, pos, pitch); + } + private void intakeItem(ItemEntity itemEntity) { inventory.clear(); inventory.setStackInSlot(0, itemEntity.getItem() - .copy()); + .copy()); itemInserted(inventory.getStackInSlot(0)); itemEntity.remove(); world.notifyBlockUpdate(pos, getBlockState(), getBlockState(), 2 | 16); @@ -257,14 +282,14 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { IParticleData particleData = null; if (stack.getItem() instanceof BlockItem) particleData = new BlockParticleData(ParticleTypes.BLOCK, ((BlockItem) stack.getItem()).getBlock() - .getDefaultState()); + .getDefaultState()); else particleData = new ItemParticleData(ParticleTypes.ITEM, stack); Random r = world.rand; for (int i = 0; i < 4; i++) world.addParticle(particleData, pos.getX() + r.nextFloat(), pos.getY() + r.nextFloat(), - pos.getZ() + r.nextFloat(), 0, 0, 0); + pos.getZ() + r.nextFloat(), 0, 0, 0); } private void applyRecipe() { @@ -273,11 +298,11 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { List list = new ArrayList<>(); if (recipe.isPresent()) { int rolls = inventory.getStackInSlot(0) - .getCount(); + .getCount(); inventory.clear(); for (int roll = 0; roll < rolls; roll++) { List rolledResults = recipe.get() - .rollResults(); + .rollResults(); for (int i = 0; i < rolledResults.size(); i++) { ItemStack stack = rolledResults.get(i); ItemHelper.addToList(stack, list); @@ -326,7 +351,7 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { private void itemInserted(ItemStack stack) { Optional> recipe = findRecipe(); inventory.remainingTime = recipe.isPresent() ? recipe.get() - .getProcessingDuration() : 100; + .getProcessingDuration() : 100; inventory.appliedRecipe = false; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillstoneTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillstoneTileEntity.java index d9c9fe512..411777059 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillstoneTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillstoneTileEntity.java @@ -5,6 +5,8 @@ import java.util.Optional; import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.content.contraptions.base.KineticTileEntity; +import com.simibubi.create.foundation.sound.SoundScapes; +import com.simibubi.create.foundation.sound.SoundScapes.AmbienceGroup; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour; import com.simibubi.create.foundation.utility.VecHelper; @@ -19,6 +21,8 @@ import net.minecraft.util.Direction; import net.minecraft.util.Direction.Axis; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.vector.Vector3d; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.items.IItemHandler; @@ -41,13 +45,28 @@ public class MillstoneTileEntity extends KineticTileEntity { outputInv = new ItemStackHandler(9); capability = LazyOptional.of(MillstoneInventoryHandler::new); } - + @Override public void addBehaviours(List behaviours) { behaviours.add(new DirectBeltInputBehaviour(this)); super.addBehaviours(behaviours); } + @Override + @OnlyIn(Dist.CLIENT) + public void tickAudio() { + super.tickAudio(); + + if (getSpeed() == 0) + return; + if (inputInv.getStackInSlot(0) + .isEmpty()) + return; + + float pitch = MathHelper.clamp((Math.abs(getSpeed()) / 256f) + .45f, .85f, 1f); + SoundScapes.play(AmbienceGroup.MILLING, pos, pitch); + } + @Override public void tick() { super.tick(); @@ -98,7 +117,7 @@ public class MillstoneTileEntity extends KineticTileEntity { super.remove(); capability.invalidate(); } - + private void process() { RecipeWrapper inventoryIn = new RecipeWrapper(inputInv); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java index 6ba7308cb..5eeb534f1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java @@ -56,6 +56,7 @@ import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction; import net.minecraft.util.LazyValue; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.vector.Vector3d; @@ -71,6 +72,8 @@ import net.minecraftforge.items.IItemHandler; @MethodsReturnNonnullByDefault public class SawTileEntity extends BlockBreakingKineticTileEntity { + private static final AxisAlignedBB RENDER_BOX = new AxisAlignedBB(0, 0, 0, 1, 1, 1); + private static final Object cuttingRecipesKey = new Object(); public static final LazyValue> woodcuttingRecipeType = new LazyValue<>(() -> Registry.RECIPE_TYPE.getOrDefault(new ResourceLocation("druidcraft", "woodcutting"))); @@ -120,6 +123,13 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { playEvent = ItemStack.read(compound.getCompound("PlayEvent")); } + @Override + protected AxisAlignedBB makeRenderBoundingBox() { + Direction facing = getBlockState().get(SawBlock.FACING); + AxisAlignedBB box = RENDER_BOX.expand(facing.getXOffset() * 0.125f, facing.getYOffset() * 0.125f, facing.getZOffset() * 0.125f); + return box.offset(pos); + } + @Override @OnlyIn(Dist.CLIENT) public void tickAudio() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java index 305d5e06a..16f747acb 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java @@ -7,7 +7,6 @@ import java.util.function.Consumer; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.simibubi.create.AllRecipeTypes; -import com.simibubi.create.Create; import com.simibubi.create.foundation.fluid.FluidHelper; import com.simibubi.create.foundation.fluid.FluidIngredient; import com.simibubi.create.foundation.utility.Lang; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeBlock.java index 1f6cbe0a1..c94efdab6 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeBlock.java @@ -6,6 +6,9 @@ import com.simibubi.create.AllBlocks; import com.simibubi.create.AllShapes; import com.simibubi.create.AllTileEntities; import com.simibubi.create.content.contraptions.wrench.IWrenchable; +import com.simibubi.create.content.schematics.ISpecialBlockItemRequirement; +import com.simibubi.create.content.schematics.ItemRequirement; +import com.simibubi.create.content.schematics.ItemRequirement.ItemUseType; import com.simibubi.create.foundation.block.ITE; import com.simibubi.create.foundation.utility.DyeHelper; import com.simibubi.create.foundation.utility.Iterate; @@ -35,7 +38,8 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; -public class NixieTubeBlock extends HorizontalBlock implements ITE, IWrenchable { +public class NixieTubeBlock extends HorizontalBlock + implements ITE, IWrenchable, ISpecialBlockItemRequirement { public static final BooleanProperty CEILING = BooleanProperty.create("ceiling"); private DyeColor color; @@ -122,6 +126,17 @@ public class NixieTubeBlock extends HorizontalBlock implements ITE listAttributesOf(ItemStack stack) { + return Arrays.stream(ShulkerLevels.values()) + .filter(shulkerLevels -> shulkerLevels.canApply(stack)) + .map(ShulkerFillLevelAttribute::new) + .collect(Collectors.toList()); + } + + @Override + public String getTranslationKey() { + return "shulker_level"; + } + + @Override + public Object[] getTranslationParameters() { + String parameter = ""; + if (levels != null) + parameter = Lang.translate("item_attributes." + getTranslationKey() + "." + levels.key).getString(); + return new Object[]{parameter}; + } + + @Override + public void writeNBT(CompoundNBT nbt) { + if (levels != null) + nbt.putString("id", levels.key); + } + + @Override + public ItemAttribute readNBT(CompoundNBT nbt) { + return nbt.contains("id") ? new ShulkerFillLevelAttribute(ShulkerLevels.fromKey(nbt.getString("id"))) : EMPTY; + } + + enum ShulkerLevels { + EMPTY("empty", amount -> amount == 0), + PARTIAL("partial", amount -> amount > 0 && amount < Integer.MAX_VALUE), + FULL("full", amount -> amount == Integer.MAX_VALUE); + + private final Predicate requiredSize; + private final String key; + + ShulkerLevels(String key, Predicate requiredSize) { + this.key = key; + this.requiredSize = requiredSize; + } + + @Nullable + public static ShulkerLevels fromKey(String key) { + return Arrays.stream(values()).filter(shulkerLevels -> shulkerLevels.key.equals(key)).findFirst().orElse(null); + } + + private static boolean isShulker(ItemStack stack) { + return Block.getBlockFromItem(stack.getItem()) instanceof ShulkerBoxBlock; + } + + public boolean canApply(ItemStack testStack) { + if (!isShulker(testStack)) + return false; + CompoundNBT compoundnbt = testStack.getChildTag("BlockEntityTag"); + if (compoundnbt == null) + return requiredSize.test(0); + if (compoundnbt.contains("LootTable", 8)) + return false; + if (compoundnbt.contains("Items", 9)) { + int rawSize = compoundnbt.getList("Items", 10).size(); + if (rawSize < 27) + return requiredSize.test(rawSize); + + NonNullList inventory = NonNullList.withSize(27, ItemStack.EMPTY); + ItemStackHelper.loadAllItems(compoundnbt, inventory); + boolean isFull = inventory.stream().allMatch(itemStack -> !itemStack.isEmpty() && itemStack.getCount() == itemStack.getMaxStackSize()); + return requiredSize.test(isFull ? Integer.MAX_VALUE : rawSize); + } + return requiredSize.test(0); + } + } +} diff --git a/src/main/java/com/simibubi/create/foundation/sound/SoundScapes.java b/src/main/java/com/simibubi/create/foundation/sound/SoundScapes.java index e83bef0a9..c1065251f 100644 --- a/src/main/java/com/simibubi/create/foundation/sound/SoundScapes.java +++ b/src/main/java/com/simibubi/create/foundation/sound/SoundScapes.java @@ -30,7 +30,9 @@ public class SoundScapes { KINETIC(SoundScapes::kinetic), COG(SoundScapes::cogwheel), - + CRUSHING(SoundScapes::crushing), + MILLING(SoundScapes::milling), + ; private BiFunction factory; @@ -53,6 +55,17 @@ public class SoundScapes { return new SoundScape(pitch, group).continuous(AllSoundEvents.COGS.getMainEvent(), 1.5f, 1); } + private static SoundScape crushing(float pitch, AmbienceGroup group) { + return new SoundScape(pitch, group).repeating(AllSoundEvents.CRUSHING_1.getMainEvent(), 1.545f, .75f, 1) + .repeating(AllSoundEvents.CRUSHING_2.getMainEvent(), 0.425f, .75f, 2) + .repeating(AllSoundEvents.CRUSHING_3.getMainEvent(), 2f, 1.75f, 2); + } + + private static SoundScape milling(float pitch, AmbienceGroup group) { + return new SoundScape(pitch, group).repeating(AllSoundEvents.CRUSHING_1.getMainEvent(), 1.545f, .75f, 1) + .repeating(AllSoundEvents.CRUSHING_2.getMainEvent(), 0.425f, .75f, 2); + } + enum PitchGroup { VERY_LOW, LOW, NORMAL, HIGH, VERY_HIGH } diff --git a/src/main/java/com/simibubi/create/foundation/utility/TreeCutter.java b/src/main/java/com/simibubi/create/foundation/utility/TreeCutter.java index 598ec71cd..3b7f6e5ea 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/TreeCutter.java +++ b/src/main/java/com/simibubi/create/foundation/utility/TreeCutter.java @@ -14,9 +14,7 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import com.simibubi.create.AllTags; - import com.simibubi.create.compat.Mods; - import com.simibubi.create.compat.dynamictrees.DynamicTree; import net.minecraft.block.BambooBlock; diff --git a/src/main/resources/assets/create/lang/default/messages.json b/src/main/resources/assets/create/lang/default/messages.json index 4fc54ecfd..29239e841 100644 --- a/src/main/resources/assets/create/lang/default/messages.json +++ b/src/main/resources/assets/create/lang/default/messages.json @@ -391,6 +391,12 @@ "create.item_attributes.added_by": "was added by %1$s", "create.item_attributes.added_by.inverted": "was not added by %1$s", + "create.item_attributes.shulker_level": "is shulker %1$s", + "create.item_attributes.shulker_level.inverted": "is shulker not %1$s", + "create.item_attributes.shulker_level.full": "full", + "create.item_attributes.shulker_level.empty": "empty", + "create.item_attributes.shulker_level.partial": "partially filled", + "create.item_attributes.has_enchant": "is enchanted with %1$s", "create.item_attributes.has_enchant.inverted": "is not enchanted with %1$s", "create.item_attributes.color": "is dyed %1$s", @@ -504,7 +510,7 @@ "create.crafting_blueprint.manually_assigned": "Manually assigned", "create.crafting_blueprint.secondary_display_slot": "Secondary Display Slot", "create.crafting_blueprint.optional": "Optional", - + "create.potato_cannon.ammo.attack_damage": "%1$s Attack Damage", "create.potato_cannon.ammo.reload_ticks": "%1$s Reload Ticks", "create.potato_cannon.ammo.knockback": "%1$s Knockback",