Merge branch 'Creators-of-Create:mc1.18/dev' into mc1.18/dev

This commit is contained in:
grosz-geri 2022-09-11 14:35:02 +02:00 committed by GitHub
commit fb68d4e436
Failed to generate hash of commit
361 changed files with 15161 additions and 7827 deletions

View file

@ -49,6 +49,7 @@ body:
label: Mod Version
description: The version of the mod you were using when the bug occured
options:
- "0.5.0d"
- "0.5.0c"
- "0.5.0b"
- "0.5.0a"

View file

@ -1,26 +0,0 @@
# This workflow will build a Java project with Gradle
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle
name: Java CI with Gradle
on:
push:
branches: [ mc1.15/dev ]
pull_request:
branches: [ mc1.15/dev ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew build

View file

@ -9,8 +9,8 @@
<br><br>
</h1>
<p>Welcome to Create, a mod offering a variety of tools and blocks for Building, Decoration and Aesthetic Automation.</p>
<p>The added elements of tech are designed to leave as many design choices to the player as possible. With Create, the game isn't played inside a bunch of UIs, it challenges you to setup contraptions of animated components working together in many possible arrangements.</p>
<p>Welcome to Create, a mod offering a variety of tools and blocks for Building, Decoration, and Aesthetic Automation.</p>
<p>The added elements of tech are designed to leave as many design choices to the player as possible. With Create, the game isn't played inside a bunch of UIs, it challenges you to set up contraptions of animated components working together in many possible arrangements.</p>
<p>Create's visual in-game documentation called 'Ponder' will guide you through all added mechanics and gadgets.</p>
<p>&nbsp;</p>
<p align="center"><a href="https://github.com/Creators-of-Create/Create/issues"><img src="https://i.imgur.com/qPmjSXy.png" width="160" /></a> <a href="https://www.youtube.com/channel/UCrKV2QTuyGcv4E3eSJpBiYA/playlists"><img src="https://i.imgur.com/L1bU9mr.png" width="160" /></a><a href="https://discord.gg/hmaD7Se"><img src="https://i.imgur.com/uf6V9ZX.png" width="160" /></a> <a href="https://github.com/Creators-of-Create/Create/wiki/Supporting-the-Project"><img src="https://i.imgur.com/fHQ45KR.png" width="227" /></a></p>

View file

@ -7,7 +7,7 @@ buildscript {
maven { url = 'https://maven.parchmentmc.org' }
}
dependencies {
classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: "${forgegradle_version}", changing: true
classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: "${forgegradle_version}", changing: false
classpath "org.spongepowered:mixingradle:${mixingradle_version}"
classpath "org.parchmentmc:librarian:${librarian_version}"
}
@ -128,6 +128,13 @@ repositories {
//location of the maven for curios api
url = "https://maven.theillusivec4.top/"
}
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
content {
includeGroup "maven.modrinth"
}
}
}
dependencies {
@ -161,6 +168,7 @@ dependencies {
// runtimeOnly fg.deobf("vazkii.quark:Quark:r2.0-212.984")
// runtimeOnly fg.deobf("slimeknights.mantle:Mantle:1.16.5-1.6.115")
// runtimeOnly fg.deobf("slimeknights.tconstruct:TConstruct:1.16.5-3.1.1.252")
// runtimeOnly fg.deobf("maven.modrinth:rubidium:0.5.3")
// https://discord.com/channels/313125603924639766/725850371834118214/910619168821354497
// Prevent Mixin annotation processor from getting into IntelliJ's annotation processor settings

View file

@ -4,14 +4,14 @@ org.gradle.jvmargs = -Xmx3G
org.gradle.daemon = false
# mod version info
mod_version = 0.5.0.c
mod_version = 0.5.0.d
artifact_minecraft_version = 1.18.2
minecraft_version = 1.18.2
forge_version = 40.1.60
# build dependency versions
forgegradle_version = 5.1.+
forgegradle_version = 5.1.53
mixingradle_version = 0.7-SNAPSHOT
mixin_version = 0.8.5
librarian_version = 1.+
@ -21,7 +21,7 @@ parchment_version = 2022.07.10
# dependency versions
registrate_version = MC1.18.2-1.1.3
flywheel_minecraft_version = 1.18.2
flywheel_version = 0.6.4-90
flywheel_version = 0.6.5-91
jei_minecraft_version = 1.18.2
jei_version = 9.7.0.209
curios_minecraft_version = 1.18.2

View file

@ -209,7 +209,7 @@ d13940ed213d7acbc6ebe3bdd21175ef89e4d613 assets/create/blockstates/encased_fluid
8a87e42262f3f161b0e6fe10b795ff00eccf768f assets/create/blockstates/exposed_copper_tile_stairs.json
fb41aa1a0828c9256b3f886fdcb55bb54252ba09 assets/create/blockstates/exposed_copper_tiles.json
7a2259a71fbbbb9491fc1e6a9c935bc9fef14042 assets/create/blockstates/fake_track.json
bb74442749b6bd688d45d919b541dbd66bbeb18a assets/create/blockstates/fluid_pipe.json
dd6dadfeb65c4a4c4d1dc92516c411355e90dcca assets/create/blockstates/fluid_pipe.json
f0eaab18e16c4f3f65ebf3b55b08f0dc445720fe assets/create/blockstates/fluid_tank.json
5408d92ab02af86539ac42971d4033545970bb3a assets/create/blockstates/fluid_valve.json
95b0775bf4d619ca5b0a42dbdc47c6f2c15d7b3d assets/create/blockstates/flywheel.json
@ -559,22 +559,23 @@ bf2b0310500213ff853c748c236eb5d01f61658e assets/create/blockstates/yellow_toolbo
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
f85edc574ee6de0de7693ffb031266643db6724a assets/create/lang/en_ud.json
7af10a14db169232d2bc4a564e7e2f204f7de8fc assets/create/lang/en_us.json
603af7f8a80b09da7ef5765f2aa863bbef1fc8ea assets/create/lang/unfinished/de_de.json
83e92f5c2516919b59b4d015814ce3f0cdaca948 assets/create/lang/unfinished/es_cl.json
ee47168049448ffa0959210d8f06b8f4b7219c85 assets/create/lang/unfinished/es_es.json
ceea8ef9caee6d0eafa27f0d6c959d732a544f52 assets/create/lang/unfinished/fr_fr.json
d4266c22c1265a2ef0784a13b223e4bb17ec11d0 assets/create/lang/unfinished/it_it.json
b17fe248508a55a47ab7b685ee72f5aec199bd48 assets/create/lang/unfinished/ja_jp.json
f642160ce3c6ffe0ded12c7e05a15cb6536c4def assets/create/lang/unfinished/ko_kr.json
b63513673554b0ed939ef66f65896be678e8c0d2 assets/create/lang/unfinished/nl_nl.json
c498bb7eb6f030b7b4934882e8bfc418dd8f6174 assets/create/lang/unfinished/pl_pl.json
b9e51c59ae50ae274d0c56f60803d8a397524547 assets/create/lang/unfinished/pt_br.json
bb1b327b6a0ffd6fb416f78a276b4269071d50c0 assets/create/lang/unfinished/pt_pt.json
823a9e54460d3840a089ea04ed8c97b9d62ca4d5 assets/create/lang/unfinished/ro_ro.json
eb144197fc255fef12b57c8aa82789d93737f144 assets/create/lang/unfinished/ru_ru.json
1fba9ab348aa9cbae212657aeec53f577aca19ab assets/create/lang/unfinished/zh_cn.json
fadbc9906e1859f62e451d3b89e210c9b8b7a4c4 assets/create/lang/unfinished/zh_tw.json
11fd391ac3015f4dace8138ab1ec423ee822c7b4 assets/create/lang/en_us.json
34ab109f0935b7d0a7dd306188e0bd3056a77f93 assets/create/lang/unfinished/de_de.json
b5487949ee53302706c15051157316bb60dfa070 assets/create/lang/unfinished/es_cl.json
6df40ff1c18bfb83a33bc17e4458feeeee058bf1 assets/create/lang/unfinished/es_es.json
bca24c29adf91e0ee09db39783c59fac843acb46 assets/create/lang/unfinished/fr_fr.json
d7b53a16d03be2f854dfba1e90e2a149c2abecbd assets/create/lang/unfinished/it_it.json
42a6713a509ecd676e7eae6e6492da1e20e79102 assets/create/lang/unfinished/ja_jp.json
38e01a060e0e468a51b1ca4f0bcbec203837ce04 assets/create/lang/unfinished/ko_kr.json
83d812a1003fa3f25a3c28bbf54bf93f583c594a assets/create/lang/unfinished/nl_nl.json
c8c60fe2405f37cce7309326fb62cdb9aa1b49ff assets/create/lang/unfinished/pl_pl.json
11b3809e9c4c3c61687f7789979fdbf2332fd6a4 assets/create/lang/unfinished/pt_br.json
dd52b8df6ea92c1218e398197a1cedae066b4e0e assets/create/lang/unfinished/pt_pt.json
954a947034232204bd415e4bfb6c59a3a448b604 assets/create/lang/unfinished/ro_ro.json
54a92b2d667b55675c694904752760b594ab1424 assets/create/lang/unfinished/ru_ru.json
2f084cc7b66fe4ea82f5ac3338a1245caf67c54d assets/create/lang/unfinished/uk_ua.json
82490ac29a0c35c07cde11c340634bf8b416b6a3 assets/create/lang/unfinished/zh_cn.json
426b06805f08ef3fed15f404e9637b2d7082d660 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
@ -1047,9 +1048,6 @@ abb8810d05128749bd7ffbbbd9d7c425886d8ef3 assets/create/models/block/fluid_pipe/l
eefb0e3b0ed7b6d5a99ff715d4aae42db4133343 assets/create/models/block/fluid_pipe/lu_x.json
a55a9ef109c4166c767459f88bce4f5c614fe13e assets/create/models/block/fluid_pipe/lu_y.json
d933b8a9e5d166cb6b250eb8f359180872daa276 assets/create/models/block/fluid_pipe/lu_z.json
8d2a247dcb09c4bc07c2c88ceaebc45f2f29ccaf assets/create/models/block/fluid_pipe/none_x.json
817252a6729ca8dc52753de47dbfe0b30c33dfa8 assets/create/models/block/fluid_pipe/none_y.json
ddba92d010016a0147ceecc30a30c9c1622d3daa assets/create/models/block/fluid_pipe/none_z.json
968fc1c2d555592134554bd16abb0b38629a76dd assets/create/models/block/fluid_pipe/r_x.json
c8fee17269f33f5e55ff0b019e535e9506dd964b assets/create/models/block/fluid_pipe/r_y.json
f63e221319b2703083e55f4034ed2d7b7a79a5da assets/create/models/block/fluid_pipe/r_z.json
@ -4229,7 +4227,7 @@ ace6ea5ed1828f4cbb1be0ae8ef10049bd4a07fc data/create/recipes/crushing/asurine.js
c0f2d4de4d00504607a8f3e2d1327d754835eebe data/create/recipes/crushing/deepslate_coal_ore.json
dedb4d7e958efa2218561686974ad9223848ec30 data/create/recipes/crushing/deepslate_copper_ore.json
2f9f26daadda2d291989bccd2b0ea5f85e3ef5ae data/create/recipes/crushing/deepslate_diamond_ore.json
ab79ae0d086ac1c90d2e802a2bbb7eb868e9ff8b data/create/recipes/crushing/deepslate_emerald_ore.json
ae3070fc3ae237192949ad06ebb8a4c157f7e832 data/create/recipes/crushing/deepslate_emerald_ore.json
ae0418f47a68c15247350e8b31fd24905f1bced8 data/create/recipes/crushing/deepslate_gold_ore.json
21e591d215993dcecd92db86e14334958198d7c7 data/create/recipes/crushing/deepslate_iron_ore.json
b85ba487f2867564c10a0870b55ce213558156bf data/create/recipes/crushing/deepslate_lapis_ore.json
@ -5361,7 +5359,7 @@ f6e2fb5725f3730d01fae4a2b1a04d11095eab5f data/create/recipes/scorchia_pillar_fro
66e8559dc15ce13042bd007247e2851022362b9e data/create/recipes/scorchia_pillar_from_stone_types_scorchia_stonecutting.json
2e0ecbd3619f080d0fc6fe48307c5a5bcc2e91b4 data/create/recipes/scoria_pillar_from_scoria_stonecutting.json
d6e16599de7424513e1457b07acb6370815d2bd7 data/create/recipes/scoria_pillar_from_stone_types_scoria_stonecutting.json
b49a0da57a179edc087eee224221ded22fd1be01 data/create/recipes/sequenced_assembly/precision_mechanism.json
b3fad45a09a05b285de31283a720b32e6fc63dc6 data/create/recipes/sequenced_assembly/precision_mechanism.json
de17d82738a5e0242eb3109fd2a75337160fc843 data/create/recipes/sequenced_assembly/sturdy_sheet.json
7610e0be633b1ade7ae39db3dbbfe1bd14aa333a data/create/recipes/sequenced_assembly/track.json
5e7648d55555c263539a2696b8d1f8d352a71dc9 data/create/recipes/small_andesite_brick_slab.json
@ -5628,18 +5626,17 @@ ac265a674626e0e832330086fd18fe0be37fc327 data/create/recipes/weathered_copper_ti
5942a571f79c40524bbf408775cf91de4715f2b6 data/create/recipes/weathered_copper_tile_stairs_from_weathered_copper_tiles_stonecutting.json
2d549ea56fb226c0e31e66c0391996093f8bece9 data/create/tags/blocks/brittle.json
d99d5c67bdffff60789a19bd51a5c5267c75e0a4 data/create/tags/blocks/casing.json
418c6da531d6206e3cbe4049dce3db23c4270bed data/create/tags/blocks/fan_heaters.json
443f75adbf3d2f6fb0aad4b344372669470065b8 data/create/tags/blocks/fan_transparent.json
6e5d3b2123fbb00e7f439c091623619502551bca data/create/tags/blocks/non_movable.json
10781e8cfcbb3486327aace3aa00e437fb44b331 data/create/tags/blocks/ore_override_stone.json
197ed7ee3b284045c005011d28c38ac5b2e44d8c data/create/tags/blocks/passive_boiler_heaters.json
418c6da531d6206e3cbe4049dce3db23c4270bed data/create/tags/blocks/passive_boiler_heaters.json
74f4ba5f6f61c30e27947c6fb4557e888d018285 data/create/tags/blocks/safe_nbt.json
6cdeeac1689f7b5bfd9bc40b462143d8eaf3ad0b data/create/tags/blocks/seats.json
d063e12c9ef75f39518c6d129ea35d833464d547 data/create/tags/blocks/toolboxes.json
50936b211d94167a35ec78c89954082a336b6269 data/create/tags/blocks/valve_handles.json
eac71740fb12bdb38b5dfaa2268613d7ba82b809 data/create/tags/blocks/windmill_sails.json
74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/create/tags/blocks/windowable.json
893a01e6004d6d8272bd1658e98da88bb572ee57 data/create/tags/blocks/wrench_pickup.json
c71f8ee0103d0c1b0d1b0727f1ecdc4d1999f1f6 data/create/tags/blocks/wrench_pickup.json
a8bdc387cfa6296ebcc4af14323e2ddb632234dc data/create/tags/fluids/bottomless/allow.json
74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/create/tags/fluids/bottomless/deny.json
74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/create/tags/items/blaze_burner_fuel/regular.json
@ -5705,7 +5702,7 @@ cc82188fe8d986f4457301ed4f75ae833d263601 data/forge/tags/items/nuggets/brass.jso
6eec92869baa44d3ac53aec6a7a92c15147b59f0 data/forge/tags/items/ores/zinc.json
9fc688d8fac1033c7b8f4b8de1138e56d2faf527 data/forge/tags/items/ores_in_ground/deepslate.json
d5ea262a0f5fb210612d22521818e26cf08e591a data/forge/tags/items/ores_in_ground/stone.json
5d5ec04a61ff2b1ad19210e2859a9c96cc246ef8 data/forge/tags/items/plates.json
e32b78851bc4fce0745d8b72c85cbd4e89e8c221 data/forge/tags/items/plates.json
39f0d70ec10597e85df7c4783bbc5e0e4a5ffb80 data/forge/tags/items/plates/brass.json
c3dab5fe379bc1b7b10d4a0ba7009eee1b75a27c data/forge/tags/items/plates/copper.json
fb9bfb4c84ed9cf2da8c4b2fbc4cd4d9f37d3016 data/forge/tags/items/plates/gold.json

View file

@ -1,53 +1,5 @@
{
"multipart": [
{
"when": {
"down": "true"
},
"apply": {
"model": "create:block/fluid_pipe/connection/down"
}
},
{
"when": {
"up": "true"
},
"apply": {
"model": "create:block/fluid_pipe/connection/up"
}
},
{
"when": {
"north": "true"
},
"apply": {
"model": "create:block/fluid_pipe/connection/north"
}
},
{
"when": {
"south": "true"
},
"apply": {
"model": "create:block/fluid_pipe/connection/south"
}
},
{
"when": {
"west": "true"
},
"apply": {
"model": "create:block/fluid_pipe/connection/west"
}
},
{
"when": {
"east": "true"
},
"apply": {
"model": "create:block/fluid_pipe/connection/east"
}
},
{
"when": {
"up": "true",
@ -158,17 +110,6 @@
"model": "create:block/fluid_pipe/r_x"
}
},
{
"when": {
"up": "false",
"south": "false",
"north": "false",
"down": "false"
},
"apply": {
"model": "create:block/fluid_pipe/none_x"
}
},
{
"when": {
"south": "true",
@ -279,17 +220,6 @@
"model": "create:block/fluid_pipe/r_y"
}
},
{
"when": {
"south": "false",
"east": "false",
"west": "false",
"north": "false"
},
"apply": {
"model": "create:block/fluid_pipe/none_y"
}
},
{
"when": {
"up": "true",
@ -399,17 +329,6 @@
"apply": {
"model": "create:block/fluid_pipe/r_z"
}
},
{
"when": {
"up": "false",
"east": "false",
"west": "false",
"down": "false"
},
"apply": {
"model": "create:block/fluid_pipe/none_z"
}
}
]
}

View file

@ -666,28 +666,28 @@
"_": "->------------------------] Advancements [------------------------<-",
"advancement.create.root": "Welcome to Create",
"advancement.create.root.desc": "Here be Contraptions",
"advancement.create.root.desc": "Here Be Contraptions",
"advancement.create.andesite_alloy": "Sturdier Rocks",
"advancement.create.andesite_alloy.desc": "Obtain some Andesite Alloy, Create's most important resource",
"advancement.create.andesite_casing": "The Andesite Age",
"advancement.create.andesite_casing.desc": "Apply Andesite Alloy to wood creating a basic casing for your machines",
"advancement.create.mechanical_press": "Bonk",
"advancement.create.andesite_casing.desc": "Apply Andesite Alloy to stripped wood, creating a basic casing for your machines",
"advancement.create.mechanical_press": "Bonk!",
"advancement.create.mechanical_press.desc": "Create some sheets in a Mechanical Press",
"advancement.create.encased_fan": "Wind maker",
"advancement.create.encased_fan.desc": "Place and activate an Encased Fan",
"advancement.create.encased_fan": "Wind Maker",
"advancement.create.encased_fan.desc": "Place and power an Encased Fan",
"advancement.create.fan_processing": "Processing by Particle",
"advancement.create.fan_processing.desc": "Use an Encased Fan to process materials",
"advancement.create.saw_processing": "Workshop's most feared",
"advancement.create.saw_processing": "Workshop's Most Feared",
"advancement.create.saw_processing.desc": "Use an upright Mechanical Saw to process materials",
"advancement.create.compacting": "Compactification",
"advancement.create.compacting.desc": "Use a Press and a Basin to create less items from more items",
"advancement.create.compacting.desc": "Use a Mechanical Press and a Basin to create fewer items from more",
"advancement.create.belt": "Kelp Drive",
"advancement.create.belt.desc": "Connect two Shafts with a Mechanical Belt",
"advancement.create.funnel": "Airport Aesthetic",
"advancement.create.funnel.desc": "Extract or insert items into a container using a Funnel",
"advancement.create.chute": "Vertical Logistics",
"advancement.create.chute.desc": "Transport some items by Chute",
"advancement.create.mechanical_mixer": "Mixing it up",
"advancement.create.mechanical_mixer": "Mixing It Up",
"advancement.create.mechanical_mixer.desc": "Combine ingredients in a Mechanical Mixer",
"advancement.create.burner": "Sentient Fireplace",
"advancement.create.burner.desc": "Obtain a Blaze Burner",
@ -702,25 +702,25 @@
"advancement.create.super_glue": "Area of Connect",
"advancement.create.super_glue.desc": "Super Glue some blocks into a group",
"advancement.create.contraption_actors": "Moving with Purpose",
"advancement.create.contraption_actors.desc": "Create a contraption with drills, saws or harvesters on board",
"advancement.create.portable_storage_interface": "Drive-by exchange",
"advancement.create.portable_storage_interface.desc": "Use a Portable Storage Interface to take or insert items into a contraption",
"advancement.create.wrench_goggles": "Kitted out",
"advancement.create.wrench_goggles.desc": "Equip Engineer's goggles and a Wrench",
"advancement.create.contraption_actors.desc": "Create a Contraption with drills, saws, or harvesters on board",
"advancement.create.portable_storage_interface": "Drive-By Exchange",
"advancement.create.portable_storage_interface.desc": "Use a Portable Storage Interface to take or insert items into a Contraption",
"advancement.create.wrench_goggles": "Kitted Out",
"advancement.create.wrench_goggles.desc": "Equip Engineer's Goggles and a Wrench",
"advancement.create.stressometer": "Stress for Nerds",
"advancement.create.stressometer.desc": "Get an exact readout with the help of Goggles and a Stressometer",
"advancement.create.cuckoo_clock": "Is it Time?",
"advancement.create.stressometer.desc": "Get an exact readout with the help of Engineer's Goggles and a Stressometer",
"advancement.create.cuckoo_clock": "Is It Time?",
"advancement.create.cuckoo_clock.desc": "Witness your Cuckoo Clock announce bedtime",
"advancement.create.windmill_maxed": "A Strong Breeze",
"advancement.create.windmill_maxed.desc": "Assemble a windmill of maximum strength",
"advancement.create.ejector_maxed": "Springboard Champion",
"advancement.create.ejector_maxed.desc": "Get launched for more than 30 blocks by a Weighted Ejector",
"advancement.create.ejector_maxed.desc": "Get launched more than 30 blocks by a Weighted Ejector",
"advancement.create.pulley_maxed": "Rope to Nowhere",
"advancement.create.pulley_maxed.desc": "Extend a Rope Pulley over 200 blocks deep",
"advancement.create.cart_pickup": "Strong Arms",
"advancement.create.cart_pickup.desc": "Pick up a Minecart Contraption with at least 200 attached blocks",
"advancement.create.anvil_plough": "Blacksmith Artillery",
"advancement.create.anvil_plough.desc": "Launch an Anvil with Mechanical ploughs",
"advancement.create.anvil_plough.desc": "Launch an Anvil with Mechanical Ploughs",
"advancement.create.lava_wheel_00000": "Magma Wheel",
"advancement.create.lava_wheel_00000.desc": "This shouldn't have worked§7\n(Hidden Advancement)",
"advancement.create.hand_crank_000": "Workout Session",
@ -729,62 +729,62 @@
"advancement.create.belt_funnel_kiss.desc": "Make two Belt-mounted Funnels kiss§7\n(Hidden Advancement)",
"advancement.create.stressometer_maxed": "Perfectly Stressed",
"advancement.create.stressometer_maxed.desc": "Get a 100% readout from a Stressometer§7\n(Hidden Advancement)",
"advancement.create.copper": "More Sturdier Rocks",
"advancement.create.copper.desc": "Amass some Copper for your exploits in Fluid Manipulation",
"advancement.create.copper": "Cuprum Bokum",
"advancement.create.copper.desc": "Amass some Copper Ingots for your exploits in fluid manipulation",
"advancement.create.copper_casing": "The Copper Age",
"advancement.create.copper_casing.desc": "Apply Copper Ingots to wood creating a waterproof casing for your machines",
"advancement.create.copper_casing.desc": "Apply Copper Ingots to stripped wood, creating a waterproof casing for your machines",
"advancement.create.spout": "Sploosh",
"advancement.create.spout.desc": "Watch a fluid containing item be filled using a Spout",
"advancement.create.spout.desc": "Watch a fluid-containing item be filled by a Spout",
"advancement.create.drain": "Tumble Draining",
"advancement.create.drain.desc": "Watch a fluid containing item be emptied by an Item Drain",
"advancement.create.drain.desc": "Watch a fluid-containing item be emptied by an Item Drain",
"advancement.create.steam_engine": "The Powerhouse",
"advancement.create.steam_engine.desc": "Use a Steam engine to generate torque",
"advancement.create.steam_engine.desc": "Use a Steam Engine to generate torque",
"advancement.create.steam_whistle": "Voice of an Angel",
"advancement.create.steam_whistle.desc": "Activate a Steam Whistle",
"advancement.create.backtank": "Pressure to Go",
"advancement.create.backtank.desc": "Create a copper backtank and make it accumulate Air Pressure",
"advancement.create.backtank.desc": "Create a Copper Backtank and make it accumulate air pressure",
"advancement.create.diving_suit": "Ready for the Depths",
"advancement.create.diving_suit.desc": "Equip a diving helmet together with your backtank and jump into water",
"advancement.create.diving_suit.desc": "Equip a Diving Helmet and a Copper Backtank, then jump into water",
"advancement.create.mechanical_pump_0": "Under Pressure",
"advancement.create.mechanical_pump_0.desc": "Place and power a Mechanical Pump",
"advancement.create.glass_pipe": "Flow Discovery",
"advancement.create.glass_pipe.desc": "Use your Wrench on a pipe that contains a fluid",
"advancement.create.water_supply": "Puddle Collector",
"advancement.create.water_supply.desc": "Use the pulling end of a pipe or pump to collect a water block",
"advancement.create.water_supply.desc": "Use the pulling end of a Fluid Pipe or Mechanical Pump to collect water",
"advancement.create.hose_pulley": "Industrial Spillage",
"advancement.create.hose_pulley.desc": "Lower a Hose Pulley and watch it drain or fill a body of fluid",
"advancement.create.chocolate_bucket": "A World of Imagination",
"advancement.create.chocolate_bucket.desc": "Obtain a Bucket of Molten Chocolate",
"advancement.create.chocolate_bucket.desc": "Obtain a bucket of molten chocolate",
"advancement.create.honey_drain": "Autonomous Bee-Keeping",
"advancement.create.honey_drain.desc": "Use pipes to pull honey from a Bee Nest or Bee House",
"advancement.create.honey_drain.desc": "Use pipes to pull honey from a Bee Nest or Beehive",
"advancement.create.hose_pulley_lava": "Tapping the Mantle",
"advancement.create.hose_pulley_lava.desc": "Pump from a body of Lava large enough to be considered infinite",
"advancement.create.hose_pulley_lava.desc": "Pump from a body of lava large enough to be considered infinite",
"advancement.create.steam_engine_maxed": "Full Steam",
"advancement.create.steam_engine_maxed.desc": "Run a boiler at the maximum level of power",
"advancement.create.foods": "Balanced Diet",
"advancement.create.foods.desc": "Create Chocolate Berries, a Honeyed Apple and a Sweet Roll; all from the same Spout",
"advancement.create.foods.desc": "Create Chocolate Glazed Berries, a Honeyed Apple, and a Sweet Roll all from the same Spout",
"advancement.create.diving_suit_lava": "Swimming with the Striders",
"advancement.create.diving_suit_lava.desc": "Attempt to take a dive in lava with your Copper Diving Gear§7\n(Hidden Advancement)",
"advancement.create.diving_suit_lava.desc": "Attempt to take a dive in lava with your diving gear§7\n(Hidden Advancement)",
"advancement.create.chained_drain": "On a Roll",
"advancement.create.chained_drain.desc": "Watch an Item move across a row of Item Drains§7\n(Hidden Advancement)",
"advancement.create.cross_streams": "Don't cross the Streams!",
"advancement.create.chained_drain.desc": "Watch an item move across a row of Item Drains§7\n(Hidden Advancement)",
"advancement.create.cross_streams": "Don't Cross the Streams!",
"advancement.create.cross_streams.desc": "Watch two fluids meet in your pipe network§7\n(Hidden Advancement)",
"advancement.create.pipe_organ": "The Pipe Organ",
"advancement.create.pipe_organ.desc": "Attach 12 uniquely pitched Steam Whistles to a single fluid tank§7\n(Hidden Advancement)",
"advancement.create.pipe_organ.desc": "Attach 12 uniquely pitched Steam Whistles to a single Fluid Tank§7\n(Hidden Advancement)",
"advancement.create.brass": "Real Alloys",
"advancement.create.brass.desc": "Create some Brass from Copper and Zinc ingots in your Blaze-powered Mixer",
"advancement.create.brass.desc": "Create Brass Ingots by alloying Copper and Zinc Ingots in your Blaze-heated Mechanical Mixer",
"advancement.create.brass_casing": "The Brass Age",
"advancement.create.brass_casing.desc": "Apply Brass Ingots to wood creating a casing for more sophisticated machines",
"advancement.create.brass_casing.desc": "Apply Brass Ingots to stripped wood, creating a casing for more sophisticated machines",
"advancement.create.rose_quartz": "Pink Diamonds",
"advancement.create.rose_quartz.desc": "Polish some Rose Quartz",
"advancement.create.deployer": "Artificial Intelligence",
"advancement.create.deployer.desc": "Place and activate a Deployer, the perfect reflection of yourself",
"advancement.create.deployer.desc": "Place and power a Deployer, the perfect reflection of yourself",
"advancement.create.precision_mechanism": "Complex Curiosities",
"advancement.create.precision_mechanism.desc": "Assemble a Precision Mechanism",
"advancement.create.speed_controller": "Engineers Hate Him!",
"advancement.create.speed_controller.desc": "Fine tune your contraption with a Rotation Speed Controller",
"advancement.create.speed_controller.desc": "Fine-tune your Contraption with a Rotation Speed Controller",
"advancement.create.mechanical_arm": "Busy Hands",
"advancement.create.mechanical_arm.desc": "Watch your Mechanical Arm transport its first Item",
"advancement.create.mechanical_arm.desc": "Watch your Mechanical Arm transport its first item",
"advancement.create.mechanical_crafter": "Automated Assembly",
"advancement.create.mechanical_crafter.desc": "Place and power some Mechanical Crafters",
"advancement.create.crushing_wheel": "A Pair of Giants",
@ -794,7 +794,7 @@
"advancement.create.clockwork_bearing": "Contraption O'Clock",
"advancement.create.clockwork_bearing.desc": "Assemble a structure mounted on a Clockwork Bearing",
"advancement.create.display_link": "Big Data",
"advancement.create.display_link.desc": "Use a Display link to visualise information",
"advancement.create.display_link.desc": "Use a Display Link to visualise information",
"advancement.create.potato_cannon": "Fwoomp!",
"advancement.create.potato_cannon.desc": "Defeat an enemy with your Potato Cannon",
"advancement.create.extendo_grip": "Boioioing!",
@ -803,54 +803,54 @@
"advancement.create.linked_controller.desc": "Activate a Redstone Link using a Linked Controller",
"advancement.create.arm_blaze_burner": "Combust-o-Tron",
"advancement.create.arm_blaze_burner.desc": "Instruct a Mechanical Arm to feed your Blaze Burner",
"advancement.create.crusher_maxed_0000": "Crushing it",
"advancement.create.crusher_maxed_0000.desc": "Operate a Pair of Crushing wheels at max speed",
"advancement.create.crusher_maxed_0000": "Crushing It",
"advancement.create.crusher_maxed_0000.desc": "Operate a pair of Crushing Wheels at maximum speed",
"advancement.create.arm_many_targets": "Organize-o-Tron",
"advancement.create.arm_many_targets.desc": "Program a Mechanical Arm with ten or more output locations",
"advancement.create.arm_many_targets.desc": "Program a Mechanical Arm with 10 or more output locations",
"advancement.create.potato_cannon_collide": "Veggie Fireworks",
"advancement.create.potato_cannon_collide.desc": "Cause potato cannon projectiles of different types to collide with each other",
"advancement.create.potato_cannon_collide.desc": "Cause Potato Cannon projectiles of different types to collide with each other",
"advancement.create.self_deploying": "Self-Driving Cart",
"advancement.create.self_deploying.desc": "Create a Minecart Contraption that places tracks in front of itself",
"advancement.create.fist_bump": "Pound It, Bro!",
"advancement.create.fist_bump.desc": "Make two Deployers fist-bump§7\n(Hidden Advancement)",
"advancement.create.crafter_lazy_000": "Desperate Measures",
"advancement.create.crafter_lazy_000.desc": "Drastically slow down a Mechanical Crafter to procrastinate on proper infrastructure§7\n(Hidden Advancement)",
"advancement.create.extendo_grip_dual": "To full Extent",
"advancement.create.extendo_grip_dual.desc": "Dual wield Extendo Grips for super-human reach§7\n(Hidden Advancement)",
"advancement.create.extendo_grip_dual": "To Full Extent",
"advancement.create.extendo_grip_dual.desc": "Dual-wield Extendo Grips for superhuman reach§7\n(Hidden Advancement)",
"advancement.create.musical_arm": "DJ Mechanico",
"advancement.create.musical_arm.desc": "Watch a Mechanical Arm operate your Jukebox§7\n(Hidden Advancement)",
"advancement.create.sturdy_sheet": "The Sturdiest Rocks",
"advancement.create.sturdy_sheet.desc": "Assemble a Sturdy Sheet from refining crushed Obsidian",
"advancement.create.sturdy_sheet.desc": "Assemble a Sturdy Sheet by refining Powdered Obsidian",
"advancement.create.train_casing_00": "The Logistical Age",
"advancement.create.train_casing_00.desc": "Use Sturdy Sheets to create a Casing for Railway Components",
"advancement.create.train_casing_00.desc": "Use Sturdy Sheets to create a casing for railway components",
"advancement.create.train": "All Aboard!",
"advancement.create.train.desc": "Assemble your first Train",
"advancement.create.conductor": "Conductor Instructor",
"advancement.create.conductor.desc": "Instruct a Train driver with a Schedule",
"advancement.create.conductor.desc": "Instruct a Train driver with a Train Schedule",
"advancement.create.track_signal": "Traffic Control",
"advancement.create.track_signal.desc": "Place a Train Signal",
"advancement.create.display_board_0": "Dynamic Timetables",
"advancement.create.display_board_0.desc": "Forecast a Train's arrival on your Display Board with the help of Display Links",
"advancement.create.track_0": "A new Gauge",
"advancement.create.track_0": "A New Gauge",
"advancement.create.track_0.desc": "Obtain some Train Tracks",
"advancement.create.train_whistle": "Choo choo!",
"advancement.create.train_whistle": "Choo Choo!",
"advancement.create.train_whistle.desc": "Assemble a Steam Whistle to your Train and activate it while driving",
"advancement.create.train_portal": "Dimensional Commuter",
"advancement.create.train_portal.desc": "Ride a train through a Nether Portal",
"advancement.create.train_portal.desc": "Ride a Train through a Nether portal",
"advancement.create.track_crafting_factory": "Track Factory",
"advancement.create.track_crafting_factory.desc": "Produce more than 1000 train tracks in the same Mechanical Press",
"advancement.create.track_crafting_factory.desc": "Produce more than 1000 Train Tracks with the same Mechanical Press",
"advancement.create.long_bend": "The Longest Bend",
"advancement.create.long_bend.desc": "Create a Curved track section that spans more than 30 blocks in length",
"advancement.create.long_bend.desc": "Create a curved track section that spans more than 30 blocks in length",
"advancement.create.long_train": "Ambitious Endeavours",
"advancement.create.long_train.desc": "Create a Train with at least six Carriages",
"advancement.create.long_train.desc": "Create a Train with at least 6 carriages",
"advancement.create.long_travel": "Field Trip",
"advancement.create.long_travel.desc": "Leave a Train Seat over 5000 blocks away from where you started travelling",
"advancement.create.train_roadkill": "Road Kill",
"advancement.create.train_roadkill.desc": "Run over an Enemy with your Train§7\n(Hidden Advancement)",
"advancement.create.train_roadkill.desc": "Run over an enemy with your Train§7\n(Hidden Advancement)",
"advancement.create.red_signal": "Expert Driver",
"advancement.create.red_signal.desc": "Run a Red Signal with your Train§7\n(Hidden Advancement)",
"advancement.create.red_signal.desc": "Run a red Train Signal§7\n(Hidden Advancement)",
"advancement.create.train_crash": "Terrible Service",
"advancement.create.train_crash.desc": "Witness a Train Crash as a Passenger§7\n(Hidden Advancement)",
"advancement.create.train_crash.desc": "Witness a Train crash as a passenger§7\n(Hidden Advancement)",
"advancement.create.train_crash_backwards": "Blind Spot",
"advancement.create.train_crash_backwards.desc": "Crash into another Train while driving backwards§7\n(Hidden Advancement)",
@ -1257,8 +1257,10 @@
"create.item_attributes.smeltable.inverted": "cannot be Smelted",
"create.item_attributes.smokable": "can be Smoked",
"create.item_attributes.smokable.inverted": "cannot be Smoked",
"create.item_attributes.blastable": "is smeltable in Blast Furnace",
"create.item_attributes.blastable.inverted": "is not smeltable in Blast Furnace",
"create.item_attributes.blastable": "can be Smelted in a Blast Furnace",
"create.item_attributes.blastable.inverted": "cannot be Smelted in a Blast Furnace",
"create.item_attributes.compostable": "can be composted",
"create.item_attributes.compostable.inverted": "cannot be composted",
"create.item_attributes.shulker_level": "is shulker %1$s",
"create.item_attributes.shulker_level.inverted": "is shulker not %1$s",
"create.item_attributes.shulker_level.full": "full",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 838",
"_": "Missing Localizations: 840",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1260,6 +1260,8 @@
"create.item_attributes.smokable.inverted": "kann nicht geräuchert werden",
"create.item_attributes.blastable": "ist im Schmelzofen schmelzbar",
"create.item_attributes.blastable.inverted": "ist nicht im Schmelzofen schmelzbar",
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
"create.item_attributes.shulker_level": "ist Shulker %1$s",
"create.item_attributes.shulker_level.inverted": "ist Shulker nicht %1$s",
"create.item_attributes.shulker_level.full": "voll",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 984",
"_": "Missing Localizations: 986",
"_": "->------------------------] Game Elements [------------------------<-",
@ -672,23 +672,23 @@
"advancement.create.andesite_alloy.desc": "Los materiales de create tienen nombres raros. La Aleación de Andesita es uno de ellos.",
"advancement.create.andesite_casing": "La Edad de la Andesita",
"advancement.create.andesite_casing.desc": "Utilice un poco de madera y aleación de andesita para crear una cubierta básica.",
"advancement.create.mechanical_press": "UNLOCALIZED: Bonk",
"advancement.create.mechanical_press": "UNLOCALIZED: Bonk!",
"advancement.create.mechanical_press.desc": "UNLOCALIZED: Create some sheets in a Mechanical Press",
"advancement.create.encased_fan": "UNLOCALIZED: Wind maker",
"advancement.create.encased_fan.desc": "UNLOCALIZED: Place and activate an Encased Fan",
"advancement.create.encased_fan": "UNLOCALIZED: Wind Maker",
"advancement.create.encased_fan.desc": "UNLOCALIZED: Place and power an Encased Fan",
"advancement.create.fan_processing": "UNLOCALIZED: Processing by Particle",
"advancement.create.fan_processing.desc": "UNLOCALIZED: Use an Encased Fan to process materials",
"advancement.create.saw_processing": "UNLOCALIZED: Workshop's most feared",
"advancement.create.saw_processing": "UNLOCALIZED: Workshop's Most Feared",
"advancement.create.saw_processing.desc": "UNLOCALIZED: Use an upright Mechanical Saw to process materials",
"advancement.create.compacting": "UNLOCALIZED: Compactification",
"advancement.create.compacting.desc": "UNLOCALIZED: Use a Press and a Basin to create less items from more items",
"advancement.create.compacting.desc": "UNLOCALIZED: Use a Mechanical Press and a Basin to create fewer items from more",
"advancement.create.belt": "Unidad de Algas",
"advancement.create.belt.desc": "Conecta dos ejes con una cinta mecánica.",
"advancement.create.funnel": "UNLOCALIZED: Airport Aesthetic",
"advancement.create.funnel.desc": "UNLOCALIZED: Extract or insert items into a container using a Funnel",
"advancement.create.chute": "Viniendose Abajo",
"advancement.create.chute.desc": "Coloca un tolvogán, la contraparte vertical de las cintas mecánicas.",
"advancement.create.mechanical_mixer": "UNLOCALIZED: Mixing it up",
"advancement.create.mechanical_mixer": "UNLOCALIZED: Mixing It Up",
"advancement.create.mechanical_mixer.desc": "UNLOCALIZED: Combine ingredients in a Mechanical Mixer",
"advancement.create.burner": "UNLOCALIZED: Sentient Fireplace",
"advancement.create.burner.desc": "UNLOCALIZED: Obtain a Blaze Burner",
@ -703,25 +703,25 @@
"advancement.create.super_glue": "UNLOCALIZED: Area of Connect",
"advancement.create.super_glue.desc": "UNLOCALIZED: Super Glue some blocks into a group",
"advancement.create.contraption_actors": "UNLOCALIZED: Moving with Purpose",
"advancement.create.contraption_actors.desc": "UNLOCALIZED: Create a contraption with drills, saws or harvesters on board",
"advancement.create.portable_storage_interface": "UNLOCALIZED: Drive-by exchange",
"advancement.create.portable_storage_interface.desc": "UNLOCALIZED: Use a Portable Storage Interface to take or insert items into a contraption",
"advancement.create.wrench_goggles": "UNLOCALIZED: Kitted out",
"advancement.create.wrench_goggles.desc": "UNLOCALIZED: Equip Engineer's goggles and a Wrench",
"advancement.create.contraption_actors.desc": "UNLOCALIZED: Create a Contraption with drills, saws, or harvesters on board",
"advancement.create.portable_storage_interface": "UNLOCALIZED: Drive-By Exchange",
"advancement.create.portable_storage_interface.desc": "UNLOCALIZED: Use a Portable Storage Interface to take or insert items into a Contraption",
"advancement.create.wrench_goggles": "UNLOCALIZED: Kitted Out",
"advancement.create.wrench_goggles.desc": "UNLOCALIZED: Equip Engineer's Goggles and a Wrench",
"advancement.create.stressometer": "Pero, ¿qué tan estresado exactamente?",
"advancement.create.stressometer.desc": "Coloca y dale poder a un Estresómetro. Míralo con tus gafas para leer el número exacto.",
"advancement.create.cuckoo_clock": "UNLOCALIZED: Is it Time?",
"advancement.create.cuckoo_clock": "UNLOCALIZED: Is It Time?",
"advancement.create.cuckoo_clock.desc": "UNLOCALIZED: Witness your Cuckoo Clock announce bedtime",
"advancement.create.windmill_maxed": "UNLOCALIZED: A Strong Breeze",
"advancement.create.windmill_maxed.desc": "UNLOCALIZED: Assemble a windmill of maximum strength",
"advancement.create.ejector_maxed": "UNLOCALIZED: Springboard Champion",
"advancement.create.ejector_maxed.desc": "UNLOCALIZED: Get launched for more than 30 blocks by a Weighted Ejector",
"advancement.create.ejector_maxed.desc": "UNLOCALIZED: Get launched more than 30 blocks by a Weighted Ejector",
"advancement.create.pulley_maxed": "UNLOCALIZED: Rope to Nowhere",
"advancement.create.pulley_maxed.desc": "UNLOCALIZED: Extend a Rope Pulley over 200 blocks deep",
"advancement.create.cart_pickup": "UNLOCALIZED: Strong Arms",
"advancement.create.cart_pickup.desc": "UNLOCALIZED: Pick up a Minecart Contraption with at least 200 attached blocks",
"advancement.create.anvil_plough": "UNLOCALIZED: Blacksmith Artillery",
"advancement.create.anvil_plough.desc": "UNLOCALIZED: Launch an Anvil with Mechanical ploughs",
"advancement.create.anvil_plough.desc": "UNLOCALIZED: Launch an Anvil with Mechanical Ploughs",
"advancement.create.lava_wheel_00000": "UNLOCALIZED: Magma Wheel",
"advancement.create.lava_wheel_00000.desc": "UNLOCALIZED: This shouldn't have worked§7\n(Hidden Advancement)",
"advancement.create.hand_crank_000": "UNLOCALIZED: Workout Session",
@ -730,48 +730,48 @@
"advancement.create.belt_funnel_kiss.desc": "Haz que dos ingresos montados en una cinta mecánica se besen.",
"advancement.create.stressometer_maxed": "UNLOCALIZED: Perfectly Stressed",
"advancement.create.stressometer_maxed.desc": "UNLOCALIZED: Get a 100% readout from a Stressometer§7\n(Hidden Advancement)",
"advancement.create.copper": "UNLOCALIZED: More Sturdier Rocks",
"advancement.create.copper.desc": "UNLOCALIZED: Amass some Copper for your exploits in Fluid Manipulation",
"advancement.create.copper": "UNLOCALIZED: Cuprum Bokum",
"advancement.create.copper.desc": "UNLOCALIZED: Amass some Copper Ingots for your exploits in fluid manipulation",
"advancement.create.copper_casing": "La Edad del Cobre",
"advancement.create.copper_casing.desc": "Utiliza planchas de cobre y un poco de madera para crear cubiertas de cobre.",
"advancement.create.spout": "Splash",
"advancement.create.spout.desc": "Observa cómo se llena un objeto de líquido con un surtidor.",
"advancement.create.drain": "UNLOCALIZED: Tumble Draining",
"advancement.create.drain.desc": "UNLOCALIZED: Watch a fluid containing item be emptied by an Item Drain",
"advancement.create.drain.desc": "UNLOCALIZED: Watch a fluid-containing item be emptied by an Item Drain",
"advancement.create.steam_engine": "UNLOCALIZED: The Powerhouse",
"advancement.create.steam_engine.desc": "UNLOCALIZED: Use a Steam engine to generate torque",
"advancement.create.steam_engine.desc": "UNLOCALIZED: Use a Steam Engine to generate torque",
"advancement.create.steam_whistle": "UNLOCALIZED: Voice of an Angel",
"advancement.create.steam_whistle.desc": "UNLOCALIZED: Activate a Steam Whistle",
"advancement.create.backtank": "UNLOCALIZED: Pressure to Go",
"advancement.create.backtank.desc": "UNLOCALIZED: Create a copper backtank and make it accumulate Air Pressure",
"advancement.create.backtank.desc": "UNLOCALIZED: Create a Copper Backtank and make it accumulate air pressure",
"advancement.create.diving_suit": "UNLOCALIZED: Ready for the Depths",
"advancement.create.diving_suit.desc": "UNLOCALIZED: Equip a diving helmet together with your backtank and jump into water",
"advancement.create.diving_suit.desc": "UNLOCALIZED: Equip a Diving Helmet and a Copper Backtank, then jump into water",
"advancement.create.mechanical_pump_0": "UNLOCALIZED: Under Pressure",
"advancement.create.mechanical_pump_0.desc": "UNLOCALIZED: Place and power a Mechanical Pump",
"advancement.create.glass_pipe": "Flujo Espía",
"advancement.create.glass_pipe.desc": "Observa cómo se propaga el fluido a través de una tubería con ventana. Puedes añadir una ventana a una tubería recta con tu Llave Inglesa.",
"advancement.create.water_supply": "UNLOCALIZED: Puddle Collector",
"advancement.create.water_supply.desc": "UNLOCALIZED: Use the pulling end of a pipe or pump to collect a water block",
"advancement.create.water_supply.desc": "UNLOCALIZED: Use the pulling end of a Fluid Pipe or Mechanical Pump to collect water",
"advancement.create.hose_pulley": "Derrame industrial",
"advancement.create.hose_pulley.desc": "Baja una polea manguera y observa cómo drena o llena un cuerpo de fluido.",
"advancement.create.chocolate_bucket": "UNLOCALIZED: A World of Imagination",
"advancement.create.chocolate_bucket.desc": "UNLOCALIZED: Obtain a Bucket of Molten Chocolate",
"advancement.create.chocolate_bucket.desc": "UNLOCALIZED: Obtain a bucket of molten chocolate",
"advancement.create.honey_drain": "UNLOCALIZED: Autonomous Bee-Keeping",
"advancement.create.honey_drain.desc": "UNLOCALIZED: Use pipes to pull honey from a Bee Nest or Bee House",
"advancement.create.honey_drain.desc": "UNLOCALIZED: Use pipes to pull honey from a Bee Nest or Beehive",
"advancement.create.hose_pulley_lava": "UNLOCALIZED: Tapping the Mantle",
"advancement.create.hose_pulley_lava.desc": "UNLOCALIZED: Pump from a body of Lava large enough to be considered infinite",
"advancement.create.hose_pulley_lava.desc": "UNLOCALIZED: Pump from a body of lava large enough to be considered infinite",
"advancement.create.steam_engine_maxed": "UNLOCALIZED: Full Steam",
"advancement.create.steam_engine_maxed.desc": "UNLOCALIZED: Run a boiler at the maximum level of power",
"advancement.create.foods": "UNLOCALIZED: Balanced Diet",
"advancement.create.foods.desc": "UNLOCALIZED: Create Chocolate Berries, a Honeyed Apple and a Sweet Roll; all from the same Spout",
"advancement.create.foods.desc": "UNLOCALIZED: Create Chocolate Glazed Berries, a Honeyed Apple, and a Sweet Roll all from the same Spout",
"advancement.create.diving_suit_lava": "UNLOCALIZED: Swimming with the Striders",
"advancement.create.diving_suit_lava.desc": "UNLOCALIZED: Attempt to take a dive in lava with your Copper Diving Gear§7\n(Hidden Advancement)",
"advancement.create.diving_suit_lava.desc": "UNLOCALIZED: Attempt to take a dive in lava with your diving gear§7\n(Hidden Advancement)",
"advancement.create.chained_drain": "UNLOCALIZED: On a Roll",
"advancement.create.chained_drain.desc": "UNLOCALIZED: Watch an Item move across a row of Item Drains§7\n(Hidden Advancement)",
"advancement.create.cross_streams": "UNLOCALIZED: Don't cross the Streams!",
"advancement.create.chained_drain.desc": "UNLOCALIZED: Watch an item move across a row of Item Drains§7\n(Hidden Advancement)",
"advancement.create.cross_streams": "UNLOCALIZED: Don't Cross the Streams!",
"advancement.create.cross_streams.desc": "UNLOCALIZED: Watch two fluids meet in your pipe network§7\n(Hidden Advancement)",
"advancement.create.pipe_organ": "UNLOCALIZED: The Pipe Organ",
"advancement.create.pipe_organ.desc": "UNLOCALIZED: Attach 12 uniquely pitched Steam Whistles to a single fluid tank§7\n(Hidden Advancement)",
"advancement.create.pipe_organ.desc": "UNLOCALIZED: Attach 12 uniquely pitched Steam Whistles to a single Fluid Tank§7\n(Hidden Advancement)",
"advancement.create.brass": "Aleaciones de verdad",
"advancement.create.brass.desc": "Usa cobre triturado y zinc triturado para crear algo de latón.",
"advancement.create.brass_casing": "La Edad del Latón",
@ -795,7 +795,7 @@
"advancement.create.clockwork_bearing": "Contrapción en Punto",
"advancement.create.clockwork_bearing.desc": "Ensambla una estructura montada sobre un rodamiento de relojería.",
"advancement.create.display_link": "UNLOCALIZED: Big Data",
"advancement.create.display_link.desc": "UNLOCALIZED: Use a Display link to visualise information",
"advancement.create.display_link.desc": "UNLOCALIZED: Use a Display Link to visualise information",
"advancement.create.potato_cannon": "¡Fwoomp!",
"advancement.create.potato_cannon.desc": "Derrota a un enemigo con tu Cañón de Papas.",
"advancement.create.extendo_grip": "¡Boioioing!",
@ -804,54 +804,54 @@
"advancement.create.linked_controller.desc": "UNLOCALIZED: Activate a Redstone Link using a Linked Controller",
"advancement.create.arm_blaze_burner": "Combustrón 3001",
"advancement.create.arm_blaze_burner.desc": "Instruye a un brazo mecánico para que alimente tu Quemador Blaze.",
"advancement.create.crusher_maxed_0000": "UNLOCALIZED: Crushing it",
"advancement.create.crusher_maxed_0000.desc": "UNLOCALIZED: Operate a Pair of Crushing wheels at max speed",
"advancement.create.crusher_maxed_0000": "UNLOCALIZED: Crushing It",
"advancement.create.crusher_maxed_0000.desc": "UNLOCALIZED: Operate a pair of Crushing Wheels at maximum speed",
"advancement.create.arm_many_targets": "Organizatrón 3000",
"advancement.create.arm_many_targets.desc": "Programa un brazo mecánico con 10 o más localizaciones de salida.",
"advancement.create.potato_cannon_collide": "UNLOCALIZED: Veggie Fireworks",
"advancement.create.potato_cannon_collide.desc": "UNLOCALIZED: Cause potato cannon projectiles of different types to collide with each other",
"advancement.create.potato_cannon_collide.desc": "UNLOCALIZED: Cause Potato Cannon projectiles of different types to collide with each other",
"advancement.create.self_deploying": "UNLOCALIZED: Self-Driving Cart",
"advancement.create.self_deploying.desc": "UNLOCALIZED: Create a Minecart Contraption that places tracks in front of itself",
"advancement.create.fist_bump": "¡Dame el puño, hermano!",
"advancement.create.fist_bump.desc": "Haz que dos Desplegadores se golpeen con el puño.",
"advancement.create.crafter_lazy_000": "UNLOCALIZED: Desperate Measures",
"advancement.create.crafter_lazy_000.desc": "UNLOCALIZED: Drastically slow down a Mechanical Crafter to procrastinate on proper infrastructure§7\n(Hidden Advancement)",
"advancement.create.extendo_grip_dual": "UNLOCALIZED: To full Extent",
"advancement.create.extendo_grip_dual.desc": "UNLOCALIZED: Dual wield Extendo Grips for super-human reach§7\n(Hidden Advancement)",
"advancement.create.extendo_grip_dual": "UNLOCALIZED: To Full Extent",
"advancement.create.extendo_grip_dual.desc": "UNLOCALIZED: Dual-wield Extendo Grips for superhuman reach§7\n(Hidden Advancement)",
"advancement.create.musical_arm": "¡Póneme mi tema principal!",
"advancement.create.musical_arm.desc": "Observa cómo un brazo mecánico opera un tocadiscos.",
"advancement.create.sturdy_sheet": "UNLOCALIZED: The Sturdiest Rocks",
"advancement.create.sturdy_sheet.desc": "UNLOCALIZED: Assemble a Sturdy Sheet from refining crushed Obsidian",
"advancement.create.sturdy_sheet.desc": "UNLOCALIZED: Assemble a Sturdy Sheet by refining Powdered Obsidian",
"advancement.create.train_casing_00": "UNLOCALIZED: The Logistical Age",
"advancement.create.train_casing_00.desc": "UNLOCALIZED: Use Sturdy Sheets to create a Casing for Railway Components",
"advancement.create.train_casing_00.desc": "UNLOCALIZED: Use Sturdy Sheets to create a casing for railway components",
"advancement.create.train": "UNLOCALIZED: All Aboard!",
"advancement.create.train.desc": "UNLOCALIZED: Assemble your first Train",
"advancement.create.conductor": "UNLOCALIZED: Conductor Instructor",
"advancement.create.conductor.desc": "UNLOCALIZED: Instruct a Train driver with a Schedule",
"advancement.create.conductor.desc": "UNLOCALIZED: Instruct a Train driver with a Train Schedule",
"advancement.create.track_signal": "UNLOCALIZED: Traffic Control",
"advancement.create.track_signal.desc": "UNLOCALIZED: Place a Train Signal",
"advancement.create.display_board_0": "UNLOCALIZED: Dynamic Timetables",
"advancement.create.display_board_0.desc": "UNLOCALIZED: Forecast a Train's arrival on your Display Board with the help of Display Links",
"advancement.create.track_0": "UNLOCALIZED: A new Gauge",
"advancement.create.track_0": "UNLOCALIZED: A New Gauge",
"advancement.create.track_0.desc": "UNLOCALIZED: Obtain some Train Tracks",
"advancement.create.train_whistle": "UNLOCALIZED: Choo choo!",
"advancement.create.train_whistle": "UNLOCALIZED: Choo Choo!",
"advancement.create.train_whistle.desc": "UNLOCALIZED: Assemble a Steam Whistle to your Train and activate it while driving",
"advancement.create.train_portal": "UNLOCALIZED: Dimensional Commuter",
"advancement.create.train_portal.desc": "UNLOCALIZED: Ride a train through a Nether Portal",
"advancement.create.train_portal.desc": "UNLOCALIZED: Ride a Train through a Nether portal",
"advancement.create.track_crafting_factory": "UNLOCALIZED: Track Factory",
"advancement.create.track_crafting_factory.desc": "UNLOCALIZED: Produce more than 1000 train tracks in the same Mechanical Press",
"advancement.create.track_crafting_factory.desc": "UNLOCALIZED: Produce more than 1000 Train Tracks with the same Mechanical Press",
"advancement.create.long_bend": "UNLOCALIZED: The Longest Bend",
"advancement.create.long_bend.desc": "UNLOCALIZED: Create a Curved track section that spans more than 30 blocks in length",
"advancement.create.long_bend.desc": "UNLOCALIZED: Create a curved track section that spans more than 30 blocks in length",
"advancement.create.long_train": "UNLOCALIZED: Ambitious Endeavours",
"advancement.create.long_train.desc": "UNLOCALIZED: Create a Train with at least six Carriages",
"advancement.create.long_train.desc": "UNLOCALIZED: Create a Train with at least 6 carriages",
"advancement.create.long_travel": "UNLOCALIZED: Field Trip",
"advancement.create.long_travel.desc": "UNLOCALIZED: Leave a Train Seat over 5000 blocks away from where you started travelling",
"advancement.create.train_roadkill": "UNLOCALIZED: Road Kill",
"advancement.create.train_roadkill.desc": "UNLOCALIZED: Run over an Enemy with your Train§7\n(Hidden Advancement)",
"advancement.create.train_roadkill.desc": "UNLOCALIZED: Run over an enemy with your Train§7\n(Hidden Advancement)",
"advancement.create.red_signal": "UNLOCALIZED: Expert Driver",
"advancement.create.red_signal.desc": "UNLOCALIZED: Run a Red Signal with your Train§7\n(Hidden Advancement)",
"advancement.create.red_signal.desc": "UNLOCALIZED: Run a red Train Signal§7\n(Hidden Advancement)",
"advancement.create.train_crash": "UNLOCALIZED: Terrible Service",
"advancement.create.train_crash.desc": "UNLOCALIZED: Witness a Train Crash as a Passenger§7\n(Hidden Advancement)",
"advancement.create.train_crash.desc": "UNLOCALIZED: Witness a Train crash as a passenger§7\n(Hidden Advancement)",
"advancement.create.train_crash_backwards": "UNLOCALIZED: Blind Spot",
"advancement.create.train_crash_backwards.desc": "UNLOCALIZED: Crash into another Train while driving backwards§7\n(Hidden Advancement)",
@ -1260,6 +1260,8 @@
"create.item_attributes.smokable.inverted": "no puede ser Ahumado",
"create.item_attributes.blastable": "puede ser cocinado en un Alto Horno",
"create.item_attributes.blastable.inverted": "no puede ser cocinado en un Alto Horno",
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
"create.item_attributes.shulker_level": "es un shulker %1$s",
"create.item_attributes.shulker_level.inverted": "no es un shulker %1$s",
"create.item_attributes.shulker_level.full": "lleno",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 4",
"_": "Missing Localizations: 6",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1260,6 +1260,8 @@
"create.item_attributes.smokable.inverted": "no puede ser ahumado",
"create.item_attributes.blastable": "es fundible en el alto horno",
"create.item_attributes.blastable.inverted": "no es fundible en el alto horno",
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
"create.item_attributes.shulker_level": "es shulker %1$s",
"create.item_attributes.shulker_level.inverted": "no es shulker %1$s",
"create.item_attributes.shulker_level.full": "lleno",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 2135",
"_": "Missing Localizations: 2137",
"_": "->------------------------] Game Elements [------------------------<-",
@ -671,24 +671,24 @@
"advancement.create.andesite_alloy": "UNLOCALIZED: Sturdier Rocks",
"advancement.create.andesite_alloy.desc": "Certains matériaux de Create ont des noms bizzares; l'alliage d'andésite est l'un d'entre eux.",
"advancement.create.andesite_casing": "UNLOCALIZED: The Andesite Age",
"advancement.create.andesite_casing.desc": "UNLOCALIZED: Apply Andesite Alloy to wood creating a basic casing for your machines",
"advancement.create.mechanical_press": "UNLOCALIZED: Bonk",
"advancement.create.andesite_casing.desc": "UNLOCALIZED: Apply Andesite Alloy to stripped wood, creating a basic casing for your machines",
"advancement.create.mechanical_press": "UNLOCALIZED: Bonk!",
"advancement.create.mechanical_press.desc": "UNLOCALIZED: Create some sheets in a Mechanical Press",
"advancement.create.encased_fan": "UNLOCALIZED: Wind maker",
"advancement.create.encased_fan.desc": "UNLOCALIZED: Place and activate an Encased Fan",
"advancement.create.encased_fan": "UNLOCALIZED: Wind Maker",
"advancement.create.encased_fan.desc": "UNLOCALIZED: Place and power an Encased Fan",
"advancement.create.fan_processing": "UNLOCALIZED: Processing by Particle",
"advancement.create.fan_processing.desc": "UNLOCALIZED: Use an Encased Fan to process materials",
"advancement.create.saw_processing": "UNLOCALIZED: Workshop's most feared",
"advancement.create.saw_processing": "UNLOCALIZED: Workshop's Most Feared",
"advancement.create.saw_processing.desc": "UNLOCALIZED: Use an upright Mechanical Saw to process materials",
"advancement.create.compacting": "UNLOCALIZED: Compactification",
"advancement.create.compacting.desc": "UNLOCALIZED: Use a Press and a Basin to create less items from more items",
"advancement.create.compacting.desc": "UNLOCALIZED: Use a Mechanical Press and a Basin to create fewer items from more",
"advancement.create.belt": "UNLOCALIZED: Kelp Drive",
"advancement.create.belt.desc": "UNLOCALIZED: Connect two Shafts with a Mechanical Belt",
"advancement.create.funnel": "UNLOCALIZED: Airport Aesthetic",
"advancement.create.funnel.desc": "UNLOCALIZED: Extract or insert items into a container using a Funnel",
"advancement.create.chute": "UNLOCALIZED: Vertical Logistics",
"advancement.create.chute.desc": "UNLOCALIZED: Transport some items by Chute",
"advancement.create.mechanical_mixer": "UNLOCALIZED: Mixing it up",
"advancement.create.mechanical_mixer": "UNLOCALIZED: Mixing It Up",
"advancement.create.mechanical_mixer.desc": "UNLOCALIZED: Combine ingredients in a Mechanical Mixer",
"advancement.create.burner": "UNLOCALIZED: Sentient Fireplace",
"advancement.create.burner.desc": "UNLOCALIZED: Obtain a Blaze Burner",
@ -703,25 +703,25 @@
"advancement.create.super_glue": "UNLOCALIZED: Area of Connect",
"advancement.create.super_glue.desc": "UNLOCALIZED: Super Glue some blocks into a group",
"advancement.create.contraption_actors": "UNLOCALIZED: Moving with Purpose",
"advancement.create.contraption_actors.desc": "UNLOCALIZED: Create a contraption with drills, saws or harvesters on board",
"advancement.create.portable_storage_interface": "UNLOCALIZED: Drive-by exchange",
"advancement.create.portable_storage_interface.desc": "UNLOCALIZED: Use a Portable Storage Interface to take or insert items into a contraption",
"advancement.create.wrench_goggles": "UNLOCALIZED: Kitted out",
"advancement.create.wrench_goggles.desc": "UNLOCALIZED: Equip Engineer's goggles and a Wrench",
"advancement.create.contraption_actors.desc": "UNLOCALIZED: Create a Contraption with drills, saws, or harvesters on board",
"advancement.create.portable_storage_interface": "UNLOCALIZED: Drive-By Exchange",
"advancement.create.portable_storage_interface.desc": "UNLOCALIZED: Use a Portable Storage Interface to take or insert items into a Contraption",
"advancement.create.wrench_goggles": "UNLOCALIZED: Kitted Out",
"advancement.create.wrench_goggles.desc": "UNLOCALIZED: Equip Engineer's Goggles and a Wrench",
"advancement.create.stressometer": "UNLOCALIZED: Stress for Nerds",
"advancement.create.stressometer.desc": "UNLOCALIZED: Get an exact readout with the help of Goggles and a Stressometer",
"advancement.create.cuckoo_clock": "UNLOCALIZED: Is it Time?",
"advancement.create.stressometer.desc": "UNLOCALIZED: Get an exact readout with the help of Engineer's Goggles and a Stressometer",
"advancement.create.cuckoo_clock": "UNLOCALIZED: Is It Time?",
"advancement.create.cuckoo_clock.desc": "UNLOCALIZED: Witness your Cuckoo Clock announce bedtime",
"advancement.create.windmill_maxed": "UNLOCALIZED: A Strong Breeze",
"advancement.create.windmill_maxed.desc": "UNLOCALIZED: Assemble a windmill of maximum strength",
"advancement.create.ejector_maxed": "UNLOCALIZED: Springboard Champion",
"advancement.create.ejector_maxed.desc": "UNLOCALIZED: Get launched for more than 30 blocks by a Weighted Ejector",
"advancement.create.ejector_maxed.desc": "UNLOCALIZED: Get launched more than 30 blocks by a Weighted Ejector",
"advancement.create.pulley_maxed": "UNLOCALIZED: Rope to Nowhere",
"advancement.create.pulley_maxed.desc": "UNLOCALIZED: Extend a Rope Pulley over 200 blocks deep",
"advancement.create.cart_pickup": "UNLOCALIZED: Strong Arms",
"advancement.create.cart_pickup.desc": "UNLOCALIZED: Pick up a Minecart Contraption with at least 200 attached blocks",
"advancement.create.anvil_plough": "UNLOCALIZED: Blacksmith Artillery",
"advancement.create.anvil_plough.desc": "UNLOCALIZED: Launch an Anvil with Mechanical ploughs",
"advancement.create.anvil_plough.desc": "UNLOCALIZED: Launch an Anvil with Mechanical Ploughs",
"advancement.create.lava_wheel_00000": "UNLOCALIZED: Magma Wheel",
"advancement.create.lava_wheel_00000.desc": "UNLOCALIZED: This shouldn't have worked§7\n(Hidden Advancement)",
"advancement.create.hand_crank_000": "UNLOCALIZED: Workout Session",
@ -730,62 +730,62 @@
"advancement.create.belt_funnel_kiss.desc": "UNLOCALIZED: Make two Belt-mounted Funnels kiss§7\n(Hidden Advancement)",
"advancement.create.stressometer_maxed": "UNLOCALIZED: Perfectly Stressed",
"advancement.create.stressometer_maxed.desc": "UNLOCALIZED: Get a 100% readout from a Stressometer§7\n(Hidden Advancement)",
"advancement.create.copper": "UNLOCALIZED: More Sturdier Rocks",
"advancement.create.copper.desc": "UNLOCALIZED: Amass some Copper for your exploits in Fluid Manipulation",
"advancement.create.copper": "UNLOCALIZED: Cuprum Bokum",
"advancement.create.copper.desc": "UNLOCALIZED: Amass some Copper Ingots for your exploits in fluid manipulation",
"advancement.create.copper_casing": "UNLOCALIZED: The Copper Age",
"advancement.create.copper_casing.desc": "UNLOCALIZED: Apply Copper Ingots to wood creating a waterproof casing for your machines",
"advancement.create.copper_casing.desc": "UNLOCALIZED: Apply Copper Ingots to stripped wood, creating a waterproof casing for your machines",
"advancement.create.spout": "UNLOCALIZED: Sploosh",
"advancement.create.spout.desc": "UNLOCALIZED: Watch a fluid containing item be filled using a Spout",
"advancement.create.spout.desc": "UNLOCALIZED: Watch a fluid-containing item be filled by a Spout",
"advancement.create.drain": "UNLOCALIZED: Tumble Draining",
"advancement.create.drain.desc": "UNLOCALIZED: Watch a fluid containing item be emptied by an Item Drain",
"advancement.create.drain.desc": "UNLOCALIZED: Watch a fluid-containing item be emptied by an Item Drain",
"advancement.create.steam_engine": "UNLOCALIZED: The Powerhouse",
"advancement.create.steam_engine.desc": "UNLOCALIZED: Use a Steam engine to generate torque",
"advancement.create.steam_engine.desc": "UNLOCALIZED: Use a Steam Engine to generate torque",
"advancement.create.steam_whistle": "UNLOCALIZED: Voice of an Angel",
"advancement.create.steam_whistle.desc": "UNLOCALIZED: Activate a Steam Whistle",
"advancement.create.backtank": "UNLOCALIZED: Pressure to Go",
"advancement.create.backtank.desc": "UNLOCALIZED: Create a copper backtank and make it accumulate Air Pressure",
"advancement.create.backtank.desc": "UNLOCALIZED: Create a Copper Backtank and make it accumulate air pressure",
"advancement.create.diving_suit": "UNLOCALIZED: Ready for the Depths",
"advancement.create.diving_suit.desc": "UNLOCALIZED: Equip a diving helmet together with your backtank and jump into water",
"advancement.create.diving_suit.desc": "UNLOCALIZED: Equip a Diving Helmet and a Copper Backtank, then jump into water",
"advancement.create.mechanical_pump_0": "UNLOCALIZED: Under Pressure",
"advancement.create.mechanical_pump_0.desc": "UNLOCALIZED: Place and power a Mechanical Pump",
"advancement.create.glass_pipe": "UNLOCALIZED: Flow Discovery",
"advancement.create.glass_pipe.desc": "UNLOCALIZED: Use your Wrench on a pipe that contains a fluid",
"advancement.create.water_supply": "UNLOCALIZED: Puddle Collector",
"advancement.create.water_supply.desc": "UNLOCALIZED: Use the pulling end of a pipe or pump to collect a water block",
"advancement.create.water_supply.desc": "UNLOCALIZED: Use the pulling end of a Fluid Pipe or Mechanical Pump to collect water",
"advancement.create.hose_pulley": "UNLOCALIZED: Industrial Spillage",
"advancement.create.hose_pulley.desc": "UNLOCALIZED: Lower a Hose Pulley and watch it drain or fill a body of fluid",
"advancement.create.chocolate_bucket": "UNLOCALIZED: A World of Imagination",
"advancement.create.chocolate_bucket.desc": "UNLOCALIZED: Obtain a Bucket of Molten Chocolate",
"advancement.create.chocolate_bucket.desc": "UNLOCALIZED: Obtain a bucket of molten chocolate",
"advancement.create.honey_drain": "UNLOCALIZED: Autonomous Bee-Keeping",
"advancement.create.honey_drain.desc": "UNLOCALIZED: Use pipes to pull honey from a Bee Nest or Bee House",
"advancement.create.honey_drain.desc": "UNLOCALIZED: Use pipes to pull honey from a Bee Nest or Beehive",
"advancement.create.hose_pulley_lava": "UNLOCALIZED: Tapping the Mantle",
"advancement.create.hose_pulley_lava.desc": "UNLOCALIZED: Pump from a body of Lava large enough to be considered infinite",
"advancement.create.hose_pulley_lava.desc": "UNLOCALIZED: Pump from a body of lava large enough to be considered infinite",
"advancement.create.steam_engine_maxed": "UNLOCALIZED: Full Steam",
"advancement.create.steam_engine_maxed.desc": "UNLOCALIZED: Run a boiler at the maximum level of power",
"advancement.create.foods": "UNLOCALIZED: Balanced Diet",
"advancement.create.foods.desc": "UNLOCALIZED: Create Chocolate Berries, a Honeyed Apple and a Sweet Roll; all from the same Spout",
"advancement.create.foods.desc": "UNLOCALIZED: Create Chocolate Glazed Berries, a Honeyed Apple, and a Sweet Roll all from the same Spout",
"advancement.create.diving_suit_lava": "UNLOCALIZED: Swimming with the Striders",
"advancement.create.diving_suit_lava.desc": "UNLOCALIZED: Attempt to take a dive in lava with your Copper Diving Gear§7\n(Hidden Advancement)",
"advancement.create.diving_suit_lava.desc": "UNLOCALIZED: Attempt to take a dive in lava with your diving gear§7\n(Hidden Advancement)",
"advancement.create.chained_drain": "UNLOCALIZED: On a Roll",
"advancement.create.chained_drain.desc": "UNLOCALIZED: Watch an Item move across a row of Item Drains§7\n(Hidden Advancement)",
"advancement.create.cross_streams": "UNLOCALIZED: Don't cross the Streams!",
"advancement.create.chained_drain.desc": "UNLOCALIZED: Watch an item move across a row of Item Drains§7\n(Hidden Advancement)",
"advancement.create.cross_streams": "UNLOCALIZED: Don't Cross the Streams!",
"advancement.create.cross_streams.desc": "UNLOCALIZED: Watch two fluids meet in your pipe network§7\n(Hidden Advancement)",
"advancement.create.pipe_organ": "UNLOCALIZED: The Pipe Organ",
"advancement.create.pipe_organ.desc": "UNLOCALIZED: Attach 12 uniquely pitched Steam Whistles to a single fluid tank§7\n(Hidden Advancement)",
"advancement.create.pipe_organ.desc": "UNLOCALIZED: Attach 12 uniquely pitched Steam Whistles to a single Fluid Tank§7\n(Hidden Advancement)",
"advancement.create.brass": "UNLOCALIZED: Real Alloys",
"advancement.create.brass.desc": "UNLOCALIZED: Create some Brass from Copper and Zinc ingots in your Blaze-powered Mixer",
"advancement.create.brass.desc": "UNLOCALIZED: Create Brass Ingots by alloying Copper and Zinc Ingots in your Blaze-heated Mechanical Mixer",
"advancement.create.brass_casing": "UNLOCALIZED: The Brass Age",
"advancement.create.brass_casing.desc": "UNLOCALIZED: Apply Brass Ingots to wood creating a casing for more sophisticated machines",
"advancement.create.brass_casing.desc": "UNLOCALIZED: Apply Brass Ingots to stripped wood, creating a casing for more sophisticated machines",
"advancement.create.rose_quartz": "UNLOCALIZED: Pink Diamonds",
"advancement.create.rose_quartz.desc": "UNLOCALIZED: Polish some Rose Quartz",
"advancement.create.deployer": "UNLOCALIZED: Artificial Intelligence",
"advancement.create.deployer.desc": "UNLOCALIZED: Place and activate a Deployer, the perfect reflection of yourself",
"advancement.create.deployer.desc": "UNLOCALIZED: Place and power a Deployer, the perfect reflection of yourself",
"advancement.create.precision_mechanism": "UNLOCALIZED: Complex Curiosities",
"advancement.create.precision_mechanism.desc": "UNLOCALIZED: Assemble a Precision Mechanism",
"advancement.create.speed_controller": "UNLOCALIZED: Engineers Hate Him!",
"advancement.create.speed_controller.desc": "UNLOCALIZED: Fine tune your contraption with a Rotation Speed Controller",
"advancement.create.speed_controller.desc": "UNLOCALIZED: Fine-tune your Contraption with a Rotation Speed Controller",
"advancement.create.mechanical_arm": "UNLOCALIZED: Busy Hands",
"advancement.create.mechanical_arm.desc": "UNLOCALIZED: Watch your Mechanical Arm transport its first Item",
"advancement.create.mechanical_arm.desc": "UNLOCALIZED: Watch your Mechanical Arm transport its first item",
"advancement.create.mechanical_crafter": "UNLOCALIZED: Automated Assembly",
"advancement.create.mechanical_crafter.desc": "UNLOCALIZED: Place and power some Mechanical Crafters",
"advancement.create.crushing_wheel": "UNLOCALIZED: A Pair of Giants",
@ -795,7 +795,7 @@
"advancement.create.clockwork_bearing": "UNLOCALIZED: Contraption O'Clock",
"advancement.create.clockwork_bearing.desc": "UNLOCALIZED: Assemble a structure mounted on a Clockwork Bearing",
"advancement.create.display_link": "UNLOCALIZED: Big Data",
"advancement.create.display_link.desc": "UNLOCALIZED: Use a Display link to visualise information",
"advancement.create.display_link.desc": "UNLOCALIZED: Use a Display Link to visualise information",
"advancement.create.potato_cannon": "UNLOCALIZED: Fwoomp!",
"advancement.create.potato_cannon.desc": "UNLOCALIZED: Defeat an enemy with your Potato Cannon",
"advancement.create.extendo_grip": "UNLOCALIZED: Boioioing!",
@ -804,54 +804,54 @@
"advancement.create.linked_controller.desc": "UNLOCALIZED: Activate a Redstone Link using a Linked Controller",
"advancement.create.arm_blaze_burner": "UNLOCALIZED: Combust-o-Tron",
"advancement.create.arm_blaze_burner.desc": "UNLOCALIZED: Instruct a Mechanical Arm to feed your Blaze Burner",
"advancement.create.crusher_maxed_0000": "UNLOCALIZED: Crushing it",
"advancement.create.crusher_maxed_0000.desc": "UNLOCALIZED: Operate a Pair of Crushing wheels at max speed",
"advancement.create.crusher_maxed_0000": "UNLOCALIZED: Crushing It",
"advancement.create.crusher_maxed_0000.desc": "UNLOCALIZED: Operate a pair of Crushing Wheels at maximum speed",
"advancement.create.arm_many_targets": "UNLOCALIZED: Organize-o-Tron",
"advancement.create.arm_many_targets.desc": "UNLOCALIZED: Program a Mechanical Arm with ten or more output locations",
"advancement.create.arm_many_targets.desc": "UNLOCALIZED: Program a Mechanical Arm with 10 or more output locations",
"advancement.create.potato_cannon_collide": "UNLOCALIZED: Veggie Fireworks",
"advancement.create.potato_cannon_collide.desc": "UNLOCALIZED: Cause potato cannon projectiles of different types to collide with each other",
"advancement.create.potato_cannon_collide.desc": "UNLOCALIZED: Cause Potato Cannon projectiles of different types to collide with each other",
"advancement.create.self_deploying": "UNLOCALIZED: Self-Driving Cart",
"advancement.create.self_deploying.desc": "UNLOCALIZED: Create a Minecart Contraption that places tracks in front of itself",
"advancement.create.fist_bump": "UNLOCALIZED: Pound It, Bro!",
"advancement.create.fist_bump.desc": "UNLOCALIZED: Make two Deployers fist-bump§7\n(Hidden Advancement)",
"advancement.create.crafter_lazy_000": "UNLOCALIZED: Desperate Measures",
"advancement.create.crafter_lazy_000.desc": "UNLOCALIZED: Drastically slow down a Mechanical Crafter to procrastinate on proper infrastructure§7\n(Hidden Advancement)",
"advancement.create.extendo_grip_dual": "UNLOCALIZED: To full Extent",
"advancement.create.extendo_grip_dual.desc": "UNLOCALIZED: Dual wield Extendo Grips for super-human reach§7\n(Hidden Advancement)",
"advancement.create.extendo_grip_dual": "UNLOCALIZED: To Full Extent",
"advancement.create.extendo_grip_dual.desc": "UNLOCALIZED: Dual-wield Extendo Grips for superhuman reach§7\n(Hidden Advancement)",
"advancement.create.musical_arm": "UNLOCALIZED: DJ Mechanico",
"advancement.create.musical_arm.desc": "UNLOCALIZED: Watch a Mechanical Arm operate your Jukebox§7\n(Hidden Advancement)",
"advancement.create.sturdy_sheet": "UNLOCALIZED: The Sturdiest Rocks",
"advancement.create.sturdy_sheet.desc": "UNLOCALIZED: Assemble a Sturdy Sheet from refining crushed Obsidian",
"advancement.create.sturdy_sheet.desc": "UNLOCALIZED: Assemble a Sturdy Sheet by refining Powdered Obsidian",
"advancement.create.train_casing_00": "UNLOCALIZED: The Logistical Age",
"advancement.create.train_casing_00.desc": "UNLOCALIZED: Use Sturdy Sheets to create a Casing for Railway Components",
"advancement.create.train_casing_00.desc": "UNLOCALIZED: Use Sturdy Sheets to create a casing for railway components",
"advancement.create.train": "UNLOCALIZED: All Aboard!",
"advancement.create.train.desc": "UNLOCALIZED: Assemble your first Train",
"advancement.create.conductor": "UNLOCALIZED: Conductor Instructor",
"advancement.create.conductor.desc": "UNLOCALIZED: Instruct a Train driver with a Schedule",
"advancement.create.conductor.desc": "UNLOCALIZED: Instruct a Train driver with a Train Schedule",
"advancement.create.track_signal": "UNLOCALIZED: Traffic Control",
"advancement.create.track_signal.desc": "UNLOCALIZED: Place a Train Signal",
"advancement.create.display_board_0": "UNLOCALIZED: Dynamic Timetables",
"advancement.create.display_board_0.desc": "UNLOCALIZED: Forecast a Train's arrival on your Display Board with the help of Display Links",
"advancement.create.track_0": "UNLOCALIZED: A new Gauge",
"advancement.create.track_0": "UNLOCALIZED: A New Gauge",
"advancement.create.track_0.desc": "UNLOCALIZED: Obtain some Train Tracks",
"advancement.create.train_whistle": "UNLOCALIZED: Choo choo!",
"advancement.create.train_whistle": "UNLOCALIZED: Choo Choo!",
"advancement.create.train_whistle.desc": "UNLOCALIZED: Assemble a Steam Whistle to your Train and activate it while driving",
"advancement.create.train_portal": "UNLOCALIZED: Dimensional Commuter",
"advancement.create.train_portal.desc": "UNLOCALIZED: Ride a train through a Nether Portal",
"advancement.create.train_portal.desc": "UNLOCALIZED: Ride a Train through a Nether portal",
"advancement.create.track_crafting_factory": "UNLOCALIZED: Track Factory",
"advancement.create.track_crafting_factory.desc": "UNLOCALIZED: Produce more than 1000 train tracks in the same Mechanical Press",
"advancement.create.track_crafting_factory.desc": "UNLOCALIZED: Produce more than 1000 Train Tracks with the same Mechanical Press",
"advancement.create.long_bend": "UNLOCALIZED: The Longest Bend",
"advancement.create.long_bend.desc": "UNLOCALIZED: Create a Curved track section that spans more than 30 blocks in length",
"advancement.create.long_bend.desc": "UNLOCALIZED: Create a curved track section that spans more than 30 blocks in length",
"advancement.create.long_train": "UNLOCALIZED: Ambitious Endeavours",
"advancement.create.long_train.desc": "UNLOCALIZED: Create a Train with at least six Carriages",
"advancement.create.long_train.desc": "UNLOCALIZED: Create a Train with at least 6 carriages",
"advancement.create.long_travel": "UNLOCALIZED: Field Trip",
"advancement.create.long_travel.desc": "UNLOCALIZED: Leave a Train Seat over 5000 blocks away from where you started travelling",
"advancement.create.train_roadkill": "UNLOCALIZED: Road Kill",
"advancement.create.train_roadkill.desc": "UNLOCALIZED: Run over an Enemy with your Train§7\n(Hidden Advancement)",
"advancement.create.train_roadkill.desc": "UNLOCALIZED: Run over an enemy with your Train§7\n(Hidden Advancement)",
"advancement.create.red_signal": "UNLOCALIZED: Expert Driver",
"advancement.create.red_signal.desc": "UNLOCALIZED: Run a Red Signal with your Train§7\n(Hidden Advancement)",
"advancement.create.red_signal.desc": "UNLOCALIZED: Run a red Train Signal§7\n(Hidden Advancement)",
"advancement.create.train_crash": "UNLOCALIZED: Terrible Service",
"advancement.create.train_crash.desc": "UNLOCALIZED: Witness a Train Crash as a Passenger§7\n(Hidden Advancement)",
"advancement.create.train_crash.desc": "UNLOCALIZED: Witness a Train crash as a passenger§7\n(Hidden Advancement)",
"advancement.create.train_crash_backwards": "UNLOCALIZED: Blind Spot",
"advancement.create.train_crash_backwards.desc": "UNLOCALIZED: Crash into another Train while driving backwards§7\n(Hidden Advancement)",
@ -1260,6 +1260,8 @@
"create.item_attributes.smokable.inverted": "ne peut pas être fumé",
"create.item_attributes.blastable": "est fondable dans un Haut fourneau",
"create.item_attributes.blastable.inverted": "n'est pas fondable dans un Haut fourneau",
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
"create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s",
"create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s",
"create.item_attributes.shulker_level.full": "UNLOCALIZED: full",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 4",
"_": "Missing Localizations: 6",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1260,6 +1260,8 @@
"create.item_attributes.smokable.inverted": "non può essere affumicato",
"create.item_attributes.blastable": "è fondibile in un forno fusorio",
"create.item_attributes.blastable.inverted": "non è fondibile in un forno fusorio",
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
"create.item_attributes.shulker_level": "è uno shulker %1$s",
"create.item_attributes.shulker_level.inverted": "non è uno shulker %1$s",
"create.item_attributes.shulker_level.full": "pieno",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 4",
"_": "Missing Localizations: 6",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1260,6 +1260,8 @@
"create.item_attributes.smokable.inverted": "훈연될 수 없음",
"create.item_attributes.blastable": "용광로에 녹일 수 있음",
"create.item_attributes.blastable.inverted": "용광로에 녹일 수 없음",
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
"create.item_attributes.shulker_level": "셜커가 %1$s있음",
"create.item_attributes.shulker_level.inverted": "셜커가 %1$s있지 않음",
"create.item_attributes.shulker_level.full": "가득 차",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 2483",
"_": "Missing Localizations: 2485",
"_": "->------------------------] Game Elements [------------------------<-",
@ -667,28 +667,28 @@
"_": "->------------------------] Advancements [------------------------<-",
"advancement.create.root": "UNLOCALIZED: Welcome to Create",
"advancement.create.root.desc": "UNLOCALIZED: Here be Contraptions",
"advancement.create.root.desc": "UNLOCALIZED: Here Be Contraptions",
"advancement.create.andesite_alloy": "UNLOCALIZED: Sturdier Rocks",
"advancement.create.andesite_alloy.desc": "UNLOCALIZED: Obtain some Andesite Alloy, Create's most important resource",
"advancement.create.andesite_casing": "UNLOCALIZED: The Andesite Age",
"advancement.create.andesite_casing.desc": "UNLOCALIZED: Apply Andesite Alloy to wood creating a basic casing for your machines",
"advancement.create.mechanical_press": "UNLOCALIZED: Bonk",
"advancement.create.andesite_casing.desc": "UNLOCALIZED: Apply Andesite Alloy to stripped wood, creating a basic casing for your machines",
"advancement.create.mechanical_press": "UNLOCALIZED: Bonk!",
"advancement.create.mechanical_press.desc": "UNLOCALIZED: Create some sheets in a Mechanical Press",
"advancement.create.encased_fan": "UNLOCALIZED: Wind maker",
"advancement.create.encased_fan.desc": "UNLOCALIZED: Place and activate an Encased Fan",
"advancement.create.encased_fan": "UNLOCALIZED: Wind Maker",
"advancement.create.encased_fan.desc": "UNLOCALIZED: Place and power an Encased Fan",
"advancement.create.fan_processing": "UNLOCALIZED: Processing by Particle",
"advancement.create.fan_processing.desc": "UNLOCALIZED: Use an Encased Fan to process materials",
"advancement.create.saw_processing": "UNLOCALIZED: Workshop's most feared",
"advancement.create.saw_processing": "UNLOCALIZED: Workshop's Most Feared",
"advancement.create.saw_processing.desc": "UNLOCALIZED: Use an upright Mechanical Saw to process materials",
"advancement.create.compacting": "UNLOCALIZED: Compactification",
"advancement.create.compacting.desc": "UNLOCALIZED: Use a Press and a Basin to create less items from more items",
"advancement.create.compacting.desc": "UNLOCALIZED: Use a Mechanical Press and a Basin to create fewer items from more",
"advancement.create.belt": "UNLOCALIZED: Kelp Drive",
"advancement.create.belt.desc": "UNLOCALIZED: Connect two Shafts with a Mechanical Belt",
"advancement.create.funnel": "UNLOCALIZED: Airport Aesthetic",
"advancement.create.funnel.desc": "UNLOCALIZED: Extract or insert items into a container using a Funnel",
"advancement.create.chute": "UNLOCALIZED: Vertical Logistics",
"advancement.create.chute.desc": "UNLOCALIZED: Transport some items by Chute",
"advancement.create.mechanical_mixer": "UNLOCALIZED: Mixing it up",
"advancement.create.mechanical_mixer": "UNLOCALIZED: Mixing It Up",
"advancement.create.mechanical_mixer.desc": "UNLOCALIZED: Combine ingredients in a Mechanical Mixer",
"advancement.create.burner": "UNLOCALIZED: Sentient Fireplace",
"advancement.create.burner.desc": "UNLOCALIZED: Obtain a Blaze Burner",
@ -703,25 +703,25 @@
"advancement.create.super_glue": "UNLOCALIZED: Area of Connect",
"advancement.create.super_glue.desc": "UNLOCALIZED: Super Glue some blocks into a group",
"advancement.create.contraption_actors": "UNLOCALIZED: Moving with Purpose",
"advancement.create.contraption_actors.desc": "UNLOCALIZED: Create a contraption with drills, saws or harvesters on board",
"advancement.create.portable_storage_interface": "UNLOCALIZED: Drive-by exchange",
"advancement.create.portable_storage_interface.desc": "UNLOCALIZED: Use a Portable Storage Interface to take or insert items into a contraption",
"advancement.create.wrench_goggles": "UNLOCALIZED: Kitted out",
"advancement.create.wrench_goggles.desc": "UNLOCALIZED: Equip Engineer's goggles and a Wrench",
"advancement.create.contraption_actors.desc": "UNLOCALIZED: Create a Contraption with drills, saws, or harvesters on board",
"advancement.create.portable_storage_interface": "UNLOCALIZED: Drive-By Exchange",
"advancement.create.portable_storage_interface.desc": "UNLOCALIZED: Use a Portable Storage Interface to take or insert items into a Contraption",
"advancement.create.wrench_goggles": "UNLOCALIZED: Kitted Out",
"advancement.create.wrench_goggles.desc": "UNLOCALIZED: Equip Engineer's Goggles and a Wrench",
"advancement.create.stressometer": "UNLOCALIZED: Stress for Nerds",
"advancement.create.stressometer.desc": "UNLOCALIZED: Get an exact readout with the help of Goggles and a Stressometer",
"advancement.create.cuckoo_clock": "UNLOCALIZED: Is it Time?",
"advancement.create.stressometer.desc": "UNLOCALIZED: Get an exact readout with the help of Engineer's Goggles and a Stressometer",
"advancement.create.cuckoo_clock": "UNLOCALIZED: Is It Time?",
"advancement.create.cuckoo_clock.desc": "UNLOCALIZED: Witness your Cuckoo Clock announce bedtime",
"advancement.create.windmill_maxed": "UNLOCALIZED: A Strong Breeze",
"advancement.create.windmill_maxed.desc": "UNLOCALIZED: Assemble a windmill of maximum strength",
"advancement.create.ejector_maxed": "UNLOCALIZED: Springboard Champion",
"advancement.create.ejector_maxed.desc": "UNLOCALIZED: Get launched for more than 30 blocks by a Weighted Ejector",
"advancement.create.ejector_maxed.desc": "UNLOCALIZED: Get launched more than 30 blocks by a Weighted Ejector",
"advancement.create.pulley_maxed": "UNLOCALIZED: Rope to Nowhere",
"advancement.create.pulley_maxed.desc": "UNLOCALIZED: Extend a Rope Pulley over 200 blocks deep",
"advancement.create.cart_pickup": "UNLOCALIZED: Strong Arms",
"advancement.create.cart_pickup.desc": "UNLOCALIZED: Pick up a Minecart Contraption with at least 200 attached blocks",
"advancement.create.anvil_plough": "UNLOCALIZED: Blacksmith Artillery",
"advancement.create.anvil_plough.desc": "UNLOCALIZED: Launch an Anvil with Mechanical ploughs",
"advancement.create.anvil_plough.desc": "UNLOCALIZED: Launch an Anvil with Mechanical Ploughs",
"advancement.create.lava_wheel_00000": "UNLOCALIZED: Magma Wheel",
"advancement.create.lava_wheel_00000.desc": "UNLOCALIZED: This shouldn't have worked§7\n(Hidden Advancement)",
"advancement.create.hand_crank_000": "UNLOCALIZED: Workout Session",
@ -730,62 +730,62 @@
"advancement.create.belt_funnel_kiss.desc": "UNLOCALIZED: Make two Belt-mounted Funnels kiss§7\n(Hidden Advancement)",
"advancement.create.stressometer_maxed": "UNLOCALIZED: Perfectly Stressed",
"advancement.create.stressometer_maxed.desc": "UNLOCALIZED: Get a 100% readout from a Stressometer§7\n(Hidden Advancement)",
"advancement.create.copper": "UNLOCALIZED: More Sturdier Rocks",
"advancement.create.copper.desc": "UNLOCALIZED: Amass some Copper for your exploits in Fluid Manipulation",
"advancement.create.copper": "UNLOCALIZED: Cuprum Bokum",
"advancement.create.copper.desc": "UNLOCALIZED: Amass some Copper Ingots for your exploits in fluid manipulation",
"advancement.create.copper_casing": "UNLOCALIZED: The Copper Age",
"advancement.create.copper_casing.desc": "UNLOCALIZED: Apply Copper Ingots to wood creating a waterproof casing for your machines",
"advancement.create.copper_casing.desc": "UNLOCALIZED: Apply Copper Ingots to stripped wood, creating a waterproof casing for your machines",
"advancement.create.spout": "UNLOCALIZED: Sploosh",
"advancement.create.spout.desc": "UNLOCALIZED: Watch a fluid containing item be filled using a Spout",
"advancement.create.spout.desc": "UNLOCALIZED: Watch a fluid-containing item be filled by a Spout",
"advancement.create.drain": "UNLOCALIZED: Tumble Draining",
"advancement.create.drain.desc": "UNLOCALIZED: Watch a fluid containing item be emptied by an Item Drain",
"advancement.create.drain.desc": "UNLOCALIZED: Watch a fluid-containing item be emptied by an Item Drain",
"advancement.create.steam_engine": "UNLOCALIZED: The Powerhouse",
"advancement.create.steam_engine.desc": "UNLOCALIZED: Use a Steam engine to generate torque",
"advancement.create.steam_engine.desc": "UNLOCALIZED: Use a Steam Engine to generate torque",
"advancement.create.steam_whistle": "UNLOCALIZED: Voice of an Angel",
"advancement.create.steam_whistle.desc": "UNLOCALIZED: Activate a Steam Whistle",
"advancement.create.backtank": "UNLOCALIZED: Pressure to Go",
"advancement.create.backtank.desc": "UNLOCALIZED: Create a copper backtank and make it accumulate Air Pressure",
"advancement.create.backtank.desc": "UNLOCALIZED: Create a Copper Backtank and make it accumulate air pressure",
"advancement.create.diving_suit": "UNLOCALIZED: Ready for the Depths",
"advancement.create.diving_suit.desc": "UNLOCALIZED: Equip a diving helmet together with your backtank and jump into water",
"advancement.create.diving_suit.desc": "UNLOCALIZED: Equip a Diving Helmet and a Copper Backtank, then jump into water",
"advancement.create.mechanical_pump_0": "UNLOCALIZED: Under Pressure",
"advancement.create.mechanical_pump_0.desc": "UNLOCALIZED: Place and power a Mechanical Pump",
"advancement.create.glass_pipe": "UNLOCALIZED: Flow Discovery",
"advancement.create.glass_pipe.desc": "UNLOCALIZED: Use your Wrench on a pipe that contains a fluid",
"advancement.create.water_supply": "UNLOCALIZED: Puddle Collector",
"advancement.create.water_supply.desc": "UNLOCALIZED: Use the pulling end of a pipe or pump to collect a water block",
"advancement.create.water_supply.desc": "UNLOCALIZED: Use the pulling end of a Fluid Pipe or Mechanical Pump to collect water",
"advancement.create.hose_pulley": "UNLOCALIZED: Industrial Spillage",
"advancement.create.hose_pulley.desc": "UNLOCALIZED: Lower a Hose Pulley and watch it drain or fill a body of fluid",
"advancement.create.chocolate_bucket": "UNLOCALIZED: A World of Imagination",
"advancement.create.chocolate_bucket.desc": "UNLOCALIZED: Obtain a Bucket of Molten Chocolate",
"advancement.create.chocolate_bucket.desc": "UNLOCALIZED: Obtain a bucket of molten chocolate",
"advancement.create.honey_drain": "UNLOCALIZED: Autonomous Bee-Keeping",
"advancement.create.honey_drain.desc": "UNLOCALIZED: Use pipes to pull honey from a Bee Nest or Bee House",
"advancement.create.honey_drain.desc": "UNLOCALIZED: Use pipes to pull honey from a Bee Nest or Beehive",
"advancement.create.hose_pulley_lava": "UNLOCALIZED: Tapping the Mantle",
"advancement.create.hose_pulley_lava.desc": "UNLOCALIZED: Pump from a body of Lava large enough to be considered infinite",
"advancement.create.hose_pulley_lava.desc": "UNLOCALIZED: Pump from a body of lava large enough to be considered infinite",
"advancement.create.steam_engine_maxed": "UNLOCALIZED: Full Steam",
"advancement.create.steam_engine_maxed.desc": "UNLOCALIZED: Run a boiler at the maximum level of power",
"advancement.create.foods": "UNLOCALIZED: Balanced Diet",
"advancement.create.foods.desc": "UNLOCALIZED: Create Chocolate Berries, a Honeyed Apple and a Sweet Roll; all from the same Spout",
"advancement.create.foods.desc": "UNLOCALIZED: Create Chocolate Glazed Berries, a Honeyed Apple, and a Sweet Roll all from the same Spout",
"advancement.create.diving_suit_lava": "UNLOCALIZED: Swimming with the Striders",
"advancement.create.diving_suit_lava.desc": "UNLOCALIZED: Attempt to take a dive in lava with your Copper Diving Gear§7\n(Hidden Advancement)",
"advancement.create.diving_suit_lava.desc": "UNLOCALIZED: Attempt to take a dive in lava with your diving gear§7\n(Hidden Advancement)",
"advancement.create.chained_drain": "UNLOCALIZED: On a Roll",
"advancement.create.chained_drain.desc": "UNLOCALIZED: Watch an Item move across a row of Item Drains§7\n(Hidden Advancement)",
"advancement.create.cross_streams": "UNLOCALIZED: Don't cross the Streams!",
"advancement.create.chained_drain.desc": "UNLOCALIZED: Watch an item move across a row of Item Drains§7\n(Hidden Advancement)",
"advancement.create.cross_streams": "UNLOCALIZED: Don't Cross the Streams!",
"advancement.create.cross_streams.desc": "UNLOCALIZED: Watch two fluids meet in your pipe network§7\n(Hidden Advancement)",
"advancement.create.pipe_organ": "UNLOCALIZED: The Pipe Organ",
"advancement.create.pipe_organ.desc": "UNLOCALIZED: Attach 12 uniquely pitched Steam Whistles to a single fluid tank§7\n(Hidden Advancement)",
"advancement.create.pipe_organ.desc": "UNLOCALIZED: Attach 12 uniquely pitched Steam Whistles to a single Fluid Tank§7\n(Hidden Advancement)",
"advancement.create.brass": "UNLOCALIZED: Real Alloys",
"advancement.create.brass.desc": "UNLOCALIZED: Create some Brass from Copper and Zinc ingots in your Blaze-powered Mixer",
"advancement.create.brass.desc": "UNLOCALIZED: Create Brass Ingots by alloying Copper and Zinc Ingots in your Blaze-heated Mechanical Mixer",
"advancement.create.brass_casing": "UNLOCALIZED: The Brass Age",
"advancement.create.brass_casing.desc": "UNLOCALIZED: Apply Brass Ingots to wood creating a casing for more sophisticated machines",
"advancement.create.brass_casing.desc": "UNLOCALIZED: Apply Brass Ingots to stripped wood, creating a casing for more sophisticated machines",
"advancement.create.rose_quartz": "UNLOCALIZED: Pink Diamonds",
"advancement.create.rose_quartz.desc": "UNLOCALIZED: Polish some Rose Quartz",
"advancement.create.deployer": "UNLOCALIZED: Artificial Intelligence",
"advancement.create.deployer.desc": "UNLOCALIZED: Place and activate a Deployer, the perfect reflection of yourself",
"advancement.create.deployer.desc": "UNLOCALIZED: Place and power a Deployer, the perfect reflection of yourself",
"advancement.create.precision_mechanism": "UNLOCALIZED: Complex Curiosities",
"advancement.create.precision_mechanism.desc": "UNLOCALIZED: Assemble a Precision Mechanism",
"advancement.create.speed_controller": "UNLOCALIZED: Engineers Hate Him!",
"advancement.create.speed_controller.desc": "UNLOCALIZED: Fine tune your contraption with a Rotation Speed Controller",
"advancement.create.speed_controller.desc": "UNLOCALIZED: Fine-tune your Contraption with a Rotation Speed Controller",
"advancement.create.mechanical_arm": "UNLOCALIZED: Busy Hands",
"advancement.create.mechanical_arm.desc": "UNLOCALIZED: Watch your Mechanical Arm transport its first Item",
"advancement.create.mechanical_arm.desc": "UNLOCALIZED: Watch your Mechanical Arm transport its first item",
"advancement.create.mechanical_crafter": "UNLOCALIZED: Automated Assembly",
"advancement.create.mechanical_crafter.desc": "UNLOCALIZED: Place and power some Mechanical Crafters",
"advancement.create.crushing_wheel": "UNLOCALIZED: A Pair of Giants",
@ -795,7 +795,7 @@
"advancement.create.clockwork_bearing": "UNLOCALIZED: Contraption O'Clock",
"advancement.create.clockwork_bearing.desc": "UNLOCALIZED: Assemble a structure mounted on a Clockwork Bearing",
"advancement.create.display_link": "UNLOCALIZED: Big Data",
"advancement.create.display_link.desc": "UNLOCALIZED: Use a Display link to visualise information",
"advancement.create.display_link.desc": "UNLOCALIZED: Use a Display Link to visualise information",
"advancement.create.potato_cannon": "UNLOCALIZED: Fwoomp!",
"advancement.create.potato_cannon.desc": "UNLOCALIZED: Defeat an enemy with your Potato Cannon",
"advancement.create.extendo_grip": "UNLOCALIZED: Boioioing!",
@ -804,54 +804,54 @@
"advancement.create.linked_controller.desc": "UNLOCALIZED: Activate a Redstone Link using a Linked Controller",
"advancement.create.arm_blaze_burner": "UNLOCALIZED: Combust-o-Tron",
"advancement.create.arm_blaze_burner.desc": "UNLOCALIZED: Instruct a Mechanical Arm to feed your Blaze Burner",
"advancement.create.crusher_maxed_0000": "UNLOCALIZED: Crushing it",
"advancement.create.crusher_maxed_0000.desc": "UNLOCALIZED: Operate a Pair of Crushing wheels at max speed",
"advancement.create.crusher_maxed_0000": "UNLOCALIZED: Crushing It",
"advancement.create.crusher_maxed_0000.desc": "UNLOCALIZED: Operate a pair of Crushing Wheels at maximum speed",
"advancement.create.arm_many_targets": "UNLOCALIZED: Organize-o-Tron",
"advancement.create.arm_many_targets.desc": "UNLOCALIZED: Program a Mechanical Arm with ten or more output locations",
"advancement.create.arm_many_targets.desc": "UNLOCALIZED: Program a Mechanical Arm with 10 or more output locations",
"advancement.create.potato_cannon_collide": "UNLOCALIZED: Veggie Fireworks",
"advancement.create.potato_cannon_collide.desc": "UNLOCALIZED: Cause potato cannon projectiles of different types to collide with each other",
"advancement.create.potato_cannon_collide.desc": "UNLOCALIZED: Cause Potato Cannon projectiles of different types to collide with each other",
"advancement.create.self_deploying": "UNLOCALIZED: Self-Driving Cart",
"advancement.create.self_deploying.desc": "UNLOCALIZED: Create a Minecart Contraption that places tracks in front of itself",
"advancement.create.fist_bump": "UNLOCALIZED: Pound It, Bro!",
"advancement.create.fist_bump.desc": "UNLOCALIZED: Make two Deployers fist-bump§7\n(Hidden Advancement)",
"advancement.create.crafter_lazy_000": "UNLOCALIZED: Desperate Measures",
"advancement.create.crafter_lazy_000.desc": "UNLOCALIZED: Drastically slow down a Mechanical Crafter to procrastinate on proper infrastructure§7\n(Hidden Advancement)",
"advancement.create.extendo_grip_dual": "UNLOCALIZED: To full Extent",
"advancement.create.extendo_grip_dual.desc": "UNLOCALIZED: Dual wield Extendo Grips for super-human reach§7\n(Hidden Advancement)",
"advancement.create.extendo_grip_dual": "UNLOCALIZED: To Full Extent",
"advancement.create.extendo_grip_dual.desc": "UNLOCALIZED: Dual-wield Extendo Grips for superhuman reach§7\n(Hidden Advancement)",
"advancement.create.musical_arm": "UNLOCALIZED: DJ Mechanico",
"advancement.create.musical_arm.desc": "UNLOCALIZED: Watch a Mechanical Arm operate your Jukebox§7\n(Hidden Advancement)",
"advancement.create.sturdy_sheet": "UNLOCALIZED: The Sturdiest Rocks",
"advancement.create.sturdy_sheet.desc": "UNLOCALIZED: Assemble a Sturdy Sheet from refining crushed Obsidian",
"advancement.create.sturdy_sheet.desc": "UNLOCALIZED: Assemble a Sturdy Sheet by refining Powdered Obsidian",
"advancement.create.train_casing_00": "UNLOCALIZED: The Logistical Age",
"advancement.create.train_casing_00.desc": "UNLOCALIZED: Use Sturdy Sheets to create a Casing for Railway Components",
"advancement.create.train_casing_00.desc": "UNLOCALIZED: Use Sturdy Sheets to create a casing for railway components",
"advancement.create.train": "UNLOCALIZED: All Aboard!",
"advancement.create.train.desc": "UNLOCALIZED: Assemble your first Train",
"advancement.create.conductor": "UNLOCALIZED: Conductor Instructor",
"advancement.create.conductor.desc": "UNLOCALIZED: Instruct a Train driver with a Schedule",
"advancement.create.conductor.desc": "UNLOCALIZED: Instruct a Train driver with a Train Schedule",
"advancement.create.track_signal": "UNLOCALIZED: Traffic Control",
"advancement.create.track_signal.desc": "UNLOCALIZED: Place a Train Signal",
"advancement.create.display_board_0": "UNLOCALIZED: Dynamic Timetables",
"advancement.create.display_board_0.desc": "UNLOCALIZED: Forecast a Train's arrival on your Display Board with the help of Display Links",
"advancement.create.track_0": "UNLOCALIZED: A new Gauge",
"advancement.create.track_0": "UNLOCALIZED: A New Gauge",
"advancement.create.track_0.desc": "UNLOCALIZED: Obtain some Train Tracks",
"advancement.create.train_whistle": "UNLOCALIZED: Choo choo!",
"advancement.create.train_whistle": "UNLOCALIZED: Choo Choo!",
"advancement.create.train_whistle.desc": "UNLOCALIZED: Assemble a Steam Whistle to your Train and activate it while driving",
"advancement.create.train_portal": "UNLOCALIZED: Dimensional Commuter",
"advancement.create.train_portal.desc": "UNLOCALIZED: Ride a train through a Nether Portal",
"advancement.create.train_portal.desc": "UNLOCALIZED: Ride a Train through a Nether portal",
"advancement.create.track_crafting_factory": "UNLOCALIZED: Track Factory",
"advancement.create.track_crafting_factory.desc": "UNLOCALIZED: Produce more than 1000 train tracks in the same Mechanical Press",
"advancement.create.track_crafting_factory.desc": "UNLOCALIZED: Produce more than 1000 Train Tracks with the same Mechanical Press",
"advancement.create.long_bend": "UNLOCALIZED: The Longest Bend",
"advancement.create.long_bend.desc": "UNLOCALIZED: Create a Curved track section that spans more than 30 blocks in length",
"advancement.create.long_bend.desc": "UNLOCALIZED: Create a curved track section that spans more than 30 blocks in length",
"advancement.create.long_train": "UNLOCALIZED: Ambitious Endeavours",
"advancement.create.long_train.desc": "UNLOCALIZED: Create a Train with at least six Carriages",
"advancement.create.long_train.desc": "UNLOCALIZED: Create a Train with at least 6 carriages",
"advancement.create.long_travel": "UNLOCALIZED: Field Trip",
"advancement.create.long_travel.desc": "UNLOCALIZED: Leave a Train Seat over 5000 blocks away from where you started travelling",
"advancement.create.train_roadkill": "UNLOCALIZED: Road Kill",
"advancement.create.train_roadkill.desc": "UNLOCALIZED: Run over an Enemy with your Train§7\n(Hidden Advancement)",
"advancement.create.train_roadkill.desc": "UNLOCALIZED: Run over an enemy with your Train§7\n(Hidden Advancement)",
"advancement.create.red_signal": "UNLOCALIZED: Expert Driver",
"advancement.create.red_signal.desc": "UNLOCALIZED: Run a Red Signal with your Train§7\n(Hidden Advancement)",
"advancement.create.red_signal.desc": "UNLOCALIZED: Run a red Train Signal§7\n(Hidden Advancement)",
"advancement.create.train_crash": "UNLOCALIZED: Terrible Service",
"advancement.create.train_crash.desc": "UNLOCALIZED: Witness a Train Crash as a Passenger§7\n(Hidden Advancement)",
"advancement.create.train_crash.desc": "UNLOCALIZED: Witness a Train crash as a passenger§7\n(Hidden Advancement)",
"advancement.create.train_crash_backwards": "UNLOCALIZED: Blind Spot",
"advancement.create.train_crash_backwards.desc": "UNLOCALIZED: Crash into another Train while driving backwards§7\n(Hidden Advancement)",
@ -1258,8 +1258,10 @@
"create.item_attributes.smeltable.inverted": "UNLOCALIZED: cannot be Smelted",
"create.item_attributes.smokable": "UNLOCALIZED: can be Smoked",
"create.item_attributes.smokable.inverted": "UNLOCALIZED: cannot be Smoked",
"create.item_attributes.blastable": "UNLOCALIZED: is smeltable in Blast Furnace",
"create.item_attributes.blastable.inverted": "UNLOCALIZED: is not smeltable in Blast Furnace",
"create.item_attributes.blastable": "UNLOCALIZED: can be Smelted in a Blast Furnace",
"create.item_attributes.blastable.inverted": "UNLOCALIZED: cannot be Smelted in a Blast Furnace",
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
"create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s",
"create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s",
"create.item_attributes.shulker_level.full": "UNLOCALIZED: full",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 8",
"_": "Missing Localizations: 10",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1260,6 +1260,8 @@
"create.item_attributes.smokable.inverted": "nie może być wędzony",
"create.item_attributes.blastable": "może być stopiony w piecu hutniczym",
"create.item_attributes.blastable.inverted": "nie może być stopiony w piecu hutniczym",
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
"create.item_attributes.shulker_level": "jest %1$s",
"create.item_attributes.shulker_level.inverted": "nie jest %1$s",
"create.item_attributes.shulker_level.full": "pełna",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1327",
"_": "Missing Localizations: 1329",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1260,6 +1260,8 @@
"create.item_attributes.smokable.inverted": "Não pode ser defumado",
"create.item_attributes.blastable": "È fundível no alto-forno",
"create.item_attributes.blastable.inverted": "Não é fundível no alto-forno",
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
"create.item_attributes.shulker_level": "O shulker é %1$s",
"create.item_attributes.shulker_level.inverted": "O shulker não é %1$s",
"create.item_attributes.shulker_level.full": "Cheio",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 2192",
"_": "Missing Localizations: 2194",
"_": "->------------------------] Game Elements [------------------------<-",
@ -672,23 +672,23 @@
"advancement.create.andesite_alloy.desc": "Materiais do Create tem nomes estranhos, a liga de andesito é um deles.",
"advancement.create.andesite_casing": "A era do andesito",
"advancement.create.andesite_casing.desc": "Use um pouco de liga de andesito e madeira para fazer um revestimento basico.",
"advancement.create.mechanical_press": "UNLOCALIZED: Bonk",
"advancement.create.mechanical_press": "UNLOCALIZED: Bonk!",
"advancement.create.mechanical_press.desc": "UNLOCALIZED: Create some sheets in a Mechanical Press",
"advancement.create.encased_fan": "UNLOCALIZED: Wind maker",
"advancement.create.encased_fan.desc": "UNLOCALIZED: Place and activate an Encased Fan",
"advancement.create.encased_fan": "UNLOCALIZED: Wind Maker",
"advancement.create.encased_fan.desc": "UNLOCALIZED: Place and power an Encased Fan",
"advancement.create.fan_processing": "UNLOCALIZED: Processing by Particle",
"advancement.create.fan_processing.desc": "UNLOCALIZED: Use an Encased Fan to process materials",
"advancement.create.saw_processing": "UNLOCALIZED: Workshop's most feared",
"advancement.create.saw_processing": "UNLOCALIZED: Workshop's Most Feared",
"advancement.create.saw_processing.desc": "UNLOCALIZED: Use an upright Mechanical Saw to process materials",
"advancement.create.compacting": "UNLOCALIZED: Compactification",
"advancement.create.compacting.desc": "UNLOCALIZED: Use a Press and a Basin to create less items from more items",
"advancement.create.compacting.desc": "UNLOCALIZED: Use a Mechanical Press and a Basin to create fewer items from more",
"advancement.create.belt": "Correia de alga",
"advancement.create.belt.desc": "Conecte dois eixos com uma esteira mecanica.",
"advancement.create.funnel": "UNLOCALIZED: Airport Aesthetic",
"advancement.create.funnel.desc": "UNLOCALIZED: Extract or insert items into a container using a Funnel",
"advancement.create.chute": "Caindo",
"advancement.create.chute.desc": "coloque uma calha a versão vertical da esteira mecanica.",
"advancement.create.mechanical_mixer": "UNLOCALIZED: Mixing it up",
"advancement.create.mechanical_mixer": "UNLOCALIZED: Mixing It Up",
"advancement.create.mechanical_mixer.desc": "UNLOCALIZED: Combine ingredients in a Mechanical Mixer",
"advancement.create.burner": "UNLOCALIZED: Sentient Fireplace",
"advancement.create.burner.desc": "UNLOCALIZED: Obtain a Blaze Burner",
@ -703,25 +703,25 @@
"advancement.create.super_glue": "UNLOCALIZED: Area of Connect",
"advancement.create.super_glue.desc": "UNLOCALIZED: Super Glue some blocks into a group",
"advancement.create.contraption_actors": "UNLOCALIZED: Moving with Purpose",
"advancement.create.contraption_actors.desc": "UNLOCALIZED: Create a contraption with drills, saws or harvesters on board",
"advancement.create.portable_storage_interface": "UNLOCALIZED: Drive-by exchange",
"advancement.create.portable_storage_interface.desc": "UNLOCALIZED: Use a Portable Storage Interface to take or insert items into a contraption",
"advancement.create.wrench_goggles": "UNLOCALIZED: Kitted out",
"advancement.create.wrench_goggles.desc": "UNLOCALIZED: Equip Engineer's goggles and a Wrench",
"advancement.create.contraption_actors.desc": "UNLOCALIZED: Create a Contraption with drills, saws, or harvesters on board",
"advancement.create.portable_storage_interface": "UNLOCALIZED: Drive-By Exchange",
"advancement.create.portable_storage_interface.desc": "UNLOCALIZED: Use a Portable Storage Interface to take or insert items into a Contraption",
"advancement.create.wrench_goggles": "UNLOCALIZED: Kitted Out",
"advancement.create.wrench_goggles.desc": "UNLOCALIZED: Equip Engineer's Goggles and a Wrench",
"advancement.create.stressometer": "Mas quão estressado exatamente?",
"advancement.create.stressometer.desc": "Coloque e energise o estressómetro. Olhe a este por atraves dos seus óculos para ler o valor exato.",
"advancement.create.cuckoo_clock": "UNLOCALIZED: Is it Time?",
"advancement.create.cuckoo_clock": "UNLOCALIZED: Is It Time?",
"advancement.create.cuckoo_clock.desc": "UNLOCALIZED: Witness your Cuckoo Clock announce bedtime",
"advancement.create.windmill_maxed": "UNLOCALIZED: A Strong Breeze",
"advancement.create.windmill_maxed.desc": "UNLOCALIZED: Assemble a windmill of maximum strength",
"advancement.create.ejector_maxed": "UNLOCALIZED: Springboard Champion",
"advancement.create.ejector_maxed.desc": "UNLOCALIZED: Get launched for more than 30 blocks by a Weighted Ejector",
"advancement.create.ejector_maxed.desc": "UNLOCALIZED: Get launched more than 30 blocks by a Weighted Ejector",
"advancement.create.pulley_maxed": "UNLOCALIZED: Rope to Nowhere",
"advancement.create.pulley_maxed.desc": "UNLOCALIZED: Extend a Rope Pulley over 200 blocks deep",
"advancement.create.cart_pickup": "UNLOCALIZED: Strong Arms",
"advancement.create.cart_pickup.desc": "UNLOCALIZED: Pick up a Minecart Contraption with at least 200 attached blocks",
"advancement.create.anvil_plough": "UNLOCALIZED: Blacksmith Artillery",
"advancement.create.anvil_plough.desc": "UNLOCALIZED: Launch an Anvil with Mechanical ploughs",
"advancement.create.anvil_plough.desc": "UNLOCALIZED: Launch an Anvil with Mechanical Ploughs",
"advancement.create.lava_wheel_00000": "UNLOCALIZED: Magma Wheel",
"advancement.create.lava_wheel_00000.desc": "UNLOCALIZED: This shouldn't have worked§7\n(Hidden Advancement)",
"advancement.create.hand_crank_000": "UNLOCALIZED: Workout Session",
@ -730,48 +730,48 @@
"advancement.create.belt_funnel_kiss.desc": "UNLOCALIZED: Make two Belt-mounted Funnels kiss§7\n(Hidden Advancement)",
"advancement.create.stressometer_maxed": "UNLOCALIZED: Perfectly Stressed",
"advancement.create.stressometer_maxed.desc": "UNLOCALIZED: Get a 100% readout from a Stressometer§7\n(Hidden Advancement)",
"advancement.create.copper": "UNLOCALIZED: More Sturdier Rocks",
"advancement.create.copper.desc": "UNLOCALIZED: Amass some Copper for your exploits in Fluid Manipulation",
"advancement.create.copper": "UNLOCALIZED: Cuprum Bokum",
"advancement.create.copper.desc": "UNLOCALIZED: Amass some Copper Ingots for your exploits in fluid manipulation",
"advancement.create.copper_casing": "A era do cobre",
"advancement.create.copper_casing.desc": "Use um pouco de chapas de cobre e madeira para criar um pouco de revestimentos de cobre.",
"advancement.create.spout": "Sploosh",
"advancement.create.spout.desc": "Assista um item ser enchido usando uma bica.",
"advancement.create.drain": "UNLOCALIZED: Tumble Draining",
"advancement.create.drain.desc": "UNLOCALIZED: Watch a fluid containing item be emptied by an Item Drain",
"advancement.create.drain.desc": "UNLOCALIZED: Watch a fluid-containing item be emptied by an Item Drain",
"advancement.create.steam_engine": "UNLOCALIZED: The Powerhouse",
"advancement.create.steam_engine.desc": "UNLOCALIZED: Use a Steam engine to generate torque",
"advancement.create.steam_engine.desc": "UNLOCALIZED: Use a Steam Engine to generate torque",
"advancement.create.steam_whistle": "UNLOCALIZED: Voice of an Angel",
"advancement.create.steam_whistle.desc": "UNLOCALIZED: Activate a Steam Whistle",
"advancement.create.backtank": "UNLOCALIZED: Pressure to Go",
"advancement.create.backtank.desc": "UNLOCALIZED: Create a copper backtank and make it accumulate Air Pressure",
"advancement.create.backtank.desc": "UNLOCALIZED: Create a Copper Backtank and make it accumulate air pressure",
"advancement.create.diving_suit": "UNLOCALIZED: Ready for the Depths",
"advancement.create.diving_suit.desc": "UNLOCALIZED: Equip a diving helmet together with your backtank and jump into water",
"advancement.create.diving_suit.desc": "UNLOCALIZED: Equip a Diving Helmet and a Copper Backtank, then jump into water",
"advancement.create.mechanical_pump_0": "UNLOCALIZED: Under Pressure",
"advancement.create.mechanical_pump_0.desc": "UNLOCALIZED: Place and power a Mechanical Pump",
"advancement.create.glass_pipe": "Espião de fluxo",
"advancement.create.glass_pipe.desc": "Assista fluidos se propagarem por através de canos de fluido com janela. Canos retos ficam com janelas quando uma chave inglesa é usada neles.",
"advancement.create.water_supply": "UNLOCALIZED: Puddle Collector",
"advancement.create.water_supply.desc": "UNLOCALIZED: Use the pulling end of a pipe or pump to collect a water block",
"advancement.create.water_supply.desc": "UNLOCALIZED: Use the pulling end of a Fluid Pipe or Mechanical Pump to collect water",
"advancement.create.hose_pulley": "Vazamento industrial",
"advancement.create.hose_pulley.desc": "desça uma polia de mangueira e assista esta drenar ou encher qualquer corpo de fluido.",
"advancement.create.chocolate_bucket": "UNLOCALIZED: A World of Imagination",
"advancement.create.chocolate_bucket.desc": "UNLOCALIZED: Obtain a Bucket of Molten Chocolate",
"advancement.create.chocolate_bucket.desc": "UNLOCALIZED: Obtain a bucket of molten chocolate",
"advancement.create.honey_drain": "UNLOCALIZED: Autonomous Bee-Keeping",
"advancement.create.honey_drain.desc": "UNLOCALIZED: Use pipes to pull honey from a Bee Nest or Bee House",
"advancement.create.honey_drain.desc": "UNLOCALIZED: Use pipes to pull honey from a Bee Nest or Beehive",
"advancement.create.hose_pulley_lava": "UNLOCALIZED: Tapping the Mantle",
"advancement.create.hose_pulley_lava.desc": "UNLOCALIZED: Pump from a body of Lava large enough to be considered infinite",
"advancement.create.hose_pulley_lava.desc": "UNLOCALIZED: Pump from a body of lava large enough to be considered infinite",
"advancement.create.steam_engine_maxed": "UNLOCALIZED: Full Steam",
"advancement.create.steam_engine_maxed.desc": "UNLOCALIZED: Run a boiler at the maximum level of power",
"advancement.create.foods": "UNLOCALIZED: Balanced Diet",
"advancement.create.foods.desc": "UNLOCALIZED: Create Chocolate Berries, a Honeyed Apple and a Sweet Roll; all from the same Spout",
"advancement.create.foods.desc": "UNLOCALIZED: Create Chocolate Glazed Berries, a Honeyed Apple, and a Sweet Roll all from the same Spout",
"advancement.create.diving_suit_lava": "UNLOCALIZED: Swimming with the Striders",
"advancement.create.diving_suit_lava.desc": "UNLOCALIZED: Attempt to take a dive in lava with your Copper Diving Gear§7\n(Hidden Advancement)",
"advancement.create.diving_suit_lava.desc": "UNLOCALIZED: Attempt to take a dive in lava with your diving gear§7\n(Hidden Advancement)",
"advancement.create.chained_drain": "UNLOCALIZED: On a Roll",
"advancement.create.chained_drain.desc": "UNLOCALIZED: Watch an Item move across a row of Item Drains§7\n(Hidden Advancement)",
"advancement.create.cross_streams": "UNLOCALIZED: Don't cross the Streams!",
"advancement.create.chained_drain.desc": "UNLOCALIZED: Watch an item move across a row of Item Drains§7\n(Hidden Advancement)",
"advancement.create.cross_streams": "UNLOCALIZED: Don't Cross the Streams!",
"advancement.create.cross_streams.desc": "UNLOCALIZED: Watch two fluids meet in your pipe network§7\n(Hidden Advancement)",
"advancement.create.pipe_organ": "UNLOCALIZED: The Pipe Organ",
"advancement.create.pipe_organ.desc": "UNLOCALIZED: Attach 12 uniquely pitched Steam Whistles to a single fluid tank§7\n(Hidden Advancement)",
"advancement.create.pipe_organ.desc": "UNLOCALIZED: Attach 12 uniquely pitched Steam Whistles to a single Fluid Tank§7\n(Hidden Advancement)",
"advancement.create.brass": "Ligas de verdade",
"advancement.create.brass.desc": "Use cobre esmagado e zinco esmagado para criar um pouco de latão.",
"advancement.create.brass_casing": "a era do latão",
@ -795,7 +795,7 @@
"advancement.create.clockwork_bearing": "Hora da engenhoca",
"advancement.create.clockwork_bearing.desc": "Ative uma estrutura conectada a um rolamento de rêlogio.",
"advancement.create.display_link": "UNLOCALIZED: Big Data",
"advancement.create.display_link.desc": "UNLOCALIZED: Use a Display link to visualise information",
"advancement.create.display_link.desc": "UNLOCALIZED: Use a Display Link to visualise information",
"advancement.create.potato_cannon": "Fwoomp!",
"advancement.create.potato_cannon.desc": "Derrote um inimigo com o seu canhão de batata.",
"advancement.create.extendo_grip": "Boioioing!",
@ -804,54 +804,54 @@
"advancement.create.linked_controller.desc": "UNLOCALIZED: Activate a Redstone Link using a Linked Controller",
"advancement.create.arm_blaze_burner": "Combuste-tron",
"advancement.create.arm_blaze_burner.desc": "Instrua um braço mecânico para alimentar seu queimador de blaze.",
"advancement.create.crusher_maxed_0000": "UNLOCALIZED: Crushing it",
"advancement.create.crusher_maxed_0000.desc": "UNLOCALIZED: Operate a Pair of Crushing wheels at max speed",
"advancement.create.crusher_maxed_0000": "UNLOCALIZED: Crushing It",
"advancement.create.crusher_maxed_0000.desc": "UNLOCALIZED: Operate a pair of Crushing Wheels at maximum speed",
"advancement.create.arm_many_targets": "Organiza-tron",
"advancement.create.arm_many_targets.desc": "Programe um braço mecânico com dez ou mais locais de saida.",
"advancement.create.potato_cannon_collide": "UNLOCALIZED: Veggie Fireworks",
"advancement.create.potato_cannon_collide.desc": "UNLOCALIZED: Cause potato cannon projectiles of different types to collide with each other",
"advancement.create.potato_cannon_collide.desc": "UNLOCALIZED: Cause Potato Cannon projectiles of different types to collide with each other",
"advancement.create.self_deploying": "UNLOCALIZED: Self-Driving Cart",
"advancement.create.self_deploying.desc": "UNLOCALIZED: Create a Minecart Contraption that places tracks in front of itself",
"advancement.create.fist_bump": "UNLOCALIZED: Pound It, Bro!",
"advancement.create.fist_bump.desc": "UNLOCALIZED: Make two Deployers fist-bump§7\n(Hidden Advancement)",
"advancement.create.crafter_lazy_000": "UNLOCALIZED: Desperate Measures",
"advancement.create.crafter_lazy_000.desc": "UNLOCALIZED: Drastically slow down a Mechanical Crafter to procrastinate on proper infrastructure§7\n(Hidden Advancement)",
"advancement.create.extendo_grip_dual": "UNLOCALIZED: To full Extent",
"advancement.create.extendo_grip_dual.desc": "UNLOCALIZED: Dual wield Extendo Grips for super-human reach§7\n(Hidden Advancement)",
"advancement.create.extendo_grip_dual": "UNLOCALIZED: To Full Extent",
"advancement.create.extendo_grip_dual.desc": "UNLOCALIZED: Dual-wield Extendo Grips for superhuman reach§7\n(Hidden Advancement)",
"advancement.create.musical_arm": "toque minha musica!",
"advancement.create.musical_arm.desc": "Assista um braço mecânico operar seu toca-discos.",
"advancement.create.sturdy_sheet": "UNLOCALIZED: The Sturdiest Rocks",
"advancement.create.sturdy_sheet.desc": "UNLOCALIZED: Assemble a Sturdy Sheet from refining crushed Obsidian",
"advancement.create.sturdy_sheet.desc": "UNLOCALIZED: Assemble a Sturdy Sheet by refining Powdered Obsidian",
"advancement.create.train_casing_00": "UNLOCALIZED: The Logistical Age",
"advancement.create.train_casing_00.desc": "UNLOCALIZED: Use Sturdy Sheets to create a Casing for Railway Components",
"advancement.create.train_casing_00.desc": "UNLOCALIZED: Use Sturdy Sheets to create a casing for railway components",
"advancement.create.train": "UNLOCALIZED: All Aboard!",
"advancement.create.train.desc": "UNLOCALIZED: Assemble your first Train",
"advancement.create.conductor": "UNLOCALIZED: Conductor Instructor",
"advancement.create.conductor.desc": "UNLOCALIZED: Instruct a Train driver with a Schedule",
"advancement.create.conductor.desc": "UNLOCALIZED: Instruct a Train driver with a Train Schedule",
"advancement.create.track_signal": "UNLOCALIZED: Traffic Control",
"advancement.create.track_signal.desc": "UNLOCALIZED: Place a Train Signal",
"advancement.create.display_board_0": "UNLOCALIZED: Dynamic Timetables",
"advancement.create.display_board_0.desc": "UNLOCALIZED: Forecast a Train's arrival on your Display Board with the help of Display Links",
"advancement.create.track_0": "UNLOCALIZED: A new Gauge",
"advancement.create.track_0": "UNLOCALIZED: A New Gauge",
"advancement.create.track_0.desc": "UNLOCALIZED: Obtain some Train Tracks",
"advancement.create.train_whistle": "UNLOCALIZED: Choo choo!",
"advancement.create.train_whistle": "UNLOCALIZED: Choo Choo!",
"advancement.create.train_whistle.desc": "UNLOCALIZED: Assemble a Steam Whistle to your Train and activate it while driving",
"advancement.create.train_portal": "UNLOCALIZED: Dimensional Commuter",
"advancement.create.train_portal.desc": "UNLOCALIZED: Ride a train through a Nether Portal",
"advancement.create.train_portal.desc": "UNLOCALIZED: Ride a Train through a Nether portal",
"advancement.create.track_crafting_factory": "UNLOCALIZED: Track Factory",
"advancement.create.track_crafting_factory.desc": "UNLOCALIZED: Produce more than 1000 train tracks in the same Mechanical Press",
"advancement.create.track_crafting_factory.desc": "UNLOCALIZED: Produce more than 1000 Train Tracks with the same Mechanical Press",
"advancement.create.long_bend": "UNLOCALIZED: The Longest Bend",
"advancement.create.long_bend.desc": "UNLOCALIZED: Create a Curved track section that spans more than 30 blocks in length",
"advancement.create.long_bend.desc": "UNLOCALIZED: Create a curved track section that spans more than 30 blocks in length",
"advancement.create.long_train": "UNLOCALIZED: Ambitious Endeavours",
"advancement.create.long_train.desc": "UNLOCALIZED: Create a Train with at least six Carriages",
"advancement.create.long_train.desc": "UNLOCALIZED: Create a Train with at least 6 carriages",
"advancement.create.long_travel": "UNLOCALIZED: Field Trip",
"advancement.create.long_travel.desc": "UNLOCALIZED: Leave a Train Seat over 5000 blocks away from where you started travelling",
"advancement.create.train_roadkill": "UNLOCALIZED: Road Kill",
"advancement.create.train_roadkill.desc": "UNLOCALIZED: Run over an Enemy with your Train§7\n(Hidden Advancement)",
"advancement.create.train_roadkill.desc": "UNLOCALIZED: Run over an enemy with your Train§7\n(Hidden Advancement)",
"advancement.create.red_signal": "UNLOCALIZED: Expert Driver",
"advancement.create.red_signal.desc": "UNLOCALIZED: Run a Red Signal with your Train§7\n(Hidden Advancement)",
"advancement.create.red_signal.desc": "UNLOCALIZED: Run a red Train Signal§7\n(Hidden Advancement)",
"advancement.create.train_crash": "UNLOCALIZED: Terrible Service",
"advancement.create.train_crash.desc": "UNLOCALIZED: Witness a Train Crash as a Passenger§7\n(Hidden Advancement)",
"advancement.create.train_crash.desc": "UNLOCALIZED: Witness a Train crash as a passenger§7\n(Hidden Advancement)",
"advancement.create.train_crash_backwards": "UNLOCALIZED: Blind Spot",
"advancement.create.train_crash_backwards.desc": "UNLOCALIZED: Crash into another Train while driving backwards§7\n(Hidden Advancement)",
@ -1258,8 +1258,10 @@
"create.item_attributes.smeltable.inverted": "UNLOCALIZED: cannot be Smelted",
"create.item_attributes.smokable": "UNLOCALIZED: can be Smoked",
"create.item_attributes.smokable.inverted": "UNLOCALIZED: cannot be Smoked",
"create.item_attributes.blastable": "UNLOCALIZED: is smeltable in Blast Furnace",
"create.item_attributes.blastable.inverted": "UNLOCALIZED: is not smeltable in Blast Furnace",
"create.item_attributes.blastable": "UNLOCALIZED: can be Smelted in a Blast Furnace",
"create.item_attributes.blastable.inverted": "UNLOCALIZED: cannot be Smelted in a Blast Furnace",
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
"create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s",
"create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s",
"create.item_attributes.shulker_level.full": "UNLOCALIZED: full",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 651",
"_": "Missing Localizations: 653",
"_": "->------------------------] Game Elements [------------------------<-",
@ -672,23 +672,23 @@
"advancement.create.andesite_alloy.desc": "Materialele Create-ului au nume ciudate, Aliajul Din Andezit este unul dintre ele.",
"advancement.create.andesite_casing": "Epoca Andezitului",
"advancement.create.andesite_casing.desc": "Folosește niște Aliaj De Andezit și Lemn ca să creezi o Carcasă de bază.",
"advancement.create.mechanical_press": "UNLOCALIZED: Bonk",
"advancement.create.mechanical_press": "UNLOCALIZED: Bonk!",
"advancement.create.mechanical_press.desc": "UNLOCALIZED: Create some sheets in a Mechanical Press",
"advancement.create.encased_fan": "UNLOCALIZED: Wind maker",
"advancement.create.encased_fan.desc": "UNLOCALIZED: Place and activate an Encased Fan",
"advancement.create.encased_fan": "UNLOCALIZED: Wind Maker",
"advancement.create.encased_fan.desc": "UNLOCALIZED: Place and power an Encased Fan",
"advancement.create.fan_processing": "UNLOCALIZED: Processing by Particle",
"advancement.create.fan_processing.desc": "UNLOCALIZED: Use an Encased Fan to process materials",
"advancement.create.saw_processing": "UNLOCALIZED: Workshop's most feared",
"advancement.create.saw_processing": "UNLOCALIZED: Workshop's Most Feared",
"advancement.create.saw_processing.desc": "UNLOCALIZED: Use an upright Mechanical Saw to process materials",
"advancement.create.compacting": "UNLOCALIZED: Compactification",
"advancement.create.compacting.desc": "UNLOCALIZED: Use a Press and a Basin to create less items from more items",
"advancement.create.compacting.desc": "UNLOCALIZED: Use a Mechanical Press and a Basin to create fewer items from more",
"advancement.create.belt": "Conducere de Alge",
"advancement.create.belt.desc": "Conectează două rotoare cu o Bandă Mecanică.",
"advancement.create.funnel": "UNLOCALIZED: Airport Aesthetic",
"advancement.create.funnel.desc": "UNLOCALIZED: Extract or insert items into a container using a Funnel",
"advancement.create.chute": "Rostogolind în Jos",
"advancement.create.chute.desc": "Plasează un Tobogan, partea verticală echivalentă a unei Benzi.",
"advancement.create.mechanical_mixer": "UNLOCALIZED: Mixing it up",
"advancement.create.mechanical_mixer": "UNLOCALIZED: Mixing It Up",
"advancement.create.mechanical_mixer.desc": "UNLOCALIZED: Combine ingredients in a Mechanical Mixer",
"advancement.create.burner": "UNLOCALIZED: Sentient Fireplace",
"advancement.create.burner.desc": "UNLOCALIZED: Obtain a Blaze Burner",
@ -703,25 +703,25 @@
"advancement.create.super_glue": "UNLOCALIZED: Area of Connect",
"advancement.create.super_glue.desc": "UNLOCALIZED: Super Glue some blocks into a group",
"advancement.create.contraption_actors": "UNLOCALIZED: Moving with Purpose",
"advancement.create.contraption_actors.desc": "UNLOCALIZED: Create a contraption with drills, saws or harvesters on board",
"advancement.create.portable_storage_interface": "UNLOCALIZED: Drive-by exchange",
"advancement.create.portable_storage_interface.desc": "UNLOCALIZED: Use a Portable Storage Interface to take or insert items into a contraption",
"advancement.create.wrench_goggles": "UNLOCALIZED: Kitted out",
"advancement.create.wrench_goggles.desc": "UNLOCALIZED: Equip Engineer's goggles and a Wrench",
"advancement.create.contraption_actors.desc": "UNLOCALIZED: Create a Contraption with drills, saws, or harvesters on board",
"advancement.create.portable_storage_interface": "UNLOCALIZED: Drive-By Exchange",
"advancement.create.portable_storage_interface.desc": "UNLOCALIZED: Use a Portable Storage Interface to take or insert items into a Contraption",
"advancement.create.wrench_goggles": "UNLOCALIZED: Kitted Out",
"advancement.create.wrench_goggles.desc": "UNLOCALIZED: Equip Engineer's Goggles and a Wrench",
"advancement.create.stressometer": "Dar Cât De Stresat, Mai Exact?",
"advancement.create.stressometer.desc": "Plasează și alimentează un Stresometru. Uită-te la el prin Ochelari ca să îi citești valoarea exactă.",
"advancement.create.cuckoo_clock": "UNLOCALIZED: Is it Time?",
"advancement.create.cuckoo_clock": "UNLOCALIZED: Is It Time?",
"advancement.create.cuckoo_clock.desc": "UNLOCALIZED: Witness your Cuckoo Clock announce bedtime",
"advancement.create.windmill_maxed": "UNLOCALIZED: A Strong Breeze",
"advancement.create.windmill_maxed.desc": "UNLOCALIZED: Assemble a windmill of maximum strength",
"advancement.create.ejector_maxed": "UNLOCALIZED: Springboard Champion",
"advancement.create.ejector_maxed.desc": "UNLOCALIZED: Get launched for more than 30 blocks by a Weighted Ejector",
"advancement.create.ejector_maxed.desc": "UNLOCALIZED: Get launched more than 30 blocks by a Weighted Ejector",
"advancement.create.pulley_maxed": "UNLOCALIZED: Rope to Nowhere",
"advancement.create.pulley_maxed.desc": "UNLOCALIZED: Extend a Rope Pulley over 200 blocks deep",
"advancement.create.cart_pickup": "UNLOCALIZED: Strong Arms",
"advancement.create.cart_pickup.desc": "UNLOCALIZED: Pick up a Minecart Contraption with at least 200 attached blocks",
"advancement.create.anvil_plough": "UNLOCALIZED: Blacksmith Artillery",
"advancement.create.anvil_plough.desc": "UNLOCALIZED: Launch an Anvil with Mechanical ploughs",
"advancement.create.anvil_plough.desc": "UNLOCALIZED: Launch an Anvil with Mechanical Ploughs",
"advancement.create.lava_wheel_00000": "UNLOCALIZED: Magma Wheel",
"advancement.create.lava_wheel_00000.desc": "UNLOCALIZED: This shouldn't have worked§7\n(Hidden Advancement)",
"advancement.create.hand_crank_000": "UNLOCALIZED: Workout Session",
@ -730,48 +730,48 @@
"advancement.create.belt_funnel_kiss.desc": "Fă două săruturi de Pâlnii montate pe Bandă.",
"advancement.create.stressometer_maxed": "UNLOCALIZED: Perfectly Stressed",
"advancement.create.stressometer_maxed.desc": "UNLOCALIZED: Get a 100% readout from a Stressometer§7\n(Hidden Advancement)",
"advancement.create.copper": "UNLOCALIZED: More Sturdier Rocks",
"advancement.create.copper.desc": "UNLOCALIZED: Amass some Copper for your exploits in Fluid Manipulation",
"advancement.create.copper": "UNLOCALIZED: Cuprum Bokum",
"advancement.create.copper.desc": "UNLOCALIZED: Amass some Copper Ingots for your exploits in fluid manipulation",
"advancement.create.copper_casing": "Epoca de cupru",
"advancement.create.copper_casing.desc": "Folosește niște and Wood to create some Copper Casings.",
"advancement.create.spout": "Splosh",
"advancement.create.spout.desc": "Privește un obiect de fluid fiind umplut folosind o Duză.",
"advancement.create.drain": "UNLOCALIZED: Tumble Draining",
"advancement.create.drain.desc": "UNLOCALIZED: Watch a fluid containing item be emptied by an Item Drain",
"advancement.create.drain.desc": "UNLOCALIZED: Watch a fluid-containing item be emptied by an Item Drain",
"advancement.create.steam_engine": "UNLOCALIZED: The Powerhouse",
"advancement.create.steam_engine.desc": "UNLOCALIZED: Use a Steam engine to generate torque",
"advancement.create.steam_engine.desc": "UNLOCALIZED: Use a Steam Engine to generate torque",
"advancement.create.steam_whistle": "UNLOCALIZED: Voice of an Angel",
"advancement.create.steam_whistle.desc": "UNLOCALIZED: Activate a Steam Whistle",
"advancement.create.backtank": "UNLOCALIZED: Pressure to Go",
"advancement.create.backtank.desc": "UNLOCALIZED: Create a copper backtank and make it accumulate Air Pressure",
"advancement.create.backtank.desc": "UNLOCALIZED: Create a Copper Backtank and make it accumulate air pressure",
"advancement.create.diving_suit": "UNLOCALIZED: Ready for the Depths",
"advancement.create.diving_suit.desc": "UNLOCALIZED: Equip a diving helmet together with your backtank and jump into water",
"advancement.create.diving_suit.desc": "UNLOCALIZED: Equip a Diving Helmet and a Copper Backtank, then jump into water",
"advancement.create.mechanical_pump_0": "UNLOCALIZED: Under Pressure",
"advancement.create.mechanical_pump_0.desc": "UNLOCALIZED: Place and power a Mechanical Pump",
"advancement.create.glass_pipe": "Spion De Flux",
"advancement.create.glass_pipe.desc": "Privește un fluid propagându-se printr-o Conductă De Fluide De Sticlă. Conducte De Fluide Drepte devin de sticlă când o cheie este folosită pe ele.",
"advancement.create.water_supply": "UNLOCALIZED: Puddle Collector",
"advancement.create.water_supply.desc": "UNLOCALIZED: Use the pulling end of a pipe or pump to collect a water block",
"advancement.create.water_supply.desc": "UNLOCALIZED: Use the pulling end of a Fluid Pipe or Mechanical Pump to collect water",
"advancement.create.hose_pulley": "Vărsare Industrială",
"advancement.create.hose_pulley.desc": "Coboară un Scripete De Furtun și privește-l scurgând sau umplând un corp de fluid.",
"advancement.create.chocolate_bucket": "UNLOCALIZED: A World of Imagination",
"advancement.create.chocolate_bucket.desc": "UNLOCALIZED: Obtain a Bucket of Molten Chocolate",
"advancement.create.chocolate_bucket.desc": "UNLOCALIZED: Obtain a bucket of molten chocolate",
"advancement.create.honey_drain": "UNLOCALIZED: Autonomous Bee-Keeping",
"advancement.create.honey_drain.desc": "UNLOCALIZED: Use pipes to pull honey from a Bee Nest or Bee House",
"advancement.create.honey_drain.desc": "UNLOCALIZED: Use pipes to pull honey from a Bee Nest or Beehive",
"advancement.create.hose_pulley_lava": "UNLOCALIZED: Tapping the Mantle",
"advancement.create.hose_pulley_lava.desc": "UNLOCALIZED: Pump from a body of Lava large enough to be considered infinite",
"advancement.create.hose_pulley_lava.desc": "UNLOCALIZED: Pump from a body of lava large enough to be considered infinite",
"advancement.create.steam_engine_maxed": "UNLOCALIZED: Full Steam",
"advancement.create.steam_engine_maxed.desc": "UNLOCALIZED: Run a boiler at the maximum level of power",
"advancement.create.foods": "UNLOCALIZED: Balanced Diet",
"advancement.create.foods.desc": "UNLOCALIZED: Create Chocolate Berries, a Honeyed Apple and a Sweet Roll; all from the same Spout",
"advancement.create.foods.desc": "UNLOCALIZED: Create Chocolate Glazed Berries, a Honeyed Apple, and a Sweet Roll all from the same Spout",
"advancement.create.diving_suit_lava": "UNLOCALIZED: Swimming with the Striders",
"advancement.create.diving_suit_lava.desc": "UNLOCALIZED: Attempt to take a dive in lava with your Copper Diving Gear§7\n(Hidden Advancement)",
"advancement.create.diving_suit_lava.desc": "UNLOCALIZED: Attempt to take a dive in lava with your diving gear§7\n(Hidden Advancement)",
"advancement.create.chained_drain": "UNLOCALIZED: On a Roll",
"advancement.create.chained_drain.desc": "UNLOCALIZED: Watch an Item move across a row of Item Drains§7\n(Hidden Advancement)",
"advancement.create.cross_streams": "UNLOCALIZED: Don't cross the Streams!",
"advancement.create.chained_drain.desc": "UNLOCALIZED: Watch an item move across a row of Item Drains§7\n(Hidden Advancement)",
"advancement.create.cross_streams": "UNLOCALIZED: Don't Cross the Streams!",
"advancement.create.cross_streams.desc": "UNLOCALIZED: Watch two fluids meet in your pipe network§7\n(Hidden Advancement)",
"advancement.create.pipe_organ": "UNLOCALIZED: The Pipe Organ",
"advancement.create.pipe_organ.desc": "UNLOCALIZED: Attach 12 uniquely pitched Steam Whistles to a single fluid tank§7\n(Hidden Advancement)",
"advancement.create.pipe_organ.desc": "UNLOCALIZED: Attach 12 uniquely pitched Steam Whistles to a single Fluid Tank§7\n(Hidden Advancement)",
"advancement.create.brass": "Aliaje reale",
"advancement.create.brass.desc": "Folosește Cupru Zdrobit și Zinc Zdrobit ca să creezi niște Alamă.",
"advancement.create.brass_casing": "Epoca Alamei",
@ -795,7 +795,7 @@
"advancement.create.clockwork_bearing": "Ora Invențiilor",
"advancement.create.clockwork_bearing.desc": "Asamblează o structură montată pe un Rulment De Ceasornic.",
"advancement.create.display_link": "UNLOCALIZED: Big Data",
"advancement.create.display_link.desc": "UNLOCALIZED: Use a Display link to visualise information",
"advancement.create.display_link.desc": "UNLOCALIZED: Use a Display Link to visualise information",
"advancement.create.potato_cannon": "Fwoomp!",
"advancement.create.potato_cannon.desc": "Înfrânge un inamic cu Tunul tău De Cartofi.",
"advancement.create.extendo_grip": "Boioioing!",
@ -804,54 +804,54 @@
"advancement.create.linked_controller.desc": "UNLOCALIZED: Activate a Redstone Link using a Linked Controller",
"advancement.create.arm_blaze_burner": "Arzător-o-Tron",
"advancement.create.arm_blaze_burner.desc": "Instructează un Braț Mecanic să hrănească Arzătorul tău De Dogoreală.",
"advancement.create.crusher_maxed_0000": "UNLOCALIZED: Crushing it",
"advancement.create.crusher_maxed_0000.desc": "UNLOCALIZED: Operate a Pair of Crushing wheels at max speed",
"advancement.create.crusher_maxed_0000": "UNLOCALIZED: Crushing It",
"advancement.create.crusher_maxed_0000.desc": "UNLOCALIZED: Operate a pair of Crushing Wheels at maximum speed",
"advancement.create.arm_many_targets": "Organiz-o-Tron",
"advancement.create.arm_many_targets.desc": "Programează un Braț Mecanic cu zece sau mai multe locații de ieșire.",
"advancement.create.potato_cannon_collide": "UNLOCALIZED: Veggie Fireworks",
"advancement.create.potato_cannon_collide.desc": "UNLOCALIZED: Cause potato cannon projectiles of different types to collide with each other",
"advancement.create.potato_cannon_collide.desc": "UNLOCALIZED: Cause Potato Cannon projectiles of different types to collide with each other",
"advancement.create.self_deploying": "UNLOCALIZED: Self-Driving Cart",
"advancement.create.self_deploying.desc": "UNLOCALIZED: Create a Minecart Contraption that places tracks in front of itself",
"advancement.create.fist_bump": "Bate-o, Bro!",
"advancement.create.fist_bump.desc": "Fă două Deployere să bată pumnul.",
"advancement.create.crafter_lazy_000": "UNLOCALIZED: Desperate Measures",
"advancement.create.crafter_lazy_000.desc": "UNLOCALIZED: Drastically slow down a Mechanical Crafter to procrastinate on proper infrastructure§7\n(Hidden Advancement)",
"advancement.create.extendo_grip_dual": "UNLOCALIZED: To full Extent",
"advancement.create.extendo_grip_dual.desc": "UNLOCALIZED: Dual wield Extendo Grips for super-human reach§7\n(Hidden Advancement)",
"advancement.create.extendo_grip_dual": "UNLOCALIZED: To Full Extent",
"advancement.create.extendo_grip_dual.desc": "UNLOCALIZED: Dual-wield Extendo Grips for superhuman reach§7\n(Hidden Advancement)",
"advancement.create.musical_arm": "Cântă-mi melodia mea tematică!",
"advancement.create.musical_arm.desc": "Privește un Braț Mecanic operând Tonomatul tău.",
"advancement.create.sturdy_sheet": "UNLOCALIZED: The Sturdiest Rocks",
"advancement.create.sturdy_sheet.desc": "UNLOCALIZED: Assemble a Sturdy Sheet from refining crushed Obsidian",
"advancement.create.sturdy_sheet.desc": "UNLOCALIZED: Assemble a Sturdy Sheet by refining Powdered Obsidian",
"advancement.create.train_casing_00": "UNLOCALIZED: The Logistical Age",
"advancement.create.train_casing_00.desc": "UNLOCALIZED: Use Sturdy Sheets to create a Casing for Railway Components",
"advancement.create.train_casing_00.desc": "UNLOCALIZED: Use Sturdy Sheets to create a casing for railway components",
"advancement.create.train": "UNLOCALIZED: All Aboard!",
"advancement.create.train.desc": "UNLOCALIZED: Assemble your first Train",
"advancement.create.conductor": "UNLOCALIZED: Conductor Instructor",
"advancement.create.conductor.desc": "UNLOCALIZED: Instruct a Train driver with a Schedule",
"advancement.create.conductor.desc": "UNLOCALIZED: Instruct a Train driver with a Train Schedule",
"advancement.create.track_signal": "UNLOCALIZED: Traffic Control",
"advancement.create.track_signal.desc": "UNLOCALIZED: Place a Train Signal",
"advancement.create.display_board_0": "UNLOCALIZED: Dynamic Timetables",
"advancement.create.display_board_0.desc": "UNLOCALIZED: Forecast a Train's arrival on your Display Board with the help of Display Links",
"advancement.create.track_0": "UNLOCALIZED: A new Gauge",
"advancement.create.track_0": "UNLOCALIZED: A New Gauge",
"advancement.create.track_0.desc": "UNLOCALIZED: Obtain some Train Tracks",
"advancement.create.train_whistle": "UNLOCALIZED: Choo choo!",
"advancement.create.train_whistle": "UNLOCALIZED: Choo Choo!",
"advancement.create.train_whistle.desc": "UNLOCALIZED: Assemble a Steam Whistle to your Train and activate it while driving",
"advancement.create.train_portal": "UNLOCALIZED: Dimensional Commuter",
"advancement.create.train_portal.desc": "UNLOCALIZED: Ride a train through a Nether Portal",
"advancement.create.train_portal.desc": "UNLOCALIZED: Ride a Train through a Nether portal",
"advancement.create.track_crafting_factory": "UNLOCALIZED: Track Factory",
"advancement.create.track_crafting_factory.desc": "UNLOCALIZED: Produce more than 1000 train tracks in the same Mechanical Press",
"advancement.create.track_crafting_factory.desc": "UNLOCALIZED: Produce more than 1000 Train Tracks with the same Mechanical Press",
"advancement.create.long_bend": "UNLOCALIZED: The Longest Bend",
"advancement.create.long_bend.desc": "UNLOCALIZED: Create a Curved track section that spans more than 30 blocks in length",
"advancement.create.long_bend.desc": "UNLOCALIZED: Create a curved track section that spans more than 30 blocks in length",
"advancement.create.long_train": "UNLOCALIZED: Ambitious Endeavours",
"advancement.create.long_train.desc": "UNLOCALIZED: Create a Train with at least six Carriages",
"advancement.create.long_train.desc": "UNLOCALIZED: Create a Train with at least 6 carriages",
"advancement.create.long_travel": "UNLOCALIZED: Field Trip",
"advancement.create.long_travel.desc": "UNLOCALIZED: Leave a Train Seat over 5000 blocks away from where you started travelling",
"advancement.create.train_roadkill": "UNLOCALIZED: Road Kill",
"advancement.create.train_roadkill.desc": "UNLOCALIZED: Run over an Enemy with your Train§7\n(Hidden Advancement)",
"advancement.create.train_roadkill.desc": "UNLOCALIZED: Run over an enemy with your Train§7\n(Hidden Advancement)",
"advancement.create.red_signal": "UNLOCALIZED: Expert Driver",
"advancement.create.red_signal.desc": "UNLOCALIZED: Run a Red Signal with your Train§7\n(Hidden Advancement)",
"advancement.create.red_signal.desc": "UNLOCALIZED: Run a red Train Signal§7\n(Hidden Advancement)",
"advancement.create.train_crash": "UNLOCALIZED: Terrible Service",
"advancement.create.train_crash.desc": "UNLOCALIZED: Witness a Train Crash as a Passenger§7\n(Hidden Advancement)",
"advancement.create.train_crash.desc": "UNLOCALIZED: Witness a Train crash as a passenger§7\n(Hidden Advancement)",
"advancement.create.train_crash_backwards": "UNLOCALIZED: Blind Spot",
"advancement.create.train_crash_backwards.desc": "UNLOCALIZED: Crash into another Train while driving backwards§7\n(Hidden Advancement)",
@ -1260,6 +1260,8 @@
"create.item_attributes.smokable.inverted": "nu poate fi Afumat",
"create.item_attributes.blastable": "poate fi topit în Furnal",
"create.item_attributes.blastable.inverted": "nu poate fi topit în Furnal",
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
"create.item_attributes.shulker_level": "este shulkerul %1$s",
"create.item_attributes.shulker_level.inverted": "nu este shulkerul %1$s",
"create.item_attributes.shulker_level.full": "plin",

File diff suppressed because it is too large Load diff

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 4",
"_": "Missing Localizations: 2",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1260,6 +1260,8 @@
"create.item_attributes.smokable.inverted": "不可被烟熏",
"create.item_attributes.blastable": "可被高炉冶炼",
"create.item_attributes.blastable.inverted": "不可被高炉冶炼",
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
"create.item_attributes.shulker_level": "潜影盒是%1$s的",
"create.item_attributes.shulker_level.inverted": "潜影盒不是%1$s的",
"create.item_attributes.shulker_level.full": "满",
@ -1366,10 +1368,10 @@
"create.tooltip.chute.fans_pull_up": "鼓风机从上方进行吸引",
"create.tooltip.chute.fans_pull_down": "鼓风机从下方进行吸引",
"create.tooltip.chute.contains": "内含物品:%1$s x%2$s",
"create.tooltip.deployer.header": "UNLOCALIZED: Deployer Information",
"create.tooltip.deployer.using": "UNLOCALIZED: Mode: Use",
"create.tooltip.deployer.punching": "UNLOCALIZED: Mode: Attack",
"create.tooltip.deployer.contains": "UNLOCALIZED: Item: %1$s x%2$s",
"create.tooltip.deployer.header": "机械手信息",
"create.tooltip.deployer.using": "模式:使用",
"create.tooltip.deployer.punching": "模式:攻击",
"create.tooltip.deployer.contains": "物品:%1$s x%2$s",
"create.tooltip.brass_tunnel.contains": "目前分配:",
"create.tooltip.brass_tunnel.contains_entry": "> %1$s x%2$s",
"create.tooltip.brass_tunnel.retrieve": "右击取出",

View file

@ -1,37 +0,0 @@
{
"parent": "create:block/fluid_pipe/core_x",
"elements": [
{
"from": [
4,
4,
4
],
"to": [
12,
12,
12
],
"faces": {
"west": {
"texture": "#0",
"uv": [
16.0,
8.0,
12.0,
12.0
]
},
"east": {
"texture": "#0",
"uv": [
12.0,
8.0,
16.0,
12.0
]
}
}
}
]
}

View file

@ -1,37 +0,0 @@
{
"parent": "create:block/fluid_pipe/core_y",
"elements": [
{
"from": [
4,
4,
4
],
"to": [
12,
12,
12
],
"faces": {
"down": {
"texture": "#0",
"uv": [
16.0,
8.0,
12.0,
12.0
]
},
"up": {
"texture": "#0",
"uv": [
16.0,
12.0,
12.0,
8.0
]
}
}
}
]
}

View file

@ -1,37 +0,0 @@
{
"parent": "create:block/fluid_pipe/core_z",
"elements": [
{
"from": [
4,
4,
4
],
"to": [
12,
12,
12
],
"faces": {
"north": {
"texture": "#0",
"uv": [
12.0,
8.0,
16.0,
12.0
]
},
"south": {
"texture": "#0",
"uv": [
16.0,
8.0,
12.0,
12.0
]
}
}
}
]
}

View file

@ -19,7 +19,7 @@
"chance": 0.75
},
{
"item": "minecraft:cobblestone",
"item": "minecraft:cobbled_deepslate",
"chance": 0.125
}
],

View file

@ -73,6 +73,10 @@
"item": "create:cogwheel",
"chance": 5.0
},
{
"item": "minecraft:gold_nugget",
"chance": 3.0
},
{
"item": "create:shaft",
"chance": 2.0
@ -81,10 +85,6 @@
"item": "create:crushed_gold_ore",
"chance": 2.0
},
{
"item": "minecraft:gold_nugget",
"chance": 2.0
},
{
"item": "minecraft:iron_ingot"
},

View file

@ -1,11 +0,0 @@
{
"replace": false,
"values": [
"create:blaze_burner",
"create:lit_blaze_burner",
"#minecraft:fire",
"#minecraft:campfires",
"minecraft:magma_block",
"minecraft:lava"
]
}

View file

@ -1,6 +1,11 @@
{
"replace": false,
"values": [
"#create:fan_heaters"
"create:blaze_burner",
"create:lit_blaze_burner",
"#minecraft:fire",
"#minecraft:campfires",
"minecraft:magma_block",
"minecraft:lava"
]
}

View file

@ -16,6 +16,7 @@
"minecraft:tripwire",
"minecraft:tripwire_hook",
"minecraft:daylight_detector",
"minecraft:target"
"minecraft:target",
"minecraft:hopper"
]
}

View file

@ -1,6 +1,7 @@
{
"replace": false,
"values": [
"create:sturdy_sheet",
"create:copper_sheet",
"create:brass_sheet",
"create:iron_sheet",

View file

@ -161,16 +161,14 @@ public class AllBlockPartials {
;
public static final Map<FluidTransportBehaviour.AttachmentTypes, Map<Direction, PartialModel>> PIPE_ATTACHMENTS =
new EnumMap<>(FluidTransportBehaviour.AttachmentTypes.class);
public static final Map<FluidTransportBehaviour.AttachmentTypes.ComponentPartials, Map<Direction, PartialModel>> PIPE_ATTACHMENTS =
new EnumMap<>(FluidTransportBehaviour.AttachmentTypes.ComponentPartials.class);
public static final Map<Direction, PartialModel> METAL_GIRDER_BRACKETS = new EnumMap<>(Direction.class);
public static final Map<DyeColor, PartialModel> TOOLBOX_LIDS = new EnumMap<>(DyeColor.class);
static {
for (FluidTransportBehaviour.AttachmentTypes type : FluidTransportBehaviour.AttachmentTypes.values()) {
if (!type.hasModel())
continue;
for (FluidTransportBehaviour.AttachmentTypes.ComponentPartials type : FluidTransportBehaviour.AttachmentTypes.ComponentPartials.values()) {
Map<Direction, PartialModel> map = new HashMap<>();
for (Direction d : Iterate.directions) {
String asId = Lang.asId(type.name());

View file

@ -172,7 +172,7 @@ import com.simibubi.create.content.logistics.block.display.source.FluidListDispl
import com.simibubi.create.content.logistics.block.display.source.ItemCountDisplaySource;
import com.simibubi.create.content.logistics.block.display.source.ItemListDisplaySource;
import com.simibubi.create.content.logistics.block.display.source.ItemNameDisplaySource;
import com.simibubi.create.content.logistics.block.display.source.ItemThoughputDisplaySource;
import com.simibubi.create.content.logistics.block.display.source.ItemThroughputDisplaySource;
import com.simibubi.create.content.logistics.block.display.source.KineticSpeedDisplaySource;
import com.simibubi.create.content.logistics.block.display.source.KineticStressDisplaySource;
import com.simibubi.create.content.logistics.block.display.source.ObservedTrainNameSource;
@ -652,7 +652,7 @@ public class AllBlocks {
.properties(p -> p.lightLevel(BlazeBurnerBlock::getLight))
.transform(pickaxeOnly())
.addLayer(() -> RenderType::cutoutMipped)
.tag(AllBlockTags.FAN_TRANSPARENT.tag, AllBlockTags.FAN_HEATERS.tag)
.tag(AllBlockTags.FAN_TRANSPARENT.tag, AllBlockTags.PASSIVE_BOILER_HEATERS.tag)
.loot((lt, block) -> lt.add(block, BlazeBurnerBlock.buildLootTable()))
.blockstate((c, p) -> p.simpleBlock(c.getEntry(), AssetLookup.partialBaseModel(c, p)))
.onRegister(movementBehaviour(new BlazeBurnerMovementBehaviour()))
@ -669,7 +669,7 @@ public class AllBlocks {
.properties(p -> p.lightLevel(LitBlazeBurnerBlock::getLight))
.transform(pickaxeOnly())
.addLayer(() -> RenderType::cutoutMipped)
.tag(AllBlockTags.FAN_TRANSPARENT.tag, AllBlockTags.FAN_HEATERS.tag)
.tag(AllBlockTags.FAN_TRANSPARENT.tag, AllBlockTags.PASSIVE_BOILER_HEATERS.tag)
.loot((lt, block) -> lt.dropOther(block, AllItems.EMPTY_BLAZE_BURNER.get()))
.blockstate((c, p) -> p.getVariantBuilder(c.get())
.forAllStates(state -> ConfiguredModel.builder()
@ -812,7 +812,7 @@ public class AllBlocks {
.initialProperties(SharedProperties::copperMetal)
.transform(pickaxeOnly())
.blockstate(BlockStateGen.pipe())
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::opaque))
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new))
.item()
.transform(customItemModel())
.register();
@ -827,7 +827,7 @@ public class AllBlocks {
.onRegister(CreateRegistrate.connectedTextures(() -> new EncasedCTBehaviour(AllSpriteShifts.COPPER_CASING)))
.onRegister(CreateRegistrate.casingConnectivity((block, cc) -> cc.make(block, AllSpriteShifts.COPPER_CASING,
(s, f) -> !s.getValue(EncasedPipeBlock.FACING_TO_PROPERTY_MAP.get(f)))))
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::opaque))
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new))
.loot((p, b) -> p.dropOther(b, FLUID_PIPE.get()))
.register();
@ -849,7 +849,7 @@ public class AllBlocks {
.build();
}, BlockStateProperties.WATERLOGGED);
})
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::transparent))
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new))
.loot((p, b) -> p.dropOther(b, FLUID_PIPE.get()))
.register();
@ -858,7 +858,7 @@ public class AllBlocks {
.properties(p -> p.color(MaterialColor.STONE))
.transform(pickaxeOnly())
.blockstate(BlockStateGen.directionalBlockProviderIgnoresWaterlogged(true))
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::opaque))
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new))
.transform(BlockStressDefaults.setImpact(4.0))
.item()
.transform(customItemModel())
@ -870,7 +870,7 @@ public class AllBlocks {
.properties(p -> p.color(MaterialColor.TERRACOTTA_YELLOW))
.transform(pickaxeOnly())
.blockstate(new SmartFluidPipeGenerator()::generate)
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::transparent))
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new))
.item()
.transform(customItemModel())
.register();
@ -881,7 +881,7 @@ public class AllBlocks {
.blockstate((c, p) -> BlockStateGen.directionalAxisBlock(c, p,
(state, vertical) -> AssetLookup.partialBaseModel(c, p, vertical ? "vertical" : "horizontal",
state.getValue(FluidValveBlock.ENABLED) ? "open" : "closed")))
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::opaque))
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new))
.item()
.transform(customItemModel())
.register();
@ -1696,7 +1696,7 @@ public class AllBlocks {
.properties(p -> p.color(MaterialColor.STONE))
.transform(BuilderTransformers.beltTunnel("andesite", new ResourceLocation("block/polished_andesite")))
.onRegister(assignDataBehaviour(new AccumulatedItemCountDisplaySource(), "accumulate_items"))
.onRegister(assignDataBehaviour(new ItemThoughputDisplaySource(), "item_throughput"))
.onRegister(assignDataBehaviour(new ItemThroughputDisplaySource(), "item_throughput"))
.register();
public static final BlockEntry<BrassTunnelBlock> BRASS_TUNNEL =
@ -1704,7 +1704,7 @@ public class AllBlocks {
.properties(p -> p.color(MaterialColor.TERRACOTTA_YELLOW))
.transform(BuilderTransformers.beltTunnel("brass", Create.asResource("block/brass_block")))
.onRegister(assignDataBehaviour(new AccumulatedItemCountDisplaySource(), "accumulate_items"))
.onRegister(assignDataBehaviour(new ItemThoughputDisplaySource(), "item_throughput"))
.onRegister(assignDataBehaviour(new ItemThroughputDisplaySource(), "item_throughput"))
.onRegister(connectedTextures(BrassTunnelCTBehaviour::new))
.register();

View file

@ -2,17 +2,20 @@ package com.simibubi.create;
import com.simibubi.create.content.logistics.trains.entity.CarriageSyncDataSerializer;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DataSerializerEntry;
import net.minecraftforge.registries.IForgeRegistry;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
public class AllEntityDataSerializers {
private static final DeferredRegister<DataSerializerEntry> REGISTER = DeferredRegister.create(ForgeRegistries.Keys.DATA_SERIALIZERS, Create.ID);
public static final CarriageSyncDataSerializer CARRIAGE_DATA = new CarriageSyncDataSerializer();
public static void register(RegistryEvent.Register<DataSerializerEntry> event) {
IForgeRegistry<DataSerializerEntry> registry = event.getRegistry();
registry.register(new DataSerializerEntry(CARRIAGE_DATA).setRegistryName(Create.asResource("carriage_data")));
}
public static final RegistryObject<DataSerializerEntry> CARRIAGE_DATA_ENTRY = REGISTER.register("carriage_data", () -> new DataSerializerEntry(CARRIAGE_DATA));
public static void register(IEventBus modEventBus) {
REGISTER.register(modEventBus);
}
}

View file

@ -10,15 +10,11 @@ import com.simibubi.create.content.palettes.AllPaletteStoneTypes;
import com.simibubi.create.foundation.data.CreateRegistrate;
import com.tterrag.registrate.util.entry.FluidEntry;
import net.minecraft.client.renderer.ItemBlockRenderTypes;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.level.material.FluidState;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.fluids.FluidAttributes;
import net.minecraftforge.fluids.ForgeFlowingFluid;
@ -28,17 +24,17 @@ public class AllFluids {
public static final FluidEntry<PotionFluid> POTION =
REGISTRATE.virtualFluid("potion", PotionFluidAttributes::new, PotionFluid::new)
.lang(f -> "fluid.create.potion", "Potion")
.lang("Potion")
.register();
public static final FluidEntry<VirtualFluid> TEA = REGISTRATE.virtualFluid("tea")
.lang(f -> "fluid.create.tea", "Builder's Tea")
.lang("Builder's Tea")
.tag(AllTags.forgeFluidTag("tea"))
.register();
public static final FluidEntry<ForgeFlowingFluid.Flowing> HONEY =
REGISTRATE.standardFluid("honey", NoColorFluidAttributes::new)
.lang(f -> "fluid.create.honey", "Honey")
.lang("Honey")
.attributes(b -> b.viscosity(2000)
.density(1400))
.properties(p -> p.levelDecreasePerBlock(2)
@ -54,7 +50,7 @@ public class AllFluids {
public static final FluidEntry<ForgeFlowingFluid.Flowing> CHOCOLATE =
REGISTRATE.standardFluid("chocolate", NoColorFluidAttributes::new)
.lang(f -> "fluid.create.chocolate", "Chocolate")
.lang("Chocolate")
.tag(AllTags.forgeFluidTag("chocolate"))
.attributes(b -> b.viscosity(1500)
.density(1400))
@ -68,16 +64,6 @@ public class AllFluids {
public static void register() {}
@OnlyIn(Dist.CLIENT)
public static void assignRenderLayers() {}
@OnlyIn(Dist.CLIENT)
private static void makeTranslucent(FluidEntry<?> entry) {
ForgeFlowingFluid fluid = entry.get();
ItemBlockRenderTypes.setRenderLayer(fluid, RenderType.translucent());
ItemBlockRenderTypes.setRenderLayer(fluid.getSource(), RenderType.translucent());
}
@Nullable
public static BlockState getLavaInteraction(FluidState fluidState) {
Fluid fluid = fluidState.getType();

View file

@ -1,9 +1,7 @@
package com.simibubi.create;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jetbrains.annotations.Nullable;
@ -11,20 +9,32 @@ import com.simibubi.create.content.contraptions.components.structureMovement.Mov
import com.simibubi.create.content.contraptions.components.structureMovement.interaction.DoorMovingInteraction;
import com.simibubi.create.content.contraptions.components.structureMovement.interaction.LeverMovingInteraction;
import com.simibubi.create.content.contraptions.components.structureMovement.interaction.TrapdoorMovingInteraction;
import com.simibubi.create.foundation.utility.CreateRegistry;
import com.tterrag.registrate.util.nullness.NonNullConsumer;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.BlockTags;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.IRegistryDelegate;
public class AllInteractionBehaviours {
private static final Map<IRegistryDelegate<Block>, MovingInteractionBehaviour> BLOCK_BEHAVIOURS = new HashMap<>();
private static final CreateRegistry<Block, MovingInteractionBehaviour> BLOCK_BEHAVIOURS = new CreateRegistry<>(ForgeRegistries.BLOCKS);
private static final List<BehaviourProvider> GLOBAL_BEHAVIOURS = new ArrayList<>();
public static void registerBehaviour(ResourceLocation block, MovingInteractionBehaviour provider) {
BLOCK_BEHAVIOURS.register(block, provider);
}
public static void registerBehaviour(Block block, MovingInteractionBehaviour provider) {
BLOCK_BEHAVIOURS.register(block, provider);
}
@Deprecated(forRemoval = true)
public static void registerBehaviour(IRegistryDelegate<Block> block, MovingInteractionBehaviour provider) {
BLOCK_BEHAVIOURS.put(block, provider);
registerBehaviour(block.name(), provider);
}
public static void registerBehaviourProvider(BehaviourProvider provider) {
@ -33,7 +43,7 @@ public class AllInteractionBehaviours {
@Nullable
public static MovingInteractionBehaviour getBehaviour(BlockState state) {
MovingInteractionBehaviour behaviour = BLOCK_BEHAVIOURS.get(state.getBlock().delegate);
MovingInteractionBehaviour behaviour = BLOCK_BEHAVIOURS.get(state.getBlock());
if (behaviour != null) {
return behaviour;
}
@ -50,11 +60,11 @@ public class AllInteractionBehaviours {
public static <B extends Block> NonNullConsumer<? super B> interactionBehaviour(
MovingInteractionBehaviour behaviour) {
return b -> registerBehaviour(b.delegate, behaviour);
return b -> registerBehaviour(b, behaviour);
}
static void registerDefaults() {
registerBehaviour(Blocks.LEVER.delegate, new LeverMovingInteraction());
registerBehaviour(Blocks.LEVER, new LeverMovingInteraction());
DoorMovingInteraction doorBehaviour = new DoorMovingInteraction();
registerBehaviourProvider(state -> {

View file

@ -85,7 +85,7 @@ public class AllItems {
DOUGH = taggedIngredient("dough", forgeItemTag("dough"), forgeItemTag("dough/wheat")),
CINDER_FLOUR = ingredient("cinder_flour"), ROSE_QUARTZ = ingredient("rose_quartz"),
POLISHED_ROSE_QUARTZ = ingredient("polished_rose_quartz"), POWDERED_OBSIDIAN = ingredient("powdered_obsidian"),
STURDY_SHEET = taggedIngredient("sturdy_sheet", forgeItemTag("plates/obsidian")),
STURDY_SHEET = taggedIngredient("sturdy_sheet", forgeItemTag("plates/obsidian"), PLATES.tag),
PROPELLER = ingredient("propeller"), WHISK = ingredient("whisk"), BRASS_HAND = ingredient("brass_hand"),
CRAFTER_SLOT_COVER = ingredient("crafter_slot_cover"), ELECTRON_TUBE = ingredient("electron_tube");

View file

@ -1,9 +1,7 @@
package com.simibubi.create;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jetbrains.annotations.Nullable;
@ -12,19 +10,31 @@ import com.simibubi.create.content.contraptions.components.actors.CampfireMoveme
import com.simibubi.create.content.contraptions.components.actors.dispenser.DispenserMovementBehaviour;
import com.simibubi.create.content.contraptions.components.actors.dispenser.DropperMovementBehaviour;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour;
import com.simibubi.create.foundation.utility.CreateRegistry;
import com.tterrag.registrate.util.nullness.NonNullConsumer;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.IRegistryDelegate;
public class AllMovementBehaviours {
private static final Map<IRegistryDelegate<Block>, MovementBehaviour> BLOCK_BEHAVIOURS = new HashMap<>();
private static final CreateRegistry<Block, MovementBehaviour> BLOCK_BEHAVIOURS = new CreateRegistry<>(ForgeRegistries.BLOCKS);
private static final List<BehaviourProvider> GLOBAL_BEHAVIOURS = new ArrayList<>();
public static void registerBehaviour(ResourceLocation block, MovementBehaviour behaviour) {
BLOCK_BEHAVIOURS.register(block, behaviour);
}
public static void registerBehaviour(Block block, MovementBehaviour behaviour) {
BLOCK_BEHAVIOURS.register(block, behaviour);
}
@Deprecated(forRemoval = true)
public static void registerBehaviour(IRegistryDelegate<Block> block, MovementBehaviour behaviour) {
BLOCK_BEHAVIOURS.put(block, behaviour);
registerBehaviour(block.name(), behaviour);
}
public static void registerBehaviourProvider(BehaviourProvider provider) {
@ -33,7 +43,7 @@ public class AllMovementBehaviours {
@Nullable
public static MovementBehaviour getBehaviour(BlockState state) {
MovementBehaviour behaviour = BLOCK_BEHAVIOURS.get(state.getBlock().delegate);
MovementBehaviour behaviour = BLOCK_BEHAVIOURS.get(state.getBlock());
if (behaviour != null) {
return behaviour;
}
@ -50,16 +60,16 @@ public class AllMovementBehaviours {
public static <B extends Block> NonNullConsumer<? super B> movementBehaviour(
MovementBehaviour behaviour) {
return b -> registerBehaviour(b.delegate, behaviour);
return b -> registerBehaviour(b, behaviour);
}
static void registerDefaults() {
registerBehaviour(Blocks.BELL.delegate, new BellMovementBehaviour());
registerBehaviour(Blocks.CAMPFIRE.delegate, new CampfireMovementBehaviour());
registerBehaviour(Blocks.BELL, new BellMovementBehaviour());
registerBehaviour(Blocks.CAMPFIRE, new CampfireMovementBehaviour());
DispenserMovementBehaviour.gatherMovedDispenseItemBehaviours();
registerBehaviour(Blocks.DISPENSER.delegate, new DispenserMovementBehaviour());
registerBehaviour(Blocks.DROPPER.delegate, new DropperMovementBehaviour());
registerBehaviour(Blocks.DISPENSER, new DispenserMovementBehaviour());
registerBehaviour(Blocks.DROPPER, new DropperMovementBehaviour());
}
public interface BehaviourProvider {

View file

@ -18,12 +18,13 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.particle.ParticleEngine;
import net.minecraft.core.particles.ParticleOptions;
import net.minecraft.core.particles.ParticleType;
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.client.event.ParticleFactoryRegisterEvent;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.registries.IForgeRegistry;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
public enum AllParticleTypes {
@ -39,19 +40,17 @@ public enum AllParticleTypes {
SOUL(SoulParticle.Data::new),
SOUL_BASE(SoulBaseParticle.Data::new),
SOUL_PERIMETER(SoulParticle.PerimeterData::new),
SOUL_EXPANDING_PERIMETER(SoulParticle.ExpandingPerimeterData::new)
;
SOUL_EXPANDING_PERIMETER(SoulParticle.ExpandingPerimeterData::new);
private ParticleEntry<?> entry;
private final ParticleEntry<?> entry;
<D extends ParticleOptions> AllParticleTypes(Supplier<? extends ICustomParticleData<D>> typeFactory) {
String asId = Lang.asId(this.name());
entry = new ParticleEntry<>(new ResourceLocation(Create.ID, asId), typeFactory);
String name = Lang.asId(name());
entry = new ParticleEntry<>(name, typeFactory);
}
public static void register(RegistryEvent.Register<ParticleType<?>> event) {
for (AllParticleTypes particle : values())
particle.entry.register(event.getRegistry());
public static void register(IEventBus modEventBus) {
ParticleEntry.REGISTER.register(modEventBus);
}
@OnlyIn(Dist.CLIENT)
@ -62,40 +61,31 @@ public enum AllParticleTypes {
}
public ParticleType<?> get() {
return entry.getOrCreateType();
return entry.object.get();
}
public String parameter() {
return Lang.asId(name());
return entry.name;
}
private class ParticleEntry<D extends ParticleOptions> {
Supplier<? extends ICustomParticleData<D>> typeFactory;
ParticleType<D> type;
ResourceLocation id;
private static class ParticleEntry<D extends ParticleOptions> {
private static final DeferredRegister<ParticleType<?>> REGISTER = DeferredRegister.create(ForgeRegistries.PARTICLE_TYPES, Create.ID);
public ParticleEntry(ResourceLocation id, Supplier<? extends ICustomParticleData<D>> typeFactory) {
this.id = id;
private final String name;
private final Supplier<? extends ICustomParticleData<D>> typeFactory;
private final RegistryObject<ParticleType<D>> object;
public ParticleEntry(String name, Supplier<? extends ICustomParticleData<D>> typeFactory) {
this.name = name;
this.typeFactory = typeFactory;
}
void register(IForgeRegistry<ParticleType<?>> registry) {
registry.register(getOrCreateType());
}
ParticleType<D> getOrCreateType() {
if (type != null)
return type;
type = typeFactory.get()
.createType();
type.setRegistryName(id);
return type;
object = REGISTER.register(name, () -> this.typeFactory.get().createType());
}
@OnlyIn(Dist.CLIENT)
void registerFactory(ParticleEngine particles) {
public void registerFactory(ParticleEngine particles) {
typeFactory.get()
.register(getOrCreateType(), particles);
.register(object.get(), particles);
}
}

View file

@ -4,6 +4,8 @@ import java.util.Optional;
import java.util.Set;
import java.util.function.Supplier;
import org.jetbrains.annotations.Nullable;
import com.google.common.collect.ImmutableSet;
import com.simibubi.create.compat.jei.ConversionRecipe;
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCraftingRecipe;
@ -26,6 +28,7 @@ import com.simibubi.create.content.contraptions.processing.ProcessingRecipeSeria
import com.simibubi.create.content.curiosities.toolbox.ToolboxDyeingRecipe;
import com.simibubi.create.content.curiosities.tools.SandPaperPolishingRecipe;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.RegisteredObjects;
import com.simibubi.create.foundation.utility.recipe.IRecipeTypeInfo;
import net.minecraft.core.Registry;
@ -37,7 +40,10 @@ import net.minecraft.world.item.crafting.RecipeType;
import net.minecraft.world.item.crafting.ShapedRecipe;
import net.minecraft.world.item.crafting.SimpleRecipeSerializer;
import net.minecraft.world.level.Level;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
public enum AllRecipeTypes implements IRecipeTypeInfo {
@ -60,34 +66,53 @@ public enum AllRecipeTypes implements IRecipeTypeInfo {
MECHANICAL_CRAFTING(MechanicalCraftingRecipe.Serializer::new),
SEQUENCED_ASSEMBLY(SequencedAssemblyRecipeSerializer::new),
TOOLBOX_DYEING(() -> new SimpleRecipeSerializer<>(ToolboxDyeingRecipe::new), RecipeType.CRAFTING);
TOOLBOX_DYEING(() -> new SimpleRecipeSerializer<>(ToolboxDyeingRecipe::new), () -> RecipeType.CRAFTING, false);
;
private final ResourceLocation id;
private final RegistryObject<RecipeSerializer<?>> serializerObject;
@Nullable
private final RegistryObject<RecipeType<?>> typeObject;
private final Supplier<RecipeType<?>> type;
private ResourceLocation id;
private Supplier<RecipeSerializer<?>> serializerSupplier;
private Supplier<RecipeType<?>> typeSupplier;
private RecipeSerializer<?> serializer;
private RecipeType<?> type;
AllRecipeTypes(Supplier<RecipeSerializer<?>> serializerSupplier, Supplier<RecipeType<?>> typeSupplier) {
this.id = Create.asResource(Lang.asId(name()));
this.serializerSupplier = serializerSupplier;
this.typeSupplier = typeSupplier;
}
AllRecipeTypes(Supplier<RecipeSerializer<?>> serializerSupplier, RecipeType<?> existingType) {
this(serializerSupplier, () -> existingType);
AllRecipeTypes(Supplier<RecipeSerializer<?>> serializerSupplier, Supplier<RecipeType<?>> typeSupplier, boolean registerType) {
String name = Lang.asId(name());
id = Create.asResource(name);
serializerObject = Registers.SERIALIZER_REGISTER.register(name, serializerSupplier);
if (registerType) {
typeObject = Registers.TYPE_REGISTER.register(name, typeSupplier);
type = typeObject;
} else {
typeObject = null;
type = typeSupplier;
}
}
AllRecipeTypes(Supplier<RecipeSerializer<?>> serializerSupplier) {
this.id = Create.asResource(Lang.asId(name()));
this.serializerSupplier = serializerSupplier;
this.typeSupplier = () -> simpleType(id);
String name = Lang.asId(name());
id = Create.asResource(name);
serializerObject = Registers.SERIALIZER_REGISTER.register(name, serializerSupplier);
typeObject = Registers.TYPE_REGISTER.register(name, () -> simpleType(id));
type = typeObject;
}
AllRecipeTypes(ProcessingRecipeFactory<?> processingFactory) {
this(processingSerializer(processingFactory));
this(() -> new ProcessingRecipeSerializer<>(processingFactory));
}
public static <T extends Recipe<?>> RecipeType<T> simpleType(ResourceLocation id) {
String stringId = id.toString();
return new RecipeType<T>() {
@Override
public String toString() {
return stringId;
}
};
}
public static void register(IEventBus modEventBus) {
ShapedRecipe.setCraftingSize(9, 9);
Registers.SERIALIZER_REGISTER.register(modEventBus);
Registers.TYPE_REGISTER.register(modEventBus);
}
@Override
@ -98,13 +123,13 @@ public enum AllRecipeTypes implements IRecipeTypeInfo {
@SuppressWarnings("unchecked")
@Override
public <T extends RecipeSerializer<?>> T getSerializer() {
return (T) serializer;
return (T) serializerObject.get();
}
@SuppressWarnings("unchecked")
@Override
public <T extends RecipeType<?>> T getType() {
return (T) type;
return (T) type.get();
}
public <C extends Container, T extends Recipe<C>> Optional<T> find(C inv, Level world) {
@ -112,42 +137,21 @@ public enum AllRecipeTypes implements IRecipeTypeInfo {
.getRecipeFor(getType(), inv, world);
}
public static void register(RegistryEvent.Register<RecipeSerializer<?>> event) {
ShapedRecipe.setCraftingSize(9, 9);
for (AllRecipeTypes r : AllRecipeTypes.values()) {
r.serializer = r.serializerSupplier.get();
r.type = r.typeSupplier.get();
r.serializer.setRegistryName(r.id);
event.getRegistry()
.register(r.serializer);
}
}
private static Supplier<RecipeSerializer<?>> processingSerializer(ProcessingRecipeFactory<?> factory) {
return () -> new ProcessingRecipeSerializer<>(factory);
}
public static <T extends Recipe<?>> RecipeType<T> simpleType(ResourceLocation id) {
String stringId = id.toString();
return Registry.register(Registry.RECIPE_TYPE, id, new RecipeType<T>() {
@Override
public String toString() {
return stringId;
}
});
}
public static final Set<ResourceLocation> RECIPE_DENY_SET =
ImmutableSet.of(new ResourceLocation("occultism", "spirit_trade"), new ResourceLocation("occultism", "ritual"));
public static boolean shouldIgnoreInAutomation(Recipe<?> recipe) {
RecipeSerializer<?> serializer = recipe.getSerializer();
if (serializer != null && RECIPE_DENY_SET.contains(serializer.getRegistryName()))
if (serializer != null && RECIPE_DENY_SET.contains(RegisteredObjects.getKeyOrThrow(serializer)))
return true;
return recipe.getId()
.getPath()
.endsWith("_manual_only");
}
private static class Registers {
private static final DeferredRegister<RecipeSerializer<?>> SERIALIZER_REGISTER = DeferredRegister.create(ForgeRegistries.RECIPE_SERIALIZERS, Create.ID);
private static final DeferredRegister<RecipeType<?>> TYPE_REGISTER = DeferredRegister.create(Registry.RECIPE_TYPE_REGISTRY, Create.ID);
}
}

View file

@ -6,14 +6,12 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Supplier;
import com.google.common.collect.Lists;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.simibubi.create.foundation.utility.Couple;
import com.simibubi.create.foundation.utility.Pair;
import net.minecraft.core.Vec3i;
import net.minecraft.data.DataGenerator;
@ -28,12 +26,15 @@ import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.IForgeRegistry;
import net.minecraftforge.registries.RegistryObject;
//@EventBusSubscriber(bus = Bus.FORGE)
public class AllSoundEvents {
public static final Map<ResourceLocation, SoundEntry> entries = new HashMap<>();
public static final Map<ResourceLocation, SoundEntry> ALL = new HashMap<>();
public static final SoundEntry
SCHEMATICANNON_LAUNCH_BLOCK = create("schematicannon_launch_block").subtitle("Schematicannon fires")
@ -306,20 +307,20 @@ public class AllSoundEvents {
return new SoundEntryBuilder(id);
}
public static void register(RegistryEvent.Register<SoundEvent> event) {
IForgeRegistry<SoundEvent> registry = event.getRegistry();
for (SoundEntry entry : entries.values())
entry.register(registry);
public static void prepare() {
for (SoundEntry entry : ALL.values())
entry.prepare();
}
public static void prepare() {
for (SoundEntry entry : entries.values())
entry.prepare();
public static void register(RegistryEvent.Register<SoundEvent> event) {
IForgeRegistry<SoundEvent> registry = event.getRegistry();
for (SoundEntry entry : ALL.values())
entry.register(registry);
}
public static JsonObject provideLangEntries() {
JsonObject object = new JsonObject();
for (SoundEntry entry : entries.values())
for (SoundEntry entry : ALL.values())
if (entry.hasSubtitle())
object.addProperty(entry.getSubtitleKey(), entry.getSubtitle());
return object;
@ -370,7 +371,7 @@ public class AllSoundEvents {
try {
JsonObject json = new JsonObject();
entries.entrySet()
ALL.entrySet()
.stream()
.sorted(Map.Entry.comparingByKey())
.forEach(entry -> {
@ -386,12 +387,15 @@ public class AllSoundEvents {
}
public record ConfiguredSoundEvent(Supplier<SoundEvent> event, float volume, float pitch) {
}
public static class SoundEntryBuilder {
protected ResourceLocation id;
protected String subtitle = "unregistered";
protected SoundSource category = SoundSource.BLOCKS;
protected List<Pair<SoundEvent, Couple<Float>>> wrappedEvents;
protected List<ConfiguredSoundEvent> wrappedEvents;
protected List<ResourceLocation> variants;
protected int attenuationDistance;
@ -430,11 +434,15 @@ public class AllSoundEvents {
return this;
}
public SoundEntryBuilder playExisting(SoundEvent event, float volume, float pitch) {
wrappedEvents.add(Pair.of(event, Couple.create(volume, pitch)));
public SoundEntryBuilder playExisting(Supplier<SoundEvent> event, float volume, float pitch) {
wrappedEvents.add(new ConfiguredSoundEvent(event, volume, pitch));
return this;
}
public SoundEntryBuilder playExisting(SoundEvent event, float volume, float pitch) {
return playExisting(() -> event, volume, pitch);
}
public SoundEntryBuilder playExisting(SoundEvent event) {
return playExisting(event, 1, 1);
}
@ -443,7 +451,7 @@ public class AllSoundEvents {
SoundEntry entry =
wrappedEvents.isEmpty() ? new CustomSoundEntry(id, variants, subtitle, category, attenuationDistance)
: new WrappedSoundEntry(id, subtitle, wrappedEvents, category, attenuationDistance);
entries.put(entry.getId(), entry);
ALL.put(entry.getId(), entry);
return entry;
}
@ -532,50 +540,53 @@ public class AllSoundEvents {
private static class WrappedSoundEntry extends SoundEntry {
private List<Pair<SoundEvent, Couple<Float>>> wrappedEvents;
private List<Pair<SoundEvent, Couple<Float>>> compiledEvents;
private List<ConfiguredSoundEvent> wrappedEvents;
private List<CompiledSoundEvent> compiledEvents;
public WrappedSoundEntry(ResourceLocation id, String subtitle,
List<Pair<SoundEvent, Couple<Float>>> wrappedEvents, SoundSource category, int attenuationDistance) {
List<ConfiguredSoundEvent> wrappedEvents, SoundSource category, int attenuationDistance) {
super(id, subtitle, category, attenuationDistance);
this.wrappedEvents = wrappedEvents;
compiledEvents = Lists.newArrayList();
compiledEvents = new ArrayList<>();
}
@Override
public void prepare() {
for (int i = 0; i < wrappedEvents.size(); i++) {
ResourceLocation location = Create.asResource(getIdOf(i));
SoundEvent sound = new SoundEvent(location).setRegistryName(location);
compiledEvents.add(Pair.of(sound, wrappedEvents.get(i)
.getSecond()));
ConfiguredSoundEvent wrapped = wrappedEvents.get(i);
ResourceLocation location = getIdOf(i);
RegistryObject<SoundEvent> event = RegistryObject.create(location, ForgeRegistries.SOUND_EVENTS);
compiledEvents.add(new CompiledSoundEvent(event, wrapped.volume(), wrapped.pitch()));
}
}
@Override
public void register(IForgeRegistry<SoundEvent> registry) {
for (Pair<SoundEvent, Couple<Float>> pair : compiledEvents)
registry.register(pair.getFirst());
for (CompiledSoundEvent compiledEvent : compiledEvents) {
ResourceLocation location = compiledEvent.event().getId();
registry.register(new SoundEvent(location).setRegistryName(location));
}
}
@Override
public SoundEvent getMainEvent() {
return compiledEvents.get(0)
.getFirst();
.event().get();
}
protected String getIdOf(int i) {
return i == 0 ? id.getPath() : id.getPath() + "_compounded_" + i;
protected ResourceLocation getIdOf(int i) {
return new ResourceLocation(id.getNamespace(), i == 0 ? id.getPath() : id.getPath() + "_compounded_" + i);
}
@Override
public void write(JsonObject json) {
for (int i = 0; i < wrappedEvents.size(); i++) {
Pair<SoundEvent, Couple<Float>> pair = wrappedEvents.get(i);
ConfiguredSoundEvent event = wrappedEvents.get(i);
JsonObject entry = new JsonObject();
JsonArray list = new JsonArray();
JsonObject s = new JsonObject();
s.addProperty("name", pair.getFirst()
s.addProperty("name", event.event()
.get()
.getLocation()
.toString());
s.addProperty("type", "event");
@ -585,33 +596,35 @@ public class AllSoundEvents {
entry.add("sounds", list);
if (i == 0 && hasSubtitle())
entry.addProperty("subtitle", getSubtitleKey());
json.add(getIdOf(i), entry);
json.add(getIdOf(i).getPath(), entry);
}
}
@Override
public void play(Level world, Player entity, double x, double y, double z, float volume, float pitch) {
for (Pair<SoundEvent, Couple<Float>> pair : compiledEvents) {
Couple<Float> volPitch = pair.getSecond();
world.playSound(entity, x, y, z, pair.getFirst(), category, volPitch.getFirst() * volume,
volPitch.getSecond() * pitch);
for (CompiledSoundEvent event : compiledEvents) {
world.playSound(entity, x, y, z, event.event().get(), category, event.volume() * volume,
event.pitch() * pitch);
}
}
@Override
public void playAt(Level world, double x, double y, double z, float volume, float pitch, boolean fade) {
for (Pair<SoundEvent, Couple<Float>> pair : compiledEvents) {
Couple<Float> volPitch = pair.getSecond();
world.playLocalSound(x, y, z, pair.getFirst(), category, volPitch.getFirst() * volume,
volPitch.getSecond() * pitch, fade);
for (CompiledSoundEvent event : compiledEvents) {
world.playLocalSound(x, y, z, event.event().get(), category, event.volume() * volume,
event.pitch() * pitch, fade);
}
}
private record CompiledSoundEvent(RegistryObject<SoundEvent> event, float volume, float pitch) {
}
}
private static class CustomSoundEntry extends SoundEntry {
protected List<ResourceLocation> variants;
protected SoundEvent event;
protected RegistryObject<SoundEvent> event;
public CustomSoundEntry(ResourceLocation id, List<ResourceLocation> variants, String subtitle,
SoundSource category, int attenuationDistance) {
@ -621,17 +634,18 @@ public class AllSoundEvents {
@Override
public void prepare() {
event = new SoundEvent(id).setRegistryName(id);
event = RegistryObject.create(id, ForgeRegistries.SOUND_EVENTS);
}
@Override
public void register(IForgeRegistry<SoundEvent> registry) {
registry.register(event);
ResourceLocation location = event.getId();
registry.register(new SoundEvent(location).setRegistryName(location));
}
@Override
public SoundEvent getMainEvent() {
return event;
return event.get();
}
@Override
@ -663,12 +677,12 @@ public class AllSoundEvents {
@Override
public void play(Level world, Player entity, double x, double y, double z, float volume, float pitch) {
world.playSound(entity, x, y, z, event, category, volume, pitch);
world.playSound(entity, x, y, z, event.get(), category, volume, pitch);
}
@Override
public void playAt(Level world, double x, double y, double z, float volume, float pitch, boolean fade) {
world.playLocalSound(x, y, z, event, category, volume, pitch, fade);
world.playLocalSound(x, y, z, event.get(), category, volume, pitch, fade);
}
}

View file

@ -0,0 +1,19 @@
package com.simibubi.create;
import com.simibubi.create.content.schematics.SchematicProcessor;
import net.minecraft.core.Registry;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureProcessorType;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.RegistryObject;
public class AllStructureProcessorTypes {
private static final DeferredRegister<StructureProcessorType<?>> REGISTER = DeferredRegister.create(Registry.STRUCTURE_PROCESSOR_REGISTRY, Create.ID);
public static final RegistryObject<StructureProcessorType<SchematicProcessor>> SCHEMATIC = REGISTER.register("schematic", () -> () -> SchematicProcessor.CODEC);
public static void register(IEventBus modEventBus) {
REGISTER.register(modEventBus);
}
}

View file

@ -112,9 +112,11 @@ public class AllTags {
public enum AllBlockTags {
BRITTLE,
FAN_HEATERS,
CASING,
FAN_TRANSPARENT,
NON_MOVABLE,
ORE_OVERRIDE_STONE,
PASSIVE_BOILER_HEATERS,
SAFE_NBT,
SEATS,
TOOLBOXES,
@ -122,10 +124,6 @@ public class AllTags {
WINDMILL_SAILS,
WINDOWABLE,
WRENCH_PICKUP,
CASING,
NON_MOVABLE,
PASSIVE_BOILER_HEATERS,
RELOCATION_NOT_SUPPORTED(FORGE),
WG_STONE(FORGE),
@ -208,10 +206,13 @@ public class AllTags {
BLAZE_BURNER_FUEL_REGULAR(MOD, "blaze_burner_fuel/regular"),
BLAZE_BURNER_FUEL_SPECIAL(MOD, "blaze_burner_fuel/special"),
CASING,
CREATE_INGOTS,
CRUSHED_ORES,
PRESSURIZED_AIR_SOURCES,
SANDPAPER,
SEATS,
SLEEPERS,
TOOLBOXES,
UPRIGHT_ON_BELT,
VALVE_HANDLES,
@ -219,9 +220,6 @@ public class AllTags {
VANILLA_STRIPPED_WOOD,
MODDED_STRIPPED_LOGS,
MODDED_STRIPPED_WOOD,
CASING,
SLEEPERS,
PRESSURIZED_AIR_SOURCES,
STRIPPED_LOGS(FORGE),
STRIPPED_WOOD(FORGE),
@ -402,10 +400,9 @@ public class AllTags {
AllBlockTags.FAN_TRANSPARENT.includeAll(BlockTags.CAMPFIRES);
AllBlockTags.FAN_TRANSPARENT.add(Blocks.IRON_BARS);
AllBlockTags.FAN_HEATERS.includeAll(BlockTags.FIRE);
AllBlockTags.FAN_HEATERS.includeAll(BlockTags.CAMPFIRES);
AllBlockTags.FAN_HEATERS.add(Blocks.MAGMA_BLOCK, Blocks.LAVA);
AllBlockTags.FAN_HEATERS.includeIn(AllBlockTags.PASSIVE_BOILER_HEATERS);
AllBlockTags.PASSIVE_BOILER_HEATERS.includeAll(BlockTags.FIRE);
AllBlockTags.PASSIVE_BOILER_HEATERS.includeAll(BlockTags.CAMPFIRES);
AllBlockTags.PASSIVE_BOILER_HEATERS.add(Blocks.MAGMA_BLOCK, Blocks.LAVA);
AllBlockTags.SAFE_NBT.includeAll(BlockTags.SIGNS);
AllBlockTags.SAFE_NBT.includeAll(BlockTags.BANNERS);
@ -415,7 +412,7 @@ public class AllTags {
AllBlockTags.WRENCH_PICKUP.includeAll(BlockTags.PRESSURE_PLATES);
AllBlockTags.WRENCH_PICKUP.add(Blocks.REDSTONE_WIRE, Blocks.REDSTONE_TORCH, Blocks.REPEATER, Blocks.LEVER,
Blocks.COMPARATOR, Blocks.OBSERVER, Blocks.REDSTONE_WALL_TORCH, Blocks.PISTON, Blocks.STICKY_PISTON,
Blocks.TRIPWIRE, Blocks.TRIPWIRE_HOOK, Blocks.DAYLIGHT_DETECTOR, Blocks.TARGET);
Blocks.TRIPWIRE, Blocks.TRIPWIRE_HOOK, Blocks.DAYLIGHT_DETECTOR, Blocks.TARGET, Blocks.HOPPER);
AllBlockTags.ORE_OVERRIDE_STONE.includeAll(BlockTags.STONE_ORE_REPLACEABLES);

View file

@ -21,7 +21,6 @@ import com.simibubi.create.content.logistics.block.mechanicalArm.AllArmInteracti
import com.simibubi.create.content.logistics.trains.GlobalRailwayManager;
import com.simibubi.create.content.palettes.AllPaletteBlocks;
import com.simibubi.create.content.palettes.PalettesItemGroup;
import com.simibubi.create.content.schematics.SchematicProcessor;
import com.simibubi.create.content.schematics.ServerSchematicLoader;
import com.simibubi.create.content.schematics.filtering.SchematicInstances;
import com.simibubi.create.foundation.advancement.AllAdvancements;
@ -29,6 +28,7 @@ import com.simibubi.create.foundation.advancement.AllTriggers;
import com.simibubi.create.foundation.block.CopperRegistries;
import com.simibubi.create.foundation.command.ServerLagger;
import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.config.ContraptionMovementSetting;
import com.simibubi.create.foundation.data.CreateRegistrate;
import com.simibubi.create.foundation.data.LangMerger;
import com.simibubi.create.foundation.data.recipe.MechanicalCraftingRecipeGen;
@ -36,16 +36,19 @@ import com.simibubi.create.foundation.data.recipe.ProcessingRecipeGen;
import com.simibubi.create.foundation.data.recipe.SequencedAssemblyRecipeGen;
import com.simibubi.create.foundation.data.recipe.StandardRecipeGen;
import com.simibubi.create.foundation.networking.AllPackets;
import com.simibubi.create.foundation.worldgen.AllWorldFeatures;
import com.simibubi.create.foundation.utility.CreateRegistry;
import com.simibubi.create.foundation.worldgen.AllFeatures;
import com.simibubi.create.foundation.worldgen.AllOreFeatureConfigEntries;
import com.simibubi.create.foundation.worldgen.AllPlacementModifiers;
import com.simibubi.create.foundation.worldgen.BuiltinRegistration;
import com.tterrag.registrate.util.nullness.NonNullSupplier;
import net.minecraft.core.particles.ParticleType;
import net.minecraft.data.DataGenerator;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.crafting.RecipeSerializer;
import net.minecraft.world.level.levelgen.feature.Feature;
import net.minecraft.world.level.Level;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.common.ForgeMod;
import net.minecraftforge.common.MinecraftForge;
@ -57,14 +60,13 @@ import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.forge.event.lifecycle.GatherDataEvent;
import net.minecraftforge.registries.DataSerializerEntry;
@Mod(Create.ID)
public class Create {
public static final String ID = "create";
public static final String NAME = "Create";
public static final String VERSION = "0.5c";
public static final String VERSION = "0.5d";
public static final Logger LOGGER = LogManager.getLogger();
@ -80,6 +82,8 @@ public class Create {
public static final TorquePropagator TORQUE_PROPAGATOR = new TorquePropagator();
public static final GlobalRailwayManager RAILWAYS = new GlobalRailwayManager();
public static final ServerLagger LAGGER = new ServerLagger();
/** Use the {@link Random} of a local {@link Level} or {@link Entity} or create one */
@Deprecated
public static final Random RANDOM = new Random();
private static final NonNullSupplier<CreateRegistrate> REGISTRATE = CreateRegistrate.lazy(ID);
@ -91,6 +95,10 @@ public class Create {
public static void onCtor() {
ModLoadingContext modLoadingContext = ModLoadingContext.get();
IEventBus modEventBus = FMLJavaModLoadingContext.get()
.getModEventBus();
IEventBus forgeEventBus = MinecraftForge.EVENT_BUS;
AllSoundEvents.prepare();
AllBlocks.register();
AllItems.register();
@ -100,39 +108,41 @@ public class Create {
AllContainerTypes.register();
AllEntityTypes.register();
AllTileEntities.register();
AllEnchantments.register();
AllRecipeTypes.register(modEventBus);
AllParticleTypes.register(modEventBus);
AllStructureProcessorTypes.register(modEventBus);
AllEntityDataSerializers.register(modEventBus);
AllOreFeatureConfigEntries.init();
AllFeatures.register(modEventBus);
AllPlacementModifiers.register(modEventBus);
BuiltinRegistration.register(modEventBus);
AllConfigs.register(modLoadingContext);
AllMovementBehaviours.registerDefaults();
AllInteractionBehaviours.registerDefaults();
AllDisplayBehaviours.registerDefaults();
ContraptionMovementSetting.registerDefaults();
AllArmInteractionPointTypes.register();
AllWorldFeatures.register();
AllEnchantments.register();
AllConfigs.register(modLoadingContext);
BlockSpoutingBehaviour.register();
BlockSpoutingBehaviour.registerDefaults();
ForgeMod.enableMilkFluid();
CopperRegistries.inject();
IEventBus modEventBus = FMLJavaModLoadingContext.get()
.getModEventBus();
IEventBus forgeEventBus = MinecraftForge.EVENT_BUS;
modEventBus.addListener(Create::init);
modEventBus.addListener(EventPriority.LOWEST, Create::gatherData);
modEventBus.addGenericListener(Feature.class, AllWorldFeatures::registerOreFeatures);
modEventBus.addGenericListener(RecipeSerializer.class, AllRecipeTypes::register);
modEventBus.addGenericListener(ParticleType.class, AllParticleTypes::register);
modEventBus.addGenericListener(SoundEvent.class, AllSoundEvents::register);
modEventBus.addGenericListener(DataSerializerEntry.class, AllEntityDataSerializers::register);
forgeEventBus.addListener(EventPriority.HIGH, SlidingDoorBlock::stopItQuark);
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> CreateClient.onCtorClient(modEventBus, forgeEventBus));
Mods.CURIOS.executeIfInstalled(() -> Curios::init);
}
public static void init(final FMLCommonSetupEvent event) {
CreateRegistry.unwrapAll();
AllPackets.registerPackets();
SchematicInstances.register();
BuiltinPotatoProjectileTypes.register();
@ -140,22 +150,24 @@ public class Create {
event.enqueueWork(() -> {
AllAdvancements.register();
AllTriggers.register();
SchematicProcessor.register();
AllWorldFeatures.registerFeatures();
AllWorldFeatures.registerPlacementTypes();
BoilerHeaters.registerDefaults();
});
}
public static void gatherData(GatherDataEvent event) {
DataGenerator gen = event.getGenerator();
gen.addProvider(new AllAdvancements(gen));
gen.addProvider(new LangMerger(gen));
gen.addProvider(AllSoundEvents.provider(gen));
gen.addProvider(new StandardRecipeGen(gen));
gen.addProvider(new MechanicalCraftingRecipeGen(gen));
gen.addProvider(new SequencedAssemblyRecipeGen(gen));
ProcessingRecipeGen.registerAll(gen);
if (event.includeClient()) {
gen.addProvider(new LangMerger(gen));
gen.addProvider(AllSoundEvents.provider(gen));
}
if (event.includeServer()) {
gen.addProvider(new AllAdvancements(gen));
gen.addProvider(new StandardRecipeGen(gen));
gen.addProvider(new MechanicalCraftingRecipeGen(gen));
gen.addProvider(new SequencedAssemblyRecipeGen(gen));
ProcessingRecipeGen.registerAll(gen);
// AllOreFeatureConfigEntries.gatherData(event);
}
}
public static CreateRegistrate registrate() {

View file

@ -26,6 +26,7 @@ import com.simibubi.create.foundation.ponder.element.WorldSectionElement;
import com.simibubi.create.foundation.render.CachedBufferer;
import com.simibubi.create.foundation.render.CreateContexts;
import com.simibubi.create.foundation.render.SuperByteBufferCache;
import com.simibubi.create.foundation.utility.Components;
import com.simibubi.create.foundation.utility.ModelSwapper;
import com.simibubi.create.foundation.utility.ghost.GhostBlocks;
import com.simibubi.create.foundation.utility.outliner.Outliner;
@ -33,12 +34,10 @@ import com.simibubi.create.foundation.utility.outliner.Outliner;
import net.minecraft.ChatFormatting;
import net.minecraft.client.GraphicsStatus;
import net.minecraft.client.Minecraft;
import net.minecraft.network.chat.ChatType;
import net.minecraft.network.chat.ClickEvent;
import net.minecraft.network.chat.ComponentUtils;
import net.minecraft.network.chat.HoverEvent;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.network.chat.TextComponent;
import net.minecraftforge.client.gui.ForgeIngameGui;
import net.minecraftforge.client.gui.OverlayRegistry;
import net.minecraftforge.eventbus.api.IEventBus;
@ -85,7 +84,6 @@ public class CreateClient {
BUFFER_CACHE.registerCompartment(WorldSectionElement.DOC_WORLD_SECTION, 20);
AllKeys.register();
// AllFluids.assignRenderLayers();
AllBlockPartials.init();
AllStitchedTextures.init();
@ -126,16 +124,16 @@ public class CreateClient {
if (AllConfigs.CLIENT.ignoreFabulousWarning.get())
return;
MutableComponent text = ComponentUtils.wrapInSquareBrackets(new TextComponent("WARN"))
MutableComponent text = ComponentUtils.wrapInSquareBrackets(Components.literal("WARN"))
.withStyle(ChatFormatting.GOLD)
.append(new TextComponent(
.append(Components.literal(
" Some of Create's visual features will not be available while Fabulous graphics are enabled!"))
.withStyle(style -> style
.withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/create dismissFabulousWarning"))
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT,
new TextComponent("Click here to disable this warning"))));
Components.literal("Click here to disable this warning"))));
mc.gui.handleChat(ChatType.CHAT, text, mc.player.getUUID());
mc.player.displayClientMessage(text, false);
}
}

View file

@ -46,7 +46,7 @@ public abstract class BlockSpoutingBehaviour {
public abstract int fillBlock(Level world, BlockPos pos, SpoutTileEntity spout, FluidStack availableFluid,
boolean simulate);
public static void register() {
public static void registerDefaults() {
addCustomSpoutInteraction(Create.asResource("ticon_casting"), new SpoutCasting());
}

View file

@ -307,7 +307,7 @@ public class CreateJEI implements IModPlugin {
mysteryConversion = builder(ConversionRecipe.class)
.addRecipes(() -> MysteriousItemConversionCategory.RECIPES)
.itemIcon(AllItems.CHROMATIC_COMPOUND.get())
.itemIcon(AllBlocks.PECULIAR_BELL.get())
.emptyBackground(177, 50)
.build("mystery_conversion", MysteriousItemConversionCategory::new);

View file

@ -15,6 +15,7 @@ import com.simibubi.create.AllFluids;
import com.simibubi.create.content.contraptions.fluids.potion.PotionFluidHandler;
import com.simibubi.create.content.contraptions.processing.ProcessingOutput;
import com.simibubi.create.foundation.gui.AllGuiTextures;
import com.simibubi.create.foundation.utility.Components;
import com.simibubi.create.foundation.utility.Lang;
import mezz.jei.api.forge.ForgeTypes;
@ -27,7 +28,6 @@ import mezz.jei.api.registration.IRecipeRegistration;
import net.minecraft.ChatFormatting;
import net.minecraft.MethodsReturnNonnullByDefault;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.Recipe;
@ -159,12 +159,12 @@ public abstract class CreateRecipeCategory<T extends Recipe<?>> implements IReci
}
int amount = mbAmount == -1 ? fluidStack.getAmount() : mbAmount;
Component text = new TextComponent(String.valueOf(amount)).append(Lang.translateDirect("generic.unit.millibuckets")).withStyle(ChatFormatting.GOLD);
Component text = Components.literal(String.valueOf(amount)).append(Lang.translateDirect("generic.unit.millibuckets")).withStyle(ChatFormatting.GOLD);
if (tooltip.isEmpty())
tooltip.add(0, text);
else {
List<Component> siblings = tooltip.get(0).getSiblings();
siblings.add(new TextComponent(" "));
siblings.add(Components.literal(" "));
siblings.add(text);
}
};

View file

@ -11,6 +11,7 @@ import com.simibubi.create.content.contraptions.fluids.potion.PotionFluidHandler
import com.simibubi.create.content.contraptions.processing.EmptyingRecipe;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder;
import com.simibubi.create.foundation.gui.AllGuiTextures;
import com.simibubi.create.foundation.utility.RegisteredObjects;
import mezz.jei.api.constants.VanillaTypes;
import mezz.jei.api.forge.ForgeTypes;
@ -68,10 +69,8 @@ public class ItemDrainCategory extends CreateRecipeCategory<EmptyingRecipe> {
continue;
Ingredient ingredient = Ingredient.of(stack);
ResourceLocation itemName = stack.getItem()
.getRegistryName();
ResourceLocation fluidName = extracted.getFluid()
.getRegistryName();
ResourceLocation itemName = RegisteredObjects.getKeyOrThrow(stack.getItem());
ResourceLocation fluidName = RegisteredObjects.getKeyOrThrow(extracted.getFluid());
consumer.accept(new ProcessingRecipeBuilder<>(EmptyingRecipe::new,
Create.asResource("empty_" + itemName.getNamespace() + "_" + itemName.getPath() + "_of_"

View file

@ -11,6 +11,7 @@ import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack;
import com.simibubi.create.compat.jei.category.animations.AnimatedCrafter;
import com.simibubi.create.foundation.gui.AllGuiTextures;
import com.simibubi.create.foundation.utility.Components;
import mezz.jei.api.constants.VanillaTypes;
import mezz.jei.api.gui.builder.IRecipeLayoutBuilder;
@ -23,7 +24,7 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Font;
import net.minecraft.client.renderer.entity.ItemRenderer;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.TooltipFlag;
@ -183,7 +184,7 @@ public class MechanicalCraftingCategory extends CreateRecipeCategory<CraftingRec
return ingredient.getTooltipLines(player, tooltipFlag);
} catch (RuntimeException | LinkageError e) {
List<Component> list = new ArrayList<>();
TranslatableComponent crash = new TranslatableComponent("jei.tooltip.error.crash");
MutableComponent crash = Components.translatable("jei.tooltip.error.crash");
list.add(crash.withStyle(ChatFormatting.RED));
return list;
}

View file

@ -24,8 +24,8 @@ public class MysteriousItemConversionCategory extends CreateRecipeCategory<Conve
static {
RECIPES.add(ConversionRecipe.create(AllItems.EMPTY_BLAZE_BURNER.asStack(), AllBlocks.BLAZE_BURNER.asStack()));
RECIPES.add(ConversionRecipe.create(AllBlocks.PECULIAR_BELL.asStack(), AllBlocks.HAUNTED_BELL.asStack()));
RECIPES.add(ConversionRecipe.create(AllItems.CHROMATIC_COMPOUND.asStack(), AllItems.SHADOW_STEEL.asStack()));
RECIPES.add(ConversionRecipe.create(AllItems.CHROMATIC_COMPOUND.asStack(), AllItems.REFINED_RADIANCE.asStack()));
// RECIPES.add(ConversionRecipe.create(AllItems.CHROMATIC_COMPOUND.asStack(), AllItems.SHADOW_STEEL.asStack()));
// RECIPES.add(ConversionRecipe.create(AllItems.CHROMATIC_COMPOUND.asStack(), AllItems.REFINED_RADIANCE.asStack()));
}
public MysteriousItemConversionCategory(Info<ConversionRecipe> info) {

View file

@ -15,7 +15,9 @@ import com.simibubi.create.content.contraptions.itemAssembly.SequencedAssemblyRe
import com.simibubi.create.content.contraptions.itemAssembly.SequencedRecipe;
import com.simibubi.create.foundation.gui.AllGuiTextures;
import com.simibubi.create.foundation.gui.AllIcons;
import com.simibubi.create.foundation.utility.Components;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.RegisteredObjects;
import mezz.jei.api.gui.builder.IRecipeLayoutBuilder;
import mezz.jei.api.gui.ingredient.IRecipeSlotsView;
@ -25,8 +27,7 @@ import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Font;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.resources.ResourceLocation;
@ParametersAreNonnullByDefault
@ -56,8 +57,7 @@ public class SequencedAssemblyCategory extends CreateRecipeCategory<SequencedAss
return;
float chance = recipe.getOutputChance();
tooltip.add(1, Lang.translateDirect("recipe.processing.chance", chance < 0.01 ? "<1" : (int) (chance * 100))
.withStyle(ChatFormatting.GOLD));
tooltip.add(1, chanceComponent(chance));
});
int width = 0;
@ -75,9 +75,8 @@ public class SequencedAssemblyCategory extends CreateRecipeCategory<SequencedAss
}
private SequencedAssemblySubCategory getSubCategory(SequencedRecipe<?> sequencedRecipe) {
return subCategories.computeIfAbsent(sequencedRecipe.getRecipe()
.getSerializer()
.getRegistryName(),
return subCategories.computeIfAbsent(RegisteredObjects.getKeyOrThrow(sequencedRecipe.getRecipe()
.getSerializer()),
rl -> sequencedRecipe.getAsAssemblyRecipe()
.getJEISubCategory()
.get()
@ -100,7 +99,7 @@ public class SequencedAssemblyCategory extends CreateRecipeCategory<SequencedAss
AllGuiTextures.JEI_LONG_ARROW.render(matrixStack, 52 + xOffset, 79);
if (!singleOutput) {
AllGuiTextures.JEI_CHANCE_SLOT.render(matrixStack, 150 + xOffset, 75);
Component component = new TextComponent("?").withStyle(ChatFormatting.BOLD);
Component component = Components.literal("?").withStyle(ChatFormatting.BOLD);
font.drawShadow(matrixStack, component, font.width(component) / -2 + 8 + 150 + xOffset, 2 + 78,
0xefefef);
}
@ -109,7 +108,7 @@ public class SequencedAssemblyCategory extends CreateRecipeCategory<SequencedAss
matrixStack.pushPose();
matrixStack.translate(15, 9, 0);
AllIcons.I_SEQ_REPEAT.render(matrixStack, 50 + xOffset, 75);
Component repeat = new TextComponent("x" + recipe.getLoops());
Component repeat = Components.literal("x" + recipe.getLoops());
font.draw(matrixStack, repeat, 66 + xOffset, 80, 0x888888);
matrixStack.popPose();
}
@ -129,7 +128,7 @@ public class SequencedAssemblyCategory extends CreateRecipeCategory<SequencedAss
SequencedRecipe<?> sequencedRecipe = sequence.get(i);
SequencedAssemblySubCategory subCategory = getSubCategory(sequencedRecipe);
int subWidth = subCategory.getWidth();
TextComponent component = new TextComponent("" + romans[Math.min(i, 6)]);
MutableComponent component = Components.literal("" + romans[Math.min(i, 6)]);
font.draw(matrixStack, component, font.width(component) / -2 + subWidth / 2, 2, 0x888888);
subCategory.draw(sequencedRecipe, matrixStack, mouseX, mouseY, i);
matrixStack.translate(subWidth + margin, 0, 0);
@ -144,7 +143,7 @@ public class SequencedAssemblyCategory extends CreateRecipeCategory<SequencedAss
public List<Component> getTooltipStrings(SequencedAssemblyRecipe recipe, IRecipeSlotsView iRecipeSlotsView, double mouseX, double mouseY) {
List<Component> tooltip = new ArrayList<>();
TranslatableComponent junk = Lang.translateDirect("recipe.assembly.junk");
MutableComponent junk = Lang.translateDirect("recipe.assembly.junk");
boolean singleOutput = recipe.getOutputChance() == 1;
boolean willRepeat = recipe.getLoops() > 1;
@ -157,8 +156,7 @@ public class SequencedAssemblyCategory extends CreateRecipeCategory<SequencedAss
if (!singleOutput && mouseX >= minX && mouseX < maxX && mouseY >= minY && mouseY < maxY) {
float chance = recipe.getOutputChance();
tooltip.add(junk);
tooltip.add(Lang.translateDirect("recipe.processing.chance", chance < 0.01 ? "<1" : 100 - (int) (chance * 100))
.withStyle(ChatFormatting.GOLD));
tooltip.add(chanceComponent(1 - chance));
return tooltip;
}
@ -198,4 +196,10 @@ public class SequencedAssemblyCategory extends CreateRecipeCategory<SequencedAss
return tooltip;
}
protected MutableComponent chanceComponent(float chance) {
String number = chance < 0.01 ? "<1" : chance > 0.99 ? ">99" : String.valueOf(Math.round(chance * 100));
return Lang.translateDirect("recipe.processing.chance", number)
.withStyle(ChatFormatting.GOLD);
}
}

View file

@ -14,6 +14,7 @@ import com.simibubi.create.content.contraptions.fluids.potion.PotionFluidHandler
import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder;
import com.simibubi.create.foundation.fluid.FluidIngredient;
import com.simibubi.create.foundation.gui.AllGuiTextures;
import com.simibubi.create.foundation.utility.RegisteredObjects;
import mezz.jei.api.constants.VanillaTypes;
import mezz.jei.api.forge.ForgeTypes;
@ -77,10 +78,8 @@ public class SpoutCategory extends CreateRecipeCategory<FillingRecipe> {
return;
Ingredient bucket = Ingredient.of(stack);
ResourceLocation itemName = stack.getItem()
.getRegistryName();
ResourceLocation fluidName = fluidCopy.getFluid()
.getRegistryName();
ResourceLocation itemName = RegisteredObjects.getKeyOrThrow(stack.getItem());
ResourceLocation fluidName = RegisteredObjects.getKeyOrThrow(fluidCopy.getFluid());
consumer.accept(new ProcessingRecipeBuilder<>(FillingRecipe::new,
Create.asResource("fill_" + itemName.getNamespace() + "_" + itemName.getPath()
+ "_with_" + fluidName.getNamespace() + "_" + fluidName.getPath()))

View file

@ -5,6 +5,7 @@ import com.simibubi.create.compat.Mods;
import com.simibubi.create.content.contraptions.fluids.actors.SpoutTileEntity;
import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.fluid.FluidHelper;
import com.simibubi.create.foundation.utility.RegisteredObjects;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
@ -40,8 +41,7 @@ public class SpoutCasting extends BlockSpoutingBehaviour {
if (handler.getTanks() != 1)
return 0;
ResourceLocation registryName = te.getType()
.getRegistryName();
ResourceLocation registryName = RegisteredObjects.getKeyOrThrow(te.getType());
if (!registryName.equals(TABLE) && !registryName.equals(BASIN))
return 0;
if (!handler.isFluidValid(0, availableFluid))

View file

@ -26,9 +26,7 @@ public class TorquePropagator {
public KineticNetwork getOrCreateNetworkFor(KineticTileEntity te) {
Long id = te.network;
KineticNetwork network;
if (!networks.containsKey(te.getLevel()))
networks.put(te.getLevel(), new HashMap<>());
Map<Long, KineticNetwork> map = networks.get(te.getLevel());
Map<Long, KineticNetwork> map = networks.computeIfAbsent(te.getLevel(), $ -> new HashMap<>());
if (id == null)
return null;

View file

@ -145,8 +145,8 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity {
}
@Override
public void writeSafe(CompoundTag compound, boolean clientPacket) {
super.writeSafe(compound, clientPacket);
public void writeSafe(CompoundTag compound) {
super.writeSafe(compound);
if (input == null)
return;

View file

@ -9,7 +9,6 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.IntStream;
import org.apache.commons.lang3.tuple.Pair;
@ -159,12 +158,16 @@ public class RecipeGridHandler {
}
public static boolean isRecipeAllowed(CraftingRecipe recipe, CraftingContainer inventory) {
if (!AllConfigs.SERVER.recipes.allowBiggerFireworksInCrafter.get() && recipe instanceof FireworkRocketRecipe) {
int numItems = IntStream.range(0, inventory.getContainerSize())
.map(i -> inventory.getItem(i).isEmpty() ? 0 : 1)
.sum();
if (numItems > 9)
if (recipe instanceof FireworkRocketRecipe) {
int numItems = 0;
for (int i = 0; i < inventory.getContainerSize(); i++) {
if (!inventory.getItem(i).isEmpty()) {
numItems++;
}
}
if (numItems > AllConfigs.SERVER.recipes.maxFireworkIngredientsInCrafter.get()) {
return false;
}
}
if (AllRecipeTypes.shouldIgnoreInAutomation(recipe))
return false;

View file

@ -12,11 +12,10 @@ import com.simibubi.create.content.contraptions.itemAssembly.IAssemblyRecipe;
import com.simibubi.create.content.contraptions.processing.ItemApplicationRecipe;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeParams;
import com.simibubi.create.foundation.utility.Components;
import com.simibubi.create.foundation.utility.Lang;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.Ingredient;
@ -59,9 +58,9 @@ public class DeployerApplicationRecipe extends ItemApplicationRecipe implements
ItemStack[] matchingStacks = ingredients.get(1)
.getItems();
if (matchingStacks.length == 0)
return new TextComponent("Invalid");
return Components.literal("Invalid");
return Lang.translateDirect("recipe.assembly.deploying_item",
new TranslatableComponent(matchingStacks[0].getDescriptionId()).getString());
Components.translatable(matchingStacks[0].getDescriptionId()).getString());
}
@Override

View file

@ -51,6 +51,7 @@ public class DeployerFakePlayer extends FakePlayer {
Pair<BlockPos, Float> blockBreakingProgress;
ItemStack spawnedItemEffects;
public boolean placedTracks;
public boolean onMinecartContraption;
public DeployerFakePlayer(ServerLevel world) {
super(world, DEPLOYER_PROFILE);

View file

@ -275,6 +275,7 @@ public class DeployerMovementBehaviour implements MovementBehaviour {
private DeployerFakePlayer getPlayer(MovementContext context) {
if (!(context.temporaryData instanceof DeployerFakePlayer) && context.world instanceof ServerLevel) {
DeployerFakePlayer deployerFakePlayer = new DeployerFakePlayer((ServerLevel) context.world);
deployerFakePlayer.onMinecartContraption = context.contraption instanceof MountedContraption;
deployerFakePlayer.getInventory()
.load(context.tileData.getList("Inventory", Tag.TAG_COMPOUND));
if (context.data.contains("HeldItem"))

View file

@ -6,6 +6,7 @@ import com.simibubi.create.AllItems;
import com.simibubi.create.content.contraptions.components.structureMovement.AbstractContraptionEntity;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
import com.simibubi.create.content.contraptions.components.structureMovement.MovingInteractionBehaviour;
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.MountedContraption;
import com.simibubi.create.foundation.utility.NBTHelper;
import net.minecraft.core.BlockPos;
@ -55,6 +56,7 @@ public class DeployerMovingInteraction extends MovingInteractionBehaviour {
if (!(ctx.temporaryData instanceof DeployerFakePlayer) && ctx.world instanceof ServerLevel) {
DeployerFakePlayer deployerFakePlayer = new DeployerFakePlayer((ServerLevel) ctx.world);
deployerFakePlayer.onMinecartContraption = ctx.contraption instanceof MountedContraption;
deployerFakePlayer.getInventory()
.load(ctx.tileData.getList("Inventory", Tag.TAG_COMPOUND));
ctx.temporaryData = fake = deployerFakePlayer;

View file

@ -23,6 +23,7 @@ import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
import com.simibubi.create.foundation.tileEntity.behaviour.belt.BeltProcessingBehaviour;
import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour;
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
import com.simibubi.create.foundation.utility.Components;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.NBTHelper;
import com.simibubi.create.foundation.utility.VecHelper;
@ -35,7 +36,6 @@ import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag;
import net.minecraft.nbt.Tag;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.sounds.SoundSource;
@ -403,6 +403,12 @@ public class DeployerTileEntity extends KineticTileEntity {
}
}
@Override
public void writeSafe(CompoundTag tag) {
NBTHelper.writeEnum(tag, "Mode", mode);
super.writeSafe(tag);
}
private IItemHandlerModifiable createHandler() {
return new DeployerItemHandler(this);
}
@ -474,13 +480,13 @@ public class DeployerTileEntity extends KineticTileEntity {
if (!heldItem.isEmpty())
Lang.translate("tooltip.deployer.contains",
new TranslatableComponent(heldItem.getDescriptionId()).getString(), heldItem.getCount())
Components.translatable(heldItem.getDescriptionId()).getString(), heldItem.getCount())
.style(ChatFormatting.GREEN)
.forGoggles(tooltip);
float stressAtBase = calculateStressApplied();
if (StressImpact.isEnabled() && !Mth.equal(stressAtBase, 0)) {
tooltip.add(Lang.empty());
tooltip.add(Components.immutableEmpty());
addStressImpactStats(tooltip, stressAtBase);
}

View file

@ -4,6 +4,7 @@ import java.util.List;
import com.simibubi.create.content.contraptions.base.GeneratingKineticTileEntity;
import com.simibubi.create.foundation.block.BlockStressValues;
import com.simibubi.create.foundation.utility.RegisteredObjects;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction.Axis;
@ -81,7 +82,7 @@ public class PoweredShaftTileEntity extends GeneratingKineticTileEntity {
if (enginePos != null && capacityKey != null) {
compound.put("EnginePos", NbtUtils.writeBlockPos(enginePos));
compound.putFloat("EnginePower", engineEfficiency);
compound.putString("EngineType", capacityKey.getRegistryName()
compound.putString("EngineType", RegisteredObjects.getKeyOrThrow(capacityKey)
.toString());
}
super.write(compound, clientPacket);

View file

@ -14,6 +14,7 @@ import com.simibubi.create.foundation.advancement.AllAdvancements;
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.Components;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.VecHelper;
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
@ -25,7 +26,7 @@ import net.minecraft.core.Direction;
import net.minecraft.core.Direction.Axis;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.util.Mth;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
@ -110,7 +111,7 @@ public class WhistleTileEntity extends SmartTileEntity implements IHaveGoggleInf
String[] pitches = Lang.translateDirect("generic.notes")
.getString()
.split(";");
TextComponent textComponent = new TextComponent(spacing);
MutableComponent textComponent = Components.literal(spacing);
tooltip.add(textComponent.append(Lang.translateDirect("generic.pitch", pitches[pitch % pitches.length])));
return true;
}

View file

@ -831,7 +831,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
}
@OnlyIn(Dist.CLIENT)
public abstract void doLocalTransforms(float partialTicks, PoseStack[] matrixStacks);
public abstract void applyLocalTransforms(PoseStack matrixStack, float partialTicks);
public static class ContraptionRotationState {
public static final ContraptionRotationState NONE = new ContraptionRotationState();

View file

@ -21,6 +21,8 @@ import java.util.function.BiConsumer;
import javax.annotation.Nullable;
import net.minecraft.world.level.block.DoorBlock;
import org.apache.commons.lang3.tuple.MutablePair;
import org.apache.commons.lang3.tuple.Pair;
@ -1020,7 +1022,7 @@ public abstract class Contraption {
.isEmpty()
&& !blockState.getCollisionShape(world, targetPos)
.isEmpty())) {
if (targetPos.getY() == 0)
if (targetPos.getY() == world.getMinBuildHeight())
targetPos = targetPos.above();
world.levelEvent(2001, targetPos, Block.getId(state));
Block.dropResources(state, world, targetPos, null);
@ -1045,7 +1047,7 @@ public abstract class Contraption {
boolean verticalRotation = transform.rotationAxis == null || transform.rotationAxis.isHorizontal();
verticalRotation = verticalRotation && transform.rotation != Rotation.NONE;
if (verticalRotation) {
if (state.getBlock() instanceof RopeBlock || state.getBlock() instanceof MagnetBlock)
if (state.getBlock() instanceof RopeBlock || state.getBlock() instanceof MagnetBlock || state.getBlock() instanceof DoorBlock)
world.destroyBlock(targetPos, true);
}

View file

@ -226,15 +226,14 @@ public class ControlledContraptionEntity extends AbstractContraptionEntity {
@Override
@OnlyIn(Dist.CLIENT)
public void doLocalTransforms(float partialTicks, PoseStack[] matrixStacks) {
public void applyLocalTransforms(PoseStack matrixStack, float partialTicks) {
float angle = getAngle(partialTicks);
Axis axis = getRotationAxis();
for (PoseStack stack : matrixStacks)
TransformStack.cast(stack)
.nudge(getId())
.centre()
.rotate(angle, axis)
.unCentre();
TransformStack.cast(matrixStack)
.nudge(getId())
.centre()
.rotate(angle, axis)
.unCentre();
}
}

View file

@ -5,11 +5,11 @@ import java.util.List;
import com.simibubi.create.content.contraptions.goggles.IHaveGoggleInformation;
import com.simibubi.create.foundation.item.TooltipHelper;
import com.simibubi.create.foundation.utility.Components;
import com.simibubi.create.foundation.utility.Lang;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TextComponent;
public interface IDisplayAssemblyExceptions {
@ -19,7 +19,7 @@ public interface IDisplayAssemblyExceptions {
return false;
if (!tooltip.isEmpty())
tooltip.add(TextComponent.EMPTY);
tooltip.add(Components.immutableEmpty());
tooltip.add(IHaveGoggleInformation.componentSpacing.plainCopy()
.append(Lang.translateDirect("gui.assembly.exception")

View file

@ -514,52 +514,48 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity {
@Override
@OnlyIn(Dist.CLIENT)
public void doLocalTransforms(float partialTicks, PoseStack[] matrixStacks) {
public void applyLocalTransforms(PoseStack matrixStack, float partialTicks) {
float angleInitialYaw = getInitialYaw();
float angleYaw = getViewYRot(partialTicks);
float anglePitch = getViewXRot(partialTicks);
for (PoseStack stack : matrixStacks)
stack.translate(-.5f, 0, -.5f);
matrixStack.translate(-.5f, 0, -.5f);
Entity ridingEntity = getVehicle();
if (ridingEntity instanceof AbstractMinecart)
repositionOnCart(partialTicks, matrixStacks, ridingEntity);
repositionOnCart(matrixStack, partialTicks, ridingEntity);
else if (ridingEntity instanceof AbstractContraptionEntity) {
if (ridingEntity.getVehicle() instanceof AbstractMinecart)
repositionOnCart(partialTicks, matrixStacks, ridingEntity.getVehicle());
repositionOnCart(matrixStack, partialTicks, ridingEntity.getVehicle());
else
repositionOnContraption(partialTicks, matrixStacks, ridingEntity);
repositionOnContraption(matrixStack, partialTicks, ridingEntity);
}
for (PoseStack stack : matrixStacks)
TransformStack.cast(stack)
.nudge(getId())
.centre()
.rotateY(angleYaw)
.rotateZ(anglePitch)
.rotateY(angleInitialYaw)
.unCentre();
TransformStack.cast(matrixStack)
.nudge(getId())
.centre()
.rotateY(angleYaw)
.rotateZ(anglePitch)
.rotateY(angleInitialYaw)
.unCentre();
}
@OnlyIn(Dist.CLIENT)
private void repositionOnContraption(float partialTicks, PoseStack[] matrixStacks, Entity ridingEntity) {
private void repositionOnContraption(PoseStack matrixStack, float partialTicks, Entity ridingEntity) {
Vec3 pos = getContraptionOffset(partialTicks, ridingEntity);
for (PoseStack stack : matrixStacks)
stack.translate(pos.x, pos.y, pos.z);
matrixStack.translate(pos.x, pos.y, pos.z);
}
// Minecarts do not always render at their exact location, so the contraption
// has to adjust aswell
@OnlyIn(Dist.CLIENT)
private void repositionOnCart(float partialTicks, PoseStack[] matrixStacks, Entity ridingEntity) {
private void repositionOnCart(PoseStack matrixStack, float partialTicks, Entity ridingEntity) {
Vec3 cartPos = getCartOffset(partialTicks, ridingEntity);
if (cartPos == Vec3.ZERO)
return;
for (PoseStack stack : matrixStacks)
stack.translate(cartPos.x, cartPos.y, cartPos.z);
matrixStack.translate(cartPos.x, cartPos.y, cartPos.z);
}
@OnlyIn(Dist.CLIENT)

View file

@ -3,8 +3,8 @@ package com.simibubi.create.content.contraptions.components.structureMovement.ch
import com.simibubi.create.AllItems;
import com.simibubi.create.AllSoundEvents;
import com.simibubi.create.AllTileEntities;
import com.simibubi.create.content.contraptions.components.structureMovement.StructureTransform;
import com.simibubi.create.content.contraptions.components.structureMovement.ITransformableBlock;
import com.simibubi.create.content.contraptions.components.structureMovement.StructureTransform;
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
import com.simibubi.create.foundation.block.ITE;
import com.simibubi.create.foundation.utility.Iterate;

View file

@ -176,7 +176,7 @@ public class GantryContraptionEntity extends AbstractContraptionEntity {
}
@Override
public void doLocalTransforms(float partialTicks, PoseStack[] matrixStacks) { }
public void applyLocalTransforms(PoseStack matrixStack, float partialTicks) { }
public void updateClientMotion() {
float modifier = movementAxis.getAxisDirection()

View file

@ -10,6 +10,7 @@ import com.simibubi.create.AllSpecialTextures;
import com.simibubi.create.CreateClient;
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.AbstractChassisBlock;
import com.simibubi.create.foundation.networking.AllPackets;
import com.simibubi.create.foundation.utility.Components;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.RaycastHelper;
@ -18,7 +19,6 @@ import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.sounds.SoundSource;
import net.minecraft.world.item.ItemStack;
@ -62,7 +62,7 @@ public class SuperGlueSelectionHandler {
if (clusterCooldown > 0) {
if (clusterCooldown == 25)
player.displayClientMessage(TextComponent.EMPTY, true);
player.displayClientMessage(Components.immutableEmpty(), true);
CreateClient.OUTLINER.keep(clusterOutlineSlot);
clusterCooldown--;
}

View file

@ -8,6 +8,7 @@ import javax.annotation.Nullable;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import com.simibubi.create.AllItems;
import com.simibubi.create.content.contraptions.components.deployer.DeployerFakePlayer;
import com.simibubi.create.content.contraptions.components.structureMovement.AbstractContraptionEntity;
import com.simibubi.create.content.contraptions.components.structureMovement.Contraption;
import com.simibubi.create.content.contraptions.components.structureMovement.OrientedContraptionEntity;
@ -208,6 +209,8 @@ public class MinecartContraptionItem extends Item {
return;
if (!entity.isAlive())
return;
if (player instanceof DeployerFakePlayer dfp && dfp.onMinecartContraption)
return;
AbstractMinecart cart = (AbstractMinecart) entity;
Type type = cart.getMinecartType();
if (type != Type.RIDEABLE && type != Type.FURNACE && type != Type.CHEST)

View file

@ -34,7 +34,7 @@ public class ContraptionMatrices {
this.viewProjection.pushPose();
transform(this.viewProjection, viewProjection);
model.pushPose();
entity.doLocalTransforms(partialTicks, new PoseStack[] { model });
entity.applyLocalTransforms(model, partialTicks);
modelViewProjection.pushPose();
transform(modelViewProjection, viewProjection);

View file

@ -1,6 +1,7 @@
package com.simibubi.create.content.contraptions.fluids;
import com.simibubi.create.Create;
import com.simibubi.create.foundation.utility.RegisteredObjects;
import net.minecraft.core.BlockPos;
import net.minecraft.tags.FluidTags;
@ -43,8 +44,7 @@ public class FluidBottleItemHook extends Item {
return;
FluidState fluidState = world.getFluidState(blockpos);
if (fluidState.is(FluidTags.WATER) && fluidState.getType()
.getRegistryName()
if (fluidState.is(FluidTags.WATER) && RegisteredObjects.getKeyOrThrow(fluidState.getType())
.getNamespace()
.equals(Create.ID)) {
event.setCancellationResult(InteractionResult.PASS);

View file

@ -4,6 +4,7 @@ import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.IdentityHashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@ -183,6 +184,8 @@ public class FluidNetwork {
}
int flowSpeed = transferSpeed;
Map<IFluidHandler, Integer> accumulatedFill = new IdentityHashMap<>();
for (boolean simulate : Iterate.trueAndFalse) {
FluidAction action = simulate ? FluidAction.SIMULATE : FluidAction.EXECUTE;
@ -211,8 +214,9 @@ public class FluidNetwork {
return;
if (simulate)
flowSpeed = transfer.getAmount();
List<Pair<BlockFace, LazyOptional<IFluidHandler>>> availableOutputs = new ArrayList<>(targets);
while (!availableOutputs.isEmpty() && transfer.getAmount() > 0) {
int dividedTransfer = transfer.getAmount() / availableOutputs.size();
int remainder = transfer.getAmount() % availableOutputs.size();
@ -234,12 +238,22 @@ public class FluidNetwork {
iterator.remove();
continue;
}
int simulatedTransfer = toTransfer;
if (simulate)
simulatedTransfer += accumulatedFill.getOrDefault(targetHandler, 0);
FluidStack divided = transfer.copy();
divided.setAmount(toTransfer);
divided.setAmount(simulatedTransfer);
int fill = targetHandler.fill(divided, action);
if (simulate) {
accumulatedFill.put(targetHandler, Integer.valueOf(fill));
fill -= simulatedTransfer - toTransfer;
}
transfer.setAmount(transfer.getAmount() - fill);
if (fill < toTransfer)
if (fill < simulatedTransfer)
iterator.remove();
}

View file

@ -256,11 +256,30 @@ public abstract class FluidTransportBehaviour extends TileEntityBehaviour {
return AttachmentTypes.RIM;
}
public static enum AttachmentTypes {
NONE, RIM, DRAIN;
public enum AttachmentTypes {
NONE,
CONNECTION(ComponentPartials.CONNECTION),
RIM(ComponentPartials.RIM_CONNECTOR, ComponentPartials.RIM),
PARTIAL_RIM(ComponentPartials.RIM),
DRAIN(ComponentPartials.RIM_CONNECTOR, ComponentPartials.DRAIN),
PARTIAL_DRAIN(ComponentPartials.DRAIN);
public boolean hasModel() {
return this != NONE;
public final ComponentPartials[] partials;
AttachmentTypes(ComponentPartials... partials) {
this.partials = partials;
}
public AttachmentTypes withoutConnector() {
if (this == AttachmentTypes.RIM)
return AttachmentTypes.PARTIAL_RIM;
if (this == AttachmentTypes.DRAIN)
return AttachmentTypes.PARTIAL_DRAIN;
return this;
}
public enum ComponentPartials {
CONNECTION, RIM_CONNECTOR, RIM, DRAIN;
}
}

View file

@ -7,6 +7,7 @@ import java.util.Random;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.fluids.FluidTransportBehaviour.AttachmentTypes;
import com.simibubi.create.content.contraptions.fluids.FluidTransportBehaviour.AttachmentTypes.ComponentPartials;
import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeBlock;
import com.simibubi.create.content.contraptions.relays.elementary.BracketedTileEntityBehaviour;
import com.simibubi.create.foundation.block.connected.BakedModelWrapperWithData;
@ -27,19 +28,9 @@ import net.minecraftforge.client.model.data.ModelProperty;
public class PipeAttachmentModel extends BakedModelWrapperWithData {
private static final ModelProperty<PipeModelData> PIPE_PROPERTY = new ModelProperty<>();
private boolean hideAttachmentConnector;
public static PipeAttachmentModel opaque(BakedModel template) {
return new PipeAttachmentModel(template, false);
}
public static PipeAttachmentModel transparent(BakedModel template) {
return new PipeAttachmentModel(template, true);
}
public PipeAttachmentModel(BakedModel template, boolean hideAttachmentConnector) {
public PipeAttachmentModel(BakedModel template) {
super(template);
this.hideAttachmentConnector = hideAttachmentConnector;
}
@Override
@ -50,7 +41,7 @@ public class PipeAttachmentModel extends BakedModelWrapperWithData {
if (transport != null)
for (Direction d : Iterate.directions)
data.putRim(d, transport.getRenderedRimAttachment(world, pos, state, d));
data.putAttachment(d, transport.getRenderedRimAttachment(world, pos, state, d));
if (bracket != null)
data.putBracket(bracket.getBracket());
@ -63,7 +54,7 @@ public class PipeAttachmentModel extends BakedModelWrapperWithData {
List<BakedQuad> quads = super.getQuads(state, side, rand, data);
if (data.hasProperty(PIPE_PROPERTY)) {
PipeModelData pipeData = data.getData(PIPE_PROPERTY);
quads = side != null && pipeData.hasRim(side) ? new ArrayList<>() : new ArrayList<>(quads);
quads = new ArrayList<>(quads);
addQuads(quads, state, side, rand, data, pipeData);
}
return quads;
@ -74,27 +65,28 @@ public class PipeAttachmentModel extends BakedModelWrapperWithData {
BakedModel bracket = pipeData.getBracket();
if (bracket != null)
quads.addAll(bracket.getQuads(state, side, rand, data));
if (hideAttachmentConnector && side == Direction.UP)
return;
for (Direction d : Iterate.directions)
if (pipeData.hasRim(d))
quads.addAll(AllBlockPartials.PIPE_ATTACHMENTS.get(pipeData.getRim(d))
for (Direction d : Iterate.directions) {
AttachmentTypes type = pipeData.getAttachment(d);
for (ComponentPartials partial : type.partials) {
quads.addAll(AllBlockPartials.PIPE_ATTACHMENTS.get(partial)
.get(d)
.get()
.getQuads(state, side, rand, data));
}
}
if (pipeData.isEncased())
quads.addAll(AllBlockPartials.FLUID_PIPE_CASING.get()
.getQuads(state, side, rand, data));
}
private static class PipeModelData {
AttachmentTypes[] rims;
boolean encased;
BakedModel bracket;
private AttachmentTypes[] attachments;
private boolean encased;
private BakedModel bracket;
public PipeModelData() {
rims = new AttachmentTypes[6];
Arrays.fill(rims, AttachmentTypes.NONE);
attachments = new AttachmentTypes[6];
Arrays.fill(attachments, AttachmentTypes.NONE);
}
public void putBracket(BlockState state) {
@ -109,22 +101,18 @@ public class PipeAttachmentModel extends BakedModelWrapperWithData {
return bracket;
}
public void putRim(Direction face, AttachmentTypes rim) {
rims[face.get3DDataValue()] = rim;
public void putAttachment(Direction face, AttachmentTypes rim) {
attachments[face.get3DDataValue()] = rim;
}
public AttachmentTypes getAttachment(Direction face) {
return attachments[face.get3DDataValue()];
}
public void setEncased(boolean encased) {
this.encased = encased;
}
public boolean hasRim(Direction face) {
return rims[face.get3DDataValue()] != AttachmentTypes.NONE;
}
public AttachmentTypes getRim(Direction face) {
return rims[face.get3DDataValue()];
}
public boolean isEncased() {
return encased;
}

View file

@ -5,14 +5,18 @@ import java.util.Random;
import com.simibubi.create.AllShapes;
import com.simibubi.create.AllTileEntities;
import com.simibubi.create.content.contraptions.base.DirectionalKineticBlock;
import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeBlock;
import com.simibubi.create.content.contraptions.relays.elementary.ICogWheel;
import com.simibubi.create.foundation.block.ITE;
import com.simibubi.create.foundation.block.ProperWaterloggedBlock;
import com.simibubi.create.foundation.utility.Iterate;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.Direction.Axis;
import net.minecraft.network.protocol.game.DebugPackets;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.item.context.UseOnContext;
import net.minecraft.world.level.BlockGetter;
@ -32,7 +36,8 @@ import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape;
import net.minecraft.world.ticks.TickPriority;
public class PumpBlock extends DirectionalKineticBlock implements SimpleWaterloggedBlock, ICogWheel, ITE<PumpTileEntity> {
public class PumpBlock extends DirectionalKineticBlock
implements SimpleWaterloggedBlock, ICogWheel, ITE<PumpTileEntity> {
public PumpBlock(Properties p_i48415_1_) {
super(p_i48415_1_);
@ -96,10 +101,26 @@ public class PumpBlock extends DirectionalKineticBlock implements SimpleWaterlog
@Override
public BlockState getStateForPlacement(BlockPlaceContext context) {
FluidState FluidState = context.getLevel()
.getFluidState(context.getClickedPos());
return super.getStateForPlacement(context).setValue(BlockStateProperties.WATERLOGGED,
Boolean.valueOf(FluidState.getType() == Fluids.WATER));
BlockState toPlace = super.getStateForPlacement(context);
Level level = context.getLevel();
BlockPos pos = context.getClickedPos();
Player player = context.getPlayer();
toPlace = ProperWaterloggedBlock.withWater(level, toPlace, pos);
if (player != null && player.isSteppingCarefully())
return toPlace;
for (Direction d : Iterate.directions) {
BlockPos adjPos = pos.relative(d);
BlockState adjState = level.getBlockState(adjPos);
if (!FluidPipeBlock.canConnectTo(level, adjPos, adjState, d))
continue;
toPlace = toPlace.setValue(FACING, d);
if (context.getClickedFace() == d.getOpposite())
break;
}
return toPlace;
}
public static boolean isPump(BlockState state) {
@ -113,7 +134,7 @@ public class PumpBlock extends DirectionalKineticBlock implements SimpleWaterlog
return;
if (state != oldState)
world.scheduleTick(pos, this, 1, TickPriority.HIGH);
if (isPump(state) && isPump(oldState) && state.getValue(FACING) == oldState.getValue(FACING)
.getOpposite()) {
BlockEntity tileEntity = world.getBlockEntity(pos);

View file

@ -11,10 +11,10 @@ import com.simibubi.create.content.contraptions.itemAssembly.IAssemblyRecipe;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipe;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeParams;
import com.simibubi.create.foundation.fluid.FluidIngredient;
import com.simibubi.create.foundation.utility.Components;
import com.simibubi.create.foundation.utility.Lang;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.level.ItemLike;
import net.minecraft.world.level.Level;
@ -70,7 +70,7 @@ public class FillingRecipe extends ProcessingRecipe<RecipeWrapper> implements IA
List<FluidStack> matchingFluidStacks = fluidIngredients.get(0)
.getMatchingFluidStacks();
if (matchingFluidStacks.size() == 0)
return new TextComponent("Invalid");
return Components.literal("Invalid");
return Lang.translateDirect("recipe.assembly.spout_filling_fluid",
matchingFluidStacks.get(0).getDisplayName().getString());
}

View file

@ -25,12 +25,14 @@ public class HosePulleyFluidHandler implements IFluidHandler {
int diff = resource.getAmount();
int totalAmountAfterFill = diff + internalTank.getFluidAmount();
FluidStack remaining = resource.copy();
boolean deposited = false;
if (predicate.get() && totalAmountAfterFill >= 1000) {
if (filler.tryDeposit(resource.getFluid(), rootPosGetter.get(), action.simulate())) {
drainer.counterpartActed();
remaining.shrink(1000);
diff -= 1000;
deposited = true;
}
}
@ -41,7 +43,7 @@ public class HosePulleyFluidHandler implements IFluidHandler {
return resource.getAmount();
}
return internalTank.fill(remaining, action);
return internalTank.fill(remaining, action) + (deposited ? 1000 : 0);
}
@Override

View file

@ -76,6 +76,8 @@ public class SpoutTileEntity extends SmartTileEntity implements IHaveGoggleInfor
protected ProcessingResult onItemReceived(TransportedItemStack transported,
TransportedItemStackHandlerBehaviour handler) {
if (handler.tileEntity.isVirtual())
return PASS;
if (!FillingBySpout.canItemBeFilled(level, transported.stack))
return PASS;
if (tank.isEmpty())

View file

@ -6,6 +6,7 @@ import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import com.simibubi.create.AllParticleTypes;
import com.simibubi.create.content.contraptions.particle.ICustomParticleData;
import com.simibubi.create.foundation.utility.RegisteredObjects;
import net.minecraft.client.particle.ParticleProvider;
import net.minecraft.core.particles.ParticleOptions;
@ -15,7 +16,6 @@ import net.minecraft.world.level.material.Fluids;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.registries.ForgeRegistries;
public class FluidParticleData implements ParticleOptions, ICustomParticleData<FluidParticleData> {
@ -49,8 +49,7 @@ public class FluidParticleData implements ParticleOptions, ICustomParticleData<F
@Override
public String writeToString() {
return ForgeRegistries.PARTICLE_TYPES.getKey(type) + " " + fluid.getFluid()
.getRegistryName();
return RegisteredObjects.getKeyOrThrow(type) + " " + RegisteredObjects.getKeyOrThrow(fluid.getFluid());
}
public static final Codec<FluidParticleData> CODEC = RecordCodecBuilder.create(i -> i

View file

@ -68,11 +68,13 @@ public class FluidPipeTileEntity extends SmartTileEntity implements ITransformab
TileEntityBehaviour.get(world, offsetPos, FluidTransportBehaviour.TYPE);
if (pipeBehaviour != null)
if (pipeBehaviour.canHaveFlowToward(otherState, direction.getOpposite()))
return AttachmentTypes.NONE;
return AttachmentTypes.CONNECTION;
}
if (attachment == AttachmentTypes.RIM && !FluidPipeBlock.shouldDrawRim(world, pos, state, direction))
return AttachmentTypes.NONE;
return AttachmentTypes.CONNECTION;
if (attachment == AttachmentTypes.NONE && state.getValue(FluidPipeBlock.PROPERTY_BY_DIRECTION.get(direction)))
return AttachmentTypes.CONNECTION;
return attachment;
}

View file

@ -51,7 +51,7 @@ public class StraightPipeTileEntity extends SmartTileEntity {
if (attachment == AttachmentTypes.RIM && state.getBlock() instanceof FluidValveBlock)
return AttachmentTypes.NONE;
if (attachment == AttachmentTypes.RIM && FluidPipeBlock.isPipe(otherState))
return AttachmentTypes.RIM;
return AttachmentTypes.PARTIAL_RIM;
if (axis == otherAxis && axis != null)
return AttachmentTypes.NONE;
@ -59,7 +59,7 @@ public class StraightPipeTileEntity extends SmartTileEntity {
&& FluidValveBlock.getPipeAxis(otherState) == direction.getAxis())
return AttachmentTypes.NONE;
return attachment;
return attachment.withoutConnector();
}
}

View file

@ -5,12 +5,13 @@ import java.util.List;
import com.simibubi.create.AllFluids;
import com.simibubi.create.content.contraptions.fluids.VirtualFluid;
import com.simibubi.create.foundation.utility.Components;
import com.simibubi.create.foundation.utility.NBTHelper;
import com.simibubi.create.foundation.utility.RegisteredObjects;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.effect.MobEffectInstance;
import net.minecraft.world.item.alchemy.Potion;
@ -20,7 +21,6 @@ import net.minecraft.world.level.ItemLike;
import net.minecraft.world.level.material.Fluid;
import net.minecraftforge.fluids.FluidAttributes;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.registries.ForgeRegistries;
public class PotionFluid extends VirtualFluid {
@ -42,7 +42,7 @@ public class PotionFluid extends VirtualFluid {
}
public static FluidStack addPotionToFluidStack(FluidStack fs, Potion potion) {
ResourceLocation resourcelocation = ForgeRegistries.POTIONS.getKey(potion);
ResourceLocation resourcelocation = RegisteredObjects.getKeyOrThrow(potion);
if (potion == Potions.EMPTY) {
fs.removeChildTag("Potion");
return fs;
@ -82,7 +82,7 @@ public class PotionFluid extends VirtualFluid {
@Override
public Component getDisplayName(FluidStack stack) {
return new TranslatableComponent(getTranslationKey(stack));
return Components.translatable(getTranslationKey(stack));
}
@Override

View file

@ -8,14 +8,14 @@ import com.google.common.collect.Lists;
import com.simibubi.create.content.contraptions.fluids.potion.PotionFluid.BottleType;
import com.simibubi.create.foundation.fluid.FluidHelper;
import com.simibubi.create.foundation.fluid.FluidIngredient;
import com.simibubi.create.foundation.utility.Components;
import com.simibubi.create.foundation.utility.NBTHelper;
import com.simibubi.create.foundation.utility.Pair;
import net.minecraft.ChatFormatting;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.util.Tuple;
import net.minecraft.world.effect.MobEffect;
import net.minecraft.world.effect.MobEffectInstance;
@ -105,10 +105,10 @@ public class PotionFluidHandler {
List<MobEffectInstance> list = PotionUtils.getAllEffects(fs.getOrCreateTag());
List<Tuple<String, AttributeModifier>> list1 = Lists.newArrayList();
if (list.isEmpty()) {
tooltip.add((new TranslatableComponent("effect.none")).withStyle(ChatFormatting.GRAY));
tooltip.add((Components.translatable("effect.none")).withStyle(ChatFormatting.GRAY));
} else {
for (MobEffectInstance effectinstance : list) {
TranslatableComponent textcomponent = new TranslatableComponent(effectinstance.getDescriptionId());
MutableComponent textcomponent = Components.translatable(effectinstance.getDescriptionId());
MobEffect effect = effectinstance.getEffect();
Map<Attribute, AttributeModifier> map = effect.getAttributeModifiers();
if (!map.isEmpty()) {
@ -125,7 +125,7 @@ public class PotionFluidHandler {
if (effectinstance.getAmplifier() > 0) {
textcomponent.append(" ")
.append(new TranslatableComponent("potion.potency." + effectinstance.getAmplifier()).getString());
.append(Components.translatable("potion.potency." + effectinstance.getAmplifier()).getString());
}
if (effectinstance.getDuration() > 20) {
@ -140,8 +140,8 @@ public class PotionFluidHandler {
}
if (!list1.isEmpty()) {
tooltip.add(new TextComponent(""));
tooltip.add((new TranslatableComponent("potion.whenDrank")).withStyle(ChatFormatting.DARK_PURPLE));
tooltip.add(Components.immutableEmpty());
tooltip.add((Components.translatable("potion.whenDrank")).withStyle(ChatFormatting.DARK_PURPLE));
for (Tuple<String, AttributeModifier> tuple : list1) {
AttributeModifier attributemodifier2 = tuple.getB();
@ -155,19 +155,19 @@ public class PotionFluidHandler {
}
if (d0 > 0.0D) {
tooltip.add((new TranslatableComponent(
tooltip.add((Components.translatable(
"attribute.modifier.plus." + attributemodifier2.getOperation()
.toValue(),
ItemStack.ATTRIBUTE_MODIFIER_FORMAT.format(d1),
new TranslatableComponent(tuple.getA())))
Components.translatable(tuple.getA())))
.withStyle(ChatFormatting.BLUE));
} else if (d0 < 0.0D) {
d1 = d1 * -1.0D;
tooltip.add((new TranslatableComponent(
tooltip.add((Components.translatable(
"attribute.modifier.take." + attributemodifier2.getOperation()
.toValue(),
ItemStack.ATTRIBUTE_MODIFIER_FORMAT.format(d1),
new TranslatableComponent(tuple.getA())))
Components.translatable(tuple.getA())))
.withStyle(ChatFormatting.RED));
}
}

View file

@ -17,6 +17,7 @@ import com.simibubi.create.foundation.advancement.AdvancementBehaviour;
import com.simibubi.create.foundation.advancement.AllAdvancements;
import com.simibubi.create.foundation.block.BlockStressValues;
import com.simibubi.create.foundation.fluid.FluidHelper;
import com.simibubi.create.foundation.utility.Components;
import com.simibubi.create.foundation.utility.Iterate;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
@ -29,7 +30,6 @@ import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.util.Mth;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
@ -147,8 +147,8 @@ public class BoilerData {
if (!isActive())
return false;
Component indent = new TextComponent(IHaveGoggleInformation.spacing);
Component indent2 = new TextComponent(IHaveGoggleInformation.spacing + " ");
Component indent = Components.literal(IHaveGoggleInformation.spacing);
Component indent2 = Components.literal(IHaveGoggleInformation.spacing + " ");
calcMinMaxForSize(boilerSize);
@ -169,7 +169,7 @@ public class BoilerData {
double totalSU = getEngineEfficiency(boilerSize) * 16 * Math.max(boilerLevel, attachedEngines)
* BlockStressValues.getCapacity(AllBlocks.STEAM_ENGINE.get());
tooltip.add(Lang.empty());
tooltip.add(Components.immutableEmpty());
Lang.translate("tooltip.capacityProvided")
.style(ChatFormatting.GRAY)
@ -234,12 +234,12 @@ public class BoilerData {
}
private MutableComponent blockComponent(int level) {
return new TextComponent(
return Components.literal(
"" + "\u2588".repeat(minValue) + "\u2592".repeat(level - minValue) + "\u2591".repeat(maxValue - level));
}
private MutableComponent barComponent(int level) {
return TextComponent.EMPTY.copy()
return Components.empty()
.append(bars(Math.max(0, minValue - 1), ChatFormatting.DARK_GREEN))
.append(bars(minValue > 0 ? 1 : 0, ChatFormatting.GREEN))
.append(bars(Math.max(0, level - minValue), ChatFormatting.DARK_GREEN))
@ -250,7 +250,7 @@ public class BoilerData {
}
private MutableComponent bars(int level, ChatFormatting format) {
return new TextComponent(Strings.repeat('|', level)).withStyle(format);
return Components.literal(Strings.repeat('|', level)).withStyle(format);
}
public boolean evaluate(FluidTankTileEntity controller) {

View file

@ -1,9 +1,7 @@
package com.simibubi.create.content.contraptions.fluids.tank;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jetbrains.annotations.Nullable;
@ -11,19 +9,31 @@ import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllTags.AllBlockTags;
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock;
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock.HeatLevel;
import com.simibubi.create.foundation.utility.CreateRegistry;
import net.minecraft.core.BlockPos;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.IRegistryDelegate;
public class BoilerHeaters {
private static final Map<IRegistryDelegate<Block>, Heater> BLOCK_HEATERS = new HashMap<>();
private static final CreateRegistry<Block, Heater> BLOCK_HEATERS = new CreateRegistry<>(ForgeRegistries.BLOCKS);
private static final List<HeaterProvider> GLOBAL_HEATERS = new ArrayList<>();
public static void registerHeater(ResourceLocation block, Heater heater) {
BLOCK_HEATERS.register(block, heater);
}
public static void registerHeater(Block block, Heater heater) {
BLOCK_HEATERS.register(block, heater);
}
@Deprecated(forRemoval = true)
public static void registerHeater(IRegistryDelegate<Block> block, Heater heater) {
BLOCK_HEATERS.put(block, heater);
registerHeater(block.name(), heater);
}
public static void registerHeaterProvider(HeaterProvider provider) {
@ -36,7 +46,7 @@ public class BoilerHeaters {
* All other positive values are used as the amount of active heat.
*/
public static float getActiveHeat(Level level, BlockPos pos, BlockState state) {
Heater heater = BLOCK_HEATERS.get(state.getBlock().delegate);
Heater heater = BLOCK_HEATERS.get(state.getBlock());
if (heater != null) {
return heater.getActiveHeat(level, pos, state);
}
@ -52,7 +62,7 @@ public class BoilerHeaters {
}
public static void registerDefaults() {
registerHeater(AllBlocks.BLAZE_BURNER.get().delegate, (level, pos, state) -> {
registerHeater(AllBlocks.BLAZE_BURNER.get(), (level, pos, state) -> {
HeatLevel value = state.getValue(BlazeBurnerBlock.HEAT_LEVEL);
if (value == HeatLevel.NONE) {
return -1;

View file

@ -8,12 +8,12 @@ import com.simibubi.create.AllItems;
import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.gui.AbstractSimiScreen;
import com.simibubi.create.foundation.gui.element.GuiGameElement;
import com.simibubi.create.foundation.utility.Components;
import com.simibubi.create.foundation.utility.Lang;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.FormattedText;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.util.Mth;
import net.minecraft.world.item.ItemStack;
@ -24,26 +24,26 @@ public class GoggleConfigScreen extends AbstractSimiScreen {
private final List<Component> tooltip;
public GoggleConfigScreen() {
Component componentSpacing = new TextComponent(" ");
Component componentSpacing = Components.literal(" ");
tooltip = new ArrayList<>();
tooltip.add(componentSpacing.plainCopy()
.append(Lang.translateDirect("gui.config.overlay1")));
tooltip.add(componentSpacing.plainCopy()
.append(Lang.translateDirect("gui.config.overlay2")
.withStyle(ChatFormatting.GRAY)));
tooltip.add(TextComponent.EMPTY);
tooltip.add(Components.immutableEmpty());
tooltip.add(componentSpacing.plainCopy()
.append(Lang.translateDirect("gui.config.overlay3")));
tooltip.add(componentSpacing.plainCopy()
.append(Lang.translateDirect("gui.config.overlay4")));
tooltip.add(TextComponent.EMPTY);
tooltip.add(Components.immutableEmpty());
tooltip.add(componentSpacing.plainCopy()
.append(Lang.translateDirect("gui.config.overlay5")
.withStyle(ChatFormatting.GRAY)));
tooltip.add(componentSpacing.plainCopy()
.append(Lang.translateDirect("gui.config.overlay6")
.withStyle(ChatFormatting.GRAY)));
tooltip.add(TextComponent.EMPTY);
tooltip.add(Components.immutableEmpty());
tooltip.add(componentSpacing.plainCopy()
.append(Lang.translateDirect("gui.config.overlay7")));
tooltip.add(componentSpacing.plainCopy()

View file

@ -19,6 +19,7 @@ import com.simibubi.create.foundation.gui.Theme;
import com.simibubi.create.foundation.gui.element.GuiGameElement;
import com.simibubi.create.foundation.tileEntity.behaviour.ValueBox;
import com.simibubi.create.foundation.utility.Color;
import com.simibubi.create.foundation.utility.Components;
import com.simibubi.create.foundation.utility.Iterate;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.outliner.Outline;
@ -30,7 +31,6 @@ import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.FormattedText;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.util.Mth;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.GameType;
@ -100,7 +100,7 @@ public class GoggleOverlayRenderer {
if (hasHoveringInformation) {
if (!tooltip.isEmpty())
tooltip.add(TextComponent.EMPTY);
tooltip.add(Components.immutableEmpty());
IHaveHoveringInformation hte = (IHaveHoveringInformation) te;
hoverAddedInformation = hte.addToTooltip(tooltip, mc.player.isShiftKeyDown());
@ -143,11 +143,11 @@ public class GoggleOverlayRenderer {
if (!pistonFound)
return;
if (!tooltip.isEmpty())
tooltip.add(TextComponent.EMPTY);
tooltip.add(Components.immutableEmpty());
tooltip.add(IHaveGoggleInformation.componentSpacing.plainCopy()
.append(Lang.translateDirect("gui.goggles.pole_length"))
.append(new TextComponent(" " + poles)));
.append(Components.literal(" " + poles)));
}
if (tooltip.isEmpty())

View file

@ -3,12 +3,12 @@ package com.simibubi.create.content.contraptions.goggles;
import java.util.List;
import java.util.Optional;
import com.simibubi.create.foundation.utility.Components;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.LangBuilder;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TextComponent;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.IFluidHandler;
@ -27,7 +27,7 @@ public interface IHaveGoggleInformation {
* Use Lang.[...].forGoggles(list)
*/
@Deprecated
Component componentSpacing = new TextComponent(spacing);
Component componentSpacing = Components.literal(spacing);
/**
* this method will be called when looking at a TileEntity that implemented this

View file

@ -12,6 +12,7 @@ import com.simibubi.create.Create;
import com.simibubi.create.content.contraptions.processing.ProcessingOutput;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipe;
import com.simibubi.create.foundation.fluid.FluidIngredient;
import com.simibubi.create.foundation.utility.Components;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.Pair;
@ -19,7 +20,6 @@ import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.Container;
import net.minecraft.world.item.ItemStack;
@ -239,7 +239,7 @@ public class SequencedAssemblyRecipe implements Recipe<RecipeWrapper> {
int length = sequencedAssemblyRecipe.sequence.size();
int step = sequencedAssemblyRecipe.getStep(stack);
int total = length * sequencedAssemblyRecipe.loops;
toolTip.add(new TextComponent(""));
toolTip.add(Components.immutableEmpty());
toolTip.add(Lang.translateDirect("recipe.sequenced_assembly")
.withStyle(ChatFormatting.GRAY));
toolTip.add(Lang.translateDirect("recipe.assembly.progress", step, total)
@ -256,7 +256,7 @@ public class SequencedAssemblyRecipe implements Recipe<RecipeWrapper> {
toolTip.add(Lang.translateDirect("recipe.assembly.next", textComponent)
.withStyle(ChatFormatting.AQUA));
else
toolTip.add(new TextComponent("-> ").append(textComponent)
toolTip.add(Components.literal("-> ").append(textComponent)
.withStyle(ChatFormatting.DARK_AQUA));
}

View file

@ -5,6 +5,7 @@ import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipe;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipeSerializer;
import com.simibubi.create.foundation.utility.RegisteredObjects;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.resources.ResourceLocation;
@ -35,7 +36,7 @@ public class SequencedRecipe<T extends ProcessingRecipe<?>> {
@SuppressWarnings("unchecked")
ProcessingRecipeSerializer<T> serializer = (ProcessingRecipeSerializer<T>) wrapped.getSerializer();
JsonObject json = new JsonObject();
json.addProperty("type", ForgeRegistries.RECIPE_SERIALIZERS.getKey(serializer)
json.addProperty("type", RegisteredObjects.getKeyOrThrow(serializer)
.toString());
serializer.write(json, wrapped);
return json;
@ -62,7 +63,7 @@ public class SequencedRecipe<T extends ProcessingRecipe<?>> {
public void writeToBuffer(FriendlyByteBuf buffer) {
@SuppressWarnings("unchecked")
ProcessingRecipeSerializer<T> serializer = (ProcessingRecipeSerializer<T>) wrapped.getSerializer();
buffer.writeResourceLocation(ForgeRegistries.RECIPE_SERIALIZERS.getKey(serializer));
buffer.writeResourceLocation(RegisteredObjects.getKeyOrThrow(serializer));
buffer.writeResourceLocation(wrapped.getId());
serializer.toNetwork(buffer, wrapped);
}

View file

@ -588,7 +588,7 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor
public static HeatLevel getHeatLevelOf(BlockState state) {
if (state.hasProperty(BlazeBurnerBlock.HEAT_LEVEL))
return state.getValue(BlazeBurnerBlock.HEAT_LEVEL);
return AllTags.AllBlockTags.FAN_HEATERS.matches(state) ? HeatLevel.SMOULDERING : HeatLevel.NONE;
return AllTags.AllBlockTags.PASSIVE_BOILER_HEATERS.matches(state) ? HeatLevel.SMOULDERING : HeatLevel.NONE;
}
public Couple<SmartFluidTankBehaviour> getTanks() {

View file

@ -9,6 +9,7 @@ import com.google.gson.JsonSyntaxException;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.simibubi.create.Create;
import com.simibubi.create.foundation.utility.Pair;
import com.simibubi.create.foundation.utility.RegisteredObjects;
import net.minecraft.nbt.TagParser;
import net.minecraft.network.FriendlyByteBuf;
@ -60,8 +61,8 @@ public class ProcessingOutput {
public JsonElement serialize() {
JsonObject json = new JsonObject();
ResourceLocation resourceLocation = compatDatagenOutput == null ? stack.getItem()
.getRegistryName() : compatDatagenOutput.getFirst();
ResourceLocation resourceLocation = compatDatagenOutput == null ? RegisteredObjects.getKeyOrThrow(stack
.getItem()) : compatDatagenOutput.getFirst();
json.addProperty("item", resourceLocation.toString());
int count = compatDatagenOutput == null ? stack.getCount() : compatDatagenOutput.getSecond();
if (count != 1)

View file

@ -7,6 +7,7 @@ import java.util.Map;
import javax.annotation.ParametersAreNonnullByDefault;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.foundation.utility.RegisteredObjects;
import com.simibubi.create.foundation.utility.VecHelper;
import net.minecraft.MethodsReturnNonnullByDefault;
@ -71,7 +72,7 @@ public class BlazeBurnerBlockItem extends BlockItem {
@Override
public String getDescriptionId() {
return hasCapturedBlaze() ? super.getDescriptionId() : "item.create." + getRegistryName().getPath();
return hasCapturedBlaze() ? super.getDescriptionId() : "item.create." + RegisteredObjects.getKeyOrThrow(this).getPath();
}
@Override
@ -99,7 +100,7 @@ public class BlazeBurnerBlockItem extends BlockItem {
possibleSpawns.add(spawner.nextSpawnData);
}
ResourceLocation blazeId = EntityType.BLAZE.getRegistryName();
ResourceLocation blazeId = RegisteredObjects.getKeyOrThrow(EntityType.BLAZE);
for (SpawnData e : possibleSpawns) {
ResourceLocation spawnerEntityId = new ResourceLocation(e.entityToSpawn()
.getString("id"));

View file

@ -33,52 +33,67 @@ public class BlazeBurnerRenderer extends SafeTileEntityRenderer<BlazeBurnerTileE
public BlazeBurnerRenderer(BlockEntityRendererProvider.Context context) {}
@Override
protected void renderSafe(BlazeBurnerTileEntity te, float partialTicks, PoseStack ms, MultiBufferSource buffer,
protected void renderSafe(BlazeBurnerTileEntity te, float partialTicks, PoseStack ms, MultiBufferSource bufferSource,
int light, int overlay) {
HeatLevel heatLevel = te.getHeatLevelFromBlock();
if (heatLevel == HeatLevel.NONE)
return;
float horizontalAngle = AngleHelper.rad(te.headAngle.getValue(partialTicks));
Level level = te.getLevel();
int hashCode = te.hashCode();
float animation = te.headAnimation.getValue(partialTicks) * .175f;
BlockState blockState = te.getBlockState();
float animation = te.headAnimation.getValue(partialTicks) * .175f;
float horizontalAngle = AngleHelper.rad(te.headAngle.getValue(partialTicks));
boolean canDrawFlame = heatLevel.isAtLeast(HeatLevel.FADING);
boolean drawGoggles = te.goggles;
boolean drawHat = te.hat;
int hashCode = te.hashCode();
renderShared(level, buffer, null, ms, blockState, horizontalAngle, animation, drawGoggles, drawHat, hashCode);
renderShared(ms, null, bufferSource,
level, blockState, heatLevel, animation, horizontalAngle,
canDrawFlame, drawGoggles, drawHat, hashCode);
}
public static void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld,
ContraptionMatrices matrices, MultiBufferSource buffer, LerpedFloat headAngle, boolean conductor) {
ContraptionMatrices matrices, MultiBufferSource bufferSource, LerpedFloat headAngle, boolean conductor) {
BlockState state = context.state;
if (BlazeBurnerBlock.getHeatLevelOf(state) == HeatLevel.KINDLED)
state = state.setValue(BlazeBurnerBlock.HEAT_LEVEL, HeatLevel.FADING);
float value = AngleHelper.rad(headAngle.getValue(AnimationTickHolder.getPartialTicks(context.world)));
renderShared(context.world, buffer, matrices.getModel(), matrices.getViewProjection(), state, value, 0,
context.tileData.contains("Goggles"), conductor, context.hashCode());
HeatLevel heatLevel = BlazeBurnerBlock.getHeatLevelOf(state);
if (heatLevel == HeatLevel.NONE)
return;
if (!heatLevel.isAtLeast(HeatLevel.FADING)) {
heatLevel = HeatLevel.FADING;
}
Level level = context.world;
float horizontalAngle = AngleHelper.rad(headAngle.getValue(AnimationTickHolder.getPartialTicks(level)));
boolean drawGoggles = context.tileData.contains("Goggles");
boolean drawHat = conductor || context.tileData.contains("TrainHat");
int hashCode = context.hashCode();
renderShared(matrices.getViewProjection(), matrices.getModel(), bufferSource,
level, state, heatLevel, 0, horizontalAngle,
false, drawGoggles, drawHat, hashCode);
}
private static void renderShared(Level level, MultiBufferSource buffer, @Nullable PoseStack modelTransform,
PoseStack ms, BlockState blockState, float horizontalAngle, float animation, boolean drawGoggles,
boolean drawHat, int hashCode) {
private static void renderShared(PoseStack ms, @Nullable PoseStack modelTransform, MultiBufferSource bufferSource,
Level level, BlockState blockState, HeatLevel heatLevel, float animation, float horizontalAngle,
boolean canDrawFlame, boolean drawGoggles, boolean drawHat, int hashCode) {
boolean blockAbove = animation > 0.125f;
HeatLevel heatLevel = BlazeBurnerBlock.getHeatLevelOf(blockState);
float time = AnimationTickHolder.getRenderTime(level);
float renderTick = time + (hashCode % 13) * 16f;
float offsetMult = heatLevel.isAtLeast(HeatLevel.FADING) ? 64 : 16;
float offset = Mth.sin((float) ((renderTick / 16f) % (2 * Math.PI))) / offsetMult;
float offset1 = Mth.sin((float) ((renderTick / 16f + Math.PI) % (2 * Math.PI))) / offsetMult;
float offset2 = Mth.sin((float) ((renderTick / 16f + Math.PI / 2) % (2 * Math.PI))) / offsetMult;
float headY = offset - (animation * .75f);
VertexConsumer solid = buffer.getBuffer(RenderType.solid());
VertexConsumer cutout = buffer.getBuffer(RenderType.cutoutMipped());
VertexConsumer solid = bufferSource.getBuffer(RenderType.solid());
VertexConsumer cutout = bufferSource.getBuffer(RenderType.cutoutMipped());
ms.pushPose();
if (modelTransform == null && heatLevel.isAtLeast(HeatLevel.FADING) && blockAbove) {
if (canDrawFlame && blockAbove) {
SpriteShiftEntry spriteShift =
heatLevel == HeatLevel.SEETHING ? AllSpriteShifts.SUPER_BURNER_FLAME : AllSpriteShifts.BURNER_FLAME;
@ -102,68 +117,87 @@ public class BlazeBurnerRenderer extends SafeTileEntityRenderer<BlazeBurnerTileE
uScroll = uScroll - Math.floor(uScroll);
uScroll = uScroll * spriteWidth / 2;
draw(CachedBufferer.partial(AllBlockPartials.BLAZE_BURNER_FLAME, blockState)
.shiftUVScrolling(spriteShift, (float) uScroll, (float) vScroll), horizontalAngle, modelTransform, ms,
cutout);
SuperByteBuffer flameBuffer = CachedBufferer.partial(AllBlockPartials.BLAZE_BURNER_FLAME, blockState);
if (modelTransform != null)
flameBuffer.transform(modelTransform);
flameBuffer.shiftUVScrolling(spriteShift, (float) uScroll, (float) vScroll);
draw(flameBuffer, horizontalAngle, ms, cutout);
}
PartialModel blazeModel = modelTransform != null ? AllBlockPartials.BLAZE_IDLE : AllBlockPartials.BLAZE_INERT;
if (heatLevel.isAtLeast(HeatLevel.SEETHING))
PartialModel blazeModel;
if (heatLevel.isAtLeast(HeatLevel.SEETHING)) {
blazeModel = blockAbove ? AllBlockPartials.BLAZE_SUPER_ACTIVE : AllBlockPartials.BLAZE_SUPER;
else if (heatLevel.isAtLeast(HeatLevel.FADING))
} else if (heatLevel.isAtLeast(HeatLevel.FADING)) {
blazeModel = blockAbove && heatLevel.isAtLeast(HeatLevel.KINDLED) ? AllBlockPartials.BLAZE_ACTIVE
: AllBlockPartials.BLAZE_IDLE;
} else {
blazeModel = AllBlockPartials.BLAZE_INERT;
}
float headY = offset - (animation * .75f);
SuperByteBuffer blazeBuffer = CachedBufferer.partial(blazeModel, blockState);
if (modelTransform != null)
blazeBuffer.transform(modelTransform);
blazeBuffer.translate(0, headY, 0);
draw(blazeBuffer, horizontalAngle, ms, solid);
draw(CachedBufferer.partial(blazeModel, blockState)
.translate(0, headY, 0), horizontalAngle, modelTransform, ms, solid);
if (drawGoggles) {
PartialModel gogglesModel = blazeModel == AllBlockPartials.BLAZE_INERT
? AllBlockPartials.BLAZE_GOGGLES_SMALL : AllBlockPartials.BLAZE_GOGGLES;
if (drawGoggles)
draw(CachedBufferer.partial(blazeModel == AllBlockPartials.BLAZE_INERT
? AllBlockPartials.BLAZE_GOGGLES_SMALL : AllBlockPartials.BLAZE_GOGGLES, blockState)
.translate(0, headY + 8 / 16f, 0), horizontalAngle, modelTransform, ms, solid);
SuperByteBuffer gogglesBuffer = CachedBufferer.partial(gogglesModel, blockState);
if (modelTransform != null)
gogglesBuffer.transform(modelTransform);
gogglesBuffer.translate(0, headY + 8 / 16f, 0);
draw(gogglesBuffer, horizontalAngle, ms, solid);
}
if (drawHat) {
SuperByteBuffer partial = CachedBufferer.partial(AllBlockPartials.TRAIN_HAT, blockState)
.translate(0, headY, 0);
SuperByteBuffer hatBuffer = CachedBufferer.partial(AllBlockPartials.TRAIN_HAT, blockState);
if (modelTransform != null)
hatBuffer.transform(modelTransform);
hatBuffer.translate(0, headY, 0);
if (blazeModel == AllBlockPartials.BLAZE_INERT) {
partial.translateY(0.5f)
hatBuffer.translateY(0.5f)
.centre()
.scale(0.75f)
.unCentre();
} else {
partial.translateY(0.75f);
hatBuffer.translateY(0.75f);
}
if (modelTransform != null)
partial.transform(modelTransform);
partial
hatBuffer
.rotateCentered(Direction.UP, horizontalAngle + Mth.PI)
.translate(0.5f, 0, 0.5f)
.light(LightTexture.FULL_BRIGHT)
.renderInto(ms, solid);
}
if (heatLevel.isAtLeast(HeatLevel.FADING) || modelTransform != null) {
PartialModel rods = heatLevel == HeatLevel.SEETHING ? AllBlockPartials.BLAZE_BURNER_SUPER_RODS
if (heatLevel.isAtLeast(HeatLevel.FADING)) {
PartialModel rodsModel = heatLevel == HeatLevel.SEETHING ? AllBlockPartials.BLAZE_BURNER_SUPER_RODS
: AllBlockPartials.BLAZE_BURNER_RODS;
PartialModel rods2 = heatLevel == HeatLevel.SEETHING ? AllBlockPartials.BLAZE_BURNER_SUPER_RODS_2
PartialModel rodsModel2 = heatLevel == HeatLevel.SEETHING ? AllBlockPartials.BLAZE_BURNER_SUPER_RODS_2
: AllBlockPartials.BLAZE_BURNER_RODS_2;
draw(CachedBufferer.partial(rods, blockState)
.translate(0, offset1 + animation + .125f, 0), 0, modelTransform, ms, solid);
draw(CachedBufferer.partial(rods2, blockState)
.translate(0, offset2 + animation - 3 / 16f, 0), 0, modelTransform, ms, solid);
SuperByteBuffer rodsBuffer = CachedBufferer.partial(rodsModel, blockState);
if (modelTransform != null)
rodsBuffer.transform(modelTransform);
rodsBuffer.translate(0, offset1 + animation + .125f, 0)
.light(LightTexture.FULL_BRIGHT)
.renderInto(ms, solid);
SuperByteBuffer rodsBuffer2 = CachedBufferer.partial(rodsModel2, blockState);
if (modelTransform != null)
rodsBuffer2.transform(modelTransform);
rodsBuffer2.translate(0, offset2 + animation - 3 / 16f, 0)
.light(LightTexture.FULL_BRIGHT)
.renderInto(ms, solid);
}
ms.popPose();
}
private static void draw(SuperByteBuffer blazeBuffer, float horizontalAngle, @Nullable PoseStack modelTransform,
PoseStack ms, VertexConsumer vb) {
if (modelTransform != null)
blazeBuffer.transform(modelTransform);
blazeBuffer.rotateCentered(Direction.UP, horizontalAngle)
private static void draw(SuperByteBuffer buffer, float horizontalAngle, PoseStack ms, VertexConsumer vc) {
buffer.rotateCentered(Direction.UP, horizontalAngle)
.light(LightTexture.FULL_BRIGHT)
.renderInto(ms, vb);
.renderInto(ms, vc);
}
}

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