Merge remote-tracking branch 'origin/mc1.16/dev' into mc1.16/chromatic-projector

# Conflicts:
#	src/main/java/com/simibubi/create/AllContainerTypes.java
#	src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AbstractContraptionEntity.java
This commit is contained in:
JozsefA 2021-06-01 11:47:15 -07:00
commit 59dd21b85a
154 changed files with 6751 additions and 3343 deletions

View file

@ -130,8 +130,8 @@ dependencies {
// i'll leave this here commented for easier testing
//runtimeOnly fg.deobf("vazkii.arl:AutoRegLib:1.4-35.69")
//runtimeOnly fg.deobf("vazkii.quark:Quark:r2.0-212.984")
// runtimeOnly fg.deobf("slimeknights.mantle:Mantle:1.16.3-1.6.40")
// runtimeOnly fg.deobf("slimeknights.tconstruct:TConstruct:1.16.3-3.0.1.24")
//runtimeOnly fg.deobf("slimeknights.mantle:Mantle:1.16.5-1.6.103")
//runtimeOnly fg.deobf("slimeknights.tconstruct:TConstruct:1.16.5-3.0.3.168")
annotationProcessor 'org.spongepowered:mixin:0.8:processor'
}

View file

@ -407,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
a6d814f94926d88764c38862cc4ece9c367e023b assets/create/lang/en_ud.json
d1838140c8383ee4537db90eb8f657d0c268fe91 assets/create/lang/en_us.json
4fcda300efe5a2ad8695b5ae3f24a54ea109a954 assets/create/lang/unfinished/de_de.json
6a1dde57b2224d4b0287ebc705d6a75d329b5e1f assets/create/lang/unfinished/es_es.json
93ee0e30a56b405a9e766d353c36276e36a84b5c assets/create/lang/unfinished/es_mx.json
49a691320c73e09f921cd0ea97398126231e99fa assets/create/lang/unfinished/fr_fr.json
cf14b3828b6c11013f606f277d88fb63245bb2a8 assets/create/lang/unfinished/it_it.json
73c1c1489833cbcb28bb1ce90541c8c8bdf329c0 assets/create/lang/unfinished/ja_jp.json
924303b9bcf56aedbbfc46108655f71324308e12 assets/create/lang/unfinished/ko_kr.json
079aea6843e756efbfca0976983be1957863717c assets/create/lang/unfinished/nl_nl.json
b7bab15167400ee48a9728f81446e572c494fd8d assets/create/lang/unfinished/pl_pl.json
07e84cc3eee3faa1ab3d26e0c85c7f09c8573368 assets/create/lang/unfinished/pt_br.json
6ffb0cf20d712aee23a42a9ec440dd7dc92293d6 assets/create/lang/unfinished/ru_ru.json
0ae98a18e59f478da41d8c5d832737b65f6a8c8a assets/create/lang/unfinished/zh_cn.json
4c96e5a76e72368a59190b7588d389fdd2cc75e1 assets/create/lang/unfinished/zh_tw.json
e9c463e0cf56ed28ee26a33debeae3ecc2e941d2 assets/create/lang/en_ud.json
dceb2a935135d2ef502cdcba7c9d58f64062513f assets/create/lang/en_us.json
eb40acb99f3c7af50b840f3c2058d7a7bdd5cff7 assets/create/lang/unfinished/de_de.json
bcbfd3a6768daf265a1c01a424e985a3fdec6504 assets/create/lang/unfinished/es_es.json
50dec8a7eb983ac4d29f3eeba3273dbaeca26902 assets/create/lang/unfinished/es_mx.json
cc723673107651024f3fc0e43690ac467ff729b2 assets/create/lang/unfinished/fr_fr.json
99452bacb5d80715ea0a52106b7e2734a32c55d4 assets/create/lang/unfinished/it_it.json
f3058ea623666a43029af307f632197c8ff8dcab assets/create/lang/unfinished/ja_jp.json
d756b02573d6a3a3b73bd03ec69fe760825e1606 assets/create/lang/unfinished/ko_kr.json
281712735ab6437a417dde63c855e18eb19493a0 assets/create/lang/unfinished/nl_nl.json
24056aefb7ff79a2127c194fe2918ab9e745d6b5 assets/create/lang/unfinished/pl_pl.json
0f9c83a9f70d809d8f66c0438529b169b92ffdb1 assets/create/lang/unfinished/pt_br.json
ff35273842d3190aa361f2a8ca7edae80f97864d assets/create/lang/unfinished/ru_ru.json
139a31cfd09d4aaca33d118d28de735ba72f4f0d assets/create/lang/unfinished/zh_cn.json
19bfa8f57e8b395a2cfd98039f44301a61c1f73c 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
@ -1452,6 +1452,7 @@ ebdf23b99b7895e347c29057c8070a6e16e56beb assets/create/models/item/limestone_cob
288da8b29a4e9d0d0b694567a61b5a816a2859b8 assets/create/models/item/limestone_cobblestone_wall.json
8065de871ad2fbaed711735561b8ed91a2ce0004 assets/create/models/item/limestone_pillar.json
d245aa4994ff197b1ffeb7980d05f96bd20cdeb3 assets/create/models/item/linear_chassis.json
2866bff509b060cd3ee99b4eef25a4e1e4639703 assets/create/models/item/linked_controller.json
d912be3e87f2beaa8e22747f867739139667241b assets/create/models/item/magenta_seat.json
928c5e3747fb758d2610475258cc168b0d4ee7b6 assets/create/models/item/magenta_valve_handle.json
932facf4bf93b471e8630f4132a4284a9f4d0d39 assets/create/models/item/mechanical_arm.json
@ -1651,8 +1652,8 @@ d080b1b25e5bc8baf5aee68691b08c7f12ece3b0 assets/create/models/item/windmill_bear
866fbb0ce2878a73e0440d1caf6534c8bd7c384f assets/create/models/item/zinc_ingot.json
a80fb25a0b655e76be986b5b49fcb0f03461a1ab assets/create/models/item/zinc_nugget.json
b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json
096382a4c025b5ffdde9c496ee9da0d5345fbe17 assets/create/sounds.json
5d0cc4c0255dc241e61c173b31ddca70c88d08e4 data/create/advancements/aesthetics.json
6490fa0587db770cf7c794b47f3bcd2b691f4226 assets/create/sounds.json
0f1b4b980afba9bf2caf583b88e261bba8b10313 data/create/advancements/aesthetics.json
187921fa131b06721bfaf63f2623a28c141aae9a data/create/advancements/andesite_alloy.json
0ea2db7173b5be28b289ea7c9a6a0cf5805c60c7 data/create/advancements/andesite_casing.json
83c046bd200623933545c9e4326f782fb02c87fa data/create/advancements/arm_blaze_burner.json
@ -1712,6 +1713,7 @@ c9c4060ed207226b69fada2d61e01a97d7077eae data/create/advancements/nixie_tube.jso
4b621e5bb48fbb120853ec02c05c915d86bd6dd8 data/create/advancements/pipe_spill.json
72025d8bf73ab8096c29f12d0c8d9a346f09cd64 data/create/advancements/polished_rose_quartz.json
62d29ec01eff5d21968636a0479361ecdc11ae30 data/create/advancements/press.json
f80479b50e248ee8d6d1abb7d08866cf711ac2b2 data/create/advancements/recipes/building_blocks/andesite.json
5012e9d559439d0d62d0b34c2e39de048e8c7699 data/create/advancements/recipes/building_blocks/blasting/aluminum_ingot_compat_silents_mechanisms.json
2e253226c408dffb9dfb828b846f70ebd1cfb16e data/create/advancements/recipes/building_blocks/blasting/ingot_aluminum_compat_immersiveengineering.json
3f022f89aeb5034f2292ca71daa9f311e8af40ff data/create/advancements/recipes/building_blocks/blasting/ingot_lead_compat_immersiveengineering.json
@ -1738,6 +1740,8 @@ a61045a27757950d96fee77768bfd96f935f98b2 data/create/advancements/recipes/buildi
a75f1162ac89cd50a1ca8e525dd059fb359a6550 data/create/advancements/recipes/building_blocks/blasting/tin_ingot_compat_silents_mechanisms.json
230c3da350aa45524712d5dd28b84aa59b2883e9 data/create/advancements/recipes/building_blocks/blasting/tin_ingot_compat_thermal.json
38410d4b3bbbf33c1c8913735abd1b3d71fb3829 data/create/advancements/recipes/building_blocks/blasting/uranium_ingot_compat_silents_mechanisms.json
8850272a97541e331482531c52cc94197fe808be data/create/advancements/recipes/building_blocks/diorite.json
0abb698cabe5f71675773e5eeadeccb509f1cb90 data/create/advancements/recipes/building_blocks/granite.json
22067545c460d95831d9dddf361da9becac3396e data/create/advancements/recipes/building_blocks/smelting/aluminum_ingot_compat_silents_mechanisms.json
e525d8eda8d0aac6791ae935ed4f3f75cc521460 data/create/advancements/recipes/building_blocks/smelting/glass_from_framed_glass.json
295c5a61d6f175a65d25e19cbd7ca90d3b4a93b2 data/create/advancements/recipes/building_blocks/smelting/glass_from_horizontal_framed_glass.json
@ -1975,7 +1979,7 @@ bfb3673a30db807aa298f2fd128ec863a65818af data/create/advancements/recipes/create
47cc716674e1741f4115b04a20ac4c4a5b2a6d8a data/create/advancements/recipes/create.palettes/andesite_cobblestone_stairs_from_andesite_cobblestone_stonecutting.json
bd79e63c29d68fbf87ded63ac1eedba3d7287996 data/create/advancements/recipes/create.palettes/andesite_cobblestone_wall.json
0ed4c084f05b2bd4c134293ad3554d6e31a1d568 data/create/advancements/recipes/create.palettes/andesite_cobblestone_wall_from_andesite_cobblestone_stonecutting.json
a453d05704cadb3279318192aac87e623738cdaa data/create/advancements/recipes/create.palettes/andesite_pillar.json
cc8e078ccce06e9489d8b62d88b6a2e4d4ca2d79 data/create/advancements/recipes/create.palettes/andesite_pillar.json
d6f31097aef040e12eb288ab755d459f55269a70 data/create/advancements/recipes/create.palettes/andesite_pillar_from_andesite_stonecutting.json
f10a4369147cc5e36d3ab1b0008d29fd36ffc8f6 data/create/advancements/recipes/create.palettes/birch_window.json
bfea45da3f8df1c63f6c7ff1b63ad7e08c1d44b0 data/create/advancements/recipes/create.palettes/birch_window_pane.json
@ -1990,6 +1994,7 @@ b4651c8202331483e82b28b04edc6cd97e62ad1d data/create/advancements/recipes/create
b2813566e6715c2d377dd4ef461b012cae7eb190 data/create/advancements/recipes/create.palettes/crimson_window_pane.json
25991d5667252d551e02c4fbbfa27ebf4353d28d data/create/advancements/recipes/create.palettes/dark_oak_window.json
4819383b1a7885b4401fdc25955d2c51f75b6236 data/create/advancements/recipes/create.palettes/dark_oak_window_pane.json
02cd339174aaf2c14e14f886d90fbbcae91783b6 data/create/advancements/recipes/create.palettes/dark_scoria.json
ebd6413d530325eef6fcf42a0ee0ac840c1f7366 data/create/advancements/recipes/create.palettes/dark_scoria_bricks_from_dark_scoria_stonecutting.json
030ce9b61b8af158cf54e7a9ab673ccb7251483f data/create/advancements/recipes/create.palettes/dark_scoria_bricks_slab.json
ac44d03859cfd4c00ddcbd1dafbb9acc51d849d7 data/create/advancements/recipes/create.palettes/dark_scoria_bricks_slab_from_dark_scoria_bricks_stonecutting.json
@ -2004,7 +2009,7 @@ eef6f85b20fb997af1b0c2383a45100be2e0cd34 data/create/advancements/recipes/create
8d44f675237a92513678a77da7a1f329475a3453 data/create/advancements/recipes/create.palettes/dark_scoria_cobblestone_stairs_from_dark_scoria_cobblestone_stonecutting.json
702527e6735770a6fcc3ad446df39d3b1b80709e data/create/advancements/recipes/create.palettes/dark_scoria_cobblestone_wall.json
ce069a666d223f733bfa1cc9ca5e3e5e27de1ebc data/create/advancements/recipes/create.palettes/dark_scoria_cobblestone_wall_from_dark_scoria_cobblestone_stonecutting.json
c5d7f1e79302d47ea02cb63b99b286b90ec0287b data/create/advancements/recipes/create.palettes/dark_scoria_pillar.json
64f9ba8df2fd2357ad397b75156a4af9c26fa91b data/create/advancements/recipes/create.palettes/dark_scoria_pillar.json
f3d6314d272d84c456c5df512dcc555b7694ded2 data/create/advancements/recipes/create.palettes/dark_scoria_pillar_from_dark_scoria_stonecutting.json
83e3c29d5d651a6bc6fd9d5843d8d75f4cda2b77 data/create/advancements/recipes/create.palettes/diorite_bricks_from_diorite_stonecutting.json
4649497555ca4269b1f3859f0275ca1ff7c85377 data/create/advancements/recipes/create.palettes/diorite_bricks_slab.json
@ -2020,8 +2025,9 @@ f3d6314d272d84c456c5df512dcc555b7694ded2 data/create/advancements/recipes/create
600c57c4dc3a3741d5db7ec01340e1c6a01d54b4 data/create/advancements/recipes/create.palettes/diorite_cobblestone_stairs_from_diorite_cobblestone_stonecutting.json
8b4990d3657e23a86c3e71eba77370c56692c93b data/create/advancements/recipes/create.palettes/diorite_cobblestone_wall.json
e741ca0e76875ee12beecd45db764444956d5342 data/create/advancements/recipes/create.palettes/diorite_cobblestone_wall_from_diorite_cobblestone_stonecutting.json
9edb9886a6b2792dc38d5d61a2be2b7a3fd28eeb data/create/advancements/recipes/create.palettes/diorite_pillar.json
08e8495b798d54366f132da060e93e94e23f6354 data/create/advancements/recipes/create.palettes/diorite_pillar.json
87d34b8ca3dc73a778ab94ef4d852f418112adb3 data/create/advancements/recipes/create.palettes/diorite_pillar_from_diorite_stonecutting.json
17135274809b7a0f38294d2e6412b787e985e4d5 data/create/advancements/recipes/create.palettes/dolomite.json
dbf201ceafc310f5cc6624c81777d50348844285 data/create/advancements/recipes/create.palettes/dolomite_bricks_from_dolomite_stonecutting.json
6716447628cce96a1f520766d019f09380ec67e5 data/create/advancements/recipes/create.palettes/dolomite_bricks_slab.json
52ae39c6f63860fa5a60c1ae70ef00eca5b961c9 data/create/advancements/recipes/create.palettes/dolomite_bricks_slab_from_dolomite_bricks_stonecutting.json
@ -2036,7 +2042,7 @@ a8904096a05eeb7e746563e1a4b97b39173d1708 data/create/advancements/recipes/create
124c586970edc5c15079bec53c734a2beb670130 data/create/advancements/recipes/create.palettes/dolomite_cobblestone_stairs_from_dolomite_cobblestone_stonecutting.json
2e9f1556a11d4d7190233be3af64453396865da9 data/create/advancements/recipes/create.palettes/dolomite_cobblestone_wall.json
1a1e8764ba05f72ffd7e5872a8f2fc9cf2108308 data/create/advancements/recipes/create.palettes/dolomite_cobblestone_wall_from_dolomite_cobblestone_stonecutting.json
4652a46d4b6590b988d57d855def253ebeb380fe data/create/advancements/recipes/create.palettes/dolomite_pillar.json
4b56a0490151fbc66dee82546b9e271a5a85fa12 data/create/advancements/recipes/create.palettes/dolomite_pillar.json
a8752ee9bf9afc665c5d940d251c1cf4a83a0ae9 data/create/advancements/recipes/create.palettes/dolomite_pillar_from_dolomite_stonecutting.json
ea981a446d8cc22d6b7fb4667e86dc18a48a4720 data/create/advancements/recipes/create.palettes/fancy_andesite_bricks_from_andesite_stonecutting.json
44dc6bc5a7303129db2268a025f49dcb222597a7 data/create/advancements/recipes/create.palettes/fancy_andesite_bricks_slab.json
@ -2103,6 +2109,7 @@ d51bee4b276805ecf1a93a37ec6d610e75c0117e data/create/advancements/recipes/create
17e02efc06d935c094bde5bb73a5127bc98e4758 data/create/advancements/recipes/create.palettes/fancy_weathered_limestone_bricks_wall_from_fancy_weathered_limestone_bricks_stonecutting.json
05331b5f1701453ecdfd0b3e6429b22ec209ba67 data/create/advancements/recipes/create.palettes/framed_glass_from_glass_colorless_stonecutting.json
605476eaf4e964936c031732cfef534edfdd749a data/create/advancements/recipes/create.palettes/framed_glass_pane.json
1b17b217e487b958e35ab0ad509bb8caceebda40 data/create/advancements/recipes/create.palettes/gabbro.json
b835dd583d670e2d7f6af4dd74e44f5817b03b21 data/create/advancements/recipes/create.palettes/gabbro_bricks_from_gabbro_stonecutting.json
2bfac04754aaf07423b330134984d887ae43f00a data/create/advancements/recipes/create.palettes/gabbro_bricks_slab.json
f05bb35d52866abc7dae9c7f3f5fc85257760564 data/create/advancements/recipes/create.palettes/gabbro_bricks_slab_from_gabbro_bricks_stonecutting.json
@ -2117,7 +2124,7 @@ c90a07c41b2e034437c8a765de7b517f89383830 data/create/advancements/recipes/create
f9d917def55875dcba621246f80dc83904be3d73 data/create/advancements/recipes/create.palettes/gabbro_cobblestone_stairs_from_gabbro_cobblestone_stonecutting.json
b081b91a5e11e8ce9b2455b944eb554f5f2e419e data/create/advancements/recipes/create.palettes/gabbro_cobblestone_wall.json
093f372d84c557791cebcb286b3505f32c4dc7c0 data/create/advancements/recipes/create.palettes/gabbro_cobblestone_wall_from_gabbro_cobblestone_stonecutting.json
dacb04ebd8bc20c2a0689a9e75ea67c07e43c56b data/create/advancements/recipes/create.palettes/gabbro_pillar.json
4b0f4a396397a791d08fe422fb4cfb922554779c data/create/advancements/recipes/create.palettes/gabbro_pillar.json
35288551f5146ebbf8dbbe987928dd2a1bdc7ea8 data/create/advancements/recipes/create.palettes/gabbro_pillar_from_gabbro_stonecutting.json
6a9a8b37ec264084ce0481200225017739546025 data/create/advancements/recipes/create.palettes/granite_bricks_from_granite_stonecutting.json
2ac84cb0b8b629bdfd740a6613df2a7e45964bf2 data/create/advancements/recipes/create.palettes/granite_bricks_slab.json
@ -2133,7 +2140,7 @@ c39e86c111a2c76ef9cb7046d2b87262524b06b9 data/create/advancements/recipes/create
06d3f3150db99f808a5fd4141c0fc6235d979ce5 data/create/advancements/recipes/create.palettes/granite_cobblestone_stairs_from_granite_cobblestone_stonecutting.json
6bbc97d2ac655a532eaf345fca64431dbf8af27d data/create/advancements/recipes/create.palettes/granite_cobblestone_wall.json
d6b622a2cf302d0c39e0d38d24b0a17e1461d13b data/create/advancements/recipes/create.palettes/granite_cobblestone_wall_from_granite_cobblestone_stonecutting.json
03c3a88e1a320afe9866a1c09ef34b46763c8ec1 data/create/advancements/recipes/create.palettes/granite_pillar.json
5b9fe440648ae9f37b5d079cfcd1d9a72afa74fa data/create/advancements/recipes/create.palettes/granite_pillar.json
97cc61b1b510849ebc0bf51cf2b8107a5c43fc17 data/create/advancements/recipes/create.palettes/granite_pillar_from_granite_stonecutting.json
cbb40e82dba460ee126966a52f0164e740ac1f11 data/create/advancements/recipes/create.palettes/horizontal_framed_glass_from_glass_colorless_stonecutting.json
29e2e2aeca3800c8ba432be30d54d046a3991217 data/create/advancements/recipes/create.palettes/horizontal_framed_glass_pane.json
@ -2148,6 +2155,7 @@ cbb40e82dba460ee126966a52f0164e740ac1f11 data/create/advancements/recipes/create
c0dd961f07e85a183af7b942ed0e4bfe8f775373 data/create/advancements/recipes/create.palettes/layered_limestone_from_limestone_stonecutting.json
5d06584a83074f8a8d1a52d93d13f2718bc99152 data/create/advancements/recipes/create.palettes/layered_scoria_from_scoria_stonecutting.json
b09e64b4989ef08b7ea6b9011681c2fbf780d949 data/create/advancements/recipes/create.palettes/layered_weathered_limestone_from_weathered_limestone_stonecutting.json
519234f31ee8cacc0f916df40703ba171c6a90e5 data/create/advancements/recipes/create.palettes/limestone.json
52c1902f260173fe610a4a03294a51c4cea3b37b data/create/advancements/recipes/create.palettes/limestone_bricks_from_limestone_stonecutting.json
e6eb6c433541b7c4e3e5b64f240618e6df67ed58 data/create/advancements/recipes/create.palettes/limestone_bricks_slab.json
72f0586690ca4413082b2cbecf7938ba6e4756b4 data/create/advancements/recipes/create.palettes/limestone_bricks_slab_from_limestone_bricks_stonecutting.json
@ -2162,7 +2170,7 @@ d7b36c7fcf429eea7c57f2ae967e73b8e18d0d58 data/create/advancements/recipes/create
749936c7c33273c1833154a1eb1e13604ece8565 data/create/advancements/recipes/create.palettes/limestone_cobblestone_stairs_from_limestone_cobblestone_stonecutting.json
c0e3f97a6f807ea8147f58bf4ca002725d1877b6 data/create/advancements/recipes/create.palettes/limestone_cobblestone_wall.json
a01c91b927f50d367c3bfcca5f370002a991d45a data/create/advancements/recipes/create.palettes/limestone_cobblestone_wall_from_limestone_cobblestone_stonecutting.json
8b1ef23c71f0088230dcdd12374494bfdf700409 data/create/advancements/recipes/create.palettes/limestone_pillar.json
acf08b6a32e3678d63443fdb97e7332e05eb61f6 data/create/advancements/recipes/create.palettes/limestone_pillar.json
d040f53dfb09a29c39d534d3595e35d058fe5557 data/create/advancements/recipes/create.palettes/limestone_pillar_from_limestone_stonecutting.json
3ee8ab0478344042136058be6cf870289c096bdd data/create/advancements/recipes/create.palettes/mossy_andesite_from_andesite_stonecutting.json
c427e2626e468abee6fb4de83bf76f2d3c051449 data/create/advancements/recipes/create.palettes/mossy_dark_scoria_from_dark_scoria_stonecutting.json
@ -2297,6 +2305,7 @@ e46847d02ab7bfb2bc1da1a4ad4b7b54a3a28559 data/create/advancements/recipes/create
75480d0c13a80d9edf93a0eff947e5165db011c1 data/create/advancements/recipes/create.palettes/polished_weathered_limestone_stairs_from_polished_weathered_limestone_stonecutting.json
7b4b27211174e774169132a50da7bfd63ff28b30 data/create/advancements/recipes/create.palettes/polished_weathered_limestone_wall.json
81a759d9b069faedee49107642d947ea1bf1ac6c data/create/advancements/recipes/create.palettes/polished_weathered_limestone_wall_from_polished_weathered_limestone_stonecutting.json
28c7dd5fb1594295f977eff41ac677aab9660831 data/create/advancements/recipes/create.palettes/scoria.json
874023eabafb85aefacc86f395c5d4ef0cc9cfac data/create/advancements/recipes/create.palettes/scoria_bricks_from_scoria_stonecutting.json
a9969fd00f8cba428715d27a8ab6af6ba6473c8a data/create/advancements/recipes/create.palettes/scoria_bricks_slab.json
1d129bb8d359de50344dcb46f77899b0651d7817 data/create/advancements/recipes/create.palettes/scoria_bricks_slab_from_scoria_bricks_stonecutting.json
@ -2311,7 +2320,7 @@ dc5df4f4feddc24a7c78b25b6ed3e7ed458342f1 data/create/advancements/recipes/create
b852a9a59499c113f387ac06fdb27d3d455f18e3 data/create/advancements/recipes/create.palettes/scoria_cobblestone_stairs_from_scoria_cobblestone_stonecutting.json
a43d45efa0fb0d3eaace93c18d80a14d4dcddf38 data/create/advancements/recipes/create.palettes/scoria_cobblestone_wall.json
e340721aa78f260c2666214aa149241a37de216e data/create/advancements/recipes/create.palettes/scoria_cobblestone_wall_from_scoria_cobblestone_stonecutting.json
53cc5b006a19158e04094308accb66a7c35d2b26 data/create/advancements/recipes/create.palettes/scoria_pillar.json
68fc67ead3fd31885b30a5cf3e71dd33fb040634 data/create/advancements/recipes/create.palettes/scoria_pillar.json
53712a9ae59976dece952bea7ecaf73b679448f0 data/create/advancements/recipes/create.palettes/scoria_pillar_from_scoria_stonecutting.json
6b148def2f8789f9ff1d41bb71ab3608438a7207 data/create/advancements/recipes/create.palettes/smelting/dolomite.json
070720cc271767b26ad51fa089b4cf2a64d309be data/create/advancements/recipes/create.palettes/smelting/gabbro.json
@ -2326,6 +2335,7 @@ d40c7ce6b79630ace624d17b92667286998d93bc data/create/advancements/recipes/create
cd5ee73117872ee98434be1d24b4f271f7e94a48 data/create/advancements/recipes/create.palettes/vertical_framed_glass_pane.json
f26d1a1ee183b1b19d018fbdefc70f0bf29b41d0 data/create/advancements/recipes/create.palettes/warped_window.json
faf33c9c630eecab88bb969e3b9f7fd9e9f6ccf6 data/create/advancements/recipes/create.palettes/warped_window_pane.json
5b3447ec4802fb27f1ee9a3b1bbe1936fac48fb3 data/create/advancements/recipes/create.palettes/weathered_limestone.json
ef0d351d13f7e9c633581b537c59bddc1fa4c3a4 data/create/advancements/recipes/create.palettes/weathered_limestone_bricks_from_weathered_limestone_stonecutting.json
1c931e15af3e5b5f78a0a62b8c159fdf9f0d7f3e data/create/advancements/recipes/create.palettes/weathered_limestone_bricks_slab.json
bba639941526cc23570e328e0b5e2a5545667219 data/create/advancements/recipes/create.palettes/weathered_limestone_bricks_slab_from_weathered_limestone_bricks_stonecutting.json
@ -2340,7 +2350,7 @@ b77c5aecd0b6dd37a0c69431ab7a4a40fe0770eb data/create/advancements/recipes/create
8ea05c6cdb313ff395d1f21cfb40e2d939dadf20 data/create/advancements/recipes/create.palettes/weathered_limestone_cobblestone_stairs_from_weathered_limestone_cobblestone_stonecutting.json
4d838d8ceaf207a59554444d82b80c31807341bc data/create/advancements/recipes/create.palettes/weathered_limestone_cobblestone_wall.json
e548127075559307b767b802f4809ed52eedd543 data/create/advancements/recipes/create.palettes/weathered_limestone_cobblestone_wall_from_weathered_limestone_cobblestone_stonecutting.json
23ba836640a4d543db6f1cb72cc86a6543fe2fbe data/create/advancements/recipes/create.palettes/weathered_limestone_pillar.json
efab7b7f3829998a91fc506e4be3b6345f5ca168 data/create/advancements/recipes/create.palettes/weathered_limestone_pillar.json
9790a16fd56e47cb5abbfad4062672303c224d9f data/create/advancements/recipes/create.palettes/weathered_limestone_pillar_from_weathered_limestone_stonecutting.json
e00155bcd00f50750e2cc4d6aa30c2f2d6e62922 data/create/advancements/recipes/decorations/smelting/glass_pane_from_framed_glass_pane.json
bf9131527df4ad259b5a509753ba66417d764da2 data/create/advancements/recipes/decorations/smelting/glass_pane_from_horizontal_framed_glass_pane.json
@ -2447,7 +2457,7 @@ d370ee874b5b6b98e9a8c368218fe61f644d956d data/create/loot_tables/blocks/cuckoo_c
fe24fd296812fea3f838defa2ca6270523d9d48e data/create/loot_tables/blocks/cyan_valve_handle.json
fd309e1d39dcbcb25c3361edecd8c9afa0f847d0 data/create/loot_tables/blocks/dark_oak_window.json
58e6307ba0efa65a0715662a391fe7dc6fba0c68 data/create/loot_tables/blocks/dark_oak_window_pane.json
7a40002e4c05f6456b52558b9ee9607cfc868a69 data/create/loot_tables/blocks/dark_scoria.json
6769787b0c7a8d2762bae1c4826275bde8647b4e data/create/loot_tables/blocks/dark_scoria.json
502160551afd210c68582a1dfd41a2df720f53a1 data/create/loot_tables/blocks/dark_scoria_bricks.json
d37adba01cd1220e265dbdc025b3f8d01b992289 data/create/loot_tables/blocks/dark_scoria_bricks_slab.json
265bb133af68497d9b4ba4bd418a198506caa45b data/create/loot_tables/blocks/dark_scoria_bricks_stairs.json
@ -2468,7 +2478,7 @@ bdaba62199f7a65e1149b742aaaf0c23a1e149b0 data/create/loot_tables/blocks/diorite_
5141eec8eebed0feec906618dd3474ea402fbf28 data/create/loot_tables/blocks/diorite_cobblestone_stairs.json
f3c963cfd51069876140373f410e868706744e9b data/create/loot_tables/blocks/diorite_cobblestone_wall.json
fdcf47cddebca81730ac122925b01daeddf9233d data/create/loot_tables/blocks/diorite_pillar.json
7aa075c7fbe97447422bfcb95afb3bbe3b26301c data/create/loot_tables/blocks/dolomite.json
0be81285de44699dabb2c1e046ae109b2e39a4e9 data/create/loot_tables/blocks/dolomite.json
7ecdbfa3ebfc6865833bafed06ed7cd6eef58345 data/create/loot_tables/blocks/dolomite_bricks.json
ecc855c3ce298855038eb7b53137cab519bca55a data/create/loot_tables/blocks/dolomite_bricks_slab.json
699815e110c76bcb793efdfedcb8ac3a5b9b7131 data/create/loot_tables/blocks/dolomite_bricks_stairs.json
@ -2524,7 +2534,7 @@ f37526c092c645045c22674dea6c7b1ec503c9c3 data/create/loot_tables/blocks/flywheel
ce0bb978b11935bc2d1218445f8ab18099af6b8a data/create/loot_tables/blocks/framed_glass.json
89bd90ecd7a1ce1f75bd873989cc58a84c8dcef9 data/create/loot_tables/blocks/framed_glass_pane.json
4063880eda871fe63a4eb549a19daecabce849e5 data/create/loot_tables/blocks/furnace_engine.json
1070cba1c0f46cf7ebe31089f35333f5eadda6e4 data/create/loot_tables/blocks/gabbro.json
88b3438e50322b731cdd8589e36a9ea497cfe56e data/create/loot_tables/blocks/gabbro.json
0356e003d8890d31b89d0ad98e32aae892da71f9 data/create/loot_tables/blocks/gabbro_bricks.json
bd93e42ebca985b8aeeaf0ea5fb736d496183615 data/create/loot_tables/blocks/gabbro_bricks_slab.json
e51893e1601c470da466b35b17251238e15d0361 data/create/loot_tables/blocks/gabbro_bricks_stairs.json
@ -2581,7 +2591,7 @@ b403848d3a4b4ad7a048e70c21e200e40d0c67e3 data/create/loot_tables/blocks/light_bl
f7893090c6ecb4862c90c408b7f9ce8316f8b608 data/create/loot_tables/blocks/lime_seat.json
cae6d16c8967164698efbce3b91018a8e79a81e9 data/create/loot_tables/blocks/lime_valve_handle.json
7dfd638cc6f0d22bbc8fcbdb7212a3bfc8c85223 data/create/loot_tables/blocks/limesand.json
9d585f677a32a2336df5f17b5b389cdee867939f data/create/loot_tables/blocks/limestone.json
d476eed7b5f0c7438d2e517fc60cd23f19234056 data/create/loot_tables/blocks/limestone.json
57134f7d3d32fc1c48f2a20c4be84388587092bc data/create/loot_tables/blocks/limestone_bricks.json
1b59a36aa1a889c42d4b8b939f5eeee2967222d0 data/create/loot_tables/blocks/limestone_bricks_slab.json
41ed1d0750e8ddd7e7e75fd7e4cafde6346d1afe data/create/loot_tables/blocks/limestone_bricks_stairs.json
@ -2727,7 +2737,7 @@ aa6af37356d65105efab2503ffe75f778cfe873b data/create/loot_tables/blocks/rotation
30de11bec82606fead9d6bff7bba0232e97f1039 data/create/loot_tables/blocks/sail_frame.json
069701cb804b6522c18624a0d4f3f949ff8b0281 data/create/loot_tables/blocks/schematic_table.json
a2b172dc749176d4df34729007019605fc6dd150 data/create/loot_tables/blocks/schematicannon.json
af1bbbb8236b4ab05a6a8edc6db960bc758cbdf3 data/create/loot_tables/blocks/scoria.json
5c1bd2b940fa04ab487155ca10c551dd9b0fbf37 data/create/loot_tables/blocks/scoria.json
bb670ac5dd2fa4c743bc268cd0547926eb6cdb68 data/create/loot_tables/blocks/scoria_bricks.json
a7217ea301a282d0ef52f2d8c06dd8683398408d data/create/loot_tables/blocks/scoria_bricks_slab.json
58a188f3ebfeb3d19323c3f8dfa3e020a7f6cdc4 data/create/loot_tables/blocks/scoria_bricks_stairs.json
@ -2759,7 +2769,7 @@ d0156602dd5f4a274c293df67e19374820c72890 data/create/loot_tables/blocks/vertical
1afc5ede08e72221e33910603fa7acd0b3c7a2ee data/create/loot_tables/blocks/warped_window.json
f334fd2b9a92b0646674239e7e34e142fe2c5fad data/create/loot_tables/blocks/warped_window_pane.json
2883c63ceb1273009dbf91cb0693756cadf79a1a data/create/loot_tables/blocks/water_wheel.json
611d6195db52c074de484ec52d7ac9eb96b4ff10 data/create/loot_tables/blocks/weathered_limestone.json
6cbc693f915f409bc21c6084a4f75071bd660f7b data/create/loot_tables/blocks/weathered_limestone.json
c1f379baad36a20fc767be094db10480a0378184 data/create/loot_tables/blocks/weathered_limestone_bricks.json
43be7e49b9a8a75077066aa824a0f784aa741683 data/create/loot_tables/blocks/weathered_limestone_bricks_slab.json
c2a62f12680d04ed4f586c501bb026e367243dd2 data/create/loot_tables/blocks/weathered_limestone_bricks_stairs.json
@ -2782,6 +2792,7 @@ e3969f1c5966c4992b3280a06e1d6c5000c37df5 data/create/loot_tables/blocks/weighted
37248ca92d474e440b91c27e3c8e78e568328100 data/create/loot_tables/blocks/zinc_ore.json
b65bac8bc2fbfd476040c1aab1c0588b8bd59ebe data/create/recipes/acacia_window.json
35b4da9c14da60584c32e959efc2223f64bb3ec2 data/create/recipes/acacia_window_pane.json
57fc55848415db3e9b74e2cc2f6dacfb1b13a6cc data/create/recipes/andesite.json
96bb0bceb7798c96d5cf9b9c24b8ef822080cb1e data/create/recipes/andesite_bricks_from_andesite_stonecutting.json
01867b07039615dc69bad1b9fd217a1d86e69062 data/create/recipes/andesite_bricks_slab.json
376ada0e08cc797c705c22ec35fe54baa5f24efe data/create/recipes/andesite_bricks_slab_from_andesite_bricks_stonecutting.json
@ -3102,6 +3113,7 @@ a022f2d541f04a9e2bed6b72af4e74703076fcbe data/create/recipes/cutting/warped_hyph
1bd01df5540df7db06afde28a3f9ebe4d25e4001 data/create/recipes/cutting/warped_stem.json
f2c317e03ac4d42fb631e1625607061e10c480fe data/create/recipes/dark_oak_window.json
d9dbae6e237eb38e53a619a0f1b339fca7c59b4d data/create/recipes/dark_oak_window_pane.json
2ff8ac7eaabef52dcb173d7af388c28307559aaa data/create/recipes/dark_scoria.json
55596a590962e3ddd40949917661f0bd94408274 data/create/recipes/dark_scoria_bricks_from_dark_scoria_stonecutting.json
2489fc29c47d3c9cb63f5f2f09dc79ea1ca1728e data/create/recipes/dark_scoria_bricks_slab.json
86f4d54ebcc5bc8786c72167395d8efee833744c data/create/recipes/dark_scoria_bricks_slab_from_dark_scoria_bricks_stonecutting.json
@ -3118,6 +3130,7 @@ f3a72b45daef00035ecb17b9cd7f8985a5f9e9ef data/create/recipes/dark_scoria_cobbles
0f2c14d40ed9013d45e331000ea03d39430f9d22 data/create/recipes/dark_scoria_cobblestone_wall_from_dark_scoria_cobblestone_stonecutting.json
31b7e65165cb0dbcd95362a81905b19fe4282cf3 data/create/recipes/dark_scoria_pillar.json
681f45f03b15dc1a8a72cf72042e725d3f0cc7ef data/create/recipes/dark_scoria_pillar_from_dark_scoria_stonecutting.json
0871ced2a434838e2db8f3df85af84b0cb4e40ad data/create/recipes/diorite.json
25c0fe29d1c2cedcaf21fac6cdfcce45dbf810bf data/create/recipes/diorite_bricks_from_diorite_stonecutting.json
ff4a8687bdff339a10e0b813788bca272332abd9 data/create/recipes/diorite_bricks_slab.json
7c49a389f9222fdfd6653d9fbcb1ca05bf207aa8 data/create/recipes/diorite_bricks_slab_from_diorite_bricks_stonecutting.json
@ -3134,6 +3147,7 @@ f764471aab017775e0d7a6d43a9e36b186db3ac2 data/create/recipes/diorite_cobblestone
d3628d5ce836d3b9072be3d4cf30416146cccad2 data/create/recipes/diorite_cobblestone_wall_from_diorite_cobblestone_stonecutting.json
d69d767a77ae62f8e53342dffda4c627906439d7 data/create/recipes/diorite_pillar.json
3019172274fdfcc606ad0f5569db433913231c28 data/create/recipes/diorite_pillar_from_diorite_stonecutting.json
2f1bf27611c640ec454be0e73ed75f596a4f1add data/create/recipes/dolomite.json
6ee0f10522f4acfe554e4743fa2ba1d8297a12f2 data/create/recipes/dolomite_bricks_from_dolomite_stonecutting.json
88a9b8e89e67455a9c4f1c3dbff813a3c3bd1609 data/create/recipes/dolomite_bricks_slab.json
3adfb9924ada35d58275533425802b4829f058ac data/create/recipes/dolomite_bricks_slab_from_dolomite_bricks_stonecutting.json
@ -3229,6 +3243,7 @@ c83e77a9799b6ca34dd73aa76b56159f2103c48c data/create/recipes/filling/milk_bucket
fb8e4378cd2240644a4b5c0d06e27ad772ec7695 data/create/recipes/filling/sweet_roll.json
5b8bbde7f8b270ab75fac18d6858f2fadbc0efa3 data/create/recipes/framed_glass_from_glass_colorless_stonecutting.json
d697de0c9b706ca4e18da7a2d769e7e5fe8d769d data/create/recipes/framed_glass_pane.json
147e7a160b82c8128f8fa7c3c6e7f7d652b89a36 data/create/recipes/gabbro.json
a0dae50faaa1b7142bb4309675e3084c68daa547 data/create/recipes/gabbro_bricks_from_gabbro_stonecutting.json
a19f047fa8507e994eb026795c86bc10ff5c373b data/create/recipes/gabbro_bricks_slab.json
84d83643f7987864eca0e2ca7cda4330ad9f1f86 data/create/recipes/gabbro_bricks_slab_from_gabbro_bricks_stonecutting.json
@ -3245,6 +3260,7 @@ f7407fd04cfe7558d53c44cb33dfd8ff8a736ae3 data/create/recipes/gabbro_cobblestone_
8171880f4374f9102949b85e9a17e0b313caf3a6 data/create/recipes/gabbro_cobblestone_wall_from_gabbro_cobblestone_stonecutting.json
6e52667c2f9ec62a95ba27676fdc07a8222f1746 data/create/recipes/gabbro_pillar.json
da3743119130ef0946b05b21a84c2fe5926dccd5 data/create/recipes/gabbro_pillar_from_gabbro_stonecutting.json
dc21523e591068eb5df7b287c9eef7b773b7d5d0 data/create/recipes/granite.json
5664bad03fce4a4724e8fd21c9c02ca6ae900df9 data/create/recipes/granite_bricks_from_granite_stonecutting.json
1c5265828318670a11bd1e439b6a6005edb37487 data/create/recipes/granite_bricks_slab.json
0f460bda24ff799a9ef948933cfb50ef038739d4 data/create/recipes/granite_bricks_slab_from_granite_bricks_stonecutting.json
@ -3274,6 +3290,7 @@ b49c314e171f31a39f38aabad767d8d3be613602 data/create/recipes/layered_gabbro_from
9712031277020c39e8e643690a6a968c5e275a75 data/create/recipes/layered_limestone_from_limestone_stonecutting.json
fdfbe941eb56a98c3d28639154b7bcd4dcc66dfa data/create/recipes/layered_scoria_from_scoria_stonecutting.json
cc070e83594b20cf697aa5dbb8c4e09dbf576d00 data/create/recipes/layered_weathered_limestone_from_weathered_limestone_stonecutting.json
90253fc317a2551c50da7693df4a60e8543d2d64 data/create/recipes/limestone.json
3b43347da62a69c6e76e6a0261f840f46ff90038 data/create/recipes/limestone_bricks_from_limestone_stonecutting.json
aed4b037af6921e9337213dc09a215ab7a18adde data/create/recipes/limestone_bricks_slab.json
7222e1f13c6aec69ea37c84b4aca3e2322ef00d2 data/create/recipes/limestone_bricks_slab_from_limestone_bricks_stonecutting.json
@ -3443,7 +3460,7 @@ f2a140cbaddefd387fd94f0ce94df763a585dd4f data/create/recipes/paved_weathered_lim
9f02f552173ae1c85750bb16aa6bbbfb87a5a7f1 data/create/recipes/paved_weathered_limestone_stairs_from_paved_weathered_limestone_stonecutting.json
cc4a5a893b10ffdfcc10085323d89d34a1b8f122 data/create/recipes/paved_weathered_limestone_wall.json
d996f6505433a74cd8bdab04c0e0bac1b9a2da16 data/create/recipes/paved_weathered_limestone_wall_from_paved_weathered_limestone_stonecutting.json
c83e29f260eee9844c85995d45bedef6100cb91d data/create/recipes/polished_dark_scoria.json
c32e1418b17011c8c423d44ee20f2b86e82e7626 data/create/recipes/polished_dark_scoria.json
753c85bfb84a5d31f9670478042321702a589dc8 data/create/recipes/polished_dark_scoria_from_dark_scoria_stonecutting.json
d3c78c504672fec3316b206505c2cb5fc8daf822 data/create/recipes/polished_dark_scoria_slab.json
bcc5a7325b7f7110e6b382e7ad60fc547222d3ad data/create/recipes/polished_dark_scoria_slab_from_polished_dark_scoria_stonecutting.json
@ -3451,7 +3468,7 @@ c7d7e5f39099a71482cdfbebe1ef2dfd508ae768 data/create/recipes/polished_dark_scori
364d77f01b380bbb0036810f6e0df09773ea8e1c data/create/recipes/polished_dark_scoria_stairs_from_polished_dark_scoria_stonecutting.json
396b6c97b5e7f608b293dee51be97717c3430bc4 data/create/recipes/polished_dark_scoria_wall.json
62b0769e0208831db822f6d2b986fff6aee60729 data/create/recipes/polished_dark_scoria_wall_from_polished_dark_scoria_stonecutting.json
53930b3b32b076c9786e5c61d8cc7fe70a47fed7 data/create/recipes/polished_dolomite.json
a1561acc26948db5cffc041d85b1d26204754caf data/create/recipes/polished_dolomite.json
da91fd1ccaac64f7ef9737f3c773490d0c0b10d1 data/create/recipes/polished_dolomite_from_dolomite_stonecutting.json
75288e75b604eacfbc19cb51cb4d4759bdeaafa5 data/create/recipes/polished_dolomite_slab.json
9a89eaf5f00d8fb10297de61248f8d11dded8c4b data/create/recipes/polished_dolomite_slab_from_polished_dolomite_stonecutting.json
@ -3459,7 +3476,7 @@ da91fd1ccaac64f7ef9737f3c773490d0c0b10d1 data/create/recipes/polished_dolomite_f
e2dce404e4bcde076615ed0d0cf6fab769d441d5 data/create/recipes/polished_dolomite_stairs_from_polished_dolomite_stonecutting.json
8f2f4643886d166609b198704dcadb5e87b6323e data/create/recipes/polished_dolomite_wall.json
3b5d553e408a8b6385932e2a8082fcb5bdead0d1 data/create/recipes/polished_dolomite_wall_from_polished_dolomite_stonecutting.json
d9d2b6f6f4c8223c4cfc6258ba9013463691d88c data/create/recipes/polished_gabbro.json
5873547a8561849a73c0d2cca3faba3e8b65b33d data/create/recipes/polished_gabbro.json
ba3e1444b9d1804411cc9c7536c657806dc37c1d data/create/recipes/polished_gabbro_from_gabbro_stonecutting.json
b7d29a29fde4868b4ceef1437e5d00975068bc58 data/create/recipes/polished_gabbro_slab.json
f7a62c1edc74e54fc0c747f23d7da182d49ef7b6 data/create/recipes/polished_gabbro_slab_from_polished_gabbro_stonecutting.json
@ -3467,7 +3484,7 @@ f7a62c1edc74e54fc0c747f23d7da182d49ef7b6 data/create/recipes/polished_gabbro_sla
7df6fd466badaa3cef5e2ad0e78bbb3b6429805e data/create/recipes/polished_gabbro_stairs_from_polished_gabbro_stonecutting.json
ec70334e13e05cff7e04e7dc6b23be273c235e50 data/create/recipes/polished_gabbro_wall.json
5176a8fe5a48592c7b487518a57c962c24e3e751 data/create/recipes/polished_gabbro_wall_from_polished_gabbro_stonecutting.json
bb7d651a6c79bd97390c7b1743c4fe58c9973c39 data/create/recipes/polished_limestone.json
59a01eb264c302fe455639bcafa4afb97de2379e data/create/recipes/polished_limestone.json
0e88c98c9ef0d15523b23b00f8afde71d9d8e3e9 data/create/recipes/polished_limestone_from_limestone_stonecutting.json
135fd40e291c7cfdc73c14496654008da9dd797d data/create/recipes/polished_limestone_slab.json
4ce225832ab45daf6b5bc013c6f8762fdbe9ff0f data/create/recipes/polished_limestone_slab_from_polished_limestone_stonecutting.json
@ -3475,7 +3492,7 @@ fee3d0ec8d4f27d82acd5d0e3a2a142900e18be3 data/create/recipes/polished_limestone_
6780c8bd8747ebb6db7e0adfc486ce00e7e2cf26 data/create/recipes/polished_limestone_stairs_from_polished_limestone_stonecutting.json
44b1f3873fe8150abbacab10ff3cc2033a01b4a0 data/create/recipes/polished_limestone_wall.json
d68a27e463d31ba5eed19181c0335824601b9e68 data/create/recipes/polished_limestone_wall_from_polished_limestone_stonecutting.json
300b9c979ac848fb6ae69eeb6e89c9e22056c562 data/create/recipes/polished_scoria.json
82b5b5fc1d2f789b48a48a7dc846aeb505b0c3c1 data/create/recipes/polished_scoria.json
9d6926822ea6f2bb38ba55204278fe82fd453d16 data/create/recipes/polished_scoria_from_scoria_stonecutting.json
814efd67d3f061d0c0ba104993c868e075a4fd3e data/create/recipes/polished_scoria_slab.json
8696f262927ae55ce72af1a34cae68fd6ccc4050 data/create/recipes/polished_scoria_slab_from_polished_scoria_stonecutting.json
@ -3483,7 +3500,7 @@ efe648aa4fd0f22faa78c016dbe2d083462e1ad6 data/create/recipes/polished_scoria_sta
ba6dd9ad0c69b088c1a9e33000bd5b9bcedb0ca0 data/create/recipes/polished_scoria_stairs_from_polished_scoria_stonecutting.json
8319042a131a9dcabae016009b807b91c491f8d3 data/create/recipes/polished_scoria_wall.json
bc9a83e7793768723031ff14269e43c83687b9f3 data/create/recipes/polished_scoria_wall_from_polished_scoria_stonecutting.json
31a0826653da3e752da8507a46b16dc17334693b data/create/recipes/polished_weathered_limestone.json
d9d188d55d9bb94bceaad8de3ccb02532b021576 data/create/recipes/polished_weathered_limestone.json
73b468de08f3e0542b7020129faff3a40b3fee67 data/create/recipes/polished_weathered_limestone_from_weathered_limestone_stonecutting.json
c0924d72a856c3182b89996a6ceaffd56930c455 data/create/recipes/polished_weathered_limestone_slab.json
1f5503d22859a08eef824d33f6ed48335f66c423 data/create/recipes/polished_weathered_limestone_slab_from_polished_weathered_limestone_stonecutting.json
@ -3499,6 +3516,7 @@ a104ef6eb8872a40ea7b2ef67ae54cec943162f0 data/create/recipes/pressing/iron_ingot
654e274b07af172c22838d47e0974367c20101d4 data/create/recipes/pressing/path.json
bd57ccc8eb4357b4a5af021db7b806b514cd2558 data/create/recipes/pressing/sugar_cane.json
141173778757d87e7f2e9466bdab6ff1263c8e98 data/create/recipes/sandpaper_polishing/rose_quartz.json
5ab9c8271a9e1d4a863940aeafd1f8816cb37a29 data/create/recipes/scoria.json
d59c68621c78ff5d2c51be4440dea603480efed8 data/create/recipes/scoria_bricks_from_scoria_stonecutting.json
a7a28cf77955c2b4ed3687205dd24162e461aa30 data/create/recipes/scoria_bricks_slab.json
0577ffde98e7a027b21c430cd71cdafdd3cee3a3 data/create/recipes/scoria_bricks_slab_from_scoria_bricks_stonecutting.json
@ -3629,6 +3647,7 @@ e2c1774577aeb0756fb1d092245d9d77e40ba5f8 data/create/recipes/splashing/yellow_co
dc6093427210bd7034a0e2184f6a1630c7b33b3e data/create/recipes/vertical_framed_glass_pane.json
40ec72d571002206c276aec5de72459155e043ce data/create/recipes/warped_window.json
8f4b0a3cfb0073f1414bf18c0d4e5e751c4a9185 data/create/recipes/warped_window_pane.json
e483f41ab4e959bda4d88c23817913843d0fbef6 data/create/recipes/weathered_limestone.json
f75f25d3259dd51c29bee6ada2a4540a7a2bbeab data/create/recipes/weathered_limestone_bricks_from_weathered_limestone_stonecutting.json
f58ef5eb552fc7dcd89f30aa4231286ecef5e00a data/create/recipes/weathered_limestone_bricks_slab.json
ca9b163b3aaa526d6c3b070c2a7e50a56a38c6f4 data/create/recipes/weathered_limestone_bricks_slab_from_weathered_limestone_bricks_stonecutting.json
@ -3707,6 +3726,7 @@ f6c8f34ceb475546dba5cc6ff288863ea795d20b data/forge/tags/items/storage_blocks/co
0d188ad2c33d10ee8f0d455c4e63a4460a8302fb data/minecraft/tags/blocks/stairs.json
92584f914c53e00c111f9ff5e3894e2e3594946b data/minecraft/tags/blocks/walls.json
09d26bcd0f94459f945219997277c4fbf14adeb7 data/minecraft/tags/fluids/water.json
49cadea86f6b63d5065b859a0d0e7ad772cf51d6 data/minecraft/tags/items/piglin_loved.json
29e6f7e3d4be9a9b0af1fca5d32fa55e29905ce2 data/minecraft/tags/items/slabs.json
0d188ad2c33d10ee8f0d455c4e63a4460a8302fb data/minecraft/tags/items/stairs.json
92584f914c53e00c111f9ff5e3894e2e3594946b data/minecraft/tags/items/walls.json

View file

@ -469,6 +469,7 @@
"item.create.integrated_circuit": "\u0287\u0131n\u0254\u0279\u0131\u0186 p\u01DD\u0287\u0250\u0279b\u01DD\u0287uI",
"item.create.iron_sheet": "\u0287\u01DD\u01DD\u0265S uo\u0279I",
"item.create.lapis_sheet": "\u0287\u01DD\u01DD\u0265S s\u0131d\u0250\uA780",
"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.polished_rose_quartz": "z\u0287\u0279\u0250n\u1F49 \u01DDso\u1D1A p\u01DD\u0265s\u0131\u05DFo\u0500",

View file

@ -475,6 +475,7 @@
"item.create.integrated_circuit": "Integrated Circuit",
"item.create.iron_sheet": "Iron Sheet",
"item.create.lapis_sheet": "Lapis Sheet",
"item.create.linked_controller": "Linked Controller",
"item.create.minecart_contraption": "Minecart Contraption",
"item.create.minecart_coupling": "Minecart Coupling",
"item.create.polished_rose_quartz": "Polished Rose Quartz",
@ -1105,6 +1106,12 @@
"create.tooltip.chute.fans_pull_down": "Fans pull from Below",
"create.tooltip.chute.contains": "Contains: %1$s x%2$s",
"create.linked_controller.bind_mode": "Bind mode active",
"create.linked_controller.press_keybind": "Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "Keybind: %1$s, Freq. #2",
"create.hint.hose_pulley.title": "Bottomless Supply",
"create.hint.hose_pulley": "The targeted body of fluid is considered infinite.",
"create.hint.mechanical_arm_no_targets.title": "No Targets",
@ -1136,28 +1143,33 @@
"_": "->------------------------] Subtitles [------------------------<-",
"create.subtitle.cogs": "Cogwheels rumble",
"create.subtitle.slime_added": "Slime squishes",
"create.subtitle.saw_idle": "Mechanical Saw turns",
"create.subtitle.contraption_disassemble": "Contraption stops",
"create.subtitle.wrench_rotate": "Wrench used",
"create.subtitle.mixing": "Mixing Noises",
"create.subtitle.mechanical_press_activation_belt": "Mechanical Press bonks",
"create.subtitle.worldshaper_place": "Worldshaper zaps",
"create.subtitle.deployer_polish": "Deployer applies polish",
"create.subtitle.depot_slide": "Item slides",
"create.subtitle.deny": "Declining boop",
"create.subtitle.saw_activate_stone": "Mechanical Saw activates",
"create.subtitle.blaze_munch": "Blaze Burner munches",
"create.subtitle.schematicannon_launch_block": "Schematicannon fires",
"create.subtitle.funnel_flap": "Funnel Flaps",
"create.subtitle.copper_armor_equip": "Diving equipment clinks",
"create.subtitle.schematicannon_finish": "Schematicannon dings",
"create.subtitle.scroll_value": "Scroll-input clicks",
"create.subtitle.crafter_craft": "Crafter crafts",
"create.subtitle.saw_process": "Mechanical Saw processes",
"create.subtitle.cranking": "Hand Crank turns",
"create.subtitle.wrench_remove": "Component breaks",
"create.subtitle.cogs": "Cogwheels rumble",
"create.subtitle.slime_added": "Slime squishes",
"create.subtitle.wrench_rotate": "Wrench used",
"create.subtitle.saw_activate_wood": "Mechanical Saw activates",
"create.subtitle.deployer_polish": "Deployer applies polish",
"create.subtitle.deny": "Declining boop",
"create.subtitle.controller_click": "Controller clicks",
"create.subtitle.schematicannon_launch_block": "Schematicannon fires",
"create.subtitle.copper_armor_equip": "Diving equipment clinks",
"create.subtitle.mechanical_press_activation": "Mechanical Press clangs",
"create.subtitle.contraption_assemble": "Contraption moves",
"create.subtitle.crafter_craft": "Crafter crafts",
"create.subtitle.cranking": "Hand Crank turns",
"create.subtitle.crafter_click": "Crafter clicks",
"create.subtitle.wrench_remove": "Component breaks",
"create.subtitle.depot_plop": "Item lands",
"create.subtitle.confirm": "Affirmative ding",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 942",
"_": "Missing Localizations: 953",
"_": "->------------------------] Game Elements [------------------------<-",
@ -475,6 +475,7 @@
"item.create.integrated_circuit": "Integrierter Schaltkreis",
"item.create.iron_sheet": "Eisenblech",
"item.create.lapis_sheet": "Lapislazuliblech",
"item.create.linked_controller": "UNLOCALIZED: Linked Controller",
"item.create.minecart_contraption": "Loren Vorrichtung",
"item.create.minecart_coupling": "Lorenkupplung",
"item.create.polished_rose_quartz": "Polierter Rosenquarz",
@ -1105,6 +1106,12 @@
"create.tooltip.chute.fans_pull_down": "Propeller ziehen von unterhalb",
"create.tooltip.chute.contains": "Enthält: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.hint.hose_pulley.title": "Endlose Versorgung",
"create.hint.hose_pulley": "Das angewählte Gewässer wird als unendlich betrachtet.",
"create.hint.mechanical_arm_no_targets.title": "Keine Ziele",
@ -1136,28 +1143,33 @@
"_": "->------------------------] Subtitles [------------------------<-",
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "Schleim matscht",
"create.subtitle.saw_idle": "UNLOCALIZED: Mechanical Saw turns",
"create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates",
"create.subtitle.blaze_munch": "Lohe kaut glücklich",
"create.subtitle.schematicannon_launch_block": "Bauplankanone schießt",
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
"create.subtitle.schematicannon_finish": "Bauplankanone endet",
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.saw_process": "UNLOCALIZED: Mechanical Saw processes",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "Schleim matscht",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.saw_activate_wood": "UNLOCALIZED: Mechanical Saw activates",
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.controller_click": "UNLOCALIZED: Controller clicks",
"create.subtitle.schematicannon_launch_block": "Bauplankanone schießt",
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
"create.subtitle.mechanical_press_activation": "Mechanische Presse wird aktiviert",
"create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.crafter_click": "UNLOCALIZED: Crafter clicks",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.depot_plop": "UNLOCALIZED: Item lands",
"create.subtitle.confirm": "UNLOCALIZED: Affirmative ding",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 643",
"_": "Missing Localizations: 654",
"_": "->------------------------] Game Elements [------------------------<-",
@ -475,6 +475,7 @@
"item.create.integrated_circuit": "Chip de circuito integrado",
"item.create.iron_sheet": "Lámina de hierro",
"item.create.lapis_sheet": "Lámina de lapislázuli",
"item.create.linked_controller": "UNLOCALIZED: Linked Controller",
"item.create.minecart_contraption": "Artilugio de vagoneta",
"item.create.minecart_coupling": "Acoplamiento de vagoneta",
"item.create.polished_rose_quartz": "Cuarzo rosado pulido",
@ -1105,6 +1106,12 @@
"create.tooltip.chute.fans_pull_down": "Los ventiladores tiran desde abajo",
"create.tooltip.chute.contains": "Contiene: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.hint.hose_pulley.title": "Suministro sin fondo",
"create.hint.hose_pulley": "La masa de fluido objetivo se considera infinita",
"create.hint.mechanical_arm_no_targets.title": "No hay objetivos",
@ -1136,28 +1143,33 @@
"_": "->------------------------] Subtitles [------------------------<-",
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "Slime aplastado",
"create.subtitle.saw_idle": "UNLOCALIZED: Mechanical Saw turns",
"create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates",
"create.subtitle.blaze_munch": "Blaze mastica felizmente",
"create.subtitle.schematicannon_launch_block": "Disparos de Schematicannon",
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
"create.subtitle.schematicannon_finish": "Acabados de Schematicannon",
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.saw_process": "UNLOCALIZED: Mechanical Saw processes",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "Slime aplastado",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.saw_activate_wood": "UNLOCALIZED: Mechanical Saw activates",
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.controller_click": "UNLOCALIZED: Controller clicks",
"create.subtitle.schematicannon_launch_block": "Disparos de Schematicannon",
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
"create.subtitle.mechanical_press_activation": "La Prensa Mecánica se activa",
"create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.crafter_click": "UNLOCALIZED: Crafter clicks",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.depot_plop": "UNLOCALIZED: Item lands",
"create.subtitle.confirm": "UNLOCALIZED: Affirmative ding",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1266",
"_": "Missing Localizations: 1277",
"_": "->------------------------] Game Elements [------------------------<-",
@ -475,6 +475,7 @@
"item.create.integrated_circuit": "Circuito Integrado",
"item.create.iron_sheet": "Lámina de Hierro",
"item.create.lapis_sheet": "Lámina de Lapislázuli",
"item.create.linked_controller": "UNLOCALIZED: Linked Controller",
"item.create.minecart_contraption": "Artefacto de Vagón",
"item.create.minecart_coupling": "Acoplamiento de Vagonetas",
"item.create.polished_rose_quartz": "Cuarzo Rosa Pulido",
@ -1105,6 +1106,12 @@
"create.tooltip.chute.fans_pull_down": "UNLOCALIZED: Fans pull from Below",
"create.tooltip.chute.contains": "UNLOCALIZED: Contains: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.hint.hose_pulley.title": "UNLOCALIZED: Bottomless Supply",
"create.hint.hose_pulley": "UNLOCALIZED: The targeted body of fluid is considered infinite.",
"create.hint.mechanical_arm_no_targets.title": "UNLOCALIZED: No Targets",
@ -1136,28 +1143,33 @@
"_": "->------------------------] Subtitles [------------------------<-",
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "UNLOCALIZED: Slime squishes",
"create.subtitle.saw_idle": "UNLOCALIZED: Mechanical Saw turns",
"create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates",
"create.subtitle.blaze_munch": "UNLOCALIZED: Blaze Burner munches",
"create.subtitle.schematicannon_launch_block": "UNLOCALIZED: Schematicannon fires",
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
"create.subtitle.schematicannon_finish": "UNLOCALIZED: Schematicannon dings",
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.saw_process": "UNLOCALIZED: Mechanical Saw processes",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "UNLOCALIZED: Slime squishes",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.saw_activate_wood": "UNLOCALIZED: Mechanical Saw activates",
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.controller_click": "UNLOCALIZED: Controller clicks",
"create.subtitle.schematicannon_launch_block": "UNLOCALIZED: Schematicannon fires",
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
"create.subtitle.mechanical_press_activation": "UNLOCALIZED: Mechanical Press clangs",
"create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.crafter_click": "UNLOCALIZED: Crafter clicks",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.depot_plop": "UNLOCALIZED: Item lands",
"create.subtitle.confirm": "UNLOCALIZED: Affirmative ding",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1194",
"_": "Missing Localizations: 1205",
"_": "->------------------------] Game Elements [------------------------<-",
@ -475,6 +475,7 @@
"item.create.integrated_circuit": "Circuit intégré",
"item.create.iron_sheet": "Plaque de Fer",
"item.create.lapis_sheet": "Feuille de lapis",
"item.create.linked_controller": "UNLOCALIZED: Linked Controller",
"item.create.minecart_contraption": "Engin de wagonnet",
"item.create.minecart_coupling": "Lien pour wagonnet",
"item.create.polished_rose_quartz": "Quartz rose poli",
@ -1105,6 +1106,12 @@
"create.tooltip.chute.fans_pull_down": "UNLOCALIZED: Fans pull from Below",
"create.tooltip.chute.contains": "UNLOCALIZED: Contains: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.hint.hose_pulley.title": "UNLOCALIZED: Bottomless Supply",
"create.hint.hose_pulley": "UNLOCALIZED: The targeted body of fluid is considered infinite.",
"create.hint.mechanical_arm_no_targets.title": "UNLOCALIZED: No Targets",
@ -1136,28 +1143,33 @@
"_": "->------------------------] Subtitles [------------------------<-",
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "Bruit de slime",
"create.subtitle.saw_idle": "UNLOCALIZED: Mechanical Saw turns",
"create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates",
"create.subtitle.blaze_munch": "UNLOCALIZED: Blaze Burner munches",
"create.subtitle.schematicannon_launch_block": "Tir de schémacanon",
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
"create.subtitle.schematicannon_finish": "Fin de schémacanon",
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.saw_process": "UNLOCALIZED: Mechanical Saw processes",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "Bruit de slime",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.saw_activate_wood": "UNLOCALIZED: Mechanical Saw activates",
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.controller_click": "UNLOCALIZED: Controller clicks",
"create.subtitle.schematicannon_launch_block": "Tir de schémacanon",
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
"create.subtitle.mechanical_press_activation": "Activation de la presse mechanique",
"create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.crafter_click": "UNLOCALIZED: Crafter clicks",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.depot_plop": "UNLOCALIZED: Item lands",
"create.subtitle.confirm": "UNLOCALIZED: Affirmative ding",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 660",
"_": "Missing Localizations: 671",
"_": "->------------------------] Game Elements [------------------------<-",
@ -475,6 +475,7 @@
"item.create.integrated_circuit": "Circuito integrato",
"item.create.iron_sheet": "Lamiera di ferro",
"item.create.lapis_sheet": "Lamiera di lapislazzuli",
"item.create.linked_controller": "UNLOCALIZED: Linked Controller",
"item.create.minecart_contraption": "Contrazione per carrello da miniera",
"item.create.minecart_coupling": "Aggancio per carrelli da miniera",
"item.create.polished_rose_quartz": "Quarzo rosa levigato",
@ -1105,6 +1106,12 @@
"create.tooltip.chute.fans_pull_down": "I ventilatori tirano da sotto",
"create.tooltip.chute.contains": "Contiene: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.hint.hose_pulley.title": "Buco senza fondo",
"create.hint.hose_pulley": "Il corpo fluido selezionato è considerato infinito.",
"create.hint.mechanical_arm_no_targets.title": "Nessun bersaglio",
@ -1136,28 +1143,33 @@
"_": "->------------------------] Subtitles [------------------------<-",
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "Slime schiacciato",
"create.subtitle.saw_idle": "UNLOCALIZED: Mechanical Saw turns",
"create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates",
"create.subtitle.blaze_munch": "Il blaze lo gusta felicemente",
"create.subtitle.schematicannon_launch_block": "Tiri del cannoneschematico",
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
"create.subtitle.schematicannon_finish": "Finiture cannoneschematico",
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.saw_process": "UNLOCALIZED: Mechanical Saw processes",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "Slime schiacciato",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.saw_activate_wood": "UNLOCALIZED: Mechanical Saw activates",
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.controller_click": "UNLOCALIZED: Controller clicks",
"create.subtitle.schematicannon_launch_block": "Tiri del cannoneschematico",
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
"create.subtitle.mechanical_press_activation": "Pressa meccanica attiva",
"create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.crafter_click": "UNLOCALIZED: Crafter clicks",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.depot_plop": "UNLOCALIZED: Item lands",
"create.subtitle.confirm": "UNLOCALIZED: Affirmative ding",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 24",
"_": "Missing Localizations: 35",
"_": "->------------------------] Game Elements [------------------------<-",
@ -475,6 +475,7 @@
"item.create.integrated_circuit": "集積回路",
"item.create.iron_sheet": "鉄板",
"item.create.lapis_sheet": "ラピスラズリ板",
"item.create.linked_controller": "UNLOCALIZED: Linked Controller",
"item.create.minecart_contraption": "からくり付きトロッコ",
"item.create.minecart_coupling": "トロッコ連結器",
"item.create.polished_rose_quartz": "磨かれたローズクォーツ",
@ -1105,6 +1106,12 @@
"create.tooltip.chute.fans_pull_down": "ファンが下から吸い込んでいます",
"create.tooltip.chute.contains": "内容物: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.hint.hose_pulley.title": "底なし搬出",
"create.hint.hose_pulley": "対象となる液体は無限とみなされています。",
"create.hint.mechanical_arm_no_targets.title": "ターゲットが見つかりません",
@ -1136,28 +1143,33 @@
"_": "->------------------------] Subtitles [------------------------<-",
"create.subtitle.cogs": "歯車がゴロゴロと鳴る",
"create.subtitle.slime_added": "スライムがぐしゃっとつぶれる",
"create.subtitle.saw_idle": "UNLOCALIZED: Mechanical Saw turns",
"create.subtitle.contraption_disassemble": "からくりが止まる",
"create.subtitle.wrench_rotate": "レンチを使う",
"create.subtitle.mixing": "混ぜる音",
"create.subtitle.mechanical_press_activation_belt": "メカニカルプレスがボンと鳴る",
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
"create.subtitle.depot_slide": "アイテムが滑る",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates",
"create.subtitle.blaze_munch": "ブレイズの咀嚼音",
"create.subtitle.schematicannon_launch_block": "概略図砲が発射する",
"create.subtitle.funnel_flap": "ファンネルがはためく",
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
"create.subtitle.schematicannon_finish": "概略図砲が作業を終える",
"create.subtitle.scroll_value": "スクロールのカチカチ音",
"create.subtitle.crafter_craft": "メカニカルクラフターがクラフトする",
"create.subtitle.saw_process": "UNLOCALIZED: Mechanical Saw processes",
"create.subtitle.cranking": "ハンドクランクが回る",
"create.subtitle.wrench_remove": "機械を壊す",
"create.subtitle.cogs": "歯車がゴロゴロと鳴る",
"create.subtitle.slime_added": "スライムがぐしゃっとつぶれる",
"create.subtitle.wrench_rotate": "レンチを使う",
"create.subtitle.saw_activate_wood": "UNLOCALIZED: Mechanical Saw activates",
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.controller_click": "UNLOCALIZED: Controller clicks",
"create.subtitle.schematicannon_launch_block": "概略図砲が発射する",
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
"create.subtitle.mechanical_press_activation": "メカニカルプレスがガーンと鳴る",
"create.subtitle.contraption_assemble": "からくりが動く",
"create.subtitle.crafter_craft": "メカニカルクラフターがクラフトする",
"create.subtitle.cranking": "ハンドクランクが回る",
"create.subtitle.crafter_click": "メカニカルクラフターのカチカチ音",
"create.subtitle.wrench_remove": "機械を壊す",
"create.subtitle.depot_plop": "デプロイヤーにアイテムが入れられる",
"create.subtitle.confirm": "UNLOCALIZED: Affirmative ding",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 713",
"_": "Missing Localizations: 724",
"_": "->------------------------] Game Elements [------------------------<-",
@ -475,6 +475,7 @@
"item.create.integrated_circuit": "집적 회로",
"item.create.iron_sheet": "철 판",
"item.create.lapis_sheet": "청금석 판",
"item.create.linked_controller": "UNLOCALIZED: Linked Controller",
"item.create.minecart_contraption": "광산 수레 장치",
"item.create.minecart_coupling": "광산 수레 커플링",
"item.create.polished_rose_quartz": "윤나는 장밋빛 석영",
@ -1105,6 +1106,12 @@
"create.tooltip.chute.fans_pull_down": "선풍기가 아래에서 당김",
"create.tooltip.chute.contains": "UNLOCALIZED: Contains: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.hint.hose_pulley.title": "UNLOCALIZED: Bottomless Supply",
"create.hint.hose_pulley": "UNLOCALIZED: The targeted body of fluid is considered infinite.",
"create.hint.mechanical_arm_no_targets.title": "목표 없음",
@ -1136,28 +1143,33 @@
"_": "->------------------------] Subtitles [------------------------<-",
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "슬라임이 철퍽거림",
"create.subtitle.saw_idle": "UNLOCALIZED: Mechanical Saw turns",
"create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates",
"create.subtitle.blaze_munch": "블레이즈가 행복하게 섭취함",
"create.subtitle.schematicannon_launch_block": "청사진 대포가 발포함",
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
"create.subtitle.schematicannon_finish": "청사진 대포가 끝남",
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.saw_process": "UNLOCALIZED: Mechanical Saw processes",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "슬라임이 철퍽거림",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.saw_activate_wood": "UNLOCALIZED: Mechanical Saw activates",
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.controller_click": "UNLOCALIZED: Controller clicks",
"create.subtitle.schematicannon_launch_block": "청사진 대포가 발포함",
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
"create.subtitle.mechanical_press_activation": "압착기가 가동됨",
"create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.crafter_click": "UNLOCALIZED: Crafter clicks",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.depot_plop": "UNLOCALIZED: Item lands",
"create.subtitle.confirm": "UNLOCALIZED: Affirmative ding",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1577",
"_": "Missing Localizations: 1588",
"_": "->------------------------] Game Elements [------------------------<-",
@ -475,6 +475,7 @@
"item.create.integrated_circuit": "UNLOCALIZED: Integrated Circuit",
"item.create.iron_sheet": "IJzeren Platen",
"item.create.lapis_sheet": "UNLOCALIZED: Lapis Sheet",
"item.create.linked_controller": "UNLOCALIZED: Linked Controller",
"item.create.minecart_contraption": "UNLOCALIZED: Minecart Contraption",
"item.create.minecart_coupling": "UNLOCALIZED: Minecart Coupling",
"item.create.polished_rose_quartz": "UNLOCALIZED: Polished Rose Quartz",
@ -1105,6 +1106,12 @@
"create.tooltip.chute.fans_pull_down": "UNLOCALIZED: Fans pull from Below",
"create.tooltip.chute.contains": "UNLOCALIZED: Contains: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.hint.hose_pulley.title": "UNLOCALIZED: Bottomless Supply",
"create.hint.hose_pulley": "UNLOCALIZED: The targeted body of fluid is considered infinite.",
"create.hint.mechanical_arm_no_targets.title": "UNLOCALIZED: No Targets",
@ -1136,28 +1143,33 @@
"_": "->------------------------] Subtitles [------------------------<-",
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "UNLOCALIZED: Slime squishes",
"create.subtitle.saw_idle": "UNLOCALIZED: Mechanical Saw turns",
"create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates",
"create.subtitle.blaze_munch": "UNLOCALIZED: Blaze Burner munches",
"create.subtitle.schematicannon_launch_block": "UNLOCALIZED: Schematicannon fires",
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
"create.subtitle.schematicannon_finish": "UNLOCALIZED: Schematicannon dings",
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.saw_process": "UNLOCALIZED: Mechanical Saw processes",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "UNLOCALIZED: Slime squishes",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.saw_activate_wood": "UNLOCALIZED: Mechanical Saw activates",
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.controller_click": "UNLOCALIZED: Controller clicks",
"create.subtitle.schematicannon_launch_block": "UNLOCALIZED: Schematicannon fires",
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
"create.subtitle.mechanical_press_activation": "UNLOCALIZED: Mechanical Press clangs",
"create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.crafter_click": "UNLOCALIZED: Crafter clicks",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.depot_plop": "UNLOCALIZED: Item lands",
"create.subtitle.confirm": "UNLOCALIZED: Affirmative ding",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 38",
"_": "Missing Localizations: 11",
"_": "->------------------------] Game Elements [------------------------<-",
@ -58,7 +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_backtank": "Miedziany zbiornik w plecaku",
"block.create.copper_block": "Blok miedzi",
"block.create.copper_casing": "Miedziana Obudowa",
"block.create.copper_ore": "Ruda miedzi",
@ -439,7 +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_backtank": "Miedziany zbiornik w plecaku",
"item.create.copper_ingot": "Sztabka miedzi",
"item.create.copper_nugget": "Bryłka miedzi",
"item.create.copper_sheet": "Arkusz miedzi",
@ -458,8 +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.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",
@ -475,6 +475,7 @@
"item.create.integrated_circuit": "Układ scalony",
"item.create.iron_sheet": "Arkusz żelaza",
"item.create.lapis_sheet": "Arkusz lazurytu",
"item.create.linked_controller": "UNLOCALIZED: Linked Controller",
"item.create.minecart_contraption": "Maszyna w wagoniku",
"item.create.minecart_coupling": "Łącznik wagoników",
"item.create.polished_rose_quartz": "Wypolerowany kwarc różowy",
@ -682,7 +683,7 @@
"create.recipe.fan_blasting.fan": "Wiatrak za lawą",
"create.recipe.pressing": "Tłoczenie",
"create.recipe.mixing": "Mieszanie",
"create.recipe.deploying": "UNLOCALIZED: Deploying",
"create.recipe.deploying": "Aplikowanie",
"create.recipe.automatic_shapeless": "Zautomatyzowanie nieokreślone konstruowanie",
"create.recipe.automatic_brewing": "Zautomatyzowane warzenie",
"create.recipe.packing": "Prasowanie",
@ -749,15 +750,15 @@
"create.orientation.alongX": "Wzdłuż X",
"create.gui.terrainzapper.title": "Ręczny kształter",
"create.gui.terrainzapper.searchDiagonal": "UNLOCALIZED: Follow Diagonals",
"create.gui.terrainzapper.searchFuzzy": "UNLOCALIZED: Ignore Material Borders",
"create.gui.terrainzapper.patternSection": "UNLOCALIZED: Pattern",
"create.gui.terrainzapper.pattern.solid": "UNLOCALIZED: Solid",
"create.gui.terrainzapper.pattern.checkered": "UNLOCALIZED: Checkerboard",
"create.gui.terrainzapper.pattern.inversecheckered": "UNLOCALIZED: Inverted Checkerboard",
"create.gui.terrainzapper.pattern.chance25": "UNLOCALIZED: 25% Roll",
"create.gui.terrainzapper.pattern.chance50": "UNLOCALIZED: 50% Roll",
"create.gui.terrainzapper.pattern.chance75": "UNLOCALIZED: 75% Roll",
"create.gui.terrainzapper.searchDiagonal": "Wzdłuż linii ukośnych",
"create.gui.terrainzapper.searchFuzzy": "Ignoruj krawędzie materiałów",
"create.gui.terrainzapper.patternSection": "Wzór",
"create.gui.terrainzapper.pattern.solid": "Ciągły",
"create.gui.terrainzapper.pattern.checkered": "Szachownica",
"create.gui.terrainzapper.pattern.inversecheckered": "Odrócona szachownica",
"create.gui.terrainzapper.pattern.chance25": "Obrót o 25%",
"create.gui.terrainzapper.pattern.chance50": "Obrót o 50%",
"create.gui.terrainzapper.pattern.chance75": "Obrót o 75%",
"create.gui.terrainzapper.placement": "Położenie",
"create.gui.terrainzapper.placement.merged": "Połączony",
"create.gui.terrainzapper.placement.attached": "Przyłączony",
@ -766,8 +767,8 @@
"create.gui.terrainzapper.brush.cuboid": "Prostopadłościan",
"create.gui.terrainzapper.brush.sphere": "Kula",
"create.gui.terrainzapper.brush.cylinder": "Walec",
"create.gui.terrainzapper.brush.surface": "UNLOCALIZED: Surface",
"create.gui.terrainzapper.brush.cluster": "UNLOCALIZED: Cluster",
"create.gui.terrainzapper.brush.surface": "Powierzchnia",
"create.gui.terrainzapper.brush.cluster": "Grupa",
"create.gui.terrainzapper.tool": "Narzędzie",
"create.gui.terrainzapper.tool.fill": "Wypełnianie",
"create.gui.terrainzapper.tool.place": "Stawianie",
@ -777,8 +778,8 @@
"create.gui.terrainzapper.tool.flatten": "Wypłaszczanie",
"create.terrainzapper.shiftRightClickToSet": "Shift+Prawe kliknięcie, aby wybrać kształt",
"create.terrainzapper.usingBlock": "UNLOCALIZED: Using: %1$s",
"create.terrainzapper.leftClickToSet": "UNLOCALIZED: Left-Click a Block to set Material",
"create.terrainzapper.usingBlock": "Używając: %1$s",
"create.terrainzapper.leftClickToSet": "Kliknij LPM na blok aby ustawić materiał",
"create.minecart_coupling.two_couplings_max": "Wagoniki nie mogą mieć więcej niż dwa łączniki każdy",
"create.minecart_coupling.unloaded": "Część twojego pociągu wydaje się być w niezaładowanych Chunkach.",
@ -1105,6 +1106,12 @@
"create.tooltip.chute.fans_pull_down": "Wiatraki ciągną od dołu",
"create.tooltip.chute.contains": "Zawiera: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.hint.hose_pulley.title": "Niewyczerpany zapas",
"create.hint.hose_pulley": "Wybrane zbiornik cieczy jest uznany za nieskończony",
"create.hint.mechanical_arm_no_targets.title": "Brak celi",
@ -1131,35 +1138,40 @@
"create.command.killTPSCommand.status.usage.1": "[Create]: Użyj \"/killtps start\", aby sztucznie spowolnić serwer\n",
"create.command.killTPSCommand.argument.tickTime": "tickTime",
"create.contraption.minecart_contraption_too_big": "UNLOCALIZED: This Cart Contraption seems too big to pick up",
"create.contraption.minecart_contraption_too_big": "Ta maszyna w wagoniku jest zbyt duża, aby ją podnieść",
"_": "->------------------------] Subtitles [------------------------<-",
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "Szlam plaska",
"create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.saw_idle": "UNLOCALIZED: Mechanical Saw turns",
"create.subtitle.contraption_disassemble": "Maszyna staje",
"create.subtitle.mixing": "Dźwięki mieszania",
"create.subtitle.mechanical_press_activation_belt": "Mechaniczna prasa stuka",
"create.subtitle.worldshaper_place": "Kształter strzela",
"create.subtitle.depot_slide": "Przedmiot ślizga się",
"create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates",
"create.subtitle.blaze_munch": "Płomyk szczęśliwie przeżuwa",
"create.subtitle.schematicannon_launch_block": "Schematoarmata strzela",
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
"create.subtitle.funnel_flap": "Lejek trzepocze",
"create.subtitle.schematicannon_finish": "Schematoarmata skończyła",
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
"create.subtitle.scroll_value": "Kliknięcie",
"create.subtitle.crafter_craft": "Mechaniczny stół rzemieślniczy konstruuje",
"create.subtitle.saw_process": "UNLOCALIZED: Mechanical Saw processes",
"create.subtitle.cranking": "Ręczna korba obraca się",
"create.subtitle.wrench_remove": "Komponent niszczy się",
"create.subtitle.cogs": "Koła zębate terkoczą",
"create.subtitle.slime_added": "Szlam plaska",
"create.subtitle.wrench_rotate": "Klucz skrzypi",
"create.subtitle.saw_activate_wood": "UNLOCALIZED: Mechanical Saw activates",
"create.subtitle.deployer_polish": "Aplikator poleruje",
"create.subtitle.deny": "Dźwięk odmowy",
"create.subtitle.controller_click": "UNLOCALIZED: Controller clicks",
"create.subtitle.schematicannon_launch_block": "Schematoarmata strzela",
"create.subtitle.copper_armor_equip": "Sprzęt do nurkowania pobrzękuje",
"create.subtitle.mechanical_press_activation": "Mechaniczna prasa się uruchamia",
"create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.crafter_click": "UNLOCALIZED: Crafter clicks",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.depot_plop": "UNLOCALIZED: Item lands",
"create.subtitle.confirm": "UNLOCALIZED: Affirmative ding",
"create.subtitle.contraption_assemble": "Maszyna przesuwa się",
"create.subtitle.crafter_click": "Mechaniczny stół rzemieślniczy stuka",
"create.subtitle.depot_plop": "Przedmiot ląduje",
"create.subtitle.confirm": "Dźwięk potwierdzenia",
"_": "->------------------------] Item Descriptions [------------------------<-",
@ -1538,11 +1550,11 @@
"create.ponder.blaze_burner.text_3": "Z użyciem płomiennego ciasta, palnik może uzyskać szczególnie wysoką temperaturę",
"create.ponder.blaze_burner.text_4": "Dostarczanie płomykowi przedmiotów może zostać zautomatyzowane z użyciem aplikatorów lub mechanicznych ramion",
"create.ponder.brass_funnel.header": "Mosiężny lejek",
"create.ponder.brass_funnel.text_1": "Andezytowe lejki mogą pobierać jedynie pojedyncze przedmioty",
"create.ponder.brass_funnel.text_2": "Mosiężne lejki mogą pobierać nawet pełne stosy",
"create.ponder.brass_funnel.header": "Mosiężny lej",
"create.ponder.brass_funnel.text_1": "Andezytowe leje mogą pobierać jedynie pojedyncze przedmioty",
"create.ponder.brass_funnel.text_2": "Mosiężne leje mogą pobierać nawet pełne stosy",
"create.ponder.brass_funnel.text_3": "Przewijanie na slocie filtrującym pozwala na precyzyjną kontrolę nad maksymalną wielkością stosu",
"create.ponder.brass_funnel.text_4": "Użycie przedmiotów patrząc na slot filtrujący spowoduje, że lejek będzie przesyłał tylko pasujące przedmioty",
"create.ponder.brass_funnel.text_4": "Użycie przedmiotu patrząc na slot filtrujący spowoduje, że lej będzie przesyłał tylko pasujące przedmioty",
"create.ponder.brass_tunnel.header": "Używanie mosiężnych tuneli",
"create.ponder.brass_tunnel.text_1": "Mosiężne tunele mogą być użyte do przykrycia Twoich taśmociągów",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1629",
"_": "Missing Localizations: 1640",
"_": "->------------------------] Game Elements [------------------------<-",
@ -475,6 +475,7 @@
"item.create.integrated_circuit": "UNLOCALIZED: Integrated Circuit",
"item.create.iron_sheet": "Placas de Ferro",
"item.create.lapis_sheet": "UNLOCALIZED: Lapis Sheet",
"item.create.linked_controller": "UNLOCALIZED: Linked Controller",
"item.create.minecart_contraption": "UNLOCALIZED: Minecart Contraption",
"item.create.minecart_coupling": "UNLOCALIZED: Minecart Coupling",
"item.create.polished_rose_quartz": "UNLOCALIZED: Polished Rose Quartz",
@ -1105,6 +1106,12 @@
"create.tooltip.chute.fans_pull_down": "UNLOCALIZED: Fans pull from Below",
"create.tooltip.chute.contains": "UNLOCALIZED: Contains: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.hint.hose_pulley.title": "UNLOCALIZED: Bottomless Supply",
"create.hint.hose_pulley": "UNLOCALIZED: The targeted body of fluid is considered infinite.",
"create.hint.mechanical_arm_no_targets.title": "UNLOCALIZED: No Targets",
@ -1136,28 +1143,33 @@
"_": "->------------------------] Subtitles [------------------------<-",
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "UNLOCALIZED: Slime squishes",
"create.subtitle.saw_idle": "UNLOCALIZED: Mechanical Saw turns",
"create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates",
"create.subtitle.blaze_munch": "UNLOCALIZED: Blaze Burner munches",
"create.subtitle.schematicannon_launch_block": "UNLOCALIZED: Schematicannon fires",
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
"create.subtitle.schematicannon_finish": "UNLOCALIZED: Schematicannon dings",
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.saw_process": "UNLOCALIZED: Mechanical Saw processes",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "UNLOCALIZED: Slime squishes",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.saw_activate_wood": "UNLOCALIZED: Mechanical Saw activates",
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.controller_click": "UNLOCALIZED: Controller clicks",
"create.subtitle.schematicannon_launch_block": "UNLOCALIZED: Schematicannon fires",
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
"create.subtitle.mechanical_press_activation": "UNLOCALIZED: Mechanical Press clangs",
"create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.crafter_click": "UNLOCALIZED: Crafter clicks",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.depot_plop": "UNLOCALIZED: Item lands",
"create.subtitle.confirm": "UNLOCALIZED: Affirmative ding",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 557",
"_": "Missing Localizations: 568",
"_": "->------------------------] Game Elements [------------------------<-",
@ -475,6 +475,7 @@
"item.create.integrated_circuit": "Интегральная схема",
"item.create.iron_sheet": "Железный лист",
"item.create.lapis_sheet": "Лазуритовый лист",
"item.create.linked_controller": "UNLOCALIZED: Linked Controller",
"item.create.minecart_contraption": "Вагонеточная штуковина",
"item.create.minecart_coupling": "Связыватель вагонеток",
"item.create.polished_rose_quartz": "Полированный розовый кварц",
@ -1105,6 +1106,12 @@
"create.tooltip.chute.fans_pull_down": "Вентилятор тянет снизу",
"create.tooltip.chute.contains": "Содержит: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.hint.hose_pulley.title": "Безграничное снабжение",
"create.hint.hose_pulley": "Целевой водный резервуар считается бесконечным.",
"create.hint.mechanical_arm_no_targets.title": "Нет целей",
@ -1136,28 +1143,33 @@
"_": "->------------------------] Subtitles [------------------------<-",
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "Намазывание слизи",
"create.subtitle.saw_idle": "UNLOCALIZED: Mechanical Saw turns",
"create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates",
"create.subtitle.blaze_munch": "Всполох радостно жуёт",
"create.subtitle.schematicannon_launch_block": "Выстрелы схематичной пушки",
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
"create.subtitle.schematicannon_finish": "Схематичная пушка закончила работу",
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.saw_process": "UNLOCALIZED: Mechanical Saw processes",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "Намазывание слизи",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.saw_activate_wood": "UNLOCALIZED: Mechanical Saw activates",
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.controller_click": "UNLOCALIZED: Controller clicks",
"create.subtitle.schematicannon_launch_block": "Выстрелы схематичной пушки",
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
"create.subtitle.mechanical_press_activation": "Механический пресс активирован",
"create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.crafter_click": "UNLOCALIZED: Crafter clicks",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.depot_plop": "UNLOCALIZED: Item lands",
"create.subtitle.confirm": "UNLOCALIZED: Affirmative ding",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 43",
"_": "Missing Localizations: 54",
"_": "->------------------------] Game Elements [------------------------<-",
@ -475,6 +475,7 @@
"item.create.integrated_circuit": "集成电路板",
"item.create.iron_sheet": "铁板",
"item.create.lapis_sheet": "青金石板",
"item.create.linked_controller": "UNLOCALIZED: Linked Controller",
"item.create.minecart_contraption": "装配过的矿车",
"item.create.minecart_coupling": "矿车连轴器",
"item.create.polished_rose_quartz": "磨制玫瑰石英",
@ -1105,6 +1106,12 @@
"create.tooltip.chute.fans_pull_down": "鼓风机从下方进行吸引",
"create.tooltip.chute.contains": "内含物品:%1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.hint.hose_pulley.title": "无限供应",
"create.hint.hose_pulley": "目标液体对象被视为无限量的。",
"create.hint.mechanical_arm_no_targets.title": "没有目标",
@ -1136,28 +1143,33 @@
"_": "->------------------------] Subtitles [------------------------<-",
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "粘液:挤碎声",
"create.subtitle.saw_idle": "UNLOCALIZED: Mechanical Saw turns",
"create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates",
"create.subtitle.blaze_munch": "烈焰人:咀嚼",
"create.subtitle.schematicannon_launch_block": "蓝图加农炮:发射",
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
"create.subtitle.schematicannon_finish": "蓝图加农炮:叮",
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.saw_process": "UNLOCALIZED: Mechanical Saw processes",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "粘液:挤碎声",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.saw_activate_wood": "UNLOCALIZED: Mechanical Saw activates",
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.controller_click": "UNLOCALIZED: Controller clicks",
"create.subtitle.schematicannon_launch_block": "蓝图加农炮:发射",
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
"create.subtitle.mechanical_press_activation": "辊压机:工作中",
"create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.crafter_click": "UNLOCALIZED: Crafter clicks",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.depot_plop": "UNLOCALIZED: Item lands",
"create.subtitle.confirm": "UNLOCALIZED: Affirmative ding",

View file

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

View file

@ -49,6 +49,15 @@
],
"subtitle": "create.subtitle.contraption_disassemble"
},
"controller_click": {
"sounds": [
{
"name": "minecraft:entity.item_frame.add_item",
"type": "event"
}
],
"subtitle": "create.subtitle.controller_click"
},
"copper_armor_equip": {
"sounds": [
{
@ -205,6 +214,42 @@
}
]
},
"saw_activate_stone": {
"sounds": [
{
"name": "minecraft:ui.stonecutter.take_result",
"type": "event"
}
],
"subtitle": "create.subtitle.saw_activate_stone"
},
"saw_activate_wood": {
"sounds": [
{
"name": "minecraft:entity.boat.paddle_land",
"type": "event"
}
],
"subtitle": "create.subtitle.saw_activate_wood"
},
"saw_idle": {
"sounds": [
{
"name": "minecraft:entity.boat.paddle_land",
"type": "event"
}
],
"subtitle": "create.subtitle.saw_idle"
},
"saw_process": {
"sounds": [
{
"name": "minecraft:block.sand.place",
"type": "event"
}
],
"subtitle": "create.subtitle.saw_process"
},
"schematicannon_finish": {
"sounds": [
{

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,32 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"create:andesite"
]
},
"criteria": {
"has_andesite_cobblestone": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "create:andesite_cobblestone"
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "create:andesite"
}
}
},
"requirements": [
[
"has_andesite_cobblestone",
"has_the_recipe"
]
]
}

View file

@ -0,0 +1,32 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"create:diorite"
]
},
"criteria": {
"has_diorite_cobblestone": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "create:diorite_cobblestone"
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "create:diorite"
}
}
},
"requirements": [
[
"has_diorite_cobblestone",
"has_the_recipe"
]
]
}

View file

@ -0,0 +1,32 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"create:granite"
]
},
"criteria": {
"has_granite_cobblestone": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "create:granite_cobblestone"
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "create:granite"
}
}
},
"requirements": [
[
"has_granite_cobblestone",
"has_the_recipe"
]
]
}

View file

@ -6,7 +6,7 @@
]
},
"criteria": {
"has_ingredient": {
"has_andesite": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
@ -25,7 +25,7 @@
},
"requirements": [
[
"has_ingredient",
"has_andesite",
"has_the_recipe"
]
]

View file

@ -0,0 +1,32 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"create:dark_scoria"
]
},
"criteria": {
"has_dark_scoria_cobblestone": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "create:dark_scoria_cobblestone"
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "create:dark_scoria"
}
}
},
"requirements": [
[
"has_dark_scoria_cobblestone",
"has_the_recipe"
]
]
}

View file

@ -6,7 +6,7 @@
]
},
"criteria": {
"has_ingredient": {
"has_dark_scoria": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
@ -25,7 +25,7 @@
},
"requirements": [
[
"has_ingredient",
"has_dark_scoria",
"has_the_recipe"
]
]

View file

@ -6,7 +6,7 @@
]
},
"criteria": {
"has_ingredient": {
"has_diorite": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
@ -25,7 +25,7 @@
},
"requirements": [
[
"has_ingredient",
"has_diorite",
"has_the_recipe"
]
]

View file

@ -0,0 +1,32 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"create:dolomite"
]
},
"criteria": {
"has_dolomite_cobblestone": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "create:dolomite_cobblestone"
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "create:dolomite"
}
}
},
"requirements": [
[
"has_dolomite_cobblestone",
"has_the_recipe"
]
]
}

View file

@ -6,7 +6,7 @@
]
},
"criteria": {
"has_ingredient": {
"has_dolomite": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
@ -25,7 +25,7 @@
},
"requirements": [
[
"has_ingredient",
"has_dolomite",
"has_the_recipe"
]
]

View file

@ -0,0 +1,32 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"create:gabbro"
]
},
"criteria": {
"has_gabbro_cobblestone": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "create:gabbro_cobblestone"
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "create:gabbro"
}
}
},
"requirements": [
[
"has_gabbro_cobblestone",
"has_the_recipe"
]
]
}

View file

@ -6,7 +6,7 @@
]
},
"criteria": {
"has_ingredient": {
"has_gabbro": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
@ -25,7 +25,7 @@
},
"requirements": [
[
"has_ingredient",
"has_gabbro",
"has_the_recipe"
]
]

View file

@ -6,7 +6,7 @@
]
},
"criteria": {
"has_ingredient": {
"has_granite": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
@ -25,7 +25,7 @@
},
"requirements": [
[
"has_ingredient",
"has_granite",
"has_the_recipe"
]
]

View file

@ -0,0 +1,32 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"create:limestone"
]
},
"criteria": {
"has_limestone_cobblestone": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "create:limestone_cobblestone"
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "create:limestone"
}
}
},
"requirements": [
[
"has_limestone_cobblestone",
"has_the_recipe"
]
]
}

View file

@ -6,7 +6,7 @@
]
},
"criteria": {
"has_ingredient": {
"has_limestone": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
@ -25,7 +25,7 @@
},
"requirements": [
[
"has_ingredient",
"has_limestone",
"has_the_recipe"
]
]

View file

@ -0,0 +1,32 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"create:scoria"
]
},
"criteria": {
"has_scoria_cobblestone": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "create:scoria_cobblestone"
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "create:scoria"
}
}
},
"requirements": [
[
"has_scoria_cobblestone",
"has_the_recipe"
]
]
}

View file

@ -6,7 +6,7 @@
]
},
"criteria": {
"has_ingredient": {
"has_scoria": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
@ -25,7 +25,7 @@
},
"requirements": [
[
"has_ingredient",
"has_scoria",
"has_the_recipe"
]
]

View file

@ -0,0 +1,32 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"create:weathered_limestone"
]
},
"criteria": {
"has_weathered_limestone_cobblestone": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "create:weathered_limestone_cobblestone"
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "create:weathered_limestone"
}
}
},
"requirements": [
[
"has_weathered_limestone_cobblestone",
"has_the_recipe"
]
]
}

View file

@ -6,7 +6,7 @@
]
},
"criteria": {
"has_ingredient": {
"has_weathered_limestone": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
@ -25,7 +25,7 @@
},
"requirements": [
[
"has_ingredient",
"has_weathered_limestone",
"has_the_recipe"
]
]

View file

@ -5,13 +5,37 @@
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "create:dark_scoria"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
"type": "minecraft:alternatives",
"children": [
{
"type": "minecraft:item",
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
],
"name": "create:dark_scoria"
},
{
"type": "minecraft:item",
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
],
"name": "create:dark_scoria_cobblestone"
}
]
}
]
}

View file

@ -5,13 +5,37 @@
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "create:dolomite"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
"type": "minecraft:alternatives",
"children": [
{
"type": "minecraft:item",
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
],
"name": "create:dolomite"
},
{
"type": "minecraft:item",
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
],
"name": "create:dolomite_cobblestone"
}
]
}
]
}

View file

@ -5,13 +5,37 @@
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "create:gabbro"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
"type": "minecraft:alternatives",
"children": [
{
"type": "minecraft:item",
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
],
"name": "create:gabbro"
},
{
"type": "minecraft:item",
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
],
"name": "create:gabbro_cobblestone"
}
]
}
]
}

View file

@ -5,13 +5,37 @@
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "create:limestone"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
"type": "minecraft:alternatives",
"children": [
{
"type": "minecraft:item",
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
],
"name": "create:limestone"
},
{
"type": "minecraft:item",
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
],
"name": "create:limestone_cobblestone"
}
]
}
]
}

View file

@ -5,13 +5,37 @@
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "create:scoria"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
"type": "minecraft:alternatives",
"children": [
{
"type": "minecraft:item",
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
],
"name": "create:scoria"
},
{
"type": "minecraft:item",
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
],
"name": "create:scoria_cobblestone"
}
]
}
]
}

View file

@ -5,13 +5,37 @@
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "create:weathered_limestone"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
"type": "minecraft:alternatives",
"children": [
{
"type": "minecraft:item",
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
],
"name": "create:weathered_limestone"
},
{
"type": "minecraft:item",
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
],
"name": "create:weathered_limestone_cobblestone"
}
]
}
]
}

View file

@ -0,0 +1,9 @@
{
"type": "minecraft:smelting",
"ingredient": {
"item": "create:andesite_cobblestone"
},
"result": "minecraft:andesite",
"experience": 0.1,
"cookingtime": 200
}

View file

@ -0,0 +1,9 @@
{
"type": "minecraft:smelting",
"ingredient": {
"item": "create:dark_scoria_cobblestone"
},
"result": "create:dark_scoria",
"experience": 0.1,
"cookingtime": 200
}

View file

@ -0,0 +1,9 @@
{
"type": "minecraft:smelting",
"ingredient": {
"item": "create:diorite_cobblestone"
},
"result": "minecraft:diorite",
"experience": 0.1,
"cookingtime": 200
}

View file

@ -0,0 +1,9 @@
{
"type": "minecraft:smelting",
"ingredient": {
"item": "create:dolomite_cobblestone"
},
"result": "create:dolomite",
"experience": 0.1,
"cookingtime": 200
}

View file

@ -0,0 +1,9 @@
{
"type": "minecraft:smelting",
"ingredient": {
"item": "create:gabbro_cobblestone"
},
"result": "create:gabbro",
"experience": 0.1,
"cookingtime": 200
}

View file

@ -0,0 +1,9 @@
{
"type": "minecraft:smelting",
"ingredient": {
"item": "create:granite_cobblestone"
},
"result": "minecraft:granite",
"experience": 0.1,
"cookingtime": 200
}

View file

@ -0,0 +1,9 @@
{
"type": "minecraft:smelting",
"ingredient": {
"item": "create:limestone_cobblestone"
},
"result": "create:limestone",
"experience": 0.1,
"cookingtime": 200
}

View file

@ -1,11 +1,11 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"XX",
"XX"
"##",
"##"
],
"key": {
"X": {
"#": {
"item": "create:dark_scoria"
}
},

View file

@ -1,11 +1,11 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"XX",
"XX"
"##",
"##"
],
"key": {
"X": {
"#": {
"item": "create:dolomite"
}
},

View file

@ -1,11 +1,11 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"XX",
"XX"
"##",
"##"
],
"key": {
"X": {
"#": {
"item": "create:gabbro"
}
},

View file

@ -1,11 +1,11 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"XX",
"XX"
"##",
"##"
],
"key": {
"X": {
"#": {
"item": "create:limestone"
}
},

View file

@ -1,11 +1,11 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"XX",
"XX"
"##",
"##"
],
"key": {
"X": {
"#": {
"item": "create:scoria"
}
},

View file

@ -1,11 +1,11 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"XX",
"XX"
"##",
"##"
],
"key": {
"X": {
"#": {
"item": "create:weathered_limestone"
}
},

View file

@ -0,0 +1,9 @@
{
"type": "minecraft:smelting",
"ingredient": {
"item": "create:scoria_cobblestone"
},
"result": "create:scoria",
"experience": 0.1,
"cookingtime": 200
}

View file

@ -0,0 +1,9 @@
{
"type": "minecraft:smelting",
"ingredient": {
"item": "create:weathered_limestone_cobblestone"
},
"result": "create:weathered_limestone",
"experience": 0.1,
"cookingtime": 200
}

View file

@ -0,0 +1,7 @@
{
"replace": false,
"values": [
"create:golden_sheet",
"create:crushed_gold_ore"
]
}

View file

@ -2,6 +2,8 @@ package com.simibubi.create;
import com.simibubi.create.content.logistics.block.inventories.AdjustableCrateContainer;
import com.simibubi.create.content.logistics.block.inventories.AdjustableCrateScreen;
import com.simibubi.create.content.logistics.item.LinkedControllerContainer;
import com.simibubi.create.content.logistics.item.LinkedControllerScreen;
import com.simibubi.create.content.logistics.item.filter.AttributeFilterContainer;
import com.simibubi.create.content.logistics.item.filter.AttributeFilterScreen;
import com.simibubi.create.content.logistics.item.filter.FilterContainer;
@ -22,25 +24,27 @@ import net.minecraft.inventory.container.Container;
public class AllContainerTypes {
public static final ContainerEntry<SchematicTableContainer> SCHEMATIC_TABLE =
register("schematic_table", SchematicTableContainer::new, () -> SchematicTableScreen::new);
register("schematic_table", SchematicTableContainer::new, () -> SchematicTableScreen::new);
public static final ContainerEntry<SchematicannonContainer> SCHEMATICANNON =
register("schematicannon", SchematicannonContainer::new, () -> SchematicannonScreen::new);
register("schematicannon", SchematicannonContainer::new, () -> SchematicannonScreen::new);
public static final ContainerEntry<AdjustableCrateContainer> FLEXCRATE =
register("flexcrate", AdjustableCrateContainer::new, () -> AdjustableCrateScreen::new);
register("flexcrate", AdjustableCrateContainer::new, () -> AdjustableCrateScreen::new);
public static final ContainerEntry<FilterContainer> FILTER =
register("filter", FilterContainer::new, () -> FilterScreen::new);
register("filter", FilterContainer::new, () -> FilterScreen::new);
public static final ContainerEntry<AttributeFilterContainer> ATTRIBUTE_FILTER =
register("attribute_filter", AttributeFilterContainer::new, () -> AttributeFilterScreen::new);
register("attribute_filter", AttributeFilterContainer::new, () -> AttributeFilterScreen::new);
public static final ContainerEntry<LinkedControllerContainer> LINKED_CONTROLLER =
register("linked_controller", LinkedControllerContainer::new, () -> LinkedControllerScreen::new);
private static <C extends Container, S extends Screen & IHasContainer<C>> ContainerEntry<C> register(String name, ForgeContainerFactory<C> factory, NonNullSupplier<ScreenFactory<C, S>> screenFactory) {
return Create.registrate().container(name, factory, screenFactory).register();
}
public static void register() {
}
public static void register() {}
}

View file

@ -41,6 +41,8 @@ import com.simibubi.create.content.curiosities.tools.SandPaperItem;
import com.simibubi.create.content.curiosities.tools.SandPaperItemRenderer.SandPaperModel;
import com.simibubi.create.content.curiosities.zapper.terrainzapper.WorldshaperItem;
import com.simibubi.create.content.curiosities.zapper.terrainzapper.WorldshaperModel;
import com.simibubi.create.content.logistics.item.LinkedControllerItem;
import com.simibubi.create.content.logistics.item.LinkedControllerModel;
import com.simibubi.create.content.logistics.item.filter.FilterItem;
import com.simibubi.create.content.schematics.item.SchematicAndQuillItem;
import com.simibubi.create.content.schematics.item.SchematicItem;
@ -56,6 +58,7 @@ import net.minecraft.item.Food;
import net.minecraft.item.Item;
import net.minecraft.item.Rarity;
import net.minecraft.tags.ITag;
import net.minecraft.tags.ItemTags;
import net.minecraft.util.ResourceLocation;
public class AllItems {
@ -145,11 +148,11 @@ public class AllItems {
COPPER_SHEET = taggedIngredient("copper_sheet", forgeItemTag("plates/copper"), PLATES.tag),
BRASS_SHEET = taggedIngredient("brass_sheet", forgeItemTag("plates/brass"), PLATES.tag),
IRON_SHEET = taggedIngredient("iron_sheet", forgeItemTag("plates/iron"), PLATES.tag),
GOLDEN_SHEET = taggedIngredient("golden_sheet", forgeItemTag("plates/gold"), PLATES.tag),
GOLDEN_SHEET = taggedIngredient("golden_sheet", forgeItemTag("plates/gold"), PLATES.tag, ItemTags.PIGLIN_LOVED),
LAPIS_SHEET = taggedIngredient("lapis_sheet", forgeItemTag("plates/lapis_lazuli"), PLATES.tag),
CRUSHED_IRON = taggedIngredient("crushed_iron_ore", CRUSHED_ORES.tag),
CRUSHED_GOLD = taggedIngredient("crushed_gold_ore", CRUSHED_ORES.tag),
CRUSHED_GOLD = taggedIngredient("crushed_gold_ore", CRUSHED_ORES.tag, ItemTags.PIGLIN_LOVED),
CRUSHED_COPPER = taggedIngredient("crushed_copper_ore", CRUSHED_ORES.tag),
CRUSHED_ZINC = taggedIngredient("crushed_zinc_ore", CRUSHED_ORES.tag),
CRUSHED_BRASS = taggedIngredient("crushed_brass", CRUSHED_ORES.tag);
@ -214,6 +217,12 @@ public class AllItems {
.model(AssetLookup.itemModelWithPartials())
.register();
public static final ItemEntry<LinkedControllerItem> LINKED_CONTROLLER =
REGISTRATE.item("linked_controller", LinkedControllerItem::new)
.transform(CreateRegistrate.customRenderedItem(() -> LinkedControllerModel::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))

View file

@ -152,12 +152,37 @@ public class AllSoundEvents {
.playExisting(SoundEvents.ITEM_ARMOR_EQUIP_GOLD, 1f, 1f)
.category(SoundCategory.PLAYERS)
.build(),
AUTO_POLISH = create("deployer_polish").subtitle("Deployer applies polish")
.playExisting(SoundEvents.UI_STONECUTTER_TAKE_RESULT, 1f, 1f)
.category(SoundCategory.BLOCKS)
.build(),
CONTROLLER_CLICK = create("controller_click").subtitle("Controller clicks")
.playExisting(SoundEvents.ENTITY_ITEM_FRAME_ADD_ITEM, .35f, 1f)
.category(SoundCategory.BLOCKS)
.build(),
SAW_ACTIVATE_WOOD = create("saw_activate_wood").subtitle("Mechanical Saw activates")
.playExisting(SoundEvents.ENTITY_BOAT_PADDLE_LAND, .75f, 1.5f)
.category(SoundCategory.BLOCKS)
.build(),
SAW_ACTIVATE_STONE = create("saw_activate_stone").subtitle("Mechanical Saw activates")
.playExisting(SoundEvents.UI_STONECUTTER_TAKE_RESULT, .125f, 1.25f)
.category(SoundCategory.BLOCKS)
.build(),
SAW_PROCESS = create("saw_process").subtitle("Mechanical Saw processes")
.playExisting(SoundEvents.BLOCK_SAND_PLACE, .075f, .75f)
.category(SoundCategory.BLOCKS)
.build(),
SAW_IDLE = create("saw_idle").subtitle("Mechanical Saw turns")
.playExisting(SoundEvents.ENTITY_BOAT_PADDLE_LAND)
.category(SoundCategory.BLOCKS)
.build(),
BLAZE_MUNCH = create("blaze_munch").subtitle("Blaze Burner munches")
.playExisting(SoundEvents.ENTITY_GENERIC_EAT, .5f, 1f)
.category(SoundCategory.BLOCKS)
@ -172,7 +197,7 @@ public class AllSoundEvents {
for (SoundEntry entry : entries.values())
entry.register(registry);
}
public static void prepare() {
for (SoundEntry entry : entries.values())
entry.prepare();
@ -363,7 +388,7 @@ public class AllSoundEvents {
this.wrappedEvents = wrappedEvents;
compiledEvents = Lists.newArrayList();
}
@Override
public void prepare() {
for (int i = 0; i < wrappedEvents.size(); i++) {
@ -376,7 +401,7 @@ public class AllSoundEvents {
@Override
public void register(IForgeRegistry<SoundEvent> registry) {
for (Pair<SoundEvent, Couple<Float>> pair : compiledEvents)
for (Pair<SoundEvent, Couple<Float>> pair : compiledEvents)
registry.register(pair.getFirst());
}
@ -435,7 +460,7 @@ public class AllSoundEvents {
public CustomSoundEntry(String id, String subtitle, SoundCategory category) {
super(id, subtitle, category);
}
@Override
public void prepare() {
ResourceLocation location = getLocation();

View file

@ -8,8 +8,8 @@ import static com.simibubi.create.foundation.block.connected.CTSpriteShifter.CTT
import java.util.IdentityHashMap;
import java.util.Map;
import com.simibubi.create.content.palettes.PaletteBlockPatterns;
import com.simibubi.create.content.palettes.PaletteBlockPatterns.CTs;
import com.simibubi.create.content.palettes.PaletteBlockPattern;
import com.simibubi.create.content.palettes.PaletteBlockPattern.CTs;
import com.simibubi.create.content.palettes.PaletteStoneVariants;
import com.simibubi.create.foundation.block.connected.CTSpriteShiftEntry;
import com.simibubi.create.foundation.block.connected.CTSpriteShifter.CTType;
@ -23,7 +23,7 @@ import net.minecraft.item.DyeColor;
public class AllSpriteShifts {
static final Map<WoodType, CTSpriteShiftEntry> WOODEN_WINDOWS = new IdentityHashMap<>();
static final Map<PaletteStoneVariants, Map<PaletteBlockPatterns.CTs, CTSpriteShiftEntry>> PALETTE_VARIANT_PATTERNS =
static final Map<PaletteStoneVariants, Map<PaletteBlockPattern.CTs, CTSpriteShiftEntry>> PALETTE_VARIANT_PATTERNS =
new IdentityHashMap<>();
public static final Map<DyeColor, SpriteShiftEntry> DYED_BELTS = new IdentityHashMap<>(),
@ -69,7 +69,7 @@ public class AllSpriteShifts {
return WOODEN_WINDOWS.get(woodType);
}
public static CTSpriteShiftEntry getVariantPattern(PaletteStoneVariants variant, PaletteBlockPatterns.CTs texture) {
public static CTSpriteShiftEntry getVariantPattern(PaletteStoneVariants variant, PaletteBlockPattern.CTs texture) {
return PALETTE_VARIANT_PATTERNS.get(variant)
.get(texture);
}
@ -85,7 +85,7 @@ public class AllSpriteShifts {
IdentityHashMap<CTs, CTSpriteShiftEntry> map = new IdentityHashMap<>();
PALETTE_VARIANT_PATTERNS.put(paletteStoneVariants, map);
for (PaletteBlockPatterns.CTs texture : PaletteBlockPatterns.CTs.values()) {
for (PaletteBlockPattern.CTs texture : PaletteBlockPattern.CTs.values()) {
String textureName = Lang.asId(texture.name());
String target = "palettes/" + variantName + "/" + textureName;
map.put(texture, getCT(texture.type, target));

View file

@ -1,8 +1,8 @@
package com.simibubi.create.compat.jei;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
@ -81,12 +81,12 @@ public class CreateJEI implements IModPlugin {
}
public IIngredientManager ingredientManager;
final List<CreateRecipeCategory<?>> ALL = new ArrayList<>();
final CreateRecipeCategory<?>
private final List<CreateRecipeCategory<?>> allCategories = new ArrayList<>();
private final CreateRecipeCategory<?>
milling = register("milling", MillingCategory::new).recipes(AllRecipeTypes.MILLING)
.catalyst(AllBlocks.MILLSTONE::get)
.build(),
milling = register("milling", MillingCategory::new).recipes(AllRecipeTypes.MILLING)
.catalyst(AllBlocks.MILLSTONE::get)
.build(),
crushing = register("crushing", CrushingCategory::new).recipes(AllRecipeTypes.CRUSHING)
.recipesExcluding(AllRecipeTypes.MILLING::getType, AllRecipeTypes.CRUSHING::getType)
@ -106,7 +106,9 @@ public class CreateJEI implements IModPlugin {
.build(),
blasting = register("fan_blasting", FanBlastingCategory::new)
.recipesExcluding(() -> IRecipeType.SMELTING, () -> IRecipeType.SMOKING)
.recipesExcluding(() -> IRecipeType.SMELTING, () -> IRecipeType.BLASTING)
.recipes(() -> IRecipeType.BLASTING)
.removeRecipes(() -> IRecipeType.SMOKING)
.catalystStack(ProcessingViaFanCategory.getFan("fan_blasting"))
.build(),
@ -213,20 +215,21 @@ public class CreateJEI implements IModPlugin {
@Override
public void registerCategories(IRecipeCategoryRegistration registration) {
ALL.forEach(registration::addRecipeCategories);
allCategories.forEach(registration::addRecipeCategories);
}
@Override
public void registerRecipes(IRecipeRegistration registration) {
ingredientManager = registration.getIngredientManager();
ALL.forEach(c -> c.recipes.forEach(s -> registration.addRecipes(s.get(), c.getUid())));
allCategories.forEach(c -> c.recipes.forEach(s -> registration.addRecipes(s.get(), c.getUid())));
}
@Override
public void registerRecipeCatalysts(IRecipeCatalystRegistration registration) {
ALL.forEach(c -> c.recipeCatalysts.forEach(s -> registration.addRecipeCatalyst(s.get(), c.getUid())));
allCategories.forEach(c -> c.recipeCatalysts.forEach(s -> registration.addRecipeCatalyst(s.get(), c.getUid())));
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public void registerGuiHandlers(IGuiHandlerRegistration registration) {
SlotMover slotMover = new SlotMover();
@ -239,98 +242,106 @@ public class CreateJEI implements IModPlugin {
}
private class CategoryBuilder<T extends IRecipe<?>> {
CreateRecipeCategory<T> category;
private CreateRecipeCategory<T> category;
private List<Consumer<List<IRecipe<?>>>> recipeListConsumers = new ArrayList<>();
private Predicate<CRecipes> pred;
CategoryBuilder(String name, Supplier<CreateRecipeCategory<T>> category) {
public CategoryBuilder(String name, Supplier<CreateRecipeCategory<T>> category) {
this.category = category.get();
this.category.setCategoryId(name);
this.pred = Predicates.alwaysTrue();
pred = Predicates.alwaysTrue();
}
CategoryBuilder<T> catalyst(Supplier<IItemProvider> supplier) {
return catalystStack(() -> new ItemStack(supplier.get()
.asItem()));
}
CategoryBuilder<T> catalystStack(Supplier<ItemStack> supplier) {
category.recipeCatalysts.add(supplier);
return this;
}
CategoryBuilder<T> recipes(AllRecipeTypes recipeTypeEntry) {
public CategoryBuilder<T> recipes(AllRecipeTypes recipeTypeEntry) {
return recipes(recipeTypeEntry::getType);
}
CategoryBuilder<T> recipes(Supplier<IRecipeType<T>> recipeType) {
public CategoryBuilder<T> recipes(Supplier<IRecipeType<? extends T>> recipeType) {
return recipes(r -> r.getType() == recipeType.get());
}
CategoryBuilder<T> recipes(ResourceLocation serializer) {
public CategoryBuilder<T> recipes(ResourceLocation serializer) {
return recipes(r -> r.getSerializer()
.getRegistryName()
.equals(serializer));
}
CategoryBuilder<T> recipes(Predicate<IRecipe<?>> pred) {
public CategoryBuilder<T> recipes(Predicate<IRecipe<?>> pred) {
return recipeList(() -> findRecipes(pred));
}
CategoryBuilder<T> recipes(Predicate<IRecipe<?>> pred, Function<IRecipe<?>, T> converter) {
public CategoryBuilder<T> recipes(Predicate<IRecipe<?>> pred, Function<IRecipe<?>, T> converter) {
return recipeList(() -> findRecipes(pred), converter);
}
CategoryBuilder<T> recipeList(Supplier<List<? extends IRecipe<?>>> list) {
public CategoryBuilder<T> recipeList(Supplier<List<? extends IRecipe<?>>> list) {
return recipeList(list, null);
}
CategoryBuilder<T> recipeList(Supplier<List<? extends IRecipe<?>>> list, Function<IRecipe<?>, T> converter) {
category.recipes.add(() -> {
if (!this.pred.test(AllConfigs.SERVER.recipes))
return Collections.emptyList();
public CategoryBuilder<T> recipeList(Supplier<List<? extends IRecipe<?>>> list, Function<IRecipe<?>, T> converter) {
recipeListConsumers.add(recipes -> {
List<? extends IRecipe<?>> toAdd = list.get();
if (converter != null)
return list.get()
toAdd = toAdd
.stream()
.map(converter)
.collect(Collectors.toList());
return list.get();
recipes.addAll(toAdd);
});
return this;
}
CategoryBuilder<T> recipesExcluding(Supplier<IRecipeType<? extends T>> recipeType,
public CategoryBuilder<T> recipesExcluding(Supplier<IRecipeType<? extends T>> recipeType,
Supplier<IRecipeType<? extends T>> excluded) {
category.recipes.add(() -> {
if (!this.pred.test(AllConfigs.SERVER.recipes))
return Collections.emptyList();
return findRecipesByTypeExcluding(recipeType.get(), excluded.get());
recipeListConsumers.add(recipes -> {
recipes.addAll(findRecipesByTypeExcluding(recipeType.get(), excluded.get()));
});
return this;
}
CategoryBuilder<T> enableWhen(Function<CRecipes, ConfigBool> configValue) {
this.pred = c -> configValue.apply(c)
public CategoryBuilder<T> removeRecipes(Supplier<IRecipeType<? extends T>> recipeType) {
recipeListConsumers.add(recipes -> {
removeRecipesByType(recipes, recipeType.get());
});
return this;
}
public CategoryBuilder<T> catalyst(Supplier<IItemProvider> supplier) {
return catalystStack(() -> new ItemStack(supplier.get()
.asItem()));
}
public CategoryBuilder<T> catalystStack(Supplier<ItemStack> supplier) {
category.recipeCatalysts.add(supplier);
return this;
}
public CategoryBuilder<T> enableWhen(Function<CRecipes, ConfigBool> configValue) {
pred = c -> configValue.apply(c)
.get();
return this;
}
CategoryBuilder<T> enableWhenBool(Function<CRecipes, Boolean> configValue) {
this.pred = configValue::apply;
public CategoryBuilder<T> enableWhenBool(Function<CRecipes, Boolean> configValue) {
pred = configValue::apply;
return this;
}
CreateRecipeCategory<T> build() {
ALL.add(category);
public CreateRecipeCategory<T> build() {
if (pred.test(AllConfigs.SERVER.recipes))
category.recipes.add(() -> {
List<IRecipe<?>> recipes = new ArrayList<>();
for (Consumer<List<IRecipe<?>>> consumer : recipeListConsumers)
consumer.accept(recipes);
return recipes;
});
allCategories.add(category);
return category;
}
}
static List<IRecipe<?>> findRecipesByType(IRecipeType<?> type) {
return findRecipes(r -> r.getType() == type);
}
static List<IRecipe<?>> findRecipes(Predicate<IRecipe<?>> predicate) {
public static List<IRecipe<?>> findRecipes(Predicate<IRecipe<?>> predicate) {
return Minecraft.getInstance().world.getRecipeManager()
.getRecipes()
.stream()
@ -338,24 +349,44 @@ public class CreateJEI implements IModPlugin {
.collect(Collectors.toList());
}
static List<IRecipe<?>> findRecipesByTypeExcluding(IRecipeType<?> type, IRecipeType<?> excludingType) {
List<IRecipe<?>> byType = findRecipes(r -> r.getType() == type);
List<IRecipe<?>> byExcludingType = findRecipes(r -> r.getType() == excludingType);
byType.removeIf(recipe -> {
for (IRecipe<?> r : byExcludingType) {
ItemStack[] matchingStacks = recipe.getIngredients()
.get(0)
.getMatchingStacks();
if (matchingStacks.length == 0)
return true;
if (r.getIngredients()
.get(0)
.test(matchingStacks[0]))
return true;
}
return false;
});
public static List<IRecipe<?>> findRecipesByType(IRecipeType<?> type) {
return findRecipes(recipe -> recipe.getType() == type);
}
public static List<IRecipe<?>> findRecipesByTypeExcluding(IRecipeType<?> type, IRecipeType<?> excludingType) {
List<IRecipe<?>> byType = findRecipesByType(type);
removeRecipesByType(byType, excludingType);
return byType;
}
public static List<IRecipe<?>> findRecipesByTypeExcluding(IRecipeType<?> type, IRecipeType<?>... excludingTypes) {
List<IRecipe<?>> byType = findRecipesByType(type);
for (IRecipeType<?> excludingType : excludingTypes)
removeRecipesByType(byType, excludingType);
return byType;
}
public static void removeRecipesByType(List<IRecipe<?>> recipes, IRecipeType<?> type) {
List<IRecipe<?>> byType = findRecipesByType(type);
recipes.removeIf(recipe -> {
for (IRecipe<?> r : byType)
if (doInputsMatch(recipe, r))
return true;
return false;
});
}
public static boolean doInputsMatch(IRecipe<?> recipe1, IRecipe<?> recipe2) {
ItemStack[] matchingStacks = recipe1.getIngredients()
.get(0)
.getMatchingStacks();
if (matchingStacks.length == 0)
return true;
if (recipe2.getIngredients()
.get(0)
.test(matchingStacks[0]))
return true;
return false;
}
}

View file

@ -31,13 +31,13 @@ import net.minecraftforge.fluids.FluidStack;
public abstract class CreateRecipeCategory<T extends IRecipe<?>> implements IRecipeCategory<T> {
public List<Supplier<? extends Object>> recipeCatalysts = new ArrayList<>();
public List<Supplier<List<? extends IRecipe<?>>>> recipes = new ArrayList<>();
public ResourceLocation uid;
public final List<Supplier<List<? extends IRecipe<?>>>> recipes = new ArrayList<>();
public final List<Supplier<? extends Object>> recipeCatalysts = new ArrayList<>();
protected ResourceLocation uid;
protected String name;
private IDrawable icon;
private IDrawable background;
private IDrawable icon;
public CreateRecipeCategory(IDrawable icon, IDrawable background) {
this.background = background;
@ -49,11 +49,6 @@ public abstract class CreateRecipeCategory<T extends IRecipe<?>> implements IRec
this.name = name;
}
@Override
public IDrawable getIcon() {
return icon;
}
@Override
public ResourceLocation getUid() {
return uid;
@ -70,6 +65,11 @@ public abstract class CreateRecipeCategory<T extends IRecipe<?>> implements IRec
return background;
}
@Override
public IDrawable getIcon() {
return icon;
}
protected static AllGuiTextures getRenderedSlot(IRecipe<?> recipe, int index) {
AllGuiTextures jeiSlot = AllGuiTextures.JEI_SLOT;
if (!(recipe instanceof ProcessingRecipe))

View file

@ -21,7 +21,6 @@ import mezz.jei.api.ingredients.IIngredients;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.util.math.vector.Vector3f;
import net.minecraft.util.text.TextFormatting;
public abstract class ProcessingViaFanCategory<T extends IRecipe<?>> extends CreateRecipeCategory<T> {
@ -41,7 +40,7 @@ public abstract class ProcessingViaFanCategory<T extends IRecipe<?>> extends Cre
public static Supplier<ItemStack> getFan(String name) {
return () -> AllBlocks.ENCASED_FAN.asStack()
.setDisplayName(Lang.translate("recipe." + name + ".fan").formatted(TextFormatting.RESET));
.setDisplayName(Lang.translate("recipe." + name + ".fan").styled(style -> style.withItalic(false)));
}
@Override

View file

@ -21,6 +21,7 @@ import com.simibubi.create.content.contraptions.relays.gearbox.GearboxBlock;
import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.item.TooltipHelper;
import com.simibubi.create.foundation.sound.SoundScapes;
import com.simibubi.create.foundation.sound.SoundScapes.AmbienceGroup;
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
import com.simibubi.create.foundation.utility.Lang;
@ -476,6 +477,10 @@ public abstract class KineticTileEntity extends SmartTileEntity
return d.getAxisDirection() == AxisDirection.POSITIVE ? axisSpeed : -axisSpeed;
}
public static float convertToLinear(float speed) { return speed / 512f; }
public static float convertToAngular(float speed) { return speed * 3 / 10f; }
public boolean isOverStressed() {
return overStressed;
}
@ -575,14 +580,14 @@ public abstract class KineticTileEntity extends SmartTileEntity
float componentSpeed = Math.abs(getSpeed());
if (componentSpeed == 0)
return;
float pitch = MathHelper.clamp((componentSpeed / 256f) + .45f, .5f, 1.25f);
float pitch = MathHelper.clamp((componentSpeed / 256f) + .45f, .85f, 1f);
if (isNoisy())
SoundScapes.playGeneralKineticAmbience(pos, pitch);
SoundScapes.play(AmbienceGroup.KINETIC, pos, pitch);
Block block = getBlockState().getBlock();
if (ICogWheel.isSmallCog(block) || ICogWheel.isLargeCog(block) || block instanceof GearboxBlock)
SoundScapes.playCogwheelAmbience(pos, pitch);
SoundScapes.play(AmbienceGroup.COG, pos, pitch);
}
protected boolean isNoisy() {

View file

@ -9,10 +9,10 @@ import com.simibubi.create.AllSoundEvents;
import com.simibubi.create.Create;
import com.simibubi.create.content.contraptions.components.deployer.DeployerTileEntity.Mode;
import com.simibubi.create.content.contraptions.components.deployer.DeployerTileEntity.State;
import com.simibubi.create.content.contraptions.processing.InWorldProcessing;
import com.simibubi.create.content.contraptions.relays.belt.BeltHelper;
import com.simibubi.create.content.contraptions.relays.belt.transport.TransportedItemStack;
import com.simibubi.create.content.curiosities.tools.SandPaperPolishingRecipe;
import com.simibubi.create.content.logistics.InWorldProcessing;
import com.simibubi.create.foundation.tileEntity.behaviour.belt.BeltProcessingBehaviour.ProcessingResult;
import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour;
import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour.TransportedResult;

View file

@ -8,8 +8,8 @@ import org.apache.commons.lang3.tuple.Pair;
import com.simibubi.create.AllTags;
import com.simibubi.create.content.contraptions.particle.AirFlowParticleData;
import com.simibubi.create.content.logistics.InWorldProcessing;
import com.simibubi.create.content.logistics.InWorldProcessing.Type;
import com.simibubi.create.content.contraptions.processing.InWorldProcessing;
import com.simibubi.create.content.contraptions.processing.InWorldProcessing.Type;
import com.simibubi.create.foundation.advancement.AllTriggers;
import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;

View file

@ -3,22 +3,22 @@ package com.simibubi.create.content.contraptions.components.fan;
import javax.annotation.ParametersAreNonnullByDefault;
import com.simibubi.create.AllRecipeTypes;
import com.simibubi.create.content.contraptions.processing.InWorldProcessing;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipe;
import com.simibubi.create.content.contraptions.processing.InWorldProcessing.SplashingWrapper;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeParams;
import com.simibubi.create.content.logistics.InWorldProcessing;
import com.simibubi.create.content.logistics.InWorldProcessing.SplashingInv;
import net.minecraft.world.World;
@ParametersAreNonnullByDefault
public class SplashingRecipe extends ProcessingRecipe<InWorldProcessing.SplashingInv> {
public class SplashingRecipe extends ProcessingRecipe<InWorldProcessing.SplashingWrapper> {
public SplashingRecipe(ProcessingRecipeParams params) {
super(AllRecipeTypes.SPLASHING, params);
}
@Override
public boolean matches(SplashingInv inv, World worldIn) {
public boolean matches(SplashingWrapper inv, World worldIn) {
if (inv.isEmpty())
return false;
return ingredients.get(0)

View file

@ -9,9 +9,9 @@ import java.util.stream.Collectors;
import com.simibubi.create.Create;
import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity.Mode;
import com.simibubi.create.content.contraptions.processing.InWorldProcessing;
import com.simibubi.create.content.contraptions.relays.belt.BeltHelper;
import com.simibubi.create.content.contraptions.relays.belt.transport.TransportedItemStack;
import com.simibubi.create.content.logistics.InWorldProcessing;
import com.simibubi.create.foundation.tileEntity.behaviour.belt.BeltProcessingBehaviour.ProcessingResult;
import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour;
import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour.TransportedResult;

View file

@ -10,7 +10,7 @@ import com.simibubi.create.AllSoundEvents;
import com.simibubi.create.Create;
import com.simibubi.create.content.contraptions.processing.BasinOperatingTileEntity;
import com.simibubi.create.content.contraptions.processing.BasinTileEntity;
import com.simibubi.create.content.logistics.InWorldProcessing;
import com.simibubi.create.content.contraptions.processing.InWorldProcessing;
import com.simibubi.create.foundation.advancement.AllTriggers;
import com.simibubi.create.foundation.advancement.ITriggerable;
import com.simibubi.create.foundation.config.AllConfigs;

View file

@ -10,14 +10,18 @@ import java.util.stream.Collectors;
import javax.annotation.ParametersAreNonnullByDefault;
import com.simibubi.create.AllRecipeTypes;
import com.simibubi.create.AllSoundEvents;
import com.simibubi.create.AllTags;
import com.simibubi.create.content.contraptions.components.actors.BlockBreakingKineticTileEntity;
import com.simibubi.create.content.contraptions.processing.ProcessingInventory;
import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.item.ItemHelper;
import com.simibubi.create.foundation.sound.SoundScapes;
import com.simibubi.create.foundation.sound.SoundScapes.AmbienceGroup;
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour;
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
import com.simibubi.create.foundation.utility.NBTHelper;
import com.simibubi.create.foundation.utility.TreeCutter;
import com.simibubi.create.foundation.utility.VecHelper;
import com.simibubi.create.foundation.utility.recipe.RecipeConditions;
@ -31,10 +35,12 @@ import net.minecraft.block.CactusBlock;
import net.minecraft.block.ChorusPlantBlock;
import net.minecraft.block.KelpBlock;
import net.minecraft.block.KelpTopBlock;
import net.minecraft.block.SoundType;
import net.minecraft.block.StemGrownBlock;
import net.minecraft.block.SugarCaneBlock;
import net.minecraft.entity.item.ItemEntity;
import net.minecraft.item.BlockItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.item.crafting.IRecipeType;
@ -53,6 +59,8 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.util.registry.Registry;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.items.CapabilityItemHandler;
@ -70,6 +78,7 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity {
private int recipeIndex;
private final LazyOptional<IItemHandler> invProvider;
private FilteringBehaviour filtering;
private boolean processingStarted;
public SawTileEntity(TileEntityType<? extends SawTileEntity> type) {
super(type);
@ -77,6 +86,7 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity {
inventory.remainingTime = -1;
recipeIndex = 0;
invProvider = LazyOptional.of(() -> inventory);
processingStarted = false;
}
@Override
@ -92,6 +102,11 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity {
compound.put("Inventory", inventory.serializeNBT());
compound.putInt("RecipeIndex", recipeIndex);
super.write(compound, clientPacket);
if (!clientPacket || !processingStarted)
return;
processingStarted = false;
NBTHelper.putMarker(compound, "ProcessingStarted");
}
@Override
@ -99,6 +114,40 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity {
super.fromTag(state, compound, clientPacket);
inventory.deserializeNBT(compound.getCompound("Inventory"));
recipeIndex = compound.getInt("RecipeIndex");
if (compound.contains("ProcessingStarted"))
processingStarted = true;
}
@Override
@OnlyIn(Dist.CLIENT)
public void tickAudio() {
super.tickAudio();
if (getSpeed() == 0)
return;
SoundScapes.play(AmbienceGroup.SAW, pos, 1);
ItemStack stackInSlot = inventory.getStackInSlot(0);
if (stackInSlot.isEmpty())
return;
boolean isWood = false;
Item item = stackInSlot.getItem();
if (item instanceof BlockItem) {
Block block = ((BlockItem) item).getBlock();
isWood = block.getSoundType(block.getDefaultState(), world, pos, null) == SoundType.WOOD;
}
if (processingStarted) {
processingStarted = false;
if (!isWood)
AllSoundEvents.SAW_ACTIVATE_STONE.playAt(world, pos, 1, 1, true);
else
AllSoundEvents.SAW_ACTIVATE_WOOD.playAt(world, pos, 1, 1, true);
return;
}
AllSoundEvents.SAW_PROCESS.playAt(world, pos, 1, 1, true);
}
@Override
@ -123,9 +172,6 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity {
if (inventory.remainingTime > 0)
spawnParticles(inventory.getStackInSlot(0));
if (world.isRemote && !isVirtual())
return;
if (inventory.remainingTime < 20 && !inventory.appliedRecipe) {
applyRecipe();
inventory.appliedRecipe = true;
@ -320,7 +366,8 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity {
List<? extends IRecipe<?>> recipes = getRecipes();
boolean valid = !recipes.isEmpty();
int time = 100;
processingStarted = true;
int time = 50;
if (recipes.isEmpty()) {
inventory.remainingTime = inventory.recipeDuration = 10;
@ -367,14 +414,16 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity {
@Override
public void onBlockBroken(BlockState stateToBreak) {
super.onBlockBroken(stateToBreak);
TreeCutter.findTree(world, breakingPos).destroyBlocks(world, null, this::dropItemFromCutTree);
TreeCutter.findTree(world, breakingPos)
.destroyBlocks(world, null, this::dropItemFromCutTree);
}
public void dropItemFromCutTree(BlockPos pos, ItemStack stack) {
float distance = (float) Math.sqrt(pos.distanceSq(breakingPos));
Vector3d dropPos = VecHelper.getCenterOf(pos);
ItemEntity entity = new ItemEntity(world, dropPos.x, dropPos.y, dropPos.z, stack);
entity.setMotion(Vector3d.of(breakingPos.subtract(this.pos)).scale(distance / 20f));
entity.setMotion(Vector3d.of(breakingPos.subtract(this.pos))
.scale(distance / 20f));
world.addEntity(entity);
}
@ -385,7 +434,8 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity {
}
public static boolean isSawable(BlockState stateToBreak) {
if (stateToBreak.isIn(BlockTags.LOGS) || AllTags.AllBlockTags.SLIMY_LOGS.matches(stateToBreak) || stateToBreak.isIn(BlockTags.LEAVES))
if (stateToBreak.isIn(BlockTags.LOGS) || AllTags.AllBlockTags.SLIMY_LOGS.matches(stateToBreak)
|| stateToBreak.isIn(BlockTags.LEAVES))
return true;
Block block = stateToBreak.getBlock();
if (block instanceof BambooBlock)

View file

@ -1,5 +1,31 @@
package com.simibubi.create.content.contraptions.components.structureMovement;
import java.io.IOException;
import java.util.IdentityHashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.UUID;
import org.apache.commons.lang3.mutable.MutableInt;
import org.apache.commons.lang3.tuple.MutablePair;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllMovementBehaviours;
import com.simibubi.create.AllSoundEvents;
import com.simibubi.create.Create;
import com.simibubi.create.content.contraptions.components.actors.SeatEntity;
import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueEntity;
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.MountedContraption;
import com.simibubi.create.content.contraptions.components.structureMovement.sync.ContraptionSeatMappingPacket;
import com.simibubi.create.foundation.collision.Matrix3d;
import com.simibubi.create.foundation.networking.AllPackets;
import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.VecHelper;
import net.minecraft.block.material.PushReaction;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.Entity;
@ -29,27 +55,6 @@ import net.minecraftforge.fml.common.registry.IEntityAdditionalSpawnData;
import net.minecraftforge.fml.network.NetworkHooks;
import net.minecraftforge.fml.network.PacketDistributor;
import java.io.IOException;
import java.util.*;
import java.util.Map.Entry;
import org.apache.commons.lang3.mutable.MutableInt;
import org.apache.commons.lang3.tuple.MutablePair;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllMovementBehaviours;
import com.simibubi.create.Create;
import com.simibubi.create.content.contraptions.components.actors.SeatEntity;
import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueEntity;
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.MountedContraption;
import com.simibubi.create.content.contraptions.components.structureMovement.sync.ContraptionSeatMappingPacket;
import com.simibubi.create.foundation.collision.Matrix3d;
import com.simibubi.create.foundation.networking.AllPackets;
import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.VecHelper;
public abstract class AbstractContraptionEntity extends Entity implements IEntityAdditionalSpawnData {
private static final DataParameter<Boolean> STALLED =
@ -463,6 +468,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
removePassengers();
moveCollidedEntitiesOnDisassembly(transform);
AllSoundEvents.CONTRAPTION_DISASSEMBLE.playOnServer(world, getBlockPos());
}
private void moveCollidedEntitiesOnDisassembly(StructureTransform transform) {

View file

@ -119,7 +119,7 @@ public abstract class Contraption {
public Optional<List<AxisAlignedBB>> simplifiedEntityColliders;
public AbstractContraptionEntity entity;
public CombinedInvWrapper inventory;
public ContraptionInvWrapper inventory;
public CombinedTankWrapper fluidInventory;
public AxisAlignedBB bounds;
public BlockPos anchor;
@ -252,7 +252,7 @@ public abstract class Contraption {
.stream()
.map(MountedStorage::getItemHandler)
.collect(Collectors.toList());
inventory = new CombinedInvWrapper(Arrays.copyOf(list.toArray(), list.size(), IItemHandlerModifiable[].class));
inventory = new ContraptionInvWrapper(Arrays.copyOf(list.toArray(), list.size(), IItemHandlerModifiable[].class));
List<IFluidHandler> fluidHandlers = fluidStorage.values()
.stream()
@ -739,7 +739,7 @@ public abstract class Contraption {
for (MountedFluidStorage mountedStorage : fluidStorage.values())
fluidHandlers[index++] = mountedStorage.getFluidHandler();
inventory = new CombinedInvWrapper(handlers);
inventory = new ContraptionInvWrapper(handlers);
fluidInventory = new CombinedTankWrapper(fluidHandlers);
if (nbt.contains("BoundsFront"))
@ -1053,8 +1053,10 @@ public abstract class Contraption {
BlockFlags.IS_MOVING | BlockFlags.DEFAULT, 512);
}
for (int i = 0; i < inventory.getSlots(); i++)
inventory.setStackInSlot(i, ItemStack.EMPTY);
for (int i = 0; i < inventory.getSlots(); i++) {
if (!inventory.isSlotExternal(i))
inventory.setStackInSlot(i, ItemStack.EMPTY);
}
for (int i = 0; i < fluidInventory.getTanks(); i++)
fluidInventory.drain(fluidInventory.getFluidInTank(i), FluidAction.EXECUTE);
@ -1261,4 +1263,24 @@ public abstract class Contraption {
return pos.equals(te.getPos());
}
}
public static class ContraptionInvWrapper extends CombinedInvWrapper {
protected final boolean isExternal;
public ContraptionInvWrapper(boolean isExternal, IItemHandlerModifiable... itemHandler) {
super(itemHandler);
this.isExternal = isExternal;
}
public ContraptionInvWrapper(IItemHandlerModifiable... itemHandler) {
this(false, itemHandler);
}
public boolean isSlotExternal(int slot) {
if (isExternal)
return true;
IItemHandlerModifiable handler = getHandlerFromIndex(getIndexForSlot(slot));
return handler instanceof ContraptionInvWrapper && ((ContraptionInvWrapper) handler).isSlotExternal(slot);
}
}
}

View file

@ -34,6 +34,7 @@ public class ControlledContraptionEntity extends AbstractContraptionEntity {
protected Axis rotationAxis;
protected float prevAngle;
protected float angle;
protected float angleDelta;
public ControlledContraptionEntity(EntityType<?> type, World world) {
super(type, world);
@ -130,6 +131,7 @@ public class ControlledContraptionEntity extends AbstractContraptionEntity {
public void setPositionAndRotationDirect(double x, double y, double z, float yw, float pt, int inc, boolean t) {}
protected void tickContraption() {
angleDelta = angle - prevAngle;
prevAngle = angle;
tickActors();
@ -171,7 +173,7 @@ public class ControlledContraptionEntity extends AbstractContraptionEntity {
return false;
if (!VecHelper.onSameAxis(blockInfo.pos, BlockPos.ZERO, facing.getAxis()))
return false;
context.motion = Vector3d.of(facing.getDirectionVec()).scale(angle - prevAngle);
context.motion = Vector3d.of(facing.getDirectionVec()).scale(angleDelta / 360.0);
context.relativeMotion = context.motion;
int timer = context.data.getInt("StationaryTimer");
if (timer > 0) {

View file

@ -6,6 +6,7 @@ import java.util.List;
import com.simibubi.create.AllSoundEvents;
import com.simibubi.create.content.contraptions.base.GeneratingKineticTileEntity;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.components.structureMovement.AbstractContraptionEntity;
import com.simibubi.create.content.contraptions.components.structureMovement.AssemblyException;
import com.simibubi.create.content.contraptions.components.structureMovement.ControlledContraptionEntity;
@ -116,7 +117,7 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity
}
public float getAngularSpeed() {
float speed = (isWindmill() ? getGeneratedSpeed() : getSpeed()) * 3 / 10f;
float speed = convertToAngular(isWindmill() ? getGeneratedSpeed() : getSpeed());
if (getSpeed() == 0)
speed = 0;
if (world.isRemote) {
@ -216,14 +217,13 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity
movedContraption.getContraption()
.stop(world);
disassemble();
return;
}
return;
} else {
if (speed == 0 && !isWindmill())
return;
assemble();
}
return;
}
if (!running)

View file

@ -3,6 +3,7 @@ package com.simibubi.create.content.contraptions.components.structureMovement.ga
import static net.minecraft.state.properties.BlockStateProperties.FACING;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllSoundEvents;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.components.structureMovement.AssemblyException;
import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionCollider;
@ -107,6 +108,7 @@ public class GantryCarriageTileEntity extends KineticTileEntity implements IDisp
GantryContraptionEntity.create(world, contraption, shaftOrientation);
BlockPos anchor = pos;
movedContraption.setPosition(anchor.getX(), anchor.getY(), anchor.getZ());
AllSoundEvents.CONTRAPTION_ASSEMBLE.playOnServer(world, pos);
world.addEntity(movedContraption);
}

View file

@ -53,7 +53,7 @@ public class MountedContraption extends Contraption {
protected ContraptionType getType() {
return ContraptionType.MOUNTED;
}
@Override
public boolean assemble(World world, BlockPos pos) throws AssemblyException {
BlockState state = world.getBlockState(pos);
@ -61,17 +61,17 @@ public class MountedContraption extends Contraption {
return false;
if (!searchMovedStructure(world, pos, null))
return false;
Axis axis = state.get(RAIL_SHAPE) == RailShape.EAST_WEST ? Axis.X : Axis.Z;
addBlock(pos, Pair.of(new BlockInfo(pos, AllBlocks.MINECART_ANCHOR.getDefaultState()
.with(BlockStateProperties.HORIZONTAL_AXIS, axis), null), null));
if (blocks.size() == 1)
return false;
return true;
}
@Override
protected boolean addToInitialFrontier(World world, BlockPos pos, Direction direction, Queue<BlockPos> frontier) {
frontier.clear();
@ -149,18 +149,18 @@ public class MountedContraption extends Contraption {
protected boolean customBlockRemoval(IWorld world, BlockPos pos, BlockState state) {
return AllBlocks.MINECART_ANCHOR.has(state);
}
@Override
public boolean canBeStabilized(Direction facing, BlockPos localPos) {
return true;
}
@Override
public void addExtraInventories(Entity cart) {
if (!(cart instanceof IInventory))
return;
IItemHandlerModifiable handlerFromInv = new InvWrapper((IInventory) cart);
inventory = new CombinedInvWrapper(handlerFromInv, inventory);
IItemHandlerModifiable handlerFromInv = new ContraptionInvWrapper(true, new InvWrapper((IInventory) cart));
inventory = new ContraptionInvWrapper(handlerFromInv, inventory);
}
@Override

View file

@ -270,7 +270,7 @@ public abstract class LinearActuatorTileEntity extends KineticTileEntity
}
public float getMovementSpeed() {
float movementSpeed = MathHelper.clamp(getSpeed() / 512f, -.49f, .49f) + clientOffsetDiff / 2f;
float movementSpeed = MathHelper.clamp(convertToLinear(getSpeed()), -.49f, .49f) + clientOffsetDiff / 2f;
if (world.isRemote)
movementSpeed *= ServerSpeedProvider.get();
return movementSpeed;

View file

@ -84,7 +84,7 @@ public class MechanicalPistonTileEntity extends LinearActuatorTileEntity {
applyContraptionPosition();
forceMove = true;
world.addEntity(movedContraption);
AllSoundEvents.CONTRAPTION_ASSEMBLE.playOnServer(world, pos);
}
@ -118,7 +118,7 @@ public class MechanicalPistonTileEntity extends LinearActuatorTileEntity {
@Override
public float getMovementSpeed() {
float movementSpeed = MathHelper.clamp(getSpeed() / 512f, -.49f, .49f);
float movementSpeed = MathHelper.clamp(convertToLinear(getSpeed()), -.49f, .49f);
if (world.isRemote)
movementSpeed *= ServerSpeedProvider.get();
Direction pistonDirection = getBlockState().get(BlockStateProperties.FACING);

View file

@ -4,6 +4,8 @@ import com.simibubi.create.AllItems;
import com.simibubi.create.content.contraptions.components.structureMovement.train.capability.CapabilityMinecartController;
import com.simibubi.create.content.contraptions.components.structureMovement.train.capability.MinecartController;
import com.simibubi.create.foundation.utility.Iterate;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.minecart.AbstractMinecartEntity;
import net.minecraft.entity.player.PlayerEntity;
@ -78,6 +80,11 @@ public class MinecartCouplingItem extends Item {
if (event.getWorld().isRemote)
return true;
for (boolean forward : Iterate.trueAndFalse) {
if (controller.hasContraptionCoupling(forward))
couplings--;
}
CouplingHandler.status(player, "removed");
controller.decouple();
if (!player.isCreative())

View file

@ -175,7 +175,7 @@ public class HosePulleyTileEntity extends KineticTileEntity {
}
public float getMovementSpeed() {
float movementSpeed = getSpeed() / 512f;
float movementSpeed = convertToLinear(getSpeed());
if (world.isRemote)
movementSpeed *= ServerSpeedProvider.get();
return movementSpeed;

View file

@ -172,8 +172,8 @@ public class GoggleOverlayRenderer {
ms.pop();
}
private static final class TooltipScreen extends Screen {
private TooltipScreen(ITextComponent p_i51108_1_) {
public static final class TooltipScreen extends Screen {
public TooltipScreen(ITextComponent p_i51108_1_) {
super(p_i51108_1_);
}

View file

@ -4,7 +4,7 @@ import javax.annotation.Nonnull;
import com.simibubi.create.Create;
import com.simibubi.create.content.contraptions.components.fan.IAirCurrentSource;
import com.simibubi.create.content.logistics.InWorldProcessing;
import com.simibubi.create.content.contraptions.processing.InWorldProcessing;
import com.simibubi.create.foundation.utility.ColorHelper;
import com.simibubi.create.foundation.utility.VecHelper;

View file

@ -1,4 +1,4 @@
package com.simibubi.create.content.logistics;
package com.simibubi.create.content.contraptions.processing;
import static com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock.getHeatLevelOf;
@ -12,7 +12,6 @@ import javax.annotation.Nullable;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllRecipeTypes;
import com.simibubi.create.content.contraptions.components.fan.SplashingRecipe;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipe;
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock;
import com.simibubi.create.content.contraptions.relays.belt.transport.TransportedItemStack;
import com.simibubi.create.foundation.config.AllConfigs;
@ -37,9 +36,6 @@ import net.minecraft.nbt.CompoundNBT;
import net.minecraft.particles.ParticleTypes;
import net.minecraft.particles.RedstoneParticleData;
import net.minecraft.tags.BlockTags;
import net.minecraft.tileentity.BlastFurnaceTileEntity;
import net.minecraft.tileentity.FurnaceTileEntity;
import net.minecraft.tileentity.SmokerTileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.world.IBlockReader;
@ -50,13 +46,8 @@ import net.minecraftforge.items.wrapper.RecipeWrapper;
public class InWorldProcessing {
public static class SplashingInv extends RecipeWrapper {
public SplashingInv() {
super(new ItemStackHandler(1));
}
}
public static SplashingInv splashingInv = new SplashingInv();
private static final RecipeWrapper WRAPPER = new RecipeWrapper(new ItemStackHandler(1));
private static final SplashingWrapper SPLASHING_WRAPPER = new SplashingWrapper();
public enum Type {
SMOKING, BLASTING, SPLASHING, NONE
@ -104,16 +95,27 @@ public class InWorldProcessing {
private static boolean canProcess(ItemStack stack, Type type, World world) {
if (type == Type.BLASTING) {
return true;
WRAPPER.setInventorySlotContents(0, stack);
Optional<FurnaceRecipe> smeltingRecipe = world.getRecipeManager()
.getRecipe(IRecipeType.SMELTING, WRAPPER, world);
if (smeltingRecipe.isPresent())
return true;
WRAPPER.setInventorySlotContents(0, stack);
Optional<BlastingRecipe> blastingRecipe = world.getRecipeManager()
.getRecipe(IRecipeType.BLASTING, WRAPPER, world);
if (blastingRecipe.isPresent())
return true;
return !stack.getItem().isFireproof();
}
if (type == Type.SMOKING) {
// FIXME this does not need to be a TE
SmokerTileEntity smoker = new SmokerTileEntity();
smoker.setLocation(world, BlockPos.ZERO);
smoker.setInventorySlotContents(0, stack);
WRAPPER.setInventorySlotContents(0, stack);
Optional<SmokingRecipe> recipe = world.getRecipeManager()
.getRecipe(IRecipeType.SMOKING, smoker, world);
.getRecipe(IRecipeType.SMOKING, WRAPPER, world);
return recipe.isPresent();
}
@ -124,8 +126,8 @@ public class InWorldProcessing {
}
public static boolean isWashable(ItemStack stack, World world) {
splashingInv.setInventorySlotContents(0, stack);
Optional<SplashingRecipe> recipe = AllRecipeTypes.SPLASHING.find(splashingInv, world);
SPLASHING_WRAPPER.setInventorySlotContents(0, stack);
Optional<SplashingRecipe> recipe = AllRecipeTypes.SPLASHING.find(SPLASHING_WRAPPER, world);
return recipe.isPresent();
}
@ -179,38 +181,29 @@ public class InWorldProcessing {
private static List<ItemStack> process(ItemStack stack, Type type, World world) {
if (type == Type.SPLASHING) {
splashingInv.setInventorySlotContents(0, stack);
Optional<SplashingRecipe> recipe = AllRecipeTypes.SPLASHING.find(splashingInv, world);
SPLASHING_WRAPPER.setInventorySlotContents(0, stack);
Optional<SplashingRecipe> recipe = AllRecipeTypes.SPLASHING.find(SPLASHING_WRAPPER, world);
if (recipe.isPresent())
return applyRecipeOn(stack, recipe.get());
return null;
}
// FIXME this does not need to be a TE
SmokerTileEntity smoker = new SmokerTileEntity();
smoker.setLocation(world, BlockPos.ZERO);
smoker.setInventorySlotContents(0, stack);
WRAPPER.setInventorySlotContents(0, stack);
Optional<SmokingRecipe> smokingRecipe = world.getRecipeManager()
.getRecipe(IRecipeType.SMOKING, smoker, world);
.getRecipe(IRecipeType.SMOKING, WRAPPER, world);
if (type == Type.BLASTING) {
// FIXME this does not need to be a TE
FurnaceTileEntity furnace = new FurnaceTileEntity();
furnace.setLocation(world, BlockPos.ZERO);
furnace.setInventorySlotContents(0, stack);
Optional<FurnaceRecipe> smeltingRecipe = world.getRecipeManager()
.getRecipe(IRecipeType.SMELTING, furnace, world);
if (!smokingRecipe.isPresent()) {
WRAPPER.setInventorySlotContents(0, stack);
Optional<FurnaceRecipe> smeltingRecipe = world.getRecipeManager()
.getRecipe(IRecipeType.SMELTING, WRAPPER, world);
if (smeltingRecipe.isPresent())
return applyRecipeOn(stack, smeltingRecipe.get());
// FIXME this does not need to be a TE
BlastFurnaceTileEntity blastFurnace = new BlastFurnaceTileEntity();
blastFurnace.setLocation(world, BlockPos.ZERO);
blastFurnace.setInventorySlotContents(0, stack);
WRAPPER.setInventorySlotContents(0, stack);
Optional<BlastingRecipe> blastingRecipe = world.getRecipeManager()
.getRecipe(IRecipeType.BLASTING, blastFurnace, world);
.getRecipe(IRecipeType.BLASTING, WRAPPER, world);
if (blastingRecipe.isPresent())
return applyRecipeOn(stack, blastingRecipe.get());
@ -299,6 +292,7 @@ public class InWorldProcessing {
return stacks;
}
public static void spawnParticlesForProcessing(@Nullable World world, Vector3d vec, Type type) {
if (world == null || !world.isRemote)
return;
@ -325,4 +319,10 @@ public class InWorldProcessing {
}
}
public static class SplashingWrapper extends RecipeWrapper {
public SplashingWrapper() {
super(new ItemStackHandler(1));
}
}
}

View file

@ -99,7 +99,7 @@ public class GantryShaftTileEntity extends KineticTileEntity {
BlockState blockState = getBlockState();
if (!AllBlocks.GANTRY_SHAFT.has(blockState))
return 0;
return MathHelper.clamp(-getSpeed() / 512f, -.49f, .49f);
return MathHelper.clamp(convertToLinear(-getSpeed()), -.49f, .49f);
}
@Override

View file

@ -2,6 +2,7 @@ package com.simibubi.create.content.contraptions.relays.advanced.sequencer;
import java.util.Vector;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.foundation.utility.NBTHelper;
import net.minecraft.nbt.CompoundNBT;
@ -23,23 +24,27 @@ public class Instruction {
this.value = value;
}
int getDuration(float initialProgress, float speed) {
int offset = speed > 0 && speedModifier.value < 0 ? 1 : 2;
int getDuration(float currentProgress, float speed) {
speed *= speedModifier.value;
speed = Math.abs(speed);
double degreesPerTick = (speed * 360) / 60 / 20;
double metersPerTick = speed / 512;
double target = value - currentProgress;
switch (instruction) {
case TURN_ANGLE:
return (int) ((1 - initialProgress) * value / degreesPerTick + 1);
double degreesPerTick = KineticTileEntity.convertToAngular(speed);
int ticks = (int) (target / degreesPerTick);
double degreesErr = target - degreesPerTick*ticks;
return ticks + (degreesPerTick > 2*degreesErr ? 0 : 1);
case TURN_DISTANCE:
return (int) ((1 - initialProgress) * value / metersPerTick + offset);
double metersPerTick = KineticTileEntity.convertToLinear(speed);
int offset = speed > 0 && speedModifier.value < 0 ? 1 : 2;
return (int) (target / metersPerTick + offset);
case DELAY:
return (int) ((1 - initialProgress) * value + 1);
return (int) target;
case AWAIT:
return -1;
@ -52,6 +57,27 @@ public class Instruction {
return 0;
}
float getTickProgress(float speed) {
switch(instruction) {
case TURN_ANGLE:
return KineticTileEntity.convertToAngular(speed);
case TURN_DISTANCE:
return KineticTileEntity.convertToLinear(speed);
case DELAY:
return 1;
case AWAIT:
case END:
default:
break;
}
return 0;
}
int getSpeedModifier() {
switch (instruction) {

View file

@ -15,6 +15,7 @@ public class SequencedGearshiftTileEntity extends SplitShaftTileEntity {
Vector<Instruction> instructions;
int currentInstruction;
int currentInstructionDuration;
float currentInstructionProgress;
int timer;
boolean poweredPreviously;
@ -23,6 +24,7 @@ public class SequencedGearshiftTileEntity extends SplitShaftTileEntity {
instructions = Instruction.createDefault();
currentInstruction = -1;
currentInstructionDuration = -1;
currentInstructionProgress = 0;
timer = 0;
poweredPreviously = false;
}
@ -39,6 +41,7 @@ public class SequencedGearshiftTileEntity extends SplitShaftTileEntity {
return;
if (timer < currentInstructionDuration) {
timer++;
currentInstructionProgress += getInstruction(currentInstruction).getTickProgress(speed);
return;
}
run(currentInstruction + 1);
@ -59,8 +62,7 @@ public class SequencedGearshiftTileEntity extends SplitShaftTileEntity {
run(-1);
// Update instruction time with regards to new speed
float initialProgress = timer / (float) currentInstructionDuration;
currentInstructionDuration = instruction.getDuration(initialProgress, getTheoreticalSpeed());
currentInstructionDuration = instruction.getDuration(currentInstructionProgress, getTheoreticalSpeed());
timer = 0;
}
@ -109,6 +111,7 @@ public class SequencedGearshiftTileEntity extends SplitShaftTileEntity {
detachKinetics();
currentInstruction = -1;
currentInstructionDuration = -1;
currentInstructionProgress = 0;
timer = 0;
if (!world.isBlockPowered(pos))
world.setBlockState(pos, getBlockState().with(SequencedGearshiftBlock.STATE, 0), 3);
@ -120,6 +123,7 @@ public class SequencedGearshiftTileEntity extends SplitShaftTileEntity {
detachKinetics();
currentInstructionDuration = instruction.getDuration(0, getTheoreticalSpeed());
currentInstruction = instructionIndex;
currentInstructionProgress = 0;
timer = 0;
world.setBlockState(pos, getBlockState().with(SequencedGearshiftBlock.STATE, instructionIndex + 1), 3);
}
@ -133,6 +137,7 @@ public class SequencedGearshiftTileEntity extends SplitShaftTileEntity {
public void write(CompoundNBT compound, boolean clientPacket) {
compound.putInt("InstructionIndex", currentInstruction);
compound.putInt("InstructionDuration", currentInstructionDuration);
compound.putFloat("InstructionProgress", currentInstructionProgress);
compound.putInt("Timer", timer);
compound.putBoolean("PrevPowered", poweredPreviously);
compound.put("Instructions", Instruction.serializeAll(instructions));
@ -143,6 +148,7 @@ public class SequencedGearshiftTileEntity extends SplitShaftTileEntity {
protected void fromTag(BlockState state, CompoundNBT compound, boolean clientPacket) {
currentInstruction = compound.getInt("InstructionIndex");
currentInstructionDuration = compound.getInt("InstructionDuration");
currentInstructionProgress = compound.getFloat("InstructionProgress");
poweredPreviously = compound.getBoolean("PrevPowered");
timer = compound.getInt("Timer");
instructions = Instruction.deserializeAll(compound.getList("Instructions", NBT.TAG_COMPOUND));

View file

@ -2,8 +2,8 @@ package com.simibubi.create.content.contraptions.relays.belt.transport;
import java.util.Random;
import com.simibubi.create.content.contraptions.processing.InWorldProcessing;
import com.simibubi.create.content.contraptions.relays.belt.BeltHelper;
import com.simibubi.create.content.logistics.InWorldProcessing;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT;

View file

@ -3,11 +3,13 @@ package com.simibubi.create.content.curiosities.armor;
import com.simibubi.create.AllItems;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity;
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.minecraft.tags.FluidTags;
import net.minecraft.world.World;
import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
@ -34,7 +36,9 @@ public class DivingHelmetItem extends CopperArmorItem {
if (!AllItems.DIVING_HELMET.get()
.isWornBy(entity))
return;
if (!entity.isInWater())
if (!entity.areEyesInFluid(FluidTags.WATER))
return;
if (entity instanceof PlayerEntity && ((PlayerEntity) entity).isCreative())
return;
ItemStack backtank = ItemStack.EMPTY;

View file

@ -0,0 +1,23 @@
package com.simibubi.create.content.logistics;
import org.apache.commons.lang3.tuple.Pair;
import com.simibubi.create.content.logistics.RedstoneLinkNetworkHandler.Frequency;
import net.minecraft.util.math.BlockPos;
public interface IRedstoneLinkable {
public int getTransmittedStrength();
public void setReceivedStrength(int power);
public boolean isListening();
public boolean isAlive();
public Pair<Frequency, Frequency> getNetworkKey();
public BlockPos getLocation();
}

View file

@ -18,11 +18,11 @@ import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.world.IWorld;
import net.minecraft.world.World;
public class RedstoneLinkNetworkHandler {
static final Map<IWorld, Map<Pair<Frequency, Frequency>, Set<LinkBehaviour>>> connections = new IdentityHashMap<>();
static final Map<IWorld, Map<Pair<Frequency, Frequency>, Set<IRedstoneLinkable>>> connections =
new IdentityHashMap<>();
public static class Frequency {
public static final Frequency EMPTY = new Frequency(ItemStack.EMPTY);
@ -60,7 +60,7 @@ public class RedstoneLinkNetworkHandler {
if (this == obj)
return true;
return obj instanceof Frequency ? ((Frequency) obj).item == item && ((Frequency) obj).color == color
: false;
: false;
}
}
@ -75,45 +75,40 @@ public class RedstoneLinkNetworkHandler {
Create.LOGGER.debug("Removed Redstone Network Space for " + WorldHelper.getDimensionID(world));
}
public Set<LinkBehaviour> getNetworkOf(LinkBehaviour actor) {
Map<Pair<Frequency, Frequency>, Set<LinkBehaviour>> networksInWorld = networksIn(actor.getWorld());
public Set<IRedstoneLinkable> getNetworkOf(IWorld world, IRedstoneLinkable actor) {
Map<Pair<Frequency, Frequency>, Set<IRedstoneLinkable>> networksInWorld = networksIn(world);
Pair<Frequency, Frequency> key = actor.getNetworkKey();
if (!networksInWorld.containsKey(key))
networksInWorld.put(key, new LinkedHashSet<>());
return networksInWorld.get(key);
}
public void addToNetwork(LinkBehaviour actor) {
getNetworkOf(actor).add(actor);
updateNetworkOf(actor);
public void addToNetwork(IWorld world, IRedstoneLinkable actor) {
getNetworkOf(world, actor).add(actor);
updateNetworkOf(world, actor);
}
public void removeFromNetwork(LinkBehaviour actor) {
Set<LinkBehaviour> network = getNetworkOf(actor);
public void removeFromNetwork(IWorld world, IRedstoneLinkable actor) {
Set<IRedstoneLinkable> network = getNetworkOf(world, actor);
network.remove(actor);
if (network.isEmpty()) {
networksIn(actor.getWorld()).remove(actor.getNetworkKey());
networksIn(world).remove(actor.getNetworkKey());
return;
}
updateNetworkOf(actor);
updateNetworkOf(world, actor);
}
public void updateNetworkOf(LinkBehaviour actor) {
Set<LinkBehaviour> network = getNetworkOf(actor);
public void updateNetworkOf(IWorld world, IRedstoneLinkable actor) {
Set<IRedstoneLinkable> network = getNetworkOf(world, actor);
int power = 0;
for (Iterator<LinkBehaviour> iterator = network.iterator(); iterator.hasNext();) {
LinkBehaviour other = iterator.next();
if (other.tileEntity.isRemoved()) {
for (Iterator<IRedstoneLinkable> iterator = network.iterator(); iterator.hasNext();) {
IRedstoneLinkable other = iterator.next();
if (!other.isAlive()) {
iterator.remove();
continue;
}
World world = actor.getWorld();
if (!world.isBlockPresent(other.tileEntity.getPos())) {
iterator.remove();
continue;
}
if (world.getTileEntity(other.tileEntity.getPos()) != other.tileEntity) {
if (!world.isAreaLoaded(other.getLocation(), 0)) {
iterator.remove();
continue;
}
@ -124,28 +119,31 @@ public class RedstoneLinkNetworkHandler {
power = Math.max(other.getTransmittedStrength(), power);
}
// fix one-to-one loading order problem
if (actor.isListening()) {
actor.newPosition = true;
actor.updateReceiver(power);
if (actor instanceof LinkBehaviour) {
LinkBehaviour linkBehaviour = (LinkBehaviour) actor;
// fix one-to-one loading order problem
if (linkBehaviour.isListening()) {
linkBehaviour.newPosition = true;
linkBehaviour.setReceivedStrength(power);
}
}
for (LinkBehaviour other : network) {
for (IRedstoneLinkable other : network) {
if (other != actor && other.isListening() && withinRange(actor, other))
other.updateReceiver(power);
other.setReceivedStrength(power);
}
}
public static boolean withinRange(LinkBehaviour from, LinkBehaviour to) {
public static boolean withinRange(IRedstoneLinkable from, IRedstoneLinkable to) {
if (from == to)
return true;
return from.getPos().withinDistance(to.getPos(), AllConfigs.SERVER.logistics.linkRange.get());
return from.getLocation()
.withinDistance(to.getLocation(), AllConfigs.SERVER.logistics.linkRange.get());
}
public Map<Pair<Frequency, Frequency>, Set<LinkBehaviour>> networksIn(IWorld world) {
public Map<Pair<Frequency, Frequency>, Set<IRedstoneLinkable>> networksIn(IWorld world) {
if (!connections.containsKey(world)) {
Create.LOGGER.warn(
"Tried to Access unprepared network space of " + WorldHelper.getDimensionID(world));
Create.LOGGER.warn("Tried to Access unprepared network space of " + WorldHelper.getDimensionID(world));
return new HashMap<>();
}
return connections.get(world);

View file

@ -0,0 +1,55 @@
package com.simibubi.create.content.logistics.item;
import org.apache.commons.lang3.tuple.Pair;
import com.simibubi.create.content.logistics.RedstoneLinkNetworkHandler.Frequency;
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
import com.simibubi.create.foundation.tileEntity.behaviour.linked.LinkBehaviour;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketBuffer;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.items.ItemStackHandler;
public class LinkedControllerBindPacket extends LinkedControllerPacketBase {
private int button;
private BlockPos linkLocation;
public LinkedControllerBindPacket(int button, BlockPos linkLocation) {
this.button = button;
this.linkLocation = linkLocation;
}
public LinkedControllerBindPacket(PacketBuffer buffer) {
this.button = buffer.readVarInt();
this.linkLocation = buffer.readBlockPos();
}
@Override
public void write(PacketBuffer buffer) {
buffer.writeVarInt(button);
buffer.writeBlockPos(linkLocation);
}
@Override
protected void handle(ServerPlayerEntity player, ItemStack heldItem) {
ItemStackHandler frequencyItems = LinkedControllerItem.getFrequencyItems(heldItem);
LinkBehaviour linkBehaviour = TileEntityBehaviour.get(player.world, linkLocation, LinkBehaviour.TYPE);
if (linkBehaviour == null)
return;
Pair<Frequency, Frequency> pair = linkBehaviour.getNetworkKey();
frequencyItems.setStackInSlot(button * 2, pair.getKey()
.getStack()
.copy());
frequencyItems.setStackInSlot(button * 2 + 1, pair.getValue()
.getStack()
.copy());
heldItem.getTag()
.put("Items", frequencyItems.serializeNBT());
}
}

View file

@ -0,0 +1,229 @@
package com.simibubi.create.content.logistics.item;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Vector;
import org.lwjgl.glfw.GLFW;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllItems;
import com.simibubi.create.AllSoundEvents;
import com.simibubi.create.CreateClient;
import com.simibubi.create.content.contraptions.goggles.GoggleOverlayRenderer.TooltipScreen;
import com.simibubi.create.foundation.item.TooltipHelper;
import com.simibubi.create.foundation.networking.AllPackets;
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
import com.simibubi.create.foundation.tileEntity.behaviour.linked.LinkBehaviour;
import com.simibubi.create.foundation.utility.Lang;
import net.minecraft.client.GameSettings;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.player.ClientPlayerEntity;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.settings.KeyBinding;
import net.minecraft.client.util.InputMappings;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.shapes.VoxelShape;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TextFormatting;
public class LinkedControllerClientHandler {
enum Mode {
IDLE, ACTIVE, BIND
}
public static Mode MODE = Mode.IDLE;
public static int PACKET_RATE = 5;
public static Collection<Integer> currentlyPressed = new HashSet<>();
private static BlockPos selectedLocation = BlockPos.ZERO;
private static Vector<KeyBinding> controls;
private static int packetCooldown;
public static Vector<KeyBinding> getControls() {
if (controls == null) {
GameSettings gameSettings = Minecraft.getInstance().gameSettings;
controls = new Vector<>(6);
controls.add(gameSettings.keyBindForward);
controls.add(gameSettings.keyBindBack);
controls.add(gameSettings.keyBindLeft);
controls.add(gameSettings.keyBindRight);
controls.add(gameSettings.keyBindJump);
controls.add(gameSettings.keySneak);
}
return controls;
}
public static void toggleBindMode(BlockPos location) {
if (MODE == Mode.IDLE) {
MODE = Mode.BIND;
selectedLocation = location;
} else {
MODE = Mode.IDLE;
onReset();
}
}
public static void toggle() {
if (MODE == Mode.IDLE)
MODE = Mode.ACTIVE;
else {
MODE = Mode.IDLE;
onReset();
}
}
protected static void onReset() {
getControls().forEach(kb -> kb.setPressed(isActuallyPressed(kb)));
packetCooldown = 0;
selectedLocation = BlockPos.ZERO;
if (!currentlyPressed.isEmpty())
AllPackets.channel.sendToServer(new LinkedControllerInputPacket(currentlyPressed, false));
currentlyPressed.clear();
}
protected static boolean isActuallyPressed(KeyBinding kb) {
return InputMappings.isKeyDown(Minecraft.getInstance()
.getWindow()
.getHandle(),
kb.getKey()
.getKeyCode());
}
public static void tick() {
LinkedControllerItemRenderer.tick();
if (MODE == Mode.IDLE)
return;
if (packetCooldown > 0)
packetCooldown--;
Minecraft mc = Minecraft.getInstance();
ClientPlayerEntity player = mc.player;
ItemStack heldItem = player.getHeldItemMainhand();
if (mc.gameSettings.keyBindInventory.isPressed() || InputMappings.isKeyDown(mc.getWindow()
.getHandle(), GLFW.GLFW_KEY_ESCAPE)) {
MODE = Mode.IDLE;
onReset();
return;
}
if (!AllItems.LINKED_CONTROLLER.isIn(heldItem)) {
heldItem = player.getHeldItemOffhand();
if (!AllItems.LINKED_CONTROLLER.isIn(heldItem)) {
MODE = Mode.IDLE;
onReset();
return;
}
}
Vector<KeyBinding> controls = getControls();
Collection<Integer> pressedKeys = new HashSet<>();
for (int i = 0; i < controls.size(); i++) {
if (isActuallyPressed(controls.get(i)))
pressedKeys.add(i);
}
Collection<Integer> newKeys = new HashSet<>(pressedKeys);
Collection<Integer> releasedKeys = currentlyPressed;
newKeys.removeAll(releasedKeys);
releasedKeys.removeAll(pressedKeys);
if (MODE == Mode.ACTIVE) {
// Released Keys
if (!releasedKeys.isEmpty()) {
AllPackets.channel.sendToServer(new LinkedControllerInputPacket(releasedKeys, false));
AllSoundEvents.CONTROLLER_CLICK.playAt(player.world, player.getBlockPos(), 1f, .5f, true);
}
// Newly Pressed Keys
if (!newKeys.isEmpty()) {
AllPackets.channel.sendToServer(new LinkedControllerInputPacket(newKeys, true));
packetCooldown = PACKET_RATE;
AllSoundEvents.CONTROLLER_CLICK.playAt(player.world, player.getBlockPos(), 1f, .75f, true);
}
// Keepalive Pressed Keys
if (packetCooldown == 0) {
if (!pressedKeys.isEmpty()) {
AllPackets.channel.sendToServer(new LinkedControllerInputPacket(pressedKeys, true));
packetCooldown = PACKET_RATE;
}
}
}
if (MODE == Mode.BIND) {
VoxelShape shape = mc.world.getBlockState(selectedLocation)
.getShape(mc.world, selectedLocation);
if (!shape.isEmpty())
CreateClient.OUTLINER.showAABB("controller", shape.getBoundingBox()
.offset(selectedLocation))
.colored(0xB73C2D)
.lineWidth(1 / 16f);
for (Integer integer : newKeys) {
LinkBehaviour linkBehaviour = TileEntityBehaviour.get(mc.world, selectedLocation, LinkBehaviour.TYPE);
if (linkBehaviour != null) {
AllPackets.channel.sendToServer(new LinkedControllerBindPacket(integer, selectedLocation));
Lang.sendStatus(mc.player, "linked_controller.key_bound", controls.get(integer)
.getBoundKeyLocalizedText()
.getString());
}
MODE = Mode.IDLE;
break;
}
}
currentlyPressed = pressedKeys;
controls.forEach(kb -> kb.setPressed(false));
}
public static void renderOverlay(MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay,
float partialTicks) {
if (MODE != Mode.BIND)
return;
Minecraft mc = Minecraft.getInstance();
ms.push();
Screen tooltipScreen = new TooltipScreen(null);
tooltipScreen.init(mc, mc.getWindow()
.getScaledWidth(),
mc.getWindow()
.getScaledHeight());
Object[] keys = new Object[6];
Vector<KeyBinding> controls = getControls();
for (int i = 0; i < controls.size(); i++) {
KeyBinding keyBinding = controls.get(i);
keys[i] = keyBinding.getBoundKeyLocalizedText()
.getString();
}
List<ITextComponent> list = new ArrayList<>();
list.add(Lang.createTranslationTextComponent("linked_controller.bind_mode")
.formatted(TextFormatting.GOLD));
list.addAll(
TooltipHelper.cutTextComponent(Lang.createTranslationTextComponent("linked_controller.press_keybind", keys),
TextFormatting.GRAY, TextFormatting.GRAY));
int width = 0;
int height = list.size() * mc.fontRenderer.FONT_HEIGHT;
for (ITextComponent iTextComponent : list)
width = Math.max(width, mc.fontRenderer.getWidth(iTextComponent));
int x = (tooltipScreen.width / 3) - width / 2;
int y = tooltipScreen.height - height;
tooltipScreen.renderTooltip(ms, list, x, y);
ms.pop();
}
}

View file

@ -0,0 +1,152 @@
package com.simibubi.create.content.logistics.item;
import com.simibubi.create.foundation.gui.IClearableContainer;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.ClickType;
import net.minecraft.inventory.container.Container;
import net.minecraft.inventory.container.ContainerType;
import net.minecraft.inventory.container.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketBuffer;
import net.minecraftforge.items.ItemStackHandler;
import net.minecraftforge.items.SlotItemHandler;
public class LinkedControllerContainer extends Container implements IClearableContainer {
public PlayerEntity player;
protected PlayerInventory playerInventory;
public ItemStack mainItem;
public ItemStackHandler filterInventory;
public LinkedControllerContainer(ContainerType<?> type, int id, PlayerInventory inv, PacketBuffer extraData) {
this(type, id, inv, extraData.readItemStack());
}
public LinkedControllerContainer(ContainerType<?> type, int id, PlayerInventory inv, ItemStack filterItem) {
super(type, id);
player = inv.player;
playerInventory = inv;
this.mainItem = filterItem;
init();
}
protected void init() {
this.filterInventory = createFilterInventory();
// readData(mainItem);
addPlayerSlots();
addLinkSlots();
detectAndSendChanges();
}
@Override
public void clearContents() {
for (int i = 0; i < filterInventory.getSlots(); i++)
filterInventory.setStackInSlot(i, ItemStack.EMPTY);
}
protected void addPlayerSlots() {
int x = 22;
int y = 142;
for (int hotbarSlot = 0; hotbarSlot < 9; ++hotbarSlot)
this.addSlot(new Slot(playerInventory, hotbarSlot, x + hotbarSlot * 18, y + 58));
for (int row = 0; row < 3; ++row)
for (int col = 0; col < 9; ++col)
this.addSlot(new Slot(playerInventory, col + row * 9 + 9, x + col * 18, y + row * 18));
}
protected void addLinkSlots() {
int slot = 0;
int x = 12;
int y = 44;
for (int column = 0; column < 6; column++) {
for (int row = 0; row < 2; ++row)
addSlot(new SlotItemHandler(filterInventory, slot++, x, y + row * 18));
x += 24;
if (column == 3)
x += 11;
}
}
@Override
public boolean canMergeSlot(ItemStack stack, Slot slotIn) {
return canDragIntoSlot(slotIn);
}
@Override
public boolean canDragIntoSlot(Slot slotIn) {
return slotIn.inventory == playerInventory;
}
@Override
public boolean canInteractWith(PlayerEntity playerIn) {
return true;
}
@Override
public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, PlayerEntity player) {
if (slotId == playerInventory.currentItem && clickTypeIn != ClickType.THROW)
return ItemStack.EMPTY;
ItemStack held = playerInventory.getItemStack();
if (slotId < 36)
return super.slotClick(slotId, dragType, clickTypeIn, player);
if (clickTypeIn == ClickType.THROW)
return ItemStack.EMPTY;
int slot = slotId - 36;
if (clickTypeIn == ClickType.CLONE) {
if (player.isCreative() && held.isEmpty()) {
ItemStack stackInSlot = filterInventory.getStackInSlot(slot)
.copy();
stackInSlot.setCount(64);
playerInventory.setItemStack(stackInSlot);
return ItemStack.EMPTY;
}
return ItemStack.EMPTY;
}
if (held.isEmpty()) {
filterInventory.setStackInSlot(slot, ItemStack.EMPTY);
return ItemStack.EMPTY;
}
ItemStack insert = held.copy();
insert.setCount(1);
filterInventory.setStackInSlot(slot, insert);
return held;
}
protected ItemStackHandler createFilterInventory() {
return LinkedControllerItem.getFrequencyItems(mainItem);
}
@Override
public ItemStack transferStackInSlot(PlayerEntity playerIn, int index) {
if (index < 36) {
ItemStack stackToInsert = playerInventory.getStackInSlot(index);
for (int i = 0; i < filterInventory.getSlots(); i++) {
ItemStack stack = filterInventory.getStackInSlot(i);
if (stack.isEmpty()) {
ItemStack copy = stackToInsert.copy();
copy.setCount(1);
filterInventory.insertItem(i, copy, false);
break;
}
}
} else
filterInventory.extractItem(index - 36, 1, false);
return ItemStack.EMPTY;
}
@Override
public void onContainerClosed(PlayerEntity playerIn) {
super.onContainerClosed(playerIn);
mainItem.getOrCreateTag()
.put("Items", filterInventory.serializeNBT());
// saveData(filterItem);
}
}

View file

@ -0,0 +1,50 @@
package com.simibubi.create.content.logistics.item;
import java.util.ArrayList;
import java.util.Collection;
import java.util.UUID;
import java.util.stream.Collectors;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketBuffer;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
public class LinkedControllerInputPacket extends LinkedControllerPacketBase {
private Collection<Integer> activatedButtons;
private boolean press;
public LinkedControllerInputPacket(Collection<Integer> activatedButtons, boolean press) {
this.activatedButtons = activatedButtons;
this.press = press;
}
public LinkedControllerInputPacket(PacketBuffer buffer) {
activatedButtons = new ArrayList<>();
press = buffer.readBoolean();
int size = buffer.readVarInt();
for (int i = 0; i < size; i++)
activatedButtons.add(buffer.readVarInt());
}
@Override
public void write(PacketBuffer buffer) {
buffer.writeBoolean(press);
buffer.writeVarInt(activatedButtons.size());
activatedButtons.forEach(buffer::writeVarInt);
}
@Override
protected void handle(ServerPlayerEntity player, ItemStack heldItem) {
World world = player.getEntityWorld();
UUID uniqueID = player.getUniqueID();
BlockPos pos = player.getBlockPos();
LinkedControllerServerHandler.receivePressed(world, pos, uniqueID, activatedButtons.stream()
.map(i -> LinkedControllerItem.toFrequency(heldItem, i))
.collect(Collectors.toList()), press);
}
}

View file

@ -0,0 +1,116 @@
package com.simibubi.create.content.logistics.item;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllContainerTypes;
import com.simibubi.create.AllItems;
import com.simibubi.create.content.logistics.RedstoneLinkNetworkHandler;
import com.simibubi.create.content.logistics.RedstoneLinkNetworkHandler.Frequency;
import com.simibubi.create.foundation.utility.Couple;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.inventory.container.Container;
import net.minecraft.inventory.container.INamedContainerProvider;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemUseContext;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.util.ActionResult;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TranslationTextComponent;
import net.minecraft.world.World;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.fml.DistExecutor;
import net.minecraftforge.fml.network.NetworkHooks;
import net.minecraftforge.items.ItemStackHandler;
public class LinkedControllerItem extends Item implements INamedContainerProvider {
public LinkedControllerItem(Properties p_i48487_1_) {
super(p_i48487_1_);
}
@Override
public ActionResultType onItemUse(ItemUseContext ctx) {
PlayerEntity player = ctx.getPlayer();
if (player == null)
return ActionResultType.PASS;
World world = ctx.getWorld();
if (!player.isSneaking() && player.isAllowEdit()
&& AllBlocks.REDSTONE_LINK.has(world.getBlockState(ctx.getPos()))) {
if (world.isRemote)
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> this.toggleBindMode(ctx.getPos()));
player.getCooldownTracker()
.setCooldown(this, 2);
return ActionResultType.SUCCESS;
}
return onItemRightClick(world, player, ctx.getHand()).getType();
}
@Override
public ActionResult<ItemStack> onItemRightClick(World world, PlayerEntity player, Hand hand) {
ItemStack heldItem = player.getHeldItem(hand);
if (player.isSneaking() && hand == Hand.MAIN_HAND) {
if (!world.isRemote && player instanceof ServerPlayerEntity && player.isAllowEdit())
NetworkHooks.openGui((ServerPlayerEntity) player, this, buf -> {
buf.writeItemStack(heldItem);
});
return ActionResult.success(heldItem);
}
if (!player.isSneaking()) {
if (world.isRemote)
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> this::toggleActive);
player.getCooldownTracker()
.setCooldown(this, 2);
}
return ActionResult.pass(heldItem);
}
@OnlyIn(Dist.CLIENT)
private void toggleBindMode(BlockPos pos) {
LinkedControllerClientHandler.toggleBindMode(pos);
}
@OnlyIn(Dist.CLIENT)
private void toggleActive() {
LinkedControllerClientHandler.toggle();
}
public static ItemStackHandler getFrequencyItems(ItemStack stack) {
ItemStackHandler newInv = new ItemStackHandler(12);
if (AllItems.LINKED_CONTROLLER.get() != stack.getItem())
throw new IllegalArgumentException("Cannot get frequency items from non-controller: " + stack);
CompoundNBT invNBT = stack.getOrCreateChildTag("Items");
if (!invNBT.isEmpty())
newInv.deserializeNBT(invNBT);
return newInv;
}
public static Couple<RedstoneLinkNetworkHandler.Frequency> toFrequency(ItemStack controller, int slot) {
ItemStackHandler frequencyItems = getFrequencyItems(controller);
return Couple.create(Frequency.of(frequencyItems.getStackInSlot(slot * 2)),
Frequency.of(frequencyItems.getStackInSlot(slot * 2 + 1)));
}
@Override
public Container createMenu(int id, PlayerInventory inv, PlayerEntity player) {
ItemStack heldItem = player.getHeldItemMainhand();
return new LinkedControllerContainer(AllContainerTypes.LINKED_CONTROLLER.get(), id, inv, heldItem);
}
@Override
public ITextComponent getDisplayName() {
return new TranslationTextComponent(getTranslationKey());
}
}

View file

@ -0,0 +1,134 @@
package com.simibubi.create.content.logistics.item;
import java.util.Vector;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllItems;
import com.simibubi.create.content.logistics.item.LinkedControllerClientHandler.Mode;
import com.simibubi.create.foundation.block.render.CustomRenderedItemModelRenderer;
import com.simibubi.create.foundation.item.PartialItemModelRenderer;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
import com.simibubi.create.foundation.utility.MatrixStacker;
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
import com.simibubi.create.foundation.utility.animation.LerpedFloat.Chaser;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.model.ItemCameraTransforms;
import net.minecraft.client.renderer.model.ItemCameraTransforms.TransformType;
import net.minecraft.item.ItemStack;
import net.minecraft.util.HandSide;
import net.minecraft.util.math.MathHelper;
public class LinkedControllerItemRenderer extends CustomRenderedItemModelRenderer<LinkedControllerModel> {
static LerpedFloat equipProgress;
static Vector<LerpedFloat> buttons;
static {
equipProgress = LerpedFloat.linear()
.startWithValue(0);
buttons = new Vector<>(6);
for (int i = 0; i < 6; i++)
buttons.add(LerpedFloat.linear()
.startWithValue(0));
}
static void tick() {
boolean active = LinkedControllerClientHandler.MODE != Mode.IDLE;
equipProgress.chase(active ? 1 : 0, .2f, Chaser.EXP);
equipProgress.tickChaser();
if (!active)
return;
for (int i = 0; i < buttons.size(); i++) {
LerpedFloat lerpedFloat = buttons.get(i);
lerpedFloat.chase(LinkedControllerClientHandler.currentlyPressed.contains(i) ? 1 : 0, .4f, Chaser.EXP);
lerpedFloat.tickChaser();
}
}
@Override
protected void render(ItemStack stack, LinkedControllerModel model, PartialItemModelRenderer renderer,
ItemCameraTransforms.TransformType transformType, MatrixStack ms, IRenderTypeBuffer buffer, int light,
int overlay) {
float pt = AnimationTickHolder.getPartialTicks();
MatrixStacker msr = MatrixStacker.of(ms);
ms.push();
Minecraft mc = Minecraft.getInstance();
boolean rightHanded = mc.gameSettings.mainHand == HandSide.RIGHT;
TransformType mainHand =
rightHanded ? TransformType.FIRST_PERSON_RIGHT_HAND : TransformType.FIRST_PERSON_LEFT_HAND;
TransformType offHand =
rightHanded ? TransformType.FIRST_PERSON_LEFT_HAND : TransformType.FIRST_PERSON_RIGHT_HAND;
boolean active = false;
boolean noControllerInMain = !AllItems.LINKED_CONTROLLER.isIn(mc.player.getHeldItemMainhand());
if (transformType == mainHand || (transformType == offHand && noControllerInMain)) {
float equip = equipProgress.getValue(pt);
int handModifier = transformType == TransformType.FIRST_PERSON_LEFT_HAND ? -1 : 1;
msr.translate(0, equip / 4, equip / 4 * handModifier);
msr.rotateY(equip * -30 * handModifier);
msr.rotateZ(equip * -30);
active = true;
}
if (transformType == TransformType.GUI) {
if (stack == mc.player.getHeldItemMainhand())
active = true;
if (stack == mc.player.getHeldItemOffhand() && noControllerInMain)
active = true;
}
active &= LinkedControllerClientHandler.MODE != Mode.IDLE;
renderer.render(active ? model.getPartial("powered") : model.getOriginalModel(), light);
if (!active) {
ms.pop();
return;
}
IBakedModel button = model.getPartial("button");
float s = 1 / 16f;
float b = s * -.75f;
int index = 0;
if (LinkedControllerClientHandler.MODE == Mode.BIND) {
int i = (int) MathHelper.lerp((MathHelper.sin(AnimationTickHolder.getRenderTime() / 4f) + 1) / 2, 5, 15);
light = i << 20;
}
ms.push();
msr.translate(2 * s, 0, 8 * s);
button(renderer, ms, light, pt, button, b, index++);
msr.translate(4 * s, 0, 0);
button(renderer, ms, light, pt, button, b, index++);
msr.translate(-2 * s, 0, 2 * s);
button(renderer, ms, light, pt, button, b, index++);
msr.translate(0, 0, -4 * s);
button(renderer, ms, light, pt, button, b, index++);
ms.pop();
msr.translate(3 * s, 0, 3 * s);
button(renderer, ms, light, pt, button, b, index++);
msr.translate(2 * s, 0, 0);
button(renderer, ms, light, pt, button, b, index++);
ms.pop();
}
protected void button(PartialItemModelRenderer renderer, MatrixStack ms, int light, float pt, IBakedModel button,
float b, int index) {
ms.push();
ms.translate(0, b * buttons.get(index)
.getValue(pt), 0);
renderer.renderSolid(button, light);
ms.pop();
}
}

Some files were not shown because too many files have changed in this diff Show more