From 3d74c41c2d199f910928d72ee16d3d65157611cf Mon Sep 17 00:00:00 2001 From: PepperCode1 <44146161+PepperCode1@users.noreply.github.com> Date: Fri, 7 Oct 2022 12:32:44 -0700 Subject: [PATCH 1/3] Netherite Diving - Add netherite diving helmet, netherite backtank, and netherite diving boots - Full netherite diving set makes entity fire immune --- src/generated/resources/.cache/cache | 62 +++--- .../blockstates/netherite_backtank.json | 34 +++ .../resources/assets/create/lang/en_ud.json | 9 +- .../resources/assets/create/lang/en_us.json | 9 +- .../assets/create/lang/unfinished/de_de.json | 11 +- .../assets/create/lang/unfinished/es_cl.json | 11 +- .../assets/create/lang/unfinished/es_es.json | 11 +- .../assets/create/lang/unfinished/fr_fr.json | 11 +- .../assets/create/lang/unfinished/it_it.json | 11 +- .../assets/create/lang/unfinished/ja_jp.json | 11 +- .../assets/create/lang/unfinished/ko_kr.json | 11 +- .../assets/create/lang/unfinished/nl_nl.json | 11 +- .../assets/create/lang/unfinished/pl_pl.json | 11 +- .../assets/create/lang/unfinished/pt_br.json | 11 +- .../assets/create/lang/unfinished/pt_pt.json | 11 +- .../assets/create/lang/unfinished/ro_ro.json | 11 +- .../assets/create/lang/unfinished/ru_ru.json | 11 +- .../assets/create/lang/unfinished/uk_ua.json | 11 +- .../assets/create/lang/unfinished/zh_cn.json | 11 +- .../assets/create/lang/unfinished/zh_tw.json | 11 +- ...ng_boots.json => copper_diving_boots.json} | 2 +- ..._helmet.json => copper_diving_helmet.json} | 2 +- .../models/item/netherite_backtank.json | 3 + .../item/netherite_backtank_placeable.json | 3 + .../models/item/netherite_diving_boots.json | 6 + .../models/item/netherite_diving_helmet.json | 6 + .../data/create/advancements/diving_suit.json | 2 +- .../create/advancements/diving_suit_lava.json | 2 +- ...ng_boots.json => copper_diving_boots.json} | 4 +- ..._helmet.json => copper_diving_helmet.json} | 4 +- .../blocks/netherite_backtank.json | 48 ++++ ...ng_boots.json => copper_diving_boots.json} | 2 +- ..._helmet.json => copper_diving_helmet.json} | 2 +- .../tags/items/pressurized_air_sources.json | 3 +- .../tags/blocks/mineable/pickaxe.json | 1 + .../com/simibubi/create/AllBlockPartials.java | 3 + .../java/com/simibubi/create/AllBlocks.java | 30 +-- .../java/com/simibubi/create/AllItems.java | 47 +++- .../com/simibubi/create/AllTileEntities.java | 16 +- .../com/simibubi/create/CreateClient.java | 4 +- .../contraptions/relays/belt/BeltBlock.java | 4 +- .../curiosities/armor/AllArmorMaterials.java | 3 +- ...rmorLayer.java => BacktankArmorLayer.java} | 73 +------ ...rBacktankBlock.java => BacktankBlock.java} | 43 ++-- ...ankInstance.java => BacktankInstance.java} | 7 +- .../curiosities/armor/BacktankItem.java | 111 ++++++++++ ...ankRenderer.java => BacktankRenderer.java} | 26 ++- ...ileEntity.java => BacktankTileEntity.java} | 35 +-- .../{BackTankUtil.java => BacktankUtil.java} | 2 +- .../curiosities/armor/BaseArmorItem.java | 24 ++ .../armor/CapacityEnchantment.java | 4 +- .../curiosities/armor/CopperArmorItem.java | 33 --- .../curiosities/armor/CopperBacktankItem.java | 91 -------- .../curiosities/armor/DivingBootsItem.java | 22 +- .../curiosities/armor/DivingHelmetItem.java | 30 ++- .../armor/NetheriteDivingHandler.java | 150 +++++++++++++ .../armor/RemainingAirOverlay.java | 66 ++++++ .../curiosities/tools/ExtendoGripItem.java | 10 +- .../curiosities/weapons/PotatoCannonItem.java | 10 +- .../simibubi/create/events/ClientEvents.java | 8 +- .../advancement/AllAdvancements.java | 4 +- .../foundation/data/BuilderTransformers.java | 31 +++ .../foundation/data/SharedProperties.java | 10 +- .../data/recipe/StandardRecipeGen.java | 4 +- .../create/foundation/mixin/EntityMixin.java | 22 ++ .../foundation/networking/AllPackets.java | 2 + .../foundation/utility/RemapHelper.java | 18 ++ .../block/netherite_backtank/block.json | 74 +++++++ .../block/netherite_backtank/block_cogs.json | 125 +++++++++++ .../netherite_backtank/block_shaft_input.json | 37 ++++ .../models/block/netherite_backtank/item.json | 205 ++++++++++++++++++ .../textures/block/netherite_backtank.png | Bin 0 -> 8119 bytes ...ving_boots.png => copper_diving_boots.png} | Bin ...ng_helmet.png => copper_diving_helmet.png} | Bin .../textures/item/netherite_diving_boots.png | Bin 0 -> 5875 bytes .../textures/item/netherite_diving_helmet.png | Bin 0 -> 5879 bytes .../{copper.png => copper_diving_layer_1.png} | Bin .../models/armor/netherite_diving_layer_1.png | Bin 0 -> 10002 bytes .../netherite_diving_layer_1_original.png | Bin 0 -> 9195 bytes .../netherite_diving_layer_1_overlay.png | Bin 0 -> 8724 bytes src/main/resources/create.mixins.json | 1 + 81 files changed, 1355 insertions(+), 410 deletions(-) create mode 100644 src/generated/resources/assets/create/blockstates/netherite_backtank.json rename src/generated/resources/assets/create/models/item/{diving_boots.json => copper_diving_boots.json} (56%) rename src/generated/resources/assets/create/models/item/{diving_helmet.json => copper_diving_helmet.json} (56%) create mode 100644 src/generated/resources/assets/create/models/item/netherite_backtank.json create mode 100644 src/generated/resources/assets/create/models/item/netherite_backtank_placeable.json create mode 100644 src/generated/resources/assets/create/models/item/netherite_diving_boots.json create mode 100644 src/generated/resources/assets/create/models/item/netherite_diving_helmet.json rename src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/{diving_boots.json => copper_diving_boots.json} (80%) rename src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/{diving_helmet.json => copper_diving_helmet.json} (80%) create mode 100644 src/generated/resources/data/create/loot_tables/blocks/netherite_backtank.json rename src/generated/resources/data/create/recipes/crafting/appliances/{diving_boots.json => copper_diving_boots.json} (85%) rename src/generated/resources/data/create/recipes/crafting/appliances/{diving_helmet.json => copper_diving_helmet.json} (83%) rename src/main/java/com/simibubi/create/content/curiosities/armor/{CopperBacktankArmorLayer.java => BacktankArmorLayer.java} (53%) rename src/main/java/com/simibubi/create/content/curiosities/armor/{CopperBacktankBlock.java => BacktankBlock.java} (79%) rename src/main/java/com/simibubi/create/content/curiosities/armor/{CopperBacktankInstance.java => BacktankInstance.java} (61%) create mode 100644 src/main/java/com/simibubi/create/content/curiosities/armor/BacktankItem.java rename src/main/java/com/simibubi/create/content/curiosities/armor/{CopperBacktankRenderer.java => BacktankRenderer.java} (65%) rename src/main/java/com/simibubi/create/content/curiosities/armor/{CopperBacktankTileEntity.java => BacktankTileEntity.java} (86%) rename src/main/java/com/simibubi/create/content/curiosities/armor/{BackTankUtil.java => BacktankUtil.java} (99%) create mode 100644 src/main/java/com/simibubi/create/content/curiosities/armor/BaseArmorItem.java delete mode 100644 src/main/java/com/simibubi/create/content/curiosities/armor/CopperArmorItem.java delete mode 100644 src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankItem.java create mode 100644 src/main/java/com/simibubi/create/content/curiosities/armor/NetheriteDivingHandler.java create mode 100644 src/main/java/com/simibubi/create/content/curiosities/armor/RemainingAirOverlay.java create mode 100644 src/main/java/com/simibubi/create/foundation/mixin/EntityMixin.java create mode 100644 src/main/resources/assets/create/models/block/netherite_backtank/block.json create mode 100644 src/main/resources/assets/create/models/block/netherite_backtank/block_cogs.json create mode 100644 src/main/resources/assets/create/models/block/netherite_backtank/block_shaft_input.json create mode 100644 src/main/resources/assets/create/models/block/netherite_backtank/item.json create mode 100644 src/main/resources/assets/create/textures/block/netherite_backtank.png rename src/main/resources/assets/create/textures/item/{diving_boots.png => copper_diving_boots.png} (100%) rename src/main/resources/assets/create/textures/item/{diving_helmet.png => copper_diving_helmet.png} (100%) create mode 100644 src/main/resources/assets/create/textures/item/netherite_diving_boots.png create mode 100644 src/main/resources/assets/create/textures/item/netherite_diving_helmet.png rename src/main/resources/assets/create/textures/models/armor/{copper.png => copper_diving_layer_1.png} (100%) create mode 100644 src/main/resources/assets/create/textures/models/armor/netherite_diving_layer_1.png create mode 100644 src/main/resources/assets/create/textures/models/armor/netherite_diving_layer_1_original.png create mode 100644 src/main/resources/assets/create/textures/models/armor/netherite_diving_layer_1_overlay.png diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index c345e5268..d4c0cfed2 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -302,6 +302,7 @@ e20699a753e7b12abd4a881de473d494a4ffeaa9 assets/create/blockstates/metal_girder_ 4e48ad0936647065c2322390e7c0fe115c853a98 assets/create/blockstates/millstone.json 468202df0802e17c75fcad0993daf1bc5300ca91 assets/create/blockstates/minecart_anchor.json b1126c191877cff86b4e2de83e1fcbd151451cb7 assets/create/blockstates/mysterious_cuckoo_clock.json +828fadf676c75b2a11235a106b018b0505d54ec5 assets/create/blockstates/netherite_backtank.json 304e5e7b2927f3e8e8b8c6932c35c5c6892d2eb5 assets/create/blockstates/nixie_tube.json 36e46e65003a8d0b8555fe5e8f8dc980d6559bc5 assets/create/blockstates/nozzle.json cf60989f63f02067fc4e4ad25033ac83167cdeb0 assets/create/blockstates/oak_window.json @@ -558,24 +559,24 @@ bf2b0310500213ff853c748c236eb5d01f61658e assets/create/blockstates/yellow_toolbo 5616dda664dd106d576848124fc0fc1de18d0fd3 assets/create/blockstates/yellow_valve_handle.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json -f85edc574ee6de0de7693ffb031266643db6724a assets/create/lang/en_ud.json -c219c77242e645f32704201dd80e279b3759b794 assets/create/lang/en_us.json -cf37534c3f98098f42b181083fd7cc1063ac2bbb assets/create/lang/unfinished/de_de.json -83d427726fdc38ec3c5b8c3c0f6f87f49d3e5ff3 assets/create/lang/unfinished/es_cl.json -d21caeb0cbe871e38dc101c34ab89ece3cbe2127 assets/create/lang/unfinished/es_es.json -2215688baa2b0beffe0c19f71a3238df1d01b0c1 assets/create/lang/unfinished/fr_fr.json -79484f2c3eba2b40f5d82ffdc3abeb3d2e6962d2 assets/create/lang/unfinished/it_it.json -d659570c9dc89653f03cd4cc82ed50db443638d8 assets/create/lang/unfinished/ja_jp.json -03c30521d9b1bc7a6eb85d2a59a4c4676dca581e assets/create/lang/unfinished/ko_kr.json -3a56d579d022cc1b20746e9d3a1483e6fa8fb4be assets/create/lang/unfinished/nl_nl.json -d5bfeacb442236c8b075fddb41364f85c8cb7feb assets/create/lang/unfinished/pl_pl.json -0f3f51d065d896a7e3b4abd8c2801fa3e8fbd8c3 assets/create/lang/unfinished/pt_br.json -9f2ec0b2f8fa9b380c7edb56bfb806bcce621cce assets/create/lang/unfinished/pt_pt.json -1f88f0d91bdf5c68224cb65249f77272771939c9 assets/create/lang/unfinished/ro_ro.json -928ac3ad2ab5e7fa3d582b8b956258c110bea868 assets/create/lang/unfinished/ru_ru.json -ed29ef4ae8f3633533485d56f7fa8cb77b790a0a assets/create/lang/unfinished/uk_ua.json -e5cf7b657be816bc15b331dd058f7ccdabee8c14 assets/create/lang/unfinished/zh_cn.json -316dae07f95fb65c984fe7c424b566eb8ddba5f9 assets/create/lang/unfinished/zh_tw.json +48a4f2df04e092f355a70994af169f8e3e23eff9 assets/create/lang/en_ud.json +697142f7df636ab2c1a4c51de518da1057f00b0d assets/create/lang/en_us.json +c748bf6346d594db47b012a642201878d6099f19 assets/create/lang/unfinished/de_de.json +d9a59a5dd0acf9f109e50536dfbb9cfd7231c02d assets/create/lang/unfinished/es_cl.json +5353625f2eeea67c3db572c76579ecceba08d07e assets/create/lang/unfinished/es_es.json +022da28dbe8794c9c70e2f56f51d194b59227910 assets/create/lang/unfinished/fr_fr.json +3d748d50b3e3452082470d4e13349e999a0ff121 assets/create/lang/unfinished/it_it.json +c1d7f5ab9f8796e9e83a98aebea60ddbd7066b5c assets/create/lang/unfinished/ja_jp.json +18dbdd8a353469d954159174c0c668af87e65a96 assets/create/lang/unfinished/ko_kr.json +783900eaad7ea3bd08c41817365025e52e8665a8 assets/create/lang/unfinished/nl_nl.json +004d34ba743ab206dea12ea4c85c00ae7cd3b191 assets/create/lang/unfinished/pl_pl.json +bbe3799eeaed6b3e00c9314607ade798b116c42b assets/create/lang/unfinished/pt_br.json +3eb467693daee7da7c40dd4a9f807ead7dd66b7e assets/create/lang/unfinished/pt_pt.json +e1cf6bdd38ab822f626e0b02c2d16637fdd2e622 assets/create/lang/unfinished/ro_ro.json +18e0fba5433d35ba1512f1c828c67443d60a0b86 assets/create/lang/unfinished/ru_ru.json +041e6917f64163ac0b8157b4aa5cbbbde9efd165 assets/create/lang/unfinished/uk_ua.json +2a5fb11b27476169d381e02f94073889b4e5fb7f assets/create/lang/unfinished/zh_cn.json +cf24b02eef0b51db5543f985e232cb84d0cc6a50 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 @@ -1680,6 +1681,8 @@ dcb09deae110077bcddf090996b51cc66e9a7de3 assets/create/models/item/cogwheel.json 10397036fc0bb1e18a767cfd7b19b10d805a83fe assets/create/models/item/copper_backtank.json 3652f8f7b454940050f090ab32d38e04b93e14f8 assets/create/models/item/copper_backtank_placeable.json 759bcb5fe7dfdd628716f9b4ff19a5ab00393381 assets/create/models/item/copper_casing.json +16182c4c32b11b370cf5b1116250cf3dda838954 assets/create/models/item/copper_diving_boots.json +dc517e70cee9c5d74edfedd49ac43a67fe258c1b assets/create/models/item/copper_diving_helmet.json 599845f2382da5b43a3c610f6ed7a87c032e1c6a assets/create/models/item/copper_ladder.json 751324b03f657f4166460eb10a64dae47cb97bd4 assets/create/models/item/copper_nugget.json 177dafb51d70c55ec62036332868efed4e01f353 assets/create/models/item/copper_sheet.json @@ -1839,8 +1842,6 @@ f786a43e296d9f10d7c302fe3ae9cddf4ba9984e assets/create/models/item/dark_oak_wind e0ecc0a20cf9dd54ccfc48e0041d5220b2c8316e assets/create/models/item/diorite_pillar.json 0ff9267a39783dce5e0aa59e78088c64337ad6ee assets/create/models/item/display_board.json c89ab6316518a19974cbed73edb54aaaafd073f5 assets/create/models/item/display_link.json -6006f88e56d74a3fd75a9dddb25af39075e0482b assets/create/models/item/diving_boots.json -df8cfe7e8eb527329094396e11222e9097e309d7 assets/create/models/item/diving_helmet.json 4b2af721dccfcf4e5b5a7b0f64f295d7cfd27f69 assets/create/models/item/dough.json c25cd4d5cdf67b0d7e15f5a56c63e6bf35fe2917 assets/create/models/item/dripstone_pillar.json 5c45bf31bc4b6d2c6482318f19a660ad949d796b assets/create/models/item/electron_tube.json @@ -1941,6 +1942,10 @@ f8d0d4b2a890ea7a69ab0c390947b48fe0478d3f assets/create/models/item/mechanical_pi 363c5a2b8ac945b676c838cdf7b0494c3ab13599 assets/create/models/item/minecart_contraption.json 01e3fda31e549a3b6a1e5e615b59478e8f06f16a assets/create/models/item/minecart_coupling.json dae5cffa4e1263d6a113469f79fba8695fa8232a assets/create/models/item/mysterious_cuckoo_clock.json +cfacabb82a073bb03845f88397e04496128e0889 assets/create/models/item/netherite_backtank.json +3652f8f7b454940050f090ab32d38e04b93e14f8 assets/create/models/item/netherite_backtank_placeable.json +cae57da9a495dec4a17e4452111332ee5e0967ca assets/create/models/item/netherite_diving_boots.json +507ea9c5eac8c381ab99b6236ab26ca953388d8c assets/create/models/item/netherite_diving_helmet.json bafe601f186e868819da3d29f7be7dc96f9ba790 assets/create/models/item/nixie_tube.json 366a60447bbbd61eb25aecf191a01e8d9417ad61 assets/create/models/item/nozzle.json 7a336a340f3e4927d7a35f9d79e8a03693b802aa assets/create/models/item/oak_window.json @@ -2238,8 +2243,8 @@ d53e397aef8dc2fc674f6f1c7a059a17678ec56c data/create/advancements/cuckoo_clock.j 27c72072683dad1a8ca9976a58367c965ca35fe7 data/create/advancements/deployer.json b30ed29c6e69d0964e810a470a8725bf9496e9b5 data/create/advancements/display_board_0.json 92fdb65633cf93b7aca5f359abeb5a9ec715ae40 data/create/advancements/display_link.json -12a4c76b2d1eff364ed15926711fdf5a79957899 data/create/advancements/diving_suit.json -9e3fc44ae8997b03881fddd3938397cac3f580e1 data/create/advancements/diving_suit_lava.json +0c6d98542523d90ff3848c07ee6fd4963c85ed2c data/create/advancements/diving_suit.json +50d2f42e9d63b5dff964c60800997ebd26a736f6 data/create/advancements/diving_suit_lava.json ebf21bebdeb29fc7f1ffa078123256241921681f data/create/advancements/drain.json f87f17fb29afda4fc46a81b5c3967bd21c068e36 data/create/advancements/ejector_maxed.json 0c19f535f04e653e0263ab9c3e9f04a203fa6765 data/create/advancements/encased_fan.json @@ -2319,9 +2324,9 @@ c2ca0ac0d670fa4d7e8150ba6e314de2881248b6 data/create/advancements/recipes/create f605ac221fbd565152f8e987beb7697299588da2 data/create/advancements/recipes/create.base/copper_tile_stairs_from_copper_tiles_stonecutting.json 5190d5c155ebd9a670dc8271e4920a048e633d25 data/create/advancements/recipes/create.base/copper_tiles_from_plates_copper_stonecutting.json 376bda381f3dedb52b03eb1504b103d8ddd1b672 data/create/advancements/recipes/create.base/crafting/appliances/copper_backtank.json +9833d16405f8c51646590e98588fb410f96d9523 data/create/advancements/recipes/create.base/crafting/appliances/copper_diving_boots.json +680c982dd1d3c45bed4d390fc0da5042750c157a data/create/advancements/recipes/create.base/crafting/appliances/copper_diving_helmet.json 265a953eaac909fd2817c6dc3d1a08b376579a25 data/create/advancements/recipes/create.base/crafting/appliances/crafting_blueprint.json -29a77555e4d9eb1c8d4740f95b784fe0e53c72b1 data/create/advancements/recipes/create.base/crafting/appliances/diving_boots.json -638f93712e176fa3ef5cd6ecaf8dac4eebe1cd1e data/create/advancements/recipes/create.base/crafting/appliances/diving_helmet.json fa2e18298f7710465d9b0798a69288e846c646fd data/create/advancements/recipes/create.base/crafting/appliances/dough.json a9b163744b1c494d07ec256d0367884f9601176d data/create/advancements/recipes/create.base/crafting/appliances/linked_controller.json c4769d7ac9c537eb4409b02883e89d0930514a8b data/create/advancements/recipes/create.base/crafting/appliances/tree_fertilizer.json @@ -3676,6 +3681,7 @@ afdff197c9d1a6940e988c00435135f9705fd0e5 data/create/loot_tables/blocks/metal_gi b83a90fbe83906b171fc0de6bdc2d9aa3a8c542e data/create/loot_tables/blocks/millstone.json 5c1df8443043b3fe3b665dba348e2ff188bcbe31 data/create/loot_tables/blocks/minecart_anchor.json 1e73d28fdd2e54910074aeadbe5617425a8ae656 data/create/loot_tables/blocks/mysterious_cuckoo_clock.json +a5fa8fdc10efe534e5c7d8bdb687f226b39f63ef data/create/loot_tables/blocks/netherite_backtank.json 2e21a06c0d671e543bffecb0b67d97b51fa83ddc data/create/loot_tables/blocks/nixie_tube.json f6b4095a518a01081f3663d7268d67063bdb44ee data/create/loot_tables/blocks/nozzle.json d378be8f13fc7ed625813eae3a50b68e8706a297 data/create/loot_tables/blocks/oak_window.json @@ -3981,9 +3987,9 @@ bea832822e0e5f0048eb94649641ea541e11f943 data/create/recipes/copper_shingles_fro 15da07234ee005be984f060520d0cf87bca672f5 data/create/recipes/copper_tile_stairs_from_copper_tiles_stonecutting.json 10fdc13f5b2b745e13e6e4e949a07ceaf4544a26 data/create/recipes/copper_tiles_from_plates_copper_stonecutting.json eb18d5972484418fa5a768633e68688ad20d2bd7 data/create/recipes/crafting/appliances/copper_backtank.json +5771562086710eb5a3a05d464989d2f23d6c5e86 data/create/recipes/crafting/appliances/copper_diving_boots.json +ec38ddb44e4bf8eaaba6f9d27e8469234fc98528 data/create/recipes/crafting/appliances/copper_diving_helmet.json c077375d16b4505e52548613fbc9356993556e6b data/create/recipes/crafting/appliances/crafting_blueprint.json -cba3566f09234b9cd17d8bc87dc87b2f779214e9 data/create/recipes/crafting/appliances/diving_boots.json -3e6bbbd6aa2b1373e9d6063d48560e4b547a5a5b data/create/recipes/crafting/appliances/diving_helmet.json edf96556bb2357f54fd398fe573641afa15239b2 data/create/recipes/crafting/appliances/dough.json 75cdbd88973a8ca943ebe890153b01a344b96b01 data/create/recipes/crafting/appliances/linked_controller.json 7b5f863dda3d05a79cb85943a178eba0bd8a7dc7 data/create/recipes/crafting/appliances/slime_ball.json @@ -5647,7 +5653,7 @@ c98ffdc2780c2a7690c590f46f014aeee7b0b504 data/create/tags/items/create_ingots.js 4480f211f4a37bfee193eba945bc9f5a8d2c6e34 data/create/tags/items/crushed_ores.json 67385d5198d0796ec8f0d2c6ae144c672f4317a1 data/create/tags/items/modded_stripped_logs.json 27a1074a88a7b939c811341086afece325ed724c data/create/tags/items/modded_stripped_wood.json -7973972edb524683ef365bc103fcfcde0858a854 data/create/tags/items/pressurized_air_sources.json +8c8f6658ee72bdea2fcef77bade7bfa48de784c8 data/create/tags/items/pressurized_air_sources.json bce28787b0271382842823d04a977912a88b01c2 data/create/tags/items/sandpaper.json 6cdeeac1689f7b5bfd9bc40b462143d8eaf3ad0b data/create/tags/items/seats.json 0f4276a6b7da5f4dee8909802e6717a4c97f0555 data/create/tags/items/sleepers.json @@ -5726,7 +5732,7 @@ e16d74571ae10007f06f3b86ddf05d3ca9b73559 data/minecraft/tags/blocks/doors.json 69f596fcb065e26b02ce246760432b5174191b76 data/minecraft/tags/blocks/impermeable.json 2db7759fe036160c14c6ed19a68604ca16f4de60 data/minecraft/tags/blocks/lush_ground_replaceable.json 71480793b5e5ac5eb33c5271118c62227a2769d8 data/minecraft/tags/blocks/mineable/axe.json -77511f0fca91aa40c8b2566bf9bfb78964a56db3 data/minecraft/tags/blocks/mineable/pickaxe.json +f24ab07c09d7c0cb237944099cac4e3ca1c0844c 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/netherite_backtank.json b/src/generated/resources/assets/create/blockstates/netherite_backtank.json new file mode 100644 index 000000000..c8113d106 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/netherite_backtank.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,waterlogged=false": { + "model": "create:block/netherite_backtank/block" + }, + "facing=south,waterlogged=false": { + "model": "create:block/netherite_backtank/block", + "y": 180 + }, + "facing=west,waterlogged=false": { + "model": "create:block/netherite_backtank/block", + "y": 270 + }, + "facing=east,waterlogged=false": { + "model": "create:block/netherite_backtank/block", + "y": 90 + }, + "facing=north,waterlogged=true": { + "model": "create:block/netherite_backtank/block" + }, + "facing=south,waterlogged=true": { + "model": "create:block/netherite_backtank/block", + "y": 180 + }, + "facing=west,waterlogged=true": { + "model": "create:block/netherite_backtank/block", + "y": 270 + }, + "facing=east,waterlogged=true": { + "model": "create:block/netherite_backtank/block", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index d57821dd5..61918052c 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -303,6 +303,7 @@ "block.create.millstone": "\u01DDuo\u0287s\u05DF\u05DF\u0131W", "block.create.minecart_anchor": "\u0279o\u0265\u0254u\u2C6F \u0287\u0279\u0250\u0254\u01DDu\u0131W", "block.create.mysterious_cuckoo_clock": "\u029E\u0254o\u05DF\u0186 oo\u029E\u0254n\u0186", + "block.create.netherite_backtank": "\u029Eu\u0250\u0287\u029E\u0254\u0250\u15FA \u01DD\u0287\u0131\u0279\u01DD\u0265\u0287\u01DDN", "block.create.nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N", "block.create.nozzle": "\u01DD\u05DFzzoN", "block.create.oak_window": "\u028Dopu\u0131M \u029E\u0250O", @@ -589,6 +590,8 @@ "item.create.cinder_flour": "\u0279no\u05DF\u2132 \u0279\u01DDpu\u0131\u0186", "item.create.copper_backtank": "\u029Eu\u0250\u0287\u029E\u0254\u0250\u15FA \u0279\u01DDddo\u0186", "item.create.copper_backtank_placeable": "\u01DD\u05DFq\u0250\u01DD\u0254\u0250\u05DF\u0500 \u029Eu\u0250\u0287\u029E\u0254\u0250\u15FA \u0279\u01DDddo\u0186", + "item.create.copper_diving_boots": "s\u0287oo\u15FA bu\u0131\u028C\u0131\u15E1 \u0279\u01DDddo\u0186", + "item.create.copper_diving_helmet": "\u0287\u01DD\u026F\u05DF\u01DDH bu\u0131\u028C\u0131\u15E1 \u0279\u01DDddo\u0186", "item.create.copper_nugget": "\u0287\u01DDbbnN \u0279\u01DDddo\u0186", "item.create.copper_sheet": "\u0287\u01DD\u01DD\u0265S \u0279\u01DDddo\u0186", "item.create.crafter_slot_cover": "\u0279\u01DD\u028Co\u0186 \u0287o\u05DFS \u0279\u01DD\u0287\u025F\u0250\u0279\u0186", @@ -607,8 +610,6 @@ "item.create.crushed_tin_ore": "\u01DD\u0279O u\u0131\u27D8 p\u01DD\u0265sn\u0279\u0186", "item.create.crushed_uranium_ore": "\u01DD\u0279O \u026Fn\u0131u\u0250\u0279\u2229 p\u01DD\u0265sn\u0279\u0186", "item.create.crushed_zinc_ore": "\u01DD\u0279O \u0254u\u0131Z p\u01DD\u0265sn\u0279\u0186", - "item.create.diving_boots": "s\u0287oo\u15FA bu\u0131\u028C\u0131\u15E1", - "item.create.diving_helmet": "\u0287\u01DD\u026F\u05DF\u01DDH bu\u0131\u028C\u0131\u15E1", "item.create.dough": "\u0265bno\u15E1", "item.create.electron_tube": "\u01DDqn\u27D8 uo\u0279\u0287\u0254\u01DD\u05DF\u018E", "item.create.empty_blaze_burner": "\u0279\u01DDu\u0279n\u15FA \u01DDz\u0250\u05DF\u15FA \u028E\u0287d\u026F\u018E", @@ -628,6 +629,10 @@ "item.create.linked_controller": "\u0279\u01DD\u05DF\u05DFo\u0279\u0287uo\u0186 p\u01DD\u029Eu\u0131\uA780", "item.create.minecart_contraption": "uo\u0131\u0287d\u0250\u0279\u0287uo\u0186 \u0287\u0279\u0250\u0254\u01DDu\u0131W", "item.create.minecart_coupling": "bu\u0131\u05DFdno\u0186 \u0287\u0279\u0250\u0254\u01DDu\u0131W", + "item.create.netherite_backtank": "\u029Eu\u0250\u0287\u029E\u0254\u0250\u15FA \u01DD\u0287\u0131\u0279\u01DD\u0265\u0287\u01DDN", + "item.create.netherite_backtank_placeable": "\u01DD\u05DFq\u0250\u01DD\u0254\u0250\u05DF\u0500 \u029Eu\u0250\u0287\u029E\u0254\u0250\u15FA \u01DD\u0287\u0131\u0279\u01DD\u0265\u0287\u01DDN", + "item.create.netherite_diving_boots": "s\u0287oo\u15FA bu\u0131\u028C\u0131\u15E1 \u01DD\u0287\u0131\u0279\u01DD\u0265\u0287\u01DDN", + "item.create.netherite_diving_helmet": "\u0287\u01DD\u026F\u05DF\u01DDH bu\u0131\u028C\u0131\u15E1 \u01DD\u0287\u0131\u0279\u01DD\u0265\u0287\u01DDN", "item.create.polished_rose_quartz": "z\u0287\u0279\u0250n\u1F49 \u01DDso\u1D1A p\u01DD\u0265s\u0131\u05DFo\u0500", "item.create.potato_cannon": "uouu\u0250\u0186 o\u0287\u0250\u0287o\u0500", "item.create.powdered_obsidian": "u\u0250\u0131p\u0131sqO p\u01DD\u0279\u01DDp\u028Do\u0500", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index f29227a7a..29ad1b200 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -306,6 +306,7 @@ "block.create.millstone": "Millstone", "block.create.minecart_anchor": "Minecart Anchor", "block.create.mysterious_cuckoo_clock": "Cuckoo Clock", + "block.create.netherite_backtank": "Netherite Backtank", "block.create.nixie_tube": "Nixie Tube", "block.create.nozzle": "Nozzle", "block.create.oak_window": "Oak Window", @@ -596,6 +597,8 @@ "item.create.cinder_flour": "Cinder Flour", "item.create.copper_backtank": "Copper Backtank", "item.create.copper_backtank_placeable": "Copper Backtank Placeable", + "item.create.copper_diving_boots": "Copper Diving Boots", + "item.create.copper_diving_helmet": "Copper Diving Helmet", "item.create.copper_nugget": "Copper Nugget", "item.create.copper_sheet": "Copper Sheet", "item.create.crafter_slot_cover": "Crafter Slot Cover", @@ -614,8 +617,6 @@ "item.create.crushed_tin_ore": "Crushed Tin Ore", "item.create.crushed_uranium_ore": "Crushed Uranium Ore", "item.create.crushed_zinc_ore": "Crushed Zinc Ore", - "item.create.diving_boots": "Diving Boots", - "item.create.diving_helmet": "Diving Helmet", "item.create.dough": "Dough", "item.create.electron_tube": "Electron Tube", "item.create.empty_blaze_burner": "Empty Blaze Burner", @@ -635,6 +636,10 @@ "item.create.linked_controller": "Linked Controller", "item.create.minecart_contraption": "Minecart Contraption", "item.create.minecart_coupling": "Minecart Coupling", + "item.create.netherite_backtank": "Netherite Backtank", + "item.create.netherite_backtank_placeable": "Netherite Backtank Placeable", + "item.create.netherite_diving_boots": "Netherite Diving Boots", + "item.create.netherite_diving_helmet": "Netherite Diving Helmet", "item.create.polished_rose_quartz": "Polished Rose Quartz", "item.create.potato_cannon": "Potato Cannon", "item.create.powdered_obsidian": "Powdered Obsidian", 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 ec0ab8c0d..b3b47f45f 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: 842", + "_": "Missing Localizations: 849", "_": "->------------------------] Game Elements [------------------------<-", @@ -307,6 +307,7 @@ "block.create.millstone": "Mahlstein", "block.create.minecart_anchor": "Lorenanker", "block.create.mysterious_cuckoo_clock": "Kuckucksuhr", + "block.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", "block.create.nixie_tube": "Nixie-Röhre", "block.create.nozzle": "Düse", "block.create.oak_window": "Eichenfenster", @@ -597,6 +598,8 @@ "item.create.cinder_flour": "Aschenmehl", "item.create.copper_backtank": "Kupferner Rückentank", "item.create.copper_backtank_placeable": "Platzierbarer Kupferner Rückentank", + "item.create.copper_diving_boots": "UNLOCALIZED: Copper Diving Boots", + "item.create.copper_diving_helmet": "UNLOCALIZED: Copper Diving Helmet", "item.create.copper_nugget": "Kupferklumpen", "item.create.copper_sheet": "Kupferblech", "item.create.crafter_slot_cover": "Handwerkseinheit Slot Abdeckung", @@ -615,8 +618,6 @@ "item.create.crushed_tin_ore": "Zerkleinertes Zinnerz", "item.create.crushed_uranium_ore": "Zerkleinertes Uranerz", "item.create.crushed_zinc_ore": "Zerkleinertes Zinkerz", - "item.create.diving_boots": "Tauchstiefel", - "item.create.diving_helmet": "Tauchhelm", "item.create.dough": "Teig", "item.create.electron_tube": "Elektronenröhre", "item.create.empty_blaze_burner": "Leerer Lohenbrenner", @@ -636,6 +637,10 @@ "item.create.linked_controller": "Fernsteuerung", "item.create.minecart_contraption": "Loren Vorrichtung", "item.create.minecart_coupling": "Lorenkupplung", + "item.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", + "item.create.netherite_backtank_placeable": "UNLOCALIZED: Netherite Backtank Placeable", + "item.create.netherite_diving_boots": "UNLOCALIZED: Netherite Diving Boots", + "item.create.netherite_diving_helmet": "UNLOCALIZED: Netherite Diving Helmet", "item.create.polished_rose_quartz": "Polierter Rosenquarz", "item.create.potato_cannon": "Kartoffelkanone", "item.create.powdered_obsidian": "Pulverisierter Obsidian", 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 b1cb4225f..3b5d6ac16 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: 988", + "_": "Missing Localizations: 995", "_": "->------------------------] Game Elements [------------------------<-", @@ -307,6 +307,7 @@ "block.create.millstone": "Piedra de Molino", "block.create.minecart_anchor": "Ancla de Vagoneta", "block.create.mysterious_cuckoo_clock": "Reloj Cu-Cú", + "block.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", "block.create.nixie_tube": "Tubo Nixie", "block.create.nozzle": "Boquilla", "block.create.oak_window": "Ventana de Roble", @@ -597,6 +598,8 @@ "item.create.cinder_flour": "Harina de Cenizas", "item.create.copper_backtank": "Mochila-Tanque de Cobre", "item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable", + "item.create.copper_diving_boots": "UNLOCALIZED: Copper Diving Boots", + "item.create.copper_diving_helmet": "UNLOCALIZED: Copper Diving Helmet", "item.create.copper_nugget": "Nugget de Cobre", "item.create.copper_sheet": "Plancha de Cobre", "item.create.crafter_slot_cover": "Cubre Ranuras", @@ -615,8 +618,6 @@ "item.create.crushed_tin_ore": "Mineral de Estaño Triturado", "item.create.crushed_uranium_ore": "Mineral de Uranio Triturado", "item.create.crushed_zinc_ore": "Mineral de Zinc Triturado", - "item.create.diving_boots": "Botas de Buceo", - "item.create.diving_helmet": "Casco de Buceo", "item.create.dough": "Masa", "item.create.electron_tube": "Tubo de Electrones", "item.create.empty_blaze_burner": "Quemador Blaze Vacío", @@ -636,6 +637,10 @@ "item.create.linked_controller": "Controlador Vinculable", "item.create.minecart_contraption": "Contrapción de Vagoneta", "item.create.minecart_coupling": "Acoplamiento de Vagonetas", + "item.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", + "item.create.netherite_backtank_placeable": "UNLOCALIZED: Netherite Backtank Placeable", + "item.create.netherite_diving_boots": "UNLOCALIZED: Netherite Diving Boots", + "item.create.netherite_diving_helmet": "UNLOCALIZED: Netherite Diving Helmet", "item.create.polished_rose_quartz": "Cuarzo Rosa Pulido", "item.create.potato_cannon": "Cañón de Papas", "item.create.powdered_obsidian": "Obsidiana Pulverizada", 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 9866e0ed4..8d6b84ed3 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: 8", + "_": "Missing Localizations: 15", "_": "->------------------------] Game Elements [------------------------<-", @@ -307,6 +307,7 @@ "block.create.millstone": "Piedra de molino", "block.create.minecart_anchor": "Ancla de vagonetas", "block.create.mysterious_cuckoo_clock": "Reloj de cuco", + "block.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", "block.create.nixie_tube": "Tubo Nixie", "block.create.nozzle": "Boquilla", "block.create.oak_window": "Ventana de roble", @@ -597,6 +598,8 @@ "item.create.cinder_flour": "Harina del Nether", "item.create.copper_backtank": "Depósito trasero de cobre", "item.create.copper_backtank_placeable": "Depósito de cobre colocable", + "item.create.copper_diving_boots": "UNLOCALIZED: Copper Diving Boots", + "item.create.copper_diving_helmet": "UNLOCALIZED: Copper Diving Helmet", "item.create.copper_nugget": "Pepita de cobre", "item.create.copper_sheet": "Lámina de cobre", "item.create.crafter_slot_cover": "Tapa de ranura del ensamblador mecánico", @@ -615,8 +618,6 @@ "item.create.crushed_tin_ore": "Mineral de estaño molido", "item.create.crushed_uranium_ore": "Mineral de uranio molido", "item.create.crushed_zinc_ore": "Mineral de cinc molido", - "item.create.diving_boots": "Botas de buceo", - "item.create.diving_helmet": "Casco de buceo", "item.create.dough": "Masa", "item.create.electron_tube": "Tubo de electrones", "item.create.empty_blaze_burner": "Quemador de blaze vacío", @@ -636,6 +637,10 @@ "item.create.linked_controller": "Controlador enlazado", "item.create.minecart_contraption": "Artefacto móvil de vagoneta", "item.create.minecart_coupling": "Acoplamiento de vagoneta", + "item.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", + "item.create.netherite_backtank_placeable": "UNLOCALIZED: Netherite Backtank Placeable", + "item.create.netherite_diving_boots": "UNLOCALIZED: Netherite Diving Boots", + "item.create.netherite_diving_helmet": "UNLOCALIZED: Netherite Diving Helmet", "item.create.polished_rose_quartz": "Cuarzo rosado pulido", "item.create.potato_cannon": "Cañón de patatas", "item.create.powdered_obsidian": "Polvo de obsidiana", 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 a40d4bfce..153b506c2 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: 2139", + "_": "Missing Localizations: 2144", "_": "->------------------------] Game Elements [------------------------<-", @@ -307,6 +307,7 @@ "block.create.millstone": "UNLOCALIZED: Millstone", "block.create.minecart_anchor": "UNLOCALIZED: Minecart Anchor", "block.create.mysterious_cuckoo_clock": "UNLOCALIZED: Cuckoo Clock", + "block.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", "block.create.nixie_tube": "UNLOCALIZED: Nixie Tube", "block.create.nozzle": "Buse", "block.create.oak_window": "UNLOCALIZED: Oak Window", @@ -597,6 +598,8 @@ "item.create.cinder_flour": "Farine de braise", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", "item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable", + "item.create.copper_diving_boots": "UNLOCALIZED: Copper Diving Boots", + "item.create.copper_diving_helmet": "UNLOCALIZED: Copper Diving Helmet", "item.create.copper_nugget": "Pépite de cuivre", "item.create.copper_sheet": "Plaques de cuivre", "item.create.crafter_slot_cover": "Couvercle", @@ -615,8 +618,6 @@ "item.create.crushed_tin_ore": "Etain concassé", "item.create.crushed_uranium_ore": "Uranium concassé", "item.create.crushed_zinc_ore": "Zinc concassé", - "item.create.diving_boots": "UNLOCALIZED: Diving Boots", - "item.create.diving_helmet": "UNLOCALIZED: Diving Helmet", "item.create.dough": "Pâte", "item.create.electron_tube": "Tube électronique", "item.create.empty_blaze_burner": "Brûleur à blaze vide", @@ -636,6 +637,10 @@ "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "Engin de wagonnet", "item.create.minecart_coupling": "Lien pour wagonnet", + "item.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", + "item.create.netherite_backtank_placeable": "UNLOCALIZED: Netherite Backtank Placeable", + "item.create.netherite_diving_boots": "UNLOCALIZED: Netherite Diving Boots", + "item.create.netherite_diving_helmet": "UNLOCALIZED: Netherite Diving Helmet", "item.create.polished_rose_quartz": "Quartz rose poli", "item.create.potato_cannon": "UNLOCALIZED: Potato Cannon", "item.create.powdered_obsidian": "Obsidienne concassée", 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 39c5e5ac9..449be154b 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: 2", + "_": "Missing Localizations: 9", "_": "->------------------------] Game Elements [------------------------<-", @@ -307,6 +307,7 @@ "block.create.millstone": "Macina", "block.create.minecart_anchor": "Ancora per carrello da miniera", "block.create.mysterious_cuckoo_clock": "Orologio a cucù misterioso", + "block.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", "block.create.nixie_tube": "Tubo Nixie", "block.create.nozzle": "Dispersore", "block.create.oak_window": "Finestra di quercia", @@ -597,6 +598,8 @@ "item.create.cinder_flour": "Cenere farinosa", "item.create.copper_backtank": "Zaino serbatoio", "item.create.copper_backtank_placeable": "Zaino serbatoio posizionabile", + "item.create.copper_diving_boots": "UNLOCALIZED: Copper Diving Boots", + "item.create.copper_diving_helmet": "UNLOCALIZED: Copper Diving Helmet", "item.create.copper_nugget": "Pepita di rame", "item.create.copper_sheet": "Lamiera di rame", "item.create.crafter_slot_cover": "Copertura per slot di fabbricazione", @@ -615,8 +618,6 @@ "item.create.crushed_tin_ore": "Stagno grezzo frantumato", "item.create.crushed_uranium_ore": "Uranio grezzo frantumato", "item.create.crushed_zinc_ore": "Zinco grezzo frantumato", - "item.create.diving_boots": "Stivali da immersione", - "item.create.diving_helmet": "Elmo da immersione", "item.create.dough": "Impasto", "item.create.electron_tube": "Tubo a vuoto", "item.create.empty_blaze_burner": "Inceneritore vuoto", @@ -636,6 +637,10 @@ "item.create.linked_controller": "Pulsantiera di comando", "item.create.minecart_contraption": "Macchinario con carrello da miniera", "item.create.minecart_coupling": "Aggancio per carrelli da miniera", + "item.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", + "item.create.netherite_backtank_placeable": "UNLOCALIZED: Netherite Backtank Placeable", + "item.create.netherite_diving_boots": "UNLOCALIZED: Netherite Diving Boots", + "item.create.netherite_diving_helmet": "UNLOCALIZED: Netherite Diving Helmet", "item.create.polished_rose_quartz": "Quarzo rosa levigato", "item.create.potato_cannon": "Cannone a patate", "item.create.powdered_obsidian": "Ossidiana in polvere", 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 29408f90f..d95da9a6d 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: 4", + "_": "Missing Localizations: 11", "_": "->------------------------] Game Elements [------------------------<-", @@ -307,6 +307,7 @@ "block.create.millstone": "石臼", "block.create.minecart_anchor": "トロッコアンカー", "block.create.mysterious_cuckoo_clock": "鳩時計", + "block.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", "block.create.nixie_tube": "ニキシー管", "block.create.nozzle": "ノズル", "block.create.oak_window": "オークの窓", @@ -597,6 +598,8 @@ "item.create.cinder_flour": "ネザーラックの粉", "item.create.copper_backtank": "銅のバックタンク", "item.create.copper_backtank_placeable": "設置可能な銅のバックタンク", + "item.create.copper_diving_boots": "UNLOCALIZED: Copper Diving Boots", + "item.create.copper_diving_helmet": "UNLOCALIZED: Copper Diving Helmet", "item.create.copper_nugget": "銅塊", "item.create.copper_sheet": "銅板", "item.create.crafter_slot_cover": "クラフタースロットカバー", @@ -615,8 +618,6 @@ "item.create.crushed_tin_ore": "砕いた錫鉱石", "item.create.crushed_uranium_ore": "砕いたウラン鉱石", "item.create.crushed_zinc_ore": "砕いた亜鉛鉱石", - "item.create.diving_boots": "潜水ブーツ", - "item.create.diving_helmet": "潜水ヘルメット", "item.create.dough": "生地", "item.create.electron_tube": "電子管", "item.create.empty_blaze_burner": "空のブレイズバーナー", @@ -636,6 +637,10 @@ "item.create.linked_controller": "リンクコントローラー", "item.create.minecart_contraption": "からくりトロッコ", "item.create.minecart_coupling": "トロッコ連結器", + "item.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", + "item.create.netherite_backtank_placeable": "UNLOCALIZED: Netherite Backtank Placeable", + "item.create.netherite_diving_boots": "UNLOCALIZED: Netherite Diving Boots", + "item.create.netherite_diving_helmet": "UNLOCALIZED: Netherite Diving Helmet", "item.create.polished_rose_quartz": "磨かれたローズクォーツ", "item.create.potato_cannon": "ポテトキャノン", "item.create.powdered_obsidian": "黒曜石の粉", 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 92e403ed6..c6999e6f2 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: 8", + "_": "Missing Localizations: 15", "_": "->------------------------] Game Elements [------------------------<-", @@ -307,6 +307,7 @@ "block.create.millstone": "맷돌", "block.create.minecart_anchor": "광산 수레 정박기", "block.create.mysterious_cuckoo_clock": "뻐꾸기 시계", + "block.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", "block.create.nixie_tube": "닉시관", "block.create.nozzle": "노즐", "block.create.oak_window": "참나무 유리창", @@ -597,6 +598,8 @@ "item.create.cinder_flour": "잿가루", "item.create.copper_backtank": "구리 산소통", "item.create.copper_backtank_placeable": "구리 산소통", + "item.create.copper_diving_boots": "UNLOCALIZED: Copper Diving Boots", + "item.create.copper_diving_helmet": "UNLOCALIZED: Copper Diving Helmet", "item.create.copper_nugget": "구리 조각", "item.create.copper_sheet": "구리 판", "item.create.crafter_slot_cover": "조합기 슬롯 덮개", @@ -615,8 +618,6 @@ "item.create.crushed_tin_ore": "분쇄된 주석 광석", "item.create.crushed_uranium_ore": "분쇄된 우라늄 광석", "item.create.crushed_zinc_ore": "분쇄된 아연 광석", - "item.create.diving_boots": "다이빙 부츠", - "item.create.diving_helmet": "다이빙 헬멧", "item.create.dough": "반죽", "item.create.electron_tube": "전지 튜브", "item.create.empty_blaze_burner": "빈 블레이즈 버너", @@ -636,6 +637,10 @@ "item.create.linked_controller": "레드스톤 링크 조작기", "item.create.minecart_contraption": "광산 수레 구조물", "item.create.minecart_coupling": "광산 수레 커플링", + "item.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", + "item.create.netherite_backtank_placeable": "UNLOCALIZED: Netherite Backtank Placeable", + "item.create.netherite_diving_boots": "UNLOCALIZED: Netherite Diving Boots", + "item.create.netherite_diving_helmet": "UNLOCALIZED: Netherite Diving Helmet", "item.create.polished_rose_quartz": "윤나는 장밋빛 석영", "item.create.potato_cannon": "감자포", "item.create.powdered_obsidian": "흑요석 가루", 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 319e3974f..8ad555c4e 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: 2487", + "_": "Missing Localizations: 2492", "_": "->------------------------] Game Elements [------------------------<-", @@ -307,6 +307,7 @@ "block.create.millstone": "UNLOCALIZED: Millstone", "block.create.minecart_anchor": "UNLOCALIZED: Minecart Anchor", "block.create.mysterious_cuckoo_clock": "UNLOCALIZED: Cuckoo Clock", + "block.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", "block.create.nixie_tube": "UNLOCALIZED: Nixie Tube", "block.create.nozzle": "UNLOCALIZED: Nozzle", "block.create.oak_window": "UNLOCALIZED: Oak Window", @@ -597,6 +598,8 @@ "item.create.cinder_flour": "UNLOCALIZED: Cinder Flour", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", "item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable", + "item.create.copper_diving_boots": "UNLOCALIZED: Copper Diving Boots", + "item.create.copper_diving_helmet": "UNLOCALIZED: Copper Diving Helmet", "item.create.copper_nugget": "Koper klompje", "item.create.copper_sheet": "UNLOCALIZED: Copper Sheet", "item.create.crafter_slot_cover": "UNLOCALIZED: Crafter Slot Cover", @@ -615,8 +618,6 @@ "item.create.crushed_tin_ore": "UNLOCALIZED: Crushed Tin Ore", "item.create.crushed_uranium_ore": "UNLOCALIZED: Crushed Uranium Ore", "item.create.crushed_zinc_ore": "UNLOCALIZED: Crushed Zinc Ore", - "item.create.diving_boots": "UNLOCALIZED: Diving Boots", - "item.create.diving_helmet": "UNLOCALIZED: Diving Helmet", "item.create.dough": "Deeg", "item.create.electron_tube": "UNLOCALIZED: Electron Tube", "item.create.empty_blaze_burner": "UNLOCALIZED: Empty Blaze Burner", @@ -636,6 +637,10 @@ "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "UNLOCALIZED: Minecart Contraption", "item.create.minecart_coupling": "UNLOCALIZED: Minecart Coupling", + "item.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", + "item.create.netherite_backtank_placeable": "UNLOCALIZED: Netherite Backtank Placeable", + "item.create.netherite_diving_boots": "UNLOCALIZED: Netherite Diving Boots", + "item.create.netherite_diving_helmet": "UNLOCALIZED: Netherite Diving Helmet", "item.create.polished_rose_quartz": "UNLOCALIZED: Polished Rose Quartz", "item.create.potato_cannon": "UNLOCALIZED: Potato Cannon", "item.create.powdered_obsidian": "UNLOCALIZED: Powdered Obsidian", 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 be600d683..61a9f4c2c 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: 12", + "_": "Missing Localizations: 19", "_": "->------------------------] Game Elements [------------------------<-", @@ -307,6 +307,7 @@ "block.create.millstone": "Młynek", "block.create.minecart_anchor": "Kotwica wagonikowa", "block.create.mysterious_cuckoo_clock": "Zegar z kukułką", + "block.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", "block.create.nixie_tube": "Lampa cyfrowa", "block.create.nozzle": "Dysza", "block.create.oak_window": "Dębowe okno", @@ -597,6 +598,8 @@ "item.create.cinder_flour": "Rozżarzona mąka", "item.create.copper_backtank": "Miedziany zbiornik w plecaku", "item.create.copper_backtank_placeable": "Stacjonarny miedziany zbiornik w plecaku", + "item.create.copper_diving_boots": "UNLOCALIZED: Copper Diving Boots", + "item.create.copper_diving_helmet": "UNLOCALIZED: Copper Diving Helmet", "item.create.copper_nugget": "Bryłka miedzi", "item.create.copper_sheet": "Arkusz miedzi", "item.create.crafter_slot_cover": "Przykrywka na slot stołu rzemieślniczego", @@ -615,8 +618,6 @@ "item.create.crushed_tin_ore": "Rozkruszona ruda cyny", "item.create.crushed_uranium_ore": "Rozkruszona ruda uranu", "item.create.crushed_zinc_ore": "Rozkruszona ruda cynku", - "item.create.diving_boots": "Buty do nurkowania", - "item.create.diving_helmet": "Hełm do nurkowania", "item.create.dough": "Ciasto", "item.create.electron_tube": "Lampa elektronowa", "item.create.empty_blaze_burner": "Pusty płomienny palnik", @@ -636,6 +637,10 @@ "item.create.linked_controller": "Zdalny sterownik", "item.create.minecart_contraption": "Maszyna w wagoniku", "item.create.minecart_coupling": "Łącznik wagoników", + "item.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", + "item.create.netherite_backtank_placeable": "UNLOCALIZED: Netherite Backtank Placeable", + "item.create.netherite_diving_boots": "UNLOCALIZED: Netherite Diving Boots", + "item.create.netherite_diving_helmet": "UNLOCALIZED: Netherite Diving Helmet", "item.create.polished_rose_quartz": "Wypolerowany różowy kwarc", "item.create.potato_cannon": "Armata na ziemniaki", "item.create.powdered_obsidian": "Sproszkowany obsydian", 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 4be946869..16f4e6c88 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: 1331", + "_": "Missing Localizations: 1338", "_": "->------------------------] Game Elements [------------------------<-", @@ -307,6 +307,7 @@ "block.create.millstone": "Pedra de Moer", "block.create.minecart_anchor": "Ancóra de carrinho de Mina", "block.create.mysterious_cuckoo_clock": "Relógio cuckoo", + "block.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", "block.create.nixie_tube": "Tubo Nixie", "block.create.nozzle": "Bocal", "block.create.oak_window": "janela de carvalho", @@ -597,6 +598,8 @@ "item.create.cinder_flour": "Farinha de Netherrack", "item.create.copper_backtank": "Tanque Traseiro de cobre", "item.create.copper_backtank_placeable": "Tanque de cobre traseiro colocável", + "item.create.copper_diving_boots": "UNLOCALIZED: Copper Diving Boots", + "item.create.copper_diving_helmet": "UNLOCALIZED: Copper Diving Helmet", "item.create.copper_nugget": "Pepita de Cobre", "item.create.copper_sheet": "Chapa de Cobre", "item.create.crafter_slot_cover": "Cobertura do slot de fabricador", @@ -615,8 +618,6 @@ "item.create.crushed_tin_ore": "Minério de Estanho Esmagado", "item.create.crushed_uranium_ore": "Urânio Esmagado", "item.create.crushed_zinc_ore": "Minério de Zinco Esmagado", - "item.create.diving_boots": "Botas de Mergulhador", - "item.create.diving_helmet": "Capacete de Mergulhador", "item.create.dough": "Massa de pão", "item.create.electron_tube": "Tubo de Elétron", "item.create.empty_blaze_burner": "Queimador de Blaze Vazio", @@ -636,6 +637,10 @@ "item.create.linked_controller": "Controle conectado", "item.create.minecart_contraption": "Engenhoca de Carrinho de Mina", "item.create.minecart_coupling": "Acoplamento de Carrinho de Mina", + "item.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", + "item.create.netherite_backtank_placeable": "UNLOCALIZED: Netherite Backtank Placeable", + "item.create.netherite_diving_boots": "UNLOCALIZED: Netherite Diving Boots", + "item.create.netherite_diving_helmet": "UNLOCALIZED: Netherite Diving Helmet", "item.create.polished_rose_quartz": "Quartzo Rosa Polido", "item.create.potato_cannon": "Canhão de Batata", "item.create.powdered_obsidian": "Pó de Obsidiana", 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 a62924d83..13a80bf3e 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: 2196", + "_": "Missing Localizations: 2203", "_": "->------------------------] Game Elements [------------------------<-", @@ -307,6 +307,7 @@ "block.create.millstone": "Pedra de Moer", "block.create.minecart_anchor": "Ancóra de carrinho de Mina", "block.create.mysterious_cuckoo_clock": "Relógio cuckoo", + "block.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", "block.create.nixie_tube": "Tubo Nixie", "block.create.nozzle": "Bocal", "block.create.oak_window": "UNLOCALIZED: Oak Window", @@ -597,6 +598,8 @@ "item.create.cinder_flour": "Farinha de Netherrack", "item.create.copper_backtank": "Tanque Traseiro", "item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable", + "item.create.copper_diving_boots": "UNLOCALIZED: Copper Diving Boots", + "item.create.copper_diving_helmet": "UNLOCALIZED: Copper Diving Helmet", "item.create.copper_nugget": "Pepita de Cobre", "item.create.copper_sheet": "Chapa de Cobre", "item.create.crafter_slot_cover": "Cobertura do slot de fabricador", @@ -615,8 +618,6 @@ "item.create.crushed_tin_ore": "Minério de Estanho Esmagado", "item.create.crushed_uranium_ore": "Urânio Esmagado", "item.create.crushed_zinc_ore": "Minério de Zinco Esmagado", - "item.create.diving_boots": "Botas de Mergulhador", - "item.create.diving_helmet": "Capacete de Mergulhador", "item.create.dough": "Massa de pão", "item.create.electron_tube": "Tubo de Elétron", "item.create.empty_blaze_burner": "Queimador de Blaze Vazio", @@ -636,6 +637,10 @@ "item.create.linked_controller": "Controle conectado", "item.create.minecart_contraption": "Engenhoca de Carrino de Mina", "item.create.minecart_coupling": "Acoplamento de Carrinho de Mina", + "item.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", + "item.create.netherite_backtank_placeable": "UNLOCALIZED: Netherite Backtank Placeable", + "item.create.netherite_diving_boots": "UNLOCALIZED: Netherite Diving Boots", + "item.create.netherite_diving_helmet": "UNLOCALIZED: Netherite Diving Helmet", "item.create.polished_rose_quartz": "Quartzo Rosa Polido", "item.create.potato_cannon": "Canhão de Batata", "item.create.powdered_obsidian": "Pó de Obsidiana", 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 25aa3227a..b3dcde1d0 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: 655", + "_": "Missing Localizations: 662", "_": "->------------------------] Game Elements [------------------------<-", @@ -307,6 +307,7 @@ "block.create.millstone": "Moară De Piatră", "block.create.minecart_anchor": "Ancoră De Vagonet", "block.create.mysterious_cuckoo_clock": "Ceas Cucu", + "block.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", "block.create.nixie_tube": "Tub Nixie", "block.create.nozzle": "Plasă", "block.create.oak_window": "Sticlă De Stejar", @@ -597,6 +598,8 @@ "item.create.cinder_flour": "Făină De Zgură", "item.create.copper_backtank": "Backtank De Cupru", "item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable", + "item.create.copper_diving_boots": "UNLOCALIZED: Copper Diving Boots", + "item.create.copper_diving_helmet": "UNLOCALIZED: Copper Diving Helmet", "item.create.copper_nugget": "Pepită De Cupru", "item.create.copper_sheet": "Placă De Cupru", "item.create.crafter_slot_cover": "Capac De Meșter Mecanic", @@ -615,8 +618,6 @@ "item.create.crushed_tin_ore": "Minereu De Staniu Zdrobit", "item.create.crushed_uranium_ore": "Minereu De Uraniu Zdrobit", "item.create.crushed_zinc_ore": "Minereu De Zinc Zdrobit", - "item.create.diving_boots": "Bocanci De Scufundare", - "item.create.diving_helmet": "Cască De Scufundare", "item.create.dough": "Aluat", "item.create.electron_tube": "Tub De Electroni", "item.create.empty_blaze_burner": "Arzător De Dogoreală Gol", @@ -636,6 +637,10 @@ "item.create.linked_controller": "Controlor Legat", "item.create.minecart_contraption": "Invenție De Vagonet", "item.create.minecart_coupling": "Cuplare De Vagonet", + "item.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", + "item.create.netherite_backtank_placeable": "UNLOCALIZED: Netherite Backtank Placeable", + "item.create.netherite_diving_boots": "UNLOCALIZED: Netherite Diving Boots", + "item.create.netherite_diving_helmet": "UNLOCALIZED: Netherite Diving Helmet", "item.create.polished_rose_quartz": "Cuarț Roz Șlefuit", "item.create.potato_cannon": "Tun De Cartofi", "item.create.powdered_obsidian": "Praf De Obsidian", 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 28d2f0826..766fae846 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 0", + "_": "Missing Localizations: 7", "_": "->------------------------] Game Elements [------------------------<-", @@ -307,6 +307,7 @@ "block.create.millstone": "Жёрнов", "block.create.minecart_anchor": "Вагонеточная опора", "block.create.mysterious_cuckoo_clock": "Странные часы с кукушкой", + "block.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", "block.create.nixie_tube": "Газоразрядный индикатор", "block.create.nozzle": "Форсунка", "block.create.oak_window": "Дубовое окно", @@ -597,6 +598,8 @@ "item.create.cinder_flour": "Незераковая пыль", "item.create.copper_backtank": "Медный баллон", "item.create.copper_backtank_placeable": "Размещаемый медный баллон", + "item.create.copper_diving_boots": "UNLOCALIZED: Copper Diving Boots", + "item.create.copper_diving_helmet": "UNLOCALIZED: Copper Diving Helmet", "item.create.copper_nugget": "Кусочек меди", "item.create.copper_sheet": "Медный лист", "item.create.crafter_slot_cover": "Заглушка на слот крафтера", @@ -615,8 +618,6 @@ "item.create.crushed_tin_ore": "Дроблёная оловянная руда", "item.create.crushed_uranium_ore": "Дроблёная урановая руда", "item.create.crushed_zinc_ore": "Дроблёная цинковая руда", - "item.create.diving_boots": "Ботинки для дайвинга", - "item.create.diving_helmet": "Шлем для дайвинга", "item.create.dough": "Тесто", "item.create.electron_tube": "Электронная лампа", "item.create.empty_blaze_burner": "Пустая горелка всполоха", @@ -636,6 +637,10 @@ "item.create.linked_controller": "Контроллер связей", "item.create.minecart_contraption": "Вагонеточная штуковина", "item.create.minecart_coupling": "Соединитель вагонеток", + "item.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", + "item.create.netherite_backtank_placeable": "UNLOCALIZED: Netherite Backtank Placeable", + "item.create.netherite_diving_boots": "UNLOCALIZED: Netherite Diving Boots", + "item.create.netherite_diving_helmet": "UNLOCALIZED: Netherite Diving Helmet", "item.create.polished_rose_quartz": "Полированный розовый кварц", "item.create.potato_cannon": "Картофельная пушка", "item.create.powdered_obsidian": "Порошкообразный обсидиан", diff --git a/src/generated/resources/assets/create/lang/unfinished/uk_ua.json b/src/generated/resources/assets/create/lang/unfinished/uk_ua.json index 94152cfd6..16804a7a7 100644 --- a/src/generated/resources/assets/create/lang/unfinished/uk_ua.json +++ b/src/generated/resources/assets/create/lang/unfinished/uk_ua.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 986", + "_": "Missing Localizations: 993", "_": "->------------------------] Game Elements [------------------------<-", @@ -307,6 +307,7 @@ "block.create.millstone": "Жорна", "block.create.minecart_anchor": "Якір вагонетки", "block.create.mysterious_cuckoo_clock": "Годинник із зозулею", + "block.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", "block.create.nixie_tube": "Ніксі-труба", "block.create.nozzle": "Насадка", "block.create.oak_window": "Скло з дубом", @@ -597,6 +598,8 @@ "item.create.cinder_flour": "Борошно з незераку", "item.create.copper_backtank": "Мідний балон", "item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable", + "item.create.copper_diving_boots": "UNLOCALIZED: Copper Diving Boots", + "item.create.copper_diving_helmet": "UNLOCALIZED: Copper Diving Helmet", "item.create.copper_nugget": "Мідний самородок", "item.create.copper_sheet": "Мідний лист", "item.create.crafter_slot_cover": "Кришка слота крафта", @@ -615,8 +618,6 @@ "item.create.crushed_tin_ore": "Подрібнена олов'яна руда", "item.create.crushed_uranium_ore": "Подрібнена уранова руда", "item.create.crushed_zinc_ore": "Подрібнена цинкова руда", - "item.create.diving_boots": "Чоботи для дайвінгу", - "item.create.diving_helmet": "Шолом для дайвінгу", "item.create.dough": "Тісто", "item.create.electron_tube": "Електронна лампа", "item.create.empty_blaze_burner": "Пустий пальник блейза", @@ -636,6 +637,10 @@ "item.create.linked_controller": "Підключений контролер", "item.create.minecart_contraption": "Вагонеточна штуковина", "item.create.minecart_coupling": "З'єднувач вагонеток", + "item.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", + "item.create.netherite_backtank_placeable": "UNLOCALIZED: Netherite Backtank Placeable", + "item.create.netherite_diving_boots": "UNLOCALIZED: Netherite Diving Boots", + "item.create.netherite_diving_helmet": "UNLOCALIZED: Netherite Diving Helmet", "item.create.polished_rose_quartz": "Полірований рожевий кварц", "item.create.potato_cannon": "Картопляна гармата", "item.create.powdered_obsidian": "Обсідіановий порошок", 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 f4be7ff19..c00e6e6a7 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: 0", + "_": "Missing Localizations: 7", "_": "->------------------------] Game Elements [------------------------<-", @@ -307,6 +307,7 @@ "block.create.millstone": "石磨", "block.create.minecart_anchor": "矿车锚", "block.create.mysterious_cuckoo_clock": "布谷鸟闹钟", + "block.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", "block.create.nixie_tube": "辉光管", "block.create.nozzle": "分散网", "block.create.oak_window": "橡木窗户", @@ -597,6 +598,8 @@ "item.create.cinder_flour": "余烬面粉", "item.create.copper_backtank": "铜背罐", "item.create.copper_backtank_placeable": "可放置的铜背罐", + "item.create.copper_diving_boots": "UNLOCALIZED: Copper Diving Boots", + "item.create.copper_diving_helmet": "UNLOCALIZED: Copper Diving Helmet", "item.create.copper_nugget": "铜粒", "item.create.copper_sheet": "铜板", "item.create.crafter_slot_cover": "合成槽盖板", @@ -615,8 +618,6 @@ "item.create.crushed_tin_ore": "粉碎锡矿石", "item.create.crushed_uranium_ore": "粉碎铀矿石", "item.create.crushed_zinc_ore": "粉碎锌矿石", - "item.create.diving_boots": "潜水靴", - "item.create.diving_helmet": "潜水头盔", "item.create.dough": "面团", "item.create.electron_tube": "电子管", "item.create.empty_blaze_burner": "空的烈焰人燃烧室", @@ -636,6 +637,10 @@ "item.create.linked_controller": "无线红石遥控器", "item.create.minecart_contraption": "装配过的矿车", "item.create.minecart_coupling": "矿车连轴器", + "item.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", + "item.create.netherite_backtank_placeable": "UNLOCALIZED: Netherite Backtank Placeable", + "item.create.netherite_diving_boots": "UNLOCALIZED: Netherite Diving Boots", + "item.create.netherite_diving_helmet": "UNLOCALIZED: Netherite Diving Helmet", "item.create.polished_rose_quartz": "磨制玫瑰石英", "item.create.potato_cannon": "土豆加农炮", "item.create.powdered_obsidian": "黑曜石粉末", 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 1af6b480c..0724a1be1 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: 8", + "_": "Missing Localizations: 15", "_": "->------------------------] Game Elements [------------------------<-", @@ -307,6 +307,7 @@ "block.create.millstone": "石磨", "block.create.minecart_anchor": "礦車錨", "block.create.mysterious_cuckoo_clock": "神秘布穀鳥鐘", + "block.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", "block.create.nixie_tube": "真空管顯示器", "block.create.nozzle": "鼓風機噴嘴", "block.create.oak_window": "橡木窗戶", @@ -597,6 +598,8 @@ "item.create.cinder_flour": "地獄麵粉", "item.create.copper_backtank": "銅製後背包", "item.create.copper_backtank_placeable": "可放置的銅製後背包", + "item.create.copper_diving_boots": "UNLOCALIZED: Copper Diving Boots", + "item.create.copper_diving_helmet": "UNLOCALIZED: Copper Diving Helmet", "item.create.copper_nugget": "銅粒", "item.create.copper_sheet": "銅板", "item.create.crafter_slot_cover": "合成器蓋板", @@ -615,8 +618,6 @@ "item.create.crushed_tin_ore": "碎狀錫礦石", "item.create.crushed_uranium_ore": "碎狀鈾礦石", "item.create.crushed_zinc_ore": "碎狀鋅礦石", - "item.create.diving_boots": "潛水鞋", - "item.create.diving_helmet": "潛水頭盔", "item.create.dough": "麵團", "item.create.electron_tube": "真空管", "item.create.empty_blaze_burner": "空的烈焰使者動力爐", @@ -636,6 +637,10 @@ "item.create.linked_controller": "遙控器", "item.create.minecart_contraption": "裝修過的礦車", "item.create.minecart_coupling": "礦車連結器", + "item.create.netherite_backtank": "UNLOCALIZED: Netherite Backtank", + "item.create.netherite_backtank_placeable": "UNLOCALIZED: Netherite Backtank Placeable", + "item.create.netherite_diving_boots": "UNLOCALIZED: Netherite Diving Boots", + "item.create.netherite_diving_helmet": "UNLOCALIZED: Netherite Diving Helmet", "item.create.polished_rose_quartz": "拋光玫瑰石英", "item.create.potato_cannon": "馬鈴薯大砲", "item.create.powdered_obsidian": "黑曜石粉末", diff --git a/src/generated/resources/assets/create/models/item/diving_boots.json b/src/generated/resources/assets/create/models/item/copper_diving_boots.json similarity index 56% rename from src/generated/resources/assets/create/models/item/diving_boots.json rename to src/generated/resources/assets/create/models/item/copper_diving_boots.json index 88c9dccb5..fab121e04 100644 --- a/src/generated/resources/assets/create/models/item/diving_boots.json +++ b/src/generated/resources/assets/create/models/item/copper_diving_boots.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "create:item/diving_boots" + "layer0": "create:item/copper_diving_boots" } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/diving_helmet.json b/src/generated/resources/assets/create/models/item/copper_diving_helmet.json similarity index 56% rename from src/generated/resources/assets/create/models/item/diving_helmet.json rename to src/generated/resources/assets/create/models/item/copper_diving_helmet.json index f287c2ca8..e21e9b4ee 100644 --- a/src/generated/resources/assets/create/models/item/diving_helmet.json +++ b/src/generated/resources/assets/create/models/item/copper_diving_helmet.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "create:item/diving_helmet" + "layer0": "create:item/copper_diving_helmet" } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/netherite_backtank.json b/src/generated/resources/assets/create/models/item/netherite_backtank.json new file mode 100644 index 000000000..267a98e10 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/netherite_backtank.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/netherite_backtank/item" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/netherite_backtank_placeable.json b/src/generated/resources/assets/create/models/item/netherite_backtank_placeable.json new file mode 100644 index 000000000..ff77c281b --- /dev/null +++ b/src/generated/resources/assets/create/models/item/netherite_backtank_placeable.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/barrier" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/netherite_diving_boots.json b/src/generated/resources/assets/create/models/item/netherite_diving_boots.json new file mode 100644 index 000000000..ed1728d3f --- /dev/null +++ b/src/generated/resources/assets/create/models/item/netherite_diving_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "create:item/netherite_diving_boots" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/netherite_diving_helmet.json b/src/generated/resources/assets/create/models/item/netherite_diving_helmet.json new file mode 100644 index 000000000..fde66a4b6 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/netherite_diving_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "create:item/netherite_diving_helmet" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/diving_suit.json b/src/generated/resources/data/create/advancements/diving_suit.json index 94db68db5..aec7ce96e 100644 --- a/src/generated/resources/data/create/advancements/diving_suit.json +++ b/src/generated/resources/data/create/advancements/diving_suit.json @@ -2,7 +2,7 @@ "parent": "create:backtank", "display": { "icon": { - "item": "create:diving_helmet", + "item": "create:copper_diving_helmet", "nbt": "{Damage:0}" }, "title": { diff --git a/src/generated/resources/data/create/advancements/diving_suit_lava.json b/src/generated/resources/data/create/advancements/diving_suit_lava.json index 9f8b1630e..0c888be2c 100644 --- a/src/generated/resources/data/create/advancements/diving_suit_lava.json +++ b/src/generated/resources/data/create/advancements/diving_suit_lava.json @@ -2,7 +2,7 @@ "parent": "create:backtank", "display": { "icon": { - "item": "create:diving_helmet", + "item": "create:copper_diving_helmet", "nbt": "{Damage:0}" }, "title": { diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/diving_boots.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/copper_diving_boots.json similarity index 80% rename from src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/diving_boots.json rename to src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/copper_diving_boots.json index d0d7f07e1..d2a401732 100644 --- a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/diving_boots.json +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/copper_diving_boots.json @@ -2,7 +2,7 @@ "parent": "minecraft:recipes/root", "rewards": { "recipes": [ - "create:crafting/appliances/diving_boots" + "create:crafting/appliances/copper_diving_boots" ] }, "criteria": { @@ -21,7 +21,7 @@ "has_the_recipe": { "trigger": "minecraft:recipe_unlocked", "conditions": { - "recipe": "create:crafting/appliances/diving_boots" + "recipe": "create:crafting/appliances/copper_diving_boots" } } }, diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/diving_helmet.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/copper_diving_helmet.json similarity index 80% rename from src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/diving_helmet.json rename to src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/copper_diving_helmet.json index 5491317c8..36cadac5d 100644 --- a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/diving_helmet.json +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/copper_diving_helmet.json @@ -2,7 +2,7 @@ "parent": "minecraft:recipes/root", "rewards": { "recipes": [ - "create:crafting/appliances/diving_helmet" + "create:crafting/appliances/copper_diving_helmet" ] }, "criteria": { @@ -21,7 +21,7 @@ "has_the_recipe": { "trigger": "minecraft:recipe_unlocked", "conditions": { - "recipe": "create:crafting/appliances/diving_helmet" + "recipe": "create:crafting/appliances/copper_diving_helmet" } } }, diff --git a/src/generated/resources/data/create/loot_tables/blocks/netherite_backtank.json b/src/generated/resources/data/create/loot_tables/blocks/netherite_backtank.json new file mode 100644 index 000000000..4418da818 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/netherite_backtank.json @@ -0,0 +1,48 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Air", + "target": "Air", + "op": "replace" + } + ] + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Enchantments", + "target": "Enchantments", + "op": "replace" + } + ] + } + ], + "name": "create:netherite_backtank" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/appliances/diving_boots.json b/src/generated/resources/data/create/recipes/crafting/appliances/copper_diving_boots.json similarity index 85% rename from src/generated/resources/data/create/recipes/crafting/appliances/diving_boots.json rename to src/generated/resources/data/create/recipes/crafting/appliances/copper_diving_boots.json index 8ea573d10..76059a797 100644 --- a/src/generated/resources/data/create/recipes/crafting/appliances/diving_boots.json +++ b/src/generated/resources/data/create/recipes/crafting/appliances/copper_diving_boots.json @@ -14,6 +14,6 @@ } }, "result": { - "item": "create:diving_boots" + "item": "create:copper_diving_boots" } } \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/appliances/diving_helmet.json b/src/generated/resources/data/create/recipes/crafting/appliances/copper_diving_helmet.json similarity index 83% rename from src/generated/resources/data/create/recipes/crafting/appliances/diving_helmet.json rename to src/generated/resources/data/create/recipes/crafting/appliances/copper_diving_helmet.json index c2434ae43..68e63efc2 100644 --- a/src/generated/resources/data/create/recipes/crafting/appliances/diving_helmet.json +++ b/src/generated/resources/data/create/recipes/crafting/appliances/copper_diving_helmet.json @@ -13,6 +13,6 @@ } }, "result": { - "item": "create:diving_helmet" + "item": "create:copper_diving_helmet" } } \ No newline at end of file diff --git a/src/generated/resources/data/create/tags/items/pressurized_air_sources.json b/src/generated/resources/data/create/tags/items/pressurized_air_sources.json index 9c5cb97a4..3b3bbadd0 100644 --- a/src/generated/resources/data/create/tags/items/pressurized_air_sources.json +++ b/src/generated/resources/data/create/tags/items/pressurized_air_sources.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "create:copper_backtank" + "create:copper_backtank", + "create:netherite_backtank" ] } \ 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 3394d19b5..2280ba112 100644 --- a/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -157,6 +157,7 @@ "create:analog_lever", "create:placard", "create:copper_backtank", + "create:netherite_backtank", "create:peculiar_bell", "create:haunted_bell", "create:zinc_ore", diff --git a/src/main/java/com/simibubi/create/AllBlockPartials.java b/src/main/java/com/simibubi/create/AllBlockPartials.java index 88443bdc2..33819238d 100644 --- a/src/main/java/com/simibubi/create/AllBlockPartials.java +++ b/src/main/java/com/simibubi/create/AllBlockPartials.java @@ -102,6 +102,9 @@ public class AllBlockPartials { COPPER_BACKTANK_SHAFT = block("copper_backtank/block_shaft_input"), COPPER_BACKTANK_COGS = block("copper_backtank/block_cogs"), + NETHERITE_BACKTANK_SHAFT = block("netherite_backtank/block_shaft_input"), + NETHERITE_BACKTANK_COGS = block("netherite_backtank/block_cogs"), + TRACK_SEGMENT_LEFT = block("track/segment_left"), TRACK_SEGMENT_RIGHT = block("track/segment_right"), TRACK_TIE = block("track/tie"), GIRDER_SEGMENT_TOP = block("metal_girder/segment_top"), GIRDER_SEGMENT_MIDDLE = block("metal_girder/segment_middle"), diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index 1fd9d6434..43b7eb1c1 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -130,7 +130,7 @@ import com.simibubi.create.content.contraptions.relays.encased.GearshiftBlock; import com.simibubi.create.content.contraptions.relays.gauge.GaugeBlock; import com.simibubi.create.content.contraptions.relays.gauge.GaugeGenerator; import com.simibubi.create.content.contraptions.relays.gearbox.GearboxBlock; -import com.simibubi.create.content.curiosities.armor.CopperBacktankBlock; +import com.simibubi.create.content.curiosities.armor.BacktankBlock; import com.simibubi.create.content.curiosities.bell.HauntedBellBlock; import com.simibubi.create.content.curiosities.bell.HauntedBellMovementBehaviour; import com.simibubi.create.content.curiosities.bell.PeculiarBellBlock; @@ -1892,26 +1892,16 @@ public class AllBlocks { REGISTRATE.startSection(AllSections.CURIOSITIES); } - public static final BlockEntry COPPER_BACKTANK = - REGISTRATE.block("copper_backtank", CopperBacktankBlock::new) + public static final BlockEntry COPPER_BACKTANK = + REGISTRATE.block("copper_backtank", BacktankBlock::new) .initialProperties(SharedProperties::copperMetal) - .blockstate((c, p) -> p.horizontalBlock(c.getEntry(), AssetLookup.partialBaseModel(c, p))) - .transform(pickaxeOnly()) - .addLayer(() -> RenderType::cutoutMipped) - .transform(BlockStressDefaults.setImpact(4.0)) - .loot((lt, block) -> { - Builder builder = LootTable.lootTable(); - LootItemCondition.Builder survivesExplosion = ExplosionCondition.survivesExplosion(); - lt.add(block, builder.withPool(LootPool.lootPool() - .when(survivesExplosion) - .setRolls(ConstantValue.exactly(1)) - .add(LootItem.lootTableItem(AllItems.COPPER_BACKTANK.get()) - .apply(CopyNameFunction.copyName(CopyNameFunction.NameSource.BLOCK_ENTITY)) - .apply(CopyNbtFunction.copyData(ContextNbtProvider.BLOCK_ENTITY) - .copy("Air", "Air")) - .apply(CopyNbtFunction.copyData(ContextNbtProvider.BLOCK_ENTITY) - .copy("Enchantments", "Enchantments"))))); - }) + .transform(BuilderTransformers.backtank(AllItems.COPPER_BACKTANK::get)) + .register(); + + public static final BlockEntry NETHERITE_BACKTANK = + REGISTRATE.block("netherite_backtank", BacktankBlock::new) + .initialProperties(SharedProperties::netheriteMetal) + .transform(BuilderTransformers.backtank(AllItems.NETHERITE_BACKTANK::get)) .register(); public static final BlockEntry PECULIAR_BELL = diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index ad474e17c..347e969b2 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -38,9 +38,9 @@ import com.simibubi.create.content.curiosities.ExperienceNuggetItem; import com.simibubi.create.content.curiosities.RefinedRadianceItem; import com.simibubi.create.content.curiosities.ShadowSteelItem; import com.simibubi.create.content.curiosities.TreeFertilizerItem; -import com.simibubi.create.content.curiosities.armor.CopperArmorItem; -import com.simibubi.create.content.curiosities.armor.CopperBacktankItem; -import com.simibubi.create.content.curiosities.armor.CopperBacktankItem.CopperBacktankBlockItem; +import com.simibubi.create.content.curiosities.armor.AllArmorMaterials; +import com.simibubi.create.content.curiosities.armor.BacktankItem; +import com.simibubi.create.content.curiosities.armor.BacktankItem.BacktankBlockItem; import com.simibubi.create.content.curiosities.armor.DivingBootsItem; import com.simibubi.create.content.curiosities.armor.DivingHelmetItem; import com.simibubi.create.content.curiosities.symmetry.SymmetryWandItem; @@ -65,6 +65,7 @@ import com.tterrag.registrate.util.entry.ItemEntry; import net.minecraft.tags.ItemTags; import net.minecraft.tags.TagKey; import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.ArmorMaterials; import net.minecraft.world.item.Item; import net.minecraft.world.item.Rarity; import net.minecraftforge.common.Tags; @@ -239,22 +240,44 @@ public class AllItems { // wrapped by COPPER_BACKTANK for block placement uses. // must be registered as of 1.18.2 - public static final ItemEntry COPPER_BACKTANK_PLACEABLE = REGISTRATE - .item("copper_backtank_placeable", p -> new CopperBacktankBlockItem(AllBlocks.COPPER_BACKTANK.get(), p)) + public static final ItemEntry COPPER_BACKTANK_PLACEABLE = REGISTRATE + .item("copper_backtank_placeable", p -> new BacktankBlockItem(AllBlocks.COPPER_BACKTANK.get(), p)) .model((c, p) -> p.withExistingParent(c.getName(), p.mcLoc("item/barrier"))) .register(); - public static final ItemEntry + // wrapped by NETHERITE_BACKTANK for block placement uses. + // must be registered as of 1.18.2 + public static final ItemEntry NETHERITE_BACKTANK_PLACEABLE = REGISTRATE + .item("netherite_backtank_placeable", p -> new BacktankBlockItem(AllBlocks.NETHERITE_BACKTANK.get(), p)) + .model((c, p) -> p.withExistingParent(c.getName(), p.mcLoc("item/barrier"))) + .register(); - COPPER_BACKTANK = REGISTRATE.item("copper_backtank", p -> new CopperBacktankItem(p, COPPER_BACKTANK_PLACEABLE)) - .model(AssetLookup.customGenericItemModel("_", "item")) - .tag(AllItemTags.PRESSURIZED_AIR_SOURCES.tag) - .register(), + public static final ItemEntry - DIVING_HELMET = REGISTRATE.item("diving_helmet", DivingHelmetItem::new) + COPPER_BACKTANK = REGISTRATE.item("copper_backtank", p -> new BacktankItem(AllArmorMaterials.COPPER, p, Create.asResource("copper_diving"), COPPER_BACKTANK_PLACEABLE)) + .model(AssetLookup.customGenericItemModel("_", "item")) + .tag(AllItemTags.PRESSURIZED_AIR_SOURCES.tag) .register(), - DIVING_BOOTS = REGISTRATE.item("diving_boots", DivingBootsItem::new) + NETHERITE_BACKTANK = REGISTRATE.item("netherite_backtank", p -> new BacktankItem(ArmorMaterials.NETHERITE, p, Create.asResource("netherite_diving"), NETHERITE_BACKTANK_PLACEABLE)) + .model(AssetLookup.customGenericItemModel("_", "item")) + .tag(AllItemTags.PRESSURIZED_AIR_SOURCES.tag) + .register(); + + public static final ItemEntry + + COPPER_DIVING_HELMET = REGISTRATE.item("copper_diving_helmet", p -> new DivingHelmetItem(AllArmorMaterials.COPPER, p, Create.asResource("copper_diving"))) + .register(), + + NETHERITE_DIVING_HELMET = REGISTRATE.item("netherite_diving_helmet", p -> new DivingHelmetItem(ArmorMaterials.NETHERITE, p, Create.asResource("netherite_diving"))) + .register(); + + public static final ItemEntry + + COPPER_DIVING_BOOTS = REGISTRATE.item("copper_diving_boots", p -> new DivingBootsItem(AllArmorMaterials.COPPER, p, Create.asResource("copper_diving"))) + .register(), + + NETHERITE_DIVING_BOOTS = REGISTRATE.item("netherite_diving_boots", p -> new DivingBootsItem(ArmorMaterials.NETHERITE, p, Create.asResource("netherite_diving"))) .register(); public static final ItemEntry SAND_PAPER = REGISTRATE.item("sand_paper", SandPaperItem::new) diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index 3647ad732..bf29c1b89 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -127,9 +127,9 @@ import com.simibubi.create.content.contraptions.relays.gearbox.GearboxInstance; import com.simibubi.create.content.contraptions.relays.gearbox.GearboxRenderer; import com.simibubi.create.content.contraptions.relays.gearbox.GearboxTileEntity; import com.simibubi.create.content.contraptions.relays.gearbox.GearshiftTileEntity; -import com.simibubi.create.content.curiosities.armor.CopperBacktankInstance; -import com.simibubi.create.content.curiosities.armor.CopperBacktankRenderer; -import com.simibubi.create.content.curiosities.armor.CopperBacktankTileEntity; +import com.simibubi.create.content.curiosities.armor.BacktankInstance; +import com.simibubi.create.content.curiosities.armor.BacktankRenderer; +import com.simibubi.create.content.curiosities.armor.BacktankTileEntity; import com.simibubi.create.content.curiosities.bell.BellRenderer; import com.simibubi.create.content.curiosities.bell.HauntedBellTileEntity; import com.simibubi.create.content.curiosities.bell.PeculiarBellTileEntity; @@ -748,11 +748,11 @@ public class AllTileEntities { .register(); // Curiosities - public static final BlockEntityEntry COPPER_BACKTANK = Create.registrate() - .tileEntity("copper_backtank", CopperBacktankTileEntity::new) - .instance(() -> CopperBacktankInstance::new) - .validBlocks(AllBlocks.COPPER_BACKTANK) - .renderer(() -> CopperBacktankRenderer::new) + public static final BlockEntityEntry BACKTANK = Create.registrate() + .tileEntity("backtank", BacktankTileEntity::new) + .instance(() -> BacktankInstance::new) + .validBlocks(AllBlocks.COPPER_BACKTANK, AllBlocks.NETHERITE_BACKTANK) + .renderer(() -> BacktankRenderer::new) .register(); public static final BlockEntityEntry PECULIAR_BELL = Create.registrate() diff --git a/src/main/java/com/simibubi/create/CreateClient.java b/src/main/java/com/simibubi/create/CreateClient.java index d20076543..cb68f1a4a 100644 --- a/src/main/java/com/simibubi/create/CreateClient.java +++ b/src/main/java/com/simibubi/create/CreateClient.java @@ -7,7 +7,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.ren import com.simibubi.create.content.contraptions.components.structureMovement.render.SBBContraptionManager; import com.simibubi.create.content.contraptions.goggles.GoggleOverlayRenderer; import com.simibubi.create.content.contraptions.relays.encased.CasingConnectivity; -import com.simibubi.create.content.curiosities.armor.CopperBacktankArmorLayer; +import com.simibubi.create.content.curiosities.armor.RemainingAirOverlay; import com.simibubi.create.content.curiosities.bell.SoulPulseEffectHandler; import com.simibubi.create.content.curiosities.toolbox.ToolboxHandlerClient; import com.simibubi.create.content.curiosities.tools.BlueprintOverlayRenderer; @@ -97,7 +97,7 @@ public class CreateClient { private static void registerOverlays() { // Register overlays in reverse order - OverlayRegistry.registerOverlayAbove(ForgeIngameGui.AIR_LEVEL_ELEMENT, "Create's Remaining Air", CopperBacktankArmorLayer.REMAINING_AIR_OVERLAY); + OverlayRegistry.registerOverlayAbove(ForgeIngameGui.AIR_LEVEL_ELEMENT, "Create's Remaining Air", RemainingAirOverlay.INSTANCE); OverlayRegistry.registerOverlayAbove(ForgeIngameGui.EXPERIENCE_BAR_ELEMENT, "Create's Train Driver HUD", TrainHUD.OVERLAY); OverlayRegistry.registerOverlayAbove(ForgeIngameGui.HOTBAR_ELEMENT, "Create's Goggle Information", GoggleOverlayRenderer.OVERLAY); OverlayRegistry.registerOverlayAbove(ForgeIngameGui.HOTBAR_ELEMENT, "Create's Blueprints", BlueprintOverlayRenderer.OVERLAY); diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java index 8581b69ee..747699d80 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java @@ -20,6 +20,7 @@ import com.simibubi.create.content.contraptions.relays.belt.BeltSlicer.Feedback; import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity.CasingType; import com.simibubi.create.content.contraptions.relays.belt.transport.BeltMovementHandler.TransportedEntityInfo; import com.simibubi.create.content.contraptions.relays.belt.transport.BeltTunnelInteractionHandler; +import com.simibubi.create.content.curiosities.armor.DivingBootsItem; import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelBlock; import com.simibubi.create.content.schematics.ISpecialBlockItemRequirement; import com.simibubi.create.content.schematics.ItemRequirement; @@ -191,8 +192,7 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE AllSoundEvents.COPPER_ARMOR_EQUIP.getMainEvent(), 0.0F, 0.0F, + COPPER(Create.asResource("copper").toString(), 7, new int[] { 1, 3, 4, 2 }, 25, () -> AllSoundEvents.COPPER_ARMOR_EQUIP.getMainEvent(), 0.0F, 0.0F, () -> Ingredient.of(Items.COPPER_INGOT)) ; diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankArmorLayer.java b/src/main/java/com/simibubi/create/content/curiosities/armor/BacktankArmorLayer.java similarity index 53% rename from src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankArmorLayer.java rename to src/main/java/com/simibubi/create/content/curiosities/armor/BacktankArmorLayer.java index 67dffa2a8..6cec2efa5 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankArmorLayer.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/BacktankArmorLayer.java @@ -1,21 +1,13 @@ package com.simibubi.create.content.curiosities.armor; import com.mojang.blaze3d.vertex.PoseStack; -import com.simibubi.create.AllBlockPartials; -import com.simibubi.create.AllBlocks; -import com.simibubi.create.AllItems; -import com.simibubi.create.foundation.gui.element.GuiGameElement; import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; -import com.simibubi.create.foundation.utility.Color; -import com.simibubi.create.foundation.utility.Components; -import net.minecraft.client.Minecraft; import net.minecraft.client.model.EntityModel; import net.minecraft.client.model.HumanoidModel; -import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.Sheets; @@ -25,22 +17,13 @@ import net.minecraft.client.renderer.entity.LivingEntityRenderer; import net.minecraft.client.renderer.entity.RenderLayerParent; import net.minecraft.client.renderer.entity.layers.RenderLayer; import net.minecraft.core.Direction; -import net.minecraft.network.chat.Component; -import net.minecraft.tags.FluidTags; -import net.minecraft.util.StringUtil; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.Pose; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.GameType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.client.gui.ForgeIngameGui; -import net.minecraftforge.client.gui.IIngameOverlay; -public class CopperBacktankArmorLayer> extends RenderLayer { - - public static final IIngameOverlay REMAINING_AIR_OVERLAY = CopperBacktankArmorLayer::renderRemainingAirOverlay; - - public CopperBacktankArmorLayer(RenderLayerParent renderer) { +public class BacktankArmorLayer> extends RenderLayer { + public BacktankArmorLayer(RenderLayerParent renderer) { super(renderer); } @@ -49,8 +32,9 @@ public class CopperBacktankArmorLayer model = (HumanoidModel) entityModel; RenderType renderType = Sheets.cutoutBlockSheet(); - BlockState renderedState = AllBlocks.COPPER_BACKTANK.getDefaultState() - .setValue(CopperBacktankBlock.HORIZONTAL_FACING, Direction.SOUTH); + BlockState renderedState = item.getBlock().defaultBlockState() + .setValue(BacktankBlock.HORIZONTAL_FACING, Direction.SOUTH); SuperByteBuffer backtank = CachedBufferer.block(renderedState); - SuperByteBuffer cogs = CachedBufferer.partial(AllBlockPartials.COPPER_BACKTANK_COGS, renderedState); + SuperByteBuffer cogs = CachedBufferer.partial(BacktankRenderer.getCogsModel(renderedState), renderedState); ms.pushPose(); @@ -102,44 +86,7 @@ public class CopperBacktankArmorLayer livingRenderer = (LivingEntityRenderer) entityRenderer; if (!(livingRenderer.getModel() instanceof HumanoidModel)) return; - CopperBacktankArmorLayer layer = new CopperBacktankArmorLayer<>(livingRenderer); - livingRenderer.addLayer((CopperBacktankArmorLayer) layer); + BacktankArmorLayer layer = new BacktankArmorLayer<>(livingRenderer); + livingRenderer.addLayer((BacktankArmorLayer) layer); } - - public static void renderRemainingAirOverlay(ForgeIngameGui gui, PoseStack poseStack, float partialTicks, int width, int height) { - Minecraft mc = Minecraft.getInstance(); - if (mc.options.hideGui || mc.gameMode.getPlayerMode() == GameType.SPECTATOR) - return; - - LocalPlayer player = mc.player; - if (player == null) - return; - if (player.isCreative()) - return; - if (!player.getPersistentData() - .contains("VisualBacktankAir")) - return; - if (!player.isEyeInFluid(FluidTags.WATER)) - return; - - int timeLeft = player.getPersistentData() - .getInt("VisualBacktankAir"); - - poseStack.pushPose(); - - poseStack.translate(width / 2 + 90, height - 53, 0); - - Component text = Components.literal(StringUtil.formatTickDuration(timeLeft * 20)); - GuiGameElement.of(AllItems.COPPER_BACKTANK.asStack()) - .at(0, 0) - .render(poseStack); - int color = 0xFF_FFFFFF; - if (timeLeft < 60 && timeLeft % 2 == 0) { - color = Color.mixColors(0xFF_FF0000, color, Math.max(timeLeft / 60f, .25f)); - } - Minecraft.getInstance().font.drawShadow(poseStack, text, 16, 5, color); - - poseStack.popPose(); - } - } diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankBlock.java b/src/main/java/com/simibubi/create/content/curiosities/armor/BacktankBlock.java similarity index 79% rename from src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankBlock.java rename to src/main/java/com/simibubi/create/content/curiosities/armor/BacktankBlock.java index a83030faa..fa17a1b18 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankBlock.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/BacktankBlock.java @@ -3,7 +3,6 @@ package com.simibubi.create.content.curiosities.armor; import java.util.Optional; import com.simibubi.create.AllEnchantments; -import com.simibubi.create.AllItems; import com.simibubi.create.AllShapes; import com.simibubi.create.AllTileEntities; import com.simibubi.create.content.contraptions.base.HorizontalKineticBlock; @@ -46,12 +45,12 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraftforge.common.util.FakePlayer; -public class CopperBacktankBlock extends HorizontalKineticBlock - implements ITE, SimpleWaterloggedBlock { +public class BacktankBlock extends HorizontalKineticBlock + implements ITE, SimpleWaterloggedBlock { - public CopperBacktankBlock(Properties properties) { + public BacktankBlock(Properties properties) { super(properties); - registerDefaultState(super.defaultBlockState().setValue(BlockStateProperties.WATERLOGGED, false)); + registerDefaultState(defaultBlockState().setValue(BlockStateProperties.WATERLOGGED, false)); } @Override @@ -73,10 +72,10 @@ public class CopperBacktankBlock extends HorizontalKineticBlock public boolean hasAnalogOutputSignal(BlockState p_149740_1_) { return true; } - + @Override - public int getAnalogOutputSignal(BlockState p_180641_1_, Level world, BlockPos pos) { - return getTileEntityOptional(world, pos).map(CopperBacktankTileEntity::getComparatorOutput) + public int getAnalogOutputSignal(BlockState state, Level world, BlockPos pos) { + return getTileEntityOptional(world, pos).map(BacktankTileEntity::getComparatorOutput) .orElse(0); } @@ -90,10 +89,10 @@ public class CopperBacktankBlock extends HorizontalKineticBlock @Override public BlockState getStateForPlacement(BlockPlaceContext context) { - FluidState ifluidstate = context.getLevel() + FluidState fluidState = context.getLevel() .getFluidState(context.getClickedPos()); return super.getStateForPlacement(context).setValue(BlockStateProperties.WATERLOGGED, - Boolean.valueOf(ifluidstate.getType() == Fluids.WATER)); + fluidState.getType() == Fluids.WATER); } @Override @@ -125,8 +124,8 @@ public class CopperBacktankBlock extends HorizontalKineticBlock } @Override - public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand p_225533_5_, - BlockHitResult p_225533_6_) { + public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, + BlockHitResult hit) { if (player == null) return InteractionResult.PASS; if (player instanceof FakePlayer) @@ -148,16 +147,16 @@ public class CopperBacktankBlock extends HorizontalKineticBlock } @Override - public ItemStack getCloneItemStack(BlockGetter p_185473_1_, BlockPos p_185473_2_, BlockState p_185473_3_) { - ItemStack item = AllItems.COPPER_BACKTANK.asStack(); - Optional tileEntityOptional = getTileEntityOptional(p_185473_1_, p_185473_2_); + public ItemStack getCloneItemStack(BlockGetter blockGetter, BlockPos pos, BlockState state) { + ItemStack item = super.getCloneItemStack(blockGetter, pos, state); + Optional tileEntityOptional = getTileEntityOptional(blockGetter, pos); - int air = tileEntityOptional.map(CopperBacktankTileEntity::getAirLevel) + int air = tileEntityOptional.map(BacktankTileEntity::getAirLevel) .orElse(0); CompoundTag tag = item.getOrCreateTag(); tag.putInt("Air", air); - ListTag enchants = tileEntityOptional.map(CopperBacktankTileEntity::getEnchantmentTag) + ListTag enchants = tileEntityOptional.map(BacktankTileEntity::getEnchantmentTag) .orElse(new ListTag()); if (!enchants.isEmpty()) { ListTag enchantmentTagList = item.getEnchantmentTags(); @@ -165,7 +164,7 @@ public class CopperBacktankBlock extends HorizontalKineticBlock tag.put("Enchantments", enchantmentTagList); } - Component customName = tileEntityOptional.map(CopperBacktankTileEntity::getCustomName) + Component customName = tileEntityOptional.map(BacktankTileEntity::getCustomName) .orElse(null); if (customName != null) item.setHoverName(customName); @@ -179,13 +178,13 @@ public class CopperBacktankBlock extends HorizontalKineticBlock } @Override - public Class getTileEntityClass() { - return CopperBacktankTileEntity.class; + public Class getTileEntityClass() { + return BacktankTileEntity.class; } @Override - public BlockEntityType getTileEntityType() { - return AllTileEntities.COPPER_BACKTANK.get(); + public BlockEntityType getTileEntityType() { + return AllTileEntities.BACKTANK.get(); } @Override diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankInstance.java b/src/main/java/com/simibubi/create/content/curiosities/armor/BacktankInstance.java similarity index 61% rename from src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankInstance.java rename to src/main/java/com/simibubi/create/content/curiosities/armor/BacktankInstance.java index 26d1b9139..ccb5d1c69 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankInstance.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/BacktankInstance.java @@ -2,20 +2,19 @@ package com.simibubi.create.content.curiosities.armor; import com.jozufozu.flywheel.api.Instancer; import com.jozufozu.flywheel.api.MaterialManager; -import com.simibubi.create.AllBlockPartials; import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.base.SingleRotatingInstance; import com.simibubi.create.content.contraptions.base.flwdata.RotatingData; -public class CopperBacktankInstance extends SingleRotatingInstance { +public class BacktankInstance extends SingleRotatingInstance { - public CopperBacktankInstance(MaterialManager modelManager, KineticTileEntity tile) { + public BacktankInstance(MaterialManager modelManager, KineticTileEntity tile) { super(modelManager, tile); } @Override protected Instancer getModel() { - return getRotatingMaterial().getModel(AllBlockPartials.COPPER_BACKTANK_SHAFT, blockState); + return getRotatingMaterial().getModel(BacktankRenderer.getShaftModel(blockState), blockState); } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/BacktankItem.java b/src/main/java/com/simibubi/create/content/curiosities/armor/BacktankItem.java new file mode 100644 index 000000000..ce63ccc04 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/BacktankItem.java @@ -0,0 +1,111 @@ +package com.simibubi.create.content.curiosities.armor; + +import java.util.function.Supplier; + +import org.jetbrains.annotations.Nullable; + +import com.simibubi.create.content.curiosities.armor.CapacityEnchantment.ICapacityEnchantable; + +import net.minecraft.core.NonNullList; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.block.Block; + +public class BacktankItem extends BaseArmorItem implements ICapacityEnchantable { + public static final EquipmentSlot SLOT = EquipmentSlot.CHEST; + public static final int BAR_COLOR = 0xEFEFEF; + + private final Supplier blockItem; + + public BacktankItem(ArmorMaterial material, Properties properties, ResourceLocation textureLoc, Supplier copperBacktankPlaceable) { + super(material, SLOT, properties, textureLoc); + this.blockItem = copperBacktankPlaceable; + } + + @Nullable + public static BacktankItem getWornBy(Entity entity) { + if (!(entity instanceof LivingEntity livingEntity)) { + return null; + } + if (!(livingEntity.getItemBySlot(SLOT).getItem() instanceof BacktankItem item)) { + return null; + } + return item; + } + + @Override + public InteractionResult useOn(UseOnContext ctx) { + return blockItem.get() + .useOn(ctx); + } + + @Override + public boolean canBeDepleted() { + return false; + } + + @Override + public boolean isEnchantable(ItemStack p_77616_1_) { + return true; + } + + @Override + public void fillItemCategory(CreativeModeTab tab, NonNullList items) { + if (!allowdedIn(tab)) + return; + + ItemStack stack = new ItemStack(this); + CompoundTag nbt = new CompoundTag(); + nbt.putInt("Air", BacktankUtil.maxAirWithoutEnchants()); + stack.setTag(nbt); + items.add(stack); + } + + @Override + public boolean isBarVisible(ItemStack stack) { + return true; + } + + @Override + public int getBarWidth(ItemStack stack) { + return Math.round(13.0F * Mth.clamp(getRemainingAir(stack) / ((float) BacktankUtil.maxAir(stack)), 0, 1)); + } + + @Override + public int getBarColor(ItemStack stack) { + return BAR_COLOR; + } + + public Block getBlock() { + return blockItem.get().getBlock(); + } + + public static int getRemainingAir(ItemStack stack) { + CompoundTag orCreateTag = stack.getOrCreateTag(); + return orCreateTag.getInt("Air"); + } + + public static class BacktankBlockItem extends BlockItem { + public BacktankBlockItem(Block block, Properties properties) { + super(block, properties); + } + + @Override + public void fillItemCategory(CreativeModeTab group, NonNullList items) {} + + @Override + public String getDescriptionId() { + return this.getOrCreateDescriptionId(); + } + } +} diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankRenderer.java b/src/main/java/com/simibubi/create/content/curiosities/armor/BacktankRenderer.java similarity index 65% rename from src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankRenderer.java rename to src/main/java/com/simibubi/create/content/curiosities/armor/BacktankRenderer.java index fc7b1d87a..674e16691 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankRenderer.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/BacktankRenderer.java @@ -1,7 +1,9 @@ package com.simibubi.create.content.curiosities.armor; +import com.jozufozu.flywheel.core.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllBlockPartials; +import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; import com.simibubi.create.foundation.render.CachedBufferer; @@ -15,9 +17,8 @@ import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.BlockState; -public class CopperBacktankRenderer extends KineticTileEntityRenderer { - - public CopperBacktankRenderer(BlockEntityRendererProvider.Context context) { +public class BacktankRenderer extends KineticTileEntityRenderer { + public BacktankRenderer(BlockEntityRendererProvider.Context context) { super(context); } @@ -27,9 +28,9 @@ public class CopperBacktankRenderer extends KineticTileEntityRenderer { super.renderSafe(te, partialTicks, ms, buffer, light, overlay); BlockState blockState = te.getBlockState(); - SuperByteBuffer cogs = CachedBufferer.partial(AllBlockPartials.COPPER_BACKTANK_COGS, blockState); + SuperByteBuffer cogs = CachedBufferer.partial(getCogsModel(blockState), blockState); cogs.centre() - .rotateY(180 + AngleHelper.horizontalAngle(blockState.getValue(CopperBacktankBlock.HORIZONTAL_FACING))) + .rotateY(180 + AngleHelper.horizontalAngle(blockState.getValue(BacktankBlock.HORIZONTAL_FACING))) .unCentre() .translate(0, 6.5f / 16, 11f / 16) .rotate(Direction.EAST, @@ -41,7 +42,20 @@ public class CopperBacktankRenderer extends KineticTileEntityRenderer { @Override protected SuperByteBuffer getRotatedModel(KineticTileEntity te, BlockState state) { - return CachedBufferer.partial(AllBlockPartials.COPPER_BACKTANK_SHAFT, state); + return CachedBufferer.partial(getShaftModel(state), state); } + public static PartialModel getCogsModel(BlockState state) { + if (AllBlocks.NETHERITE_BACKTANK.has(state)) { + return AllBlockPartials.NETHERITE_BACKTANK_COGS; + } + return AllBlockPartials.COPPER_BACKTANK_COGS; + } + + public static PartialModel getShaftModel(BlockState state) { + if (AllBlocks.NETHERITE_BACKTANK.has(state)) { + return AllBlockPartials.NETHERITE_BACKTANK_SHAFT; + } + return AllBlockPartials.COPPER_BACKTANK_SHAFT; + } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankTileEntity.java b/src/main/java/com/simibubi/create/content/curiosities/armor/BacktankTileEntity.java similarity index 86% rename from src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankTileEntity.java rename to src/main/java/com/simibubi/create/content/curiosities/armor/BacktankTileEntity.java index da941de04..445a5e352 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankTileEntity.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/BacktankTileEntity.java @@ -2,9 +2,9 @@ package com.simibubi.create.content.curiosities.armor; import java.util.List; +import com.simibubi.create.AllBlocks; import com.simibubi.create.AllItems; import com.simibubi.create.AllSoundEvents; -import com.simibubi.create.Create; import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.particle.AirParticleData; import com.simibubi.create.foundation.advancement.AllAdvancements; @@ -27,33 +27,43 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.phys.Vec3; -public class CopperBacktankTileEntity extends KineticTileEntity implements Nameable { +public class BacktankTileEntity extends KineticTileEntity implements Nameable { public int airLevel; public int airLevelTimer; + private Component defaultName; private Component customName; private int capacityEnchantLevel; private ListTag enchantmentTag; - public CopperBacktankTileEntity(BlockEntityType typeIn, BlockPos pos, BlockState state) { - super(typeIn, pos, state); + public BacktankTileEntity(BlockEntityType type, BlockPos pos, BlockState state) { + super(type, pos, state); + defaultName = getDefaultName(state); enchantmentTag = new ListTag(); } - + + public static Component getDefaultName(BlockState state) { + if (AllBlocks.NETHERITE_BACKTANK.has(state)) { + AllItems.NETHERITE_BACKTANK.get().getDescription(); + } + + return AllItems.COPPER_BACKTANK.get().getDescription(); + } + @Override public void addBehaviours(List behaviours) { super.addBehaviours(behaviours); registerAwardables(behaviours, AllAdvancements.BACKTANK); } - + @Override public void onSpeedChanged(float previousSpeed) { super.onSpeedChanged(previousSpeed); if (getSpeed() != 0) award(AllAdvancements.BACKTANK); } - + @Override public void tick() { super.tick(); @@ -70,10 +80,10 @@ public class CopperBacktankTileEntity extends KineticTileEntity implements Namea return; } - int max = BackTankUtil.maxAir(capacityEnchantLevel); + int max = BacktankUtil.maxAir(capacityEnchantLevel); if (level.isClientSide) { Vec3 centerOf = VecHelper.getCenterOf(worldPosition); - Vec3 v = VecHelper.offsetRandomly(centerOf, Create.RANDOM, .65f); + Vec3 v = VecHelper.offsetRandomly(centerOf, level.random, .65f); Vec3 m = centerOf.subtract(v); if (airLevel != max) level.addParticle(new AirParticleData(1, .05f), v.x, v.y, v.z, m.x, m.y, m.z); @@ -95,7 +105,7 @@ public class CopperBacktankTileEntity extends KineticTileEntity implements Namea } public int getComparatorOutput() { - int max = BackTankUtil.maxAir(capacityEnchantLevel); + int max = BacktankUtil.maxAir(capacityEnchantLevel); return ComparatorUtil.fractionToRedstoneLevel(airLevel / (float) max); } @@ -120,7 +130,7 @@ public class CopperBacktankTileEntity extends KineticTileEntity implements Namea enchantmentTag = compound.getList("Enchantments", Tag.TAG_COMPOUND); if (compound.contains("CustomName", 8)) this.customName = Component.Serializer.fromJson(compound.getString("CustomName")); - if (prev != 0 && prev != airLevel && airLevel == BackTankUtil.maxAir(capacityEnchantLevel) && clientPacket) + if (prev != 0 && prev != airLevel && airLevel == BacktankUtil.maxAir(capacityEnchantLevel) && clientPacket) playFilledEffect(); } @@ -140,8 +150,7 @@ public class CopperBacktankTileEntity extends KineticTileEntity implements Namea @Override public Component getName() { return this.customName != null ? this.customName - : AllItems.COPPER_BACKTANK.get() - .getDescription(); + : defaultName; } public int getAirLevel() { diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/BackTankUtil.java b/src/main/java/com/simibubi/create/content/curiosities/armor/BacktankUtil.java similarity index 99% rename from src/main/java/com/simibubi/create/content/curiosities/armor/BackTankUtil.java rename to src/main/java/com/simibubi/create/content/curiosities/armor/BacktankUtil.java index ed12b472b..4be38619b 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/BackTankUtil.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/BacktankUtil.java @@ -24,7 +24,7 @@ import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -public class BackTankUtil { +public class BacktankUtil { public static ItemStack get(LivingEntity entity) { for (ItemStack itemStack : entity.getArmorSlots()) diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/BaseArmorItem.java b/src/main/java/com/simibubi/create/content/curiosities/armor/BaseArmorItem.java new file mode 100644 index 000000000..de5eb487b --- /dev/null +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/BaseArmorItem.java @@ -0,0 +1,24 @@ +package com.simibubi.create.content.curiosities.armor; + +import java.util.Locale; + +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.ItemStack; + +public class BaseArmorItem extends ArmorItem { + protected final ResourceLocation textureLoc; + + public BaseArmorItem(ArmorMaterial armorMaterial, EquipmentSlot slot, Properties properties, ResourceLocation textureLoc) { + super(armorMaterial, slot, properties.stacksTo(1)); + this.textureLoc = textureLoc; + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EquipmentSlot slot, String type) { + return String.format(Locale.ROOT, "%s:textures/models/armor/%s_layer_%d%s.png", textureLoc.getNamespace(), textureLoc.getPath(), slot == EquipmentSlot.LEGS ? 2 : 1, type == null ? "" : String.format(Locale.ROOT, "_%s", type)); + } +} diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CapacityEnchantment.java b/src/main/java/com/simibubi/create/content/curiosities/armor/CapacityEnchantment.java index 531e1bf4e..3d894e219 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CapacityEnchantment.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/CapacityEnchantment.java @@ -7,8 +7,8 @@ import net.minecraft.world.item.enchantment.EnchantmentCategory; public class CapacityEnchantment extends Enchantment { - public CapacityEnchantment(Rarity p_i46731_1_, EnchantmentCategory p_i46731_2_, EquipmentSlot[] p_i46731_3_) { - super(p_i46731_1_, p_i46731_2_, p_i46731_3_); + public CapacityEnchantment(Rarity rarity, EnchantmentCategory category, EquipmentSlot[] slots) { + super(rarity, category, slots); } @Override diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperArmorItem.java b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperArmorItem.java deleted file mode 100644 index 8b3220ad1..000000000 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperArmorItem.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.simibubi.create.content.curiosities.armor; - -import com.simibubi.create.Create; - -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.item.ArmorItem; -import net.minecraft.world.item.ItemStack; - -public class CopperArmorItem extends ArmorItem { - - public static final ResourceLocation TEXTURE = Create.asResource("textures/models/armor/copper.png"); - private static final String TEXTURE_STRING = TEXTURE.toString(); - - public CopperArmorItem(EquipmentSlot p_i48534_2_, Properties p_i48534_3_) { - super(AllArmorMaterials.COPPER, p_i48534_2_, p_i48534_3_.stacksTo(1)); - } - - public boolean isWornBy(Entity entity) { - if (!(entity instanceof LivingEntity)) - return false; - LivingEntity livingEntity = (LivingEntity) entity; - return livingEntity.getItemBySlot(slot).getItem() == this; - } - - @Override - public String getArmorTexture(ItemStack stack, Entity entity, EquipmentSlot slot, String type) { - return TEXTURE_STRING; - } - -} diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankItem.java b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankItem.java deleted file mode 100644 index eef4852c6..000000000 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankItem.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.simibubi.create.content.curiosities.armor; - -import com.simibubi.create.content.curiosities.armor.CapacityEnchantment.ICapacityEnchantable; -import com.tterrag.registrate.util.entry.ItemEntry; - -import net.minecraft.core.NonNullList; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.util.Mth; -import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.CreativeModeTab; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.context.UseOnContext; -import net.minecraft.world.level.block.Block; - -public class CopperBacktankItem extends CopperArmorItem implements ICapacityEnchantable { - - public static final int DURABILITY_BAR = 0xEFEFEF; - private ItemEntry blockItem; - - public CopperBacktankItem(Properties p_i48534_3_, ItemEntry copperBacktankPlaceable) { - super(EquipmentSlot.CHEST, p_i48534_3_); - this.blockItem = copperBacktankPlaceable; - } - - @Override - public InteractionResult useOn(UseOnContext p_195939_1_) { - return blockItem.get() - .useOn(p_195939_1_); - } - - @Override - public boolean canBeDepleted() { - return false; - } - - @Override - public boolean isEnchantable(ItemStack p_77616_1_) { - return true; - } - - @Override - public void fillItemCategory(CreativeModeTab p_150895_1_, NonNullList p_150895_2_) { - if (!allowdedIn(p_150895_1_)) - return; - - ItemStack stack = new ItemStack(this); - CompoundTag nbt = new CompoundTag(); - nbt.putInt("Air", BackTankUtil.maxAirWithoutEnchants()); - stack.setTag(nbt); - p_150895_2_.add(stack); - } - - @Override - public boolean isBarVisible(ItemStack stack) { - return true; - } - - @Override - public int getBarWidth(ItemStack stack) { - return Math.round(13.0F * Mth.clamp(getRemainingAir(stack) / ((float) BackTankUtil.maxAir(stack)), 0, 1)); - } - - @Override - public int getBarColor(ItemStack stack) { - return DURABILITY_BAR; - } - - public static int getRemainingAir(ItemStack stack) { - CompoundTag orCreateTag = stack.getOrCreateTag(); - return orCreateTag.getInt("Air"); - } - - public static class CopperBacktankBlockItem extends BlockItem { - - public CopperBacktankBlockItem(Block pBlock, Properties pProperties) { - super(pBlock, pProperties); - } - - @Override - public void fillItemCategory(CreativeModeTab pGroup, NonNullList pItems) {} - - @Override - public String getDescriptionId() { - return this.getOrCreateDescriptionId(); - } - - } - -} diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/DivingBootsItem.java b/src/main/java/com/simibubi/create/content/curiosities/armor/DivingBootsItem.java index 4f154a3fd..9b0abbed3 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/DivingBootsItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/DivingBootsItem.java @@ -1,22 +1,32 @@ package com.simibubi.create.content.curiosities.armor; -import com.simibubi.create.AllItems; import com.simibubi.create.foundation.utility.NBTHelper; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.Pose; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ArmorMaterial; import net.minecraft.world.phys.Vec3; import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; @EventBusSubscriber -public class DivingBootsItem extends CopperArmorItem { +public class DivingBootsItem extends BaseArmorItem { + public static final EquipmentSlot SLOT = EquipmentSlot.FEET; - public DivingBootsItem(Properties p_i48534_3_) { - super(EquipmentSlot.FEET, p_i48534_3_); + public DivingBootsItem(ArmorMaterial material, Properties properties, ResourceLocation textureLoc) { + super(material, SLOT, properties, textureLoc); + } + + public static boolean isWornBy(Entity entity) { + if (!(entity instanceof LivingEntity livingEntity)) { + return false; + } + return livingEntity.getItemBySlot(SLOT).getItem() instanceof DivingBootsItem; } @SubscribeEvent @@ -44,8 +54,7 @@ public class DivingBootsItem extends CopperArmorItem { } protected static boolean affects(LivingEntity entity) { - if (!AllItems.DIVING_BOOTS.get() - .isWornBy(entity)) { + if (!isWornBy(entity)) { entity.getPersistentData() .remove("HeavyBoots"); return false; @@ -63,5 +72,4 @@ public class DivingBootsItem extends CopperArmorItem { } return true; } - } diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/DivingHelmetItem.java b/src/main/java/com/simibubi/create/content/curiosities/armor/DivingHelmetItem.java index bde2a4e65..5bfd951d0 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/DivingHelmetItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/DivingHelmetItem.java @@ -1,15 +1,17 @@ package com.simibubi.create.content.curiosities.armor; -import com.simibubi.create.AllItems; import com.simibubi.create.foundation.advancement.AllAdvancements; +import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; import net.minecraft.tags.FluidTags; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ArmorMaterial; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; @@ -17,10 +19,18 @@ import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; @EventBusSubscriber -public class DivingHelmetItem extends CopperArmorItem { +public class DivingHelmetItem extends BaseArmorItem { + public static final EquipmentSlot SLOT = EquipmentSlot.HEAD; - public DivingHelmetItem(Properties p_i48534_3_) { - super(EquipmentSlot.HEAD, p_i48534_3_); + public DivingHelmetItem(ArmorMaterial material, Properties properties, ResourceLocation textureLoc) { + super(material, SLOT, properties, textureLoc); + } + + public static boolean isWornBy(Entity entity) { + if (!(entity instanceof LivingEntity livingEntity)) { + return false; + } + return livingEntity.getItemBySlot(SLOT).getItem() instanceof DivingHelmetItem; } @SubscribeEvent @@ -34,8 +44,7 @@ public class DivingHelmetItem extends CopperArmorItem { entity.getPersistentData() .remove("VisualBacktankAir"); - if (!AllItems.DIVING_HELMET.get() - .isWornBy(entity)) + if (!isWornBy(entity)) return; boolean lavaDiving = entity.isEyeInFluid(FluidTags.LAVA); @@ -44,10 +53,10 @@ public class DivingHelmetItem extends CopperArmorItem { if (entity instanceof Player && ((Player) entity).isCreative()) return; - ItemStack backtank = BackTankUtil.get(entity); + ItemStack backtank = BacktankUtil.get(entity); if (backtank.isEmpty()) return; - if (!BackTankUtil.hasAirRemaining(backtank)) + if (!BacktankUtil.hasAirRemaining(backtank)) return; if (lavaDiving) { @@ -61,7 +70,7 @@ public class DivingHelmetItem extends CopperArmorItem { if (world.isClientSide) entity.getPersistentData() - .putInt("VisualBacktankAir", (int) BackTankUtil.getAir(backtank)); + .putInt("VisualBacktankAir", (int) BacktankUtil.getAir(backtank)); if (!second) return; @@ -71,7 +80,6 @@ public class DivingHelmetItem extends CopperArmorItem { entity.setAirSupply(Math.min(entity.getMaxAirSupply(), entity.getAirSupply() + 10)); entity.addEffect(new MobEffectInstance(MobEffects.WATER_BREATHING, 30, 0, true, false, true)); - BackTankUtil.consumeAir(entity, backtank, 1); + BacktankUtil.consumeAir(entity, backtank, 1); } - } diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/NetheriteDivingHandler.java b/src/main/java/com/simibubi/create/content/curiosities/armor/NetheriteDivingHandler.java new file mode 100644 index 000000000..2878beeab --- /dev/null +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/NetheriteDivingHandler.java @@ -0,0 +1,150 @@ +package com.simibubi.create.content.curiosities.armor; + +import java.util.function.Supplier; + +import com.simibubi.create.AllItems; +import com.simibubi.create.foundation.networking.AllPackets; +import com.simibubi.create.foundation.networking.SimplePacketBase; + +import net.minecraft.client.Minecraft; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterials; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.event.entity.living.LivingEquipmentChangeEvent; +import net.minecraftforge.event.entity.player.PlayerEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.network.NetworkEvent.Context; +import net.minecraftforge.network.PacketDistributor; + +@EventBusSubscriber +public final class NetheriteDivingHandler { + public static final String NETHERITE_DIVING_BITS_KEY = "CreateNetheriteDivingBits"; + public static final String FIRE_IMMUNE_KEY = "CreateFireImmune"; + + @SubscribeEvent + public static void onLivingEquipmentChange(LivingEquipmentChangeEvent event) { + EquipmentSlot slot = event.getSlot(); + if (slot.getType() != EquipmentSlot.Type.ARMOR) { + return; + } + + LivingEntity entity = event.getEntityLiving(); + ItemStack to = event.getTo(); + + if (slot == EquipmentSlot.HEAD) { + if (AllItems.NETHERITE_DIVING_HELMET.isIn(to)) { + setBit(entity, 0); + } else { + clearBit(entity, 0); + } + } else if (slot == EquipmentSlot.CHEST) { + if (AllItems.NETHERITE_BACKTANK.isIn(to)) { + setBit(entity, 1); + } else { + clearBit(entity, 1); + } + } else if (slot == EquipmentSlot.LEGS) { + if (to.getItem() instanceof ArmorItem armorItem && armorItem.getMaterial() == ArmorMaterials.NETHERITE) { + setBit(entity, 2); + } else { + clearBit(entity, 2); + } + } else if (slot == EquipmentSlot.FEET) { + if (AllItems.NETHERITE_DIVING_BOOTS.isIn(to)) { + setBit(entity, 3); + } else { + clearBit(entity, 3); + } + } + } + + public static void setBit(LivingEntity entity, int i) { + CompoundTag nbt = entity.getPersistentData(); + byte bits = nbt.getByte(NETHERITE_DIVING_BITS_KEY); + bits |= 1 << i; + nbt.putByte(NETHERITE_DIVING_BITS_KEY, bits); + + if ((bits & 0xF) == 0xF) { + setFireImmune(entity, true); + } + } + + public static void clearBit(LivingEntity entity, int i) { + CompoundTag nbt = entity.getPersistentData(); + if (!nbt.contains(NETHERITE_DIVING_BITS_KEY)) { + return; + } + + byte bits = nbt.getByte(NETHERITE_DIVING_BITS_KEY); + boolean prevFullSet = (bits & 0xF) == 0xF; + bits &= ~(1 << i); + nbt.putByte(NETHERITE_DIVING_BITS_KEY, bits); + + if (prevFullSet) { + setFireImmune(entity, false); + } + } + + public static void setFireImmune(LivingEntity entity, boolean fireImmune) { + entity.getPersistentData().putBoolean(FIRE_IMMUNE_KEY, fireImmune); + AllPackets.channel.send(PacketDistributor.TRACKING_ENTITY_AND_SELF.with(() -> entity), SetFireImmunePacket.create(entity)); + } + + @SubscribeEvent + public static void onStartTrackingEntity(PlayerEvent.StartTracking event) { + if (!(event.getPlayer() instanceof ServerPlayer player)) { + return; + } + + if (!(event.getTarget() instanceof LivingEntity entity)) { + return; + } + + AllPackets.channel.send(PacketDistributor.PLAYER.with(() -> player), SetFireImmunePacket.create(entity)); + } + + public static class SetFireImmunePacket extends SimplePacketBase { + private final int entityId; + private final boolean fireImmune; + + public SetFireImmunePacket(int entityId, boolean fireImmune) { + this.entityId = entityId; + this.fireImmune = fireImmune; + } + + public static SetFireImmunePacket create(Entity entity) { + int entityId = entity.getId(); + boolean fireImmune = entity.getPersistentData().getBoolean(FIRE_IMMUNE_KEY); + return new SetFireImmunePacket(entityId, fireImmune); + } + + public SetFireImmunePacket(FriendlyByteBuf buffer) { + entityId = buffer.readVarInt(); + fireImmune = buffer.readBoolean(); + } + + @Override + public void write(FriendlyByteBuf buffer) { + buffer.writeVarInt(entityId); + buffer.writeBoolean(fireImmune); + } + + @Override + public void handle(Supplier context) { + context.get().enqueueWork(() -> { + Entity entity = Minecraft.getInstance().level.getEntity(entityId); + if (entity != null) { + entity.getPersistentData().putBoolean(FIRE_IMMUNE_KEY, fireImmune); + } + }); + context.get().setPacketHandled(true); + } + } +} diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/RemainingAirOverlay.java b/src/main/java/com/simibubi/create/content/curiosities/armor/RemainingAirOverlay.java new file mode 100644 index 000000000..e806d41ef --- /dev/null +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/RemainingAirOverlay.java @@ -0,0 +1,66 @@ +package com.simibubi.create.content.curiosities.armor; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.AllItems; +import com.simibubi.create.foundation.gui.element.GuiGameElement; +import com.simibubi.create.foundation.utility.Color; +import com.simibubi.create.foundation.utility.Components; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.network.chat.Component; +import net.minecraft.tags.FluidTags; +import net.minecraft.util.StringUtil; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.GameType; +import net.minecraftforge.client.gui.ForgeIngameGui; +import net.minecraftforge.client.gui.IIngameOverlay; + +public class RemainingAirOverlay implements IIngameOverlay { + public static final RemainingAirOverlay INSTANCE = new RemainingAirOverlay(); + + @Override + public void render(ForgeIngameGui gui, PoseStack poseStack, float partialTick, int width, int height) { + Minecraft mc = Minecraft.getInstance(); + if (mc.options.hideGui || mc.gameMode.getPlayerMode() == GameType.SPECTATOR) + return; + + LocalPlayer player = mc.player; + if (player == null) + return; + if (player.isCreative()) + return; + if (!player.getPersistentData() + .contains("VisualBacktankAir")) + return; + if (!player.isEyeInFluid(FluidTags.WATER)) + return; + + int timeLeft = player.getPersistentData() + .getInt("VisualBacktankAir"); + + poseStack.pushPose(); + + poseStack.translate(width / 2 + 90, height - 53, 0); + + Component text = Components.literal(StringUtil.formatTickDuration(timeLeft * 20)); + GuiGameElement.of(getDisplayedBacktank(player)) + .at(0, 0) + .render(poseStack); + int color = 0xFF_FFFFFF; + if (timeLeft < 60 && timeLeft % 2 == 0) { + color = Color.mixColors(0xFF_FF0000, color, Math.max(timeLeft / 60f, .25f)); + } + mc.font.drawShadow(poseStack, text, 16, 5, color); + + poseStack.popPose(); + } + + public static ItemStack getDisplayedBacktank(LocalPlayer player) { + ItemStack backtank = BacktankUtil.get(player); + if (!backtank.isEmpty()) { + return backtank; + } + return AllItems.COPPER_BACKTANK.asStack(); + } +} diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItem.java b/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItem.java index a32a7c5dd..161275653 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItem.java @@ -8,7 +8,7 @@ import com.google.common.base.Suppliers; import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.Multimap; import com.simibubi.create.AllItems; -import com.simibubi.create.content.curiosities.armor.BackTankUtil; +import com.simibubi.create.content.curiosities.armor.BacktankUtil; import com.simibubi.create.foundation.advancement.AllAdvancements; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.item.render.SimpleCustomRenderer; @@ -205,23 +205,23 @@ public class ExtendoGripItem extends Item { if (!AllItems.EXTENDO_GRIP.isIn(extendo)) return; final InteractionHand h = hand; - if (!BackTankUtil.canAbsorbDamage(player, maxUses())) + if (!BacktankUtil.canAbsorbDamage(player, maxUses())) extendo.hurtAndBreak(1, player, p -> p.broadcastBreakEvent(h)); } @Override public boolean isBarVisible(ItemStack stack) { - return BackTankUtil.isBarVisible(stack, maxUses()); + return BacktankUtil.isBarVisible(stack, maxUses()); } @Override public int getBarWidth(ItemStack stack) { - return BackTankUtil.getBarWidth(stack, maxUses()); + return BacktankUtil.getBarWidth(stack, maxUses()); } @Override public int getBarColor(ItemStack stack) { - return BackTankUtil.getBarColor(stack, maxUses()); + return BacktankUtil.getBarColor(stack, maxUses()); } private static int maxUses() { diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java index 7b132d8d0..8a808a0c8 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java @@ -9,7 +9,7 @@ import com.simibubi.create.AllEnchantments; import com.simibubi.create.AllEntityTypes; import com.simibubi.create.Create; import com.simibubi.create.CreateClient; -import com.simibubi.create.content.curiosities.armor.BackTankUtil; +import com.simibubi.create.content.curiosities.armor.BacktankUtil; import com.simibubi.create.content.curiosities.zapper.ShootableGadgetItemMethods; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.item.render.SimpleCustomRenderer; @@ -82,17 +82,17 @@ public class PotatoCannonItem extends ProjectileWeaponItem { @Override public boolean isBarVisible(ItemStack stack) { - return BackTankUtil.isBarVisible(stack, maxUses()); + return BacktankUtil.isBarVisible(stack, maxUses()); } @Override public int getBarWidth(ItemStack stack) { - return BackTankUtil.getBarWidth(stack, maxUses()); + return BacktankUtil.getBarWidth(stack, maxUses()); } @Override public int getBarColor(ItemStack stack) { - return BackTankUtil.getBarColor(stack, maxUses()); + return BacktankUtil.getBarColor(stack, maxUses()); } private int maxUses() { @@ -164,7 +164,7 @@ public class PotatoCannonItem extends ProjectileWeaponItem { player.getInventory().removeItem(itemStack); } - if (!BackTankUtil.canAbsorbDamage(player, maxUses())) + if (!BacktankUtil.canAbsorbDamage(player, maxUses())) stack.hurtAndBreak(1, player, p -> p.broadcastBreakEvent(hand)); Integer cooldown = diff --git a/src/main/java/com/simibubi/create/events/ClientEvents.java b/src/main/java/com/simibubi/create/events/ClientEvents.java index e3830192a..e40e05ddf 100644 --- a/src/main/java/com/simibubi/create/events/ClientEvents.java +++ b/src/main/java/com/simibubi/create/events/ClientEvents.java @@ -6,7 +6,6 @@ import java.util.List; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllFluids; -import com.simibubi.create.AllItems; import com.simibubi.create.Create; import com.simibubi.create.CreateClient; import com.simibubi.create.content.contraptions.KineticDebugger; @@ -25,7 +24,8 @@ import com.simibubi.create.content.contraptions.components.structureMovement.tra import com.simibubi.create.content.contraptions.components.turntable.TurntableHandler; import com.simibubi.create.content.contraptions.itemAssembly.SequencedAssemblyRecipe; import com.simibubi.create.content.contraptions.relays.belt.item.BeltConnectorHandler; -import com.simibubi.create.content.curiosities.armor.CopperBacktankArmorLayer; +import com.simibubi.create.content.curiosities.armor.BacktankArmorLayer; +import com.simibubi.create.content.curiosities.armor.DivingHelmetItem; import com.simibubi.create.content.curiosities.girder.GirderWrenchBehavior; import com.simibubi.create.content.curiosities.toolbox.ToolboxHandlerClient; import com.simibubi.create.content.curiosities.tools.BlueprintOverlayRenderer; @@ -334,7 +334,7 @@ public class ClientEvents { return; } - if (FluidHelper.isWater(fluid) && AllItems.DIVING_HELMET.get() + if (FluidHelper.isWater(fluid) && DivingHelmetItem .isWornBy(Minecraft.getInstance().cameraEntity)) { event.scaleFarPlaneDistance(6.25f); event.setCanceled(true); @@ -390,7 +390,7 @@ public class ClientEvents { public static void addEntityRendererLayers(EntityRenderersEvent.AddLayers event) { EntityRenderDispatcher dispatcher = Minecraft.getInstance() .getEntityRenderDispatcher(); - CopperBacktankArmorLayer.registerOnAll(dispatcher); + BacktankArmorLayer.registerOnAll(dispatcher); TrainHatArmorLayer.registerOnAll(dispatcher); } diff --git a/src/main/java/com/simibubi/create/foundation/advancement/AllAdvancements.java b/src/main/java/com/simibubi/create/foundation/advancement/AllAdvancements.java index ebd311337..d0f8407fe 100644 --- a/src/main/java/com/simibubi/create/foundation/advancement/AllAdvancements.java +++ b/src/main/java/com/simibubi/create/foundation/advancement/AllAdvancements.java @@ -270,7 +270,7 @@ public class AllAdvancements implements DataProvider { .description("Create a Copper Backtank and make it accumulate air pressure") .after(STEAM_WHISTLE)), - DIVING_SUIT = create("diving_suit", b -> b.icon(AllItems.DIVING_HELMET) + DIVING_SUIT = create("diving_suit", b -> b.icon(AllItems.COPPER_DIVING_HELMET) .title("Ready for the Depths") .description("Equip a Diving Helmet and a Copper Backtank, then jump into water") .after(BACKTANK)), @@ -331,7 +331,7 @@ public class AllAdvancements implements DataProvider { // Copper - Hidden - DIVING_SUIT_LAVA = create("diving_suit_lava", b -> b.icon(AllItems.DIVING_HELMET) + DIVING_SUIT_LAVA = create("diving_suit_lava", b -> b.icon(AllItems.COPPER_DIVING_HELMET) .title("Swimming with the Striders") .description("Attempt to take a dive in lava with your diving gear") .after(BACKTANK) diff --git a/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java b/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java index 2c410b692..1574a414f 100644 --- a/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java +++ b/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java @@ -62,6 +62,16 @@ import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.PistonType; import net.minecraft.world.level.material.Material; +import net.minecraft.world.level.storage.loot.LootPool; +import net.minecraft.world.level.storage.loot.LootTable; +import net.minecraft.world.level.storage.loot.LootTable.Builder; +import net.minecraft.world.level.storage.loot.entries.LootItem; +import net.minecraft.world.level.storage.loot.functions.CopyNameFunction; +import net.minecraft.world.level.storage.loot.functions.CopyNbtFunction; +import net.minecraft.world.level.storage.loot.predicates.ExplosionCondition; +import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; +import net.minecraft.world.level.storage.loot.providers.nbt.ContextNbtProvider; +import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; import net.minecraftforge.client.model.generators.ConfiguredModel; import net.minecraftforge.client.model.generators.ModelFile; @@ -360,6 +370,27 @@ public class BuilderTransformers { .transform(ModelGen.customItemModel("crate", type, "single")); } + public static NonNullUnaryOperator> backtank(Supplier drop) { + return b -> b + .blockstate((c, p) -> p.horizontalBlock(c.getEntry(), AssetLookup.partialBaseModel(c, p))) + .transform(pickaxeOnly()) + .addLayer(() -> RenderType::cutoutMipped) + .transform(BlockStressDefaults.setImpact(4.0)) + .loot((lt, block) -> { + Builder builder = LootTable.lootTable(); + LootItemCondition.Builder survivesExplosion = ExplosionCondition.survivesExplosion(); + lt.add(block, builder.withPool(LootPool.lootPool() + .when(survivesExplosion) + .setRolls(ConstantValue.exactly(1)) + .add(LootItem.lootTableItem(drop.get()) + .apply(CopyNameFunction.copyName(CopyNameFunction.NameSource.BLOCK_ENTITY)) + .apply(CopyNbtFunction.copyData(ContextNbtProvider.BLOCK_ENTITY) + .copy("Air", "Air")) + .apply(CopyNbtFunction.copyData(ContextNbtProvider.BLOCK_ENTITY) + .copy("Enchantments", "Enchantments"))))); + }); + } + public static NonNullUnaryOperator> bell() { return b -> b.initialProperties(SharedProperties::softMetal) .properties(p -> p.noOcclusion() diff --git a/src/main/java/com/simibubi/create/foundation/data/SharedProperties.java b/src/main/java/com/simibubi/create/foundation/data/SharedProperties.java index f1838c470..256aafed4 100644 --- a/src/main/java/com/simibubi/create/foundation/data/SharedProperties.java +++ b/src/main/java/com/simibubi/create/foundation/data/SharedProperties.java @@ -15,6 +15,10 @@ public class SharedProperties { public static final Material CRUSHING_WHEEL_CONTROLLER_MATERIAL = new Material(MaterialColor.NONE, false, false, true, true, false, false, PushReaction.BLOCK); + public static Block wooden() { + return Blocks.STRIPPED_SPRUCE_WOOD; + } + public static Block stone() { return Blocks.ANDESITE; } @@ -22,12 +26,12 @@ public class SharedProperties { public static Block softMetal() { return Blocks.GOLD_BLOCK; } - + public static Block copperMetal() { return Blocks.COPPER_BLOCK; } - public static Block wooden() { - return Blocks.STRIPPED_SPRUCE_WOOD; + public static Block netheriteMetal() { + return Blocks.NETHERITE_BLOCK; } } diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java index 5401c429c..30ff9ea90 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java @@ -988,7 +988,7 @@ public class StandardRecipeGen extends CreateRecipeProvider { .viaShapeless(b -> b.requires(I.wheatFlour()) .requires(Items.WATER_BUCKET)), - DIVING_HELMET = create(AllItems.DIVING_HELMET).unlockedBy(I::copper) + DIVING_HELMET = create(AllItems.COPPER_DIVING_HELMET).unlockedBy(I::copper) .viaShaped(b -> b.define('G', Tags.Items.GLASS) .define('P', I.copper()) .pattern("PPP") @@ -1003,7 +1003,7 @@ public class StandardRecipeGen extends CreateRecipeProvider { .pattern("PBP") .pattern(" P ")), - DIVING_BOOTS = create(AllItems.DIVING_BOOTS).unlockedBy(I::copper) + DIVING_BOOTS = create(AllItems.COPPER_DIVING_BOOTS).unlockedBy(I::copper) .viaShaped(b -> b.define('G', I.andesite()) .define('P', I.copper()) .pattern("P P") diff --git a/src/main/java/com/simibubi/create/foundation/mixin/EntityMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/EntityMixin.java new file mode 100644 index 000000000..18cfd4b6a --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/mixin/EntityMixin.java @@ -0,0 +1,22 @@ +package com.simibubi.create.foundation.mixin; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import com.simibubi.create.content.curiosities.armor.NetheriteDivingHandler; + +import net.minecraft.world.entity.Entity; + +@Mixin(Entity.class) +public class EntityMixin { + @Inject(method = "fireImmune()Z", at = @At("RETURN"), cancellable = true) + public void fireImmune(CallbackInfoReturnable cir) { + if (!cir.getReturnValueZ()) { + Entity self = (Entity) (Object) this; + boolean immune = self.getPersistentData().getBoolean(NetheriteDivingHandler.FIRE_IMMUNE_KEY); + cir.setReturnValue(immune); + } + } +} diff --git a/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java b/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java index 10c6a635f..784b8c8b8 100644 --- a/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java +++ b/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java @@ -31,6 +31,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.tra import com.simibubi.create.content.contraptions.fluids.actors.FluidSplashPacket; import com.simibubi.create.content.contraptions.relays.advanced.sequencer.ConfigureSequencedGearshiftPacket; import com.simibubi.create.content.contraptions.relays.gauge.GaugeObservedPacket; +import com.simibubi.create.content.curiosities.armor.NetheriteDivingHandler; import com.simibubi.create.content.curiosities.bell.SoulPulseEffectPacket; import com.simibubi.create.content.curiosities.symmetry.ConfigureSymmetryWandPacket; import com.simibubi.create.content.curiosities.symmetry.SymmetryEffectPacket; @@ -184,6 +185,7 @@ public enum AllPackets { S_TRAIN_PROMPT(TrainPromptPacket.class, TrainPromptPacket::new, PLAY_TO_CLIENT), CONTRAPTION_RELOCATION(ContraptionRelocationPacket.class, ContraptionRelocationPacket::new, PLAY_TO_CLIENT), TRACK_GRAPH_ROLL_CALL(TrackGraphRollCallPacket.class, TrackGraphRollCallPacket::new, PLAY_TO_CLIENT), + SET_FIRE_IMMUNE(NetheriteDivingHandler.SetFireImmunePacket.class, NetheriteDivingHandler.SetFireImmunePacket::new, PLAY_TO_CLIENT), ; diff --git a/src/main/java/com/simibubi/create/foundation/utility/RemapHelper.java b/src/main/java/com/simibubi/create/foundation/utility/RemapHelper.java index 9c579b473..77cb32db0 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/RemapHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/RemapHelper.java @@ -25,6 +25,8 @@ import static com.simibubi.create.AllBlocks.STOCKPILE_SWITCH; import static com.simibubi.create.AllBlocks.STRESSOMETER; import static com.simibubi.create.AllItems.ATTRIBUTE_FILTER; import static com.simibubi.create.AllItems.CRAFTER_SLOT_COVER; +import static com.simibubi.create.AllItems.COPPER_DIVING_BOOTS; +import static com.simibubi.create.AllItems.COPPER_DIVING_HELMET; import static com.simibubi.create.AllItems.GOLDEN_SHEET; import static com.simibubi.create.AllItems.POWDERED_OBSIDIAN; import static com.simibubi.create.AllItems.SCHEMATIC; @@ -51,12 +53,14 @@ import static com.simibubi.create.content.palettes.AllPaletteBlocks.SPRUCE_WINDO import java.util.HashMap; import java.util.Map; +import com.simibubi.create.AllTileEntities; import com.simibubi.create.Create; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.material.Fluid; import net.minecraftforge.common.ForgeMod; import net.minecraftforge.event.RegistryEvent; @@ -179,6 +183,8 @@ public class RemapHelper { reMap.put("terrain_zapper", WORLDSHAPER.getId()); reMap.put("property_filter", ATTRIBUTE_FILTER.getId()); reMap.put("obsidian_dust", POWDERED_OBSIDIAN.getId()); + reMap.put("diving_helmet", COPPER_DIVING_HELMET.getId()); + reMap.put("diving_boots", COPPER_DIVING_BOOTS.getId()); } private static void remapPaletteBlock(String type, String newType, boolean vanilla) { @@ -274,4 +280,16 @@ public class RemapHelper { } } + @SubscribeEvent + public static void remapBlockEntities(RegistryEvent.MissingMappings> event) { + for (Mapping> mapping : event.getMappings(Create.ID)) { + ResourceLocation key = mapping.key; + String path = key.getPath(); + + if (path.equals("copper_backtank")) { + mapping.remap(AllTileEntities.BACKTANK.get()); + } + } + } + } diff --git a/src/main/resources/assets/create/models/block/netherite_backtank/block.json b/src/main/resources/assets/create/models/block/netherite_backtank/block.json new file mode 100644 index 000000000..8af694a87 --- /dev/null +++ b/src/main/resources/assets/create/models/block/netherite_backtank/block.json @@ -0,0 +1,74 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/netherite_backtank", + "particle": "create:block/netherite_backtank" + }, + "elements": [ + { + "from": [5, 0, 5], + "to": [11, 4, 11], + "faces": { + "north": {"uv": [8.5, 4, 11.5, 6], "texture": "#0"}, + "east": {"uv": [4.5, 4, 7.5, 6], "texture": "#0"}, + "south": {"uv": [0.5, 4, 3.5, 6], "texture": "#0"}, + "west": {"uv": [4.5, 4, 7.5, 6], "texture": "#0"}, + "down": {"uv": [4.5, 6.5, 7.5, 9.5], "texture": "#0"} + } + }, + { + "from": [5, 10, 5], + "to": [11, 12, 11], + "faces": { + "north": {"uv": [8.5, 0, 11.5, 1], "texture": "#0"}, + "east": {"uv": [4.5, 0, 7.5, 1], "texture": "#0"}, + "south": {"uv": [0.5, 0, 3.5, 1], "texture": "#0"}, + "west": {"uv": [4.5, 0, 7.5, 1], "texture": "#0"}, + "up": {"uv": [0.5, 6.5, 3.5, 9.5], "texture": "#0"} + } + }, + { + "from": [4, 4, 4], + "to": [12, 10, 12], + "faces": { + "north": {"uv": [8, 1, 12, 4], "texture": "#0"}, + "east": {"uv": [4, 1, 8, 4], "texture": "#0"}, + "south": {"uv": [0, 1, 4, 4], "texture": "#0"}, + "west": {"uv": [4, 1, 8, 4], "texture": "#0"}, + "up": {"uv": [0, 6, 4, 10], "texture": "#0"}, + "down": {"uv": [4, 6, 8, 10], "texture": "#0"} + } + }, + { + "from": [4, 4, 9], + "to": [12, 10, 11], + "faces": { + "south": {"uv": [0, 12.5, 1, 13], "texture": "#0"} + } + }, + { + "from": [5, 2, 3], + "to": [11, 11, 5], + "faces": { + "north": {"uv": [1, 11.5, 4, 16], "texture": "#0"}, + "east": {"uv": [5, 11.5, 4, 16], "texture": "#0"}, + "south": {"uv": [0, 0, 6, 9], "texture": "#0"}, + "west": {"uv": [4, 11.5, 5, 16], "texture": "#0"}, + "up": {"uv": [1, 10.5, 4, 11.5], "texture": "#0"}, + "down": {"uv": [0, 11.5, 1, 14.5], "rotation": 90, "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "Tank", + "origin": [0, 0, 0], + "children": [0, 1, 2, 3, 4] + }, + { + "name": "Axle", + "origin": [8, 8, 8], + "children": [] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/netherite_backtank/block_cogs.json b/src/main/resources/assets/create/models/block/netherite_backtank/block_cogs.json new file mode 100644 index 000000000..3db35b065 --- /dev/null +++ b/src/main/resources/assets/create/models/block/netherite_backtank/block_cogs.json @@ -0,0 +1,125 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/netherite_backtank", + "particle": "create:block/netherite_backtank" + }, + "elements": [ + { + "from": [5, 4, 10.5], + "to": [7, 9, 11.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6.5, 11]}, + "faces": { + "north": {"uv": [6.5, 11.5, 5.5, 14], "texture": "#0"}, + "east": {"uv": [6.5, 11.5, 7, 14], "texture": "#0"}, + "south": {"uv": [5.5, 11.5, 6.5, 14], "texture": "#0"}, + "west": {"uv": [5.5, 11.5, 6, 14], "texture": "#0"}, + "up": {"uv": [5.5, 11, 6.5, 11.5], "texture": "#0"}, + "down": {"uv": [5.5, 11, 6.5, 11.5], "texture": "#0"} + } + }, + { + "from": [5, 4, 10.5], + "to": [7, 9, 11.5], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 6.5, 11]}, + "faces": { + "north": {"uv": [6.5, 11.5, 5.5, 14], "texture": "#0"}, + "east": {"uv": [6.5, 11.5, 7, 14], "texture": "#0"}, + "south": {"uv": [5.5, 11.5, 6.5, 14], "texture": "#0"}, + "west": {"uv": [5.5, 11.5, 6, 14], "texture": "#0"}, + "up": {"uv": [5.5, 11, 6.5, 11.5], "texture": "#0"}, + "down": {"uv": [5.5, 11, 6.5, 11.5], "texture": "#0"} + } + }, + { + "from": [5, 6, 8.5], + "to": [7, 7, 13.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6.5, 11]}, + "faces": { + "north": {"uv": [5.5, 11, 6.5, 11.5], "rotation": 180, "texture": "#0"}, + "east": {"uv": [6.5, 11.5, 7, 14], "rotation": 270, "texture": "#0"}, + "south": {"uv": [5.5, 11, 6.5, 11.5], "texture": "#0"}, + "west": {"uv": [5.5, 11.5, 6, 14], "rotation": 90, "texture": "#0"}, + "up": {"uv": [6.5, 11.5, 5.5, 14], "rotation": 180, "texture": "#0"}, + "down": {"uv": [5.5, 11.5, 6.5, 14], "texture": "#0"} + } + }, + { + "from": [5, 6, 8.5], + "to": [7, 7, 13.5], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 6.5, 11]}, + "faces": { + "north": {"uv": [5.5, 11, 6.5, 11.5], "rotation": 180, "texture": "#0"}, + "east": {"uv": [6.5, 11.5, 7, 14], "rotation": 270, "texture": "#0"}, + "south": {"uv": [5.5, 11, 6.5, 11.5], "texture": "#0"}, + "west": {"uv": [5.5, 11.5, 6, 14], "rotation": 90, "texture": "#0"}, + "up": {"uv": [6.5, 11.5, 5.5, 14], "rotation": 180, "texture": "#0"}, + "down": {"uv": [5.5, 11.5, 6.5, 14], "texture": "#0"} + } + }, + { + "from": [9, 4, 10.5], + "to": [11, 9, 11.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6.5, 11]}, + "faces": { + "north": {"uv": [5.5, 11.5, 6.5, 14], "texture": "#0"}, + "east": {"uv": [5.5, 11.5, 6, 14], "texture": "#0"}, + "south": {"uv": [6.5, 11.5, 5.5, 14], "texture": "#0"}, + "west": {"uv": [6.5, 11.5, 7, 14], "texture": "#0"}, + "up": {"uv": [5.5, 11, 6.5, 11.5], "rotation": 180, "texture": "#0"}, + "down": {"uv": [5.5, 11, 6.5, 11.5], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [9, 4, 10.5], + "to": [11, 9, 11.5], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 6.5, 11]}, + "faces": { + "north": {"uv": [5.5, 11.5, 6.5, 14], "texture": "#0"}, + "east": {"uv": [5.5, 11.5, 6, 14], "texture": "#0"}, + "south": {"uv": [6.5, 11.5, 5.5, 14], "texture": "#0"}, + "west": {"uv": [6.5, 11.5, 7, 14], "texture": "#0"}, + "up": {"uv": [5.5, 11, 6.5, 11.5], "rotation": 180, "texture": "#0"}, + "down": {"uv": [5.5, 11, 6.5, 11.5], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [9, 6, 8.5], + "to": [11, 7, 13.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6.5, 11]}, + "faces": { + "north": {"uv": [5.5, 11, 6.5, 11.5], "texture": "#0"}, + "east": {"uv": [5.5, 11.5, 6, 14], "rotation": 270, "texture": "#0"}, + "south": {"uv": [5.5, 11, 6.5, 11.5], "rotation": 180, "texture": "#0"}, + "west": {"uv": [6.5, 11.5, 7, 14], "rotation": 90, "texture": "#0"}, + "up": {"uv": [5.5, 11.5, 6.5, 14], "rotation": 180, "texture": "#0"}, + "down": {"uv": [6.5, 11.5, 5.5, 14], "texture": "#0"} + } + }, + { + "from": [9, 6, 8.5], + "to": [11, 7, 13.5], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 6.5, 11]}, + "faces": { + "north": {"uv": [5.5, 11, 6.5, 11.5], "texture": "#0"}, + "east": {"uv": [5.5, 11.5, 6, 14], "rotation": 270, "texture": "#0"}, + "south": {"uv": [5.5, 11, 6.5, 11.5], "rotation": 180, "texture": "#0"}, + "west": {"uv": [6.5, 11.5, 7, 14], "rotation": 90, "texture": "#0"}, + "up": {"uv": [5.5, 11.5, 6.5, 14], "rotation": 180, "texture": "#0"}, + "down": {"uv": [6.5, 11.5, 5.5, 14], "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "Gears", + "origin": [1, 2.5, 0.5], + "children": [0, 1, 2, 3, 4, 5, 6, 7] + }, + { + "name": "Axle", + "origin": [8, 8, 8], + "children": [] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/netherite_backtank/block_shaft_input.json b/src/main/resources/assets/create/models/block/netherite_backtank/block_shaft_input.json new file mode 100644 index 000000000..09a4d316e --- /dev/null +++ b/src/main/resources/assets/create/models/block/netherite_backtank/block_shaft_input.json @@ -0,0 +1,37 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/netherite_backtank", + "particle": "create:block/netherite_backtank" + }, + "elements": [ + { + "from": [6.5, 12, 6.5], + "to": [9.5, 13, 9.5], + "faces": { + "north": {"uv": [14.5, 4, 16, 4.5], "texture": "#0"}, + "east": {"uv": [14.5, 3.5, 16, 4], "texture": "#0"}, + "south": {"uv": [14.5, 3.5, 16, 4], "texture": "#0"}, + "west": {"uv": [14.5, 3, 16, 3.5], "texture": "#0"} + } + }, + { + "from": [6, 13, 6], + "to": [10, 16, 10], + "faces": { + "north": {"uv": [14, 2, 16, 3.5], "texture": "#0"}, + "east": {"uv": [14, 2, 16, 3.5], "texture": "#0"}, + "south": {"uv": [14, 2, 16, 3.5], "texture": "#0"}, + "west": {"uv": [14, 2, 16, 3.5], "texture": "#0"}, + "up": {"uv": [14, 0, 16, 2], "texture": "#0"}, + "down": {"uv": [15.5, 5, 16, 5.5], "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "Axle", + "origin": [8, 8, 8], + "children": [] + }, 0, 1] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/netherite_backtank/item.json b/src/main/resources/assets/create/models/block/netherite_backtank/item.json new file mode 100644 index 000000000..20607aa1f --- /dev/null +++ b/src/main/resources/assets/create/models/block/netherite_backtank/item.json @@ -0,0 +1,205 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "0": "create:block/netherite_backtank", + "particle": "create:block/netherite_backtank" + }, + "elements": [ + { + "from": [5, 4, 10.5], + "to": [7, 9, 11.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6.5, 11]}, + "faces": { + "north": {"uv": [6.5, 11.5, 5.5, 14], "texture": "#0"}, + "east": {"uv": [6.5, 11.5, 7, 14], "texture": "#0"}, + "south": {"uv": [5.5, 11.5, 6.5, 14], "texture": "#0"}, + "west": {"uv": [5.5, 11.5, 6, 14], "texture": "#0"}, + "up": {"uv": [5.5, 11, 6.5, 11.5], "texture": "#0"}, + "down": {"uv": [5.5, 11, 6.5, 11.5], "texture": "#0"} + } + }, + { + "from": [5, 4, 10.5], + "to": [7, 9, 11.5], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 6.5, 11]}, + "faces": { + "north": {"uv": [6.5, 11.5, 5.5, 14], "texture": "#0"}, + "east": {"uv": [6.5, 11.5, 7, 14], "texture": "#0"}, + "south": {"uv": [5.5, 11.5, 6.5, 14], "texture": "#0"}, + "west": {"uv": [5.5, 11.5, 6, 14], "texture": "#0"}, + "up": {"uv": [5.5, 11, 6.5, 11.5], "texture": "#0"}, + "down": {"uv": [5.5, 11, 6.5, 11.5], "texture": "#0"} + } + }, + { + "from": [5, 6, 8.5], + "to": [7, 7, 13.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6.5, 11]}, + "faces": { + "north": {"uv": [5.5, 11, 6.5, 11.5], "rotation": 180, "texture": "#0"}, + "east": {"uv": [6.5, 11.5, 7, 14], "rotation": 270, "texture": "#0"}, + "south": {"uv": [5.5, 11, 6.5, 11.5], "texture": "#0"}, + "west": {"uv": [5.5, 11.5, 6, 14], "rotation": 90, "texture": "#0"}, + "up": {"uv": [6.5, 11.5, 5.5, 14], "rotation": 180, "texture": "#0"}, + "down": {"uv": [5.5, 11.5, 6.5, 14], "texture": "#0"} + } + }, + { + "from": [5, 6, 8.5], + "to": [7, 7, 13.5], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 6.5, 11]}, + "faces": { + "north": {"uv": [5.5, 11, 6.5, 11.5], "rotation": 180, "texture": "#0"}, + "east": {"uv": [6.5, 11.5, 7, 14], "rotation": 270, "texture": "#0"}, + "south": {"uv": [5.5, 11, 6.5, 11.5], "texture": "#0"}, + "west": {"uv": [5.5, 11.5, 6, 14], "rotation": 90, "texture": "#0"}, + "up": {"uv": [6.5, 11.5, 5.5, 14], "rotation": 180, "texture": "#0"}, + "down": {"uv": [5.5, 11.5, 6.5, 14], "texture": "#0"} + } + }, + { + "from": [9, 4, 10.5], + "to": [11, 9, 11.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6.5, 11]}, + "faces": { + "north": {"uv": [5.5, 11.5, 6.5, 14], "texture": "#0"}, + "east": {"uv": [5.5, 11.5, 6, 14], "texture": "#0"}, + "south": {"uv": [6.5, 11.5, 5.5, 14], "texture": "#0"}, + "west": {"uv": [6.5, 11.5, 7, 14], "texture": "#0"}, + "up": {"uv": [5.5, 11, 6.5, 11.5], "rotation": 180, "texture": "#0"}, + "down": {"uv": [5.5, 11, 6.5, 11.5], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [9, 4, 10.5], + "to": [11, 9, 11.5], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 6.5, 11]}, + "faces": { + "north": {"uv": [5.5, 11.5, 6.5, 14], "texture": "#0"}, + "east": {"uv": [5.5, 11.5, 6, 14], "texture": "#0"}, + "south": {"uv": [6.5, 11.5, 5.5, 14], "texture": "#0"}, + "west": {"uv": [6.5, 11.5, 7, 14], "texture": "#0"}, + "up": {"uv": [5.5, 11, 6.5, 11.5], "rotation": 180, "texture": "#0"}, + "down": {"uv": [5.5, 11, 6.5, 11.5], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [9, 6, 8.5], + "to": [11, 7, 13.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6.5, 11]}, + "faces": { + "north": {"uv": [5.5, 11, 6.5, 11.5], "texture": "#0"}, + "east": {"uv": [5.5, 11.5, 6, 14], "rotation": 270, "texture": "#0"}, + "south": {"uv": [5.5, 11, 6.5, 11.5], "rotation": 180, "texture": "#0"}, + "west": {"uv": [6.5, 11.5, 7, 14], "rotation": 90, "texture": "#0"}, + "up": {"uv": [5.5, 11.5, 6.5, 14], "rotation": 180, "texture": "#0"}, + "down": {"uv": [6.5, 11.5, 5.5, 14], "texture": "#0"} + } + }, + { + "from": [9, 6, 8.5], + "to": [11, 7, 13.5], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 6.5, 11]}, + "faces": { + "north": {"uv": [5.5, 11, 6.5, 11.5], "texture": "#0"}, + "east": {"uv": [5.5, 11.5, 6, 14], "rotation": 270, "texture": "#0"}, + "south": {"uv": [5.5, 11, 6.5, 11.5], "rotation": 180, "texture": "#0"}, + "west": {"uv": [6.5, 11.5, 7, 14], "rotation": 90, "texture": "#0"}, + "up": {"uv": [5.5, 11.5, 6.5, 14], "rotation": 180, "texture": "#0"}, + "down": {"uv": [6.5, 11.5, 5.5, 14], "texture": "#0"} + } + }, + { + "from": [5, 0, 5], + "to": [11, 4, 11], + "faces": { + "north": {"uv": [8.5, 4, 11.5, 6], "texture": "#0"}, + "east": {"uv": [4.5, 4, 7.5, 6], "texture": "#0"}, + "south": {"uv": [0.5, 4, 3.5, 6], "texture": "#0"}, + "west": {"uv": [4.5, 4, 7.5, 6], "texture": "#0"}, + "down": {"uv": [4.5, 6.5, 7.5, 9.5], "texture": "#0"} + } + }, + { + "from": [5, 10, 5], + "to": [11, 12, 11], + "faces": { + "north": {"uv": [8.5, 0, 11.5, 1], "texture": "#0"}, + "east": {"uv": [4.5, 0, 7.5, 1], "texture": "#0"}, + "south": {"uv": [0.5, 0, 3.5, 1], "texture": "#0"}, + "west": {"uv": [4.5, 0, 7.5, 1], "texture": "#0"}, + "up": {"uv": [0.5, 6.5, 3.5, 9.5], "texture": "#0"} + } + }, + { + "from": [4, 4, 4], + "to": [12, 10, 12], + "faces": { + "north": {"uv": [8, 1, 12, 4], "texture": "#0"}, + "east": {"uv": [4, 1, 8, 4], "texture": "#0"}, + "south": {"uv": [0, 1, 4, 4], "texture": "#0"}, + "west": {"uv": [4, 1, 8, 4], "texture": "#0"}, + "up": {"uv": [0, 6, 4, 10], "texture": "#0"}, + "down": {"uv": [4, 6, 8, 10], "texture": "#0"} + } + }, + { + "from": [4, 4, 9], + "to": [12, 10, 11], + "faces": { + "south": {"uv": [0, 12.5, 1, 13], "texture": "#0"} + } + }, + { + "from": [5, 2, 3], + "to": [11, 11, 5], + "faces": { + "north": {"uv": [1, 11.5, 4, 16], "texture": "#0"}, + "east": {"uv": [5, 11.5, 4, 16], "texture": "#0"}, + "south": {"uv": [0, 0, 6, 9], "texture": "#0"}, + "west": {"uv": [4, 11.5, 5, 16], "texture": "#0"}, + "up": {"uv": [1, 10.5, 4, 11.5], "texture": "#0"}, + "down": {"uv": [0, 11.5, 1, 14.5], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [6.5, 12, 6.5], + "to": [9.5, 13, 9.5], + "faces": { + "north": {"uv": [14.5, 4, 16, 4.5], "texture": "#0"}, + "east": {"uv": [14.5, 3.5, 16, 4], "texture": "#0"}, + "south": {"uv": [14.5, 3.5, 16, 4], "texture": "#0"}, + "west": {"uv": [14.5, 3, 16, 3.5], "texture": "#0"} + } + }, + { + "from": [6, 13, 6], + "to": [10, 16, 10], + "faces": { + "north": {"uv": [14, 2, 16, 3.5], "texture": "#0"}, + "east": {"uv": [14, 2, 16, 3.5], "texture": "#0"}, + "south": {"uv": [14, 2, 16, 3.5], "texture": "#0"}, + "west": {"uv": [14, 2, 16, 3.5], "texture": "#0"}, + "up": {"uv": [14, 0, 16, 2], "texture": "#0"}, + "down": {"uv": [15.5, 5, 16, 5.5], "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "Gears", + "origin": [1, 2.5, 0.5], + "children": [0, 1, 2, 3, 4, 5, 6, 7] + }, + { + "name": "Tank", + "origin": [0, 0, 0], + "children": [8, 9, 10, 11, 12] + }, + { + "name": "Axle", + "origin": [8, 8, 8], + "children": [] + }, 13, 14] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/netherite_backtank.png b/src/main/resources/assets/create/textures/block/netherite_backtank.png new file mode 100644 index 0000000000000000000000000000000000000000..27e53312bae5382e39144d840b4667039bb916b5 GIT binary patch literal 8119 zcmeHKc{r49+aIZHS&Bm0Nt9WQVaC2@Fq5@VsxdPdjA3SsJ=>#@Rw+c1tq6In*@_4y zvS*i6R8pZt^xmVM()T{!^M229eD8mc;}|p7b^XrYd0xNkJkR^OV=VD|`FXeVfv5KwEpJHNj8Dn@)3~c#>t90p4U8vOmQI1o9uqzeJ(G z*4Xsh*I5z9dap6MM1dV661@_9m9&d>K9F`%sf-jW$HC0tNSg0U8~jq225n1Lx}BMP z{yDVQKIGZ8C$9@rX|B&c>x8bj_F9E8Ow+@KqY-OXF zX#Jjf<`0LuIX-7OkiCD zzWH8&iVsPr-dAVubESM2DG=sO4<|72z=*&@^#?VJ}H_VWun4>z}>T5}3YRKz;uZsHnUGOf=Z4A*bD__ya4!O~?su^Wk#3-l3 z*l6+Clw+!VdPB$Fnc~Bwo0ihXx9eHr6Svm5ER`CG`Z3G{LRCsM zw7EutuvM#G>t3#Lhs|M+55tQa8z)a0Z!ux0Pz?TE}f$c7pYLp}m z@Fu>vbXDK;V$6+&PC82|bEdIW?I5(Ykw>I#+I~;~yO*ye>*T`ej^RcJatYG)fsHdU z`vganT5bRY;SN5Z1bfp;F$pU>#w}iP%UMCrtb37Z6+8X*ilTh({T{;c8UA?s>wL8< zkc<-e!0sEuTX!_!Z{P+OQXPE?n0nLwMy`p9UuClqwqGvR_e?iY$U3n3$yfUeQB+ac)C%L?Ms*KrG{C6vgh;Z>khG z?rpu%_%XD)lB8ULxc&Aetv;mGG2sh|yotv)9Ut3T`#e4Zd!VR!Co3S%+RsJJ1NZpN zW9oi`b>?zH zilNMc@jOSng)I_tt^B|V%OZJze(NTfaaqsMEQ`zubgPLSHoa}AL6oSVbg-c%% z<4>N5DKY5_rkbX=E4S7zMo;Xrb$r+su<+LIpqtTH;IIi~CO?BJ^s&HB<}8_Pez6{R zb2qcPQ8Ka^5lK2|d0g!1MvP(Mv(}swRLbt+WsQmR`;VSS8iI#h!HH*WHB((U)l#^VnqJdrBOkB5i>rl(1+ss%%5+fMK; zq}O9tZ20Bh9Z7b__gh<9LNlv{J43|nW2sy`OL>gM?qhn2dA2T3OE_uEpL;fg33JjJ z(xJIEI|JMrr39o~^MqsfTs@Gi=UAoZvV4 zyYZ3bmDN>m>Z`i7I=mM5`S~)>$4A~?IB-qa zWs!;8yl2Dqed?qxDQ6`7g2uX;@GZQ&ds~bw+=?B+NN}E8&!j@fgXPMHsy>&y50FmY zx;I;t{GgX$O%ps{Gi8RaI;Xm6TV(Q?(vzRmLV`M($oP`_>8Y_O_i#MTh{&7hi?*2 zOsA$OT23_Qgd;gcQ+ZlDP)VqhpExbo5iG8LypFndyU*9vZlGBEMsrp6ZQKa@@z_$T zBAIWNn|ni95Pws)gW$p5!zZPJ9y@&+DGj|cx9mpl;!Tt!A3vYEjh3*qLlv^+ihqyW zIZw=j_Vl{Dda)fM@%{4UEycvdeC@*fDtTz+=k8P!n%WJMeqm)NbK$(ogG$jVw%gx* znd6DiJ>J?8*SQsHra<9c92hv^_~zqNqoRTLJH#9Ad=6O0Ur;7wIQT_m2hE5$80&o3 z);q@0|KzTM?vA3kElZi3-)BH-y%ipX%+YYSJiFeIGRy8iY>ugcfaGqVE z29N?*kjz2RMOK2*;mIk*58*zf`Lf*H1wByWowV7iZKfj#d_sYW$r}JgWcR1|AFYO8EdQ$`faYRuJ4K1;T zhJW0}fE!p!$T@A(dwLR$M{G*1cMGtDe3~s^JL}svSmoNU=gZ1}oEzDaC2bIYT%obi z${Vb)P-O4x?bF*+XD75?S5G1}MZ_ty;p@(*ZEz`xPtS&Hnuay?+-wuwS*JL2UBsu1 z4z)f%&~SH8#H2pARh(ICcYIQmidIvfc5rab$@eNVjL_3MSw|6fcWr4$4Bv|Gi^)+3 zr_Sp5Bqr>PT1fG4y~?*mm+r*+e2URR2zNbx$}{k^hK0&SjQ!iA`%$*z%Hz@3+%G^U z4(->V`Rw1L)?2wNlyLnj*tG)B5aUsiixDwuzE0rWY9HN^d(K%7x8x)E_3X2K=gbxR zHj1HNSVi%+ypQ}^H{lV_&_vB9(qQa8) zb-t#8>FeicoT7bH+z2PcFRX5t6GCC{hc1y=tPCY5I(kYEZ0xE$N#EHFeG6+$4syA?X z27$D6{k;i94>D86ne0mO(w3X4x+5n;A!*AUP{YA+-iBm1ifJI7Y!isLB?fvB(Ih!t z9bPSe3_w67GYK;OR8KDk#$Q`*l@|m2W=})qWL6PBtfyj z014~|06-Bim_i}77WKu@SY!5a#Pz@Sv>FBS}@G3%$lKeb@k z0`DkLYchl8ODB?zS!6G!{932pp1zE=K7AQv_S91*imq=h~>)R3w0k2t%kMi5h4y9El);k!TbW?2J|;f>mJ%HIzCDSX4!> zQnAkgqi>1TmP0^bKW8jG2}~CnoeGo}#fwDqWBgpQrBKN>OafarI0~f(Lm|{v;i~Fz z1RC)Zw4Y380BO!}d5?skpZ!gzX6ZXMifb9U%64=!NFt5%7 zyTKUJ$pj{iZcC$iYRj>sm0?q^7L|{N8jh{P9`${n&;2JKbWk6ZpUEK1F-*LQ~v{}^(|pd z0b3e9V2ytpvd_2Cx0d8dS(QpgX0;7q2*hvlGYBj)Y4r#I9ltFR-3VT;WT4-EFSbAC zDSwj4&Kd|Zl8hvQ(duv{7)f>^f(bBZ7?^-mC263LBs2-({3|C)Kn?)s z3>4SuIm;-0&p+i~@qTV(c5=ahZVQKjVJKTT5`$2~sKVvGowke?l-*(f*sT`32jOs- zwR&i=dlUxCPDC4DZ*NZunf|Lzf8@>of?H$%JxBkO`C8aFYeSlM08qtl%zb`df9d{D zfZrG_C`7UsgZ5XUuZ4V*WzB;Ki22(b@PGrJm(U*%%b+;qf+gV1Ph;!t4(RC^~BW|zfdpm^2d^VwMzBAD=4UN-|+`rErv_Y|iE#~#FR=1?r+%LWzN zy6{y+%lw-1B{;WEB#&%*ts8FE#Mr$L`$nUzPP2lQYCUi>^N4as`!T7dr7u@rE@|oV zfyxV^8wOe_W{x~z3C~3}F1FA@b+&Lf;DXk6E^5xc;p;Qz zTIxZH_W3vYZu^{q-{ucfd8lzZ@?}6p!O4ow>$e;oL_sg|;$-726O*}S) z&!c3}hz81}ic>F#N*BA}v$^R&{Uf!@7tFGTx2U94HMo-{!=_r!JmCR_MKLZ#yWdgQ zeDGvj>R~=hL4{G|CLk!mtl;Zu+1TPcc{{CW)W){cY897B(+7L_OOm>Zj^y-Ro1PQj zh~?OYmUy_ySR*bGFe&gFw|@~f3fmd|I~S}NCa9Ngc{C_!N73~Vp&jwBCo!?Ld6!8i z)5WSPdBEIX1)z2J(xiA>f__(N^58g1ca}SAqilTx30kg=9Goeph#3x!>O7J$r?t2l$TpJ$v;iq{Z0h0ITLOv{etgry~_fNxbZ%sTjpb)IMm7R#!Xu zRx_Q|Fc;+pvt?59Q|Y^vSF}{i}Ng5d~~X#*z-_d$VRLZ6Cx(UW*lw8UvU1omw<)epY;xtB#|LXlOyFy$!Z31z$1W0ut3e zBfj(AnY@Qh+f7yK8x6u!l&tvci&yIXj~Dm1hRs6ntVkda`+k14vV3lX?|5C4Xk-xM zWn^iAanmO^&5!|n+Uc31-qH$$uC$T7f5u{LS<$2N(Gcl46;8>~4EKYAx_L0;7Y*8>SPnziMcbU)Hz*fGK7<=3mDQg=av6nOHsT-p>?@;J=>E6^Svt2VB>Z2lKcYE%u^g5gpAd6~d z_-}DG2P}TIdHgRM3+{RG>4je_q9&5RKzT1s`h(o+v*%}@%T_DSo$`!gZJ7d2>b_)E ziZOda&K`0YIJ+yE9g&in)O5HlrmQ-Z&g#8km*@~Gy1>cS?4)i~kN*@q@YF2B*u2f7 z(Rf>Ch_n(nK#kwbq*{3DCenS)Q%EQ5(k%zA zc49v}KBMpKvkN{)77fmFICYC{27KPR?JLfV^^*YaET>o-^*yR6jQS>?gZxEPD3+p{F1GxWM{*_rapEm8JOnp66f#yy)u6zGnk#VJihq*V74>0 zb)5x{COy=>IqbKl=x6Sa+rB%ni*T*RWyR`}zHht_#If@2th$Qq3NGn9uP$&*5}8!B zO|{Nu8#z$WR}ODcNitwIdAsd_i{yQe**pB%z=At=$NFHgHuS*~*RC5co3aAC>vJ9i zE)ZtG_IYcs^=8GX&q_DikZtU$6*+Mes?k{m};EbpqhFW%SFJ)!oeA!VMIWY_-Ri*3ScpyQg>{fYE8&${Uv z93I_OpUhdpUlkl#kmbS^n|zKgB(#$pqZbtZcv-nDtu#aQ!dO|n+9XyZARjGgy&rr& zAT#9htbn_>^S1ju2)q~na4CE0N>g;z!8_J1E7niQ?vWjfF6MhbiEysDyfOI6bo&dv ziBI=Z8)u8e>*m&TJf}X|^kBQU-Hi0f-7?&QjZ0JqZdnCJGZEZ^BBLd~bag0{l#gw0^_x1>dukk7@hCINwDZw?o2mH1sHVgd?LUT+ z3QsmyY5fu=RBakBtZ1O24l;T+etL2xBV1d)_TJ}>-=a{O!`#WW>O;22Evt(v)Gasm z|Ku*H4%iGoRLt(Y`dl+t{CgZ0_vt~mLvl9K33k1d7ki^=DFdk5AkzM*O- z+*7x==08lO+TR|+9v;l-IPY;DjTvD2_bl!-zFPOgfY(wK$|zmTW(WDP*{`|{(qne4 z&vo~$@R(J#I`%TpVd^QS|NA;pDKCts-hTDx#P4((#@lpts4%w;&wh-lu(%e zar(dx-HkmK(-teEHG^5IS};YJktJEPnZC@WfEoE9CY%=5>C~CIFD{SpYg9O0o)Er} z+H%@489cZLCp;CPvYqIH-C)hBIS7uoiOg&&&gEgbFA~r%bGia^m(FiBv1RlGr<>P4 zOnZ5uPj-bTY2un!r97B%{SRBCac4YAW!F2Z%Wkrah8oNBTb@SDEU$OG`=o3-W8Cwy zluf^t&F?eX=2m`dEB>P`^9IG{RoMO{?~XiE6Isfw;_IKp+aExC6r5gp+Gz6Rlpm%+ zM-tDTIZ%2sx$(sF7e*JCE32D(W?Q0A=pACD{YP?_G5K;S9u&xV5MC!$AlCy5#agUW zfc$s}#_%AaSmuuHJ98e35ewY05mYXbt6)PSvF{os6uKrLjK3zH&k$f2FEVH8mZpn?G4i3F+i4GR_QrFre|trn^<;28@7D zfFzI<2}Ff318?AAaqQ~@dSgHOl|Kc7xEtkv1N}-bLo5benH)J^t#|6jamVW8WeVhc zv4ClKq=5p6LZK6J6h6qqQOHDB9D`4TaAYzKj1`aoh)O1nq4JZdU{J<~^i&8rUX1V% zK@vqkh5#HDgb)fMk&gpu0EFYw06Gui^T-fSFoq&fDMl&*l#Go^PbEO801^lSt_%Uf zLIrUYDvyU_kVs@4gF>c33_g(zF=z%V{W&m~1o^pRNqFMxnIH)W$I6vbq`bs3fn2M4 zy%Z*vLZL9ImkprNr~nNh(EtXWK_$^&gTf)D3Q2Q4D?r4PhIcODGrbW`5J@+&6cj=P zg-mEL(H{&G*$yHtsILx$*)WgnhRIe!AS_pg$>kDvtUg+dp3+cM7}iL+Fqg^s215fF z66h;#q~<(9A;BR0i_mAU^zVp0|NVnL?0m zr-GGevfQTcyh5@cj3i1nJhff>BBIrBp ztKG8nJ&4O?j@5&u?@>%YeIkac6$*(MQogCvtGxLyxH0x4Ir>-TV`0PAY`G#4sbUcv zsFl6b{ab*;49moPNT!m%EA+9DVOhppL`clTbI1jU+?RyW3v(n(^o8^{{)}Yb-{=9M z{@~=j^!*^$2f5x$f%gJ`$gU4^y_W*-1^$p-|2MhJU%zrgGUWe0E%HK5Y;X!fUdBy$ zOMN(o*K*V#`%E(OG*RKZLWM$ESm{4Ts4sWeB9o@DAJ@yY$J}%Z!D-w4gm7f4-H)>* zj9zy$mur#gVfzoC+{}v}4%Ualucmo>|Grr^d#F3bbUb<`c7lJCX>?hd?d6i7>NRq= zzWb$Qm;TkInptsHTQ$8>UekA7C!X>i1^sN_CR^8!p#gU_U0sFH9b=TongBN|li+d@ zwox>795-0>NWEzaKF`P+O8Hq)X`8rGm@4;{T!L@UL18v{UW$xgC~q%zq`56RGQ%O* z>}C$oa_w37A0DZ)nyAdMnXv`oQ;TMHQiRhg#hVZ9jq!Bu_~mPCoyrV#RMFdVzAyD$ f`EM@{^;P#wm^IJKx4<@rria5IMtWex~I!aTKTuimyKVTa1xj(2tNu*+)KnS7aaS{jxDFr+P zLV4|BNLcKhC3>&;##K|T78tcP+FjT=zx~O*DY0eyw+-&SJR+3og__*nW1aHwMdFyj zGegW%T5ZWWcJ{?SB#nz1*wGvE1$pGi;Be#WVx1Fp_2KDLD<8OLmjAhM@mP2UGCrQ) zIyiD$xi067pm(?4V-Xi!_$qep`SJz7yh`@ggs^Qb!utu++#9 z&kEV*;E>C0zpCG~QNz5&&?%>f3!QVUN-csrws~_Tt?mg=6cyKr*2m53w>svaqub_B z-Ev{`@uv*h{oI$Nfr89Oyn^^$BhELs^vpK&-u=w9wX+8Mst_SH+`-Lg_VuXR>j-3YQ)sl6cF ztDmP27`gOqvRq|w>ijS{&KOtG){&-Vk|>sY$wT#?Kzw$;jHm z4E@Ks$qUjpZPE_PD(oUfX3S)CnQ}G}NAj(fTCwnD+@_U$B zRq2JY@JmzLw7#7_+mrTutEE|dljZ!_JKqMT_~-{k9^6-W;6%Y$*4!tqnE*NRM85a@ z(k@1~`P#uNGOT8)EjOjqGMgm4<0m?p(^GxQdNn@_b47_K8(+>M>#^<=oQcH)cl0(# zqj0+yY3fGoE{gls=x5g8BEADLHkIHzXjOiZtEZRdeQ<;5dOiMG!>;MSY*F@Q(kS~z zr}baoJESFh6gT?yFMYvBe=ukaowEf$<1Zp?4{OsIiNE;vpS_Qta5GYRcz7=pPm#_Rs3MZK1}p0IT`BA zk`G@nZ+n{K?%y*w6tsB3EH`r zJH{*v{9YIoe6^RiFZjykR%iP6w=;yTM_Wi{=MN1gECD@gb&3-V4~*t(Qi6*t=NWb< zT`sw3`+0@=Ht$=>fuklb!b(Gm@PDklmTunCaboc7B~E?s97WHM>mwZxJ~SH59x@-+ z?Vsro^0ev}Kk|XX`1GndM=ySpO)Oe;qIkovFP*L}+m{l!>x^UD@sZPt%DQ#)YV6lN zh%Nf1=OVL$KUlLq=V0G+`;AZKgBH(Ah!2Vdx?>KZe3tln*yelM)rY_Hd?vuu4-72> zPIc`ca!5H%A9b%B9cnn8c1qx(?XZK8;Pt1D;lNM5*z?^d5D1M_0fXVoWH4Sg9JtLC zt9$|Du0HdL%_CW2_E%-$goed4I|(bUPJrh`+wA!(5Aeo zNy_}SX3-;!?VmT?%Ef%P&2mJ5Y)1cO z0&*fDIf@PO1tNR&qq@^*lz?lG4k5E}EC~aO5O~B(p@4YrKu&xlhsH%aIw0+obeJFt zl7lE^lu#t2EA7#0UON1&n#Q70YKT129v#Z^MKQ!u2t~q>FgURez3XFn?5li`4JdH-f;s{s*0e}&JEKVc`m4HZQsiGL?aD`+X zsX!tZh(#zBC&(7Z$nDW+cpWuC4zF_DlGBuV{q80sCO)6a<|yG{@!aL3xqFXtUn|Z$4EJlTP!4! zTTXT=5yr?S`;3u6sws8cLM{&r2c`Br*~Xp8@_l2Yl94ZnlBg|I=*dVf=M7F0BNeJK zTn-izLQ!xaGME|v4qh(cy*;3J_M=+)OCYejH~jCQU+blgMXf8{Rm_P|Ic2)qqgCw2OlJR67glCg@6!Ii0rbs3SMI1;)1(Rb0 zFb@RbR5&U?r9cFLgyZ4>kU-)AI2?{Z;^H6*nFvmz@R17ON&tnEqf$|EVJae#LZuKm z1b|0la{v;Ag8(*{Oa^d7E{*_^2pkG|oJw^LbZ1|tJ(_^QsmawdzCuvW6HBAu@)C%+ zVukGOQlKCT3Xp>;+3>cuWV|h&K%x>UI1(BE78DFgWpJ9SSn)UvfuLUDa_GxpP7qEv zK@`Y`uo4kpy`VZ6I=mfNT2NITFtd6d-VL20g+RGj8YmVE?a`{(P%27wQK9T6%7yMF z=BN$TV2G=#xQUu`0r^<<&<^_{@L!k$BE$;O|Hktc`i8|>Dp!c5kv>u%_8N#I|1i({ zz;BrR;ch3BOXHY-v#I~U*^MWx2W%^r#!d1c07Z|F##@q5pq2`SQnvv*$QhSk2F5~M z^%1~2jxTW{KoK8;`|U)ry`C4mCy{x!wsVhHL>U75)Ng5RuL0l0YH| zy~{2W^W+Lp3OV!P9DvUmE-v*sqn1qM-_m#SiU>%RTsXMf;&A|u5{ReJNfbJPiXK00 zlpR*pVPEgoPSt~0Ec#?U>{LC9&Qv90K#W8p6hP8_RWPkktM1^`Un3e zvhN@C08@W*@=^MJlIxRPAEm%Yfj?!}C%HaKfsX=z%C7<*$Yt+>i+VzfS?bP$wjm zEP`Lgwb?7&UDdDUh!I9zBK$N>;_-zHftWr^_0d2S7Ma46I&vnd-mby}Ek|a}vzAr3)j1RyTES5B9=lw#Tq6i`zCn&x-O34oX~W=b54L z4X^&Yz6WOB+h-x%j+wT)EZ8@opM0*W`9ajF)twi&-a%?C8;uz_*}BA~xQIKnWf8UB z0Kqt;)j2CoSMy6xlk)D;z2zDa0aMOECuvR9M=8255~hD~gx_m3r$O>f?rLMNM`zF1 oWE}GI^c<=wEbS!W%4d#c=!j9Q;cE8pOqDK7H*eQNF5$`l1`%$?%m4rY literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/models/armor/copper.png b/src/main/resources/assets/create/textures/models/armor/copper_diving_layer_1.png similarity index 100% rename from src/main/resources/assets/create/textures/models/armor/copper.png rename to src/main/resources/assets/create/textures/models/armor/copper_diving_layer_1.png diff --git a/src/main/resources/assets/create/textures/models/armor/netherite_diving_layer_1.png b/src/main/resources/assets/create/textures/models/armor/netherite_diving_layer_1.png new file mode 100644 index 0000000000000000000000000000000000000000..f4ecc6756d04e783520ab2b6b9c57009b6e9d4c6 GIT binary patch literal 10002 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/models/armor/netherite_diving_layer_1_original.png b/src/main/resources/assets/create/textures/models/armor/netherite_diving_layer_1_original.png new file mode 100644 index 0000000000000000000000000000000000000000..515a9a12d452e1e26e4ddaa68d68f8b5b4cdeb8a GIT binary patch literal 9195 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 b06{@%r8S7EzJ_>ULj&n)8EclPyPo+kGru|3 literal 0 HcmV?d00001 diff --git a/src/main/resources/create.mixins.json b/src/main/resources/create.mixins.json index f3af76190..a8cd94f97 100644 --- a/src/main/resources/create.mixins.json +++ b/src/main/resources/create.mixins.json @@ -6,6 +6,7 @@ "refmap": "create.refmap.json", "mixins": [ "CustomItemUseEffectsMixin", + "EntityMixin", "MapItemSavedDataMixin", "ContraptionDriverInteractMixin", "accessor.AbstractProjectileDispenseBehaviorAccessor", From 53cc386b86b0b920ab328e1ec3577d3747cc8ba4 Mon Sep 17 00:00:00 2001 From: PepperCode1 <44146161+PepperCode1@users.noreply.github.com> Date: Fri, 7 Oct 2022 18:48:49 -0700 Subject: [PATCH 2/3] Layered with mixins - Render netherite diving gear with both layers properly - Mixin to HumanoidArmorLayer to render both layers for all slots --- .../java/com/simibubi/create/AllItems.java | 12 +-- .../curiosities/armor/BacktankItem.java | 17 +++- .../curiosities/armor/DivingBootsItem.java | 15 +++ .../curiosities/armor/DivingHelmetItem.java | 14 +++ .../item/MultiLayeredArmorItem.java | 20 ++++ .../mixin/HumanoidArmorLayerMixin.java | 87 ++++++++++++++++++ .../models/armor/netherite_diving_layer_1.png | Bin 10002 -> 8897 bytes .../netherite_diving_layer_1_overlay.png | Bin 8724 -> 0 bytes ...ginal.png => netherite_diving_layer_2.png} | Bin src/main/resources/create.mixins.json | 1 + 10 files changed, 158 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/simibubi/create/foundation/item/MultiLayeredArmorItem.java create mode 100644 src/main/java/com/simibubi/create/foundation/mixin/HumanoidArmorLayerMixin.java delete mode 100644 src/main/resources/assets/create/textures/models/armor/netherite_diving_layer_1_overlay.png rename src/main/resources/assets/create/textures/models/armor/{netherite_diving_layer_1_original.png => netherite_diving_layer_2.png} (100%) diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index 347e969b2..3eca8725f 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -252,32 +252,32 @@ public class AllItems { .model((c, p) -> p.withExistingParent(c.getName(), p.mcLoc("item/barrier"))) .register(); - public static final ItemEntry + public static final ItemEntry COPPER_BACKTANK = REGISTRATE.item("copper_backtank", p -> new BacktankItem(AllArmorMaterials.COPPER, p, Create.asResource("copper_diving"), COPPER_BACKTANK_PLACEABLE)) .model(AssetLookup.customGenericItemModel("_", "item")) .tag(AllItemTags.PRESSURIZED_AIR_SOURCES.tag) .register(), - NETHERITE_BACKTANK = REGISTRATE.item("netherite_backtank", p -> new BacktankItem(ArmorMaterials.NETHERITE, p, Create.asResource("netherite_diving"), NETHERITE_BACKTANK_PLACEABLE)) + NETHERITE_BACKTANK = REGISTRATE.item("netherite_backtank", p -> new BacktankItem.MultiLayered(ArmorMaterials.NETHERITE, p, Create.asResource("netherite_diving"), NETHERITE_BACKTANK_PLACEABLE)) .model(AssetLookup.customGenericItemModel("_", "item")) .tag(AllItemTags.PRESSURIZED_AIR_SOURCES.tag) .register(); - public static final ItemEntry + public static final ItemEntry COPPER_DIVING_HELMET = REGISTRATE.item("copper_diving_helmet", p -> new DivingHelmetItem(AllArmorMaterials.COPPER, p, Create.asResource("copper_diving"))) .register(), - NETHERITE_DIVING_HELMET = REGISTRATE.item("netherite_diving_helmet", p -> new DivingHelmetItem(ArmorMaterials.NETHERITE, p, Create.asResource("netherite_diving"))) + NETHERITE_DIVING_HELMET = REGISTRATE.item("netherite_diving_helmet", p -> new DivingHelmetItem.MultiLayered(ArmorMaterials.NETHERITE, p, Create.asResource("netherite_diving"))) .register(); - public static final ItemEntry + public static final ItemEntry COPPER_DIVING_BOOTS = REGISTRATE.item("copper_diving_boots", p -> new DivingBootsItem(AllArmorMaterials.COPPER, p, Create.asResource("copper_diving"))) .register(), - NETHERITE_DIVING_BOOTS = REGISTRATE.item("netherite_diving_boots", p -> new DivingBootsItem(ArmorMaterials.NETHERITE, p, Create.asResource("netherite_diving"))) + NETHERITE_DIVING_BOOTS = REGISTRATE.item("netherite_diving_boots", p -> new DivingBootsItem.MultiLayered(ArmorMaterials.NETHERITE, p, Create.asResource("netherite_diving"))) .register(); public static final ItemEntry SAND_PAPER = REGISTRATE.item("sand_paper", SandPaperItem::new) diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/BacktankItem.java b/src/main/java/com/simibubi/create/content/curiosities/armor/BacktankItem.java index ce63ccc04..d5b0c0828 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/BacktankItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/BacktankItem.java @@ -1,10 +1,12 @@ package com.simibubi.create.content.curiosities.armor; +import java.util.Locale; import java.util.function.Supplier; import org.jetbrains.annotations.Nullable; import com.simibubi.create.content.curiosities.armor.CapacityEnchantment.ICapacityEnchantable; +import com.simibubi.create.foundation.item.MultiLayeredArmorItem; import net.minecraft.core.NonNullList; import net.minecraft.nbt.CompoundTag; @@ -27,9 +29,9 @@ public class BacktankItem extends BaseArmorItem implements ICapacityEnchantable private final Supplier blockItem; - public BacktankItem(ArmorMaterial material, Properties properties, ResourceLocation textureLoc, Supplier copperBacktankPlaceable) { + public BacktankItem(ArmorMaterial material, Properties properties, ResourceLocation textureLoc, Supplier placeable) { super(material, SLOT, properties, textureLoc); - this.blockItem = copperBacktankPlaceable; + this.blockItem = placeable; } @Nullable @@ -108,4 +110,15 @@ public class BacktankItem extends BaseArmorItem implements ICapacityEnchantable return this.getOrCreateDescriptionId(); } } + + public static class MultiLayered extends BacktankItem implements MultiLayeredArmorItem { + public MultiLayered(ArmorMaterial material, Properties properties, ResourceLocation textureLoc, Supplier placeable) { + super(material, properties, textureLoc, placeable); + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EquipmentSlot slot, String layer) { + return String.format(Locale.ROOT, "%s:textures/models/armor/%s_layer_%s.png", textureLoc.getNamespace(), textureLoc.getPath(), layer); + } + } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/DivingBootsItem.java b/src/main/java/com/simibubi/create/content/curiosities/armor/DivingBootsItem.java index 9b0abbed3..dfffc1bd5 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/DivingBootsItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/DivingBootsItem.java @@ -1,5 +1,8 @@ package com.simibubi.create.content.curiosities.armor; +import java.util.Locale; + +import com.simibubi.create.foundation.item.MultiLayeredArmorItem; import com.simibubi.create.foundation.utility.NBTHelper; import net.minecraft.resources.ResourceLocation; @@ -9,6 +12,7 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.Pose; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.phys.Vec3; import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; @@ -72,4 +76,15 @@ public class DivingBootsItem extends BaseArmorItem { } return true; } + + public static class MultiLayered extends DivingBootsItem implements MultiLayeredArmorItem { + public MultiLayered(ArmorMaterial material, Properties properties, ResourceLocation textureLoc) { + super(material, properties, textureLoc); + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EquipmentSlot slot, String layer) { + return String.format(Locale.ROOT, "%s:textures/models/armor/%s_layer_%s.png", textureLoc.getNamespace(), textureLoc.getPath(), layer); + } + } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/DivingHelmetItem.java b/src/main/java/com/simibubi/create/content/curiosities/armor/DivingHelmetItem.java index 5bfd951d0..a525dc198 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/DivingHelmetItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/DivingHelmetItem.java @@ -1,6 +1,9 @@ package com.simibubi.create.content.curiosities.armor; +import java.util.Locale; + import com.simibubi.create.foundation.advancement.AllAdvancements; +import com.simibubi.create.foundation.item.MultiLayeredArmorItem; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; @@ -82,4 +85,15 @@ public class DivingHelmetItem extends BaseArmorItem { entity.addEffect(new MobEffectInstance(MobEffects.WATER_BREATHING, 30, 0, true, false, true)); BacktankUtil.consumeAir(entity, backtank, 1); } + + public static class MultiLayered extends DivingHelmetItem implements MultiLayeredArmorItem { + public MultiLayered(ArmorMaterial material, Properties properties, ResourceLocation textureLoc) { + super(material, properties, textureLoc); + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EquipmentSlot slot, String layer) { + return String.format(Locale.ROOT, "%s:textures/models/armor/%s_layer_%s.png", textureLoc.getNamespace(), textureLoc.getPath(), layer); + } + } } diff --git a/src/main/java/com/simibubi/create/foundation/item/MultiLayeredArmorItem.java b/src/main/java/com/simibubi/create/foundation/item/MultiLayeredArmorItem.java new file mode 100644 index 000000000..025faf134 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/item/MultiLayeredArmorItem.java @@ -0,0 +1,20 @@ +package com.simibubi.create.foundation.item; + +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.DyeableLeatherItem; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.common.extensions.IForgeItem; + +/** + * This interface is meant to be implemented on {@link ArmorItem}s, which will allow them to be rendered on both the inner model and outer model. + * + *

Classes implementing this interface must not also implement {@link DyeableLeatherItem}. + * + *

Classes that implement this interface and override {@link IForgeItem#getArmorTexture(ItemStack, Entity, EquipmentSlot, String) getArmorTexture} + * must note that the {@code String} argument will be used for layer context instead of the type. + * This string will always be {@code "1"} when querying the location for the outer model or {@code "2"} when querying the location for the inner model. + */ +public interface MultiLayeredArmorItem { +} diff --git a/src/main/java/com/simibubi/create/foundation/mixin/HumanoidArmorLayerMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/HumanoidArmorLayerMixin.java new file mode 100644 index 000000000..4aa5abd0f --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/mixin/HumanoidArmorLayerMixin.java @@ -0,0 +1,87 @@ +package com.simibubi.create.foundation.mixin; + +import javax.annotation.Nullable; + +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyVariable; +import org.spongepowered.asm.mixin.injection.At.Shift; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.foundation.item.MultiLayeredArmorItem; + +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ItemStack; + +@Mixin(HumanoidArmorLayer.class) +public class HumanoidArmorLayerMixin { + @Shadow + @Final + private HumanoidModel innerModel; + @Shadow + @Final + private HumanoidModel outerModel; + + @Unique + private boolean intercepted; + @Unique + private Boolean useInnerTexture; + + @Shadow + private void renderArmorPiece(PoseStack poseStack, MultiBufferSource buffer, LivingEntity livingEntity, EquipmentSlot slot, int packedLight, HumanoidModel model) { + } + + @Shadow + private boolean usesInnerModel(EquipmentSlot slot) { + return false; + } + + @Inject(method = "renderArmorPiece", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/entity/layers/HumanoidArmorLayer;getParentModel()Lnet/minecraft/client/model/EntityModel;"), locals = LocalCapture.CAPTURE_FAILHARD, cancellable = true) + private void onRenderArmorPiece(PoseStack poseStack, MultiBufferSource buffer, LivingEntity livingEntity, EquipmentSlot slot, int packedLight, HumanoidModel model, CallbackInfo ci, ItemStack stack, ArmorItem armorItem) { + if (intercepted) { + return; + } + + if (armorItem instanceof MultiLayeredArmorItem) { + intercepted = true; + + useInnerTexture = true; + renderArmorPiece(poseStack, buffer, livingEntity, slot, packedLight, innerModel); + useInnerTexture = false; + renderArmorPiece(poseStack, buffer, livingEntity, slot, packedLight, outerModel); + + useInnerTexture = null; + intercepted = false; + ci.cancel(); + } + } + + @Inject(method = "usesInnerModel", at = @At("HEAD"), cancellable = true) + private void onUsesInnerModel(EquipmentSlot slot, CallbackInfoReturnable cir) { + if (useInnerTexture != null) { + cir.setReturnValue(useInnerTexture); + } + } + + @ModifyVariable(method = "getArmorResource", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/ForgeHooksClient;getArmorTexture(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/item/ItemStack;Ljava/lang/String;Lnet/minecraft/world/entity/EquipmentSlot;Ljava/lang/String;)Ljava/lang/String;", shift = Shift.BEFORE), ordinal = 0) + private String modifyType(@Nullable String type, Entity entity, ItemStack stack, EquipmentSlot slot, @Nullable String typeArg) { + if (stack.getItem() instanceof MultiLayeredArmorItem) { + return usesInnerModel(slot) ? "2" : "1"; + } + + return type; + } +} diff --git a/src/main/resources/assets/create/textures/models/armor/netherite_diving_layer_1.png b/src/main/resources/assets/create/textures/models/armor/netherite_diving_layer_1.png index f4ecc6756d04e783520ab2b6b9c57009b6e9d4c6..850bcece6907b2683a87766c70d5e92cdcc93b95 100644 GIT binary patch delta 5424 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 b06{@%r8S7EzJ_>ULj&n)8EclPyPo+kGru|3 diff --git a/src/main/resources/assets/create/textures/models/armor/netherite_diving_layer_1_original.png b/src/main/resources/assets/create/textures/models/armor/netherite_diving_layer_2.png similarity index 100% rename from src/main/resources/assets/create/textures/models/armor/netherite_diving_layer_1_original.png rename to src/main/resources/assets/create/textures/models/armor/netherite_diving_layer_2.png diff --git a/src/main/resources/create.mixins.json b/src/main/resources/create.mixins.json index a8cd94f97..b58d1fc36 100644 --- a/src/main/resources/create.mixins.json +++ b/src/main/resources/create.mixins.json @@ -7,6 +7,7 @@ "mixins": [ "CustomItemUseEffectsMixin", "EntityMixin", + "HumanoidArmorLayerMixin", "MapItemSavedDataMixin", "ContraptionDriverInteractMixin", "accessor.AbstractProjectileDispenseBehaviorAccessor", From 8afc834f0c5be7c5bd26a71ed0db31dbb970d482 Mon Sep 17 00:00:00 2001 From: PepperCode1 <44146161+PepperCode1@users.noreply.github.com> Date: Mon, 10 Oct 2022 13:10:02 -0700 Subject: [PATCH 3/3] Unobtainium Backtank - Allow any netherite boots to complete netherite diving set - Fix picking up backtank creating unobtainable placeable item - Add tooltip for netherite backtank - Remove direct references to copper backtank in tooltips --- src/generated/resources/.cache/cache | 34 +++++++++---------- .../resources/assets/create/lang/en_us.json | 17 +++++++--- .../assets/create/lang/unfinished/de_de.json | 9 ++++- .../assets/create/lang/unfinished/es_cl.json | 9 ++++- .../assets/create/lang/unfinished/es_es.json | 9 ++++- .../assets/create/lang/unfinished/fr_fr.json | 19 +++++++---- .../assets/create/lang/unfinished/it_it.json | 9 ++++- .../assets/create/lang/unfinished/ja_jp.json | 9 ++++- .../assets/create/lang/unfinished/ko_kr.json | 9 ++++- .../assets/create/lang/unfinished/nl_nl.json | 19 +++++++---- .../assets/create/lang/unfinished/pl_pl.json | 9 ++++- .../assets/create/lang/unfinished/pt_br.json | 19 +++++++---- .../assets/create/lang/unfinished/pt_pt.json | 19 +++++++---- .../assets/create/lang/unfinished/ro_ro.json | 9 ++++- .../assets/create/lang/unfinished/ru_ru.json | 9 ++++- .../assets/create/lang/unfinished/uk_ua.json | 9 ++++- .../assets/create/lang/unfinished/zh_cn.json | 9 ++++- .../assets/create/lang/unfinished/zh_tw.json | 9 ++++- .../java/com/simibubi/create/AllItems.java | 4 +-- .../curiosities/armor/BacktankBlock.java | 16 ++++++--- .../curiosities/armor/BacktankItem.java | 10 +++++- .../armor/NetheriteDivingHandler.java | 2 +- .../assets/create/lang/default/tooltips.json | 17 +++++++--- 23 files changed, 212 insertions(+), 72 deletions(-) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index d4c0cfed2..5a355fbf0 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -560,23 +560,23 @@ bf2b0310500213ff853c748c236eb5d01f61658e assets/create/blockstates/yellow_toolbo 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json 48a4f2df04e092f355a70994af169f8e3e23eff9 assets/create/lang/en_ud.json -697142f7df636ab2c1a4c51de518da1057f00b0d assets/create/lang/en_us.json -c748bf6346d594db47b012a642201878d6099f19 assets/create/lang/unfinished/de_de.json -d9a59a5dd0acf9f109e50536dfbb9cfd7231c02d assets/create/lang/unfinished/es_cl.json -5353625f2eeea67c3db572c76579ecceba08d07e assets/create/lang/unfinished/es_es.json -022da28dbe8794c9c70e2f56f51d194b59227910 assets/create/lang/unfinished/fr_fr.json -3d748d50b3e3452082470d4e13349e999a0ff121 assets/create/lang/unfinished/it_it.json -c1d7f5ab9f8796e9e83a98aebea60ddbd7066b5c assets/create/lang/unfinished/ja_jp.json -18dbdd8a353469d954159174c0c668af87e65a96 assets/create/lang/unfinished/ko_kr.json -783900eaad7ea3bd08c41817365025e52e8665a8 assets/create/lang/unfinished/nl_nl.json -004d34ba743ab206dea12ea4c85c00ae7cd3b191 assets/create/lang/unfinished/pl_pl.json -bbe3799eeaed6b3e00c9314607ade798b116c42b assets/create/lang/unfinished/pt_br.json -3eb467693daee7da7c40dd4a9f807ead7dd66b7e assets/create/lang/unfinished/pt_pt.json -e1cf6bdd38ab822f626e0b02c2d16637fdd2e622 assets/create/lang/unfinished/ro_ro.json -18e0fba5433d35ba1512f1c828c67443d60a0b86 assets/create/lang/unfinished/ru_ru.json -041e6917f64163ac0b8157b4aa5cbbbde9efd165 assets/create/lang/unfinished/uk_ua.json -2a5fb11b27476169d381e02f94073889b4e5fb7f assets/create/lang/unfinished/zh_cn.json -cf24b02eef0b51db5543f985e232cb84d0cc6a50 assets/create/lang/unfinished/zh_tw.json +5cabda0c8e179cc41227db3c56886d2478d1a695 assets/create/lang/en_us.json +9ea6550269dbaae7dc264bca0c9a536b792dc7bb assets/create/lang/unfinished/de_de.json +d7191119619b6c7d79cc8adf9ba57cadce4bc14a assets/create/lang/unfinished/es_cl.json +f4188969805eebcd834c75e44ac0fc69394036b8 assets/create/lang/unfinished/es_es.json +ab3a1ccddf4f51a3b63342f597a5b94418192521 assets/create/lang/unfinished/fr_fr.json +964436316a4273e55f87c66950ce98cf78f40f39 assets/create/lang/unfinished/it_it.json +285b2ea2cbe701d552e8db451e094d1b39e3e243 assets/create/lang/unfinished/ja_jp.json +fa133f62d05912a88399539a3c7fc2ec933929ba assets/create/lang/unfinished/ko_kr.json +320365889ff4bb1f1730d3f1db66e70777e66cbd assets/create/lang/unfinished/nl_nl.json +35c4d3c8d8778e80f141bc8bd63837f5352b6cf8 assets/create/lang/unfinished/pl_pl.json +4c5abf767860b2875e4c9b687fc5ec67b46a0674 assets/create/lang/unfinished/pt_br.json +14f6c51f5e72dcb26f23cb639f99c3dfa2d6b7ec assets/create/lang/unfinished/pt_pt.json +871db8052bf4f32cf9f9d84dd704d20803cf3ed1 assets/create/lang/unfinished/ro_ro.json +abd7ff9715b030e5c2b891dcbf6a6d8ca4ac81e6 assets/create/lang/unfinished/ru_ru.json +ad9b1c4c5da8fd2fd08721f0e18aeaccac9fa7bc assets/create/lang/unfinished/uk_ua.json +76f4d15a367e7a5cf6b64554ea1a1a1a07e904f5 assets/create/lang/unfinished/zh_cn.json +e535263bee1ab31a40d2774af3f68c8a12e8fffd assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 29ad1b200..e78940d08 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -1855,17 +1855,17 @@ "item.create.tree_fertilizer.tooltip.behaviour1": "Grows Trees _regardless_ of their _spacing conditions_", "item.create.extendo_grip.tooltip": "EXTENDO GRIP", - "item.create.extendo_grip.tooltip.summary": "Boioioing! Greatly _increases reach distance_ of the wielder. Can be powered with Air Pressure from a _Copper_ _Backtank_", + "item.create.extendo_grip.tooltip.summary": "Boioioing! Greatly _increases reach distance_ of the wielder. Can be powered with Air Pressure from a _Backtank_", "item.create.extendo_grip.tooltip.condition1": "When in Off-Hand", "item.create.extendo_grip.tooltip.behaviour1": "Increases _reach distance_ of items used in the _Main-Hand_.", - "item.create.extendo_grip.tooltip.condition2": "While wearing Copper Backtank", + "item.create.extendo_grip.tooltip.condition2": "While wearing Backtank", "item.create.extendo_grip.tooltip.behaviour2": "_No_ _Durability_ will be used. Instead, _Air_ _pressure_ is drained from the Tank", "item.create.potato_cannon.tooltip": "POTATO CANNON", - "item.create.potato_cannon.tooltip.summary": "Fwoomp! Launch your home-grown vegetables at your Enemies. Can be powered with Air Pressure from a _Copper_ _Backtank_", + "item.create.potato_cannon.tooltip.summary": "Fwoomp! Launch your home-grown vegetables at your Enemies. Can be powered with Air Pressure from a _Backtank_", "item.create.potato_cannon.tooltip.condition1": "When R-Clicked", "item.create.potato_cannon.tooltip.behaviour1": "_Shoots_ a suitable item from your _Inventory_.", - "item.create.potato_cannon.tooltip.condition2": "While wearing Copper Backtank", + "item.create.potato_cannon.tooltip.condition2": "While wearing Backtank", "item.create.potato_cannon.tooltip.behaviour2": "_No_ _Durability_ will be used. Instead, _Air_ _pressure_ is drained from the Tank", "item.create.filter.tooltip": "FILTER", @@ -2008,7 +2008,7 @@ "item.create.linked_controller.tooltip.behaviour4": "Places the Controller into the Lectern for easy activation. (R-Click while Sneaking to retrieve it)", "item.create.diving_helmet.tooltip": "DIVING HELMET", - "item.create.diving_helmet.tooltip.summary": "Together with a _Copper_ _Backtank_, allows the wielder to _breathe_ _underwater_ for an extended amount of time.", + "item.create.diving_helmet.tooltip.summary": "Together with a _Backtank_, allows the wielder to _breathe_ _underwater_ for an extended amount of time.", "item.create.diving_helmet.tooltip.condition1": "When Worn", "item.create.diving_helmet.tooltip.behaviour1": "Provides the _Water Breathing_ effect, slowly draining _Air Pressure_ from the Backtank.", @@ -2019,6 +2019,13 @@ "item.create.copper_backtank.tooltip.condition2": "When placed, Powered by Kinetics", "item.create.copper_backtank.tooltip.behaviour2": "_Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + "item.create.netherite_backtank.tooltip": "NETHERITE BACKTANK", + "item.create.netherite_backtank.tooltip.summary": "A _Wearable_ _Tank_ for carrying Pressurized Air.", + "item.create.netherite_backtank.tooltip.condition1": "When Worn", + "item.create.netherite_backtank.tooltip.behaviour1": "Provides _Pressurized_ _Air_ to Equipment that requires it.", + "item.create.netherite_backtank.tooltip.condition2": "When placed, Powered by Kinetics", + "item.create.netherite_backtank.tooltip.behaviour2": "_Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + "block.create.placard.tooltip": "PLACARD", "block.create.placard.tooltip.summary": "_Frame_ your _items_ in brass using this fancy wall panel. Safe for contraptions!", "block.create.placard.tooltip.condition1": "When R-Clicked with Item", 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 b3b47f45f..de4435372 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: 849", + "_": "Missing Localizations: 855", "_": "->------------------------] Game Elements [------------------------<-", @@ -2020,6 +2020,13 @@ "item.create.copper_backtank.tooltip.condition2": "Wenn platziert und mit kinetischer Energie betrieben", "item.create.copper_backtank.tooltip.behaviour2": "_Sammelt_ _komprimierte_ _Luft_ mit einer Geschwindigkeit basierend auf der Rotationsgeschwindigkeit.", + "item.create.netherite_backtank.tooltip": "UNLOCALIZED: NETHERITE BACKTANK", + "item.create.netherite_backtank.tooltip.summary": "UNLOCALIZED: A _Wearable_ _Tank_ for carrying Pressurized Air.", + "item.create.netherite_backtank.tooltip.condition1": "UNLOCALIZED: When Worn", + "item.create.netherite_backtank.tooltip.behaviour1": "UNLOCALIZED: Provides _Pressurized_ _Air_ to Equipment that requires it.", + "item.create.netherite_backtank.tooltip.condition2": "UNLOCALIZED: When placed, Powered by Kinetics", + "item.create.netherite_backtank.tooltip.behaviour2": "UNLOCALIZED: _Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + "block.create.placard.tooltip": "UNLOCALIZED: PLACARD", "block.create.placard.tooltip.summary": "UNLOCALIZED: _Frame_ your _items_ in brass using this fancy wall panel. Safe for contraptions!", "block.create.placard.tooltip.condition1": "UNLOCALIZED: When R-Clicked with Item", 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 3b5d6ac16..ef9e6e0fa 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: 995", + "_": "Missing Localizations: 1001", "_": "->------------------------] Game Elements [------------------------<-", @@ -2020,6 +2020,13 @@ "item.create.copper_backtank.tooltip.condition2": "Al colocarlo, y darle Cinética", "item.create.copper_backtank.tooltip.behaviour2": "_Recolecta_ _Aire_ _Comprimido_ a una velocidad dependiente de la velocidad de rotación.", + "item.create.netherite_backtank.tooltip": "UNLOCALIZED: NETHERITE BACKTANK", + "item.create.netherite_backtank.tooltip.summary": "UNLOCALIZED: A _Wearable_ _Tank_ for carrying Pressurized Air.", + "item.create.netherite_backtank.tooltip.condition1": "UNLOCALIZED: When Worn", + "item.create.netherite_backtank.tooltip.behaviour1": "UNLOCALIZED: Provides _Pressurized_ _Air_ to Equipment that requires it.", + "item.create.netherite_backtank.tooltip.condition2": "UNLOCALIZED: When placed, Powered by Kinetics", + "item.create.netherite_backtank.tooltip.behaviour2": "UNLOCALIZED: _Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + "block.create.placard.tooltip": "UNLOCALIZED: PLACARD", "block.create.placard.tooltip.summary": "UNLOCALIZED: _Frame_ your _items_ in brass using this fancy wall panel. Safe for contraptions!", "block.create.placard.tooltip.condition1": "UNLOCALIZED: When R-Clicked with Item", 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 8d6b84ed3..c25bdeb8e 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: 15", + "_": "Missing Localizations: 21", "_": "->------------------------] Game Elements [------------------------<-", @@ -2020,6 +2020,13 @@ "item.create.copper_backtank.tooltip.condition2": "Cuando se coloca y es alimentado por cinética", "item.create.copper_backtank.tooltip.behaviour2": "Recoge _aire presurizado_ a un ritmo que depende de la velocidad rotacional.", + "item.create.netherite_backtank.tooltip": "UNLOCALIZED: NETHERITE BACKTANK", + "item.create.netherite_backtank.tooltip.summary": "UNLOCALIZED: A _Wearable_ _Tank_ for carrying Pressurized Air.", + "item.create.netherite_backtank.tooltip.condition1": "UNLOCALIZED: When Worn", + "item.create.netherite_backtank.tooltip.behaviour1": "UNLOCALIZED: Provides _Pressurized_ _Air_ to Equipment that requires it.", + "item.create.netherite_backtank.tooltip.condition2": "UNLOCALIZED: When placed, Powered by Kinetics", + "item.create.netherite_backtank.tooltip.behaviour2": "UNLOCALIZED: _Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + "block.create.placard.tooltip": "Pancarta", "block.create.placard.tooltip.summary": "_Enmarca_ tus _objetos_ en latón usando este fantástico mural. ¡Seguro para artefactos móviles!", "block.create.placard.tooltip.condition1": "Cuando se usa clic derecho con un objeto", 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 153b506c2..a0e45a890 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: 2144", + "_": "Missing Localizations: 2150", "_": "->------------------------] Game Elements [------------------------<-", @@ -1856,17 +1856,17 @@ "item.create.tree_fertilizer.tooltip.behaviour1": "Fait pousser des rotors _indépendamment_ de leurs _conditions_ _d'emplacement_", "item.create.extendo_grip.tooltip": "UNLOCALIZED: EXTENDO GRIP", - "item.create.extendo_grip.tooltip.summary": "UNLOCALIZED: Boioioing! Greatly _increases reach distance_ of the wielder. Can be powered with Air Pressure from a _Copper_ _Backtank_", + "item.create.extendo_grip.tooltip.summary": "UNLOCALIZED: Boioioing! Greatly _increases reach distance_ of the wielder. Can be powered with Air Pressure from a _Backtank_", "item.create.extendo_grip.tooltip.condition1": "UNLOCALIZED: When in Off-Hand", "item.create.extendo_grip.tooltip.behaviour1": "UNLOCALIZED: Increases _reach distance_ of items used in the _Main-Hand_.", - "item.create.extendo_grip.tooltip.condition2": "UNLOCALIZED: While wearing Copper Backtank", + "item.create.extendo_grip.tooltip.condition2": "UNLOCALIZED: While wearing Backtank", "item.create.extendo_grip.tooltip.behaviour2": "UNLOCALIZED: _No_ _Durability_ will be used. Instead, _Air_ _pressure_ is drained from the Tank", "item.create.potato_cannon.tooltip": "UNLOCALIZED: POTATO CANNON", - "item.create.potato_cannon.tooltip.summary": "UNLOCALIZED: Fwoomp! Launch your home-grown vegetables at your Enemies. Can be powered with Air Pressure from a _Copper_ _Backtank_", + "item.create.potato_cannon.tooltip.summary": "UNLOCALIZED: Fwoomp! Launch your home-grown vegetables at your Enemies. Can be powered with Air Pressure from a _Backtank_", "item.create.potato_cannon.tooltip.condition1": "UNLOCALIZED: When R-Clicked", "item.create.potato_cannon.tooltip.behaviour1": "UNLOCALIZED: _Shoots_ a suitable item from your _Inventory_.", - "item.create.potato_cannon.tooltip.condition2": "UNLOCALIZED: While wearing Copper Backtank", + "item.create.potato_cannon.tooltip.condition2": "UNLOCALIZED: While wearing Backtank", "item.create.potato_cannon.tooltip.behaviour2": "UNLOCALIZED: _No_ _Durability_ will be used. Instead, _Air_ _pressure_ is drained from the Tank", "item.create.filter.tooltip": "FILTRE", @@ -2009,7 +2009,7 @@ "item.create.linked_controller.tooltip.behaviour4": "UNLOCALIZED: Places the Controller into the Lectern for easy activation. (R-Click while Sneaking to retrieve it)", "item.create.diving_helmet.tooltip": "UNLOCALIZED: DIVING HELMET", - "item.create.diving_helmet.tooltip.summary": "UNLOCALIZED: Together with a _Copper_ _Backtank_, allows the wielder to _breathe_ _underwater_ for an extended amount of time.", + "item.create.diving_helmet.tooltip.summary": "UNLOCALIZED: Together with a _Backtank_, allows the wielder to _breathe_ _underwater_ for an extended amount of time.", "item.create.diving_helmet.tooltip.condition1": "UNLOCALIZED: When Worn", "item.create.diving_helmet.tooltip.behaviour1": "UNLOCALIZED: Provides the _Water Breathing_ effect, slowly draining _Air Pressure_ from the Backtank.", @@ -2020,6 +2020,13 @@ "item.create.copper_backtank.tooltip.condition2": "UNLOCALIZED: When placed, Powered by Kinetics", "item.create.copper_backtank.tooltip.behaviour2": "UNLOCALIZED: _Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + "item.create.netherite_backtank.tooltip": "UNLOCALIZED: NETHERITE BACKTANK", + "item.create.netherite_backtank.tooltip.summary": "UNLOCALIZED: A _Wearable_ _Tank_ for carrying Pressurized Air.", + "item.create.netherite_backtank.tooltip.condition1": "UNLOCALIZED: When Worn", + "item.create.netherite_backtank.tooltip.behaviour1": "UNLOCALIZED: Provides _Pressurized_ _Air_ to Equipment that requires it.", + "item.create.netherite_backtank.tooltip.condition2": "UNLOCALIZED: When placed, Powered by Kinetics", + "item.create.netherite_backtank.tooltip.behaviour2": "UNLOCALIZED: _Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + "block.create.placard.tooltip": "UNLOCALIZED: PLACARD", "block.create.placard.tooltip.summary": "UNLOCALIZED: _Frame_ your _items_ in brass using this fancy wall panel. Safe for contraptions!", "block.create.placard.tooltip.condition1": "UNLOCALIZED: When R-Clicked with Item", 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 449be154b..b06dea3ba 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: 9", + "_": "Missing Localizations: 15", "_": "->------------------------] Game Elements [------------------------<-", @@ -2020,6 +2020,13 @@ "item.create.copper_backtank.tooltip.condition2": "Quando posizionato e collegato a un sistema cinetico", "item.create.copper_backtank.tooltip.behaviour2": "_Assorbe_ _aria_ _compressa_ ad una velocità dipendente dalla velocità di rotazione.", + "item.create.netherite_backtank.tooltip": "UNLOCALIZED: NETHERITE BACKTANK", + "item.create.netherite_backtank.tooltip.summary": "UNLOCALIZED: A _Wearable_ _Tank_ for carrying Pressurized Air.", + "item.create.netherite_backtank.tooltip.condition1": "UNLOCALIZED: When Worn", + "item.create.netherite_backtank.tooltip.behaviour1": "UNLOCALIZED: Provides _Pressurized_ _Air_ to Equipment that requires it.", + "item.create.netherite_backtank.tooltip.condition2": "UNLOCALIZED: When placed, Powered by Kinetics", + "item.create.netherite_backtank.tooltip.behaviour2": "UNLOCALIZED: _Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + "block.create.placard.tooltip": "CORNICE DI OTTONE", "block.create.placard.tooltip.summary": "_Incornicia_ i tuoi _oggetti_ in ottone usando questo elegante pannello da muro. Sicuro per i macchinari!", "block.create.placard.tooltip.condition1": "Click destro con un oggetto", 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 d95da9a6d..49cf52db8 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: 11", + "_": "Missing Localizations: 17", "_": "->------------------------] Game Elements [------------------------<-", @@ -2020,6 +2020,13 @@ "item.create.copper_backtank.tooltip.condition2": "設置して動力を供給したとき", "item.create.copper_backtank.tooltip.behaviour2": "_圧縮空気_を_集めます_。速度は回転速度によって決まります。", + "item.create.netherite_backtank.tooltip": "UNLOCALIZED: NETHERITE BACKTANK", + "item.create.netherite_backtank.tooltip.summary": "UNLOCALIZED: A _Wearable_ _Tank_ for carrying Pressurized Air.", + "item.create.netherite_backtank.tooltip.condition1": "UNLOCALIZED: When Worn", + "item.create.netherite_backtank.tooltip.behaviour1": "UNLOCALIZED: Provides _Pressurized_ _Air_ to Equipment that requires it.", + "item.create.netherite_backtank.tooltip.condition2": "UNLOCALIZED: When placed, Powered by Kinetics", + "item.create.netherite_backtank.tooltip.behaviour2": "UNLOCALIZED: _Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + "block.create.placard.tooltip": "プラカード", "block.create.placard.tooltip.summary": "このイカした真鍮の壁掛けパネルにアイテムを飾ろう。からくりにつけても大丈夫!", "block.create.placard.tooltip.condition1": "右クリックしたとき", 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 c6999e6f2..07f22729d 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: 15", + "_": "Missing Localizations: 21", "_": "->------------------------] Game Elements [------------------------<-", @@ -2020,6 +2020,13 @@ "item.create.copper_backtank.tooltip.condition2": "설치되고 동력으로 회전될 때", "item.create.copper_backtank.tooltip.behaviour2": "동력 속도에 따라 _공기_를 _모읍니다_.", + "item.create.netherite_backtank.tooltip": "UNLOCALIZED: NETHERITE BACKTANK", + "item.create.netherite_backtank.tooltip.summary": "UNLOCALIZED: A _Wearable_ _Tank_ for carrying Pressurized Air.", + "item.create.netherite_backtank.tooltip.condition1": "UNLOCALIZED: When Worn", + "item.create.netherite_backtank.tooltip.behaviour1": "UNLOCALIZED: Provides _Pressurized_ _Air_ to Equipment that requires it.", + "item.create.netherite_backtank.tooltip.condition2": "UNLOCALIZED: When placed, Powered by Kinetics", + "item.create.netherite_backtank.tooltip.behaviour2": "UNLOCALIZED: _Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + "block.create.placard.tooltip": "PLACARD", "block.create.placard.tooltip.summary": "_아이템_을 황동안에 _장식_하세요. 구조물에도 사용할 수 있습니다!", "block.create.placard.tooltip.condition1": "아이템을 들고 우클릭", 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 8ad555c4e..8969ee79a 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: 2492", + "_": "Missing Localizations: 2498", "_": "->------------------------] Game Elements [------------------------<-", @@ -1856,17 +1856,17 @@ "item.create.tree_fertilizer.tooltip.behaviour1": "Groeit bomen onafhankelijk van beschikbare ruimte", "item.create.extendo_grip.tooltip": "UNLOCALIZED: EXTENDO GRIP", - "item.create.extendo_grip.tooltip.summary": "UNLOCALIZED: Boioioing! Greatly _increases reach distance_ of the wielder. Can be powered with Air Pressure from a _Copper_ _Backtank_", + "item.create.extendo_grip.tooltip.summary": "UNLOCALIZED: Boioioing! Greatly _increases reach distance_ of the wielder. Can be powered with Air Pressure from a _Backtank_", "item.create.extendo_grip.tooltip.condition1": "UNLOCALIZED: When in Off-Hand", "item.create.extendo_grip.tooltip.behaviour1": "UNLOCALIZED: Increases _reach distance_ of items used in the _Main-Hand_.", - "item.create.extendo_grip.tooltip.condition2": "UNLOCALIZED: While wearing Copper Backtank", + "item.create.extendo_grip.tooltip.condition2": "UNLOCALIZED: While wearing Backtank", "item.create.extendo_grip.tooltip.behaviour2": "UNLOCALIZED: _No_ _Durability_ will be used. Instead, _Air_ _pressure_ is drained from the Tank", "item.create.potato_cannon.tooltip": "UNLOCALIZED: POTATO CANNON", - "item.create.potato_cannon.tooltip.summary": "UNLOCALIZED: Fwoomp! Launch your home-grown vegetables at your Enemies. Can be powered with Air Pressure from a _Copper_ _Backtank_", + "item.create.potato_cannon.tooltip.summary": "UNLOCALIZED: Fwoomp! Launch your home-grown vegetables at your Enemies. Can be powered with Air Pressure from a _Backtank_", "item.create.potato_cannon.tooltip.condition1": "UNLOCALIZED: When R-Clicked", "item.create.potato_cannon.tooltip.behaviour1": "UNLOCALIZED: _Shoots_ a suitable item from your _Inventory_.", - "item.create.potato_cannon.tooltip.condition2": "UNLOCALIZED: While wearing Copper Backtank", + "item.create.potato_cannon.tooltip.condition2": "UNLOCALIZED: While wearing Backtank", "item.create.potato_cannon.tooltip.behaviour2": "UNLOCALIZED: _No_ _Durability_ will be used. Instead, _Air_ _pressure_ is drained from the Tank", "item.create.filter.tooltip": "UNLOCALIZED: FILTER", @@ -2009,7 +2009,7 @@ "item.create.linked_controller.tooltip.behaviour4": "UNLOCALIZED: Places the Controller into the Lectern for easy activation. (R-Click while Sneaking to retrieve it)", "item.create.diving_helmet.tooltip": "UNLOCALIZED: DIVING HELMET", - "item.create.diving_helmet.tooltip.summary": "UNLOCALIZED: Together with a _Copper_ _Backtank_, allows the wielder to _breathe_ _underwater_ for an extended amount of time.", + "item.create.diving_helmet.tooltip.summary": "UNLOCALIZED: Together with a _Backtank_, allows the wielder to _breathe_ _underwater_ for an extended amount of time.", "item.create.diving_helmet.tooltip.condition1": "UNLOCALIZED: When Worn", "item.create.diving_helmet.tooltip.behaviour1": "UNLOCALIZED: Provides the _Water Breathing_ effect, slowly draining _Air Pressure_ from the Backtank.", @@ -2020,6 +2020,13 @@ "item.create.copper_backtank.tooltip.condition2": "UNLOCALIZED: When placed, Powered by Kinetics", "item.create.copper_backtank.tooltip.behaviour2": "UNLOCALIZED: _Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + "item.create.netherite_backtank.tooltip": "UNLOCALIZED: NETHERITE BACKTANK", + "item.create.netherite_backtank.tooltip.summary": "UNLOCALIZED: A _Wearable_ _Tank_ for carrying Pressurized Air.", + "item.create.netherite_backtank.tooltip.condition1": "UNLOCALIZED: When Worn", + "item.create.netherite_backtank.tooltip.behaviour1": "UNLOCALIZED: Provides _Pressurized_ _Air_ to Equipment that requires it.", + "item.create.netherite_backtank.tooltip.condition2": "UNLOCALIZED: When placed, Powered by Kinetics", + "item.create.netherite_backtank.tooltip.behaviour2": "UNLOCALIZED: _Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + "block.create.placard.tooltip": "UNLOCALIZED: PLACARD", "block.create.placard.tooltip.summary": "UNLOCALIZED: _Frame_ your _items_ in brass using this fancy wall panel. Safe for contraptions!", "block.create.placard.tooltip.condition1": "UNLOCALIZED: When R-Clicked with Item", 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 61a9f4c2c..48a584bb2 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: 19", + "_": "Missing Localizations: 25", "_": "->------------------------] Game Elements [------------------------<-", @@ -2020,6 +2020,13 @@ "item.create.copper_backtank.tooltip.condition2": "Po postawieniu i zasileniu siłą obrotową", "item.create.copper_backtank.tooltip.behaviour2": "_Zbiera_ _sprężone_ _powietrze_, w tempie zależnym od prędkości obrotu.", + "item.create.netherite_backtank.tooltip": "UNLOCALIZED: NETHERITE BACKTANK", + "item.create.netherite_backtank.tooltip.summary": "UNLOCALIZED: A _Wearable_ _Tank_ for carrying Pressurized Air.", + "item.create.netherite_backtank.tooltip.condition1": "UNLOCALIZED: When Worn", + "item.create.netherite_backtank.tooltip.behaviour1": "UNLOCALIZED: Provides _Pressurized_ _Air_ to Equipment that requires it.", + "item.create.netherite_backtank.tooltip.condition2": "UNLOCALIZED: When placed, Powered by Kinetics", + "item.create.netherite_backtank.tooltip.behaviour2": "UNLOCALIZED: _Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + "block.create.placard.tooltip": "Plakietka", "block.create.placard.tooltip.summary": "_Opraw_ swoje przedmioty w mosiądzu używając tego eleganckiego panelu ściennego. Dozwolone na maszynach!", "block.create.placard.tooltip.condition1": "Kliknięcie PPM przedmiotem", 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 16f4e6c88..73619403e 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: 1338", + "_": "Missing Localizations: 1344", "_": "->------------------------] Game Elements [------------------------<-", @@ -1856,17 +1856,17 @@ "item.create.tree_fertilizer.tooltip.behaviour1": "Cresce Árvores independentemente das suas Regras de espaço", "item.create.extendo_grip.tooltip": "UNLOCALIZED: EXTENDO GRIP", - "item.create.extendo_grip.tooltip.summary": "UNLOCALIZED: Boioioing! Greatly _increases reach distance_ of the wielder. Can be powered with Air Pressure from a _Copper_ _Backtank_", + "item.create.extendo_grip.tooltip.summary": "UNLOCALIZED: Boioioing! Greatly _increases reach distance_ of the wielder. Can be powered with Air Pressure from a _Backtank_", "item.create.extendo_grip.tooltip.condition1": "UNLOCALIZED: When in Off-Hand", "item.create.extendo_grip.tooltip.behaviour1": "UNLOCALIZED: Increases _reach distance_ of items used in the _Main-Hand_.", - "item.create.extendo_grip.tooltip.condition2": "UNLOCALIZED: While wearing Copper Backtank", + "item.create.extendo_grip.tooltip.condition2": "UNLOCALIZED: While wearing Backtank", "item.create.extendo_grip.tooltip.behaviour2": "UNLOCALIZED: _No_ _Durability_ will be used. Instead, _Air_ _pressure_ is drained from the Tank", "item.create.potato_cannon.tooltip": "UNLOCALIZED: POTATO CANNON", - "item.create.potato_cannon.tooltip.summary": "UNLOCALIZED: Fwoomp! Launch your home-grown vegetables at your Enemies. Can be powered with Air Pressure from a _Copper_ _Backtank_", + "item.create.potato_cannon.tooltip.summary": "UNLOCALIZED: Fwoomp! Launch your home-grown vegetables at your Enemies. Can be powered with Air Pressure from a _Backtank_", "item.create.potato_cannon.tooltip.condition1": "UNLOCALIZED: When R-Clicked", "item.create.potato_cannon.tooltip.behaviour1": "UNLOCALIZED: _Shoots_ a suitable item from your _Inventory_.", - "item.create.potato_cannon.tooltip.condition2": "UNLOCALIZED: While wearing Copper Backtank", + "item.create.potato_cannon.tooltip.condition2": "UNLOCALIZED: While wearing Backtank", "item.create.potato_cannon.tooltip.behaviour2": "UNLOCALIZED: _No_ _Durability_ will be used. Instead, _Air_ _pressure_ is drained from the Tank", "item.create.filter.tooltip": "UNLOCALIZED: FILTER", @@ -2009,7 +2009,7 @@ "item.create.linked_controller.tooltip.behaviour4": "UNLOCALIZED: Places the Controller into the Lectern for easy activation. (R-Click while Sneaking to retrieve it)", "item.create.diving_helmet.tooltip": "UNLOCALIZED: DIVING HELMET", - "item.create.diving_helmet.tooltip.summary": "UNLOCALIZED: Together with a _Copper_ _Backtank_, allows the wielder to _breathe_ _underwater_ for an extended amount of time.", + "item.create.diving_helmet.tooltip.summary": "UNLOCALIZED: Together with a _Backtank_, allows the wielder to _breathe_ _underwater_ for an extended amount of time.", "item.create.diving_helmet.tooltip.condition1": "UNLOCALIZED: When Worn", "item.create.diving_helmet.tooltip.behaviour1": "UNLOCALIZED: Provides the _Water Breathing_ effect, slowly draining _Air Pressure_ from the Backtank.", @@ -2020,6 +2020,13 @@ "item.create.copper_backtank.tooltip.condition2": "UNLOCALIZED: When placed, Powered by Kinetics", "item.create.copper_backtank.tooltip.behaviour2": "UNLOCALIZED: _Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + "item.create.netherite_backtank.tooltip": "UNLOCALIZED: NETHERITE BACKTANK", + "item.create.netherite_backtank.tooltip.summary": "UNLOCALIZED: A _Wearable_ _Tank_ for carrying Pressurized Air.", + "item.create.netherite_backtank.tooltip.condition1": "UNLOCALIZED: When Worn", + "item.create.netherite_backtank.tooltip.behaviour1": "UNLOCALIZED: Provides _Pressurized_ _Air_ to Equipment that requires it.", + "item.create.netherite_backtank.tooltip.condition2": "UNLOCALIZED: When placed, Powered by Kinetics", + "item.create.netherite_backtank.tooltip.behaviour2": "UNLOCALIZED: _Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + "block.create.placard.tooltip": "UNLOCALIZED: PLACARD", "block.create.placard.tooltip.summary": "UNLOCALIZED: _Frame_ your _items_ in brass using this fancy wall panel. Safe for contraptions!", "block.create.placard.tooltip.condition1": "UNLOCALIZED: When R-Clicked with Item", 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 13a80bf3e..48bffd9b2 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: 2203", + "_": "Missing Localizations: 2209", "_": "->------------------------] Game Elements [------------------------<-", @@ -1856,17 +1856,17 @@ "item.create.tree_fertilizer.tooltip.behaviour1": "Cresce Arvores independentemente das suas Regras de espaço", "item.create.extendo_grip.tooltip": "UNLOCALIZED: EXTENDO GRIP", - "item.create.extendo_grip.tooltip.summary": "UNLOCALIZED: Boioioing! Greatly _increases reach distance_ of the wielder. Can be powered with Air Pressure from a _Copper_ _Backtank_", + "item.create.extendo_grip.tooltip.summary": "UNLOCALIZED: Boioioing! Greatly _increases reach distance_ of the wielder. Can be powered with Air Pressure from a _Backtank_", "item.create.extendo_grip.tooltip.condition1": "UNLOCALIZED: When in Off-Hand", "item.create.extendo_grip.tooltip.behaviour1": "UNLOCALIZED: Increases _reach distance_ of items used in the _Main-Hand_.", - "item.create.extendo_grip.tooltip.condition2": "UNLOCALIZED: While wearing Copper Backtank", + "item.create.extendo_grip.tooltip.condition2": "UNLOCALIZED: While wearing Backtank", "item.create.extendo_grip.tooltip.behaviour2": "UNLOCALIZED: _No_ _Durability_ will be used. Instead, _Air_ _pressure_ is drained from the Tank", "item.create.potato_cannon.tooltip": "UNLOCALIZED: POTATO CANNON", - "item.create.potato_cannon.tooltip.summary": "UNLOCALIZED: Fwoomp! Launch your home-grown vegetables at your Enemies. Can be powered with Air Pressure from a _Copper_ _Backtank_", + "item.create.potato_cannon.tooltip.summary": "UNLOCALIZED: Fwoomp! Launch your home-grown vegetables at your Enemies. Can be powered with Air Pressure from a _Backtank_", "item.create.potato_cannon.tooltip.condition1": "UNLOCALIZED: When R-Clicked", "item.create.potato_cannon.tooltip.behaviour1": "UNLOCALIZED: _Shoots_ a suitable item from your _Inventory_.", - "item.create.potato_cannon.tooltip.condition2": "UNLOCALIZED: While wearing Copper Backtank", + "item.create.potato_cannon.tooltip.condition2": "UNLOCALIZED: While wearing Backtank", "item.create.potato_cannon.tooltip.behaviour2": "UNLOCALIZED: _No_ _Durability_ will be used. Instead, _Air_ _pressure_ is drained from the Tank", "item.create.filter.tooltip": "UNLOCALIZED: FILTER", @@ -2009,7 +2009,7 @@ "item.create.linked_controller.tooltip.behaviour4": "UNLOCALIZED: Places the Controller into the Lectern for easy activation. (R-Click while Sneaking to retrieve it)", "item.create.diving_helmet.tooltip": "UNLOCALIZED: DIVING HELMET", - "item.create.diving_helmet.tooltip.summary": "UNLOCALIZED: Together with a _Copper_ _Backtank_, allows the wielder to _breathe_ _underwater_ for an extended amount of time.", + "item.create.diving_helmet.tooltip.summary": "UNLOCALIZED: Together with a _Backtank_, allows the wielder to _breathe_ _underwater_ for an extended amount of time.", "item.create.diving_helmet.tooltip.condition1": "UNLOCALIZED: When Worn", "item.create.diving_helmet.tooltip.behaviour1": "UNLOCALIZED: Provides the _Water Breathing_ effect, slowly draining _Air Pressure_ from the Backtank.", @@ -2020,6 +2020,13 @@ "item.create.copper_backtank.tooltip.condition2": "UNLOCALIZED: When placed, Powered by Kinetics", "item.create.copper_backtank.tooltip.behaviour2": "UNLOCALIZED: _Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + "item.create.netherite_backtank.tooltip": "UNLOCALIZED: NETHERITE BACKTANK", + "item.create.netherite_backtank.tooltip.summary": "UNLOCALIZED: A _Wearable_ _Tank_ for carrying Pressurized Air.", + "item.create.netherite_backtank.tooltip.condition1": "UNLOCALIZED: When Worn", + "item.create.netherite_backtank.tooltip.behaviour1": "UNLOCALIZED: Provides _Pressurized_ _Air_ to Equipment that requires it.", + "item.create.netherite_backtank.tooltip.condition2": "UNLOCALIZED: When placed, Powered by Kinetics", + "item.create.netherite_backtank.tooltip.behaviour2": "UNLOCALIZED: _Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + "block.create.placard.tooltip": "UNLOCALIZED: PLACARD", "block.create.placard.tooltip.summary": "UNLOCALIZED: _Frame_ your _items_ in brass using this fancy wall panel. Safe for contraptions!", "block.create.placard.tooltip.condition1": "UNLOCALIZED: When R-Clicked with Item", 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 b3dcde1d0..71849d0b8 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: 662", + "_": "Missing Localizations: 668", "_": "->------------------------] Game Elements [------------------------<-", @@ -2020,6 +2020,13 @@ "item.create.copper_backtank.tooltip.condition2": "Când este plasat, Alimentat de Cinetice", "item.create.copper_backtank.tooltip.behaviour2": "_Colectează_ _Presiune de_ _Aer_ într-un ritm depinzând de Viteză de Rotație.", + "item.create.netherite_backtank.tooltip": "UNLOCALIZED: NETHERITE BACKTANK", + "item.create.netherite_backtank.tooltip.summary": "UNLOCALIZED: A _Wearable_ _Tank_ for carrying Pressurized Air.", + "item.create.netherite_backtank.tooltip.condition1": "UNLOCALIZED: When Worn", + "item.create.netherite_backtank.tooltip.behaviour1": "UNLOCALIZED: Provides _Pressurized_ _Air_ to Equipment that requires it.", + "item.create.netherite_backtank.tooltip.condition2": "UNLOCALIZED: When placed, Powered by Kinetics", + "item.create.netherite_backtank.tooltip.behaviour2": "UNLOCALIZED: _Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + "block.create.placard.tooltip": "UNLOCALIZED: PLACARD", "block.create.placard.tooltip.summary": "UNLOCALIZED: _Frame_ your _items_ in brass using this fancy wall panel. Safe for contraptions!", "block.create.placard.tooltip.condition1": "UNLOCALIZED: When R-Clicked with Item", 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 766fae846..129c23a99 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: 7", + "_": "Missing Localizations: 13", "_": "->------------------------] Game Elements [------------------------<-", @@ -2020,6 +2020,13 @@ "item.create.copper_backtank.tooltip.condition2": "При вращении", "item.create.copper_backtank.tooltip.behaviour2": "Собирает и сжимает воздух со скоростью, зависящей от скорости вращения.", + "item.create.netherite_backtank.tooltip": "UNLOCALIZED: NETHERITE BACKTANK", + "item.create.netherite_backtank.tooltip.summary": "UNLOCALIZED: A _Wearable_ _Tank_ for carrying Pressurized Air.", + "item.create.netherite_backtank.tooltip.condition1": "UNLOCALIZED: When Worn", + "item.create.netherite_backtank.tooltip.behaviour1": "UNLOCALIZED: Provides _Pressurized_ _Air_ to Equipment that requires it.", + "item.create.netherite_backtank.tooltip.condition2": "UNLOCALIZED: When placed, Powered by Kinetics", + "item.create.netherite_backtank.tooltip.behaviour2": "UNLOCALIZED: _Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + "block.create.placard.tooltip": "УМНАЯ РАМКА", "block.create.placard.tooltip.summary": "_Обрамите_ свои предметы латунью с помощью этой красивой рамки. Безопасна для штуковин!", "block.create.placard.tooltip.condition1": "ПКМ по рамке с предметом в руках", diff --git a/src/generated/resources/assets/create/lang/unfinished/uk_ua.json b/src/generated/resources/assets/create/lang/unfinished/uk_ua.json index 16804a7a7..1e85cc9ba 100644 --- a/src/generated/resources/assets/create/lang/unfinished/uk_ua.json +++ b/src/generated/resources/assets/create/lang/unfinished/uk_ua.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 993", + "_": "Missing Localizations: 999", "_": "->------------------------] Game Elements [------------------------<-", @@ -2020,6 +2020,13 @@ "item.create.copper_backtank.tooltip.condition2": "При розміщенні та живленні від кінетичної енергії", "item.create.copper_backtank.tooltip.behaviour2": "_Збирає та стискає повітря_ зі швидкістю, яка залежить від швидкості обертання_.", + "item.create.netherite_backtank.tooltip": "UNLOCALIZED: NETHERITE BACKTANK", + "item.create.netherite_backtank.tooltip.summary": "UNLOCALIZED: A _Wearable_ _Tank_ for carrying Pressurized Air.", + "item.create.netherite_backtank.tooltip.condition1": "UNLOCALIZED: When Worn", + "item.create.netherite_backtank.tooltip.behaviour1": "UNLOCALIZED: Provides _Pressurized_ _Air_ to Equipment that requires it.", + "item.create.netherite_backtank.tooltip.condition2": "UNLOCALIZED: When placed, Powered by Kinetics", + "item.create.netherite_backtank.tooltip.behaviour2": "UNLOCALIZED: _Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + "block.create.placard.tooltip": "UNLOCALIZED: PLACARD", "block.create.placard.tooltip.summary": "UNLOCALIZED: _Frame_ your _items_ in brass using this fancy wall panel. Safe for contraptions!", "block.create.placard.tooltip.condition1": "UNLOCALIZED: When R-Clicked with Item", 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 c00e6e6a7..698656975 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: 7", + "_": "Missing Localizations: 13", "_": "->------------------------] Game Elements [------------------------<-", @@ -2020,6 +2020,13 @@ "item.create.copper_backtank.tooltip.condition2": "放下并接入动力时", "item.create.copper_backtank.tooltip.behaviour2": "基于转速从周围环境中_收集_并_加压空气_", + "item.create.netherite_backtank.tooltip": "UNLOCALIZED: NETHERITE BACKTANK", + "item.create.netherite_backtank.tooltip.summary": "UNLOCALIZED: A _Wearable_ _Tank_ for carrying Pressurized Air.", + "item.create.netherite_backtank.tooltip.condition1": "UNLOCALIZED: When Worn", + "item.create.netherite_backtank.tooltip.behaviour1": "UNLOCALIZED: Provides _Pressurized_ _Air_ to Equipment that requires it.", + "item.create.netherite_backtank.tooltip.condition2": "UNLOCALIZED: When placed, Powered by Kinetics", + "item.create.netherite_backtank.tooltip.behaviour2": "UNLOCALIZED: _Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + "block.create.placard.tooltip": "置物板", "block.create.placard.tooltip.summary": "用这个漂亮的墙板把你的物品用黄铜框起来,支持移动装置!", "block.create.placard.tooltip.condition1": "手持物品右击时", 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 0724a1be1..231748081 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: 15", + "_": "Missing Localizations: 21", "_": "->------------------------] Game Elements [------------------------<-", @@ -2020,6 +2020,13 @@ "item.create.copper_backtank.tooltip.condition2": "當放置時,由轉動來補充驅動", "item.create.copper_backtank.tooltip.behaviour2": "旋轉的速度決定收集_壓縮空氣_的速率", + "item.create.netherite_backtank.tooltip": "UNLOCALIZED: NETHERITE BACKTANK", + "item.create.netherite_backtank.tooltip.summary": "UNLOCALIZED: A _Wearable_ _Tank_ for carrying Pressurized Air.", + "item.create.netherite_backtank.tooltip.condition1": "UNLOCALIZED: When Worn", + "item.create.netherite_backtank.tooltip.behaviour1": "UNLOCALIZED: Provides _Pressurized_ _Air_ to Equipment that requires it.", + "item.create.netherite_backtank.tooltip.condition2": "UNLOCALIZED: When placed, Powered by Kinetics", + "item.create.netherite_backtank.tooltip.behaviour2": "UNLOCALIZED: _Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + "block.create.placard.tooltip": "標示牌", "block.create.placard.tooltip.summary": "用這個精美的牆板將你的_物品_用黃銅_框起來_。對器械安全!", "block.create.placard.tooltip.condition1": "手持物品右鍵時", diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index 3eca8725f..0dc603498 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -241,14 +241,14 @@ public class AllItems { // wrapped by COPPER_BACKTANK for block placement uses. // must be registered as of 1.18.2 public static final ItemEntry COPPER_BACKTANK_PLACEABLE = REGISTRATE - .item("copper_backtank_placeable", p -> new BacktankBlockItem(AllBlocks.COPPER_BACKTANK.get(), p)) + .item("copper_backtank_placeable", p -> new BacktankBlockItem(AllBlocks.COPPER_BACKTANK.get(), AllItems.COPPER_BACKTANK::get, p)) .model((c, p) -> p.withExistingParent(c.getName(), p.mcLoc("item/barrier"))) .register(); // wrapped by NETHERITE_BACKTANK for block placement uses. // must be registered as of 1.18.2 public static final ItemEntry NETHERITE_BACKTANK_PLACEABLE = REGISTRATE - .item("netherite_backtank_placeable", p -> new BacktankBlockItem(AllBlocks.NETHERITE_BACKTANK.get(), p)) + .item("netherite_backtank_placeable", p -> new BacktankBlockItem(AllBlocks.NETHERITE_BACKTANK.get(), AllItems.NETHERITE_BACKTANK::get, p)) .model((c, p) -> p.withExistingParent(c.getName(), p.mcLoc("item/barrier"))) .register(); diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/BacktankBlock.java b/src/main/java/com/simibubi/create/content/curiosities/armor/BacktankBlock.java index fa17a1b18..42cedf76d 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/BacktankBlock.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/BacktankBlock.java @@ -24,6 +24,7 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.item.enchantment.EnchantmentHelper; @@ -148,18 +149,23 @@ public class BacktankBlock extends HorizontalKineticBlock @Override public ItemStack getCloneItemStack(BlockGetter blockGetter, BlockPos pos, BlockState state) { - ItemStack item = super.getCloneItemStack(blockGetter, pos, state); + Item item = asItem(); + if (item instanceof BacktankItem.BacktankBlockItem placeable) { + item = placeable.getActualItem(); + } + + ItemStack stack = new ItemStack(item); Optional tileEntityOptional = getTileEntityOptional(blockGetter, pos); int air = tileEntityOptional.map(BacktankTileEntity::getAirLevel) .orElse(0); - CompoundTag tag = item.getOrCreateTag(); + CompoundTag tag = stack.getOrCreateTag(); tag.putInt("Air", air); ListTag enchants = tileEntityOptional.map(BacktankTileEntity::getEnchantmentTag) .orElse(new ListTag()); if (!enchants.isEmpty()) { - ListTag enchantmentTagList = item.getEnchantmentTags(); + ListTag enchantmentTagList = stack.getEnchantmentTags(); enchantmentTagList.addAll(enchants); tag.put("Enchantments", enchantmentTagList); } @@ -167,8 +173,8 @@ public class BacktankBlock extends HorizontalKineticBlock Component customName = tileEntityOptional.map(BacktankTileEntity::getCustomName) .orElse(null); if (customName != null) - item.setHoverName(customName); - return item; + stack.setHoverName(customName); + return stack; } @Override diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/BacktankItem.java b/src/main/java/com/simibubi/create/content/curiosities/armor/BacktankItem.java index d5b0c0828..2f6ec43eb 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/BacktankItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/BacktankItem.java @@ -19,6 +19,7 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.ArmorMaterial; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.level.block.Block; @@ -98,8 +99,11 @@ public class BacktankItem extends BaseArmorItem implements ICapacityEnchantable } public static class BacktankBlockItem extends BlockItem { - public BacktankBlockItem(Block block, Properties properties) { + private final Supplier actualItem; + + public BacktankBlockItem(Block block, Supplier actualItem, Properties properties) { super(block, properties); + this.actualItem = actualItem; } @Override @@ -109,6 +113,10 @@ public class BacktankItem extends BaseArmorItem implements ICapacityEnchantable public String getDescriptionId() { return this.getOrCreateDescriptionId(); } + + public Item getActualItem() { + return actualItem.get(); + } } public static class MultiLayered extends BacktankItem implements MultiLayeredArmorItem { diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/NetheriteDivingHandler.java b/src/main/java/com/simibubi/create/content/curiosities/armor/NetheriteDivingHandler.java index 2878beeab..1b83fb565 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/NetheriteDivingHandler.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/NetheriteDivingHandler.java @@ -57,7 +57,7 @@ public final class NetheriteDivingHandler { clearBit(entity, 2); } } else if (slot == EquipmentSlot.FEET) { - if (AllItems.NETHERITE_DIVING_BOOTS.isIn(to)) { + if (to.getItem() instanceof ArmorItem armorItem && armorItem.getMaterial() == ArmorMaterials.NETHERITE) { setBit(entity, 3); } else { clearBit(entity, 3); diff --git a/src/main/resources/assets/create/lang/default/tooltips.json b/src/main/resources/assets/create/lang/default/tooltips.json index 870b1f292..be7e4a106 100644 --- a/src/main/resources/assets/create/lang/default/tooltips.json +++ b/src/main/resources/assets/create/lang/default/tooltips.json @@ -49,17 +49,17 @@ "item.create.tree_fertilizer.tooltip.behaviour1": "Grows Trees _regardless_ of their _spacing conditions_", "item.create.extendo_grip.tooltip": "EXTENDO GRIP", - "item.create.extendo_grip.tooltip.summary": "Boioioing! Greatly _increases reach distance_ of the wielder. Can be powered with Air Pressure from a _Copper_ _Backtank_", + "item.create.extendo_grip.tooltip.summary": "Boioioing! Greatly _increases reach distance_ of the wielder. Can be powered with Air Pressure from a _Backtank_", "item.create.extendo_grip.tooltip.condition1": "When in Off-Hand", "item.create.extendo_grip.tooltip.behaviour1": "Increases _reach distance_ of items used in the _Main-Hand_.", - "item.create.extendo_grip.tooltip.condition2": "While wearing Copper Backtank", + "item.create.extendo_grip.tooltip.condition2": "While wearing Backtank", "item.create.extendo_grip.tooltip.behaviour2": "_No_ _Durability_ will be used. Instead, _Air_ _pressure_ is drained from the Tank", "item.create.potato_cannon.tooltip": "POTATO CANNON", - "item.create.potato_cannon.tooltip.summary": "Fwoomp! Launch your home-grown vegetables at your Enemies. Can be powered with Air Pressure from a _Copper_ _Backtank_", + "item.create.potato_cannon.tooltip.summary": "Fwoomp! Launch your home-grown vegetables at your Enemies. Can be powered with Air Pressure from a _Backtank_", "item.create.potato_cannon.tooltip.condition1": "When R-Clicked", "item.create.potato_cannon.tooltip.behaviour1": "_Shoots_ a suitable item from your _Inventory_.", - "item.create.potato_cannon.tooltip.condition2": "While wearing Copper Backtank", + "item.create.potato_cannon.tooltip.condition2": "While wearing Backtank", "item.create.potato_cannon.tooltip.behaviour2": "_No_ _Durability_ will be used. Instead, _Air_ _pressure_ is drained from the Tank", "item.create.filter.tooltip": "FILTER", @@ -202,7 +202,7 @@ "item.create.linked_controller.tooltip.behaviour4": "Places the Controller into the Lectern for easy activation. (R-Click while Sneaking to retrieve it)", "item.create.diving_helmet.tooltip": "DIVING HELMET", - "item.create.diving_helmet.tooltip.summary": "Together with a _Copper_ _Backtank_, allows the wielder to _breathe_ _underwater_ for an extended amount of time.", + "item.create.diving_helmet.tooltip.summary": "Together with a _Backtank_, allows the wielder to _breathe_ _underwater_ for an extended amount of time.", "item.create.diving_helmet.tooltip.condition1": "When Worn", "item.create.diving_helmet.tooltip.behaviour1": "Provides the _Water Breathing_ effect, slowly draining _Air Pressure_ from the Backtank.", @@ -213,6 +213,13 @@ "item.create.copper_backtank.tooltip.condition2": "When placed, Powered by Kinetics", "item.create.copper_backtank.tooltip.behaviour2": "_Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + "item.create.netherite_backtank.tooltip": "NETHERITE BACKTANK", + "item.create.netherite_backtank.tooltip.summary": "A _Wearable_ _Tank_ for carrying Pressurized Air.", + "item.create.netherite_backtank.tooltip.condition1": "When Worn", + "item.create.netherite_backtank.tooltip.behaviour1": "Provides _Pressurized_ _Air_ to Equipment that requires it.", + "item.create.netherite_backtank.tooltip.condition2": "When placed, Powered by Kinetics", + "item.create.netherite_backtank.tooltip.behaviour2": "_Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + "block.create.placard.tooltip": "PLACARD", "block.create.placard.tooltip.summary": "_Frame_ your _items_ in brass using this fancy wall panel. Safe for contraptions!", "block.create.placard.tooltip.condition1": "When R-Clicked with Item",