Subcreatica

- Added the Copper Backtank
- Added Diving helmet and boots
This commit is contained in:
simibubi 2021-05-04 03:50:17 +02:00
parent fd030d3273
commit 076783eb7e
57 changed files with 1422 additions and 44 deletions

View file

@ -53,6 +53,7 @@ b59324f051f21d8ce1a48a08f4721a61a3c414d6 assets/create/blockstates/chute.json
e5e3757e99c139d67b2a70288466d8a74d818841 assets/create/blockstates/cogwheel.json
36f54136a7756c97f71bc6b47ef4e8e575e72879 assets/create/blockstates/content_observer.json
cfea7283f0ebd2432d67e80a523f2a12e24c0bd5 assets/create/blockstates/controller_rail.json
2a956df55577ce02384af372a15f41ec626b84b0 assets/create/blockstates/copper_backtank.json
f8eff64c75fc599e9a44a003f54ae9931cd8ce7c assets/create/blockstates/copper_block.json
cabf6b8c59eb0e3d56a0a5a856ca058bb3200882 assets/create/blockstates/copper_casing.json
3355a852cdc717e257ca19b3db836068964733e3 assets/create/blockstates/copper_ore.json
@ -406,21 +407,21 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j
6801fa1f466f172700e573e5b8ee8ee5f9ca4583 assets/create/blockstates/yellow_valve_handle.json
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
0e10e87986a76f18efeb1255f2c025d1aad8f8fa assets/create/lang/en_ud.json
949bac58ef9534024eac6d9082f5d241ce5b91f3 assets/create/lang/en_us.json
26ab60b925659e6daac2e449267d202c68cafe94 assets/create/lang/unfinished/de_de.json
78086e1c23ce96db3a9ec3d304d7418f39ed96fa assets/create/lang/unfinished/es_es.json
62fcca040385405c7655ea6e4b524b2a5e652e4c assets/create/lang/unfinished/es_mx.json
0f527cc6472caec6ec090985c5000e6f7f93208f assets/create/lang/unfinished/fr_fr.json
812f7e66a1d5a06a7b81a41216ee2151e678db69 assets/create/lang/unfinished/it_it.json
8122ad97eac98b1f549a08e623066be1ffd3a29e assets/create/lang/unfinished/ja_jp.json
2c3a1bd28a6a08bec850cc36735204c59045b188 assets/create/lang/unfinished/ko_kr.json
27559156601b57cc2e9fae07a92c7f79a7f4e473 assets/create/lang/unfinished/nl_nl.json
f401f044ec0785b9399d29d2a82f0f998a2a4db7 assets/create/lang/unfinished/pl_pl.json
fa22d8055979012a45a6648009ef0094be4560d8 assets/create/lang/unfinished/pt_br.json
d1b6b069a4547c107c58af4f8837f3cc843e1613 assets/create/lang/unfinished/ru_ru.json
b1650c7805cfe03c6b3b9d43f96964b695f55415 assets/create/lang/unfinished/zh_cn.json
8052350b58969035d456f882fa5624ee16a0024c assets/create/lang/unfinished/zh_tw.json
a6d814f94926d88764c38862cc4ece9c367e023b assets/create/lang/en_ud.json
80e3112fe5ab12a9bbe7c272ab50904eee351f44 assets/create/lang/en_us.json
9b8c1f501cb57098f3ac67c8fd4532246a0c59bb assets/create/lang/unfinished/de_de.json
9d0482aa7a410bdb9b44bb7c1e24bda0343e1306 assets/create/lang/unfinished/es_es.json
6e401a93ef63da54673d125892893468f04931be assets/create/lang/unfinished/es_mx.json
466fe4336c8c45fab9027e18103f8c7ef5c94fef assets/create/lang/unfinished/fr_fr.json
62d87f787237fbf2ace70eafb536cf5283c4dd16 assets/create/lang/unfinished/it_it.json
e83d8ed48ebf35ce6ba3fac10efff80ce9ffc050 assets/create/lang/unfinished/ja_jp.json
448bdf719bd40bb4cb8f013d29e1c65c1277f4ff assets/create/lang/unfinished/ko_kr.json
a4229b2f23223f31a1b869d5a07ff61128ddd2e8 assets/create/lang/unfinished/nl_nl.json
9d1594172ba55eab5b96bd48f5204b082493e5e8 assets/create/lang/unfinished/pl_pl.json
ba271a34ebf9c23c239fcdf94d71623bfcaaefb1 assets/create/lang/unfinished/pt_br.json
0c78fdaa30db8d54122bb055167ee41e4d1e010c assets/create/lang/unfinished/ru_ru.json
899752fff0af288e71fb1f7c771910395c701477 assets/create/lang/unfinished/zh_cn.json
a7189982351b90b3cde43529a0fbdef696bda22e 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
@ -1261,6 +1262,7 @@ c1da21be9f1af4f7a2ef4ec9cd92195d65ada316 assets/create/models/item/clockwork_bea
dcb09deae110077bcddf090996b51cc66e9a7de3 assets/create/models/item/cogwheel.json
7717e3b21cff39f497f07687c70c1fa40eaa756d assets/create/models/item/content_observer.json
9dbd63c9e1b09a663fd4b83d76e3ab5967086167 assets/create/models/item/controller_rail.json
10397036fc0bb1e18a767cfd7b19b10d805a83fe assets/create/models/item/copper_backtank.json
965a90a882d85dba93b30af9bce7ecf8e68ce747 assets/create/models/item/copper_block.json
759bcb5fe7dfdd628716f9b4ff19a5ab00393381 assets/create/models/item/copper_casing.json
c2a320162daa2d24cef969d1d14a0cbd55eb574f assets/create/models/item/copper_ingot.json
@ -1317,6 +1319,8 @@ a215bca75c32124c4cb070065967de1d56c6c57f assets/create/models/item/diorite_cobbl
645a16dfb3619cedf2046e1d0869a27394e6460a assets/create/models/item/diorite_cobblestone_stairs.json
32ebea959ce34458ac2f5ae105f9b415ab18ae4c assets/create/models/item/diorite_cobblestone_wall.json
e0ecc0a20cf9dd54ccfc48e0041d5220b2c8316e assets/create/models/item/diorite_pillar.json
6006f88e56d74a3fd75a9dddb25af39075e0482b assets/create/models/item/diving_boots.json
df8cfe7e8eb527329094396e11222e9097e309d7 assets/create/models/item/diving_helmet.json
1bd32eb16dee4bbf313a8813a7f1461ea5feeffe assets/create/models/item/dolomite.json
4c5e12f1acb8c4abc24b9dd80e5cbbf3a5cbd89c assets/create/models/item/dolomite_bricks.json
ebb596ce665b085e501ee2fd9a5371ce53e40553 assets/create/models/item/dolomite_bricks_slab.json
@ -2420,6 +2424,7 @@ d76113310fc56eca6382d44df174096f2210d416 data/create/loot_tables/blocks/clutch.j
673ba3a5deae9133b917d16c9eb87fe4c2873c8a data/create/loot_tables/blocks/cogwheel.json
096af6b5df6e87d36cb936eea9b00982a554f4af data/create/loot_tables/blocks/content_observer.json
80c2cb21714651116a71f449368c06bb22e841ce data/create/loot_tables/blocks/controller_rail.json
662b8d41803ef166d20850653b36759de719206c data/create/loot_tables/blocks/copper_backtank.json
f38802b919c49f162f102d6e5d94113f05bf4ab1 data/create/loot_tables/blocks/copper_block.json
5a65a18ea787130ac7b8f5652bfa5ed187446649 data/create/loot_tables/blocks/copper_casing.json
31a51237763c374b7cdf39b9b62c14e965871047 data/create/loot_tables/blocks/copper_ore.json

View file

@ -0,0 +1,19 @@
{
"variants": {
"facing=north": {
"model": "create:block/copper_backtank/block"
},
"facing=south": {
"model": "create:block/copper_backtank/block",
"y": 180
},
"facing=west": {
"model": "create:block/copper_backtank/block",
"y": 270
},
"facing=east": {
"model": "create:block/copper_backtank/block",
"y": 90
}
}
}

View file

@ -54,6 +54,7 @@
"block.create.cogwheel": "\u05DF\u01DD\u01DD\u0265\u028Dbo\u0186",
"block.create.content_observer": "\u0279\u01DD\u028C\u0279\u01DDsqO \u0287u\u01DD\u0287uo\u0186",
"block.create.controller_rail": "\u05DF\u0131\u0250\u1D1A \u0279\u01DD\u05DF\u05DFo\u0279\u0287uo\u0186",
"block.create.copper_backtank": "\u029Eu\u0250\u0287\u029E\u0254\u0250\u15FA \u0279\u01DDddo\u0186",
"block.create.copper_block": "\u0279\u01DDddo\u0186 \u025Fo \u029E\u0254o\u05DF\u15FA",
"block.create.copper_casing": "bu\u0131s\u0250\u0186 \u0279\u01DDddo\u0186",
"block.create.copper_ore": "\u01DD\u0279O \u0279\u01DDddo\u0186",
@ -431,6 +432,7 @@
"item.create.chocolate_glazed_berries": "s\u01DD\u0131\u0279\u0279\u01DD\u15FA p\u01DDz\u0250\u05DF\u2141 \u01DD\u0287\u0250\u05DFo\u0254o\u0265\u0186",
"item.create.chromatic_compound": "punod\u026Fo\u0186 \u0254\u0131\u0287\u0250\u026Fo\u0279\u0265\u0186",
"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_ingot": "\u0287obuI \u0279\u01DDddo\u0186",
"item.create.copper_nugget": "\u0287\u01DDbbnN \u0279\u01DDddo\u0186",
"item.create.copper_sheet": "\u0287\u01DD\u01DD\u0265S \u0279\u01DDddo\u0186",
@ -449,6 +451,8 @@
"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",

View file

@ -57,6 +57,7 @@
"block.create.cogwheel": "Cogwheel",
"block.create.content_observer": "Content Observer",
"block.create.controller_rail": "Controller Rail",
"block.create.copper_backtank": "Copper Backtank",
"block.create.copper_block": "Block of Copper",
"block.create.copper_casing": "Copper Casing",
"block.create.copper_ore": "Copper Ore",
@ -437,6 +438,7 @@
"item.create.chocolate_glazed_berries": "Chocolate Glazed Berries",
"item.create.chromatic_compound": "Chromatic Compound",
"item.create.cinder_flour": "Cinder Flour",
"item.create.copper_backtank": "Copper Backtank",
"item.create.copper_ingot": "Copper Ingot",
"item.create.copper_nugget": "Copper Nugget",
"item.create.copper_sheet": "Copper Sheet",
@ -455,6 +457,8 @@
"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",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 935",
"_": "Missing Localizations: 939",
"_": "->------------------------] Game Elements [------------------------<-",
@ -58,6 +58,7 @@
"block.create.cogwheel": "Zahnrad",
"block.create.content_observer": "Inhaltsbeobachter",
"block.create.controller_rail": "Steuerungsschiene",
"block.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"block.create.copper_block": "Kupfer Block",
"block.create.copper_casing": "Kupferrahmen",
"block.create.copper_ore": "Kupfererz",
@ -438,6 +439,7 @@
"item.create.chocolate_glazed_berries": "Schokoladenglasierte Beeren",
"item.create.chromatic_compound": "Chromatische Verbindung",
"item.create.cinder_flour": "Aschenmehl",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "Kupferbarren",
"item.create.copper_nugget": "Kupferklumpen",
"item.create.copper_sheet": "Kupferblech",
@ -456,6 +458,8 @@
"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": "UNLOCALIZED: Diving Boots",
"item.create.diving_helmet": "UNLOCALIZED: Diving Helmet",
"item.create.dough": "Teig",
"item.create.electron_tube": "Elektronenröhre",
"item.create.empty_blaze_burner": "Leerer Lohenbrenner",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 636",
"_": "Missing Localizations: 640",
"_": "->------------------------] Game Elements [------------------------<-",
@ -58,6 +58,7 @@
"block.create.cogwheel": "Rueda dentada",
"block.create.content_observer": "Observador de contenidos",
"block.create.controller_rail": "Raíl de control",
"block.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"block.create.copper_block": "Bloque de cobre",
"block.create.copper_casing": "Revestidor de caliza",
"block.create.copper_ore": "Mineral de cobre",
@ -438,6 +439,7 @@
"item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries",
"item.create.chromatic_compound": "Compuesto cromático",
"item.create.cinder_flour": "Harina de ceniza",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "Lingote de cobre",
"item.create.copper_nugget": "Pepita de cobre",
"item.create.copper_sheet": "Lámina de cobre",
@ -456,6 +458,8 @@
"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 zinc molido",
"item.create.diving_boots": "UNLOCALIZED: Diving Boots",
"item.create.diving_helmet": "UNLOCALIZED: Diving Helmet",
"item.create.dough": "Masilla",
"item.create.electron_tube": "Tubo de electrones",
"item.create.empty_blaze_burner": "Quemador de Blaze vacío",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1259",
"_": "Missing Localizations: 1263",
"_": "->------------------------] Game Elements [------------------------<-",
@ -58,6 +58,7 @@
"block.create.cogwheel": "Rueda Dentada",
"block.create.content_observer": "Observador de Contenido",
"block.create.controller_rail": "Vía de Control",
"block.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"block.create.copper_block": "Bloque de Cobre",
"block.create.copper_casing": "Carcasa de Cobre",
"block.create.copper_ore": "Mineral de Cobre",
@ -438,6 +439,7 @@
"item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries",
"item.create.chromatic_compound": "Compuesto Cromático",
"item.create.cinder_flour": "Ceniza Molida",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "Lingote de Cobre",
"item.create.copper_nugget": "Pepita de Cobre",
"item.create.copper_sheet": "Lámina de Cobre",
@ -456,6 +458,8 @@
"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 Zinc Molido",
"item.create.diving_boots": "UNLOCALIZED: Diving Boots",
"item.create.diving_helmet": "UNLOCALIZED: Diving Helmet",
"item.create.dough": "Masa",
"item.create.electron_tube": "Válvula Electrónica",
"item.create.empty_blaze_burner": "Quemador de Blaze Vacío",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1187",
"_": "Missing Localizations: 1191",
"_": "->------------------------] Game Elements [------------------------<-",
@ -58,6 +58,7 @@
"block.create.cogwheel": "Roue dentée",
"block.create.content_observer": "Observateur de contenu",
"block.create.controller_rail": "Rails controlleurs",
"block.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"block.create.copper_block": "Bloc de cuivre",
"block.create.copper_casing": "Revêtement en cuivre",
"block.create.copper_ore": "Minerai de cuivre",
@ -438,6 +439,7 @@
"item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries",
"item.create.chromatic_compound": "Composé chromatique",
"item.create.cinder_flour": "Farine de braise",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "Lingot de cuivre",
"item.create.copper_nugget": "Pépite de cuivre",
"item.create.copper_sheet": "Plaques de cuivre",
@ -456,6 +458,8 @@
"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",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 653",
"_": "Missing Localizations: 657",
"_": "->------------------------] Game Elements [------------------------<-",
@ -58,6 +58,7 @@
"block.create.cogwheel": "Ruota dentata",
"block.create.content_observer": "Osservatore dei contenuti",
"block.create.controller_rail": "Binario di controllo",
"block.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"block.create.copper_block": "Blocco di rame",
"block.create.copper_casing": "Involucro di rame",
"block.create.copper_ore": "Rame grezzo",
@ -438,6 +439,7 @@
"item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries",
"item.create.chromatic_compound": "Composto cromatico",
"item.create.cinder_flour": "Cenere farinosa",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "Lingotto di rame",
"item.create.copper_nugget": "Pepita di rame",
"item.create.copper_sheet": "Lamiera di rame",
@ -456,6 +458,8 @@
"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": "UNLOCALIZED: Diving Boots",
"item.create.diving_helmet": "UNLOCALIZED: Diving Helmet",
"item.create.dough": "Impasto",
"item.create.electron_tube": "Valvola",
"item.create.empty_blaze_burner": "Inceneritore di blaze vuoto",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 17",
"_": "Missing Localizations: 21",
"_": "->------------------------] Game Elements [------------------------<-",
@ -58,6 +58,7 @@
"block.create.cogwheel": "歯車",
"block.create.content_observer": "コンテンツオブザーバー",
"block.create.controller_rail": "コントローラーレール",
"block.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"block.create.copper_block": "銅ブロック",
"block.create.copper_casing": "銅ケーシング",
"block.create.copper_ore": "銅鉱石",
@ -438,6 +439,7 @@
"item.create.chocolate_glazed_berries": "チョコレートグレーズドベリー",
"item.create.chromatic_compound": "色彩の化合物",
"item.create.cinder_flour": "ネザーラックの粉",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "銅インゴット",
"item.create.copper_nugget": "銅塊",
"item.create.copper_sheet": "銅板",
@ -456,6 +458,8 @@
"item.create.crushed_tin_ore": "砕いた錫鉱石",
"item.create.crushed_uranium_ore": "砕いたウラン鉱石",
"item.create.crushed_zinc_ore": "砕いた亜鉛鉱石",
"item.create.diving_boots": "UNLOCALIZED: Diving Boots",
"item.create.diving_helmet": "UNLOCALIZED: Diving Helmet",
"item.create.dough": "生地",
"item.create.electron_tube": "電子管",
"item.create.empty_blaze_burner": "空のブレイズバーナー",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 706",
"_": "Missing Localizations: 710",
"_": "->------------------------] Game Elements [------------------------<-",
@ -58,6 +58,7 @@
"block.create.cogwheel": "톱니바퀴",
"block.create.content_observer": "정보 감지기",
"block.create.controller_rail": "방향 레일",
"block.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"block.create.copper_block": "구리 블록",
"block.create.copper_casing": "구리 케이스",
"block.create.copper_ore": "구리 광석",
@ -438,6 +439,7 @@
"item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries",
"item.create.chromatic_compound": "색채 혼합물",
"item.create.cinder_flour": "잿가루",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "구리 주괴",
"item.create.copper_nugget": "구리 조각",
"item.create.copper_sheet": "구리 판",
@ -456,6 +458,8 @@
"item.create.crushed_tin_ore": "UNLOCALIZED: Crushed Tin Ore",
"item.create.crushed_uranium_ore": "UNLOCALIZED: Crushed Uranium Ore",
"item.create.crushed_zinc_ore": "분쇄된 아연 광석",
"item.create.diving_boots": "UNLOCALIZED: Diving Boots",
"item.create.diving_helmet": "UNLOCALIZED: Diving Helmet",
"item.create.dough": "반죽",
"item.create.electron_tube": "전지 튜브",
"item.create.empty_blaze_burner": "빈 블레이즈 버너",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1570",
"_": "Missing Localizations: 1574",
"_": "->------------------------] Game Elements [------------------------<-",
@ -58,6 +58,7 @@
"block.create.cogwheel": "Tandwiel",
"block.create.content_observer": "UNLOCALIZED: Content Observer",
"block.create.controller_rail": "UNLOCALIZED: Controller Rail",
"block.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"block.create.copper_block": "UNLOCALIZED: Block of Copper",
"block.create.copper_casing": "UNLOCALIZED: Copper Casing",
"block.create.copper_ore": "UNLOCALIZED: Copper Ore",
@ -438,6 +439,7 @@
"item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries",
"item.create.chromatic_compound": "UNLOCALIZED: Chromatic Compound",
"item.create.cinder_flour": "UNLOCALIZED: Cinder Flour",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "Koperstaaf",
"item.create.copper_nugget": "Koper klompje",
"item.create.copper_sheet": "UNLOCALIZED: Copper Sheet",
@ -456,6 +458,8 @@
"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",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 31",
"_": "Missing Localizations: 35",
"_": "->------------------------] Game Elements [------------------------<-",
@ -58,6 +58,7 @@
"block.create.cogwheel": "Koło zębate",
"block.create.content_observer": "Detektor zawartości",
"block.create.controller_rail": "Tory sterujące",
"block.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"block.create.copper_block": "Blok miedzi",
"block.create.copper_casing": "Miedziana Obudowa",
"block.create.copper_ore": "Ruda miedzi",
@ -438,6 +439,7 @@
"item.create.chocolate_glazed_berries": "Jagody w czekoladzie",
"item.create.chromatic_compound": "Związek chromatyczny",
"item.create.cinder_flour": "Rozżarzona mąka",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "Sztabka miedzi",
"item.create.copper_nugget": "Bryłka miedzi",
"item.create.copper_sheet": "Arkusz miedzi",
@ -456,6 +458,8 @@
"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": "UNLOCALIZED: Diving Boots",
"item.create.diving_helmet": "UNLOCALIZED: Diving Helmet",
"item.create.dough": "Ciasto",
"item.create.electron_tube": "Lampa elektronowa",
"item.create.empty_blaze_burner": "Pusty płomienny palnik",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1622",
"_": "Missing Localizations: 1626",
"_": "->------------------------] Game Elements [------------------------<-",
@ -58,6 +58,7 @@
"block.create.cogwheel": "Roda Dentada",
"block.create.content_observer": "UNLOCALIZED: Content Observer",
"block.create.controller_rail": "UNLOCALIZED: Controller Rail",
"block.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"block.create.copper_block": "UNLOCALIZED: Block of Copper",
"block.create.copper_casing": "UNLOCALIZED: Copper Casing",
"block.create.copper_ore": "UNLOCALIZED: Copper Ore",
@ -438,6 +439,7 @@
"item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries",
"item.create.chromatic_compound": "UNLOCALIZED: Chromatic Compound",
"item.create.cinder_flour": "UNLOCALIZED: Cinder Flour",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "UNLOCALIZED: Copper Ingot",
"item.create.copper_nugget": "UNLOCALIZED: Copper Nugget",
"item.create.copper_sheet": "UNLOCALIZED: Copper Sheet",
@ -456,6 +458,8 @@
"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": "Massa",
"item.create.electron_tube": "UNLOCALIZED: Electron Tube",
"item.create.empty_blaze_burner": "UNLOCALIZED: Empty Blaze Burner",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 550",
"_": "Missing Localizations: 554",
"_": "->------------------------] Game Elements [------------------------<-",
@ -58,6 +58,7 @@
"block.create.cogwheel": "Шестерня",
"block.create.content_observer": "Наблюдетель за содержимым",
"block.create.controller_rail": "Контролирующая рельса",
"block.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"block.create.copper_block": "Медный блок",
"block.create.copper_casing": "Медный корпус",
"block.create.copper_ore": "Медная руда",
@ -438,6 +439,7 @@
"item.create.chocolate_glazed_berries": "Ягоды в шоколадной глазури",
"item.create.chromatic_compound": "Хроматический компаунд",
"item.create.cinder_flour": "Незераковая пыль",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "Медный слиток",
"item.create.copper_nugget": "Кусочек меди",
"item.create.copper_sheet": "Медный лист",
@ -456,6 +458,8 @@
"item.create.crushed_tin_ore": "Дроблёная оловянная руда",
"item.create.crushed_uranium_ore": "Дроблёная урановая руда",
"item.create.crushed_zinc_ore": "Дроблёная цинковая руда",
"item.create.diving_boots": "UNLOCALIZED: Diving Boots",
"item.create.diving_helmet": "UNLOCALIZED: Diving Helmet",
"item.create.dough": "Тесто",
"item.create.electron_tube": "Электронная лампа",
"item.create.empty_blaze_burner": "Пустая горелека Всполоха",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 36",
"_": "Missing Localizations: 40",
"_": "->------------------------] Game Elements [------------------------<-",
@ -58,6 +58,7 @@
"block.create.cogwheel": "齿轮",
"block.create.content_observer": "物品侦测器",
"block.create.controller_rail": "控制铁轨",
"block.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"block.create.copper_block": "铜块",
"block.create.copper_casing": "铜机壳",
"block.create.copper_ore": "铜矿石",
@ -438,6 +439,7 @@
"item.create.chocolate_glazed_berries": "巧克力包层浆果",
"item.create.chromatic_compound": "异彩化合物",
"item.create.cinder_flour": "下界面粉",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "铜锭",
"item.create.copper_nugget": "铜粒",
"item.create.copper_sheet": "铜板",
@ -456,6 +458,8 @@
"item.create.crushed_tin_ore": "粉碎锡矿石",
"item.create.crushed_uranium_ore": "粉碎铀矿石",
"item.create.crushed_zinc_ore": "粉碎锌矿石",
"item.create.diving_boots": "UNLOCALIZED: Diving Boots",
"item.create.diving_helmet": "UNLOCALIZED: Diving Helmet",
"item.create.dough": "面团",
"item.create.electron_tube": "电子管",
"item.create.empty_blaze_burner": "空的烈焰人燃烧室",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 655",
"_": "Missing Localizations: 659",
"_": "->------------------------] Game Elements [------------------------<-",
@ -58,6 +58,7 @@
"block.create.cogwheel": "齒輪",
"block.create.content_observer": "物品偵測器",
"block.create.controller_rail": "控制鐵軌",
"block.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"block.create.copper_block": "銅磚",
"block.create.copper_casing": "銅機殼",
"block.create.copper_ore": "銅礦石",
@ -438,6 +439,7 @@
"item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries",
"item.create.chromatic_compound": "異彩化合物",
"item.create.cinder_flour": "地獄麵粉",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "銅錠",
"item.create.copper_nugget": "銅粒",
"item.create.copper_sheet": "銅板",
@ -456,6 +458,8 @@
"item.create.crushed_tin_ore": "碎狀錫礦石",
"item.create.crushed_uranium_ore": "碎狀鈾礦石",
"item.create.crushed_zinc_ore": "碎狀鋅礦石",
"item.create.diving_boots": "UNLOCALIZED: Diving Boots",
"item.create.diving_helmet": "UNLOCALIZED: Diving Helmet",
"item.create.dough": "麵團",
"item.create.electron_tube": "真空管",
"item.create.empty_blaze_burner": "空的烈焰使者動力爐",

View file

@ -0,0 +1,3 @@
{
"parent": "create:block/copper_backtank/item"
}

View file

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "create:item/diving_boots"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "create:item/diving_helmet"
}
}

View file

@ -28,8 +28,8 @@
"trigger": "create:bracket_apply",
"conditions": {
"accepted_entries": [
"create:large_cogwheel",
"create:cogwheel"
"create:cogwheel",
"create:large_cogwheel"
]
}
},

View file

@ -0,0 +1,36 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"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"
}
]
}
],
"name": "create:copper_backtank"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View file

@ -98,6 +98,8 @@ public class AllBlockPartials {
GOGGLES = get("goggles"),
EJECTOR_TOP = get("weighted_ejector/top"),
COPPER_BACKTANK_SHAFT = get("copper_backtank/block_shaft_input"),
COUPLING_ATTACHMENT = getEntity("minecart_coupling/attachment"),
COUPLING_RING = getEntity("minecart_coupling/ring"),

View file

@ -115,6 +115,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.logistics.block.belts.tunnel.BeltTunnelBlock;
import com.simibubi.create.content.logistics.block.belts.tunnel.BrassTunnelBlock;
import com.simibubi.create.content.logistics.block.belts.tunnel.BrassTunnelCTBehaviour;
@ -180,6 +181,15 @@ import net.minecraft.data.ShapedRecipeBuilder;
import net.minecraft.item.DyeColor;
import net.minecraft.item.Item;
import net.minecraft.item.Rarity;
import net.minecraft.loot.ConstantRange;
import net.minecraft.loot.ItemLootEntry;
import net.minecraft.loot.LootPool;
import net.minecraft.loot.LootTable;
import net.minecraft.loot.LootTable.Builder;
import net.minecraft.loot.conditions.ILootCondition.IBuilder;
import net.minecraft.loot.conditions.SurvivesExplosion;
import net.minecraft.loot.functions.CopyName;
import net.minecraft.loot.functions.CopyNbt;
import net.minecraft.state.properties.PistonType;
import net.minecraft.tags.BlockTags;
import net.minecraft.tags.ItemTags;
@ -465,7 +475,7 @@ public class AllBlocks {
.loot((lt, block) -> lt.registerLootTable(block, BlazeBurnerBlock.buildLootTable()))
.blockstate((c, p) -> p.simpleBlock(c.getEntry(), AssetLookup.partialBaseModel(c, p)))
.item(BlazeBurnerBlockItem::withBlaze)
.model(AssetLookup.<BlazeBurnerBlockItem>customItemModel("blaze_burner", "block_with_blaze"))
.model(AssetLookup.<BlazeBurnerBlockItem>customBlockItemModel("blaze_burner", "block_with_blaze"))
.build()
.register();
@ -633,7 +643,7 @@ public class AllBlocks {
.onRegister(CreateRegistrate.blockModel(() -> FluidTankModel::standard))
.addLayer(() -> RenderType::getCutoutMipped)
.item(FluidTankItem::new)
.model(AssetLookup.<FluidTankItem>customItemModel("_", "block_single_window"))
.model(AssetLookup.<FluidTankItem>customBlockItemModel("_", "block_single_window"))
.build()
.register();
@ -1272,6 +1282,30 @@ public class AllBlocks {
.transform(customItemModel("diodes", "latch_off"))
.register();
// Curiosities
static {
REGISTRATE.startSection(AllSections.CURIOSITIES);
}
public static final BlockEntry<CopperBacktankBlock> COPPER_BACKTANK =
REGISTRATE.block("copper_backtank", CopperBacktankBlock::new)
.initialProperties(SharedProperties::softMetal)
.blockstate((c, p) -> p.horizontalBlock(c.getEntry(), AssetLookup.partialBaseModel(c, p)))
.transform(StressConfigDefaults.setImpact(4.0))
.loot((lt, block) -> {
Builder builder = LootTable.builder();
IBuilder survivesExplosion = SurvivesExplosion.builder();
lt.registerLootTable(block, builder.addLootPool(LootPool.builder()
.acceptCondition(survivesExplosion)
.rolls(ConstantRange.of(1))
.addEntry(ItemLootEntry.builder(AllItems.COPPER_BACKTANK.get())
.acceptFunction(CopyName.builder(CopyName.Source.BLOCK_ENTITY))
.acceptFunction(CopyNbt.func_215881_a(CopyNbt.Source.BLOCK_ENTITY)
.func_216056_a("Air", "Air")))));
})
.register();
// Materials
static {

View file

@ -29,6 +29,10 @@ import com.simibubi.create.content.curiosities.CombustibleItem;
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.DivingBootsItem;
import com.simibubi.create.content.curiosities.armor.DivingHelmetItem;
import com.simibubi.create.content.curiosities.symmetry.SymmetryWandItem;
import com.simibubi.create.content.curiosities.symmetry.client.SymmetryWandModel;
import com.simibubi.create.content.curiosities.tools.ExtendoGripItem;
@ -47,6 +51,7 @@ import com.simibubi.create.foundation.item.TagDependentIngredientItem;
import com.simibubi.create.foundation.item.TooltipHelper;
import com.tterrag.registrate.util.entry.ItemEntry;
import net.minecraft.item.BlockItem;
import net.minecraft.item.Food;
import net.minecraft.item.Item;
import net.minecraft.item.Rarity;
@ -168,12 +173,12 @@ public class AllItems {
public static final ItemEntry<VerticalGearboxItem> VERTICAL_GEARBOX =
REGISTRATE.item("vertical_gearbox", VerticalGearboxItem::new)
.model(AssetLookup.<VerticalGearboxItem>customItemModel("gearbox", "item_vertical"))
.model(AssetLookup.<VerticalGearboxItem>customBlockItemModel("gearbox", "item_vertical"))
.register();
public static final ItemEntry<BlazeBurnerBlockItem> EMPTY_BLAZE_BURNER =
REGISTRATE.item("empty_blaze_burner", BlazeBurnerBlockItem::empty)
.model(AssetLookup.<BlazeBurnerBlockItem>customItemModel("blaze_burner", "block"))
.model(AssetLookup.<BlazeBurnerBlockItem>customBlockItemModel("blaze_burner", "block"))
.register();
public static final ItemEntry<GogglesItem> GOGGLES = REGISTRATE.item("goggles", GogglesItem::new)
@ -208,13 +213,13 @@ public class AllItems {
.transform(CreateRegistrate.customRenderedItem(() -> ExtendoGripModel::new))
.model(AssetLookup.itemModelWithPartials())
.register();
public static final ItemEntry<SymmetryWandItem> WAND_OF_SYMMETRY =
REGISTRATE.item("wand_of_symmetry", SymmetryWandItem::new)
.transform(CreateRegistrate.customRenderedItem(() -> SymmetryWandModel::new))
.model(AssetLookup.itemModelWithPartials())
.register();
public static final ItemEntry<WorldshaperItem> WORLDSHAPER =
REGISTRATE.item("handheld_worldshaper", WorldshaperItem::new)
.properties(p -> p.rarity(Rarity.EPIC))
@ -260,6 +265,19 @@ public class AllItems {
REGISTRATE.item("tree_fertilizer", TreeFertilizerItem::new)
.register();
public static final ItemEntry<? extends CopperArmorItem>
DIVING_HELMET = REGISTRATE.item("diving_helmet", DivingHelmetItem::new)
.register(),
COPPER_BACKTANK = REGISTRATE
.item("copper_backtank", p -> new CopperBacktankItem(p, new BlockItem(AllBlocks.COPPER_BACKTANK.get(), p)))
.model(AssetLookup.<CopperBacktankItem>customGenericItemModel("_", "item"))
.register(),
DIVING_BOOTS = REGISTRATE.item("diving_boots", DivingBootsItem::new)
.register();
// Schematics
static {

View file

@ -141,6 +141,8 @@ public class AllShapes {
BASIN_COLLISION_SHAPE = shape(0, 2, 0, 16, 13, 16).erase(2, 5, 2, 14, 16, 14)
.add(2, 0, 2, 14, 2, 14)
.build(),
BACKTANK = shape(3, 0, 3, 13, 12, 13).add(SIX_VOXEL_POLE.get(Axis.Y))
.build(),
SPEED_CONTROLLER = shape(0, 0, 0, 16, 4, 16).add(1, 1, 1, 15, 13, 15)
.add(0, 8, 0, 16, 14, 16)
.build(),

View file

@ -116,6 +116,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.logistics.block.belts.tunnel.BeltTunnelInstance;
import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelRenderer;
import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelTileEntity;
@ -654,6 +657,13 @@ public class AllTileEntities {
.validBlocks(AllBlocks.ADJUSTABLE_PULSE_REPEATER)
.renderer(() -> AdjustableRepeaterRenderer::new)
.register();
public static final TileEntityEntry<CopperBacktankTileEntity> COPPER_BACKTANK = Create.registrate()
.tileEntity("copper_backtank", CopperBacktankTileEntity::new)
.instance(() -> CopperBacktankInstance::new)
.validBlocks(AllBlocks.COPPER_BACKTANK)
.renderer(() -> CopperBacktankRenderer::new)
.register();
public static void register() {}
}

View file

@ -10,6 +10,7 @@ import javax.annotation.Nullable;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher;
import com.simibubi.create.content.contraptions.relays.encased.CasingConnectivity;
import com.simibubi.create.content.curiosities.armor.CopperBacktankArmorLayer;
import com.simibubi.create.content.schematics.ClientSchematicLoader;
import com.simibubi.create.content.schematics.client.SchematicAndQuillHandler;
import com.simibubi.create.content.schematics.client.SchematicHandler;
@ -118,6 +119,10 @@ public class CreateClient {
((IReloadableResourceManager) resourceManager).addReloadListener(new ResourceReloadHandler());
AllBlockPartials.clientInit();
event.enqueueWork(() -> {
CopperBacktankArmorLayer.register();
});
}
public static void onTextureStitch(TextureStitchEvent.Pre event) {

View file

@ -21,13 +21,13 @@ public enum AllSections {
/** Decorative blocks */
PALETTES(Palette.Green),
/** Helpful gadgets and other shenanigans */
CURIOSITIES(Palette.Purple),
/** Base materials, ingredients and tools */
MATERIALS(Palette.Green),
/** Helpful gadgets and other shenanigans */
CURIOSITIES(Palette.Purple),
/** Fallback section */
UNASSIGNED(Palette.Gray)

View file

@ -187,6 +187,10 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE<BeltTileEnt
return;
}
if (AllItems.DIVING_BOOTS.get()
.isWornBy(entityIn))
return;
BeltTileEntity belt = BeltHelper.getSegmentTE(worldIn, pos);
if (belt == null)
return;

View file

@ -0,0 +1,79 @@
package com.simibubi.create.content.curiosities.armor;
import java.util.function.Supplier;
import com.simibubi.create.AllItems;
import net.minecraft.inventory.EquipmentSlotType;
import net.minecraft.item.IArmorMaterial;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.util.LazyValue;
import net.minecraft.util.SoundEvent;
import net.minecraft.util.SoundEvents;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
public enum AllArmorMaterials implements IArmorMaterial {
COPPER("copper", 7, new int[] { 1, 3, 5, 2 }, 25, SoundEvents.ITEM_ARMOR_EQUIP_GOLD, 0.0F, 0.0F, () -> {
return Ingredient.fromItems(AllItems.COPPER_INGOT.get());
})
;
private static final int[] MAX_DAMAGE_ARRAY = new int[] { 13, 15, 16, 11 };
private final String name;
private final int maxDamageFactor;
private final int[] damageReductionAmountArray;
private final int enchantability;
private final SoundEvent soundEvent;
private final float toughness;
private final float knockbackResistance;
private final LazyValue<Ingredient> repairMaterial;
private AllArmorMaterials(String p_i231593_3_, int p_i231593_4_, int[] p_i231593_5_, int p_i231593_6_,
SoundEvent p_i231593_7_, float p_i231593_8_, float p_i231593_9_, Supplier<Ingredient> p_i231593_10_) {
this.name = p_i231593_3_;
this.maxDamageFactor = p_i231593_4_;
this.damageReductionAmountArray = p_i231593_5_;
this.enchantability = p_i231593_6_;
this.soundEvent = p_i231593_7_;
this.toughness = p_i231593_8_;
this.knockbackResistance = p_i231593_9_;
this.repairMaterial = new LazyValue<>(p_i231593_10_);
}
public int getDurability(EquipmentSlotType p_200896_1_) {
return MAX_DAMAGE_ARRAY[p_200896_1_.getIndex()] * this.maxDamageFactor;
}
public int getDamageReductionAmount(EquipmentSlotType p_200902_1_) {
return this.damageReductionAmountArray[p_200902_1_.getIndex()];
}
public int getEnchantability() {
return this.enchantability;
}
public SoundEvent getSoundEvent() {
return this.soundEvent;
}
public Ingredient getRepairMaterial() {
return this.repairMaterial.getValue();
}
@OnlyIn(Dist.CLIENT)
public String getName() {
return this.name;
}
public float getToughness() {
return this.toughness;
}
public float getKnockbackResistance() {
return this.knockbackResistance;
}
}

View file

@ -0,0 +1,28 @@
package com.simibubi.create.content.curiosities.armor;
import com.simibubi.create.Create;
import net.minecraft.entity.Entity;
import net.minecraft.inventory.EquipmentSlotType;
import net.minecraft.item.ArmorItem;
import net.minecraft.item.ItemStack;
public class CopperArmorItem extends ArmorItem {
public CopperArmorItem(EquipmentSlotType p_i48534_2_, Properties p_i48534_3_) {
super(AllArmorMaterials.COPPER, p_i48534_2_, p_i48534_3_);
}
public boolean isWornBy(Entity entity) {
for (ItemStack itemStack : entity.getArmorInventoryList())
if (itemStack.getItem() == this)
return true;
return false;
}
@Override
public String getArmorTexture(ItemStack stack, Entity entity, EquipmentSlotType slot, String type) {
return String.format("%s:textures/models/armor/copper.png", Create.ID);
}
}

View file

@ -0,0 +1,81 @@
package com.simibubi.create.content.curiosities.armor;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllItems;
import com.simibubi.create.CreateClient;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import net.minecraft.block.BlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.IRenderTypeBuffer.Impl;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.entity.EntityRenderer;
import net.minecraft.client.renderer.entity.EntityRendererManager;
import net.minecraft.client.renderer.entity.LivingRenderer;
import net.minecraft.client.renderer.entity.layers.LayerRenderer;
import net.minecraft.client.renderer.entity.model.BipedModel;
import net.minecraft.client.renderer.entity.model.EntityModel;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.Pose;
import net.minecraft.util.Direction;
public class CopperBacktankArmorLayer<T extends LivingEntity, M extends EntityModel<T>> extends LayerRenderer<T, M> {
private LivingRenderer<T, M> renderer;
public CopperBacktankArmorLayer(LivingRenderer<T, M> renderer) {
super(renderer);
this.renderer = renderer;
renderer.addLayer(this);
}
@Override
public void render(MatrixStack ms, IRenderTypeBuffer buffer, int light, LivingEntity entity, float yaw, float pitch,
float pt, float p_225628_8_, float p_225628_9_, float p_225628_10_) {
if (entity.getPose() == Pose.SLEEPING)
return;
if (!AllItems.COPPER_BACKTANK.get()
.isWornBy(entity))
return;
M entityModel = renderer.getEntityModel();
if (!(entityModel instanceof BipedModel))
return;
ms.push();
BipedModel<?> model = (BipedModel<?>) entityModel;
BlockState renderedState = AllBlocks.COPPER_BACKTANK.getDefaultState()
.with(CopperBacktankBlock.HORIZONTAL_FACING, Direction.SOUTH);
RenderType renderType = RenderType.getSolid();
SuperByteBuffer backtank = CreateClient.bufferCache.renderBlock(renderedState);
model.bipedBody.rotate(ms);
ms.translate(-1 / 2f, 10 / 16f, 1f);
ms.scale(1, -1, -1);
backtank.light(light)
.renderInto(ms, buffer.getBuffer(renderType));
if (buffer instanceof Impl)
((Impl) buffer).draw(renderType);
ms.pop();
}
public static void register() {
EntityRendererManager renderManager = Minecraft.getInstance()
.getRenderManager();
registerOn(renderManager.playerRenderer);
for (EntityRenderer<?> renderer : renderManager.renderers.values())
registerOn(renderer);
}
private static void registerOn(EntityRenderer<?> entityRenderer) {
if (!(entityRenderer instanceof LivingRenderer))
return;
new CopperBacktankArmorLayer<>((LivingRenderer<?, ?>) entityRenderer);
}
}

View file

@ -0,0 +1,111 @@
package com.simibubi.create.content.curiosities.armor;
import java.util.Optional;
import com.simibubi.create.AllItems;
import com.simibubi.create.AllShapes;
import com.simibubi.create.AllTileEntities;
import com.simibubi.create.content.contraptions.base.HorizontalKineticBlock;
import com.simibubi.create.foundation.block.ITE;
import net.minecraft.block.BlockState;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.inventory.EquipmentSlotType;
import net.minecraft.item.BlockItem;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.Direction;
import net.minecraft.util.Direction.Axis;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.util.math.shapes.ISelectionContext;
import net.minecraft.util.math.shapes.VoxelShape;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.IWorldReader;
import net.minecraft.world.World;
import net.minecraftforge.common.util.FakePlayer;
public class CopperBacktankBlock extends HorizontalKineticBlock implements ITE<CopperBacktankTileEntity> {
public CopperBacktankBlock(Properties properties) {
super(properties);
}
@Override
public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) {
return face == Direction.UP;
}
@Override
public Axis getRotationAxis(BlockState state) {
return Axis.Y;
}
@Override
public void onBlockPlacedBy(World worldIn, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack) {
super.onBlockPlacedBy(worldIn, pos, state, placer, stack);
if (worldIn.isRemote)
return;
if (stack == null)
return;
withTileEntityDo(worldIn, pos, te -> {
te.setAirLevel(stack.getOrCreateTag()
.getInt("Air"));
if (stack.hasDisplayName())
te.setCustomName(stack.getDisplayName());
});
}
@Override
public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand p_225533_5_,
BlockRayTraceResult p_225533_6_) {
if (player instanceof FakePlayer)
return ActionResultType.PASS;
if (player.getHeldItemMainhand().getItem() instanceof BlockItem)
return ActionResultType.PASS;
if (!player.getItemStackFromSlot(EquipmentSlotType.CHEST)
.isEmpty())
return ActionResultType.PASS;
if (!world.isRemote) {
player.setItemStackToSlot(EquipmentSlotType.CHEST, getItem(world, pos, state));
world.destroyBlock(pos, false);
}
return ActionResultType.SUCCESS;
}
@Override
public ItemStack getItem(IBlockReader p_185473_1_, BlockPos p_185473_2_, BlockState p_185473_3_) {
ItemStack item = AllItems.COPPER_BACKTANK.asStack();
Optional<CopperBacktankTileEntity> tileEntityOptional = getTileEntityOptional(p_185473_1_, p_185473_2_);
int air = tileEntityOptional.map(CopperBacktankTileEntity::getAirLevel)
.orElse(0);
ITextComponent customName = tileEntityOptional.map(CopperBacktankTileEntity::getCustomName)
.orElse(null);
item.getOrCreateTag()
.putInt("Air", air);
if (customName != null)
item.setDisplayName(customName);
return item;
}
@Override
public VoxelShape getShape(BlockState p_220053_1_, IBlockReader p_220053_2_, BlockPos p_220053_3_,
ISelectionContext p_220053_4_) {
return AllShapes.BACKTANK;
}
@Override
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
return AllTileEntities.COPPER_BACKTANK.create();
}
@Override
public Class<CopperBacktankTileEntity> getTileEntityClass() {
return CopperBacktankTileEntity.class;
}
}

View file

@ -0,0 +1,21 @@
package com.simibubi.create.content.curiosities.armor;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.RotatingData;
import com.simibubi.create.content.contraptions.base.SingleRotatingInstance;
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
public class CopperBacktankInstance extends SingleRotatingInstance {
public CopperBacktankInstance(InstancedTileRenderer<?> modelManager, KineticTileEntity tile) {
super(modelManager, tile);
}
@Override
protected InstancedModel<RotatingData> getModel() {
return getRotatingMaterial().getModel(AllBlockPartials.COPPER_BACKTANK_SHAFT, blockState);
}
}

View file

@ -0,0 +1,67 @@
package com.simibubi.create.content.curiosities.armor;
import com.simibubi.create.foundation.config.AllConfigs;
import net.minecraft.inventory.EquipmentSlotType;
import net.minecraft.item.BlockItem;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemUseContext;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.MathHelper;
public class CopperBacktankItem extends CopperArmorItem {
private BlockItem blockItem;
public CopperBacktankItem(Properties p_i48534_3_, BlockItem blockItem) {
super(EquipmentSlotType.CHEST, p_i48534_3_);
this.blockItem = blockItem;
}
@Override
public ActionResultType onItemUse(ItemUseContext p_195939_1_) {
return blockItem.onItemUse(p_195939_1_);
}
@Override
public boolean isDamageable() {
return false;
}
@Override
public int getRGBDurabilityForDisplay(ItemStack stack) {
return 0xefefef;
}
@Override
public void fillItemGroup(ItemGroup p_150895_1_, NonNullList<ItemStack> p_150895_2_) {
if (!isInGroup(p_150895_1_))
return;
ItemStack stack = new ItemStack(this);
CompoundNBT nbt = new CompoundNBT();
nbt.putInt("Air", AllConfigs.SERVER.curiosities.maxAirInBacktank.get());
stack.setTag(nbt);
p_150895_2_.add(stack);
}
@Override
public double getDurabilityForDisplay(ItemStack stack) {
return 1 - MathHelper
.clamp(getRemainingAir(stack) / ((float) AllConfigs.SERVER.curiosities.maxAirInBacktank.get()), 0, 1);
}
@Override
public boolean showDurabilityBar(ItemStack stack) {
return true;
}
public static int getRemainingAir(ItemStack stack) {
CompoundNBT orCreateTag = stack.getOrCreateTag();
return orCreateTag.getInt("Air");
}
}

View file

@ -0,0 +1,22 @@
package com.simibubi.create.content.curiosities.armor;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.foundation.render.PartialBufferer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
public class CopperBacktankRenderer extends KineticTileEntityRenderer {
public CopperBacktankRenderer(TileEntityRendererDispatcher dispatcher) {
super(dispatcher);
}
@Override
protected SuperByteBuffer getRotatedModel(KineticTileEntity te) {
return PartialBufferer.get(AllBlockPartials.COPPER_BACKTANK_SHAFT, te.getBlockState());
}
}

View file

@ -0,0 +1,107 @@
package com.simibubi.create.content.curiosities.armor;
import com.simibubi.create.AllItems;
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.config.AllConfigs;
import com.simibubi.create.foundation.utility.VecHelper;
import net.minecraft.block.BlockState;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.particles.ParticleTypes;
import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.INameable;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TranslationTextComponent;
public class CopperBacktankTileEntity extends KineticTileEntity implements INameable {
public int airLevel;
public int airLevelTimer;
private ITextComponent customName;
public CopperBacktankTileEntity(TileEntityType<?> typeIn) {
super(typeIn);
}
@Override
public void tick() {
super.tick();
if (getSpeed() == 0)
return;
if (airLevelTimer > 0) {
airLevelTimer--;
return;
}
Integer max = AllConfigs.SERVER.curiosities.maxAirInBacktank.get();
if (world.isRemote) {
Vector3d centerOf = VecHelper.getCenterOf(pos);
Vector3d v = VecHelper.offsetRandomly(centerOf, Create.random, .65f);
Vector3d m = centerOf.subtract(v);
if (airLevel == max) {
if (Create.random.nextFloat() < 1 / 8f) {
world.addParticle(ParticleTypes.HAPPY_VILLAGER, v.x, v.y, v.z, 0, 0, 0);
}
} else
world.addParticle(new AirParticleData(1, .05f), v.x, v.y, v.z, m.x, m.y, m.z);
return;
}
if (airLevel == max)
return;
float abs = Math.abs(getSpeed());
int increment = MathHelper.clamp(((int) abs - 100) / 20, 1, 5);
airLevel = Math.min(max, airLevel + increment);
if (airLevel == max)
sendData();
airLevelTimer = MathHelper.clamp((int) (128f - abs / 5f) - 108, 0, 20);
}
public int getAirLevel() {
return airLevel;
}
public void setAirLevel(int airLevel) {
this.airLevel = airLevel;
sendData();
}
public void setCustomName(ITextComponent customName) {
this.customName = customName;
}
public ITextComponent getCustomName() {
return customName;
}
@Override
protected void write(CompoundNBT compound, boolean clientPacket) {
super.write(compound, clientPacket);
compound.putInt("Air", airLevel);
compound.putInt("Timer", airLevelTimer);
if (this.customName != null)
compound.putString("CustomName", ITextComponent.Serializer.toJson(this.customName));
}
@Override
protected void fromTag(BlockState state, CompoundNBT compound, boolean clientPacket) {
super.fromTag(state, compound, clientPacket);
airLevel = compound.getInt("Air");
airLevelTimer = compound.getInt("Timer");
if (compound.contains("CustomName", 8))
this.customName = ITextComponent.Serializer.fromJson(compound.getString("CustomName"));
}
@Override
public ITextComponent getName() {
return this.customName != null ? this.customName
: new TranslationTextComponent(AllItems.COPPER_BACKTANK.get()
.getTranslationKey());
}
}

View file

@ -0,0 +1,68 @@
package com.simibubi.create.content.curiosities.armor;
import com.simibubi.create.AllItems;
import com.simibubi.create.foundation.utility.NBTHelper;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.Pose;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.inventory.EquipmentSlotType;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
@EventBusSubscriber
public class DivingBootsItem extends CopperArmorItem {
public DivingBootsItem(Properties p_i48534_3_) {
super(EquipmentSlotType.FEET, p_i48534_3_);
}
@SubscribeEvent
public static void accellerateDescentUnderwater(LivingUpdateEvent event) {
LivingEntity entity = event.getEntityLiving();
if (!affects(entity))
return;
Vector3d motion = entity.getMotion();
Boolean isJumping = ObfuscationReflectionHelper.getPrivateValue(LivingEntity.class, entity, "field_70703_bu");
entity.onGround |= entity.collidedVertically;
if (isJumping && entity.onGround) {
motion = motion.add(0, .5f, 0);
entity.onGround = false;
} else {
motion = motion.add(0, -0.05f, 0);
}
float multiplier = 1.3f;
if (motion.mul(1, 0, 1)
.length() < 0.145f && (entity.moveForward > 0 || entity.moveStrafing != 0) && !entity.isSneaking())
motion = motion.mul(multiplier, 1, multiplier);
entity.setMotion(motion);
}
protected static boolean affects(LivingEntity entity) {
if (!AllItems.DIVING_BOOTS.get()
.isWornBy(entity)) {
entity.getPersistentData()
.remove("HeavyBoots");
return false;
}
NBTHelper.putMarker(entity.getPersistentData(), "HeavyBoots");
if (!entity.isInWater())
return false;
if (entity.getPose() == Pose.SWIMMING)
return false;
if (entity instanceof PlayerEntity) {
PlayerEntity playerEntity = (PlayerEntity) entity;
if (playerEntity.abilities.isFlying)
return false;
}
return true;
}
}

View file

@ -0,0 +1,64 @@
package com.simibubi.create.content.curiosities.armor;
import com.simibubi.create.AllItems;
import net.minecraft.entity.LivingEntity;
import net.minecraft.inventory.EquipmentSlotType;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.potion.EffectInstance;
import net.minecraft.potion.Effects;
import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
@EventBusSubscriber
public class DivingHelmetItem extends CopperArmorItem {
public DivingHelmetItem(Properties p_i48534_3_) {
super(EquipmentSlotType.HEAD, p_i48534_3_);
}
@SubscribeEvent
public static void breatheUnderwater(LivingUpdateEvent event) {
LivingEntity entity = event.getEntityLiving();
boolean second = entity.world.getGameTime() % 20 == 0;
boolean drowning = entity.getAir() == 0;
if (!second && !drowning)
return;
if (!AllItems.DIVING_HELMET.get()
.isWornBy(entity))
return;
if (!entity.isInWater())
return;
ItemStack backtank = ItemStack.EMPTY;
for (ItemStack itemStack : entity.getArmorInventoryList()) {
if (AllItems.COPPER_BACKTANK.isIn(itemStack)) {
backtank = itemStack;
break;
}
}
if (backtank.isEmpty())
return;
CompoundNBT tag = backtank.getOrCreateTag();
int airRemaining = tag.getInt("Air");
if (airRemaining == 0)
return;
if (drowning)
entity.setAir(10);
if (!second)
return;
entity.setAir(Math.min(entity.getMaxAir(), entity.getAir() + 10));
entity.addPotionEffect(new EffectInstance(Effects.WATER_BREATHING, 30, 0, true, false, true));
tag.putInt("Air", airRemaining - 1);
backtank.setTag(tag);
}
}

View file

@ -6,6 +6,7 @@ import java.util.List;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.systems.RenderSystem;
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;
@ -29,6 +30,7 @@ import com.simibubi.create.content.curiosities.zapper.terrainzapper.WorldshaperR
import com.simibubi.create.content.logistics.block.depot.EjectorTargetHandler;
import com.simibubi.create.content.logistics.block.mechanicalArm.ArmInteractionPointHandler;
import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.fluid.FluidHelper;
import com.simibubi.create.foundation.item.ItemDescription;
import com.simibubi.create.foundation.item.TooltipHelper;
import com.simibubi.create.foundation.networking.AllPackets;
@ -90,7 +92,7 @@ public class ClientEvents {
World world = Minecraft.getInstance().world;
if (!isGameActive())
return;
if (event.phase == Phase.START) {
AirCurrent.tickClientPlayerSounds();
return;
@ -271,11 +273,20 @@ public class ClientEvents {
if (fluid.isEquivalentTo(AllFluids.CHOCOLATE.get())) {
event.setDensity(5f);
event.setCanceled(true);
return;
}
if (fluid.isEquivalentTo(AllFluids.HONEY.get())) {
event.setDensity(1.5f);
event.setCanceled(true);
return;
}
if (FluidHelper.isWater(fluid) && AllItems.DIVING_HELMET.get()
.isWornBy(Minecraft.getInstance().renderViewEntity)) {
event.setDensity(0.010f);
event.setCanceled(true);
return;
}
}

View file

@ -4,6 +4,7 @@ public class CCuriosities extends ConfigBase {
public ConfigInt maxSymmetryWandRange = i(50, 10, "maxSymmetryWandRange", Comments.symmetryRange);
public ConfigInt placementAssistRange = i(12, 3, "placementAssistRange", Comments.placementRange);
public ConfigInt maxAirInBacktank = i(900, 1, "maxAirInBacktank", Comments.maxAirInBacktank);
// public ConfigInt zapperUndoLogLength = i(10, 0, "zapperUndoLogLength", Comments.zapperUndoLogLength); NYI
@Override
@ -13,6 +14,8 @@ public class CCuriosities extends ConfigBase {
private static class Comments {
static String symmetryRange = "The Maximum Distance to an active mirror for the symmetry wand to trigger.";
static String maxAirInBacktank =
"The Maximum volume of Air that can be stored in a backtank = Seconds of underwater breathing";
static String placementRange =
"The Maximum Distance a Block placed by Create's placement assist will have to its interaction point.";
// static String zapperUndoLogLength = "The maximum amount of operations, a blockzapper can remember for undoing. (0 to disable undo)";

View file

@ -57,7 +57,17 @@ public class AssetLookup {
* models/block/folders[0]/folders[1]/.../item.json "_" will be replaced by the
* item name
*/
public static <I extends BlockItem> NonNullBiConsumer<DataGenContext<Item, I>, RegistrateItemModelProvider> customItemModel(
public static <I extends BlockItem> NonNullBiConsumer<DataGenContext<Item, I>, RegistrateItemModelProvider> customBlockItemModel(
String... folders) {
return (c, p) -> {
String path = "block";
for (String string : folders)
path += "/" + ("_".equals(string) ? c.getName() : string);
p.withExistingParent(c.getName(), p.modLoc(path));
};
}
public static <I extends Item> NonNullBiConsumer<DataGenContext<Item, I>, RegistrateItemModelProvider> customGenericItemModel(
String... folders) {
return (c, p) -> {
String path = "block";

View file

@ -63,7 +63,7 @@ public class BuilderTransformers {
.transform(StressConfigDefaults.setNoImpact())
.loot((p, b) -> p.registerDropping(b, AllBlocks.SHAFT.get()))
.item()
.model(AssetLookup.customItemModel("encased_shaft", "item_" + casing))
.model(AssetLookup.customBlockItemModel("encased_shaft", "item_" + casing))
.build();
}

View file

@ -42,7 +42,7 @@ public class ModelGen {
}
public static <I extends BlockItem, P> NonNullFunction<ItemBuilder<I, P>, P> customItemModel(String... path) {
return b -> b.model(AssetLookup.customItemModel(path))
return b -> b.model(AssetLookup.customBlockItemModel(path))
.build();
}

View file

@ -58,7 +58,10 @@ public abstract class CreateItemGroupBase extends ItemGroup {
continue;
ItemStack stack = new ItemStack(item);
IBakedModel model = itemRenderer.getItemModelWithOverrides(stack, world, null);
if ((model.isGui3d() && AllSections.of(stack) != AllSections.CURIOSITIES) != specialItems)
if (AllSections.of(stack) != AllSections.KINETICS) {
if (specialItems)
continue;
} else if (model.isGui3d() != specialItems)
continue;
item.fillItemGroup(this, items);
}

View file

@ -0,0 +1,30 @@
package com.simibubi.create.foundation.mixin;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import net.minecraft.entity.Entity;
import net.minecraft.nbt.CompoundNBT;
import net.minecraftforge.common.capabilities.CapabilityProvider;
@Mixin(Entity.class)
public abstract class HeavyBootsOnEntityMixin extends CapabilityProvider<Entity> {
protected HeavyBootsOnEntityMixin(Class<Entity> baseClass) {
super(baseClass);
}
@Shadow
public abstract CompoundNBT getPersistentData();
@Inject(at = @At("HEAD"), method = "canSwim", cancellable = true)
public void noSwimmingWithHeavyBootsOn(CallbackInfoReturnable<Boolean> cir) {
CompoundNBT persistentData = getPersistentData();
if (persistentData.contains("HeavyBoots"))
cir.setReturnValue(false);
}
}

View file

@ -0,0 +1,32 @@
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.mojang.authlib.GameProfile;
import net.minecraft.client.entity.player.AbstractClientPlayerEntity;
import net.minecraft.client.entity.player.ClientPlayerEntity;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.nbt.CompoundNBT;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
@OnlyIn(Dist.CLIENT)
@Mixin(ClientPlayerEntity.class)
public abstract class HeavyBootsOnPlayerMixin extends AbstractClientPlayerEntity {
public HeavyBootsOnPlayerMixin(ClientWorld p_i50991_1_, GameProfile p_i50991_2_) {
super(p_i50991_1_, p_i50991_2_);
}
@Inject(at = @At("HEAD"), method = "canSwim", cancellable = true)
public void noSwimmingWithHeavyBootsOn(CallbackInfoReturnable<Boolean> cir) {
CompoundNBT persistentData = getPersistentData();
if (persistentData.contains("HeavyBoots"))
cir.setReturnValue(false);
}
}

View file

@ -55,6 +55,9 @@ public net.minecraft.client.renderer.GameRenderer func_215311_a(Lnet/minecraft/c
public net.minecraft.client.renderer.FirstPersonRenderer field_187467_d # itemStackMainHand
public net.minecraft.client.renderer.FirstPersonRenderer field_187468_e # itemStackOffHand
# EntityRendererManager
public net.minecraft.client.renderer.entity.EntityRendererManager field_178637_m # playerRenderer
# IResizeCallback
public net.minecraft.util.palette.IResizeCallback

View file

@ -0,0 +1,183 @@
{
"credit": "Made with Blockbench",
"textures": {
"0": "create:block/copper_backtank",
"particle": "create:block/copper_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"}
}
}
],
"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": []
}
]
}

View file

@ -0,0 +1,37 @@
{
"credit": "Made with Blockbench",
"textures": {
"0": "create:block/copper_backtank",
"particle": "create:block/copper_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]
}

View file

@ -0,0 +1,205 @@
{
"credit": "Made with Blockbench",
"parent": "block/block",
"textures": {
"0": "create:block/copper_backtank",
"particle": "create:block/copper_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]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 240 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 833 B

View file

@ -4,6 +4,8 @@
"package": "com.simibubi.create.foundation.mixin",
"compatibilityLevel": "JAVA_8",
"refmap": "create.refmap.json",
"mixins": [
],
"client": [
"TileWorldHookMixin",
"CancelTileEntityRenderMixin",
@ -13,6 +15,7 @@
"RenderHooksMixin",
"ShaderCloseMixin",
"TileRemoveMixin",
"HeavyBootsOnPlayerMixin",
"EntityContraptionInteractionMixin",
"StoreProjectionMatrixMixin"
],