Merge branch 'mc1.15/dev' into mc1.15/ponder-ui

This commit is contained in:
simibubi 2021-02-19 18:03:34 +01:00
commit b61dc0d562
459 changed files with 14095 additions and 1806 deletions

View file

@ -3,9 +3,11 @@ buildscript {
maven { url = 'https://files.minecraftforge.net/maven' } maven { url = 'https://files.minecraftforge.net/maven' }
jcenter() jcenter()
mavenCentral() mavenCentral()
maven { url='https://dist.creeper.host/Sponge/maven' }
} }
dependencies { dependencies {
classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '3.+', changing: true classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '3.+', changing: true
classpath group: 'org.spongepowered', name: 'mixingradle', version: '0.7-SNAPSHOT'
} }
} }
plugins { plugins {
@ -35,6 +37,9 @@ minecraft {
runs { runs {
client { client {
workingDirectory project.file('run') workingDirectory project.file('run')
// property 'mixin.env.disableRefMap', 'true'
arg '-mixin.config=create.mixins.json'
// jvmArgs '-XX:+UnlockCommercialFeatures'
property 'forge.logging.console.level', 'info' property 'forge.logging.console.level', 'info'
property 'fml.earlyprogresswindow', 'false' property 'fml.earlyprogresswindow', 'false'
mods { mods {
@ -46,6 +51,8 @@ minecraft {
server { server {
workingDirectory project.file('run/server') workingDirectory project.file('run/server')
// property 'mixin.env.disableRefMap', 'true'
arg '-mixin.config=create.mixins.json'
property 'forge.logging.console.level', 'info' property 'forge.logging.console.level', 'info'
mods { mods {
create { create {
@ -98,6 +105,9 @@ repositories {
name = "tterrag maven" name = "tterrag maven"
url = "https://maven.tterrag.com/" url = "https://maven.tterrag.com/"
} }
maven {
url = "https://www.cursemaven.com"
}
} }
configurations { configurations {
@ -116,9 +126,13 @@ dependencies {
// at runtime, use the full JEI jar // at runtime, use the full JEI jar
runtimeOnly fg.deobf("mezz.jei:jei-${minecraft_version}:${jei_version}") runtimeOnly fg.deobf("mezz.jei:jei-${minecraft_version}:${jei_version}")
// implementation fg.deobf("curse.maven:druidcraft-340991:3101903")
// i'll leave this here commented for easier testing // i'll leave this here commented for easier testing
//runtimeOnly fg.deobf("vazkii.arl:AutoRegLib:1.4-35.69") //runtimeOnly fg.deobf("vazkii.arl:AutoRegLib:1.4-35.69")
//runtimeOnly fg.deobf("vazkii.quark:Quark:r2.0-212.984") //runtimeOnly fg.deobf("vazkii.quark:Quark:r2.0-212.984")
annotationProcessor 'org.spongepowered:mixin:0.8:processor'
} }
jar { jar {
@ -131,7 +145,8 @@ jar {
"Implementation-Title": project.name, "Implementation-Title": project.name,
"Implementation-Version": "${version}", "Implementation-Version": "${version}",
"Implementation-Vendor" :"simibubi", "Implementation-Vendor" :"simibubi",
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"),
"MixinConfigs": "create.mixins.json"
]) ])
} }
} }
@ -200,3 +215,9 @@ curseforge {
} }
} }
} }
apply plugin: 'org.spongepowered.mixin'
mixin {
add sourceSets.main, "create.refmap.json"
}

View file

@ -6,7 +6,7 @@ org.gradle.daemon=false
# mod version info # mod version info
mod_version=0.3.1 mod_version=0.3.1
minecraft_version=1.15.2 minecraft_version=1.15.2
forge_version=31.2.31 forge_version=31.2.47
# dependency versions # dependency versions
registrate_version=1.0.0-rc.17 registrate_version=1.0.0-rc.17

View file

@ -401,18 +401,19 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
e3f618c5b622d21880de858678d1802cbf65e615 assets/create/lang/en_ud.json e3f618c5b622d21880de858678d1802cbf65e615 assets/create/lang/en_ud.json
1c2c42b885b5d2b23f452d1550fb6c3a3a7ab952 assets/create/lang/en_us.json 880014dda429e6e2f21e227398d861e4da5e90c6 assets/create/lang/en_us.json
90fb5c8d2b384d93c3bbc2693103be18a0ff3dc7 assets/create/lang/unfinished/de_de.json c07a94266b5ccde4d9e35467943cc512fe4b5896 assets/create/lang/unfinished/de_de.json
3789e356240833be498849723cde53f12553c889 assets/create/lang/unfinished/es_mx.json e5a0e1b67981159c16eb4563736f85310c77f979 assets/create/lang/unfinished/es_es.json
89aa38cb8250cd56dff4ae00d1491aea7e8aea36 assets/create/lang/unfinished/fr_fr.json 4c492fcb95abe9242c3149ba2b08451ba078c223 assets/create/lang/unfinished/es_mx.json
61e46061b0e9487f381c32a6c1004aacdb0be2b1 assets/create/lang/unfinished/it_it.json a9ea43cba7ebf87860d165839c98986b8da17f8e assets/create/lang/unfinished/fr_fr.json
70d3beec87b4e461b02b38feec572fcf92ffad35 assets/create/lang/unfinished/ja_jp.json cc4fe91e45becc807f49b7114d32d44812d0ec42 assets/create/lang/unfinished/it_it.json
d77cefebb91bce27fc098d4e5a81a39c5b3f10de assets/create/lang/unfinished/ko_kr.json 287f5a8985786f1fe4a44a4ff4907902074aa725 assets/create/lang/unfinished/ja_jp.json
6f7f629f4e8597c39f1cb259359e451255b31864 assets/create/lang/unfinished/nl_nl.json 2125c67df82987c0bf66efb0b6c59da916362480 assets/create/lang/unfinished/ko_kr.json
0fd66b2ff7124cff646f32cebcd679d5e16ed805 assets/create/lang/unfinished/pt_br.json 9cfd8839a607ba5230a9716bcda3fae0fc9fd9fd assets/create/lang/unfinished/nl_nl.json
5cf5aae29b48a7066c98dfbb130f58dcca7be5f6 assets/create/lang/unfinished/ru_ru.json d972eac60bf24d8102c013667b3c76291912edb4 assets/create/lang/unfinished/pt_br.json
d1afca478f7ceaa739220873cfdff4f2caa3b3fd assets/create/lang/unfinished/zh_cn.json a552694a6a62274a33cdea255584c3ea3bbc25ef assets/create/lang/unfinished/ru_ru.json
ee8599a8bf1c4fac02dc9501de5d08f58b19f395 assets/create/lang/unfinished/zh_tw.json d4ea1d09bb09cd8fdbf9a9c996ab66e8db290e92 assets/create/lang/unfinished/zh_cn.json
5b453190f3d422b4124b426fe61cc831b89fd2fa assets/create/lang/unfinished/zh_tw.json
846200eb548d3bfa2e77b41039de159b4b6cfb45 assets/create/models/block/acacia_window.json 846200eb548d3bfa2e77b41039de159b4b6cfb45 assets/create/models/block/acacia_window.json
1930fa3a3c98d53dd19e4ee7f55bc27fd47aa281 assets/create/models/block/acacia_window_pane_noside.json 1930fa3a3c98d53dd19e4ee7f55bc27fd47aa281 assets/create/models/block/acacia_window_pane_noside.json
1763ea2c9b981d187f5031ba608f3d5d3be3986a assets/create/models/block/acacia_window_pane_noside_alt.json 1763ea2c9b981d187f5031ba608f3d5d3be3986a assets/create/models/block/acacia_window_pane_noside_alt.json
@ -1586,7 +1587,7 @@ d080b1b25e5bc8baf5aee68691b08c7f12ece3b0 assets/create/models/item/windmill_bear
9f9455ccb5fc9e3cbfce73862b46078346a522a5 assets/create/models/item/zinc_nugget.json 9f9455ccb5fc9e3cbfce73862b46078346a522a5 assets/create/models/item/zinc_nugget.json
b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json
e76041b7ae829fdd7dc0524f6ca4d2f89fca51bb assets/create/sounds.json e76041b7ae829fdd7dc0524f6ca4d2f89fca51bb assets/create/sounds.json
cb9641eaf33211af46daf57241c76733cf371ed2 data/create/advancements/aesthetics.json 5d0cc4c0255dc241e61c173b31ddca70c88d08e4 data/create/advancements/aesthetics.json
187921fa131b06721bfaf63f2623a28c141aae9a data/create/advancements/andesite_alloy.json 187921fa131b06721bfaf63f2623a28c141aae9a data/create/advancements/andesite_alloy.json
0ea2db7173b5be28b289ea7c9a6a0cf5805c60c7 data/create/advancements/andesite_casing.json 0ea2db7173b5be28b289ea7c9a6a0cf5805c60c7 data/create/advancements/andesite_casing.json
356f4855a2a6c65be3fb51d7d1aabf2ca6034d42 data/create/advancements/arm_blaze_burner.json 356f4855a2a6c65be3fb51d7d1aabf2ca6034d42 data/create/advancements/arm_blaze_burner.json
@ -1616,18 +1617,18 @@ d1fbc14303c7327e9fc02e505e7e434591b7f785 data/create/advancements/crushing_wheel
77edd30e3d60b4d492662c673387910f66b5a276 data/create/advancements/dual_extendo_grip.json 77edd30e3d60b4d492662c673387910f66b5a276 data/create/advancements/dual_extendo_grip.json
04eaf829696d735244c0e4798dd3bdeb26e13a32 data/create/advancements/electron_tube.json 04eaf829696d735244c0e4798dd3bdeb26e13a32 data/create/advancements/electron_tube.json
b78fe4e539fef1b3419f2eb4d1db47cb4a201992 data/create/advancements/extendo_grip.json b78fe4e539fef1b3419f2eb4d1db47cb4a201992 data/create/advancements/extendo_grip.json
4dbbf5f39441fdfe0561022ea7bbaa8e1f9733b7 data/create/advancements/fan.json b1699baaadaac7ebce642c09428519d156e21594 data/create/advancements/fan.json
9e2369129a52ffb4c67907ca5e81e342766f7867 data/create/advancements/fan_lava.json 5aa76cba3b40a1c234ffa84a89ecca630990fc0f data/create/advancements/fan_lava.json
acef16596b7ae82aaf853142d69bcea7094b8173 data/create/advancements/fan_smoke.json 716a9816558300a3652ed8d8d568517017813f5c data/create/advancements/fan_smoke.json
36f72396d1b4ac9a89f4a9139fa10ed659f5954a data/create/advancements/fan_water.json a61eb63d02604e88836519f89f74b252a640d485 data/create/advancements/fan_water.json
69e96e926a4d72e59cc6390c25f064166ddb62d2 data/create/advancements/fist_bump.json 69e96e926a4d72e59cc6390c25f064166ddb62d2 data/create/advancements/fist_bump.json
99ee1bf5390b9a4f2a2419c78f259ff5d2ab9ae9 data/create/advancements/flywheel.json 99ee1bf5390b9a4f2a2419c78f259ff5d2ab9ae9 data/create/advancements/flywheel.json
489c58a0508a2a41cc0849dfb933eb5ac96ef364 data/create/advancements/glass_pipe.json 489c58a0508a2a41cc0849dfb933eb5ac96ef364 data/create/advancements/glass_pipe.json
62f3610188f7dbd3900ab305edc2d06282705a38 data/create/advancements/goggles.json 62f3610188f7dbd3900ab305edc2d06282705a38 data/create/advancements/goggles.json
10c8686da9cec2ae30c10f434836ac15a1b88666 data/create/advancements/hose_pulley.json 10c8686da9cec2ae30c10f434836ac15a1b88666 data/create/advancements/hose_pulley.json
d44f4dcc6d0c51b4f347bc0c5c0d97dbb7af6523 data/create/advancements/infinite_chocolate.json 9f642faf92b75a28c564e90be8448b9a4328af5e data/create/advancements/infinite_chocolate.json
db31e7853f9f15ad35e14bfa9925f4eb527f0f01 data/create/advancements/infinite_lava.json a933fa5e7217e2ffe123ae035cfbc9210ba69fd5 data/create/advancements/infinite_lava.json
eb7e3aac431fd16cf643a51e8546c53d6510c81c data/create/advancements/infinite_water.json a8ab0e4ffba358d23f9efaa9f51245b6d490a8be data/create/advancements/infinite_water.json
9beb622c79e9f5ce2397c22222cac0faf272f388 data/create/advancements/integrated_circuit.json 9beb622c79e9f5ce2397c22222cac0faf272f388 data/create/advancements/integrated_circuit.json
316bed3d8985d0a371200967d7edd2936f1b9f94 data/create/advancements/integrated_circuit_eob.json 316bed3d8985d0a371200967d7edd2936f1b9f94 data/create/advancements/integrated_circuit_eob.json
a80eea863bfdc7777b8bade39a81655b2f99e02f data/create/advancements/item_drain.json a80eea863bfdc7777b8bade39a81655b2f99e02f data/create/advancements/item_drain.json
@ -1638,7 +1639,7 @@ a80eea863bfdc7777b8bade39a81655b2f99e02f data/create/advancements/item_drain.jso
218568a4e416c5fa559c55a5c92aa4e93f88b837 data/create/advancements/mechanical_drill.json 218568a4e416c5fa559c55a5c92aa4e93f88b837 data/create/advancements/mechanical_drill.json
6dc84ad2f0512495fe3f01f99d3c547849351e33 data/create/advancements/mechanical_saw.json 6dc84ad2f0512495fe3f01f99d3c547849351e33 data/create/advancements/mechanical_saw.json
3bc549c06dc6d9568f92e1abc9654c9b4c33f035 data/create/advancements/millstone.json 3bc549c06dc6d9568f92e1abc9654c9b4c33f035 data/create/advancements/millstone.json
704c7fc0ed357b1a116ffdc0b6c64fe64e337a5a data/create/advancements/mixer.json 238ac410eb4de16a82ae05cc16fef80e55a4b61b data/create/advancements/mixer.json
325d4cef263ce301b143ee0498fb15afdb2c125b data/create/advancements/musical_arm.json 325d4cef263ce301b143ee0498fb15afdb2c125b data/create/advancements/musical_arm.json
c9c4060ed207226b69fada2d61e01a97d7077eae data/create/advancements/nixie_tube.json c9c4060ed207226b69fada2d61e01a97d7077eae data/create/advancements/nixie_tube.json
9329cb210a954c0de1dcf517e7dff1ece77c19c0 data/create/advancements/overstress_flywheel.json 9329cb210a954c0de1dcf517e7dff1ece77c19c0 data/create/advancements/overstress_flywheel.json

View file

@ -149,8 +149,8 @@
}, },
{ {
"when": { "when": {
"axis": "x", "sticky_north": "true",
"sticky_north": "true" "axis": "x"
}, },
"apply": { "apply": {
"model": "create:block/radial_chassis_side_x_sticky" "model": "create:block/radial_chassis_side_x_sticky"
@ -158,8 +158,8 @@
}, },
{ {
"when": { "when": {
"axis": "y", "sticky_north": "true",
"sticky_north": "true" "axis": "y"
}, },
"apply": { "apply": {
"model": "create:block/radial_chassis_side_y_sticky", "model": "create:block/radial_chassis_side_y_sticky",
@ -168,8 +168,8 @@
}, },
{ {
"when": { "when": {
"axis": "z", "sticky_north": "true",
"sticky_north": "true" "axis": "z"
}, },
"apply": { "apply": {
"model": "create:block/radial_chassis_side_x_sticky", "model": "create:block/radial_chassis_side_x_sticky",
@ -178,8 +178,8 @@
}, },
{ {
"when": { "when": {
"axis": "x", "sticky_north": "false",
"sticky_north": "false" "axis": "x"
}, },
"apply": { "apply": {
"model": "create:block/radial_chassis_side_x" "model": "create:block/radial_chassis_side_x"
@ -187,8 +187,8 @@
}, },
{ {
"when": { "when": {
"axis": "y", "sticky_north": "false",
"sticky_north": "false" "axis": "y"
}, },
"apply": { "apply": {
"model": "create:block/radial_chassis_side_y", "model": "create:block/radial_chassis_side_y",
@ -197,8 +197,8 @@
}, },
{ {
"when": { "when": {
"axis": "z", "sticky_north": "false",
"sticky_north": "false" "axis": "z"
}, },
"apply": { "apply": {
"model": "create:block/radial_chassis_side_x", "model": "create:block/radial_chassis_side_x",

View file

@ -684,6 +684,7 @@
"create.recipe.mechanical_crafting": "Mechanical Crafting", "create.recipe.mechanical_crafting": "Mechanical Crafting",
"create.recipe.automatic_shaped": "Automated Shaped Crafting", "create.recipe.automatic_shaped": "Automated Shaped Crafting",
"create.recipe.block_cutting": "Block Cutting", "create.recipe.block_cutting": "Block Cutting",
"create.recipe.wood_cutting": "Wood Cutting",
"create.recipe.blockzapper_upgrade": "Handheld Blockzapper", "create.recipe.blockzapper_upgrade": "Handheld Blockzapper",
"create.recipe.sandpaper_polishing": "Sandpaper Polishing", "create.recipe.sandpaper_polishing": "Sandpaper Polishing",
"create.recipe.mystery_conversion": "Mysterious Conversion", "create.recipe.mystery_conversion": "Mysterious Conversion",
@ -844,13 +845,19 @@
"create.gui.stockpile_switch.move_to_upper_at": "Move to upper lane at %1$s%%", "create.gui.stockpile_switch.move_to_upper_at": "Move to upper lane at %1$s%%",
"create.gui.sequenced_gearshift.title": "Sequenced Gearshift", "create.gui.sequenced_gearshift.title": "Sequenced Gearshift",
"create.gui.sequenced_gearshift.instruction": "Instruction", "create.gui.sequenced_gearshift.instruction": "Instruction",
"create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "Turn by angle",
"create.gui.sequenced_gearshift.instruction.turn_angle": "Turn", "create.gui.sequenced_gearshift.instruction.turn_angle": "Turn",
"create.gui.sequenced_gearshift.instruction.turn_angle.angle": "Angle", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "Angle",
"create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "Turn to move Piston/Pulley/Gantry",
"create.gui.sequenced_gearshift.instruction.turn_distance": "Piston", "create.gui.sequenced_gearshift.instruction.turn_distance": "Piston",
"create.gui.sequenced_gearshift.instruction.turn_distance.distance": "Distance", "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "Distance",
"create.gui.sequenced_gearshift.instruction.wait": "Wait", "create.gui.sequenced_gearshift.instruction.delay.descriptive": "Timed Delay",
"create.gui.sequenced_gearshift.instruction.wait.duration": "Duration", "create.gui.sequenced_gearshift.instruction.delay": "Delay",
"create.gui.sequenced_gearshift.instruction.delay.duration": "Duration",
"create.gui.sequenced_gearshift.instruction.end.descriptive": "End",
"create.gui.sequenced_gearshift.instruction.end": "End", "create.gui.sequenced_gearshift.instruction.end": "End",
"create.gui.sequenced_gearshift.instruction.await.descriptive": "Await new Redstone Pulse",
"create.gui.sequenced_gearshift.instruction.await": "Await",
"create.gui.sequenced_gearshift.speed": "Speed, Direction", "create.gui.sequenced_gearshift.speed": "Speed, Direction",
"create.gui.sequenced_gearshift.speed.forward": "Input speed, Forwards", "create.gui.sequenced_gearshift.speed.forward": "Input speed, Forwards",
"create.gui.sequenced_gearshift.speed.forward_fast": "Double speed, Forwards", "create.gui.sequenced_gearshift.speed.forward_fast": "Double speed, Forwards",

View file

@ -1,10 +1,10 @@
{ {
"_": "Missing Localizations: 1124", "_": "Missing Localizations: 994",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
"block.create.acacia_window": "Akazienfenster", "block.create.acacia_window": "Akazienholzfenster",
"block.create.acacia_window_pane": "Akazienfensterscheibe", "block.create.acacia_window_pane": "Akazienholzfensterscheibe",
"block.create.adjustable_chain_gearshift": "Verstellbares Kettengetriebe", "block.create.adjustable_chain_gearshift": "Verstellbares Kettengetriebe",
"block.create.adjustable_crate": "Verstellbare Kiste", "block.create.adjustable_crate": "Verstellbare Kiste",
"block.create.adjustable_pulse_repeater": "Verstellbarer Pulsverstärker", "block.create.adjustable_pulse_repeater": "Verstellbarer Pulsverstärker",
@ -26,8 +26,8 @@
"block.create.andesite_tunnel": "Andesittunnel", "block.create.andesite_tunnel": "Andesittunnel",
"block.create.basin": "Behälter", "block.create.basin": "Behälter",
"block.create.belt": "Mechanischer Riemen", "block.create.belt": "Mechanischer Riemen",
"block.create.birch_window": "UNLOCALIZED: Birch Window", "block.create.birch_window": "Birkenholzfenster",
"block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane", "block.create.birch_window_pane": "Birkenholzfensterscheibe",
"block.create.black_sail": "Schwarzes Segel", "block.create.black_sail": "Schwarzes Segel",
"block.create.black_seat": "Schwarzer Sitz", "block.create.black_seat": "Schwarzer Sitz",
"block.create.black_valve_handle": "Schwarzer Ventilgriff", "block.create.black_valve_handle": "Schwarzer Ventilgriff",
@ -56,7 +56,7 @@
"block.create.clockwork_bearing": "Uhrwerk-Lager", "block.create.clockwork_bearing": "Uhrwerk-Lager",
"block.create.clutch": "Kupplung", "block.create.clutch": "Kupplung",
"block.create.cogwheel": "Zahnrad", "block.create.cogwheel": "Zahnrad",
"block.create.content_observer": "Inhalts Beobachter", "block.create.content_observer": "Inhaltsbeobachter",
"block.create.controller_rail": "Steureungsschiene", "block.create.controller_rail": "Steureungsschiene",
"block.create.copper_block": "Kupfer Block", "block.create.copper_block": "Kupfer Block",
"block.create.copper_casing": "Kupferrahmen", "block.create.copper_casing": "Kupferrahmen",
@ -117,128 +117,128 @@
"block.create.fancy_dark_scoria_bricks_slab": "Schicke dunkle Schlackenziegelstufe", "block.create.fancy_dark_scoria_bricks_slab": "Schicke dunkle Schlackenziegelstufe",
"block.create.fancy_dark_scoria_bricks_stairs": "Schicke dunkle Schlackenziegeltreppe", "block.create.fancy_dark_scoria_bricks_stairs": "Schicke dunkle Schlackenziegeltreppe",
"block.create.fancy_dark_scoria_bricks_wall": "Schicke dunkle Schlackenziegelmauer", "block.create.fancy_dark_scoria_bricks_wall": "Schicke dunkle Schlackenziegelmauer",
"block.create.fancy_diorite_bricks": "UNLOCALIZED: Fancy Diorite Bricks", "block.create.fancy_diorite_bricks": "Schöne Dioritziegel",
"block.create.fancy_diorite_bricks_slab": "UNLOCALIZED: Fancy Diorite Bricks Slab", "block.create.fancy_diorite_bricks_slab": "Schöne Dioritziegelstufe",
"block.create.fancy_diorite_bricks_stairs": "UNLOCALIZED: Fancy Diorite Bricks Stairs", "block.create.fancy_diorite_bricks_stairs": "Schöne Dioritziegeltreppe",
"block.create.fancy_diorite_bricks_wall": "UNLOCALIZED: Fancy Diorite Bricks Wall", "block.create.fancy_diorite_bricks_wall": "Schöne Dioritziegelmauer",
"block.create.fancy_dolomite_bricks": "UNLOCALIZED: Fancy Dolomite Bricks", "block.create.fancy_dolomite_bricks": "Schöne Dolomitziegel",
"block.create.fancy_dolomite_bricks_slab": "UNLOCALIZED: Fancy Dolomite Bricks Slab", "block.create.fancy_dolomite_bricks_slab": "Schöne Dolomitziegelstufe",
"block.create.fancy_dolomite_bricks_stairs": "UNLOCALIZED: Fancy Dolomite Bricks Stairs", "block.create.fancy_dolomite_bricks_stairs": "Schöne Dolomitziegeltreppe",
"block.create.fancy_dolomite_bricks_wall": "UNLOCALIZED: Fancy Dolomite Bricks Wall", "block.create.fancy_dolomite_bricks_wall": "Schöne Dolomitziegelmauer",
"block.create.fancy_gabbro_bricks": "UNLOCALIZED: Fancy Gabbro Bricks", "block.create.fancy_gabbro_bricks": "Schöne Gabelsteinziegel",
"block.create.fancy_gabbro_bricks_slab": "UNLOCALIZED: Fancy Gabbro Bricks Slab", "block.create.fancy_gabbro_bricks_slab": "Schöne Gabelsteinziegelstufe",
"block.create.fancy_gabbro_bricks_stairs": "UNLOCALIZED: Fancy Gabbro Bricks Stairs", "block.create.fancy_gabbro_bricks_stairs": "Schöne Gabelsteinziegeltreppe",
"block.create.fancy_gabbro_bricks_wall": "UNLOCALIZED: Fancy Gabbro Bricks Wall", "block.create.fancy_gabbro_bricks_wall": "Schöne Gabelsteinziegelmauer",
"block.create.fancy_granite_bricks": "UNLOCALIZED: Fancy Granite Bricks", "block.create.fancy_granite_bricks": "Schöne Granitziegel",
"block.create.fancy_granite_bricks_slab": "UNLOCALIZED: Fancy Granite Bricks Slab", "block.create.fancy_granite_bricks_slab": "Schöne Granitziegelstufe",
"block.create.fancy_granite_bricks_stairs": "UNLOCALIZED: Fancy Granite Bricks Stairs", "block.create.fancy_granite_bricks_stairs": "Schöne Granitziegeltreppe",
"block.create.fancy_granite_bricks_wall": "UNLOCALIZED: Fancy Granite Bricks Wall", "block.create.fancy_granite_bricks_wall": "Schöne Granitziegelmauer",
"block.create.fancy_limestone_bricks": "UNLOCALIZED: Fancy Limestone Bricks", "block.create.fancy_limestone_bricks": "Schöne Kalksteinziegel",
"block.create.fancy_limestone_bricks_slab": "UNLOCALIZED: Fancy Limestone Bricks Slab", "block.create.fancy_limestone_bricks_slab": "Schöne Kalksteinziegelstufe",
"block.create.fancy_limestone_bricks_stairs": "UNLOCALIZED: Fancy Limestone Bricks Stairs", "block.create.fancy_limestone_bricks_stairs": "Schöne Kalksteinziegeltreppe",
"block.create.fancy_limestone_bricks_wall": "UNLOCALIZED: Fancy Limestone Bricks Wall", "block.create.fancy_limestone_bricks_wall": "Schöne Kalksteinziegelmauer",
"block.create.fancy_scoria_bricks": "UNLOCALIZED: Fancy Scoria Bricks", "block.create.fancy_scoria_bricks": "Schöne Schlackenziegel",
"block.create.fancy_scoria_bricks_slab": "UNLOCALIZED: Fancy Scoria Bricks Slab", "block.create.fancy_scoria_bricks_slab": "Schöne Schlackenziegelstufe",
"block.create.fancy_scoria_bricks_stairs": "UNLOCALIZED: Fancy Scoria Bricks Stairs", "block.create.fancy_scoria_bricks_stairs": "Schöne Schlackenziegeltreppe",
"block.create.fancy_scoria_bricks_wall": "UNLOCALIZED: Fancy Scoria Bricks Wall", "block.create.fancy_scoria_bricks_wall": "Schöne Schlackenziegelmauer",
"block.create.fancy_weathered_limestone_bricks": "UNLOCALIZED: Fancy Weathered Limestone Bricks", "block.create.fancy_weathered_limestone_bricks": "Schöne Verwitterte Kalksteinziegel",
"block.create.fancy_weathered_limestone_bricks_slab": "UNLOCALIZED: Fancy Weathered Limestone Bricks Slab", "block.create.fancy_weathered_limestone_bricks_slab": "Schöne Verwitterte Kalksteinziegelstufe",
"block.create.fancy_weathered_limestone_bricks_stairs": "UNLOCALIZED: Fancy Weathered Limestone Bricks Stairs", "block.create.fancy_weathered_limestone_bricks_stairs": "Schöne Verwitterte Kalksteinziegeltreppe",
"block.create.fancy_weathered_limestone_bricks_wall": "UNLOCALIZED: Fancy Weathered Limestone Bricks Wall", "block.create.fancy_weathered_limestone_bricks_wall": "Schöne Verwitterte Kalksteinziegelmauer",
"block.create.fluid_pipe": "Wasserrohr", "block.create.fluid_pipe": "Flüssigkeitsrohr",
"block.create.fluid_tank": "Wassertank", "block.create.fluid_tank": "Flüssigkeitstank",
"block.create.fluid_valve": "Flüssigkeitsventil", "block.create.fluid_valve": "Flüssigkeitsventil",
"block.create.flywheel": "Schwungrad", "block.create.flywheel": "Schwungrad",
"block.create.framed_glass": "Gerahmtes Glas", "block.create.framed_glass": "Gerahmtes Glas",
"block.create.framed_glass_pane": "Gerahmte Glasscheibe", "block.create.framed_glass_pane": "Gerahmte Glasscheibe",
"block.create.furnace_engine": "UNLOCALIZED: Furnace Engine", "block.create.furnace_engine": "Ofenmotor",
"block.create.gabbro": "Gabbro", "block.create.gabbro": "Gabelstein",
"block.create.gabbro_bricks": "Gabbroziegel", "block.create.gabbro_bricks": "Gabelsteinziegel",
"block.create.gabbro_bricks_slab": "Gabbroziegelstufe", "block.create.gabbro_bricks_slab": "Gabelsteinziegelstufe",
"block.create.gabbro_bricks_stairs": "Gabbroziegeltreppe", "block.create.gabbro_bricks_stairs": "Gabelsteinziegeltreppe",
"block.create.gabbro_bricks_wall": "Gabbroziegelmauer", "block.create.gabbro_bricks_wall": "Gabelsteinziegelmauer",
"block.create.gabbro_cobblestone": "UNLOCALIZED: Gabbro Cobblestone", "block.create.gabbro_cobblestone": "Gabelsteinbruchstein",
"block.create.gabbro_cobblestone_slab": "UNLOCALIZED: Gabbro Cobblestone Slab", "block.create.gabbro_cobblestone_slab": "Gabelsteinbruchstein",
"block.create.gabbro_cobblestone_stairs": "UNLOCALIZED: Gabbro Cobblestone Stairs", "block.create.gabbro_cobblestone_stairs": "Gabelsteinbruchstein",
"block.create.gabbro_cobblestone_wall": "UNLOCALIZED: Gabbro Cobblestone Wall", "block.create.gabbro_cobblestone_wall": "Gabelsteinbruchstein",
"block.create.gabbro_pillar": "UNLOCALIZED: Gabbro Pillar", "block.create.gabbro_pillar": "Gabelsteinsäule",
"block.create.gantry_pinion": "UNLOCALIZED: Gantry Pinion", "block.create.gantry_pinion": "UNLOCALIZED: Gantry Pinion",
"block.create.gantry_shaft": "UNLOCALIZED: Gantry Shaft", "block.create.gantry_shaft": "UNLOCALIZED: Gantry Shaft",
"block.create.gearbox": "Getriebe", "block.create.gearbox": "Getriebe",
"block.create.gearshift": "Gangschaltung", "block.create.gearshift": "Gangschaltung",
"block.create.glass_fluid_pipe": "Glaswasserrohr", "block.create.glass_fluid_pipe": "Glaswasserrohr",
"block.create.granite_bricks": "Granitziegel", "block.create.granite_bricks": "Granitziegel",
"block.create.granite_bricks_slab": "UNLOCALIZED: Granite Bricks Slab", "block.create.granite_bricks_slab": "Granitziegelstufe",
"block.create.granite_bricks_stairs": "UNLOCALIZED: Granite Bricks Stairs", "block.create.granite_bricks_stairs": "Granitziegeltreppe",
"block.create.granite_bricks_wall": "UNLOCALIZED: Granite Bricks Wall", "block.create.granite_bricks_wall": "Granitziegelmauer",
"block.create.granite_cobblestone": "UNLOCALIZED: Granite Cobblestone", "block.create.granite_cobblestone": "Granitbruchstein",
"block.create.granite_cobblestone_slab": "UNLOCALIZED: Granite Cobblestone Slab", "block.create.granite_cobblestone_slab": "Granitbruchsteinstufe",
"block.create.granite_cobblestone_stairs": "UNLOCALIZED: Granite Cobblestone Stairs", "block.create.granite_cobblestone_stairs": "Granitbruchtreppe",
"block.create.granite_cobblestone_wall": "UNLOCALIZED: Granite Cobblestone Wall", "block.create.granite_cobblestone_wall": "Granitbruchsteinmauer",
"block.create.granite_pillar": "UNLOCALIZED: Granite Pillar", "block.create.granite_pillar": "Granitsäule",
"block.create.gray_sail": "UNLOCALIZED: Gray Sail", "block.create.gray_sail": "Graues Segel",
"block.create.gray_seat": "UNLOCALIZED: Gray Seat", "block.create.gray_seat": "Grauer Sitz",
"block.create.gray_valve_handle": "UNLOCALIZED: Gray Valve Handle", "block.create.gray_valve_handle": "Grauer Ventilgriff",
"block.create.green_sail": "UNLOCALIZED: Green Sail", "block.create.green_sail": "Grünes Segel",
"block.create.green_seat": "UNLOCALIZED: Green Seat", "block.create.green_seat": "Grüner Sitz",
"block.create.green_valve_handle": "UNLOCALIZED: Green Valve Handle", "block.create.green_valve_handle": "Grüner Ventilgriff",
"block.create.hand_crank": "UNLOCALIZED: Hand Crank", "block.create.hand_crank": "Handkurbel",
"block.create.honey": "UNLOCALIZED: Honey", "block.create.honey": "Honig",
"block.create.horizontal_framed_glass": "UNLOCALIZED: Horizontal Framed Glass", "block.create.horizontal_framed_glass": "Horizontal Gerahmes Glas",
"block.create.horizontal_framed_glass_pane": "UNLOCALIZED: Horizontal Framed Glass Pane", "block.create.horizontal_framed_glass_pane": "Horizontal Gerahmte Glasscheibe",
"block.create.hose_pulley": "UNLOCALIZED: Hose Pulley", "block.create.hose_pulley": "Umlenkrolle",
"block.create.item_drain": "UNLOCALIZED: Item Drain", "block.create.item_drain": "Abfluss",
"block.create.jungle_window": "UNLOCALIZED: Jungle Window", "block.create.jungle_window": "Tropenholzfenster",
"block.create.jungle_window_pane": "UNLOCALIZED: Jungle Window Pane", "block.create.jungle_window_pane": "Tropenholzfensterscheib",
"block.create.large_cogwheel": "Großes Zahnrad", "block.create.large_cogwheel": "Großes Zahnrad",
"block.create.layered_andesite": "UNLOCALIZED: Layered Andesite", "block.create.layered_andesite": "Geschichteter Andesit",
"block.create.layered_dark_scoria": "UNLOCALIZED: Layered Dark Scoria", "block.create.layered_dark_scoria": "Geschichtete Dunkle Schlacke",
"block.create.layered_diorite": "UNLOCALIZED: Layered Diorite", "block.create.layered_diorite": "Geschichteter Diorit",
"block.create.layered_dolomite": "UNLOCALIZED: Layered Dolomite", "block.create.layered_dolomite": "Geschichteter Dolomit",
"block.create.layered_gabbro": "UNLOCALIZED: Layered Gabbro", "block.create.layered_gabbro": "Geschichteter Gabelstein",
"block.create.layered_granite": "UNLOCALIZED: Layered Granite", "block.create.layered_granite": "Geschichteter Granit",
"block.create.layered_limestone": "UNLOCALIZED: Layered Limestone", "block.create.layered_limestone": "Geschichteter Kalkstein",
"block.create.layered_scoria": "UNLOCALIZED: Layered Scoria", "block.create.layered_scoria": "Geschichtete Schlacke",
"block.create.layered_weathered_limestone": "UNLOCALIZED: Layered Weathered Limestone", "block.create.layered_weathered_limestone": "Geschichteter Verwitterter Kalkstein",
"block.create.light_blue_sail": "UNLOCALIZED: Light Blue Sail", "block.create.light_blue_sail": "Hellblaues Segel",
"block.create.light_blue_seat": "UNLOCALIZED: Light Blue Seat", "block.create.light_blue_seat": "Hellblauer Sitz",
"block.create.light_blue_valve_handle": "UNLOCALIZED: Light Blue Valve Handle", "block.create.light_blue_valve_handle": "Hellblauer Ventilgriff",
"block.create.light_gray_sail": "UNLOCALIZED: Light Gray Sail", "block.create.light_gray_sail": "Hellgraues Segel",
"block.create.light_gray_seat": "UNLOCALIZED: Light Gray Seat", "block.create.light_gray_seat": "Hellgrauer Sitz",
"block.create.light_gray_valve_handle": "UNLOCALIZED: Light Gray Valve Handle", "block.create.light_gray_valve_handle": "Hellgrauer Ventilgriff",
"block.create.lime_sail": "UNLOCALIZED: Lime Sail", "block.create.lime_sail": "Hellgrünes Segel",
"block.create.lime_seat": "UNLOCALIZED: Lime Seat", "block.create.lime_seat": "Hellgrüner Sitz",
"block.create.lime_valve_handle": "UNLOCALIZED: Lime Valve Handle", "block.create.lime_valve_handle": "Hellgrüner Ventilgriff",
"block.create.limesand": "Kalksand", "block.create.limesand": "Kalksand",
"block.create.limestone": "Kalkstein", "block.create.limestone": "Kalkstein",
"block.create.limestone_bricks": "Kalksteinziegel", "block.create.limestone_bricks": "Kalksteinziegel",
"block.create.limestone_bricks_slab": "Kalksteinziegelstufe", "block.create.limestone_bricks_slab": "Kalksteinziegelstufe",
"block.create.limestone_bricks_stairs": "Kalksteinziegeltreppe", "block.create.limestone_bricks_stairs": "Kalksteinziegeltreppe",
"block.create.limestone_bricks_wall": "Kalksteinziegelmauer", "block.create.limestone_bricks_wall": "Kalksteinziegelmauer",
"block.create.limestone_cobblestone": "UNLOCALIZED: Limestone Cobblestone", "block.create.limestone_cobblestone": "Kalkbruchstein",
"block.create.limestone_cobblestone_slab": "UNLOCALIZED: Limestone Cobblestone Slab", "block.create.limestone_cobblestone_slab": "Kalkbruchsteinstufe",
"block.create.limestone_cobblestone_stairs": "UNLOCALIZED: Limestone Cobblestone Stairs", "block.create.limestone_cobblestone_stairs": "Kalkbruchsteintreppe",
"block.create.limestone_cobblestone_wall": "UNLOCALIZED: Limestone Cobblestone Wall", "block.create.limestone_cobblestone_wall": "Kalkbruchsteinmauer",
"block.create.limestone_pillar": "Kalksteinsäule", "block.create.limestone_pillar": "Kalksteinsäule",
"block.create.linear_chassis": "Schubgerüst", "block.create.linear_chassis": "Schubgerüst",
"block.create.lit_blaze_burner": "UNLOCALIZED: Lit Blaze Burner", "block.create.lit_blaze_burner": "Aktiver Lohenbrenner",
"block.create.magenta_sail": "UNLOCALIZED: Magenta Sail", "block.create.magenta_sail": "Magenta Segel",
"block.create.magenta_seat": "UNLOCALIZED: Magenta Seat", "block.create.magenta_seat": "Magenta Sitz",
"block.create.magenta_valve_handle": "UNLOCALIZED: Magenta Valve Handle", "block.create.magenta_valve_handle": "Magenta Ventilgriff",
"block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm", "block.create.mechanical_arm": "Mechanischer Arm",
"block.create.mechanical_bearing": "Mechanisches Lager", "block.create.mechanical_bearing": "Mechanisches Lager",
"block.create.mechanical_crafter": "UNLOCALIZED: Mechanical Crafter", "block.create.mechanical_crafter": "Mechanische Handwerkseinheit",
"block.create.mechanical_drill": "Mechanischer Bohrer", "block.create.mechanical_drill": "Mechanischer Bohrer",
"block.create.mechanical_harvester": "Mechanische Erntemaschine", "block.create.mechanical_harvester": "Mechanische Erntemaschine",
"block.create.mechanical_mixer": "UNLOCALIZED: Mechanical Mixer", "block.create.mechanical_mixer": "Mechanischer Mixer",
"block.create.mechanical_piston": "Mechanischer Kolben", "block.create.mechanical_piston": "Mechanischer Kolben",
"block.create.mechanical_piston_head": "Mechanisches Kolbenende", "block.create.mechanical_piston_head": "Mechanisches Kolbenende",
"block.create.mechanical_plough": "UNLOCALIZED: Mechanical Plough", "block.create.mechanical_plough": "Mechanischer Pflug",
"block.create.mechanical_press": "Mechanische Presse", "block.create.mechanical_press": "Mechanische Presse",
"block.create.mechanical_pump": "UNLOCALIZED: Mechanical Pump", "block.create.mechanical_pump": "Mechanische Pumpe",
"block.create.mechanical_saw": "UNLOCALIZED: Mechanical Saw", "block.create.mechanical_saw": "Mechanische Säge",
"block.create.metal_bracket": "UNLOCALIZED: Metal Bracket", "block.create.metal_bracket": "Metallhalterung",
"block.create.millstone": "UNLOCALIZED: Millstone", "block.create.millstone": "Mahlstein",
"block.create.minecart_anchor": "UNLOCALIZED: Minecart Anchor", "block.create.minecart_anchor": "UNLOCALIZED: Minecart Anchor",
"block.create.mossy_andesite": "UNLOCALIZED: Mossy Andesite", "block.create.mossy_andesite": "UNLOCALIZED: Mossy Andesite",
"block.create.mossy_dark_scoria": "UNLOCALIZED: Mossy Dark Scoria", "block.create.mossy_dark_scoria": "UNLOCALIZED: Mossy Dark Scoria",
@ -305,9 +305,9 @@
"block.create.paved_weathered_limestone_slab": "UNLOCALIZED: Paved Weathered Limestone Slab", "block.create.paved_weathered_limestone_slab": "UNLOCALIZED: Paved Weathered Limestone Slab",
"block.create.paved_weathered_limestone_stairs": "UNLOCALIZED: Paved Weathered Limestone Stairs", "block.create.paved_weathered_limestone_stairs": "UNLOCALIZED: Paved Weathered Limestone Stairs",
"block.create.paved_weathered_limestone_wall": "UNLOCALIZED: Paved Weathered Limestone Wall", "block.create.paved_weathered_limestone_wall": "UNLOCALIZED: Paved Weathered Limestone Wall",
"block.create.pink_sail": "UNLOCALIZED: Pink Sail", "block.create.pink_sail": "Rosa Segel",
"block.create.pink_seat": "UNLOCALIZED: Pink Seat", "block.create.pink_seat": "Rosa Sitz",
"block.create.pink_valve_handle": "UNLOCALIZED: Pink Valve Handle", "block.create.pink_valve_handle": "Rosa Ventilgriff",
"block.create.piston_extension_pole": "Kolben-Pleuelverlängerung", "block.create.piston_extension_pole": "Kolben-Pleuelverlängerung",
"block.create.polished_dark_scoria": "UNLOCALIZED: Polished Dark Scoria", "block.create.polished_dark_scoria": "UNLOCALIZED: Polished Dark Scoria",
"block.create.polished_dark_scoria_slab": "UNLOCALIZED: Polished Dark Scoria Slab", "block.create.polished_dark_scoria_slab": "UNLOCALIZED: Polished Dark Scoria Slab",
@ -317,7 +317,7 @@
"block.create.polished_dolomite_slab": "UNLOCALIZED: Polished Dolomite Slab", "block.create.polished_dolomite_slab": "UNLOCALIZED: Polished Dolomite Slab",
"block.create.polished_dolomite_stairs": "UNLOCALIZED: Polished Dolomite Stairs", "block.create.polished_dolomite_stairs": "UNLOCALIZED: Polished Dolomite Stairs",
"block.create.polished_dolomite_wall": "UNLOCALIZED: Polished Dolomite Wall", "block.create.polished_dolomite_wall": "UNLOCALIZED: Polished Dolomite Wall",
"block.create.polished_gabbro": "Polierter Gabbro", "block.create.polished_gabbro": "Polierter Gabelstein",
"block.create.polished_gabbro_slab": "UNLOCALIZED: Polished Gabbro Slab", "block.create.polished_gabbro_slab": "UNLOCALIZED: Polished Gabbro Slab",
"block.create.polished_gabbro_stairs": "UNLOCALIZED: Polished Gabbro Stairs", "block.create.polished_gabbro_stairs": "UNLOCALIZED: Polished Gabbro Stairs",
"block.create.polished_gabbro_wall": "UNLOCALIZED: Polished Gabbro Wall", "block.create.polished_gabbro_wall": "UNLOCALIZED: Polished Gabbro Wall",
@ -325,7 +325,7 @@
"block.create.polished_limestone_slab": "Polierte Kalksteinstufe", "block.create.polished_limestone_slab": "Polierte Kalksteinstufe",
"block.create.polished_limestone_stairs": "UNLOCALIZED: Polished Limestone Stairs", "block.create.polished_limestone_stairs": "UNLOCALIZED: Polished Limestone Stairs",
"block.create.polished_limestone_wall": "UNLOCALIZED: Polished Limestone Wall", "block.create.polished_limestone_wall": "UNLOCALIZED: Polished Limestone Wall",
"block.create.polished_scoria": "UNLOCALIZED: Polished Scoria", "block.create.polished_scoria": "Polierte Schlacke",
"block.create.polished_scoria_slab": "UNLOCALIZED: Polished Scoria Slab", "block.create.polished_scoria_slab": "UNLOCALIZED: Polished Scoria Slab",
"block.create.polished_scoria_stairs": "UNLOCALIZED: Polished Scoria Stairs", "block.create.polished_scoria_stairs": "UNLOCALIZED: Polished Scoria Stairs",
"block.create.polished_scoria_wall": "UNLOCALIZED: Polished Scoria Wall", "block.create.polished_scoria_wall": "UNLOCALIZED: Polished Scoria Wall",
@ -412,13 +412,13 @@
"entity.create.stationary_contraption": "UNLOCALIZED: Stationary Contraption", "entity.create.stationary_contraption": "UNLOCALIZED: Stationary Contraption",
"entity.create.super_glue": "UNLOCALIZED: Super Glue", "entity.create.super_glue": "UNLOCALIZED: Super Glue",
"fluid.create.milk": "UNLOCALIZED: Milk", "fluid.create.milk": "Milch",
"fluid.create.potion": "UNLOCALIZED: Potion", "fluid.create.potion": "Trank",
"fluid.create.tea": "UNLOCALIZED: Builder's Tea", "fluid.create.tea": "Bauherrentee",
"item.create.andesite_alloy": "UNLOCALIZED: Andesite Alloy", "item.create.andesite_alloy": "UNLOCALIZED: Andesite Alloy",
"item.create.attribute_filter": "UNLOCALIZED: Attribute Filter", "item.create.attribute_filter": "UNLOCALIZED: Attribute Filter",
"item.create.bar_of_chocolate": "UNLOCALIZED: Bar of Chocolate", "item.create.bar_of_chocolate": "Schokoladetafel",
"item.create.belt_connector": "Mechanischer Riemen", "item.create.belt_connector": "Mechanischer Riemen",
"item.create.blaze_cake": "UNLOCALIZED: Blaze Cake", "item.create.blaze_cake": "UNLOCALIZED: Blaze Cake",
"item.create.blaze_cake_base": "UNLOCALIZED: Blaze Cake Base", "item.create.blaze_cake_base": "UNLOCALIZED: Blaze Cake Base",
@ -449,7 +449,7 @@
"item.create.crushed_tin_ore": "UNLOCALIZED: Crushed Tin Ore", "item.create.crushed_tin_ore": "UNLOCALIZED: Crushed Tin Ore",
"item.create.crushed_uranium_ore": "UNLOCALIZED: Crushed Uranium Ore", "item.create.crushed_uranium_ore": "UNLOCALIZED: Crushed Uranium Ore",
"item.create.crushed_zinc_ore": "UNLOCALIZED: Crushed Zinc Ore", "item.create.crushed_zinc_ore": "UNLOCALIZED: Crushed Zinc Ore",
"item.create.deforester": "UNLOCALIZED: Deforester", "item.create.deforester": "Entforster",
"item.create.dough": "Teig", "item.create.dough": "Teig",
"item.create.electron_tube": "UNLOCALIZED: Electron Tube", "item.create.electron_tube": "UNLOCALIZED: Electron Tube",
"item.create.empty_blaze_burner": "UNLOCALIZED: Empty Blaze Burner", "item.create.empty_blaze_burner": "UNLOCALIZED: Empty Blaze Burner",
@ -460,8 +460,8 @@
"item.create.goggles": "UNLOCALIZED: Engineer's Goggles", "item.create.goggles": "UNLOCALIZED: Engineer's Goggles",
"item.create.golden_sheet": "UNLOCALIZED: Golden Sheet", "item.create.golden_sheet": "UNLOCALIZED: Golden Sheet",
"item.create.handheld_blockzapper": "Blockpistole", "item.create.handheld_blockzapper": "Blockpistole",
"item.create.handheld_worldshaper": "UNLOCALIZED: Handheld Worldshaper", "item.create.handheld_worldshaper": "Geländeformer",
"item.create.honey_bucket": "UNLOCALIZED: Honey Bucket", "item.create.honey_bucket": "Honigeimer",
"item.create.integrated_circuit": "UNLOCALIZED: Integrated Circuit", "item.create.integrated_circuit": "UNLOCALIZED: Integrated Circuit",
"item.create.iron_sheet": "Eisenblech", "item.create.iron_sheet": "Eisenblech",
"item.create.lapis_sheet": "UNLOCALIZED: Lapis Sheet", "item.create.lapis_sheet": "UNLOCALIZED: Lapis Sheet",
@ -470,18 +470,18 @@
"item.create.polished_rose_quartz": "UNLOCALIZED: Polished Rose Quartz", "item.create.polished_rose_quartz": "UNLOCALIZED: Polished Rose Quartz",
"item.create.powdered_obsidian": "UNLOCALIZED: Powdered Obsidian", "item.create.powdered_obsidian": "UNLOCALIZED: Powdered Obsidian",
"item.create.propeller": "Propeller", "item.create.propeller": "Propeller",
"item.create.red_sand_paper": "UNLOCALIZED: Red Sand Paper", "item.create.red_sand_paper": "Rotes Schmirgelpapier",
"item.create.refined_radiance": "UNLOCALIZED: Refined Radiance", "item.create.refined_radiance": "UNLOCALIZED: Refined Radiance",
"item.create.rose_quartz": "Rosenquarz", "item.create.rose_quartz": "Rosenquarz",
"item.create.sand_paper": "UNLOCALIZED: Sand Paper", "item.create.sand_paper": "Schmirgelpapier",
"item.create.schematic": "Bauplan", "item.create.schematic": "Bauplan",
"item.create.schematic_and_quill": "Bauplan und Feder", "item.create.schematic_and_quill": "Bauplan und Feder",
"item.create.shadow_steel": "UNLOCALIZED: Shadow Steel", "item.create.shadow_steel": "UNLOCALIZED: Shadow Steel",
"item.create.super_glue": "UNLOCALIZED: Super Glue", "item.create.super_glue": "Superkleber",
"item.create.tree_fertilizer": "Baumdünger", "item.create.tree_fertilizer": "Baumdünger",
"item.create.vertical_gearbox": "UNLOCALIZED: Vertical Gearbox", "item.create.vertical_gearbox": "UNLOCALIZED: Vertical Gearbox",
"item.create.wand_of_symmetry": "Symmetriestab", "item.create.wand_of_symmetry": "Symmetriestab",
"item.create.wheat_flour": "UNLOCALIZED: Wheat Flour", "item.create.wheat_flour": "Weizenmehl",
"item.create.whisk": "UNLOCALIZED: Whisk", "item.create.whisk": "UNLOCALIZED: Whisk",
"item.create.wrench": "Schraubenschlüssel", "item.create.wrench": "Schraubenschlüssel",
"item.create.zinc_ingot": "Zinkbarren", "item.create.zinc_ingot": "Zinkbarren",
@ -654,21 +654,21 @@
"_": "->------------------------] UI & Messages [------------------------<-", "_": "->------------------------] UI & Messages [------------------------<-",
"itemGroup.create.base": "UNLOCALIZED: Create", "itemGroup.create.base": "Create",
"itemGroup.create.palettes": "UNLOCALIZED: Create Palettes", "itemGroup.create.palettes": "Create Paletten",
"death.attack.create.crush": "%1$s stolperte in ein Mahlwerk", "death.attack.create.crush": "%1$s stolperte in ein Mahlwerk",
"death.attack.create.fan_fire": "%1$s hat heiße Luft eingeatmet", "death.attack.create.fan_fire": "%1$s hat heiße Luft eingeatmet",
"death.attack.create.fan_lava": "%1$s wurde von Lava verweht", "death.attack.create.fan_lava": "%1$s wurde von Lava verweht",
"death.attack.create.mechanical_drill": "%1$s wurde von einem Bohrer durchlöchert", "death.attack.create.mechanical_drill": "%1$s wurde von einem Bohrer durchlöchert",
"death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by a Mechanical Saw", "death.attack.create.mechanical_saw": "%1$s wurde zersägt",
"death.attack.create.cuckoo_clock_explosion": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", "death.attack.create.cuckoo_clock_explosion": "%1$s wurde durch eine falsche Kuckucksuhr gesprengt",
"create.block.deployer.damage_source_name": "UNLOCALIZED: a rogue Deployer", "create.block.deployer.damage_source_name": "einem Finger",
"create.block.cart_assembler.invalid": "UNLOCALIZED: Place your Cart Assembler on a rail block", "create.block.cart_assembler.invalid": "UNLOCALIZED: Place your Cart Assembler on a rail block",
"create.recipe.crushing": "Mahlen", "create.recipe.crushing": "Mahlen (Mahlwerk)",
"create.recipe.milling": "UNLOCALIZED: Milling", "create.recipe.milling": "Mahlen (Mahlstein)",
"create.recipe.fan_washing": "UNLOCALIZED: Bulk Washing", "create.recipe.fan_washing": "UNLOCALIZED: Bulk Washing",
"create.recipe.fan_washing.fan": "UNLOCALIZED: Fan behind Flowing Water", "create.recipe.fan_washing.fan": "UNLOCALIZED: Fan behind Flowing Water",
"create.recipe.fan_smoking": "UNLOCALIZED: Bulk Smoking", "create.recipe.fan_smoking": "UNLOCALIZED: Bulk Smoking",
@ -676,24 +676,25 @@
"create.recipe.fan_blasting": "UNLOCALIZED: Bulk Blasting", "create.recipe.fan_blasting": "UNLOCALIZED: Bulk Blasting",
"create.recipe.fan_blasting.fan": "UNLOCALIZED: Fan behind Lava", "create.recipe.fan_blasting.fan": "UNLOCALIZED: Fan behind Lava",
"create.recipe.pressing": "Mechanische Presse", "create.recipe.pressing": "Mechanische Presse",
"create.recipe.mixing": "UNLOCALIZED: Mixing", "create.recipe.mixing": "Mixen",
"create.recipe.automatic_shapeless": "UNLOCALIZED: Automated Shapeless Crafting", "create.recipe.automatic_shapeless": "UNLOCALIZED: Automated Shapeless Crafting",
"create.recipe.automatic_brewing": "UNLOCALIZED: Automated Brewing", "create.recipe.automatic_brewing": "UNLOCALIZED: Automated Brewing",
"create.recipe.packing": "UNLOCALIZED: Compacting", "create.recipe.packing": "UNLOCALIZED: Compacting",
"create.recipe.automatic_packing": "UNLOCALIZED: Automated Packing", "create.recipe.automatic_packing": "UNLOCALIZED: Automated Packing",
"create.recipe.sawing": "UNLOCALIZED: Sawing", "create.recipe.sawing": "Sägen",
"create.recipe.mechanical_crafting": "UNLOCALIZED: Mechanical Crafting", "create.recipe.mechanical_crafting": "UNLOCALIZED: Mechanical Crafting",
"create.recipe.automatic_shaped": "UNLOCALIZED: Automated Shaped Crafting", "create.recipe.automatic_shaped": "UNLOCALIZED: Automated Shaped Crafting",
"create.recipe.block_cutting": "UNLOCALIZED: Block Cutting", "create.recipe.block_cutting": "UNLOCALIZED: Block Cutting",
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
"create.recipe.blockzapper_upgrade": "Blockpistole", "create.recipe.blockzapper_upgrade": "Blockpistole",
"create.recipe.sandpaper_polishing": "UNLOCALIZED: Sandpaper Polishing", "create.recipe.sandpaper_polishing": "Schleifen",
"create.recipe.mystery_conversion": "UNLOCALIZED: Mysterious Conversion", "create.recipe.mystery_conversion": "UNLOCALIZED: Mysterious Conversion",
"create.recipe.spout_filling": "UNLOCALIZED: Filling by Spout", "create.recipe.spout_filling": "UNLOCALIZED: Filling by Spout",
"create.recipe.draining": "UNLOCALIZED: Item Draining", "create.recipe.draining": "UNLOCALIZED: Item Draining",
"create.recipe.processing.chance": "Chance: %1$s%%", "create.recipe.processing.chance": "Chance: %1$s%%",
"create.recipe.heat_requirement.none": "UNLOCALIZED: No Heating Required", "create.recipe.heat_requirement.none": "Keine Hitze benötigt",
"create.recipe.heat_requirement.heated": "UNLOCALIZED: Heated", "create.recipe.heat_requirement.heated": "Wenig Hitze benötigt",
"create.recipe.heat_requirement.superheated": "UNLOCALIZED: Super-Heated", "create.recipe.heat_requirement.superheated": "Viel Hitze benötigt",
"create.generic.range": "Reichweite", "create.generic.range": "Reichweite",
"create.generic.radius": "Radius", "create.generic.radius": "Radius",
@ -705,12 +706,12 @@
"create.generic.unit.ticks": "Ticks", "create.generic.unit.ticks": "Ticks",
"create.generic.unit.seconds": "Sekunden", "create.generic.unit.seconds": "Sekunden",
"create.generic.unit.minutes": "Minuten", "create.generic.unit.minutes": "Minuten",
"create.generic.unit.rpm": "UNLOCALIZED: RPM", "create.generic.unit.rpm": "RPM",
"create.generic.unit.stress": "UNLOCALIZED: su", "create.generic.unit.stress": "su",
"create.generic.unit.degrees": "UNLOCALIZED: °", "create.generic.unit.degrees": "°",
"create.generic.unit.millibuckets": "UNLOCALIZED: %1$smB", "create.generic.unit.millibuckets": "%1$smB",
"create.generic.clockwise": "UNLOCALIZED: Clockwise", "create.generic.clockwise": "Uhrzeigersinn",
"create.generic.counter_clockwise": "UNLOCALIZED: Counter-Clockwise", "create.generic.counter_clockwise": "Gegen-Uhrzeigersinn",
"create.action.scroll": "Wechseln", "create.action.scroll": "Wechseln",
"create.action.confirm": "Bestätigen", "create.action.confirm": "Bestätigen",
@ -782,7 +783,7 @@
"create.blockzapper.component.retriever": "Empfänger", "create.blockzapper.component.retriever": "Empfänger",
"create.blockzapper.component.scope": "Fernrohr", "create.blockzapper.component.scope": "Fernrohr",
"create.blockzapper.componentTier.none": "Nichts", "create.blockzapper.componentTier.none": "Nichts",
"create.blockzapper.componentTier.brass": "UNLOCALIZED: Brass", "create.blockzapper.componentTier.brass": "Messing",
"create.blockzapper.componentTier.chromatic": "UNLOCALIZED: Chromatic", "create.blockzapper.componentTier.chromatic": "UNLOCALIZED: Chromatic",
"create.blockzapper.leftClickToSet": "Linksklick auf einen Block zum Auswählen", "create.blockzapper.leftClickToSet": "Linksklick auf einen Block zum Auswählen",
"create.blockzapper.empty": "Keine Blöcke übrig!", "create.blockzapper.empty": "Keine Blöcke übrig!",
@ -811,8 +812,8 @@
"create.contraptions.clockwork.hour_first_24": "UNLOCALIZED: 24-Hour hand first", "create.contraptions.clockwork.hour_first_24": "UNLOCALIZED: 24-Hour hand first",
"create.logistics.filter": "Filter", "create.logistics.filter": "Filter",
"create.logistics.recipe_filter": "UNLOCALIZED: Recipe Filter", "create.logistics.recipe_filter": "Rezeptfilter",
"create.logistics.fluid_filter": "UNLOCALIZED: Fluid Filter", "create.logistics.fluid_filter": "Flüssigkeitsfilter",
"create.logistics.firstFrequency": "Freq. #1", "create.logistics.firstFrequency": "Freq. #1",
"create.logistics.secondFrequency": "Freq. #2", "create.logistics.secondFrequency": "Freq. #2",
"create.logistics.filter.apply": "UNLOCALIZED: Applied filter to %1$s.", "create.logistics.filter.apply": "UNLOCALIZED: Applied filter to %1$s.",
@ -837,7 +838,7 @@
"create.gui.stressometer.no_rotation": "UNLOCALIZED: No Rotation", "create.gui.stressometer.no_rotation": "UNLOCALIZED: No Rotation",
"create.gui.contraptions.not_fast_enough": "UNLOCALIZED: It appears that this %1$s is _not_ rotating with _enough_ _speed_.", "create.gui.contraptions.not_fast_enough": "UNLOCALIZED: It appears that this %1$s is _not_ rotating with _enough_ _speed_.",
"create.gui.contraptions.network_overstressed": "UNLOCALIZED: It appears that this contraption is _overstressed_. Add more sources or _slow_ _down_ the components with a high _stress_ _impact_.", "create.gui.contraptions.network_overstressed": "UNLOCALIZED: It appears that this contraption is _overstressed_. Add more sources or _slow_ _down_ the components with a high _stress_ _impact_.",
"create.gui.adjustable_crate.title": "adjustable_crate", "create.gui.adjustable_crate.title": "UNLOCALIZED: Adjustable Crate",
"create.gui.adjustable_crate.storageSpace": "Lagerraum", "create.gui.adjustable_crate.storageSpace": "Lagerraum",
"create.gui.stockpile_switch.title": "Vorratssensor", "create.gui.stockpile_switch.title": "Vorratssensor",
"create.gui.stockpile_switch.invert_signal": "UNLOCALIZED: Invert Signal", "create.gui.stockpile_switch.invert_signal": "UNLOCALIZED: Invert Signal",
@ -845,13 +846,19 @@
"create.gui.stockpile_switch.move_to_upper_at": "UNLOCALIZED: Move to upper lane at %1$s%%", "create.gui.stockpile_switch.move_to_upper_at": "UNLOCALIZED: Move to upper lane at %1$s%%",
"create.gui.sequenced_gearshift.title": "UNLOCALIZED: Sequenced Gearshift", "create.gui.sequenced_gearshift.title": "UNLOCALIZED: Sequenced Gearshift",
"create.gui.sequenced_gearshift.instruction": "UNLOCALIZED: Instruction", "create.gui.sequenced_gearshift.instruction": "UNLOCALIZED: Instruction",
"create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "UNLOCALIZED: Turn by angle",
"create.gui.sequenced_gearshift.instruction.turn_angle": "UNLOCALIZED: Turn", "create.gui.sequenced_gearshift.instruction.turn_angle": "UNLOCALIZED: Turn",
"create.gui.sequenced_gearshift.instruction.turn_angle.angle": "UNLOCALIZED: Angle", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "UNLOCALIZED: Angle",
"create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "UNLOCALIZED: Turn to move Piston/Pulley/Gantry",
"create.gui.sequenced_gearshift.instruction.turn_distance": "UNLOCALIZED: Piston", "create.gui.sequenced_gearshift.instruction.turn_distance": "UNLOCALIZED: Piston",
"create.gui.sequenced_gearshift.instruction.turn_distance.distance": "UNLOCALIZED: Distance", "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "UNLOCALIZED: Distance",
"create.gui.sequenced_gearshift.instruction.wait": "UNLOCALIZED: Wait", "create.gui.sequenced_gearshift.instruction.delay.descriptive": "UNLOCALIZED: Timed Delay",
"create.gui.sequenced_gearshift.instruction.wait.duration": "UNLOCALIZED: Duration", "create.gui.sequenced_gearshift.instruction.delay": "UNLOCALIZED: Delay",
"create.gui.sequenced_gearshift.instruction.delay.duration": "UNLOCALIZED: Duration",
"create.gui.sequenced_gearshift.instruction.end.descriptive": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.end": "UNLOCALIZED: End", "create.gui.sequenced_gearshift.instruction.end": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.await.descriptive": "UNLOCALIZED: Await new Redstone Pulse",
"create.gui.sequenced_gearshift.instruction.await": "UNLOCALIZED: Await",
"create.gui.sequenced_gearshift.speed": "UNLOCALIZED: Speed, Direction", "create.gui.sequenced_gearshift.speed": "UNLOCALIZED: Speed, Direction",
"create.gui.sequenced_gearshift.speed.forward": "UNLOCALIZED: Input speed, Forwards", "create.gui.sequenced_gearshift.speed.forward": "UNLOCALIZED: Input speed, Forwards",
"create.gui.sequenced_gearshift.speed.forward_fast": "UNLOCALIZED: Double speed, Forwards", "create.gui.sequenced_gearshift.speed.forward_fast": "UNLOCALIZED: Double speed, Forwards",
@ -863,7 +870,7 @@
"create.schematicAndQuill.secondPos": "Zweite Position festgelegt.", "create.schematicAndQuill.secondPos": "Zweite Position festgelegt.",
"create.schematicAndQuill.noTarget": "Halte [Strg] zur Auswahl von Luft.", "create.schematicAndQuill.noTarget": "Halte [Strg] zur Auswahl von Luft.",
"create.schematicAndQuill.abort": "Auswahl zurückgesetzt.", "create.schematicAndQuill.abort": "Auswahl zurückgesetzt.",
"create.schematicAndQuill.title": "UNLOCALIZED: Schematic Name:", "create.schematicAndQuill.title": "Bauplanname:",
"create.schematicAndQuill.convert": "UNLOCALIZED: Save and Deploy Immediately", "create.schematicAndQuill.convert": "UNLOCALIZED: Save and Deploy Immediately",
"create.schematicAndQuill.fallbackName": "Mein Bauplan", "create.schematicAndQuill.fallbackName": "Mein Bauplan",
"create.schematicAndQuill.saved": "Gespeichert als %1$s", "create.schematicAndQuill.saved": "Gespeichert als %1$s",
@ -1781,8 +1788,8 @@
"item.create.crafter_slot_cover.tooltip": "UNLOCALIZED: SLOT COVER", "item.create.crafter_slot_cover.tooltip": "UNLOCALIZED: SLOT COVER",
"item.create.crafter_slot_cover.tooltip.summary": "UNLOCALIZED: Used to mark a _Mechanical Crafter_ as an empty slot in a recipe. Crafters do not necessarily have to form a full square grid. This is useful when there are recipes where _ingredients are diagonal_ to each other.", "item.create.crafter_slot_cover.tooltip.summary": "UNLOCALIZED: Used to mark a _Mechanical Crafter_ as an empty slot in a recipe. Crafters do not necessarily have to form a full square grid. This is useful when there are recipes where _ingredients are diagonal_ to each other.",
"create.tooltip.wip": "UNLOCALIZED: WIP", "create.tooltip.wip": "WIP",
"create.tooltip.workInProgress": "UNLOCALIZED: Work in progress!", "create.tooltip.workInProgress": "Work in progress!",
"create.tooltip.randomWipDescription0": "UNLOCALIZED: Please keep this item away from children.", "create.tooltip.randomWipDescription0": "UNLOCALIZED: Please keep this item away from children.",
"create.tooltip.randomWipDescription1": "UNLOCALIZED: A baby panda dies every time you use this item. Every. Time.", "create.tooltip.randomWipDescription1": "UNLOCALIZED: A baby panda dies every time you use this item. Every. Time.",
"create.tooltip.randomWipDescription2": "UNLOCALIZED: Use at your own risk.", "create.tooltip.randomWipDescription2": "UNLOCALIZED: Use at your own risk.",
@ -1818,6 +1825,8 @@
"create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...", "create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...",
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles", "create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles",
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction", "create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction",
"create.ponder.brass_hand.scene_6.birbs_interesting": "UNLOCALIZED: More birbs = More interesting",
"create.ponder.brass_hand.scene_6.poi": "UNLOCALIZED: Point of Interest",
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs", "create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs",
"_": "Thank you for translating Create!" "_": "Thank you for translating Create!"

File diff suppressed because it is too large Load diff

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 915", "_": "Missing Localizations: 924",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -685,6 +685,7 @@
"create.recipe.mechanical_crafting": "UNLOCALIZED: Mechanical Crafting", "create.recipe.mechanical_crafting": "UNLOCALIZED: Mechanical Crafting",
"create.recipe.automatic_shaped": "UNLOCALIZED: Automated Shaped Crafting", "create.recipe.automatic_shaped": "UNLOCALIZED: Automated Shaped Crafting",
"create.recipe.block_cutting": "UNLOCALIZED: Block Cutting", "create.recipe.block_cutting": "UNLOCALIZED: Block Cutting",
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
"create.recipe.blockzapper_upgrade": "UNLOCALIZED: Handheld Blockzapper", "create.recipe.blockzapper_upgrade": "UNLOCALIZED: Handheld Blockzapper",
"create.recipe.sandpaper_polishing": "UNLOCALIZED: Sandpaper Polishing", "create.recipe.sandpaper_polishing": "UNLOCALIZED: Sandpaper Polishing",
"create.recipe.mystery_conversion": "UNLOCALIZED: Mysterious Conversion", "create.recipe.mystery_conversion": "UNLOCALIZED: Mysterious Conversion",
@ -845,13 +846,19 @@
"create.gui.stockpile_switch.move_to_upper_at": "UNLOCALIZED: Move to upper lane at %1$s%%", "create.gui.stockpile_switch.move_to_upper_at": "UNLOCALIZED: Move to upper lane at %1$s%%",
"create.gui.sequenced_gearshift.title": "UNLOCALIZED: Sequenced Gearshift", "create.gui.sequenced_gearshift.title": "UNLOCALIZED: Sequenced Gearshift",
"create.gui.sequenced_gearshift.instruction": "UNLOCALIZED: Instruction", "create.gui.sequenced_gearshift.instruction": "UNLOCALIZED: Instruction",
"create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "UNLOCALIZED: Turn by angle",
"create.gui.sequenced_gearshift.instruction.turn_angle": "UNLOCALIZED: Turn", "create.gui.sequenced_gearshift.instruction.turn_angle": "UNLOCALIZED: Turn",
"create.gui.sequenced_gearshift.instruction.turn_angle.angle": "UNLOCALIZED: Angle", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "UNLOCALIZED: Angle",
"create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "UNLOCALIZED: Turn to move Piston/Pulley/Gantry",
"create.gui.sequenced_gearshift.instruction.turn_distance": "UNLOCALIZED: Piston", "create.gui.sequenced_gearshift.instruction.turn_distance": "UNLOCALIZED: Piston",
"create.gui.sequenced_gearshift.instruction.turn_distance.distance": "UNLOCALIZED: Distance", "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "UNLOCALIZED: Distance",
"create.gui.sequenced_gearshift.instruction.wait": "UNLOCALIZED: Wait", "create.gui.sequenced_gearshift.instruction.delay.descriptive": "UNLOCALIZED: Timed Delay",
"create.gui.sequenced_gearshift.instruction.wait.duration": "UNLOCALIZED: Duration", "create.gui.sequenced_gearshift.instruction.delay": "UNLOCALIZED: Delay",
"create.gui.sequenced_gearshift.instruction.delay.duration": "UNLOCALIZED: Duration",
"create.gui.sequenced_gearshift.instruction.end.descriptive": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.end": "UNLOCALIZED: End", "create.gui.sequenced_gearshift.instruction.end": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.await.descriptive": "UNLOCALIZED: Await new Redstone Pulse",
"create.gui.sequenced_gearshift.instruction.await": "UNLOCALIZED: Await",
"create.gui.sequenced_gearshift.speed": "UNLOCALIZED: Speed, Direction", "create.gui.sequenced_gearshift.speed": "UNLOCALIZED: Speed, Direction",
"create.gui.sequenced_gearshift.speed.forward": "UNLOCALIZED: Input speed, Forwards", "create.gui.sequenced_gearshift.speed.forward": "UNLOCALIZED: Input speed, Forwards",
"create.gui.sequenced_gearshift.speed.forward_fast": "UNLOCALIZED: Double speed, Forwards", "create.gui.sequenced_gearshift.speed.forward_fast": "UNLOCALIZED: Double speed, Forwards",
@ -1818,6 +1825,8 @@
"create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...", "create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...",
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles", "create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles",
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction", "create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction",
"create.ponder.brass_hand.scene_6.birbs_interesting": "UNLOCALIZED: More birbs = More interesting",
"create.ponder.brass_hand.scene_6.poi": "UNLOCALIZED: Point of Interest",
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs", "create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs",
"_": "Thank you for translating Create!" "_": "Thank you for translating Create!"

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 695", "_": "Missing Localizations: 706",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -685,6 +685,7 @@
"create.recipe.mechanical_crafting": "Fabrication mécanique", "create.recipe.mechanical_crafting": "Fabrication mécanique",
"create.recipe.automatic_shaped": "UNLOCALIZED: Automated Shaped Crafting", "create.recipe.automatic_shaped": "UNLOCALIZED: Automated Shaped Crafting",
"create.recipe.block_cutting": "Coupe de bloc", "create.recipe.block_cutting": "Coupe de bloc",
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
"create.recipe.blockzapper_upgrade": "Blockzappeur portable", "create.recipe.blockzapper_upgrade": "Blockzappeur portable",
"create.recipe.sandpaper_polishing": "Polissage au papier de verre", "create.recipe.sandpaper_polishing": "Polissage au papier de verre",
"create.recipe.mystery_conversion": "Métamorphose chromatique", "create.recipe.mystery_conversion": "Métamorphose chromatique",
@ -845,13 +846,19 @@
"create.gui.stockpile_switch.move_to_upper_at": "Bouger sur la ligne de haut à %1$s%%", "create.gui.stockpile_switch.move_to_upper_at": "Bouger sur la ligne de haut à %1$s%%",
"create.gui.sequenced_gearshift.title": "Décaleur de rotation séquencé", "create.gui.sequenced_gearshift.title": "Décaleur de rotation séquencé",
"create.gui.sequenced_gearshift.instruction": "Instructions", "create.gui.sequenced_gearshift.instruction": "Instructions",
"create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "UNLOCALIZED: Turn by angle",
"create.gui.sequenced_gearshift.instruction.turn_angle": "Tourner", "create.gui.sequenced_gearshift.instruction.turn_angle": "Tourner",
"create.gui.sequenced_gearshift.instruction.turn_angle.angle": "Angle", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "Angle",
"create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "UNLOCALIZED: Turn to move Piston/Pulley/Gantry",
"create.gui.sequenced_gearshift.instruction.turn_distance": "Piston", "create.gui.sequenced_gearshift.instruction.turn_distance": "Piston",
"create.gui.sequenced_gearshift.instruction.turn_distance.distance": "Distance", "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "Distance",
"create.gui.sequenced_gearshift.instruction.wait": "Attente", "create.gui.sequenced_gearshift.instruction.delay.descriptive": "UNLOCALIZED: Timed Delay",
"create.gui.sequenced_gearshift.instruction.wait.duration": "Durée", "create.gui.sequenced_gearshift.instruction.delay": "UNLOCALIZED: Delay",
"create.gui.sequenced_gearshift.instruction.delay.duration": "UNLOCALIZED: Duration",
"create.gui.sequenced_gearshift.instruction.end.descriptive": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.end": "Fin", "create.gui.sequenced_gearshift.instruction.end": "Fin",
"create.gui.sequenced_gearshift.instruction.await.descriptive": "UNLOCALIZED: Await new Redstone Pulse",
"create.gui.sequenced_gearshift.instruction.await": "UNLOCALIZED: Await",
"create.gui.sequenced_gearshift.speed": "Vitesse, direction", "create.gui.sequenced_gearshift.speed": "Vitesse, direction",
"create.gui.sequenced_gearshift.speed.forward": "Vitesse d'entrée, normal", "create.gui.sequenced_gearshift.speed.forward": "Vitesse d'entrée, normal",
"create.gui.sequenced_gearshift.speed.forward_fast": "Vitesse double, normal", "create.gui.sequenced_gearshift.speed.forward_fast": "Vitesse double, normal",
@ -1818,6 +1825,8 @@
"create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...", "create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...",
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles", "create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles",
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction", "create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction",
"create.ponder.brass_hand.scene_6.birbs_interesting": "UNLOCALIZED: More birbs = More interesting",
"create.ponder.brass_hand.scene_6.poi": "UNLOCALIZED: Point of Interest",
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs", "create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs",
"_": "Thank you for translating Create!" "_": "Thank you for translating Create!"

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 32", "_": "Missing Localizations: 41",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -162,8 +162,8 @@
"block.create.gabbro_cobblestone_stairs": "Scalini di pietrisco di gabbro", "block.create.gabbro_cobblestone_stairs": "Scalini di pietrisco di gabbro",
"block.create.gabbro_cobblestone_wall": "Muretto di pietrisco di gabbro", "block.create.gabbro_cobblestone_wall": "Muretto di pietrisco di gabbro",
"block.create.gabbro_pillar": "Pilastro di gabbro", "block.create.gabbro_pillar": "Pilastro di gabbro",
"block.create.gantry_pinion": "UNLOCALIZED: Gantry Pinion", "block.create.gantry_pinion": "Pignone a portale",
"block.create.gantry_shaft": "UNLOCALIZED: Gantry Shaft", "block.create.gantry_shaft": "Albero a portale",
"block.create.gearbox": "Riduttore", "block.create.gearbox": "Riduttore",
"block.create.gearshift": "Cambio", "block.create.gearshift": "Cambio",
"block.create.glass_fluid_pipe": "Tubo per fluidi con vetrata", "block.create.glass_fluid_pipe": "Tubo per fluidi con vetrata",
@ -685,6 +685,7 @@
"create.recipe.mechanical_crafting": "Costruzione meccanica", "create.recipe.mechanical_crafting": "Costruzione meccanica",
"create.recipe.automatic_shaped": "Costruzione con forma automatizzata", "create.recipe.automatic_shaped": "Costruzione con forma automatizzata",
"create.recipe.block_cutting": "Taglio di blocchi", "create.recipe.block_cutting": "Taglio di blocchi",
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
"create.recipe.blockzapper_upgrade": "Zapper di blocchi portatile", "create.recipe.blockzapper_upgrade": "Zapper di blocchi portatile",
"create.recipe.sandpaper_polishing": "Levigamento da carta vetrata", "create.recipe.sandpaper_polishing": "Levigamento da carta vetrata",
"create.recipe.mystery_conversion": "Metamorfosi cromatica", "create.recipe.mystery_conversion": "Metamorfosi cromatica",
@ -845,13 +846,19 @@
"create.gui.stockpile_switch.move_to_upper_at": "Muovi su al %1$s%%", "create.gui.stockpile_switch.move_to_upper_at": "Muovi su al %1$s%%",
"create.gui.sequenced_gearshift.title": "Cambio sequenziale", "create.gui.sequenced_gearshift.title": "Cambio sequenziale",
"create.gui.sequenced_gearshift.instruction": "Istruzione", "create.gui.sequenced_gearshift.instruction": "Istruzione",
"create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "UNLOCALIZED: Turn by angle",
"create.gui.sequenced_gearshift.instruction.turn_angle": "Gira", "create.gui.sequenced_gearshift.instruction.turn_angle": "Gira",
"create.gui.sequenced_gearshift.instruction.turn_angle.angle": "Angolo", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "Angolo",
"create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "UNLOCALIZED: Turn to move Piston/Pulley/Gantry",
"create.gui.sequenced_gearshift.instruction.turn_distance": "Pistone", "create.gui.sequenced_gearshift.instruction.turn_distance": "Pistone",
"create.gui.sequenced_gearshift.instruction.turn_distance.distance": "Distanza", "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "Distanza",
"create.gui.sequenced_gearshift.instruction.wait": "Aspetta", "create.gui.sequenced_gearshift.instruction.delay.descriptive": "UNLOCALIZED: Timed Delay",
"create.gui.sequenced_gearshift.instruction.wait.duration": "Durata", "create.gui.sequenced_gearshift.instruction.delay": "UNLOCALIZED: Delay",
"create.gui.sequenced_gearshift.instruction.delay.duration": "UNLOCALIZED: Duration",
"create.gui.sequenced_gearshift.instruction.end.descriptive": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.end": "Fine", "create.gui.sequenced_gearshift.instruction.end": "Fine",
"create.gui.sequenced_gearshift.instruction.await.descriptive": "UNLOCALIZED: Await new Redstone Pulse",
"create.gui.sequenced_gearshift.instruction.await": "UNLOCALIZED: Await",
"create.gui.sequenced_gearshift.speed": "Velocità, direzione", "create.gui.sequenced_gearshift.speed": "Velocità, direzione",
"create.gui.sequenced_gearshift.speed.forward": "Velocità di ingresso, avanti", "create.gui.sequenced_gearshift.speed.forward": "Velocità di ingresso, avanti",
"create.gui.sequenced_gearshift.speed.forward_fast": "Doppia velocità, avanti", "create.gui.sequenced_gearshift.speed.forward_fast": "Doppia velocità, avanti",
@ -1373,7 +1380,7 @@
"item.create.schematic_and_quill.tooltip.condition1": "Passo 1", "item.create.schematic_and_quill.tooltip.condition1": "Passo 1",
"item.create.schematic_and_quill.tooltip.behaviour1": "Seleziona due punti d'angolo usando il clic destro.", "item.create.schematic_and_quill.tooltip.behaviour1": "Seleziona due punti d'angolo usando il clic destro.",
"item.create.schematic_and_quill.tooltip.condition2": "Passo 2", "item.create.schematic_and_quill.tooltip.condition2": "Passo 2",
"item.create.schematic_and_quill.tooltip.behaviour2": "Premi _Ctrl_ e _scorri_ sui volti per regolare le dimensioni. Clic destro di nuovo per salvare.", "item.create.schematic_and_quill.tooltip.behaviour2": "Premi _Ctrl_ e _scorri_ sulle facciate per regolare le dimensioni. Clic destro di nuovo per salvare.",
"item.create.schematic_and_quill.tooltip.control1": "Clic-Destro", "item.create.schematic_and_quill.tooltip.control1": "Clic-Destro",
"item.create.schematic_and_quill.tooltip.action1": "Seleziona un punto d'angolo / conferma il salvataggio.", "item.create.schematic_and_quill.tooltip.action1": "Seleziona un punto d'angolo / conferma il salvataggio.",
"item.create.schematic_and_quill.tooltip.control2": "Ctrl premuto", "item.create.schematic_and_quill.tooltip.control2": "Ctrl premuto",
@ -1818,6 +1825,8 @@
"create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...", "create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...",
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles", "create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles",
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction", "create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction",
"create.ponder.brass_hand.scene_6.birbs_interesting": "UNLOCALIZED: More birbs = More interesting",
"create.ponder.brass_hand.scene_6.poi": "UNLOCALIZED: Point of Interest",
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs", "create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs",
"_": "Thank you for translating Create!" "_": "Thank you for translating Create!"

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 41", "_": "Missing Localizations: 48",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -149,8 +149,8 @@
"block.create.fluid_tank": "液体タンク", "block.create.fluid_tank": "液体タンク",
"block.create.fluid_valve": "液体バルブ", "block.create.fluid_valve": "液体バルブ",
"block.create.flywheel": "勢車", "block.create.flywheel": "勢車",
"block.create.framed_glass": "大きなガラス窓", "block.create.framed_glass": "ガラス窓",
"block.create.framed_glass_pane": "大きなガラス窓板", "block.create.framed_glass_pane": "ガラス窓板",
"block.create.furnace_engine": "かまどエンジン", "block.create.furnace_engine": "かまどエンジン",
"block.create.gabbro": "斑れい岩", "block.create.gabbro": "斑れい岩",
"block.create.gabbro_bricks": "斑れい岩レンガ", "block.create.gabbro_bricks": "斑れい岩レンガ",
@ -162,8 +162,8 @@
"block.create.gabbro_cobblestone_stairs": "斑れい岩の丸石の階段", "block.create.gabbro_cobblestone_stairs": "斑れい岩の丸石の階段",
"block.create.gabbro_cobblestone_wall": "斑れい岩の丸石の壁", "block.create.gabbro_cobblestone_wall": "斑れい岩の丸石の壁",
"block.create.gabbro_pillar": "斑れい岩の柱", "block.create.gabbro_pillar": "斑れい岩の柱",
"block.create.gantry_pinion": "UNLOCALIZED: Gantry Pinion", "block.create.gantry_pinion": "ガントリーピニオン",
"block.create.gantry_shaft": "UNLOCALIZED: Gantry Shaft", "block.create.gantry_shaft": "ガントリーシャフト",
"block.create.gearbox": "ギアボックス", "block.create.gearbox": "ギアボックス",
"block.create.gearshift": "ギアシフト", "block.create.gearshift": "ギアシフト",
"block.create.glass_fluid_pipe": "ガラスの液体パイプ", "block.create.glass_fluid_pipe": "ガラスの液体パイプ",
@ -372,13 +372,13 @@
"block.create.shaft": "シャフト", "block.create.shaft": "シャフト",
"block.create.smart_chute": "スマートシュート", "block.create.smart_chute": "スマートシュート",
"block.create.smart_fluid_pipe": "スマート液体パイプ", "block.create.smart_fluid_pipe": "スマート液体パイプ",
"block.create.speedometer": "スピードメーター", "block.create.speedometer": "速度メーター",
"block.create.spout": "アイテム注液口", "block.create.spout": "アイテム注液口",
"block.create.spruce_window": "マツの窓", "block.create.spruce_window": "マツの窓",
"block.create.spruce_window_pane": "マツの窓パネル", "block.create.spruce_window_pane": "マツの窓パネル",
"block.create.sticky_mechanical_piston": "粘着メカニカルピストン", "block.create.sticky_mechanical_piston": "粘着メカニカルピストン",
"block.create.stockpile_switch": "在庫スイッチ", "block.create.stockpile_switch": "在庫スイッチ",
"block.create.stressometer": "ストレスメーター", "block.create.stressometer": "応力メーター",
"block.create.tiled_glass": "タイルガラス", "block.create.tiled_glass": "タイルガラス",
"block.create.tiled_glass_pane": "タイルガラス板", "block.create.tiled_glass_pane": "タイルガラス板",
"block.create.turntable": "ターンテーブル", "block.create.turntable": "ターンテーブル",
@ -407,7 +407,7 @@
"block.create.zinc_ore": "亜鉛鉱石", "block.create.zinc_ore": "亜鉛鉱石",
"entity.create.contraption": "からくり", "entity.create.contraption": "からくり",
"entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption", "entity.create.gantry_contraption": "ガントリーからくり",
"entity.create.seat": "シート", "entity.create.seat": "シート",
"entity.create.stationary_contraption": "付設からくり", "entity.create.stationary_contraption": "付設からくり",
"entity.create.super_glue": "接着剤", "entity.create.super_glue": "接着剤",
@ -527,9 +527,9 @@
"advancement.create.goggles": "応力をこの目で", "advancement.create.goggles": "応力をこの目で",
"advancement.create.goggles.desc": "機械からより多くの情報を手に入れるために、エンジニアのゴーグルを作る", "advancement.create.goggles.desc": "機械からより多くの情報を手に入れるために、エンジニアのゴーグルを作る",
"advancement.create.speedometer": "正確な速度は?", "advancement.create.speedometer": "正確な速度は?",
"advancement.create.speedometer.desc": "動作中のスピードメーターをゴーグルで見て、正確な値を読み取る", "advancement.create.speedometer.desc": "動作中の速度メーターをゴーグルで見て、正確な値を読み取る",
"advancement.create.stressometer": "正確な応力は?", "advancement.create.stressometer": "正確な応力は?",
"advancement.create.stressometer.desc": "動作中のストレスメーターをゴーグルを通して見て、正確な値を読み取る", "advancement.create.stressometer.desc": "動作中の応力メーターをゴーグルを通して見て、正確な値を読み取る",
"advancement.create.aesthetics": "装飾ブーム!", "advancement.create.aesthetics": "装飾ブーム!",
"advancement.create.aesthetics.desc": "シャフト、パイプ、歯車に腕木や腕金を取り付ける", "advancement.create.aesthetics.desc": "シャフト、パイプ、歯車に腕木や腕金を取り付ける",
"advancement.create.reinforced": "補強ブーム!", "advancement.create.reinforced": "補強ブーム!",
@ -591,7 +591,7 @@
"advancement.create.pipe_spill": "漏れてる!", "advancement.create.pipe_spill": "漏れてる!",
"advancement.create.pipe_spill.desc": "パイプの端を露出させて液体が吹き出しているところを見る", "advancement.create.pipe_spill.desc": "パイプの端を露出させて液体が吹き出しているところを見る",
"advancement.create.hose_pulley": "工業排水", "advancement.create.hose_pulley": "工業排水",
"advancement.create.hose_pulley.desc": "ホースプーリーを下げて、液体の出や吸引を見る", "advancement.create.hose_pulley.desc": "ホースプーリーを下げて、液体の出や吸引を見る",
"advancement.create.infinite_water": "海の水ぜんぶ抜く大作戦", "advancement.create.infinite_water": "海の水ぜんぶ抜く大作戦",
"advancement.create.infinite_water.desc": "無限と言えるほどの大量の水を吸引する", "advancement.create.infinite_water.desc": "無限と言えるほどの大量の水を吸引する",
"advancement.create.infinite_lava": "星の核ぜんぶ抜く大作戦", "advancement.create.infinite_lava": "星の核ぜんぶ抜く大作戦",
@ -602,7 +602,7 @@
"advancement.create.crafter.desc": "メカニカルクラフターを設置して、回転力を与える", "advancement.create.crafter.desc": "メカニカルクラフターを設置して、回転力を与える",
"advancement.create.clockwork_bearing": "時計仕掛け", "advancement.create.clockwork_bearing": "時計仕掛け",
"advancement.create.clockwork_bearing.desc": "時計仕掛けのベアリングの上に構造物を組み立てる", "advancement.create.clockwork_bearing.desc": "時計仕掛けのベアリングの上に構造物を組み立てる",
"advancement.create.nixie_tube": "派手な看板", "advancement.create.nixie_tube": "イカした看板",
"advancement.create.nixie_tube.desc": "ニキシー管を手に入れて、設置する", "advancement.create.nixie_tube.desc": "ニキシー管を手に入れて、設置する",
"advancement.create.deployer": "突く、置く、殴る!", "advancement.create.deployer": "突く、置く、殴る!",
"advancement.create.deployer.desc": "自分の手と全く同じ動きをするデプロイヤーを設置して、稼働させる", "advancement.create.deployer.desc": "自分の手と全く同じ動きをするデプロイヤーを設置して、稼働させる",
@ -610,7 +610,7 @@
"advancement.create.speed_controller.desc": "究極の伝動機、回転速度コントローラーを設置する", "advancement.create.speed_controller.desc": "究極の伝動機、回転速度コントローラーを設置する",
"advancement.create.flywheel": "工場の心臓部", "advancement.create.flywheel": "工場の心臓部",
"advancement.create.flywheel.desc": "かまどエンジンを勢車に繋ぐ", "advancement.create.flywheel.desc": "かまどエンジンを勢車に繋ぐ",
"advancement.create.overstress_flywheel": "レベル応力", "advancement.create.overstress_flywheel": "ハイレベル応力",
"advancement.create.overstress_flywheel.desc": "かまどエンジンに超過応力をかける", "advancement.create.overstress_flywheel.desc": "かまどエンジンに超過応力をかける",
"advancement.create.integrated_circuit": "複素数の計算", "advancement.create.integrated_circuit": "複素数の計算",
"advancement.create.integrated_circuit.desc": "集積回路を組み立てる", "advancement.create.integrated_circuit.desc": "集積回路を組み立てる",
@ -680,11 +680,12 @@
"create.recipe.automatic_shapeless": "自動不定形クラフト", "create.recipe.automatic_shapeless": "自動不定形クラフト",
"create.recipe.automatic_brewing": "自動醸造", "create.recipe.automatic_brewing": "自動醸造",
"create.recipe.packing": "圧縮", "create.recipe.packing": "圧縮",
"create.recipe.automatic_packing": "自動包装", "create.recipe.automatic_packing": "自動圧縮クラフト",
"create.recipe.sawing": "製材", "create.recipe.sawing": "製材",
"create.recipe.mechanical_crafting": "メカニカルクラフト", "create.recipe.mechanical_crafting": "メカニカルクラフト",
"create.recipe.automatic_shaped": "自動定形クラフト", "create.recipe.automatic_shaped": "自動定形クラフト",
"create.recipe.block_cutting": "自動石切", "create.recipe.block_cutting": "自動石切",
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
"create.recipe.blockzapper_upgrade": "携帯型ブロックザッパー", "create.recipe.blockzapper_upgrade": "携帯型ブロックザッパー",
"create.recipe.sandpaper_polishing": "紙やすりでの研磨", "create.recipe.sandpaper_polishing": "紙やすりでの研磨",
"create.recipe.mystery_conversion": "色彩変態", "create.recipe.mystery_conversion": "色彩変態",
@ -836,7 +837,7 @@
"create.gui.stressometer.overstressed": "超過応力", "create.gui.stressometer.overstressed": "超過応力",
"create.gui.stressometer.no_rotation": "回転なし", "create.gui.stressometer.no_rotation": "回転なし",
"create.gui.contraptions.not_fast_enough": "この %1$s は_十分な_回転を_していない_ようです。", "create.gui.contraptions.not_fast_enough": "この %1$s は_十分な_回転を_していない_ようです。",
"create.gui.contraptions.network_overstressed": "この仕掛けは_超過応力_のようです。さらに原動機を追加するか、_応力_の影響が大きい機械のスピードを_下げて_ください。", "create.gui.contraptions.network_overstressed": "この仕掛けは_超過応力_のようです。さらに原動機を追加するか、_応力_の影響が大きい機械の速度を_下げて_ください。",
"create.gui.adjustable_crate.title": "可変クレート", "create.gui.adjustable_crate.title": "可変クレート",
"create.gui.adjustable_crate.storageSpace": "収納スペース", "create.gui.adjustable_crate.storageSpace": "収納スペース",
"create.gui.stockpile_switch.title": "在庫スイッチ", "create.gui.stockpile_switch.title": "在庫スイッチ",
@ -845,13 +846,19 @@
"create.gui.stockpile_switch.move_to_upper_at": "動作の上限は%1$s%%", "create.gui.stockpile_switch.move_to_upper_at": "動作の上限は%1$s%%",
"create.gui.sequenced_gearshift.title": "シーケンスギアシフト", "create.gui.sequenced_gearshift.title": "シーケンスギアシフト",
"create.gui.sequenced_gearshift.instruction": "命令", "create.gui.sequenced_gearshift.instruction": "命令",
"create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "UNLOCALIZED: Turn by angle",
"create.gui.sequenced_gearshift.instruction.turn_angle": "回転", "create.gui.sequenced_gearshift.instruction.turn_angle": "回転",
"create.gui.sequenced_gearshift.instruction.turn_angle.angle": "角度", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "角度",
"create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "UNLOCALIZED: Turn to move Piston/Pulley/Gantry",
"create.gui.sequenced_gearshift.instruction.turn_distance": "ピストン", "create.gui.sequenced_gearshift.instruction.turn_distance": "ピストン",
"create.gui.sequenced_gearshift.instruction.turn_distance.distance": "距離", "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "距離",
"create.gui.sequenced_gearshift.instruction.wait": "待機", "create.gui.sequenced_gearshift.instruction.delay.descriptive": "UNLOCALIZED: Timed Delay",
"create.gui.sequenced_gearshift.instruction.wait.duration": "期間", "create.gui.sequenced_gearshift.instruction.delay": "UNLOCALIZED: Delay",
"create.gui.sequenced_gearshift.instruction.delay.duration": "UNLOCALIZED: Duration",
"create.gui.sequenced_gearshift.instruction.end.descriptive": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.end": "終了", "create.gui.sequenced_gearshift.instruction.end": "終了",
"create.gui.sequenced_gearshift.instruction.await.descriptive": "UNLOCALIZED: Await new Redstone Pulse",
"create.gui.sequenced_gearshift.instruction.await": "UNLOCALIZED: Await",
"create.gui.sequenced_gearshift.speed": "速度, 方向", "create.gui.sequenced_gearshift.speed": "速度, 方向",
"create.gui.sequenced_gearshift.speed.forward": "入力速度, 正転", "create.gui.sequenced_gearshift.speed.forward": "入力速度, 正転",
"create.gui.sequenced_gearshift.speed.forward_fast": "倍速, 正転", "create.gui.sequenced_gearshift.speed.forward_fast": "倍速, 正転",
@ -967,9 +974,9 @@
"create.materialChecklist.blocksNotLoaded": "*免責事項*\n\n素材チェックリストは関連するチャンクがロードされていないため、不正確な場合があります。", "create.materialChecklist.blocksNotLoaded": "*免責事項*\n\n素材チェックリストは関連するチャンクがロードされていないため、不正確な場合があります。",
"create.gui.filter.deny_list": "ブラックリスト", "create.gui.filter.deny_list": "ブラックリスト",
"create.gui.filter.deny_list.description": "上記のいずれにも一致しない場合、アイテムは通り抜けます。 空のブラックリストはすべてを受け入れます。", "create.gui.filter.deny_list.description": "上記のいずれにも一致しない場合、アイテムは通り抜けます。空のブラックリストはすべてを受け入れます。",
"create.gui.filter.allow_list": "ホワイトリスト", "create.gui.filter.allow_list": "ホワイトリスト",
"create.gui.filter.allow_list.description": "上記のいずれかに一致した場合、アイテムは通り抜けます。 空のホワイトリストはすべてを拒否します。", "create.gui.filter.allow_list.description": "上記のいずれかに一致した場合、アイテムは通り抜けます。空のホワイトリストはすべてを拒否します。",
"create.gui.filter.respect_data": "データを重視", "create.gui.filter.respect_data": "データを重視",
"create.gui.filter.respect_data.description": "アイテムは、耐久性、エンチャント、その他の属性も一致する場合にのみ一致します。", "create.gui.filter.respect_data.description": "アイテムは、耐久性、エンチャント、その他の属性も一致する場合にのみ一致します。",
"create.gui.filter.ignore_data": "データを無視", "create.gui.filter.ignore_data": "データを無視",
@ -1036,7 +1043,7 @@
"create.gui.attribute_filter.selected_attributes": "選択された属性:", "create.gui.attribute_filter.selected_attributes": "選択された属性:",
"create.gui.attribute_filter.add_attribute": "属性をリストに追加する", "create.gui.attribute_filter.add_attribute": "属性をリストに追加する",
"create.gui.attribute_filter.add_inverted_attribute": "反属性をリストに追加する", "create.gui.attribute_filter.add_inverted_attribute": "反属性をリストに追加する",
"create.gui.attribute_filter.allow_list_disjunctive": "ホワイトリスト(れか)", "create.gui.attribute_filter.allow_list_disjunctive": "ホワイトリスト(いずれか)",
"create.gui.attribute_filter.allow_list_disjunctive.description": "選択した属性のいずれかを持っている場合、アイテムは通り抜けます。", "create.gui.attribute_filter.allow_list_disjunctive.description": "選択した属性のいずれかを持っている場合、アイテムは通り抜けます。",
"create.gui.attribute_filter.allow_list_conjunctive": "ホワイトリスト(全て)", "create.gui.attribute_filter.allow_list_conjunctive": "ホワイトリスト(全て)",
"create.gui.attribute_filter.allow_list_conjunctive.description": "選択した属性をすべてを持っている場合、アイテムは通り抜けます。", "create.gui.attribute_filter.allow_list_conjunctive.description": "選択した属性をすべてを持っている場合、アイテムは通り抜けます。",
@ -1052,12 +1059,12 @@
"create.tooltip.speedRequirement.none": "無し", "create.tooltip.speedRequirement.none": "無し",
"create.tooltip.speedRequirement.medium": "中速", "create.tooltip.speedRequirement.medium": "中速",
"create.tooltip.speedRequirement.high": "高速", "create.tooltip.speedRequirement.high": "高速",
"create.tooltip.stressImpact": "応力の影響: %1$s", "create.tooltip.stressImpact": "応力の影響: %1$s",
"create.tooltip.stressImpact.low": "低", "create.tooltip.stressImpact.low": "低",
"create.tooltip.stressImpact.medium": "中", "create.tooltip.stressImpact.medium": "中",
"create.tooltip.stressImpact.high": "高", "create.tooltip.stressImpact.high": "高",
"create.tooltip.stressImpact.overstressed": "超過応力", "create.tooltip.stressImpact.overstressed": "超過応力",
"create.tooltip.capacityProvided": "応力容量: %1$s", "create.tooltip.capacityProvided": "応力容量: %1$s",
"create.tooltip.capacityProvided.low": "小", "create.tooltip.capacityProvided.low": "小",
"create.tooltip.capacityProvided.medium": "中", "create.tooltip.capacityProvided.medium": "中",
"create.tooltip.capacityProvided.high": "大", "create.tooltip.capacityProvided.high": "大",
@ -1125,7 +1132,7 @@
"create.command.killTPSCommand.argument.tickTime": "tickTime", "create.command.killTPSCommand.argument.tickTime": "tickTime",
"create.subtitle.schematicannon_launch_block": "概略図砲が発射する", "create.subtitle.schematicannon_launch_block": "概略図砲が発射する",
"create.subtitle.schematicannon_finish": "概略図砲が完了する", "create.subtitle.schematicannon_finish": "概略図砲が作業を終える",
"create.subtitle.slime_added": "スライムがぐしゃっとつぶれる", "create.subtitle.slime_added": "スライムがぐしゃっとつぶれる",
"create.subtitle.mechanical_press_activation": "メカニカルプレスが作動する", "create.subtitle.mechanical_press_activation": "メカニカルプレスが作動する",
"create.subtitle.mechanical_press_item_break": "金属がガチャンと鳴る", "create.subtitle.mechanical_press_item_break": "金属がガチャンと鳴る",
@ -1186,11 +1193,11 @@
"block.create.brass_funnel.tooltip.behaviour3": "下向きホッパーのように、_アイテム_を_下方向_に_移動_させます。", "block.create.brass_funnel.tooltip.behaviour3": "下向きホッパーのように、_アイテム_を_下方向_に_移動_させます。",
"block.create.brass_tunnel.tooltip": "真鍮トンネル", "block.create.brass_tunnel.tooltip": "真鍮トンネル",
"block.create.brass_tunnel.tooltip.summary": "派手な_メカニカルベルト_の保護カバー_真鍮トンネル_にはアイテムの_フィルター機能_や、_分割機能_の設定項目も多数用意されています。", "block.create.brass_tunnel.tooltip.summary": "オシャレな_メカニカルベルト_の保護カバー_真鍮トンネル_にはアイテムの_フィルター機能_や、_分割機能_の設定項目も多数用意されています。",
"block.create.brass_tunnel.tooltip.condition1": "並べて設置したとき", "block.create.brass_tunnel.tooltip.condition1": "並べて設置したとき",
"block.create.brass_tunnel.tooltip.behaviour1": "_真鍮トンネル_は相互に接続し、ある_メカニカルベルト_のアイテムを別の_メカニカルベルト_に送ったりできるようにします。", "block.create.brass_tunnel.tooltip.behaviour1": "_真鍮トンネル_は相互に接続し、ある_メカニカルベルト_のアイテムを別の_メカニカルベルト_に送ったりできるようにします。",
"block.create.brass_tunnel.tooltip.condition2": "フィルター機能", "block.create.brass_tunnel.tooltip.condition2": "フィルター機能",
"block.create.brass_tunnel.tooltip.behaviour2": "_真鍮トンネル_は_搬入_と_搬出_、両方のフィルターを搭載しています。 _トンネル_のフィルター付き出力から_アイテム_が出てくることが許可されていない場合、並べて設置された_トンネル_の出力に送られます。", "block.create.brass_tunnel.tooltip.behaviour2": "_真鍮トンネル_は_搬入_と_搬出_、両方のフィルターを搭載しています。_トンネル_のフィルター付き出力から_アイテム_が出てくることが許可されていない場合、並べて設置された_トンネル_の出力に送られます。",
"block.create.brass_tunnel.tooltip.condition3": "分割機能", "block.create.brass_tunnel.tooltip.condition3": "分割機能",
"block.create.brass_tunnel.tooltip.behaviour3": "_真鍮トンネル_は、_アイテム_が接続された_メカニカルベルト_に分類して並べる方法を変更するように設定できます。", "block.create.brass_tunnel.tooltip.behaviour3": "_真鍮トンネル_は、_アイテム_が接続された_メカニカルベルト_に分類して並べる方法を変更するように設定できます。",
"block.create.brass_tunnel.tooltip.control1": "側面をレンチで右クリックしたとき。", "block.create.brass_tunnel.tooltip.control1": "側面をレンチで右クリックしたとき。",
@ -1244,14 +1251,14 @@
"block.create.hose_pulley.tooltip": "ホースプーリー", "block.create.hose_pulley.tooltip": "ホースプーリー",
"block.create.hose_pulley.tooltip.summary": "ワールドの大量の_液体_を_吸引_したり、_放出_したりするのに使います。", "block.create.hose_pulley.tooltip.summary": "ワールドの大量の_液体_を_吸引_したり、_放出_したりするのに使います。",
"block.create.hose_pulley.tooltip.condition1": "回転したとき", "block.create.hose_pulley.tooltip.condition1": "回転したとき",
"block.create.hose_pulley.tooltip.behaviour1": "ホースを_上げ下げ_して、どの程度の_高さ_まで_吸引_や_出_を行うか決めます。", "block.create.hose_pulley.tooltip.behaviour1": "ホースを_上げ下げ_して、どの程度の_高さ_まで_吸引_や_出_を行うか決めます。",
"block.create.hose_pulley.tooltip.condition2": "プーリーから液体が吸い込まれたとき", "block.create.hose_pulley.tooltip.condition2": "プーリーから液体が吸い込まれたとき",
"block.create.hose_pulley.tooltip.behaviour2": "ホースの端がおろされた本体から_液体_ブロックを_吸引_し始めます。非常に_大量_の液体は_無限_と_みなされます_。", "block.create.hose_pulley.tooltip.behaviour2": "ホースの端がおろされた本体から_液体_ブロックを_吸引_し始めます。非常に_大量_の液体は_無限_と_みなされます_。",
"block.create.hose_pulley.tooltip.condition3": "液体がプーリーに押しこまれたとき", "block.create.hose_pulley.tooltip.condition3": "液体がプーリーに押しこまれたとき",
"block.create.hose_pulley.tooltip.behaviour3": "ホースの端の_高さ_まで、_液体_の_放出_を始めます。", "block.create.hose_pulley.tooltip.behaviour3": "ホースの端の_高さ_まで、_液体_の_放出_を始めます。",
"block.create.fluid_tank.tooltip": "液体タンク", "block.create.fluid_tank.tooltip": "液体タンク",
"block.create.fluid_tank.tooltip.summary": "あなたのお気に入りの_液体_をすべて_貯蔵_します。縦横に並べて大きさを調整できます。", "block.create.fluid_tank.tooltip.summary": "あなたのお気に入りのあらゆる_液体_を_貯蔵_できます。縦横に並べて大きさを調整できます。",
"block.create.fluid_tank.tooltip.condition1": "レンチで右クリックしたとき", "block.create.fluid_tank.tooltip.condition1": "レンチで右クリックしたとき",
"block.create.fluid_tank.tooltip.behaviour1": "窓の設定を変更します。", "block.create.fluid_tank.tooltip.behaviour1": "窓の設定を変更します。",
@ -1290,7 +1297,7 @@
"block.create.item_drain.tooltip": "アイテム排液口", "block.create.item_drain.tooltip": "アイテム排液口",
"block.create.item_drain.tooltip.summary": "_液体アイテム_を空にする格子付きデポ。", "block.create.item_drain.tooltip.summary": "_液体アイテム_を空にする格子付きデポ。",
"block.create.item_drain.tooltip.condition1": "液体排液 ", "block.create.item_drain.tooltip.condition1": "液体排液",
"block.create.item_drain.tooltip.behaviour1": "_バケツ_や_ボトル_などの_液体入り容器_を横から搬入すると、アイテム排液口はその_液体入り容器_に空にしようとします。その後、アイテムは反対側に排出されます。", "block.create.item_drain.tooltip.behaviour1": "_バケツ_や_ボトル_などの_液体入り容器_を横から搬入すると、アイテム排液口はその_液体入り容器_に空にしようとします。その後、アイテムは反対側に排出されます。",
"block.create.mechanical_arm.tooltip": "メカニカルアーム", "block.create.mechanical_arm.tooltip": "メカニカルアーム",
@ -1316,7 +1323,7 @@
"item.create.handheld_blockzapper.tooltip": "携帯ブロックザッパー", "item.create.handheld_blockzapper.tooltip": "携帯ブロックザッパー",
"item.create.handheld_blockzapper.tooltip.summary": "離れた場所にブロックを設置または交換する新しいガジェット。", "item.create.handheld_blockzapper.tooltip.summary": "離れた場所にブロックを設置または交換する新しいガジェット。",
"item.create.handheld_blockzapper.tooltip.control1": "ブロックを左クリックしたとき", "item.create.handheld_blockzapper.tooltip.control1": "ブロックを左クリックしたとき",
"item.create.handheld_blockzapper.tooltip.action1": "UNLOCALIZED: Sets blocks placed by the tool to the targeted block.", "item.create.handheld_blockzapper.tooltip.action1": "ターゲットのブロックをこのツールに設定します。",
"item.create.handheld_blockzapper.tooltip.control2": "ブロックを右クリックしたとき", "item.create.handheld_blockzapper.tooltip.control2": "ブロックを右クリックしたとき",
"item.create.handheld_blockzapper.tooltip.action2": "ターゲットブロックを_配置_または_置換_します。", "item.create.handheld_blockzapper.tooltip.action2": "ターゲットブロックを_配置_または_置換_します。",
"item.create.handheld_blockzapper.tooltip.control3": "スニークしながら右クリックしたとき。", "item.create.handheld_blockzapper.tooltip.control3": "スニークしながら右クリックしたとき。",
@ -1362,7 +1369,7 @@
"item.create.empty_schematic.tooltip.summary": "レシピの材料、および_概略図テーブル_での書き込みに使用されます。", "item.create.empty_schematic.tooltip.summary": "レシピの材料、および_概略図テーブル_での書き込みに使用されます。",
"item.create.schematic.tooltip": "概略図", "item.create.schematic.tooltip": "概略図",
"item.create.schematic.tooltip.summary": "ワールドに設置できる構造物を保持します。 ホログラムを必要に応じて配置し、_概略図砲_を使用して建築します。", "item.create.schematic.tooltip.summary": "ワールドに設置できる構造物を保持します。ホログラムを必要に応じて配置し、_概略図砲_を使用して建築します。",
"item.create.schematic.tooltip.condition1": "持ったとき", "item.create.schematic.tooltip.condition1": "持ったとき",
"item.create.schematic.tooltip.behaviour1": "画面上のツールを使用して配置できます。", "item.create.schematic.tooltip.behaviour1": "画面上のツールを使用して配置できます。",
"item.create.schematic.tooltip.control1": "スニークしながら右クリックしたとき", "item.create.schematic.tooltip.control1": "スニークしながら右クリックしたとき",
@ -1373,11 +1380,11 @@
"item.create.schematic_and_quill.tooltip.condition1": "ステップ1", "item.create.schematic_and_quill.tooltip.condition1": "ステップ1",
"item.create.schematic_and_quill.tooltip.behaviour1": "右クリックして2つのコーナーポイントを選択します。", "item.create.schematic_and_quill.tooltip.behaviour1": "右クリックして2つのコーナーポイントを選択します。",
"item.create.schematic_and_quill.tooltip.condition2": "ステップ2", "item.create.schematic_and_quill.tooltip.condition2": "ステップ2",
"item.create.schematic_and_quill.tooltip.behaviour2": "_Ctrlキーを押しながらスクロール_して、サイズを調整します。 もう一度右クリックして保存します。", "item.create.schematic_and_quill.tooltip.behaviour2": "_Ctrlキーを押しながらスクロール_して、サイズを調整します。もう一度右クリックして保存します。",
"item.create.schematic_and_quill.tooltip.control1": "右クリックしたとき", "item.create.schematic_and_quill.tooltip.control1": "右クリックしたとき",
"item.create.schematic_and_quill.tooltip.action1": "コーナーポイントを選択/保存を確認します。", "item.create.schematic_and_quill.tooltip.action1": "コーナーポイントを選択/保存を確認します。",
"item.create.schematic_and_quill.tooltip.control2": "Ctrlを長押してるとき", "item.create.schematic_and_quill.tooltip.control2": "Ctrlを長押してるとき",
"item.create.schematic_and_quill.tooltip.action2": "_空中_でポイントを選択します。 _スクロール_して距離を調整します。", "item.create.schematic_and_quill.tooltip.action2": "_空中_でポイントを選択します。_スクロール_して距離を調整します。",
"item.create.schematic_and_quill.tooltip.control3": "スニークしながら右クリックしたとき", "item.create.schematic_and_quill.tooltip.control3": "スニークしながら右クリックしたとき",
"item.create.schematic_and_quill.tooltip.action3": "選択を_リセット_して削除します。", "item.create.schematic_and_quill.tooltip.action3": "選択を_リセット_して削除します。",
@ -1397,11 +1404,11 @@
"block.create.cogwheel.tooltip": "歯車", "block.create.cogwheel.tooltip": "歯車",
"block.create.cogwheel.tooltip.summary": "_回転_を直線で、または隣接する_歯車_に_伝達_します。", "block.create.cogwheel.tooltip.summary": "_回転_を直線で、または隣接する_歯車_に_伝達_します。",
"block.create.large_cogwheel.tooltip": "大歯車", "block.create.large_cogwheel.tooltip": "大きな歯車",
"block.create.large_cogwheel.tooltip.summary": "小さな歯車に接続したときに_回転速度_を_変更_できる歯車の大型バージョン。", "block.create.large_cogwheel.tooltip.summary": "小さな歯車に接続したときに_回転速度_を_変更_できる歯車の大型バージョン。",
"block.create.encased_shaft.tooltip": "ケース入りシャフト", "block.create.encased_shaft.tooltip": "ケース入りシャフト",
"block.create.encased_shaft.tooltip.summary": "_回転_を直線で_伝達_します。 壁を通過する回転の伝達に適しています。", "block.create.encased_shaft.tooltip.summary": "_回転_を直線で_伝達_します。壁を通過する回転の伝達に適しています。",
"block.create.gearbox.tooltip": "ギアボックス", "block.create.gearbox.tooltip": "ギアボックス",
"block.create.gearbox.tooltip.summary": "接続された_4方向_の_回転_方向を逆にして_伝達_します。", "block.create.gearbox.tooltip.summary": "接続された_4方向_の_回転_方向を逆にして_伝達_します。",
@ -1427,9 +1434,9 @@
"block.create.adjustable_chain_gearshift.tooltip.behaviour1": "レッドストーン信号を受けて_いない_ときは、隣接するチェーンドライブと_同じ速度_で回転を伝達します。_レッドストーン信号強度が最大_のときは隣接するチェーンドライブは_その2倍_の速度で伝達します。その間にあるものは1-2倍の速度で伝達されます。", "block.create.adjustable_chain_gearshift.tooltip.behaviour1": "レッドストーン信号を受けて_いない_ときは、隣接するチェーンドライブと_同じ速度_で回転を伝達します。_レッドストーン信号強度が最大_のときは隣接するチェーンドライブは_その2倍_の速度で伝達します。その間にあるものは1-2倍の速度で伝達されます。",
"item.create.belt_connector.tooltip": "メカニカルベルト", "item.create.belt_connector.tooltip": "メカニカルベルト",
"item.create.belt_connector.tooltip.summary": "2本以上の_シャフト_を_メカニカルベルト_で接続します。接続されたシャフトは全く同じ速度と方向で回転します。 メカニカルベルトは_アイテム_と_エンティティ_を_運搬_するベルトコンベアとして使えます。", "item.create.belt_connector.tooltip.summary": "2本以上の_シャフト_を_メカニカルベルト_で接続します。接続されたシャフトは全く同じ速度と方向で回転します。メカニカルベルトは_アイテム_と_エンティティ_を_運搬_するベルトコンベアとして使えます。",
"item.create.belt_connector.tooltip.control1": "シャフトを右クリックしたとき", "item.create.belt_connector.tooltip.control1": "シャフトを右クリックしたとき",
"item.create.belt_connector.tooltip.action1": "ベルトの片端のシャフトを選択します。 選択する2つのシャフトは_ベルトの方向_に向かって_縦_、_横_、または_斜め_に_並べる_必要があります。", "item.create.belt_connector.tooltip.action1": "ベルトの片端のシャフトを選択します。選択する2つのシャフトは_ベルトの方向_に向かって_縦_、_横_、または_斜め_に_並べる_必要があります。",
"item.create.belt_connector.tooltip.control2": "スニークしながら右クリックしたとき", "item.create.belt_connector.tooltip.control2": "スニークしながら右クリックしたとき",
"item.create.belt_connector.tooltip.action2": "ベルトの最初に選択した位置を_リセット_します。", "item.create.belt_connector.tooltip.action2": "ベルトの最初に選択した位置を_リセット_します。",
@ -1441,7 +1448,7 @@
"item.create.goggles.tooltip.behaviour2": "計器が接続されているネットワークの_速度_または_応力_に関する詳細情報を表示します。", "item.create.goggles.tooltip.behaviour2": "計器が接続されているネットワークの_速度_または_応力_に関する詳細情報を表示します。",
"item.create.wrench.tooltip": "レンチ", "item.create.wrench.tooltip": "レンチ",
"item.create.wrench.tooltip.summary": "動的からくりに取り組むための便利なツール。 コンポーネントの_回転_、_解体_、_設定_に使用できます。", "item.create.wrench.tooltip.summary": "動的からくりに取り組むための便利なツール。コンポーネントの_回転_、_解体_、_設定_に使用できます。",
"item.create.wrench.tooltip.control1": "機械を右クリックしたとき", "item.create.wrench.tooltip.control1": "機械を右クリックしたとき",
"item.create.wrench.tooltip.action1": "操作した面に向かって、または面から離れるように機械を_回転_させます。", "item.create.wrench.tooltip.action1": "操作した面に向かって、または面から離れるように機械を_回転_させます。",
"item.create.wrench.tooltip.control2": "スニークしながら右クリックしたとき", "item.create.wrench.tooltip.control2": "スニークしながら右クリックしたとき",
@ -1456,7 +1463,7 @@
"block.create.encased_fan.tooltip": "ケース入りファン", "block.create.encased_fan.tooltip": "ケース入りファン",
"block.create.encased_fan.tooltip.summary": "_回転力_を_気流_に変換し往復させます。色んな使い方があります。", "block.create.encased_fan.tooltip.summary": "_回転力_を_気流_に変換し往復させます。色んな使い方があります。",
"block.create.encased_fan.tooltip.condition1": "レッドストーン信号を受けたとき", "block.create.encased_fan.tooltip.condition1": "レッドストーン信号を受けたとき",
"block.create.encased_fan.tooltip.behaviour1": "真下の_熱源_から_回転力_を供給します。 ファンは下向きにする必要があります。", "block.create.encased_fan.tooltip.behaviour1": "真下の_熱源_から_回転力_を供給します。ファンは下向きにする必要があります。",
"block.create.encased_fan.tooltip.condition2": "回転したとき", "block.create.encased_fan.tooltip.condition2": "回転したとき",
"block.create.encased_fan.tooltip.behaviour2": "回転速度に応じてエンティティを_押し_たり、_吸い戻し_たりします。", "block.create.encased_fan.tooltip.behaviour2": "回転速度に応じてエンティティを_押し_たり、_吸い戻し_たりします。",
"block.create.encased_fan.tooltip.condition3": "特別なブロックを吹き抜けるとき", "block.create.encased_fan.tooltip.condition3": "特別なブロックを吹き抜けるとき",
@ -1468,18 +1475,18 @@
"block.create.hand_crank.tooltip": "ハンドクランク", "block.create.hand_crank.tooltip": "ハンドクランク",
"block.create.hand_crank.tooltip.summary": "プレイヤーの相互作用を必要とする_シンプル_な_原動機_。", "block.create.hand_crank.tooltip.summary": "プレイヤーの相互作用を必要とする_シンプル_な_原動機_。",
"block.create.hand_crank.tooltip.condition1": "使っているとき", "block.create.hand_crank.tooltip.condition1": "使っているとき",
"block.create.hand_crank.tooltip.behaviour1": "接続したに_回転力_を供給します。 _スニークで回転を逆_にできます。", "block.create.hand_crank.tooltip.behaviour1": "接続したに_回転力_を供給します。_スニークで回転を逆_にできます。",
"block.create.cuckoo_clock.tooltip": "鳩時計", "block.create.cuckoo_clock.tooltip": "鳩時計",
"block.create.cuckoo_clock.tooltip.summary": "空間を_彩り_、_時間を刻む_素晴らしい細工。", "block.create.cuckoo_clock.tooltip.summary": "空間を_彩り_、_時間を刻む_素晴らしい細工。",
"block.create.cuckoo_clock.tooltip.condition1": "回転したとき", "block.create.cuckoo_clock.tooltip.condition1": "回転したとき",
"block.create.cuckoo_clock.tooltip.behaviour1": "_現在の時刻_を表示し、1日に2回曲を再生します。 、_正午_と夕暮れにプレイヤーが_眠れるようになるとすぐ_に_アクティブ_になります。", "block.create.cuckoo_clock.tooltip.behaviour1": "_現在の時刻_を表示し、1日に2回曲を再生します。、_正午_と夕暮れにプレイヤーが_眠れるようになるとすぐ_に_アクティブ_になります。",
"block.create.turntable.tooltip": "ターンテーブル", "block.create.turntable.tooltip": "ターンテーブル",
"block.create.turntable.tooltip.summary": "_回転力_を洗練された乗り物酔いに変えます。", "block.create.turntable.tooltip.summary": "_回転力_を洗練された乗り物酔いに変えます。",
"block.create.millstone.tooltip": "石臼", "block.create.millstone.tooltip": "石臼",
"block.create.millstone.tooltip.summary": "搬入された_材料_の_研削_に適した機械。 隣接する歯車によって、または下部のシャフトに接続することによって、回転力を供給できます。 完成品は機械から搬出する必要があります。", "block.create.millstone.tooltip.summary": "搬入された_材料_の_研削_に適した機械。隣接する歯車によって、または下部のシャフトに接続することによって、回転力を供給できます。完成品は機械から搬出する必要があります。",
"block.create.millstone.tooltip.condition1": "回転したとき", "block.create.millstone.tooltip.condition1": "回転したとき",
"block.create.millstone.tooltip.behaviour1": "ブロックの側面または上面から搬入されたアイテムを_粉砕_を開始します。", "block.create.millstone.tooltip.behaviour1": "ブロックの側面または上面から搬入されたアイテムを_粉砕_を開始します。",
"block.create.millstone.tooltip.condition2": "右クリックしたとき", "block.create.millstone.tooltip.condition2": "右クリックしたとき",
@ -1488,10 +1495,10 @@
"block.create.crushing_wheel.tooltip": "破砕ホイール", "block.create.crushing_wheel.tooltip": "破砕ホイール",
"block.create.crushing_wheel.tooltip.summary": "何かを_破砕_する大きな回転させられるホイール。", "block.create.crushing_wheel.tooltip.summary": "何かを_破砕_する大きな回転させられるホイール。",
"block.create.crushing_wheel.tooltip.condition1": "他の破砕ホイールに取り付けたとき", "block.create.crushing_wheel.tooltip.condition1": "他の破砕ホイールに取り付けたとき",
"block.create.crushing_wheel.tooltip.behaviour1": "様々な物を処理する破砕機を形成します。 ホイールの歯は、_同じ速度_で_反対方向_に回る必要があります。", "block.create.crushing_wheel.tooltip.behaviour1": "様々な物を処理する破砕機を形成します。ホイールの歯は、_同じ速度_で_反対方向_に回る必要があります。",
"block.create.mechanical_press.tooltip": "メカニカルプレス", "block.create.mechanical_press.tooltip": "メカニカルプレス",
"block.create.mechanical_press.tooltip.summary": "その下のアイテムを圧縮する強力なピストン。 一定の_回転力_が必要です。", "block.create.mechanical_press.tooltip.summary": "その下のアイテムを圧縮する強力なピストン。一定の_回転力_が必要です。",
"block.create.mechanical_press.tooltip.condition1": "レッドストーン信号を受けたとき", "block.create.mechanical_press.tooltip.condition1": "レッドストーン信号を受けたとき",
"block.create.mechanical_press.tooltip.behaviour1": "その下にドロップされたアイテムの圧縮を_開始_します。", "block.create.mechanical_press.tooltip.behaviour1": "その下にドロップされたアイテムの圧縮を_開始_します。",
"block.create.mechanical_press.tooltip.condition2": "メカニカルベルトの上にあるとき", "block.create.mechanical_press.tooltip.condition2": "メカニカルベルトの上にあるとき",
@ -1526,9 +1533,9 @@
"block.create.mechanical_crafter.tooltip.condition2": "レッドストーンパルスがオンの時", "block.create.mechanical_crafter.tooltip.condition2": "レッドストーンパルスがオンの時",
"block.create.mechanical_crafter.tooltip.behaviour2": "現在与えられているすべての_アイテム_を使って、_強制的_に_クラフト_を開始します。", "block.create.mechanical_crafter.tooltip.behaviour2": "現在与えられているすべての_アイテム_を使って、_強制的_に_クラフト_を開始します。",
"block.create.mechanical_crafter.tooltip.control1": "正面をレンチで使ったとき", "block.create.mechanical_crafter.tooltip.control1": "正面をレンチで使ったとき",
"block.create.mechanical_crafter.tooltip.action1": "_個々のクラフターが_アイテムを移動_させる_方向_を循環させます。 クラフトグリッドを形成するには、すべてのアイテムを最後のクラフターに向かって_移動させる流れ_を作るように_ベルト_を設置する必要があります。最後のクラフターはグリッドから_離れる_方向を指す必要があります。", "block.create.mechanical_crafter.tooltip.action1": "_個々のクラフターが_アイテムを移動_させる_方向_を循環させます。クラフトグリッドを形成するには、すべてのアイテムを最後のクラフターに向かって_移動させる流れ_を作るように_ベルト_を設置する必要があります。最後のクラフターはグリッドから_離れる_方向を指す必要があります。",
"block.create.mechanical_crafter.tooltip.control2": "背面をレンチで使ったとき", "block.create.mechanical_crafter.tooltip.control2": "背面をレンチで使ったとき",
"block.create.mechanical_crafter.tooltip.action2": "隣接するクラフターの_搬入インベントリ_を_接続_します。 これを使用してクラフトグリッドの_スロットを_結合_し、_搬入作業_を_簡略化_できます。", "block.create.mechanical_crafter.tooltip.action2": "隣接するクラフターの_搬入インベントリ_を_接続_します。これを使用してクラフトグリッドの_スロットを_結合_し、_搬入作業_を_簡略化_できます。",
"block.create.furnace_engine.tooltip": "かまどエンジン", "block.create.furnace_engine.tooltip": "かまどエンジン",
"block.create.furnace_engine.tooltip.summary": "_稼動しているかまど_で動く強力な_原動機_。", "block.create.furnace_engine.tooltip.summary": "_稼動しているかまど_で動く強力な_原動機_。",
@ -1555,14 +1562,14 @@
"block.create.portable_fluid_interface.tooltip.behaviour2": "アクティブな接続を即座に_切断_します。", "block.create.portable_fluid_interface.tooltip.behaviour2": "アクティブな接続を即座に_切断_します。",
"block.create.rotation_speed_controller.tooltip": "回転速度コントローラー", "block.create.rotation_speed_controller.tooltip": "回転速度コントローラー",
"block.create.rotation_speed_controller.tooltip.summary": "回転を任意の速度にスピードアップまたはスローダウンさせることができる_設定_可能な_伝達機_。", "block.create.rotation_speed_controller.tooltip.summary": "回転を任意の速度に上げたり下げたりさせることができる_設定_可能な_伝達機_。",
"block.create.rotation_speed_controller.tooltip.condition1": "大きな歯車を取り付けたとき", "block.create.rotation_speed_controller.tooltip.condition1": "大きな歯車を取り付けたとき",
"block.create.rotation_speed_controller.tooltip.behaviour1": "入ってくる回転力を歯車に伝達して、目標とする_速度_に_合わせ_ようとします。_歯車_はコントローラの_上_に_取り付ける_必要があります。", "block.create.rotation_speed_controller.tooltip.behaviour1": "入ってくる回転力を歯車に伝達して、目標とする_速度_に_合わせ_ようとします。_歯車_はコントローラの_上_に_取り付ける_必要があります。",
"block.create.mechanical_piston.tooltip": "メカニカルピストン", "block.create.mechanical_piston.tooltip": "メカニカルピストン",
"block.create.mechanical_piston.tooltip.summary": "ピストンのさらに進化したバージョン。回転力を利用して前にある構造物を正確に移動させます。後部にあるピストン延長ポールは、このの稼働範囲を決めます。延長ポールがないと、ピストンは動きません。_シャーシ_や_スライムボール_、_接着剤_を使用して、1列以上のブロックを移動させることができます。", "block.create.mechanical_piston.tooltip.summary": "ピストンのさらに進化したバージョン。回転力を利用して前にある構造物を正確に移動させます。後部にあるピストン延長ポールは、このの稼働範囲を決めます。延長ポールがないと、ピストンは動きません。_シャーシ_や_スライムボール_、_接着剤_を使用して、1列以上のブロックを移動させることができます。",
"block.create.mechanical_piston.tooltip.condition1": "回転したとき", "block.create.mechanical_piston.tooltip.condition1": "回転したとき",
"block.create.mechanical_piston.tooltip.behaviour1": "取り付けられた構造物の移動を開始します。 速度と方向は、入力される回転速度と相関します。", "block.create.mechanical_piston.tooltip.behaviour1": "取り付けられた構造物の移動を開始します。速度と方向は、入力される回転速度と相関します。",
"block.create.piston_extension_pole.tooltip": "ピストン延長ポール", "block.create.piston_extension_pole.tooltip": "ピストン延長ポール",
"block.create.piston_extension_pole.tooltip.summary": "メカニカルピストンの範囲を拡張します。", "block.create.piston_extension_pole.tooltip.summary": "メカニカルピストンの範囲を拡張します。",
@ -1590,7 +1597,7 @@
"block.create.clockwork_bearing.tooltip": "時計仕掛けのベアリング", "block.create.clockwork_bearing.tooltip": "時計仕掛けのベアリング",
"block.create.clockwork_bearing.tooltip.summary": "現在の_ゲーム内時間_に応じて最大2つの_時計の針_を回転させる、_メカニカルベアリング_の進化版。", "block.create.clockwork_bearing.tooltip.summary": "現在の_ゲーム内時間_に応じて最大2つの_時計の針_を回転させる、_メカニカルベアリング_の進化版。",
"block.create.clockwork_bearing.tooltip.condition1": "回転したとき", "block.create.clockwork_bearing.tooltip.condition1": "回転したとき",
"block.create.clockwork_bearing.tooltip.behaviour1": "現在の時間に向かって取り付けた構造物の回転を開始します。 2番目の構造物が存在する場合、それは分針として機能します。", "block.create.clockwork_bearing.tooltip.behaviour1": "現在の時間に向かって取り付けた構造物の回転を開始します。2番目の構造物が存在する場合、それは分針として機能します。",
"block.create.sequenced_gearshift.tooltip": "シーケンスギアシフト", "block.create.sequenced_gearshift.tooltip": "シーケンスギアシフト",
"block.create.sequenced_gearshift.tooltip.summary": "_プログラミング_できる_便利_な伝達機械。最大_5つ_の_連続_した_命令_に従って_回転処理_を変更することができます。高速になると精度が悪くなる可能性があります。", "block.create.sequenced_gearshift.tooltip.summary": "_プログラミング_できる_便利_な伝達機械。最大_5つ_の_連続_した_命令_に従って_回転処理_を変更することができます。高速になると精度が悪くなる可能性があります。",
@ -1617,7 +1624,7 @@
"block.create.rope_pulley.tooltip": "ローププーリー", "block.create.rope_pulley.tooltip": "ローププーリー",
"block.create.rope_pulley.tooltip.summary": "_取り付けられたブロック_や_構造物_を_垂直_方向に移動させます。_シャーシ_、_スライムボール_、_接着剤_を使用して、1つ以上のブロックを移動させることもできます。", "block.create.rope_pulley.tooltip.summary": "_取り付けられたブロック_や_構造物_を_垂直_方向に移動させます。_シャーシ_、_スライムボール_、_接着剤_を使用して、1つ以上のブロックを移動させることもできます。",
"block.create.rope_pulley.tooltip.condition1": "回転したとき", "block.create.rope_pulley.tooltip.condition1": "回転したとき",
"block.create.rope_pulley.tooltip.behaviour1": "取り付けた構造物の移動を開始します。 速度と方向は、回転速度に相関します。", "block.create.rope_pulley.tooltip.behaviour1": "取り付けた構造物の移動を開始します。速度と方向は、回転速度に相関します。",
"block.create.linear_chassis.tooltip": "線形シャーシ", "block.create.linear_chassis.tooltip": "線形シャーシ",
"block.create.linear_chassis.tooltip.summary": "移動用の構造物を接続する設定可能な土台ブロック。", "block.create.linear_chassis.tooltip.summary": "移動用の構造物を接続する設定可能な土台ブロック。",
@ -1636,19 +1643,19 @@
"block.create.radial_chassis.tooltip.condition1": "動かしたとき", "block.create.radial_chassis.tooltip.condition1": "動かしたとき",
"block.create.radial_chassis.tooltip.behaviour1": "柱状に_接続_したすべての_シャーシ_と、周囲のブロックを_移動_させます。周囲のブロックは、範囲内にあり、かつ粘着面に面している場合にのみ_引っ張られ_ます([Ctrl]を参照)。", "block.create.radial_chassis.tooltip.behaviour1": "柱状に_接続_したすべての_シャーシ_と、周囲のブロックを_移動_させます。周囲のブロックは、範囲内にあり、かつ粘着面に面している場合にのみ_引っ張られ_ます([Ctrl]を参照)。",
"block.create.radial_chassis.tooltip.condition2": "レンチを持ったとき", "block.create.radial_chassis.tooltip.condition2": "レンチを持ったとき",
"block.create.radial_chassis.tooltip.behaviour2": "このシャーシブロックの有効_範囲_を設定します。 Ctrlキーを押したままにすると、接続されているすべてのシャーシブロックの範囲も同時に変更できます。", "block.create.radial_chassis.tooltip.behaviour2": "このシャーシブロックの有効_範囲_を設定します。Ctrlキーを押したままにすると、接続されているすべてのシャーシブロックの範囲も同時に変更できます。",
"block.create.radial_chassis.tooltip.control1": "スライムボールで右クリックしたとき", "block.create.radial_chassis.tooltip.control1": "スライムボールで右クリックしたとき",
"block.create.radial_chassis.tooltip.action1": "クリックした面を_粘着面_にします。 シャーシが移動すると、粘着面に接続されているすべての指定のブロックも一緒に移動します。", "block.create.radial_chassis.tooltip.action1": "クリックした面を_粘着面_にします。シャーシが移動すると、粘着面に接続されているすべての指定のブロックも一緒に移動します。",
"block.create.mechanical_drill.tooltip": "メカニカルドリル", "block.create.mechanical_drill.tooltip": "メカニカルドリル",
"block.create.mechanical_drill.tooltip.summary": "_ブロックを壊す_のに適した作業機。 _メカニカルピストン_や_ベアリング_等で移動できます。", "block.create.mechanical_drill.tooltip.summary": "_ブロックを壊す_のに適した作業機。_メカニカルピストン_や_ベアリング_等で移動できます。",
"block.create.mechanical_drill.tooltip.condition1": "回転したとき", "block.create.mechanical_drill.tooltip.condition1": "回転したとき",
"block.create.mechanical_drill.tooltip.behaviour1": "_固定式_のブロック破壊機として機能します。 また、有効範囲の_エンティティを傷つけます_。", "block.create.mechanical_drill.tooltip.behaviour1": "_固定式_のブロック破壊機として機能します。また、有効範囲の_エンティティを傷つけます_。",
"block.create.mechanical_drill.tooltip.condition2": "動かしたとき", "block.create.mechanical_drill.tooltip.condition2": "動かしたとき",
"block.create.mechanical_drill.tooltip.behaviour2": "ドリルが衝突するブロックを壊します。", "block.create.mechanical_drill.tooltip.behaviour2": "ドリルが衝突するブロックを壊します。",
"block.create.mechanical_harvester.tooltip": "メカニカルハーベスター", "block.create.mechanical_harvester.tooltip": "メカニカルハーベスター",
"block.create.mechanical_harvester.tooltip.summary": "中規模の作物の自動化に適した機械式植物カッター。 _メカニカルピストン_や_ベアリング_等で移動できます。", "block.create.mechanical_harvester.tooltip.summary": "中規模の作物の自動化に適した機械式植物カッター。_メカニカルピストン_や_ベアリング_等で移動できます。",
"block.create.mechanical_harvester.tooltip.condition1": "動かしたとき", "block.create.mechanical_harvester.tooltip.condition1": "動かしたとき",
"block.create.mechanical_harvester.tooltip.behaviour1": "ブレードが衝突する_すべての成熟した作物を収穫_し、それらを初期の成長状態にリセットします。", "block.create.mechanical_harvester.tooltip.behaviour1": "ブレードが衝突する_すべての成熟した作物を収穫_し、それらを初期の成長状態にリセットします。",
@ -1658,9 +1665,9 @@
"block.create.mechanical_plough.tooltip.behaviour1": "松明や雪など、当たり判定がないブロックを壊します。エンティティを傷付けることはありません。また、クワを使うように土を耕します。", "block.create.mechanical_plough.tooltip.behaviour1": "松明や雪など、当たり判定がないブロックを壊します。エンティティを傷付けることはありません。また、クワを使うように土を耕します。",
"block.create.mechanical_saw.tooltip": "メカニカルノコギリ", "block.create.mechanical_saw.tooltip": "メカニカルノコギリ",
"block.create.mechanical_saw.tooltip.summary": "_木_を効率的に_切り倒したり_、_ブロック_を_加工_したりするのに適しています。 _メカニカルピストン_や_ベアリング_等で移動できます。", "block.create.mechanical_saw.tooltip.summary": "_木_を効率的に_切り倒したり_、_ブロック_を_加工_したりするのに適しています。_メカニカルピストン_や_ベアリング_等で移動できます。",
"block.create.mechanical_saw.tooltip.condition1": "上向きのとき", "block.create.mechanical_saw.tooltip.condition1": "上向きのとき",
"block.create.mechanical_saw.tooltip.behaviour1": "そこにドロップまたは搬入されたアイテムに_製材_および石工レシピを適用します。 複数の出力が可能な場合、フィルターが割り当てられていない限り、出力が循環します。", "block.create.mechanical_saw.tooltip.behaviour1": "そこにドロップまたは搬入されたアイテムに_製材_および石工レシピを適用します。複数の出力が可能な場合、フィルターが割り当てられていない限り、出力が循環します。",
"block.create.mechanical_saw.tooltip.condition2": "横向きの場合", "block.create.mechanical_saw.tooltip.condition2": "横向きの場合",
"block.create.mechanical_saw.tooltip.behaviour2": "その前の_原木_を_切り倒す_。その原木が木を支えていた場合、_木_は_崩壊_します。", "block.create.mechanical_saw.tooltip.behaviour2": "その前の_原木_を_切り倒す_。その原木が木を支えていた場合、_木_は_崩壊_します。",
"block.create.mechanical_saw.tooltip.condition3": "動かしたとき", "block.create.mechanical_saw.tooltip.condition3": "動かしたとき",
@ -1675,30 +1682,30 @@
"block.create.content_observer.tooltip.summary": "設定された_フィルター_に一致する_コンテナ_や_メカニカルベルト_内の_アイテム_を検出します。観察している_インベントリ_、_ベルト_、または_シュート_に一致するアイテムが含まれている場合、このは_レッドストーン信号_を発します。観察された_ファンネル_が一致するアイテムを_輸送_すると、このコンポーネントは_レッドストーンパルス_を発します。", "block.create.content_observer.tooltip.summary": "設定された_フィルター_に一致する_コンテナ_や_メカニカルベルト_内の_アイテム_を検出します。観察している_インベントリ_、_ベルト_、または_シュート_に一致するアイテムが含まれている場合、このは_レッドストーン信号_を発します。観察された_ファンネル_が一致するアイテムを_輸送_すると、このコンポーネントは_レッドストーンパルス_を発します。",
"block.create.redstone_link.tooltip": "レッドストーンリンク", "block.create.redstone_link.tooltip": "レッドストーンリンク",
"block.create.redstone_link.tooltip.summary": "_ワイヤレスレッドストーン_接続の終点。 任意のアイテムを使用して_周波数_を割り当てることができます。 通信距離は限られていますが、かなり離れても通信することができます。", "block.create.redstone_link.tooltip.summary": "_ワイヤレスレッドストーン_接続の終点。任意のアイテムを使用して_周波数_を割り当てることができます。通信距離は限られていますが、かなり離れても通信することができます。",
"block.create.redstone_link.tooltip.condition1": "信号を受信したとき", "block.create.redstone_link.tooltip.condition1": "信号を受信したとき",
"block.create.redstone_link.tooltip.behaviour1": "同じ周波数のリンクから信号を受信すると、レッドストーン信号を出力します。", "block.create.redstone_link.tooltip.behaviour1": "同じ周波数のリンクから信号を受信すると、レッドストーン信号を出力します。",
"block.create.redstone_link.tooltip.control1": "アイテムで右クリックしたとき", "block.create.redstone_link.tooltip.control1": "アイテムで右クリックしたとき",
"block.create.redstone_link.tooltip.action1": "_周波数_をそのアイテムに設定します。 周波数を定義するために、_合計2つの異なるアイテム_を組み合わせて使えます。", "block.create.redstone_link.tooltip.action1": "_周波数_をそのアイテムに設定します。周波数を定義するために、_合計2つの異なるアイテム_を組み合わせて使えます。",
"block.create.redstone_link.tooltip.control2": "スニークしながら右クリックしたとき", "block.create.redstone_link.tooltip.control2": "スニークしながら右クリックしたとき",
"block.create.redstone_link.tooltip.action2": "_受信_モードと_送信_モードを切り替えます。", "block.create.redstone_link.tooltip.action2": "_受信_モードと_送信_モードを切り替えます。",
"block.create.nixie_tube.tooltip": "ニキシー管", "block.create.nixie_tube.tooltip": "ニキシー管",
"block.create.nixie_tube.tooltip.summary": "派手にレッドストーン強度と文字を表示します。", "block.create.nixie_tube.tooltip.summary": "オシャレにレッドストーン強度と文字を表示します。",
"block.create.nixie_tube.tooltip.condition1": "レッドストーン信号を受けたとき", "block.create.nixie_tube.tooltip.condition1": "レッドストーン信号を受けたとき",
"block.create.nixie_tube.tooltip.behaviour1": "現在のレッドストーンの_信号強度_を表示します。", "block.create.nixie_tube.tooltip.behaviour1": "現在のレッドストーンの_信号強度_を表示します。",
"block.create.nixie_tube.tooltip.condition2": "名札を使ったとき", "block.create.nixie_tube.tooltip.condition2": "名札を使ったとき",
"block.create.nixie_tube.tooltip.behaviour2": "_名札_の_内容_を複数のニキシー管を並べて表示します。", "block.create.nixie_tube.tooltip.behaviour2": "_名札_の_内容_を複数のニキシー管を並べて表示します。",
"block.create.redstone_contact.tooltip": "レッドストーンコンタクト", "block.create.redstone_contact.tooltip": "レッドストーンコンタクト",
"block.create.redstone_contact.tooltip.summary": "レッドストーン信号をペアで出力します。 _メカニカルピストン_や_ベアリング_等で移動できます。", "block.create.redstone_contact.tooltip.summary": "レッドストーン信号をペアで出力します。_メカニカルピストン_や_ベアリング_等で移動できます。",
"block.create.redstone_contact.tooltip.condition1": "他のコンタクトと向かい合ったとき", "block.create.redstone_contact.tooltip.condition1": "他のコンタクトと向かい合ったとき",
"block.create.redstone_contact.tooltip.behaviour1": "レッドストーン信号を出力します。", "block.create.redstone_contact.tooltip.behaviour1": "レッドストーン信号を出力します。",
"block.create.redstone_contact.tooltip.condition2": "動かしたとき", "block.create.redstone_contact.tooltip.condition2": "動かしたとき",
"block.create.redstone_contact.tooltip.behaviour2": "通過するすべての固定したレッドストーンコンタクトに反応します。", "block.create.redstone_contact.tooltip.behaviour2": "通過するすべての固定したレッドストーンコンタクトに反応します。",
"block.create.adjustable_crate.tooltip": "可変クレート", "block.create.adjustable_crate.tooltip": "可変クレート",
"block.create.adjustable_crate.tooltip.summary": "この_収納ブロック_は、容量を手動で制御できます。任意のアイテムを_16スタック_まで収納できます。 _レッドストーンコンパレーター_に対応しています。", "block.create.adjustable_crate.tooltip.summary": "この_収納ブロック_は、容量を手動で制御できます。任意のアイテムを_16スタック_まで収納できます。_レッドストーンコンパレーター_に対応しています。",
"block.create.adjustable_crate.tooltip.control1": "右クリックしたとき", "block.create.adjustable_crate.tooltip.control1": "右クリックしたとき",
"block.create.adjustable_crate.tooltip.action1": "_インターフェース_を開きます。", "block.create.adjustable_crate.tooltip.action1": "_インターフェース_を開きます。",
@ -1708,7 +1715,7 @@
"block.create.creative_crate.tooltip.behaviour1": "このクレートから何かを_搬出_すると、指定されたアイテムが_無限_に_搬出_されます。このクレートに_搬入_されたアイテムは_消滅_します。", "block.create.creative_crate.tooltip.behaviour1": "このクレートから何かを_搬出_すると、指定されたアイテムが_無限_に_搬出_されます。このクレートに_搬入_されたアイテムは_消滅_します。",
"block.create.deployer.tooltip": "デプロイヤー", "block.create.deployer.tooltip": "デプロイヤー",
"block.create.deployer.tooltip.summary": "_殴る_、_使う_、_起動する_。この機械は、_プレイヤー_をできるだけ_真似_しようとします。_アイテムを自分のインベントリに入れたり_、_預けたり_できます。 持っているアイテムはブロックから直接搬入・搬出する必要があります。", "block.create.deployer.tooltip.summary": "_殴る_、_使う_、_起動する_。この機械は、_プレイヤー_をできるだけ_真似_しようとします。_アイテムを自分のインベントリに入れたり_、_預けたり_できます。持っているアイテムはブロックから直接搬入・搬出する必要があります。",
"block.create.deployer.tooltip.condition1": "回転したとき", "block.create.deployer.tooltip.condition1": "回転したとき",
"block.create.deployer.tooltip.behaviour1": "腕を機械の2m先まで伸ばし、アイテムを_発動_する。", "block.create.deployer.tooltip.behaviour1": "腕を機械の2m先まで伸ばし、アイテムを_発動_する。",
"block.create.deployer.tooltip.condition2": "レンチで右クリックしたとき", "block.create.deployer.tooltip.condition2": "レンチで右クリックしたとき",
@ -1717,7 +1724,7 @@
"block.create.deployer.tooltip.behaviour3": "合わないアイテムは搬入できません。逆に合うアイテムは搬出できません。", "block.create.deployer.tooltip.behaviour3": "合わないアイテムは搬入できません。逆に合うアイテムは搬出できません。",
"block.create.brass_casing.tooltip": "真ちゅうのケーシング", "block.create.brass_casing.tooltip": "真ちゅうのケーシング",
"block.create.brass_casing.tooltip.summary": "さまざまな用途に使用できる頑丈な機械ケーシング。 装飾にも安心してお使いいただけます。", "block.create.brass_casing.tooltip.summary": "さまざまな用途に使用できる頑丈な機械ケーシング。装飾にも安心してお使いいただけます。",
"block.create.pulse_repeater.tooltip": "パルスリピーター", "block.create.pulse_repeater.tooltip": "パルスリピーター",
"block.create.pulse_repeater.tooltip.summary": "通過するレッドストーン信号を_1ティック_の長さにカットする簡単な回路。", "block.create.pulse_repeater.tooltip.summary": "通過するレッドストーン信号を_1ティック_の長さにカットする簡単な回路。",
@ -1735,22 +1742,22 @@
"block.create.powered_toggle_latch.tooltip.summary": "レッドストーンパルスによって切替できるレバー。", "block.create.powered_toggle_latch.tooltip.summary": "レッドストーンパルスによって切替できるレバー。",
"block.create.powered_latch.tooltip": "パワードラッチ", "block.create.powered_latch.tooltip": "パワードラッチ",
"block.create.powered_latch.tooltip.summary": "_レッドストーン信号_で制御できるレバー。 _背面のレッドストーン信号_でオンになり、_側面からのレッドストーン信号_でリセットされます。", "block.create.powered_latch.tooltip.summary": "_レッドストーン信号_で制御できるレバー。_背面のレッドストーン信号_でオンになり、_側面からのレッドストーン信号_でリセットされます。",
"block.create.controller_rail.tooltip": "コントローラーレール", "block.create.controller_rail.tooltip": "コントローラーレール",
"block.create.controller_rail.tooltip.summary": "トロッコの_移動速度_を_細かく制御_できる一方通行の_パワード_レール", "block.create.controller_rail.tooltip.summary": "トロッコの_移動速度_を_細かく制御_できる一方通行の_パワード_レール",
"block.create.controller_rail.tooltip.condition1": "レッドストーン信号を受けたとき", "block.create.controller_rail.tooltip.condition1": "レッドストーン信号を受けたとき",
"block.create.controller_rail.tooltip.behaviour1": "通過する_トロッコ_を_信号の強度_に対応した速度に_加速_または_減速_します。また、隣接するコントローラレールにレッドストーン信号を伝達します。強度の異なる2つのコントローラレールにレッドストーン信号を供給すると、それらの間のレールはその信号の変化を補間します。", "block.create.controller_rail.tooltip.behaviour1": "通過する_トロッコ_を_信号の強度_に対応した速度に_加速_または_減速_します。また、隣接するコントローラレールにレッドストーン信号を伝達します。強度の異なる2つのコントローラレールにレッドストーン信号を供給すると、それらの間のレールはその信号の変化を補間します。",
"block.create.speedometer.tooltip": "スピードメーター", "block.create.speedometer.tooltip": "速度メーター",
"block.create.speedometer.tooltip.summary": "接続された機械の_回転速度_を測定して表示します。 _レッドストーンコンパレーター_に対応しています。", "block.create.speedometer.tooltip.summary": "接続された機械の_回転速度_を測定して表示します。_レッドストーンコンパレーター_に対応しています。",
"block.create.speedometer.tooltip.condition1": "回転したとき", "block.create.speedometer.tooltip.condition1": "回転したとき",
"block.create.speedometer.tooltip.behaviour1": "速度レベルに対応する色を表示します。 _緑_は低速、_青_は中速、_紫_は高速を示します。 一部の機械は、稼働に十分なレベルの速度を必要とします。", "block.create.speedometer.tooltip.behaviour1": "速度レベルに対応する色を表示します。_緑_は低速、_青_は中速、_紫_は高速を示します。一部の機械は、稼働に十分なレベルの速度を必要とします。",
"block.create.stressometer.tooltip": "ストレスメーター", "block.create.stressometer.tooltip": "速度メーター",
"block.create.stressometer.tooltip.summary": "接続された動力ネットワーク全体の応力を測定して表示します。 _レッドストーンコンパレーター_に対応しています。", "block.create.stressometer.tooltip.summary": "接続された動力ネットワーク全体の応力を測定して表示します。_レッドストーンコンパレーター_に対応しています。",
"block.create.stressometer.tooltip.condition1": "回転したとき", "block.create.stressometer.tooltip.condition1": "回転したとき",
"block.create.stressometer.tooltip.behaviour1": "応力レベルに対応する色を表示します。 _過度に応力がかかった(超過応力)ネットワーク_の機械は全て停止します。応力は動力ネットワークに_原動機_を追加することで緩和することができます。", "block.create.stressometer.tooltip.behaviour1": "応力レベルに対応する色を表示します。_過度に応力がかかった(超過応力)ネットワーク_の機械は全て停止します。応力は動力ネットワークに_原動機_を追加することで緩和することができます。",
"item.create.sand_paper.tooltip": "紙やすり", "item.create.sand_paper.tooltip": "紙やすり",
"item.create.sand_paper.tooltip.summary": "_素材_を_磨く_のに使える荒い紙。デプロイヤーに自動的で磨かせることもできます。", "item.create.sand_paper.tooltip.summary": "_素材_を_磨く_のに使える荒い紙。デプロイヤーに自動的で磨かせることもできます。",
@ -1768,7 +1775,7 @@
"item.create.builders_tea.tooltip.summary": "_やる気_がみなぎる、一日の始まりに最適な飲み物。", "item.create.builders_tea.tooltip.summary": "_やる気_がみなぎる、一日の始まりに最適な飲み物。",
"item.create.refined_radiance.tooltip": "洗練された輝き", "item.create.refined_radiance.tooltip": "洗練された輝き",
"item.create.refined_radiance.tooltip.summary": "_吸収した_から鍛造した色彩素材。", "item.create.refined_radiance.tooltip.summary": "_吸収した輝き_から鍛造した色彩素材。",
"item.create.shadow_steel.tooltip": "シャドウスチール", "item.create.shadow_steel.tooltip": "シャドウスチール",
"item.create.shadow_steel.tooltip.summary": "_奈落の虚無_から鍛造した色彩素材。", "item.create.shadow_steel.tooltip.summary": "_奈落の虚無_から鍛造した色彩素材。",
@ -1779,7 +1786,7 @@
"item.create.minecart_coupling.tooltip.behaviour1": "2台のトロッコを連結します。それらは移動中に一定の距離を保とうします。", "item.create.minecart_coupling.tooltip.behaviour1": "2台のトロッコを連結します。それらは移動中に一定の距離を保とうします。",
"item.create.crafter_slot_cover.tooltip": "スロットカバー", "item.create.crafter_slot_cover.tooltip": "スロットカバー",
"item.create.crafter_slot_cover.tooltip.summary": "取り付けた_メカニカルクラフター_をレシピの空のスロットとして示します。 クラフターは必ずしも正方形である必要はありません。 これは、_同じアイテムが離れた場所にある_レシピに便利です。", "item.create.crafter_slot_cover.tooltip.summary": "取り付けた_メカニカルクラフター_をレシピの空のスロットとして示します。クラフターは必ずしも正方形である必要はありません。これは、_同じアイテムが離れた場所にある_レシピに便利です。",
"create.tooltip.wip": "WIP", "create.tooltip.wip": "WIP",
"create.tooltip.workInProgress": "作業中です!", "create.tooltip.workInProgress": "作業中です!",
@ -1787,10 +1794,10 @@
"create.tooltip.randomWipDescription1": "赤ちゃんパンダは、このアイテムを使用するたびに死にます。そう、いつでもね。", "create.tooltip.randomWipDescription1": "赤ちゃんパンダは、このアイテムを使用するたびに死にます。そう、いつでもね。",
"create.tooltip.randomWipDescription2": "自己責任。", "create.tooltip.randomWipDescription2": "自己責任。",
"create.tooltip.randomWipDescription3": "これはあなたが探しているアイテムではありません。*人差し指を振って*ちっちっちっ、解散!", "create.tooltip.randomWipDescription3": "これはあなたが探しているアイテムではありません。*人差し指を振って*ちっちっちっ、解散!",
"create.tooltip.randomWipDescription4": "このアイテムは10秒で自爆します。 10、9、8 ...", "create.tooltip.randomWipDescription4": "このアイテムは10秒で自爆します。10、9、8 ...",
"create.tooltip.randomWipDescription5": "私を信じて、それは無駄だ。", "create.tooltip.randomWipDescription5": "私を信じて、それは無駄だ。",
"create.tooltip.randomWipDescription6": "このアイテムを使用することにより、お客様はここに免責事項に同意し、その条件に同意するものとします。", "create.tooltip.randomWipDescription6": "このアイテムを使用することにより、お客様はここに免責事項に同意し、その条件に同意するものとします。",
"create.tooltip.randomWipDescription7": "これは君に向いていないかもしれない。 あれはどう??", "create.tooltip.randomWipDescription7": "これは君に向いていないかもしれない。あれはどう??",
"create.tooltip.randomWipDescription8": "それを使ったことをすぐ後悔する。", "create.tooltip.randomWipDescription8": "それを使ったことをすぐ後悔する。",
@ -1818,6 +1825,8 @@
"create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...", "create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...",
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles", "create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles",
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction", "create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction",
"create.ponder.brass_hand.scene_6.birbs_interesting": "UNLOCALIZED: More birbs = More interesting",
"create.ponder.brass_hand.scene_6.poi": "UNLOCALIZED: Point of Interest",
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs", "create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs",
"_": "Thank you for translating Create!" "_": "Thank you for translating Create!"

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 84", "_": "Missing Localizations: 95",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -685,6 +685,7 @@
"create.recipe.mechanical_crafting": "기계 조합", "create.recipe.mechanical_crafting": "기계 조합",
"create.recipe.automatic_shaped": "유형 자동 조합", "create.recipe.automatic_shaped": "유형 자동 조합",
"create.recipe.block_cutting": "블 절단", "create.recipe.block_cutting": "블 절단",
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
"create.recipe.blockzapper_upgrade": "휴대용 블록발사기 업그레이드", "create.recipe.blockzapper_upgrade": "휴대용 블록발사기 업그레이드",
"create.recipe.sandpaper_polishing": "사포질", "create.recipe.sandpaper_polishing": "사포질",
"create.recipe.mystery_conversion": "?", "create.recipe.mystery_conversion": "?",
@ -845,13 +846,19 @@
"create.gui.stockpile_switch.move_to_upper_at": "최소 신호 유지 비율:%1$s%%", "create.gui.stockpile_switch.move_to_upper_at": "최소 신호 유지 비율:%1$s%%",
"create.gui.sequenced_gearshift.title": "순서 기어쉬프트", "create.gui.sequenced_gearshift.title": "순서 기어쉬프트",
"create.gui.sequenced_gearshift.instruction": "설명", "create.gui.sequenced_gearshift.instruction": "설명",
"create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "UNLOCALIZED: Turn by angle",
"create.gui.sequenced_gearshift.instruction.turn_angle": "회전", "create.gui.sequenced_gearshift.instruction.turn_angle": "회전",
"create.gui.sequenced_gearshift.instruction.turn_angle.angle": "각도", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "각도",
"create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "UNLOCALIZED: Turn to move Piston/Pulley/Gantry",
"create.gui.sequenced_gearshift.instruction.turn_distance": "피스톤", "create.gui.sequenced_gearshift.instruction.turn_distance": "피스톤",
"create.gui.sequenced_gearshift.instruction.turn_distance.distance": "거리", "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "거리",
"create.gui.sequenced_gearshift.instruction.wait": "정지", "create.gui.sequenced_gearshift.instruction.delay.descriptive": "UNLOCALIZED: Timed Delay",
"create.gui.sequenced_gearshift.instruction.wait.duration": "지속시간", "create.gui.sequenced_gearshift.instruction.delay": "UNLOCALIZED: Delay",
"create.gui.sequenced_gearshift.instruction.delay.duration": "UNLOCALIZED: Duration",
"create.gui.sequenced_gearshift.instruction.end.descriptive": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.end": "마침", "create.gui.sequenced_gearshift.instruction.end": "마침",
"create.gui.sequenced_gearshift.instruction.await.descriptive": "UNLOCALIZED: Await new Redstone Pulse",
"create.gui.sequenced_gearshift.instruction.await": "UNLOCALIZED: Await",
"create.gui.sequenced_gearshift.speed": "속도, 방향", "create.gui.sequenced_gearshift.speed": "속도, 방향",
"create.gui.sequenced_gearshift.speed.forward": "입력된 속도, 그대로 회전", "create.gui.sequenced_gearshift.speed.forward": "입력된 속도, 그대로 회전",
"create.gui.sequenced_gearshift.speed.forward_fast": "입력된 속도의 2배, 그대로 회전", "create.gui.sequenced_gearshift.speed.forward_fast": "입력된 속도의 2배, 그대로 회전",
@ -1818,6 +1825,8 @@
"create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...", "create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...",
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles", "create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles",
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction", "create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction",
"create.ponder.brass_hand.scene_6.birbs_interesting": "UNLOCALIZED: More birbs = More interesting",
"create.ponder.brass_hand.scene_6.poi": "UNLOCALIZED: Point of Interest",
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs", "create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs",
"_": "Thank you for translating Create!" "_": "Thank you for translating Create!"

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 1184", "_": "Missing Localizations: 1193",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -685,6 +685,7 @@
"create.recipe.mechanical_crafting": "UNLOCALIZED: Mechanical Crafting", "create.recipe.mechanical_crafting": "UNLOCALIZED: Mechanical Crafting",
"create.recipe.automatic_shaped": "UNLOCALIZED: Automated Shaped Crafting", "create.recipe.automatic_shaped": "UNLOCALIZED: Automated Shaped Crafting",
"create.recipe.block_cutting": "Blok Zagen", "create.recipe.block_cutting": "Blok Zagen",
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
"create.recipe.blockzapper_upgrade": "Blokzapper", "create.recipe.blockzapper_upgrade": "Blokzapper",
"create.recipe.sandpaper_polishing": "UNLOCALIZED: Sandpaper Polishing", "create.recipe.sandpaper_polishing": "UNLOCALIZED: Sandpaper Polishing",
"create.recipe.mystery_conversion": "UNLOCALIZED: Mysterious Conversion", "create.recipe.mystery_conversion": "UNLOCALIZED: Mysterious Conversion",
@ -845,13 +846,19 @@
"create.gui.stockpile_switch.move_to_upper_at": "UNLOCALIZED: Move to upper lane at %1$s%%", "create.gui.stockpile_switch.move_to_upper_at": "UNLOCALIZED: Move to upper lane at %1$s%%",
"create.gui.sequenced_gearshift.title": "UNLOCALIZED: Sequenced Gearshift", "create.gui.sequenced_gearshift.title": "UNLOCALIZED: Sequenced Gearshift",
"create.gui.sequenced_gearshift.instruction": "UNLOCALIZED: Instruction", "create.gui.sequenced_gearshift.instruction": "UNLOCALIZED: Instruction",
"create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "UNLOCALIZED: Turn by angle",
"create.gui.sequenced_gearshift.instruction.turn_angle": "UNLOCALIZED: Turn", "create.gui.sequenced_gearshift.instruction.turn_angle": "UNLOCALIZED: Turn",
"create.gui.sequenced_gearshift.instruction.turn_angle.angle": "UNLOCALIZED: Angle", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "UNLOCALIZED: Angle",
"create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "UNLOCALIZED: Turn to move Piston/Pulley/Gantry",
"create.gui.sequenced_gearshift.instruction.turn_distance": "UNLOCALIZED: Piston", "create.gui.sequenced_gearshift.instruction.turn_distance": "UNLOCALIZED: Piston",
"create.gui.sequenced_gearshift.instruction.turn_distance.distance": "UNLOCALIZED: Distance", "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "UNLOCALIZED: Distance",
"create.gui.sequenced_gearshift.instruction.wait": "UNLOCALIZED: Wait", "create.gui.sequenced_gearshift.instruction.delay.descriptive": "UNLOCALIZED: Timed Delay",
"create.gui.sequenced_gearshift.instruction.wait.duration": "UNLOCALIZED: Duration", "create.gui.sequenced_gearshift.instruction.delay": "UNLOCALIZED: Delay",
"create.gui.sequenced_gearshift.instruction.delay.duration": "UNLOCALIZED: Duration",
"create.gui.sequenced_gearshift.instruction.end.descriptive": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.end": "UNLOCALIZED: End", "create.gui.sequenced_gearshift.instruction.end": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.await.descriptive": "UNLOCALIZED: Await new Redstone Pulse",
"create.gui.sequenced_gearshift.instruction.await": "UNLOCALIZED: Await",
"create.gui.sequenced_gearshift.speed": "UNLOCALIZED: Speed, Direction", "create.gui.sequenced_gearshift.speed": "UNLOCALIZED: Speed, Direction",
"create.gui.sequenced_gearshift.speed.forward": "UNLOCALIZED: Input speed, Forwards", "create.gui.sequenced_gearshift.speed.forward": "UNLOCALIZED: Input speed, Forwards",
"create.gui.sequenced_gearshift.speed.forward_fast": "UNLOCALIZED: Double speed, Forwards", "create.gui.sequenced_gearshift.speed.forward_fast": "UNLOCALIZED: Double speed, Forwards",
@ -1818,6 +1825,8 @@
"create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...", "create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...",
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles", "create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles",
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction", "create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction",
"create.ponder.brass_hand.scene_6.birbs_interesting": "UNLOCALIZED: More birbs = More interesting",
"create.ponder.brass_hand.scene_6.poi": "UNLOCALIZED: Point of Interest",
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs", "create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs",
"_": "Thank you for translating Create!" "_": "Thank you for translating Create!"

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 1250", "_": "Missing Localizations: 1259",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -685,6 +685,7 @@
"create.recipe.mechanical_crafting": "UNLOCALIZED: Mechanical Crafting", "create.recipe.mechanical_crafting": "UNLOCALIZED: Mechanical Crafting",
"create.recipe.automatic_shaped": "UNLOCALIZED: Automated Shaped Crafting", "create.recipe.automatic_shaped": "UNLOCALIZED: Automated Shaped Crafting",
"create.recipe.block_cutting": "UNLOCALIZED: Block Cutting", "create.recipe.block_cutting": "UNLOCALIZED: Block Cutting",
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
"create.recipe.blockzapper_upgrade": "Blockzapper Portátil", "create.recipe.blockzapper_upgrade": "Blockzapper Portátil",
"create.recipe.sandpaper_polishing": "UNLOCALIZED: Sandpaper Polishing", "create.recipe.sandpaper_polishing": "UNLOCALIZED: Sandpaper Polishing",
"create.recipe.mystery_conversion": "UNLOCALIZED: Mysterious Conversion", "create.recipe.mystery_conversion": "UNLOCALIZED: Mysterious Conversion",
@ -845,13 +846,19 @@
"create.gui.stockpile_switch.move_to_upper_at": "UNLOCALIZED: Move to upper lane at %1$s%%", "create.gui.stockpile_switch.move_to_upper_at": "UNLOCALIZED: Move to upper lane at %1$s%%",
"create.gui.sequenced_gearshift.title": "UNLOCALIZED: Sequenced Gearshift", "create.gui.sequenced_gearshift.title": "UNLOCALIZED: Sequenced Gearshift",
"create.gui.sequenced_gearshift.instruction": "UNLOCALIZED: Instruction", "create.gui.sequenced_gearshift.instruction": "UNLOCALIZED: Instruction",
"create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "UNLOCALIZED: Turn by angle",
"create.gui.sequenced_gearshift.instruction.turn_angle": "UNLOCALIZED: Turn", "create.gui.sequenced_gearshift.instruction.turn_angle": "UNLOCALIZED: Turn",
"create.gui.sequenced_gearshift.instruction.turn_angle.angle": "UNLOCALIZED: Angle", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "UNLOCALIZED: Angle",
"create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "UNLOCALIZED: Turn to move Piston/Pulley/Gantry",
"create.gui.sequenced_gearshift.instruction.turn_distance": "UNLOCALIZED: Piston", "create.gui.sequenced_gearshift.instruction.turn_distance": "UNLOCALIZED: Piston",
"create.gui.sequenced_gearshift.instruction.turn_distance.distance": "UNLOCALIZED: Distance", "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "UNLOCALIZED: Distance",
"create.gui.sequenced_gearshift.instruction.wait": "UNLOCALIZED: Wait", "create.gui.sequenced_gearshift.instruction.delay.descriptive": "UNLOCALIZED: Timed Delay",
"create.gui.sequenced_gearshift.instruction.wait.duration": "UNLOCALIZED: Duration", "create.gui.sequenced_gearshift.instruction.delay": "UNLOCALIZED: Delay",
"create.gui.sequenced_gearshift.instruction.delay.duration": "UNLOCALIZED: Duration",
"create.gui.sequenced_gearshift.instruction.end.descriptive": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.end": "UNLOCALIZED: End", "create.gui.sequenced_gearshift.instruction.end": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.await.descriptive": "UNLOCALIZED: Await new Redstone Pulse",
"create.gui.sequenced_gearshift.instruction.await": "UNLOCALIZED: Await",
"create.gui.sequenced_gearshift.speed": "UNLOCALIZED: Speed, Direction", "create.gui.sequenced_gearshift.speed": "UNLOCALIZED: Speed, Direction",
"create.gui.sequenced_gearshift.speed.forward": "UNLOCALIZED: Input speed, Forwards", "create.gui.sequenced_gearshift.speed.forward": "UNLOCALIZED: Input speed, Forwards",
"create.gui.sequenced_gearshift.speed.forward_fast": "UNLOCALIZED: Double speed, Forwards", "create.gui.sequenced_gearshift.speed.forward_fast": "UNLOCALIZED: Double speed, Forwards",
@ -1818,6 +1825,8 @@
"create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...", "create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...",
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles", "create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles",
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction", "create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction",
"create.ponder.brass_hand.scene_6.birbs_interesting": "UNLOCALIZED: More birbs = More interesting",
"create.ponder.brass_hand.scene_6.poi": "UNLOCALIZED: Point of Interest",
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs", "create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs",
"_": "Thank you for translating Create!" "_": "Thank you for translating Create!"

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 34", "_": "Missing Localizations: 45",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -685,6 +685,7 @@
"create.recipe.mechanical_crafting": "Механическое создание", "create.recipe.mechanical_crafting": "Механическое создание",
"create.recipe.automatic_shaped": "Автоматическая форменная сборка", "create.recipe.automatic_shaped": "Автоматическая форменная сборка",
"create.recipe.block_cutting": "Резка блока", "create.recipe.block_cutting": "Резка блока",
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
"create.recipe.blockzapper_upgrade": "Ручная блоковая пушка", "create.recipe.blockzapper_upgrade": "Ручная блоковая пушка",
"create.recipe.sandpaper_polishing": "Полировка наждачной бумагой", "create.recipe.sandpaper_polishing": "Полировка наждачной бумагой",
"create.recipe.mystery_conversion": "Хроматический метаморфоз", "create.recipe.mystery_conversion": "Хроматический метаморфоз",
@ -845,13 +846,19 @@
"create.gui.stockpile_switch.move_to_upper_at": "Двигаться к верхней линии при %1$s%%", "create.gui.stockpile_switch.move_to_upper_at": "Двигаться к верхней линии при %1$s%%",
"create.gui.sequenced_gearshift.title": "Последовательное переключение передач", "create.gui.sequenced_gearshift.title": "Последовательное переключение передач",
"create.gui.sequenced_gearshift.instruction": "Инструкция", "create.gui.sequenced_gearshift.instruction": "Инструкция",
"create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "UNLOCALIZED: Turn by angle",
"create.gui.sequenced_gearshift.instruction.turn_angle": "Повернуть", "create.gui.sequenced_gearshift.instruction.turn_angle": "Повернуть",
"create.gui.sequenced_gearshift.instruction.turn_angle.angle": "Угол", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "Угол",
"create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "UNLOCALIZED: Turn to move Piston/Pulley/Gantry",
"create.gui.sequenced_gearshift.instruction.turn_distance": "Поршень", "create.gui.sequenced_gearshift.instruction.turn_distance": "Поршень",
"create.gui.sequenced_gearshift.instruction.turn_distance.distance": "Расстояние", "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "Расстояние",
"create.gui.sequenced_gearshift.instruction.wait": "Перерыв", "create.gui.sequenced_gearshift.instruction.delay.descriptive": "UNLOCALIZED: Timed Delay",
"create.gui.sequenced_gearshift.instruction.wait.duration": "Продолжительность", "create.gui.sequenced_gearshift.instruction.delay": "UNLOCALIZED: Delay",
"create.gui.sequenced_gearshift.instruction.delay.duration": "UNLOCALIZED: Duration",
"create.gui.sequenced_gearshift.instruction.end.descriptive": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.end": "Конец", "create.gui.sequenced_gearshift.instruction.end": "Конец",
"create.gui.sequenced_gearshift.instruction.await.descriptive": "UNLOCALIZED: Await new Redstone Pulse",
"create.gui.sequenced_gearshift.instruction.await": "UNLOCALIZED: Await",
"create.gui.sequenced_gearshift.speed": "Скорость, Направление", "create.gui.sequenced_gearshift.speed": "Скорость, Направление",
"create.gui.sequenced_gearshift.speed.forward": "Скорость ввода, вперед", "create.gui.sequenced_gearshift.speed.forward": "Скорость ввода, вперед",
"create.gui.sequenced_gearshift.speed.forward_fast": "Двойная скорость, вперед", "create.gui.sequenced_gearshift.speed.forward_fast": "Двойная скорость, вперед",
@ -1818,6 +1825,8 @@
"create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...", "create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...",
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles", "create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles",
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction", "create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction",
"create.ponder.brass_hand.scene_6.birbs_interesting": "UNLOCALIZED: More birbs = More interesting",
"create.ponder.brass_hand.scene_6.poi": "UNLOCALIZED: Point of Interest",
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs", "create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs",
"_": "Thank you for translating Create!" "_": "Thank you for translating Create!"

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 32", "_": "Missing Localizations: 43",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -685,6 +685,7 @@
"create.recipe.mechanical_crafting": "自动合成", "create.recipe.mechanical_crafting": "自动合成",
"create.recipe.automatic_shaped": "自动合成", "create.recipe.automatic_shaped": "自动合成",
"create.recipe.block_cutting": "方块切割", "create.recipe.block_cutting": "方块切割",
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
"create.recipe.blockzapper_upgrade": "手持式方块放置器", "create.recipe.blockzapper_upgrade": "手持式方块放置器",
"create.recipe.sandpaper_polishing": "砂纸打磨", "create.recipe.sandpaper_polishing": "砂纸打磨",
"create.recipe.mystery_conversion": "神秘转化", "create.recipe.mystery_conversion": "神秘转化",
@ -845,13 +846,19 @@
"create.gui.stockpile_switch.move_to_upper_at": "移至上线%1$s%%", "create.gui.stockpile_switch.move_to_upper_at": "移至上线%1$s%%",
"create.gui.sequenced_gearshift.title": "可编程齿轮箱", "create.gui.sequenced_gearshift.title": "可编程齿轮箱",
"create.gui.sequenced_gearshift.instruction": "指令", "create.gui.sequenced_gearshift.instruction": "指令",
"create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "UNLOCALIZED: Turn by angle",
"create.gui.sequenced_gearshift.instruction.turn_angle": "旋转", "create.gui.sequenced_gearshift.instruction.turn_angle": "旋转",
"create.gui.sequenced_gearshift.instruction.turn_angle.angle": "角度", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "角度",
"create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "UNLOCALIZED: Turn to move Piston/Pulley/Gantry",
"create.gui.sequenced_gearshift.instruction.turn_distance": "驱动活塞", "create.gui.sequenced_gearshift.instruction.turn_distance": "驱动活塞",
"create.gui.sequenced_gearshift.instruction.turn_distance.distance": "距离", "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "距离",
"create.gui.sequenced_gearshift.instruction.wait": "等待", "create.gui.sequenced_gearshift.instruction.delay.descriptive": "UNLOCALIZED: Timed Delay",
"create.gui.sequenced_gearshift.instruction.wait.duration": "间隔", "create.gui.sequenced_gearshift.instruction.delay": "UNLOCALIZED: Delay",
"create.gui.sequenced_gearshift.instruction.delay.duration": "UNLOCALIZED: Duration",
"create.gui.sequenced_gearshift.instruction.end.descriptive": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.end": "停止", "create.gui.sequenced_gearshift.instruction.end": "停止",
"create.gui.sequenced_gearshift.instruction.await.descriptive": "UNLOCALIZED: Await new Redstone Pulse",
"create.gui.sequenced_gearshift.instruction.await": "UNLOCALIZED: Await",
"create.gui.sequenced_gearshift.speed": "速度,速度方向", "create.gui.sequenced_gearshift.speed": "速度,速度方向",
"create.gui.sequenced_gearshift.speed.forward": "一倍速,正向", "create.gui.sequenced_gearshift.speed.forward": "一倍速,正向",
"create.gui.sequenced_gearshift.speed.forward_fast": "两倍速,正向", "create.gui.sequenced_gearshift.speed.forward_fast": "两倍速,正向",
@ -1818,6 +1825,8 @@
"create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...", "create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...",
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles", "create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles",
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction", "create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction",
"create.ponder.brass_hand.scene_6.birbs_interesting": "UNLOCALIZED: More birbs = More interesting",
"create.ponder.brass_hand.scene_6.poi": "UNLOCALIZED: Point of Interest",
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs", "create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs",
"_": "Thank you for translating Create!" "_": "Thank you for translating Create!"

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 37", "_": "Missing Localizations: 48",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -685,6 +685,7 @@
"create.recipe.mechanical_crafting": "自動合成", "create.recipe.mechanical_crafting": "自動合成",
"create.recipe.automatic_shaped": "自動合成", "create.recipe.automatic_shaped": "自動合成",
"create.recipe.block_cutting": "方塊切割", "create.recipe.block_cutting": "方塊切割",
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
"create.recipe.blockzapper_upgrade": "方塊放置器", "create.recipe.blockzapper_upgrade": "方塊放置器",
"create.recipe.sandpaper_polishing": "砂紙打磨", "create.recipe.sandpaper_polishing": "砂紙打磨",
"create.recipe.mystery_conversion": "神秘轉化", "create.recipe.mystery_conversion": "神秘轉化",
@ -845,13 +846,19 @@
"create.gui.stockpile_switch.move_to_upper_at": "移至上線%1$s%%", "create.gui.stockpile_switch.move_to_upper_at": "移至上線%1$s%%",
"create.gui.sequenced_gearshift.title": "可程式化齒輪箱", "create.gui.sequenced_gearshift.title": "可程式化齒輪箱",
"create.gui.sequenced_gearshift.instruction": "指令", "create.gui.sequenced_gearshift.instruction": "指令",
"create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "UNLOCALIZED: Turn by angle",
"create.gui.sequenced_gearshift.instruction.turn_angle": "旋轉", "create.gui.sequenced_gearshift.instruction.turn_angle": "旋轉",
"create.gui.sequenced_gearshift.instruction.turn_angle.angle": "角度", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "角度",
"create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "UNLOCALIZED: Turn to move Piston/Pulley/Gantry",
"create.gui.sequenced_gearshift.instruction.turn_distance": "驅動活塞", "create.gui.sequenced_gearshift.instruction.turn_distance": "驅動活塞",
"create.gui.sequenced_gearshift.instruction.turn_distance.distance": "距離", "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "距離",
"create.gui.sequenced_gearshift.instruction.wait": "等待", "create.gui.sequenced_gearshift.instruction.delay.descriptive": "UNLOCALIZED: Timed Delay",
"create.gui.sequenced_gearshift.instruction.wait.duration": "間隔", "create.gui.sequenced_gearshift.instruction.delay": "UNLOCALIZED: Delay",
"create.gui.sequenced_gearshift.instruction.delay.duration": "UNLOCALIZED: Duration",
"create.gui.sequenced_gearshift.instruction.end.descriptive": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.end": "停止", "create.gui.sequenced_gearshift.instruction.end": "停止",
"create.gui.sequenced_gearshift.instruction.await.descriptive": "UNLOCALIZED: Await new Redstone Pulse",
"create.gui.sequenced_gearshift.instruction.await": "UNLOCALIZED: Await",
"create.gui.sequenced_gearshift.speed": "速度,速度方向", "create.gui.sequenced_gearshift.speed": "速度,速度方向",
"create.gui.sequenced_gearshift.speed.forward": "一倍速,正向", "create.gui.sequenced_gearshift.speed.forward": "一倍速,正向",
"create.gui.sequenced_gearshift.speed.forward_fast": "兩倍速,正向", "create.gui.sequenced_gearshift.speed.forward_fast": "兩倍速,正向",
@ -1818,6 +1825,8 @@
"create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...", "create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...",
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles", "create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles",
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction", "create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction",
"create.ponder.brass_hand.scene_6.birbs_interesting": "UNLOCALIZED: More birbs = More interesting",
"create.ponder.brass_hand.scene_6.poi": "UNLOCALIZED: Point of Interest",
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs", "create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs",
"_": "Thank you for translating Create!" "_": "Thank you for translating Create!"

View file

@ -17,13 +17,29 @@
}, },
"criteria": { "criteria": {
"0": { "0": {
"trigger": "create:bracket_shaft" "trigger": "create:bracket_apply",
"conditions": {
"accepted_entries": [
"create:shaft"
]
}
}, },
"1": { "1": {
"trigger": "create:bracket_cog" "trigger": "create:bracket_apply",
"conditions": {
"accepted_entries": [
"create:cogwheel",
"create:large_cogwheel"
]
}
}, },
"2": { "2": {
"trigger": "create:bracket_pipe" "trigger": "create:bracket_apply",
"conditions": {
"accepted_entries": [
"create:fluid_pipe"
]
}
} }
}, },
"requirements": [ "requirements": [

View file

@ -17,7 +17,12 @@
}, },
"criteria": { "criteria": {
"0": { "0": {
"trigger": "create:fan" "trigger": "create:fan_processing",
"conditions": {
"accepted_entries": [
"NONE"
]
}
} }
}, },
"requirements": [ "requirements": [

View file

@ -17,7 +17,12 @@
}, },
"criteria": { "criteria": {
"0": { "0": {
"trigger": "create:fan_lava" "trigger": "create:fan_processing",
"conditions": {
"accepted_entries": [
"BLASTING"
]
}
} }
}, },
"requirements": [ "requirements": [

View file

@ -17,7 +17,12 @@
}, },
"criteria": { "criteria": {
"0": { "0": {
"trigger": "create:fan_smoke" "trigger": "create:fan_processing",
"conditions": {
"accepted_entries": [
"SMOKING"
]
}
} }
}, },
"requirements": [ "requirements": [

View file

@ -17,7 +17,12 @@
}, },
"criteria": { "criteria": {
"0": { "0": {
"trigger": "create:fan_water" "trigger": "create:fan_processing",
"conditions": {
"accepted_entries": [
"SPLASHING"
]
}
} }
}, },
"requirements": [ "requirements": [

View file

@ -17,7 +17,12 @@
}, },
"criteria": { "criteria": {
"0": { "0": {
"trigger": "create:infinite_chocolate" "trigger": "create:infinite_fluid",
"conditions": {
"accepted_entries": [
"create:chocolate"
]
}
} }
}, },
"requirements": [ "requirements": [

View file

@ -17,7 +17,12 @@
}, },
"criteria": { "criteria": {
"0": { "0": {
"trigger": "create:infinite_lava" "trigger": "create:infinite_fluid",
"conditions": {
"accepted_entries": [
"minecraft:lava"
]
}
} }
}, },
"requirements": [ "requirements": [

View file

@ -17,7 +17,12 @@
}, },
"criteria": { "criteria": {
"0": { "0": {
"trigger": "create:infinite_water" "trigger": "create:infinite_fluid",
"conditions": {
"accepted_entries": [
"minecraft:water"
]
}
} }
}, },
"requirements": [ "requirements": [

View file

@ -23,12 +23,6 @@
} }
}, },
"1": { "1": {
"trigger": "create:kinetic_block",
"conditions": {
"block": "create:mechanical_mixer"
}
},
"2": {
"trigger": "create:mixer" "trigger": "create:mixer"
} }
}, },
@ -38,9 +32,6 @@
], ],
[ [
"1" "1"
],
[
"2"
] ]
] ]
} }

View file

@ -7,15 +7,21 @@ import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.function.Supplier;
import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.content.contraptions.base.KineticRenderMaterials;
import com.simibubi.create.content.contraptions.base.RotatingData;
import com.simibubi.create.content.contraptions.fluids.FluidTransportBehaviour.AttachmentTypes; import com.simibubi.create.content.contraptions.fluids.FluidTransportBehaviour.AttachmentTypes;
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock.HeatLevel; import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock.HeatLevel;
import com.simibubi.create.content.contraptions.relays.belt.BeltData;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.Iterate;
import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.MatrixStacker;
import com.simibubi.create.foundation.utility.SuperByteBuffer;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.model.IBakedModel;
@ -223,4 +229,30 @@ public class AllBlockPartials {
return CreateClient.bufferCache.renderDirectionalPartial(this, referenceState, facing, ms); return CreateClient.bufferCache.renderDirectionalPartial(this, referenceState, facing, ms);
} }
public InstancedModel<RotatingData> renderOnRotating(InstancedTileRenderer<?> ctx, BlockState referenceState) {
return ctx.getMaterial(KineticRenderMaterials.ROTATING).getModel(this, referenceState);
}
public InstancedModel<BeltData> renderOnBelt(InstancedTileRenderer<?> ctx, BlockState referenceState) {
return ctx.getMaterial(KineticRenderMaterials.BELTS).getModel(this, referenceState);
}
public InstancedModel<RotatingData> renderOnDirectionalSouthRotating(InstancedTileRenderer<?> dispatcher, BlockState referenceState) {
Direction facing = referenceState.get(FACING);
return renderOnDirectionalSouthRotating(dispatcher, referenceState, facing);
}
public InstancedModel<RotatingData> renderOnDirectionalSouthRotating(InstancedTileRenderer<?> dispatcher, BlockState referenceState, Direction facing) {
Supplier<MatrixStack> ms = () -> {
MatrixStack stack = new MatrixStack();
MatrixStacker.of(stack)
.centre()
.rotateY(AngleHelper.horizontalAngle(facing))
.rotateX(AngleHelper.verticalAngle(facing))
.unCentre();
return stack;
};
return dispatcher.getMaterial(KineticRenderMaterials.ROTATING).getModel(this, referenceState, facing, ms);
}
} }

View file

@ -408,10 +408,10 @@ public class AllBlocks {
REGISTRATE.block("crushing_wheel_controller", CrushingWheelControllerBlock::new) REGISTRATE.block("crushing_wheel_controller", CrushingWheelControllerBlock::new)
.initialProperties(() -> Blocks.AIR) .initialProperties(() -> Blocks.AIR)
.blockstate((c, p) -> p.getVariantBuilder(c.get()) .blockstate((c, p) -> p.getVariantBuilder(c.get())
.forAllStates(state -> ConfiguredModel.builder() .forAllStatesExcept(state -> ConfiguredModel.builder()
.modelFile(p.models() .modelFile(p.models()
.getExistingFile(p.mcLoc("block/air"))) .getExistingFile(p.mcLoc("block/air")))
.build())) .build(), CrushingWheelControllerBlock.FACING))
.register(); .register();
public static final BlockEntry<MechanicalPressBlock> MECHANICAL_PRESS = public static final BlockEntry<MechanicalPressBlock> MECHANICAL_PRESS =

View file

@ -1,7 +1,11 @@
package com.simibubi.create; package com.simibubi.create;
import java.util.HashMap;
import java.util.Map;
import com.simibubi.create.foundation.block.IBlockVertexColor; import com.simibubi.create.foundation.block.IBlockVertexColor;
import com.simibubi.create.foundation.block.render.ColoredVertexModel; import com.simibubi.create.foundation.block.render.ColoredVertexModel;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.RedstoneWireBlock; import net.minecraft.block.RedstoneWireBlock;
@ -18,9 +22,6 @@ import net.minecraft.world.GrassColors;
import net.minecraft.world.ILightReader; import net.minecraft.world.ILightReader;
import net.minecraft.world.biome.BiomeColors; import net.minecraft.world.biome.BiomeColors;
import java.util.HashMap;
import java.util.Map;
public class AllColorHandlers { public class AllColorHandlers {
private final Map<Block, IBlockVertexColor> coloredVertexBlocks = new HashMap<>(); private final Map<Block, IBlockVertexColor> coloredVertexBlocks = new HashMap<>();

View file

@ -2,12 +2,11 @@ package com.simibubi.create;
import com.simibubi.create.content.contraptions.components.actors.SeatEntity; import com.simibubi.create.content.contraptions.components.actors.SeatEntity;
import com.simibubi.create.content.contraptions.components.structureMovement.AbstractContraptionEntity; import com.simibubi.create.content.contraptions.components.structureMovement.AbstractContraptionEntity;
import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionEntityRenderer;
import com.simibubi.create.content.contraptions.components.structureMovement.ControlledContraptionEntity; import com.simibubi.create.content.contraptions.components.structureMovement.ControlledContraptionEntity;
import com.simibubi.create.content.contraptions.components.structureMovement.ControlledContraptionEntityRenderer;
import com.simibubi.create.content.contraptions.components.structureMovement.OrientedContraptionEntity; import com.simibubi.create.content.contraptions.components.structureMovement.OrientedContraptionEntity;
import com.simibubi.create.content.contraptions.components.structureMovement.OrientedContraptionEntityRenderer; import com.simibubi.create.content.contraptions.components.structureMovement.OrientedContraptionEntityRenderer;
import com.simibubi.create.content.contraptions.components.structureMovement.gantry.GantryContraptionEntity; import com.simibubi.create.content.contraptions.components.structureMovement.gantry.GantryContraptionEntity;
import com.simibubi.create.content.contraptions.components.structureMovement.gantry.GantryContraptionEntityRenderer;
import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueEntity; import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueEntity;
import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueRenderer; import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueRenderer;
import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.Lang;
@ -62,11 +61,11 @@ public class AllEntityTypes {
@OnlyIn(value = Dist.CLIENT) @OnlyIn(value = Dist.CLIENT)
public static void registerRenderers() { public static void registerRenderers() {
RenderingRegistry.registerEntityRenderingHandler(CONTROLLED_CONTRAPTION.get(), RenderingRegistry.registerEntityRenderingHandler(CONTROLLED_CONTRAPTION.get(),
ControlledContraptionEntityRenderer::new); ContraptionEntityRenderer::new);
RenderingRegistry.registerEntityRenderingHandler(ORIENTED_CONTRAPTION.get(), RenderingRegistry.registerEntityRenderingHandler(ORIENTED_CONTRAPTION.get(),
OrientedContraptionEntityRenderer::new); OrientedContraptionEntityRenderer::new);
RenderingRegistry.registerEntityRenderingHandler(GANTRY_CONTRAPTION.get(), RenderingRegistry.registerEntityRenderingHandler(GANTRY_CONTRAPTION.get(),
GantryContraptionEntityRenderer::new); ContraptionEntityRenderer::new);
RenderingRegistry.registerEntityRenderingHandler(SUPER_GLUE.get(), SuperGlueRenderer::new); RenderingRegistry.registerEntityRenderingHandler(SUPER_GLUE.get(), SuperGlueRenderer::new);
RenderingRegistry.registerEntityRenderingHandler(SEAT.get(), SeatEntity.Render::new); RenderingRegistry.registerEntityRenderingHandler(SEAT.get(), SeatEntity.Render::new);
} }

View file

@ -284,6 +284,7 @@ public class AllItems {
.register(); .register();
} }
@SuppressWarnings("unused")
private static ItemEntry<HiddenIngredientItem> hiddenIngredient(String name) { private static ItemEntry<HiddenIngredientItem> hiddenIngredient(String name) {
return REGISTRATE.item(name, HiddenIngredientItem::new) return REGISTRATE.item(name, HiddenIngredientItem::new)
.register(); .register();

View file

@ -107,7 +107,10 @@ public class AllShapes {
.forHorizontal(Direction.SOUTH), .forHorizontal(Direction.SOUTH),
PUMP = shape(2, 0, 2, 14, 5, 14).add(4, 0, 4, 12, 16, 12) PUMP = shape(2, 0, 2, 14, 5, 14).add(4, 0, 4, 12, 16, 12)
.add(3, 12, 3, 13, 16, 13) .add(3, 12, 3, 13, 16, 13)
.forDirectional(Direction.UP) .forDirectional(Direction.UP),
CRUSHING_WHEEL_CONTROLLER_COLLISION = shape(0, 0, 0, 16, 13, 16)
.forDirectional(Direction.DOWN)
; ;
@ -145,7 +148,8 @@ public class AllShapes {
HEATER_BLOCK_SHAPE = shape(2, 0, 2, 14, 14, 14).add(0, 0, 0, 16, 4, 16) HEATER_BLOCK_SHAPE = shape(2, 0, 2, 14, 14, 14).add(0, 0, 0, 16, 4, 16)
.build(), .build(),
HEATER_BLOCK_SPECIAL_COLLISION_SHAPE = shape(0, 0, 0, 16, 4, 16).build(), HEATER_BLOCK_SPECIAL_COLLISION_SHAPE = shape(0, 0, 0, 16, 4, 16).build(),
CRUSHING_WHEEL_COLLISION_SHAPE = cuboid(0, 0, 0, 16, 22, 16), SEAT = cuboid(0, 0, 0, 16, 8, 16), CRUSHING_WHEEL_COLLISION_SHAPE = cuboid(0, 0, 0, 16, 16, 16),
SEAT = cuboid(0, 0, 0, 16, 8, 16),
SEAT_COLLISION = cuboid(0, 0, 0, 16, 6, 16), SEAT_COLLISION = cuboid(0, 0, 0, 16, 6, 16),
MECHANICAL_PROCESSOR_SHAPE = shape(VoxelShapes.fullCube()).erase(4, 0, 4, 12, 16, 12) MECHANICAL_PROCESSOR_SHAPE = shape(VoxelShapes.fullCube()).erase(4, 0, 4, 12, 16, 12)
.build(), .build(),

View file

@ -51,9 +51,9 @@ public class AllSpriteShifts {
FLUID_TANK = getCT(CTType.CROSS, "fluid_tank"), FLUID_TANK = getCT(CTType.CROSS, "fluid_tank"),
CREATIVE_FLUID_TANK = getCT(CTType.CROSS, "creative_fluid_tank"); CREATIVE_FLUID_TANK = getCT(CTType.CROSS, "creative_fluid_tank");
public static final SpriteShiftEntry BELT = SpriteShifter.get("block/belt", "block/belt_animated"), public static final SpriteShiftEntry BELT = SpriteShifter.get("block/belt", "block/belt_scroll"),
BELT_OFFSET = SpriteShifter.get("block/belt_offset", "block/belt_animated"), BELT_OFFSET = SpriteShifter.get("block/belt_offset", "block/belt_scroll"),
BELT_DIAGONAL = SpriteShifter.get("block/belt_diagonal", "block/belt_diagonal_animated"), BELT_DIAGONAL = SpriteShifter.get("block/belt_diagonal", "block/belt_diagonal_scroll"),
ANDESIDE_BELT_CASING = SpriteShifter.get("block/brass_casing_belt", "block/andesite_casing_belt"), ANDESIDE_BELT_CASING = SpriteShifter.get("block/brass_casing_belt", "block/andesite_casing_belt"),
CRAFTER_THINGIES = SpriteShifter.get("block/crafter_thingies", "block/crafter_thingies"); CRAFTER_THINGIES = SpriteShifter.get("block/crafter_thingies", "block/crafter_thingies");
@ -92,9 +92,9 @@ public class AllSpriteShifts {
for (DyeColor color : DyeColor.values()) { for (DyeColor color : DyeColor.values()) {
String id = color.getName(); String id = color.getName();
DYED_BELTS.put(color, SpriteShifter.get("block/belt", "block/belt/" + id)); DYED_BELTS.put(color, SpriteShifter.get("block/belt", "block/belt/" + id + "_scroll"));
DYED_OFFSET_BELTS.put(color, SpriteShifter.get("block/belt_offset", "block/belt/" + id)); DYED_OFFSET_BELTS.put(color, SpriteShifter.get("block/belt_offset", "block/belt/" + id + "_scroll"));
DYED_DIAGONAL_BELTS.put(color, SpriteShifter.get("block/belt_diagonal", "block/belt/" + id + "_diagonal")); DYED_DIAGONAL_BELTS.put(color, SpriteShifter.get("block/belt_diagonal", "block/belt/" + id + "_diagonal_scroll"));
} }
} }

View file

@ -1,6 +1,12 @@
package com.simibubi.create; package com.simibubi.create;
import com.simibubi.create.content.contraptions.base.BackHalfShaftInstance;
import com.simibubi.create.content.contraptions.base.HalfShaftInstance;
import com.simibubi.create.content.contraptions.base.HorizontalHalfShaftInstance;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.content.contraptions.base.ShaftlessCogInstance;
import com.simibubi.create.content.contraptions.base.SingleRotatingInstance;
import com.simibubi.create.content.contraptions.components.actors.DrillInstance;
import com.simibubi.create.content.contraptions.components.actors.DrillRenderer; import com.simibubi.create.content.contraptions.components.actors.DrillRenderer;
import com.simibubi.create.content.contraptions.components.actors.DrillTileEntity; import com.simibubi.create.content.contraptions.components.actors.DrillTileEntity;
import com.simibubi.create.content.contraptions.components.actors.HarvesterRenderer; import com.simibubi.create.content.contraptions.components.actors.HarvesterRenderer;
@ -10,6 +16,7 @@ import com.simibubi.create.content.contraptions.components.actors.PortableItemIn
import com.simibubi.create.content.contraptions.components.actors.PortableStorageInterfaceRenderer; import com.simibubi.create.content.contraptions.components.actors.PortableStorageInterfaceRenderer;
import com.simibubi.create.content.contraptions.components.clock.CuckooClockRenderer; import com.simibubi.create.content.contraptions.components.clock.CuckooClockRenderer;
import com.simibubi.create.content.contraptions.components.clock.CuckooClockTileEntity; import com.simibubi.create.content.contraptions.components.clock.CuckooClockTileEntity;
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterInstance;
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterRenderer; import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterRenderer;
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterTileEntity; import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterTileEntity;
import com.simibubi.create.content.contraptions.components.crank.HandCrankRenderer; import com.simibubi.create.content.contraptions.components.crank.HandCrankRenderer;
@ -20,11 +27,14 @@ import com.simibubi.create.content.contraptions.components.deployer.DeployerRend
import com.simibubi.create.content.contraptions.components.deployer.DeployerTileEntity; import com.simibubi.create.content.contraptions.components.deployer.DeployerTileEntity;
import com.simibubi.create.content.contraptions.components.fan.EncasedFanRenderer; import com.simibubi.create.content.contraptions.components.fan.EncasedFanRenderer;
import com.simibubi.create.content.contraptions.components.fan.EncasedFanTileEntity; import com.simibubi.create.content.contraptions.components.fan.EncasedFanTileEntity;
import com.simibubi.create.content.contraptions.components.fan.FanInstance;
import com.simibubi.create.content.contraptions.components.fan.NozzleTileEntity; import com.simibubi.create.content.contraptions.components.fan.NozzleTileEntity;
import com.simibubi.create.content.contraptions.components.flywheel.FlyWheelInstance;
import com.simibubi.create.content.contraptions.components.flywheel.FlywheelRenderer; import com.simibubi.create.content.contraptions.components.flywheel.FlywheelRenderer;
import com.simibubi.create.content.contraptions.components.flywheel.FlywheelTileEntity; import com.simibubi.create.content.contraptions.components.flywheel.FlywheelTileEntity;
import com.simibubi.create.content.contraptions.components.flywheel.engine.EngineRenderer; import com.simibubi.create.content.contraptions.components.flywheel.engine.EngineRenderer;
import com.simibubi.create.content.contraptions.components.flywheel.engine.FurnaceEngineTileEntity; import com.simibubi.create.content.contraptions.components.flywheel.engine.FurnaceEngineTileEntity;
import com.simibubi.create.content.contraptions.components.millstone.MillStoneCogInstance;
import com.simibubi.create.content.contraptions.components.millstone.MillstoneRenderer; import com.simibubi.create.content.contraptions.components.millstone.MillstoneRenderer;
import com.simibubi.create.content.contraptions.components.millstone.MillstoneTileEntity; import com.simibubi.create.content.contraptions.components.millstone.MillstoneTileEntity;
import com.simibubi.create.content.contraptions.components.mixer.MechanicalMixerRenderer; import com.simibubi.create.content.contraptions.components.mixer.MechanicalMixerRenderer;
@ -33,6 +43,7 @@ import com.simibubi.create.content.contraptions.components.motor.CreativeMotorRe
import com.simibubi.create.content.contraptions.components.motor.CreativeMotorTileEntity; import com.simibubi.create.content.contraptions.components.motor.CreativeMotorTileEntity;
import com.simibubi.create.content.contraptions.components.press.MechanicalPressRenderer; import com.simibubi.create.content.contraptions.components.press.MechanicalPressRenderer;
import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity; import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity;
import com.simibubi.create.content.contraptions.components.saw.SawInstance;
import com.simibubi.create.content.contraptions.components.saw.SawRenderer; import com.simibubi.create.content.contraptions.components.saw.SawRenderer;
import com.simibubi.create.content.contraptions.components.saw.SawTileEntity; import com.simibubi.create.content.contraptions.components.saw.SawTileEntity;
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.BearingRenderer; import com.simibubi.create.content.contraptions.components.structureMovement.bearing.BearingRenderer;
@ -49,6 +60,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.pul
import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyTileEntity; import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyTileEntity;
import com.simibubi.create.content.contraptions.components.turntable.TurntableTileEntity; import com.simibubi.create.content.contraptions.components.turntable.TurntableTileEntity;
import com.simibubi.create.content.contraptions.components.waterwheel.WaterWheelTileEntity; import com.simibubi.create.content.contraptions.components.waterwheel.WaterWheelTileEntity;
import com.simibubi.create.content.contraptions.fluids.PumpCogInstance;
import com.simibubi.create.content.contraptions.fluids.PumpRenderer; import com.simibubi.create.content.contraptions.fluids.PumpRenderer;
import com.simibubi.create.content.contraptions.fluids.PumpTileEntity; import com.simibubi.create.content.contraptions.fluids.PumpTileEntity;
import com.simibubi.create.content.contraptions.fluids.actors.HosePulleyRenderer; import com.simibubi.create.content.contraptions.fluids.actors.HosePulleyRenderer;
@ -74,6 +86,7 @@ import com.simibubi.create.content.contraptions.relays.advanced.GantryShaftTileE
import com.simibubi.create.content.contraptions.relays.advanced.SpeedControllerRenderer; import com.simibubi.create.content.contraptions.relays.advanced.SpeedControllerRenderer;
import com.simibubi.create.content.contraptions.relays.advanced.SpeedControllerTileEntity; import com.simibubi.create.content.contraptions.relays.advanced.SpeedControllerTileEntity;
import com.simibubi.create.content.contraptions.relays.advanced.sequencer.SequencedGearshiftTileEntity; import com.simibubi.create.content.contraptions.relays.advanced.sequencer.SequencedGearshiftTileEntity;
import com.simibubi.create.content.contraptions.relays.belt.BeltInstance;
import com.simibubi.create.content.contraptions.relays.belt.BeltRenderer; import com.simibubi.create.content.contraptions.relays.belt.BeltRenderer;
import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity; import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity;
import com.simibubi.create.content.contraptions.relays.elementary.SimpleKineticTileEntity; import com.simibubi.create.content.contraptions.relays.elementary.SimpleKineticTileEntity;
@ -81,10 +94,13 @@ import com.simibubi.create.content.contraptions.relays.encased.AdjustablePulleyT
import com.simibubi.create.content.contraptions.relays.encased.ClutchTileEntity; import com.simibubi.create.content.contraptions.relays.encased.ClutchTileEntity;
import com.simibubi.create.content.contraptions.relays.encased.EncasedShaftRenderer; import com.simibubi.create.content.contraptions.relays.encased.EncasedShaftRenderer;
import com.simibubi.create.content.contraptions.relays.encased.EncasedShaftTileEntity; import com.simibubi.create.content.contraptions.relays.encased.EncasedShaftTileEntity;
import com.simibubi.create.content.contraptions.relays.encased.ShaftInstance;
import com.simibubi.create.content.contraptions.relays.encased.SplitShaftInstance;
import com.simibubi.create.content.contraptions.relays.encased.SplitShaftRenderer; import com.simibubi.create.content.contraptions.relays.encased.SplitShaftRenderer;
import com.simibubi.create.content.contraptions.relays.gauge.GaugeRenderer; import com.simibubi.create.content.contraptions.relays.gauge.GaugeRenderer;
import com.simibubi.create.content.contraptions.relays.gauge.SpeedGaugeTileEntity; import com.simibubi.create.content.contraptions.relays.gauge.SpeedGaugeTileEntity;
import com.simibubi.create.content.contraptions.relays.gauge.StressGaugeTileEntity; import com.simibubi.create.content.contraptions.relays.gauge.StressGaugeTileEntity;
import com.simibubi.create.content.contraptions.relays.gearbox.GearboxInstance;
import com.simibubi.create.content.contraptions.relays.gearbox.GearboxRenderer; import com.simibubi.create.content.contraptions.relays.gearbox.GearboxRenderer;
import com.simibubi.create.content.contraptions.relays.gearbox.GearboxTileEntity; import com.simibubi.create.content.contraptions.relays.gearbox.GearboxTileEntity;
import com.simibubi.create.content.contraptions.relays.gearbox.GearshiftTileEntity; import com.simibubi.create.content.contraptions.relays.gearbox.GearshiftTileEntity;
@ -104,6 +120,7 @@ import com.simibubi.create.content.logistics.block.funnel.FunnelRenderer;
import com.simibubi.create.content.logistics.block.funnel.FunnelTileEntity; import com.simibubi.create.content.logistics.block.funnel.FunnelTileEntity;
import com.simibubi.create.content.logistics.block.inventories.AdjustableCrateTileEntity; import com.simibubi.create.content.logistics.block.inventories.AdjustableCrateTileEntity;
import com.simibubi.create.content.logistics.block.inventories.CreativeCrateTileEntity; import com.simibubi.create.content.logistics.block.inventories.CreativeCrateTileEntity;
import com.simibubi.create.content.logistics.block.mechanicalArm.ArmInstance;
import com.simibubi.create.content.logistics.block.mechanicalArm.ArmRenderer; import com.simibubi.create.content.logistics.block.mechanicalArm.ArmRenderer;
import com.simibubi.create.content.logistics.block.mechanicalArm.ArmTileEntity; import com.simibubi.create.content.logistics.block.mechanicalArm.ArmTileEntity;
import com.simibubi.create.content.logistics.block.redstone.AnalogLeverRenderer; import com.simibubi.create.content.logistics.block.redstone.AnalogLeverRenderer;
@ -138,36 +155,42 @@ public class AllTileEntities {
.tileEntity("simple_kinetic", SimpleKineticTileEntity::new) .tileEntity("simple_kinetic", SimpleKineticTileEntity::new)
.validBlocks(AllBlocks.SHAFT, AllBlocks.COGWHEEL, AllBlocks.LARGE_COGWHEEL) .validBlocks(AllBlocks.SHAFT, AllBlocks.COGWHEEL, AllBlocks.LARGE_COGWHEEL)
.renderer(() -> KineticTileEntityRenderer::new) .renderer(() -> KineticTileEntityRenderer::new)
.onRegister(SingleRotatingInstance::register)
.register(); .register();
public static final TileEntityEntry<CreativeMotorTileEntity> MOTOR = Create.registrate() public static final TileEntityEntry<CreativeMotorTileEntity> MOTOR = Create.registrate()
.tileEntity("motor", CreativeMotorTileEntity::new) .tileEntity("motor", CreativeMotorTileEntity::new)
.validBlocks(AllBlocks.CREATIVE_MOTOR) .validBlocks(AllBlocks.CREATIVE_MOTOR)
.renderer(() -> CreativeMotorRenderer::new) .renderer(() -> CreativeMotorRenderer::new)
.onRegister(HalfShaftInstance::register)
.register(); .register();
public static final TileEntityEntry<GearboxTileEntity> GEARBOX = Create.registrate() public static final TileEntityEntry<GearboxTileEntity> GEARBOX = Create.registrate()
.tileEntity("gearbox", GearboxTileEntity::new) .tileEntity("gearbox", GearboxTileEntity::new)
.validBlocks(AllBlocks.GEARBOX) .validBlocks(AllBlocks.GEARBOX)
.renderer(() -> GearboxRenderer::new) .renderer(() -> GearboxRenderer::new)
.onRegister(GearboxInstance::register)
.register(); .register();
public static final TileEntityEntry<EncasedShaftTileEntity> ENCASED_SHAFT = Create.registrate() public static final TileEntityEntry<EncasedShaftTileEntity> ENCASED_SHAFT = Create.registrate()
.tileEntity("encased_shaft", EncasedShaftTileEntity::new) .tileEntity("encased_shaft", EncasedShaftTileEntity::new)
.validBlocks(AllBlocks.ANDESITE_ENCASED_SHAFT, AllBlocks.BRASS_ENCASED_SHAFT, AllBlocks.ENCASED_CHAIN_DRIVE) .validBlocks(AllBlocks.ANDESITE_ENCASED_SHAFT, AllBlocks.BRASS_ENCASED_SHAFT, AllBlocks.ENCASED_CHAIN_DRIVE)
.renderer(() -> EncasedShaftRenderer::new) .renderer(() -> EncasedShaftRenderer::new)
.onRegister(ShaftInstance::register)
.register(); .register();
public static final TileEntityEntry<AdjustablePulleyTileEntity> ADJUSTABLE_PULLEY = Create.registrate() public static final TileEntityEntry<AdjustablePulleyTileEntity> ADJUSTABLE_PULLEY = Create.registrate()
.tileEntity("adjustable_pulley", AdjustablePulleyTileEntity::new) .tileEntity("adjustable_pulley", AdjustablePulleyTileEntity::new)
.validBlocks(AllBlocks.ADJUSTABLE_CHAIN_GEARSHIFT) .validBlocks(AllBlocks.ADJUSTABLE_CHAIN_GEARSHIFT)
.renderer(() -> EncasedShaftRenderer::new) .renderer(() -> EncasedShaftRenderer::new)
.onRegister(ShaftInstance::register)
.register(); .register();
public static final TileEntityEntry<EncasedFanTileEntity> ENCASED_FAN = Create.registrate() public static final TileEntityEntry<EncasedFanTileEntity> ENCASED_FAN = Create.registrate()
.tileEntity("encased_fan", EncasedFanTileEntity::new) .tileEntity("encased_fan", EncasedFanTileEntity::new)
.validBlocks(AllBlocks.ENCASED_FAN) .validBlocks(AllBlocks.ENCASED_FAN)
.renderer(() -> EncasedFanRenderer::new) .renderer(() -> EncasedFanRenderer::new)
.onRegister(FanInstance::register)
.register(); .register();
public static final TileEntityEntry<NozzleTileEntity> NOZZLE = Create.registrate() public static final TileEntityEntry<NozzleTileEntity> NOZZLE = Create.registrate()
@ -180,18 +203,21 @@ public class AllTileEntities {
.tileEntity("clutch", ClutchTileEntity::new) .tileEntity("clutch", ClutchTileEntity::new)
.validBlocks(AllBlocks.CLUTCH) .validBlocks(AllBlocks.CLUTCH)
.renderer(() -> SplitShaftRenderer::new) .renderer(() -> SplitShaftRenderer::new)
.onRegister(SplitShaftInstance::register)
.register(); .register();
public static final TileEntityEntry<GearshiftTileEntity> GEARSHIFT = Create.registrate() public static final TileEntityEntry<GearshiftTileEntity> GEARSHIFT = Create.registrate()
.tileEntity("gearshift", GearshiftTileEntity::new) .tileEntity("gearshift", GearshiftTileEntity::new)
.validBlocks(AllBlocks.GEARSHIFT) .validBlocks(AllBlocks.GEARSHIFT)
.renderer(() -> SplitShaftRenderer::new) .renderer(() -> SplitShaftRenderer::new)
.onRegister(SplitShaftInstance::register)
.register(); .register();
public static final TileEntityEntry<TurntableTileEntity> TURNTABLE = Create.registrate() public static final TileEntityEntry<TurntableTileEntity> TURNTABLE = Create.registrate()
.tileEntity("turntable", TurntableTileEntity::new) .tileEntity("turntable", TurntableTileEntity::new)
.validBlocks(AllBlocks.TURNTABLE) .validBlocks(AllBlocks.TURNTABLE)
.renderer(() -> KineticTileEntityRenderer::new) .renderer(() -> KineticTileEntityRenderer::new)
.onRegister(SingleRotatingInstance::register)
.register(); .register();
public static final TileEntityEntry<HandCrankTileEntity> HAND_CRANK = Create.registrate() public static final TileEntityEntry<HandCrankTileEntity> HAND_CRANK = Create.registrate()
@ -199,30 +225,35 @@ public class AllTileEntities {
.validBlocks(AllBlocks.HAND_CRANK, AllBlocks.COPPER_VALVE_HANDLE) .validBlocks(AllBlocks.HAND_CRANK, AllBlocks.COPPER_VALVE_HANDLE)
.validBlocks(AllBlocks.DYED_VALVE_HANDLES) .validBlocks(AllBlocks.DYED_VALVE_HANDLES)
.renderer(() -> HandCrankRenderer::new) .renderer(() -> HandCrankRenderer::new)
.onRegister(SingleRotatingInstance::register)
.register(); .register();
public static final TileEntityEntry<CuckooClockTileEntity> CUCKOO_CLOCK = Create.registrate() public static final TileEntityEntry<CuckooClockTileEntity> CUCKOO_CLOCK = Create.registrate()
.tileEntity("cuckoo_clock", CuckooClockTileEntity::new) .tileEntity("cuckoo_clock", CuckooClockTileEntity::new)
.validBlocks(AllBlocks.CUCKOO_CLOCK, AllBlocks.MYSTERIOUS_CUCKOO_CLOCK) .validBlocks(AllBlocks.CUCKOO_CLOCK, AllBlocks.MYSTERIOUS_CUCKOO_CLOCK)
.renderer(() -> CuckooClockRenderer::new) .renderer(() -> CuckooClockRenderer::new)
.onRegister(HorizontalHalfShaftInstance::register)
.register(); .register();
public static final TileEntityEntry<GantryShaftTileEntity> GANTRY_SHAFT = Create.registrate() public static final TileEntityEntry<GantryShaftTileEntity> GANTRY_SHAFT = Create.registrate()
.tileEntity("gantry_shaft", GantryShaftTileEntity::new) .tileEntity("gantry_shaft", GantryShaftTileEntity::new)
.validBlocks(AllBlocks.GANTRY_SHAFT) .validBlocks(AllBlocks.GANTRY_SHAFT)
.renderer(() -> KineticTileEntityRenderer::new) .renderer(() -> KineticTileEntityRenderer::new)
.onRegister(SingleRotatingInstance::register)
.register(); .register();
public static final TileEntityEntry<GantryPinionTileEntity> GANTRY_PINION = Create.registrate() public static final TileEntityEntry<GantryPinionTileEntity> GANTRY_PINION = Create.registrate()
.tileEntity("gantry_pinion", GantryPinionTileEntity::new) .tileEntity("gantry_pinion", GantryPinionTileEntity::new)
.validBlocks(AllBlocks.GANTRY_PINION) .validBlocks(AllBlocks.GANTRY_PINION)
.renderer(() -> GantryPinionRenderer::new) .renderer(() -> GantryPinionRenderer::new)
.onRegister(ShaftInstance::register)
.register(); .register();
public static final TileEntityEntry<PumpTileEntity> MECHANICAL_PUMP = Create.registrate() public static final TileEntityEntry<PumpTileEntity> MECHANICAL_PUMP = Create.registrate()
.tileEntity("mechanical_pump", PumpTileEntity::new) .tileEntity("mechanical_pump", PumpTileEntity::new)
.validBlocks(AllBlocks.MECHANICAL_PUMP) .validBlocks(AllBlocks.MECHANICAL_PUMP)
.renderer(() -> PumpRenderer::new) .renderer(() -> PumpRenderer::new)
.onRegister(PumpCogInstance::register)
.register(); .register();
public static final TileEntityEntry<SmartFluidPipeTileEntity> SMART_FLUID_PIPE = Create.registrate() public static final TileEntityEntry<SmartFluidPipeTileEntity> SMART_FLUID_PIPE = Create.registrate()
@ -251,6 +282,7 @@ public class AllTileEntities {
.tileEntity("fluid_valve", FluidValveTileEntity::new) .tileEntity("fluid_valve", FluidValveTileEntity::new)
.validBlocks(AllBlocks.FLUID_VALVE) .validBlocks(AllBlocks.FLUID_VALVE)
.renderer(() -> FluidValveRenderer::new) .renderer(() -> FluidValveRenderer::new)
.onRegister(ShaftInstance::register)
.register(); .register();
public static final TileEntityEntry<FluidTankTileEntity> FLUID_TANK = Create.registrate() public static final TileEntityEntry<FluidTankTileEntity> FLUID_TANK = Create.registrate()
@ -269,6 +301,7 @@ public class AllTileEntities {
.tileEntity("hose_pulley", HosePulleyTileEntity::new) .tileEntity("hose_pulley", HosePulleyTileEntity::new)
.validBlocks(AllBlocks.HOSE_PULLEY) .validBlocks(AllBlocks.HOSE_PULLEY)
.renderer(() -> HosePulleyRenderer::new) .renderer(() -> HosePulleyRenderer::new)
.onRegister(ShaftInstance::register)
.register(); .register();
public static final TileEntityEntry<SpoutTileEntity> SPOUT = Create.registrate() public static final TileEntityEntry<SpoutTileEntity> SPOUT = Create.registrate()
@ -287,6 +320,7 @@ public class AllTileEntities {
.tileEntity("belt", BeltTileEntity::new) .tileEntity("belt", BeltTileEntity::new)
.validBlocks(AllBlocks.BELT) .validBlocks(AllBlocks.BELT)
.renderer(() -> BeltRenderer::new) .renderer(() -> BeltRenderer::new)
.onRegister(BeltInstance::register)
.register(); .register();
public static final TileEntityEntry<ChuteTileEntity> CHUTE = Create.registrate() public static final TileEntityEntry<ChuteTileEntity> CHUTE = Create.registrate()
@ -317,36 +351,42 @@ public class AllTileEntities {
.tileEntity("mechanical_arm", ArmTileEntity::new) .tileEntity("mechanical_arm", ArmTileEntity::new)
.validBlocks(AllBlocks.MECHANICAL_ARM) .validBlocks(AllBlocks.MECHANICAL_ARM)
.renderer(() -> ArmRenderer::new) .renderer(() -> ArmRenderer::new)
.onRegister(ArmInstance::register)
.register(); .register();
public static final TileEntityEntry<MechanicalPistonTileEntity> MECHANICAL_PISTON = Create.registrate() public static final TileEntityEntry<MechanicalPistonTileEntity> MECHANICAL_PISTON = Create.registrate()
.tileEntity("mechanical_piston", MechanicalPistonTileEntity::new) .tileEntity("mechanical_piston", MechanicalPistonTileEntity::new)
.validBlocks(AllBlocks.MECHANICAL_PISTON, AllBlocks.STICKY_MECHANICAL_PISTON) .validBlocks(AllBlocks.MECHANICAL_PISTON, AllBlocks.STICKY_MECHANICAL_PISTON)
.renderer(() -> MechanicalPistonRenderer::new) .renderer(() -> MechanicalPistonRenderer::new)
.onRegister(ShaftInstance::register)
.register(); .register();
public static final TileEntityEntry<WindmillBearingTileEntity> WINDMILL_BEARING = Create.registrate() public static final TileEntityEntry<WindmillBearingTileEntity> WINDMILL_BEARING = Create.registrate()
.tileEntity("windmill_bearing", WindmillBearingTileEntity::new) .tileEntity("windmill_bearing", WindmillBearingTileEntity::new)
.validBlocks(AllBlocks.WINDMILL_BEARING) .validBlocks(AllBlocks.WINDMILL_BEARING)
.renderer(() -> BearingRenderer::new) .renderer(() -> BearingRenderer::new)
.onRegister(BackHalfShaftInstance::register)
.register(); .register();
public static final TileEntityEntry<MechanicalBearingTileEntity> MECHANICAL_BEARING = Create.registrate() public static final TileEntityEntry<MechanicalBearingTileEntity> MECHANICAL_BEARING = Create.registrate()
.tileEntity("mechanical_bearing", MechanicalBearingTileEntity::new) .tileEntity("mechanical_bearing", MechanicalBearingTileEntity::new)
.validBlocks(AllBlocks.MECHANICAL_BEARING) .validBlocks(AllBlocks.MECHANICAL_BEARING)
.renderer(() -> BearingRenderer::new) .renderer(() -> BearingRenderer::new)
.onRegister(BackHalfShaftInstance::register)
.register(); .register();
public static final TileEntityEntry<ClockworkBearingTileEntity> CLOCKWORK_BEARING = Create.registrate() public static final TileEntityEntry<ClockworkBearingTileEntity> CLOCKWORK_BEARING = Create.registrate()
.tileEntity("clockwork_bearing", ClockworkBearingTileEntity::new) .tileEntity("clockwork_bearing", ClockworkBearingTileEntity::new)
.validBlocks(AllBlocks.CLOCKWORK_BEARING) .validBlocks(AllBlocks.CLOCKWORK_BEARING)
.renderer(() -> BearingRenderer::new) .renderer(() -> BearingRenderer::new)
.onRegister(BackHalfShaftInstance::register)
.register(); .register();
public static final TileEntityEntry<PulleyTileEntity> ROPE_PULLEY = Create.registrate() public static final TileEntityEntry<PulleyTileEntity> ROPE_PULLEY = Create.registrate()
.tileEntity("rope_pulley", PulleyTileEntity::new) .tileEntity("rope_pulley", PulleyTileEntity::new)
.validBlocks(AllBlocks.ROPE_PULLEY) .validBlocks(AllBlocks.ROPE_PULLEY)
.renderer(() -> PulleyRenderer::new) .renderer(() -> PulleyRenderer::new)
.onRegister(ShaftInstance::register)
.register(); .register();
public static final TileEntityEntry<ChassisTileEntity> CHASSIS = Create.registrate() public static final TileEntityEntry<ChassisTileEntity> CHASSIS = Create.registrate()
@ -359,12 +399,14 @@ public class AllTileEntities {
.tileEntity("drill", DrillTileEntity::new) .tileEntity("drill", DrillTileEntity::new)
.validBlocks(AllBlocks.MECHANICAL_DRILL) .validBlocks(AllBlocks.MECHANICAL_DRILL)
.renderer(() -> DrillRenderer::new) .renderer(() -> DrillRenderer::new)
.onRegister(DrillInstance::register)
.register(); .register();
public static final TileEntityEntry<SawTileEntity> SAW = Create.registrate() public static final TileEntityEntry<SawTileEntity> SAW = Create.registrate()
.tileEntity("saw", SawTileEntity::new) .tileEntity("saw", SawTileEntity::new)
.validBlocks(AllBlocks.MECHANICAL_SAW) .validBlocks(AllBlocks.MECHANICAL_SAW)
.renderer(() -> SawRenderer::new) .renderer(() -> SawRenderer::new)
.onRegister(SawInstance::register)
.register(); .register();
public static final TileEntityEntry<HarvesterTileEntity> HARVESTER = Create.registrate() public static final TileEntityEntry<HarvesterTileEntity> HARVESTER = Create.registrate()
@ -390,6 +432,7 @@ public class AllTileEntities {
.tileEntity("flywheel", FlywheelTileEntity::new) .tileEntity("flywheel", FlywheelTileEntity::new)
.validBlocks(AllBlocks.FLYWHEEL) .validBlocks(AllBlocks.FLYWHEEL)
.renderer(() -> FlywheelRenderer::new) .renderer(() -> FlywheelRenderer::new)
.onRegister(FlyWheelInstance::register)
.register(); .register();
public static final TileEntityEntry<FurnaceEngineTileEntity> FURNACE_ENGINE = Create.registrate() public static final TileEntityEntry<FurnaceEngineTileEntity> FURNACE_ENGINE = Create.registrate()
@ -402,12 +445,14 @@ public class AllTileEntities {
.tileEntity("millstone", MillstoneTileEntity::new) .tileEntity("millstone", MillstoneTileEntity::new)
.validBlocks(AllBlocks.MILLSTONE) .validBlocks(AllBlocks.MILLSTONE)
.renderer(() -> MillstoneRenderer::new) .renderer(() -> MillstoneRenderer::new)
.onRegister(MillStoneCogInstance::register)
.register(); .register();
public static final TileEntityEntry<CrushingWheelTileEntity> CRUSHING_WHEEL = Create.registrate() public static final TileEntityEntry<CrushingWheelTileEntity> CRUSHING_WHEEL = Create.registrate()
.tileEntity("crushing_wheel", CrushingWheelTileEntity::new) .tileEntity("crushing_wheel", CrushingWheelTileEntity::new)
.validBlocks(AllBlocks.CRUSHING_WHEEL) .validBlocks(AllBlocks.CRUSHING_WHEEL)
.renderer(() -> KineticTileEntityRenderer::new) .renderer(() -> KineticTileEntityRenderer::new)
.onRegister(SingleRotatingInstance::register)
.register(); .register();
public static final TileEntityEntry<CrushingWheelControllerTileEntity> CRUSHING_WHEEL_CONTROLLER = public static final TileEntityEntry<CrushingWheelControllerTileEntity> CRUSHING_WHEEL_CONTROLLER =
@ -421,24 +466,28 @@ public class AllTileEntities {
.tileEntity("water_wheel", WaterWheelTileEntity::new) .tileEntity("water_wheel", WaterWheelTileEntity::new)
.validBlocks(AllBlocks.WATER_WHEEL) .validBlocks(AllBlocks.WATER_WHEEL)
.renderer(() -> KineticTileEntityRenderer::new) .renderer(() -> KineticTileEntityRenderer::new)
.onRegister(SingleRotatingInstance::register)
.register(); .register();
public static final TileEntityEntry<MechanicalPressTileEntity> MECHANICAL_PRESS = Create.registrate() public static final TileEntityEntry<MechanicalPressTileEntity> MECHANICAL_PRESS = Create.registrate()
.tileEntity("mechanical_press", MechanicalPressTileEntity::new) .tileEntity("mechanical_press", MechanicalPressTileEntity::new)
.validBlocks(AllBlocks.MECHANICAL_PRESS) .validBlocks(AllBlocks.MECHANICAL_PRESS)
.renderer(() -> MechanicalPressRenderer::new) .renderer(() -> MechanicalPressRenderer::new)
.onRegister(ShaftInstance::register)
.register(); .register();
public static final TileEntityEntry<MechanicalMixerTileEntity> MECHANICAL_MIXER = Create.registrate() public static final TileEntityEntry<MechanicalMixerTileEntity> MECHANICAL_MIXER = Create.registrate()
.tileEntity("mechanical_mixer", MechanicalMixerTileEntity::new) .tileEntity("mechanical_mixer", MechanicalMixerTileEntity::new)
.validBlocks(AllBlocks.MECHANICAL_MIXER) .validBlocks(AllBlocks.MECHANICAL_MIXER)
.renderer(() -> MechanicalMixerRenderer::new) .renderer(() -> MechanicalMixerRenderer::new)
.onRegister(ShaftlessCogInstance::register)
.register(); .register();
public static final TileEntityEntry<DeployerTileEntity> DEPLOYER = Create.registrate() public static final TileEntityEntry<DeployerTileEntity> DEPLOYER = Create.registrate()
.tileEntity("deployer", DeployerTileEntity::new) .tileEntity("deployer", DeployerTileEntity::new)
.validBlocks(AllBlocks.DEPLOYER) .validBlocks(AllBlocks.DEPLOYER)
.renderer(() -> DeployerRenderer::new) .renderer(() -> DeployerRenderer::new)
.onRegister(ShaftInstance::register)
.register(); .register();
public static final TileEntityEntry<BasinTileEntity> BASIN = Create.registrate() public static final TileEntityEntry<BasinTileEntity> BASIN = Create.registrate()
@ -457,30 +506,35 @@ public class AllTileEntities {
.tileEntity("mechanical_crafter", MechanicalCrafterTileEntity::new) .tileEntity("mechanical_crafter", MechanicalCrafterTileEntity::new)
.validBlocks(AllBlocks.MECHANICAL_CRAFTER) .validBlocks(AllBlocks.MECHANICAL_CRAFTER)
.renderer(() -> MechanicalCrafterRenderer::new) .renderer(() -> MechanicalCrafterRenderer::new)
.onRegister(MechanicalCrafterInstance::register)
.register(); .register();
public static final TileEntityEntry<SequencedGearshiftTileEntity> SEQUENCED_GEARSHIFT = Create.registrate() public static final TileEntityEntry<SequencedGearshiftTileEntity> SEQUENCED_GEARSHIFT = Create.registrate()
.tileEntity("sequenced_gearshift", SequencedGearshiftTileEntity::new) .tileEntity("sequenced_gearshift", SequencedGearshiftTileEntity::new)
.validBlocks(AllBlocks.SEQUENCED_GEARSHIFT) .validBlocks(AllBlocks.SEQUENCED_GEARSHIFT)
.renderer(() -> SplitShaftRenderer::new) .renderer(() -> SplitShaftRenderer::new)
.onRegister(SplitShaftInstance::register)
.register(); .register();
public static final TileEntityEntry<SpeedControllerTileEntity> ROTATION_SPEED_CONTROLLER = Create.registrate() public static final TileEntityEntry<SpeedControllerTileEntity> ROTATION_SPEED_CONTROLLER = Create.registrate()
.tileEntity("rotation_speed_controller", SpeedControllerTileEntity::new) .tileEntity("rotation_speed_controller", SpeedControllerTileEntity::new)
.validBlocks(AllBlocks.ROTATION_SPEED_CONTROLLER) .validBlocks(AllBlocks.ROTATION_SPEED_CONTROLLER)
.renderer(() -> SpeedControllerRenderer::new) .renderer(() -> SpeedControllerRenderer::new)
.onRegister(ShaftInstance::register)
.register(); .register();
public static final TileEntityEntry<SpeedGaugeTileEntity> SPEEDOMETER = Create.registrate() public static final TileEntityEntry<SpeedGaugeTileEntity> SPEEDOMETER = Create.registrate()
.tileEntity("speedometer", SpeedGaugeTileEntity::new) .tileEntity("speedometer", SpeedGaugeTileEntity::new)
.validBlocks(AllBlocks.SPEEDOMETER) .validBlocks(AllBlocks.SPEEDOMETER)
.renderer(() -> GaugeRenderer::speed) .renderer(() -> GaugeRenderer::speed)
.onRegister(ShaftInstance::register)
.register(); .register();
public static final TileEntityEntry<StressGaugeTileEntity> STRESSOMETER = Create.registrate() public static final TileEntityEntry<StressGaugeTileEntity> STRESSOMETER = Create.registrate()
.tileEntity("stressometer", StressGaugeTileEntity::new) .tileEntity("stressometer", StressGaugeTileEntity::new)
.validBlocks(AllBlocks.STRESSOMETER) .validBlocks(AllBlocks.STRESSOMETER)
.renderer(() -> GaugeRenderer::stress) .renderer(() -> GaugeRenderer::stress)
.onRegister(ShaftInstance::register)
.register(); .register();
public static final TileEntityEntry<AnalogLeverTileEntity> ANALOG_LEVER = Create.registrate() public static final TileEntityEntry<AnalogLeverTileEntity> ANALOG_LEVER = Create.registrate()

View file

@ -95,7 +95,7 @@ public class Create {
AllConfigs.register(); AllConfigs.register();
random = new Random(); random = new Random();
DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> CreateClient.addClientListeners(modEventBus)); DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> CreateClient.addClientListeners(modEventBus));
} }
public static void init(final FMLCommonSetupEvent event) { public static void init(final FMLCommonSetupEvent event) {

View file

@ -6,7 +6,7 @@ import java.util.Map;
import java.util.function.Function; import java.util.function.Function;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionRenderer; import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher;
import com.simibubi.create.content.contraptions.relays.encased.CasingConnectivity; import com.simibubi.create.content.contraptions.relays.encased.CasingConnectivity;
import com.simibubi.create.content.schematics.ClientSchematicLoader; import com.simibubi.create.content.schematics.ClientSchematicLoader;
import com.simibubi.create.content.schematics.client.SchematicAndQuillHandler; import com.simibubi.create.content.schematics.client.SchematicAndQuillHandler;
@ -18,7 +18,11 @@ import com.simibubi.create.foundation.item.CustomItemModels;
import com.simibubi.create.foundation.item.CustomRenderedItems; import com.simibubi.create.foundation.item.CustomRenderedItems;
import com.simibubi.create.foundation.ponder.content.PonderIndex; import com.simibubi.create.foundation.ponder.content.PonderIndex;
import com.simibubi.create.foundation.ponder.elements.WorldSectionElement; import com.simibubi.create.foundation.ponder.elements.WorldSectionElement;
import com.simibubi.create.foundation.utility.SuperByteBufferCache; import com.simibubi.create.foundation.render.KineticRenderer;
import com.simibubi.create.foundation.render.SuperByteBufferCache;
import com.simibubi.create.foundation.render.backend.Backend;
import com.simibubi.create.foundation.render.backend.OptifineHandler;
import com.simibubi.create.foundation.utility.ghost.GhostBlocks;
import com.simibubi.create.foundation.utility.outliner.Outliner; import com.simibubi.create.foundation.utility.outliner.Outliner;
import net.minecraft.block.Block; import net.minecraft.block.Block;
@ -44,7 +48,9 @@ public class CreateClient {
public static SchematicHandler schematicHandler; public static SchematicHandler schematicHandler;
public static SchematicAndQuillHandler schematicAndQuillHandler; public static SchematicAndQuillHandler schematicAndQuillHandler;
public static SuperByteBufferCache bufferCache; public static SuperByteBufferCache bufferCache;
public static KineticRenderer kineticRenderer;
public static final Outliner outliner = new Outliner(); public static final Outliner outliner = new Outliner();
public static GhostBlocks ghostBlocks;
private static CustomBlockModels customBlockModels; private static CustomBlockModels customBlockModels;
private static CustomItemModels customItemModels; private static CustomItemModels customItemModels;
@ -58,18 +64,25 @@ public class CreateClient {
modEventBus.addListener(CreateClient::onModelRegistry); modEventBus.addListener(CreateClient::onModelRegistry);
modEventBus.addListener(CreateClient::onTextureStitch); modEventBus.addListener(CreateClient::onTextureStitch);
modEventBus.addListener(AllParticleTypes::registerFactories); modEventBus.addListener(AllParticleTypes::registerFactories);
Backend.init();
OptifineHandler.init();
} }
public static void clientInit(FMLClientSetupEvent event) { public static void clientInit(FMLClientSetupEvent event) {
kineticRenderer = new KineticRenderer();
schematicSender = new ClientSchematicLoader(); schematicSender = new ClientSchematicLoader();
schematicHandler = new SchematicHandler(); schematicHandler = new SchematicHandler();
schematicAndQuillHandler = new SchematicAndQuillHandler(); schematicAndQuillHandler = new SchematicAndQuillHandler();
bufferCache = new SuperByteBufferCache(); bufferCache = new SuperByteBufferCache();
bufferCache.registerCompartment(KineticTileEntityRenderer.KINETIC_TILE); bufferCache.registerCompartment(KineticTileEntityRenderer.KINETIC_TILE);
bufferCache.registerCompartment(ContraptionRenderer.CONTRAPTION, 20); bufferCache.registerCompartment(ContraptionRenderDispatcher.CONTRAPTION, 20);
bufferCache.registerCompartment(WorldSectionElement.DOC_WORLD_SECTION, 20); bufferCache.registerCompartment(WorldSectionElement.DOC_WORLD_SECTION, 20);
ghostBlocks = new GhostBlocks();
AllKeys.register(); AllKeys.register();
AllContainerTypes.registerScreenFactories(); AllContainerTypes.registerScreenFactories();
//AllTileEntities.registerRenderers(); //AllTileEntities.registerRenderers();
@ -175,4 +188,9 @@ public class CreateClient {
return casingConnectivity; return casingConnectivity;
} }
public static void invalidateRenderers() {
CreateClient.bufferCache.invalidate();
CreateClient.kineticRenderer.invalidate();
ContraptionRenderDispatcher.invalidateAll();
}
} }

View file

@ -35,6 +35,7 @@ import com.simibubi.create.compat.jei.category.ProcessingViaFanCategory;
import com.simibubi.create.compat.jei.category.SawingCategory; import com.simibubi.create.compat.jei.category.SawingCategory;
import com.simibubi.create.compat.jei.category.SpoutCategory; import com.simibubi.create.compat.jei.category.SpoutCategory;
import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity; import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity;
import com.simibubi.create.content.contraptions.components.saw.SawTileEntity;
import com.simibubi.create.content.contraptions.fluids.recipe.PotionMixingRecipeManager; import com.simibubi.create.content.contraptions.fluids.recipe.PotionMixingRecipeManager;
import com.simibubi.create.content.contraptions.processing.BasinRecipe; import com.simibubi.create.content.contraptions.processing.BasinRecipe;
import com.simibubi.create.content.logistics.block.inventories.AdjustableCrateScreen; import com.simibubi.create.content.logistics.block.inventories.AdjustableCrateScreen;
@ -54,6 +55,7 @@ import mezz.jei.api.registration.ISubtypeRegistration;
import mezz.jei.api.runtime.IIngredientManager; import mezz.jei.api.runtime.IIngredientManager;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.item.crafting.ICraftingRecipe; import net.minecraft.item.crafting.ICraftingRecipe;
import net.minecraft.item.crafting.IRecipe; import net.minecraft.item.crafting.IRecipe;
import net.minecraft.item.crafting.IRecipeSerializer; import net.minecraft.item.crafting.IRecipeSerializer;
@ -61,8 +63,10 @@ import net.minecraft.item.crafting.IRecipeType;
import net.minecraft.item.crafting.ShapedRecipe; import net.minecraft.item.crafting.ShapedRecipe;
import net.minecraft.util.IItemProvider; import net.minecraft.util.IItemProvider;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.ModList;
@JeiPlugin @JeiPlugin
@SuppressWarnings("unused")
public class CreateJEI implements IModPlugin { public class CreateJEI implements IModPlugin {
private static final ResourceLocation ID = new ResourceLocation(Create.ID, "jei_plugin"); private static final ResourceLocation ID = new ResourceLocation(Create.ID, "jei_plugin");
@ -132,12 +136,18 @@ public class CreateJEI implements IModPlugin {
.catalyst(AllBlocks.MECHANICAL_SAW::get) .catalyst(AllBlocks.MECHANICAL_SAW::get)
.build(), .build(),
blockCutting = register("block_cutting", BlockCuttingCategory::new) blockCutting = register("block_cutting", () -> new BlockCuttingCategory(Items.STONE_BRICK_STAIRS))
.recipeList(() -> CondensedBlockCuttingRecipe.condenseRecipes(findRecipesByType(IRecipeType.STONECUTTING))) .recipeList(() -> CondensedBlockCuttingRecipe.condenseRecipes(findRecipesByType(IRecipeType.STONECUTTING)))
.catalyst(AllBlocks.MECHANICAL_SAW::get) .catalyst(AllBlocks.MECHANICAL_SAW::get)
.enableWhen(c -> c.allowStonecuttingOnSaw) .enableWhen(c -> c.allowStonecuttingOnSaw)
.build(), .build(),
woodCutting = register("wood_cutting", () -> new BlockCuttingCategory(Items.OAK_STAIRS))
.recipeList(() -> CondensedBlockCuttingRecipe.condenseRecipes(findRecipesByType(SawTileEntity.woodcuttingRecipeType.getValue())))
.catalyst(AllBlocks.MECHANICAL_SAW::get)
.enableWhenBool(c -> c.allowWoodcuttingOnSaw.get() && ModList.get().isLoaded("druidcraft"))
.build(),
packing = register("packing", PackingCategory::standard).recipes(AllRecipeTypes.COMPACTING) packing = register("packing", PackingCategory::standard).recipes(AllRecipeTypes.COMPACTING)
.catalyst(AllBlocks.MECHANICAL_PRESS::get) .catalyst(AllBlocks.MECHANICAL_PRESS::get)
.catalyst(AllBlocks.BASIN::get) .catalyst(AllBlocks.BASIN::get)
@ -293,8 +303,12 @@ public class CreateJEI implements IModPlugin {
CategoryBuilder<T> enableWhen(Function<CRecipes, ConfigBool> configValue) { CategoryBuilder<T> enableWhen(Function<CRecipes, ConfigBool> configValue) {
this.pred = c -> configValue.apply(c) this.pred = c -> configValue.apply(c)
.get() .get();
.booleanValue(); return this;
}
CategoryBuilder<T> enableWhenBool(Function<CRecipes, Boolean> configValue) {
this.pred = configValue::apply;
return this; return this;
} }

View file

@ -14,8 +14,8 @@ import mezz.jei.api.constants.VanillaTypes;
import mezz.jei.api.gui.IRecipeLayout; import mezz.jei.api.gui.IRecipeLayout;
import mezz.jei.api.gui.ingredient.IGuiItemStackGroup; import mezz.jei.api.gui.ingredient.IGuiItemStackGroup;
import mezz.jei.api.ingredients.IIngredients; import mezz.jei.api.ingredients.IIngredients;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.item.crafting.IRecipe; import net.minecraft.item.crafting.IRecipe;
import net.minecraft.item.crafting.Ingredient; import net.minecraft.item.crafting.Ingredient;
import net.minecraft.item.crafting.StonecuttingRecipe; import net.minecraft.item.crafting.StonecuttingRecipe;
@ -25,8 +25,8 @@ public class BlockCuttingCategory extends CreateRecipeCategory<CondensedBlockCut
private AnimatedSaw saw = new AnimatedSaw(); private AnimatedSaw saw = new AnimatedSaw();
public BlockCuttingCategory() { public BlockCuttingCategory(Item symbol) {
super(doubleItemIcon(AllBlocks.MECHANICAL_SAW.get(), Items.STONE_BRICK_STAIRS), emptyBackground(177, 70)); super(doubleItemIcon(AllBlocks.MECHANICAL_SAW.get(), symbol), emptyBackground(177, 70)); // Items.STONE_BRICK_STAIRS
} }
@Override @Override

View file

@ -6,14 +6,13 @@ import com.simibubi.create.foundation.utility.AnimationTickHolder;
import mezz.jei.api.gui.drawable.IDrawable; import mezz.jei.api.gui.drawable.IDrawable;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.util.Direction.Axis; import net.minecraft.util.Direction.Axis;
public abstract class AnimatedKinetics implements IDrawable { public abstract class AnimatedKinetics implements IDrawable {
public static float getCurrentAngle() { public static float getCurrentAngle() {
return ((AnimationTickHolder.ticks + Minecraft.getInstance().getRenderPartialTicks()) * 4f) % 360; return ((AnimationTickHolder.getRenderTick()) * 4f) % 360;
} }
protected BlockState shaft(Axis axis) { protected BlockState shaft(Axis axis) {

View file

@ -1,13 +1,11 @@
package com.simibubi.create.compat.jei.category.animations; package com.simibubi.create.compat.jei.category.animations;
import static com.simibubi.create.foundation.utility.AnimationTickHolder.ticks;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.foundation.gui.GuiGameElement; import com.simibubi.create.foundation.gui.GuiGameElement;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
import net.minecraft.client.Minecraft;
import net.minecraft.util.Direction.Axis; import net.minecraft.util.Direction.Axis;
public class AnimatedPress extends AnimatedKinetics { public class AnimatedPress extends AnimatedKinetics {
@ -50,8 +48,7 @@ public class AnimatedPress extends AnimatedKinetics {
} }
private float getAnimatedHeadOffset() { private float getAnimatedHeadOffset() {
float cycle = (ticks + Minecraft.getInstance() float cycle = (AnimationTickHolder.getRenderTick()) % 30;
.getRenderPartialTicks()) % 30;
if (cycle < 10) { if (cycle < 10) {
float progress = cycle / 10; float progress = cycle / 10;
return -(progress * progress * progress); return -(progress * progress * progress);

View file

@ -1,7 +1,5 @@
package com.simibubi.create.compat.jei.category.animations; package com.simibubi.create.compat.jei.category.animations;
import static com.simibubi.create.foundation.utility.AnimationTickHolder.ticks;
import java.util.List; import java.util.List;
import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.matrix.MatrixStack;
@ -10,8 +8,8 @@ import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.foundation.fluid.FluidRenderer; import com.simibubi.create.foundation.fluid.FluidRenderer;
import com.simibubi.create.foundation.gui.GuiGameElement; import com.simibubi.create.foundation.gui.GuiGameElement;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.IRenderTypeBuffer.Impl; import net.minecraft.client.renderer.IRenderTypeBuffer.Impl;
import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.Tessellator;
@ -39,8 +37,7 @@ public class AnimatedSpout extends AnimatedKinetics {
.scale(scale) .scale(scale)
.render(); .render();
float cycle = (ticks + Minecraft.getInstance() float cycle = AnimationTickHolder.getRenderTick() % 30;
.getRenderPartialTicks()) % 30;
float squeeze = cycle < 20 ? MathHelper.sin((float) (cycle / 20f * Math.PI)) : 0; float squeeze = cycle < 20 ? MathHelper.sin((float) (cycle / 20f * Math.PI)) : 0;
squeeze *= 20; squeeze *= 20;

View file

@ -0,0 +1,26 @@
package com.simibubi.create.content.contraptions.base;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderRegistry;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.Direction;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.fml.DistExecutor;
public class BackHalfShaftInstance extends HalfShaftInstance {
public static void register(TileEntityType<? extends KineticTileEntity> type) {
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () ->
InstancedTileRenderRegistry.instance.register(type, BackHalfShaftInstance::new));
}
public BackHalfShaftInstance(InstancedTileRenderer modelManager, KineticTileEntity tile) {
super(modelManager, tile);
}
@Override
protected Direction getShaftDirection() {
return tile.getBlockState().get(BlockStateProperties.FACING).getOpposite();
}
}

View file

@ -0,0 +1,33 @@
package com.simibubi.create.content.contraptions.base;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderRegistry;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.Direction;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.fml.DistExecutor;
public class HalfShaftInstance extends SingleRotatingInstance {
public static void register(TileEntityType<? extends KineticTileEntity> type) {
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () ->
InstancedTileRenderRegistry.instance.register(type, HalfShaftInstance::new));
}
public HalfShaftInstance(InstancedTileRenderer<?> modelManager, KineticTileEntity tile) {
super(modelManager, tile);
}
@Override
protected InstancedModel<RotatingData> getModel() {
Direction dir = getShaftDirection();
return AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouthRotating(modelManager, lastState, dir);
}
protected Direction getShaftDirection() {
return lastState.get(BlockStateProperties.FACING);
}
}

View file

@ -0,0 +1,26 @@
package com.simibubi.create.content.contraptions.base;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderRegistry;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.Direction;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.fml.DistExecutor;
public class HorizontalHalfShaftInstance extends HalfShaftInstance {
public static void register(TileEntityType<? extends KineticTileEntity> type) {
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () ->
InstancedTileRenderRegistry.instance.register(type, HorizontalHalfShaftInstance::new));
}
public HorizontalHalfShaftInstance(InstancedTileRenderer<?> modelManager, KineticTileEntity tile) {
super(modelManager, tile);
}
@Override
protected Direction getShaftDirection() {
return lastState.get(BlockStateProperties.HORIZONTAL_FACING).getOpposite();
}
}

View file

@ -0,0 +1,116 @@
package com.simibubi.create.content.contraptions.base;
import java.nio.ByteBuffer;
import com.simibubi.create.foundation.render.backend.instancing.InstanceData;
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
import com.simibubi.create.foundation.utility.ColorHelper;
import net.minecraft.client.renderer.Vector3f;
import net.minecraft.util.math.BlockPos;
public class KineticData<D extends KineticData<D>> extends InstanceData {
private float x;
private float y;
private float z;
private byte blockLight;
private byte skyLight;
private byte r;
private byte g;
private byte b;
private float rotationalSpeed;
private float rotationOffset;
protected KineticData(InstancedModel<?> owner) {
super(owner);
}
public D setTileEntity(KineticTileEntity te) {
setPosition(te.getPos());
if (te.hasSource()) {
setColor(te.network);
}else {
setColor(0xFF, 0xFF, 0x00);
}
return (D) this;
}
public D setPosition(BlockPos pos) {
return setPosition(pos.getX(), pos.getY(), pos.getZ());
}
public D setPosition(Vector3f pos) {
return setPosition(pos.getX(), pos.getY(), pos.getZ());
}
public D setPosition(int x, int y, int z) {
BlockPos origin = owner.renderer.getOriginCoordinate();
return setPosition((float) (x - origin.getX()),
(float) (y - origin.getY()),
(float) (z - origin.getZ()));
}
public D setPosition(float x, float y, float z) {
this.x = x;
this.y = y;
this.z = z;
return (D) this;
}
public D setBlockLight(int blockLight) {
this.blockLight = (byte) ((blockLight & 0xF) << 4);
return (D) this;
}
public D setSkyLight(int skyLight) {
this.skyLight = (byte) ((skyLight & 0xF) << 4);
return (D) this;
}
public D setColor(Long l) {
if (l != null)
return setColor(l.longValue());
else
return setColor(0xFF, 0xFF, 0xFF);
}
private D setColor(long l) {
int color = ColorHelper.colorFromLong(l);
byte r = (byte) ((color >> 16) & 0xFF);
byte g = (byte) ((color >> 8) & 0xFF);
byte b = (byte) (color & 0xFF);
return setColor(r, g, b);
}
public D setColor(int r, int g, int b) {
return setColor((byte) r, (byte) g, (byte) b);
}
public D setColor(byte r, byte g, byte b) {
this.r = r;
this.g = g;
this.b = b;
return (D) this;
}
public D setRotationalSpeed(float rotationalSpeed) {
this.rotationalSpeed = rotationalSpeed;
return (D) this;
}
public D setRotationOffset(float rotationOffset) {
this.rotationOffset = rotationOffset;
return (D) this;
}
@Override
public void write(ByteBuffer buf) {
putVec3(buf, x, y, z);
putVec2(buf, blockLight, skyLight);
putVec3(buf, r, g, b);
put(buf, rotationalSpeed);
put(buf, rotationOffset);
}
}

View file

@ -0,0 +1,13 @@
package com.simibubi.create.content.contraptions.base;
import com.simibubi.create.content.contraptions.components.actors.ContraptionActorData;
import com.simibubi.create.content.contraptions.relays.belt.BeltData;
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
import com.simibubi.create.foundation.render.backend.instancing.MaterialType;
public class KineticRenderMaterials {
public static final MaterialType<InstancedModel<RotatingData>> ROTATING = new MaterialType<>();
public static final MaterialType<InstancedModel<BeltData>> BELTS = new MaterialType<>();
public static final MaterialType<InstancedModel<ContraptionActorData>> ACTORS = new MaterialType<>();
}

View file

@ -8,6 +8,7 @@ import java.util.List;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import com.simibubi.create.Create; import com.simibubi.create.Create;
import com.simibubi.create.CreateClient;
import com.simibubi.create.content.contraptions.KineticNetwork; import com.simibubi.create.content.contraptions.KineticNetwork;
import com.simibubi.create.content.contraptions.RotationPropagator; import com.simibubi.create.content.contraptions.RotationPropagator;
import com.simibubi.create.content.contraptions.base.IRotate.SpeedLevel; import com.simibubi.create.content.contraptions.base.IRotate.SpeedLevel;
@ -17,6 +18,8 @@ import com.simibubi.create.content.contraptions.goggles.IHaveHoveringInformation
import com.simibubi.create.foundation.advancement.AllTriggers; import com.simibubi.create.foundation.advancement.AllTriggers;
import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.item.TooltipHelper; import com.simibubi.create.foundation.item.TooltipHelper;
import com.simibubi.create.foundation.render.backend.FastRenderDispatcher;
import com.simibubi.create.foundation.render.backend.instancing.IInstanceRendered;
import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.Lang;
@ -32,12 +35,16 @@ import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.Direction.Axis; import net.minecraft.util.Direction.Axis;
import net.minecraft.util.Direction.AxisDirection; import net.minecraft.util.Direction.AxisDirection;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.TextFormatting;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.fml.DistExecutor;
public abstract class KineticTileEntity extends SmartTileEntity public abstract class KineticTileEntity extends SmartTileEntity
implements ITickableTileEntity, IHaveGoggleInformation, IHaveHoveringInformation { implements ITickableTileEntity, IHaveGoggleInformation, IHaveHoveringInformation, IInstanceRendered {
public @Nullable Long network; public @Nullable Long network;
public @Nullable BlockPos source; public @Nullable BlockPos source;
@ -166,10 +173,6 @@ public abstract class KineticTileEntity extends SmartTileEntity
boolean directionSwap = !fromOrToZero && Math.signum(previousSpeed) != Math.signum(getSpeed()); boolean directionSwap = !fromOrToZero && Math.signum(previousSpeed) != Math.signum(getSpeed());
if (fromOrToZero || directionSwap) if (fromOrToZero || directionSwap)
flickerTally = getFlickerScore() + 5; flickerTally = getFlickerScore() + 5;
if (fromOrToZero && previousSpeed == 0 && !world.isRemote)
AllTriggers.getPlayersInRange(world, pos, 4)
.forEach(p -> AllTriggers.KINETIC_BLOCK.trigger(p, getBlockState()));
} }
@Override @Override
@ -245,6 +248,9 @@ public abstract class KineticTileEntity extends SmartTileEntity
if (clientPacket && overStressedBefore != overStressed && speed != 0) if (clientPacket && overStressedBefore != overStressed && speed != 0)
effects.triggerOverStressedEffect(); effects.triggerOverStressedEffect();
if (clientPacket)
FastRenderDispatcher.enqueueUpdate(this);
} }
public float getGeneratedSpeed() { public float getGeneratedSpeed() {
@ -465,7 +471,7 @@ public abstract class KineticTileEntity extends SmartTileEntity
/** /**
* Specify ratio of transferred rotation from this kinetic component to a * Specify ratio of transferred rotation from this kinetic component to a
* specific other. * specific other.
* *
* @param target other Kinetic TE to transfer to * @param target other Kinetic TE to transfer to
* @param stateFrom this TE's blockstate * @param stateFrom this TE's blockstate
* @param stateTo other TE's blockstate * @param stateTo other TE's blockstate
@ -486,7 +492,7 @@ public abstract class KineticTileEntity extends SmartTileEntity
* Specify additional locations the rotation propagator should look for * Specify additional locations the rotation propagator should look for
* potentially connected components. Neighbour list contains offset positions in * potentially connected components. Neighbour list contains offset positions in
* all 6 directions by default. * all 6 directions by default.
* *
* @param block * @param block
* @param state * @param state
* @param neighbours * @param neighbours
@ -513,7 +519,7 @@ public abstract class KineticTileEntity extends SmartTileEntity
* circumstance. Shaft and cogwheel connections are already handled by internal * circumstance. Shaft and cogwheel connections are already handled by internal
* logic. Does not have to be specified on both ends, it is assumed that this * logic. Does not have to be specified on both ends, it is assumed that this
* relation is symmetrical. * relation is symmetrical.
* *
* @param other * @param other
* @param state * @param state
* @param otherState * @param otherState
@ -528,4 +534,42 @@ public abstract class KineticTileEntity extends SmartTileEntity
return block.hasIntegratedCogwheel(world, pos, state); return block.hasIntegratedCogwheel(world, pos, state);
} }
@Override
public void onLoad() {
super.onLoad();
if (world != null && world.isRemote)
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> CreateClient.kineticRenderer.add(this));
}
@Override
public void onChunkUnloaded() {
if (world != null && world.isRemote)
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> CreateClient.kineticRenderer.remove(this));
}
@Override
public void requestModelDataUpdate() {
super.requestModelDataUpdate();
if (!this.removed) {
FastRenderDispatcher.enqueueUpdate(this);
}
}
@Override
public void onChunkLightUpdate() {
CreateClient.kineticRenderer.onLightUpdate(this);
}
protected AxisAlignedBB cachedBoundingBox;
@OnlyIn(Dist.CLIENT)
public AxisAlignedBB getRenderBoundingBox() {
if (cachedBoundingBox == null) {
cachedBoundingBox = makeRenderBoundingBox();
}
return cachedBoundingBox;
}
protected AxisAlignedBB makeRenderBoundingBox() {
return super.getRenderBoundingBox();
}
} }

View file

@ -6,11 +6,12 @@ import com.simibubi.create.AllBlocks;
import com.simibubi.create.CreateClient; import com.simibubi.create.CreateClient;
import com.simibubi.create.content.contraptions.KineticDebugger; import com.simibubi.create.content.contraptions.KineticDebugger;
import com.simibubi.create.content.contraptions.relays.elementary.CogWheelBlock; import com.simibubi.create.content.contraptions.relays.elementary.CogWheelBlock;
import com.simibubi.create.foundation.render.Compartment;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.backend.FastRenderDispatcher;
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer; import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.AnimationTickHolder;
import com.simibubi.create.foundation.utility.ColorHelper; import com.simibubi.create.foundation.utility.ColorHelper;
import com.simibubi.create.foundation.utility.SuperByteBuffer;
import com.simibubi.create.foundation.utility.SuperByteBufferCache.Compartment;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.IRenderTypeBuffer;
@ -38,6 +39,8 @@ public class KineticTileEntityRenderer extends SafeTileEntityRenderer<KineticTil
@Override @Override
protected void renderSafe(KineticTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, protected void renderSafe(KineticTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer,
int light, int overlay) { int light, int overlay) {
if (FastRenderDispatcher.available(te.getWorld())) return;
for (RenderType type : RenderType.getBlockLayers()) for (RenderType type : RenderType.getBlockLayers())
if (RenderTypeLookup.canRenderInLayer(te.getBlockState(), type)) if (RenderTypeLookup.canRenderInLayer(te.getBlockState(), type))
renderRotatingBuffer(te, getRotatedModel(te), ms, buffer.getBuffer(type), light); renderRotatingBuffer(te, getRotatedModel(te), ms, buffer.getBuffer(type), light);

View file

@ -0,0 +1,71 @@
package com.simibubi.create.content.contraptions.base;
import java.util.function.Consumer;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.contraptions.relays.elementary.CogWheelBlock;
import com.simibubi.create.content.contraptions.relays.elementary.ShaftBlock;
import com.simibubi.create.foundation.render.backend.instancing.InstanceKey;
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
import com.simibubi.create.foundation.render.backend.instancing.RenderMaterial;
import com.simibubi.create.foundation.render.backend.instancing.TileEntityInstance;
import net.minecraft.block.BlockState;
import net.minecraft.util.Direction;
import net.minecraft.world.LightType;
public abstract class KineticTileInstance<T extends KineticTileEntity> extends TileEntityInstance<T> {
public KineticTileInstance(InstancedTileRenderer<?> modelManager, T tile) {
super(modelManager, tile);
}
protected final void updateRotation(InstanceKey<RotatingData> key, Direction.Axis axis) {
key.modifyInstance(data -> {
data.setColor(tile.network)
.setRotationalSpeed(tile.getSpeed())
.setRotationOffset(getRotationOffset(axis))
.setRotationAxis(axis);
});
}
protected final Consumer<RotatingData> setupFunc(float speed, Direction.Axis axis) {
return data -> {
data.setBlockLight(world.getLightLevel(LightType.BLOCK, pos))
.setSkyLight(world.getLightLevel(LightType.SKY, pos))
.setTileEntity(tile)
.setRotationalSpeed(speed)
.setRotationOffset(getRotationOffset(axis))
.setRotationAxis(axis);
};
}
protected final void relight(KineticData<?> data) {
data.setBlockLight(world.getLightLevel(LightType.BLOCK, pos))
.setSkyLight(world.getLightLevel(LightType.SKY, pos));
}
protected float getRotationOffset(final Direction.Axis axis) {
float offset = CogWheelBlock.isLargeCog(lastState) ? 11.25f : 0;
double d = (((axis == Direction.Axis.X) ? 0 : pos.getX()) + ((axis == Direction.Axis.Y) ? 0 : pos.getY())
+ ((axis == Direction.Axis.Z) ? 0 : pos.getZ())) % 2;
if (d == 0) {
offset = 22.5f;
}
return offset;
}
public static BlockState shaft(Direction.Axis axis) {
return AllBlocks.SHAFT.getDefaultState()
.with(ShaftBlock.AXIS, axis);
}
public Direction.Axis getRotationAxis() {
return ((IRotate) lastState.getBlock()).getRotationAxis(lastState);
}
protected final RenderMaterial<?, InstancedModel<RotatingData>> rotatingMaterial() {
return modelManager.getMaterial(KineticRenderMaterials.ROTATING);
}
}

View file

@ -0,0 +1,42 @@
package com.simibubi.create.content.contraptions.base;
import com.simibubi.create.foundation.render.backend.gl.attrib.CommonAttributes;
import com.simibubi.create.foundation.render.backend.gl.attrib.IVertexAttrib;
import com.simibubi.create.foundation.render.backend.gl.attrib.VertexAttribSpec;
public enum KineticVertexAttributes implements IVertexAttrib {
INSTANCE_POSITION("aInstancePos", CommonAttributes.VEC3),
LIGHT("aLight", CommonAttributes.LIGHT),
NETWORK_COLOR("aNetworkTint", CommonAttributes.RGB),
SPEED("aSpeed", CommonAttributes.FLOAT),
OFFSET("aOffset", CommonAttributes.FLOAT),
;
private final String name;
private final VertexAttribSpec spec;
KineticVertexAttributes(String name, VertexAttribSpec spec) {
this.name = name;
this.spec = spec;
}
@Override
public String attribName() {
return name;
}
@Override
public VertexAttribSpec attribSpec() {
return spec;
}
@Override
public int getDivisor() {
return 1;
}
@Override
public int getBufferIndex() {
return 1;
}
}

View file

@ -27,7 +27,7 @@ public abstract class RotatedPillarKineticBlock extends KineticBlock {
switch (rot) { switch (rot) {
case COUNTERCLOCKWISE_90: case COUNTERCLOCKWISE_90:
case CLOCKWISE_90: case CLOCKWISE_90:
switch ((Direction.Axis) state.get(AXIS)) { switch (state.get(AXIS)) {
case X: case X:
return state.with(AXIS, Direction.Axis.Z); return state.with(AXIS, Direction.Axis.Z);
case Z: case Z:

View file

@ -0,0 +1,49 @@
package com.simibubi.create.content.contraptions.base;
import java.nio.ByteBuffer;
import com.simibubi.create.foundation.render.backend.gl.attrib.VertexFormat;
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
import net.minecraft.client.renderer.Vector3f;
import net.minecraft.util.Direction;
public class RotatingData extends KineticData<RotatingData> {
public static VertexFormat FORMAT = VertexFormat.builder()
.addAttributes(KineticVertexAttributes.class)
.addAttributes(RotatingVertexAttributes.class)
.build();
private byte rotationAxisX;
private byte rotationAxisY;
private byte rotationAxisZ;
protected RotatingData(InstancedModel<?> owner) {
super(owner);
}
public RotatingData setRotationAxis(Direction.Axis axis) {
Direction orientation = Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, axis);
setRotationAxis(orientation.getUnitVector());
return this;
}
public RotatingData setRotationAxis(Vector3f axis) {
setRotationAxis(axis.getX(), axis.getY(), axis.getZ());
return this;
}
public RotatingData setRotationAxis(float rotationAxisX, float rotationAxisY, float rotationAxisZ) {
this.rotationAxisX = (byte) (rotationAxisX * 127);
this.rotationAxisY = (byte) (rotationAxisY * 127);
this.rotationAxisZ = (byte) (rotationAxisZ * 127);
return this;
}
@Override
public void write(ByteBuffer buf) {
super.write(buf);
putVec3(buf, rotationAxisX, rotationAxisY, rotationAxisZ);
}
}

View file

@ -0,0 +1,24 @@
package com.simibubi.create.content.contraptions.base;
import com.simibubi.create.foundation.render.backend.gl.attrib.VertexFormat;
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
import net.minecraft.client.renderer.BufferBuilder;
public class RotatingInstancedModel extends InstancedModel<RotatingData> {
public RotatingInstancedModel(InstancedTileRenderer<?> renderer, BufferBuilder buf) {
super(renderer, buf);
}
@Override
protected RotatingData newInstance() {
return new RotatingData(this);
}
@Override
protected VertexFormat getInstanceFormat() {
return RotatingData.FORMAT;
}
}

View file

@ -0,0 +1,38 @@
package com.simibubi.create.content.contraptions.base;
import com.simibubi.create.foundation.render.backend.gl.attrib.CommonAttributes;
import com.simibubi.create.foundation.render.backend.gl.attrib.IVertexAttrib;
import com.simibubi.create.foundation.render.backend.gl.attrib.VertexAttribSpec;
public enum RotatingVertexAttributes implements IVertexAttrib {
AXIS("aAxis", CommonAttributes.NORMAL),
;
private final String name;
private final VertexAttribSpec spec;
RotatingVertexAttributes(String name, VertexAttribSpec spec) {
this.name = name;
this.spec = spec;
}
@Override
public String attribName() {
return name;
}
@Override
public VertexAttribSpec attribSpec() {
return spec;
}
@Override
public int getDivisor() {
return 1;
}
@Override
public int getBufferIndex() {
return 1;
}
}

View file

@ -0,0 +1,26 @@
package com.simibubi.create.content.contraptions.base;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderRegistry;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
import net.minecraft.tileentity.TileEntityType;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.fml.DistExecutor;
public class ShaftlessCogInstance extends SingleRotatingInstance {
public static void register(TileEntityType<? extends KineticTileEntity> type) {
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () ->
InstancedTileRenderRegistry.instance.register(type, ShaftlessCogInstance::new));
}
public ShaftlessCogInstance(InstancedTileRenderer modelManager, KineticTileEntity tile) {
super(modelManager, tile);
}
@Override
protected InstancedModel<RotatingData> getModel() {
return AllBlockPartials.SHAFTLESS_COGWHEEL.renderOnRotating(modelManager, tile.getBlockState());
}
}

View file

@ -0,0 +1,57 @@
package com.simibubi.create.content.contraptions.base;
import static com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer.KINETIC_TILE;
import com.simibubi.create.foundation.render.backend.instancing.InstanceKey;
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderRegistry;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
import net.minecraft.block.BlockState;
import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.Direction;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.fml.DistExecutor;
public class SingleRotatingInstance extends KineticTileInstance<KineticTileEntity> {
public static void register(TileEntityType<? extends KineticTileEntity> type) {
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () ->
InstancedTileRenderRegistry.instance.register(type, SingleRotatingInstance::new));
}
protected InstanceKey<RotatingData> rotatingModelKey;
public SingleRotatingInstance(InstancedTileRenderer modelManager, KineticTileEntity tile) {
super(modelManager, tile);
}
@Override
protected void init() {
Direction.Axis axis = ((IRotate) lastState.getBlock()).getRotationAxis(lastState);
rotatingModelKey = getModel().setupInstance(setupFunc(tile.getSpeed(), axis));
}
@Override
public void onUpdate() {
Direction.Axis axis = ((IRotate) lastState.getBlock()).getRotationAxis(lastState);
updateRotation(rotatingModelKey, axis);
}
@Override
public void updateLight() {
rotatingModelKey.modifyInstance(this::relight);
}
@Override
public void remove() {
rotatingModelKey.delete();
}
protected BlockState getRenderedBlockState() {
return lastState;
}
protected InstancedModel<RotatingData> getModel() {
return rotatingMaterial().getModel(KINETIC_TILE, getRenderedBlockState());
}
}

View file

@ -0,0 +1,43 @@
package com.simibubi.create.content.contraptions.components.actors;
import com.simibubi.create.foundation.render.backend.gl.attrib.CommonAttributes;
import com.simibubi.create.foundation.render.backend.gl.attrib.IVertexAttrib;
import com.simibubi.create.foundation.render.backend.gl.attrib.VertexAttribSpec;
public enum ActorVertexAttributes implements IVertexAttrib {
INSTANCE_POSITION("aInstancePos", CommonAttributes.VEC3),
LIGHT("aModelLight", CommonAttributes.LIGHT),
OFFSET("aOffset", CommonAttributes.FLOAT),
AXIS("aAxis", CommonAttributes.NORMAL),
INSTANCE_ROTATION("aInstanceRot", CommonAttributes.VEC3),
ROTATION_CENTER("aRotationCenter", CommonAttributes.NORMAL),
;
private final String name;
private final VertexAttribSpec spec;
ActorVertexAttributes(String name, VertexAttribSpec spec) {
this.name = name;
this.spec = spec;
}
@Override
public String attribName() {
return name;
}
@Override
public VertexAttribSpec attribSpec() {
return spec;
}
@Override
public int getDivisor() {
return 1;
}
@Override
public int getBufferIndex() {
return 1;
}
}

View file

@ -10,8 +10,8 @@ import net.minecraft.util.math.Vec3d;
public class BellMovementBehaviour extends MovementBehaviour { public class BellMovementBehaviour extends MovementBehaviour {
@Override @Override
public boolean hasSpecialMovementRenderer() { public boolean renderAsNormalTileEntity() {
return false; return true;
} }
@Override @Override

View file

@ -10,8 +10,8 @@ import net.minecraft.particles.ParticleTypes;
public class CampfireMovementBehaviour extends MovementBehaviour { public class CampfireMovementBehaviour extends MovementBehaviour {
@Override @Override
public boolean hasSpecialMovementRenderer() { public boolean renderAsNormalTileEntity() {
return false; return true;
} }
@Override @Override

View file

@ -0,0 +1,106 @@
package com.simibubi.create.content.contraptions.components.actors;
import java.nio.ByteBuffer;
import com.simibubi.create.foundation.render.backend.gl.attrib.VertexFormat;
import com.simibubi.create.foundation.render.backend.instancing.InstanceData;
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
import net.minecraft.client.renderer.Vector3f;
import net.minecraft.util.math.BlockPos;
public class ContraptionActorData extends InstanceData {
public static VertexFormat FORMAT = VertexFormat.builder()
.addAttributes(ActorVertexAttributes.class)
.build();
private float x;
private float y;
private float z;
private byte blockLight;
private byte skyLight;
private float rotationOffset;
private byte rotationAxisX;
private byte rotationAxisY;
private byte rotationAxisZ;
private float localRotationX;
private float localRotationY;
private float localRotationZ;
private byte rotationCenterX = 64;
private byte rotationCenterY = 64;
private byte rotationCenterZ = 64;
protected ContraptionActorData(InstancedModel<?> owner) {
super(owner);
}
public ContraptionActorData setPosition(BlockPos pos) {
this.x = pos.getX();
this.y = pos.getY();
this.z = pos.getZ();
return this;
}
public ContraptionActorData setBlockLight(int blockLight) {
this.blockLight = (byte) ((blockLight & 0xF) << 4);
return this;
}
public ContraptionActorData setSkyLight(int skyLight) {
this.skyLight = (byte) ((skyLight & 0xF) << 4);
return this;
}
public ContraptionActorData setRotationOffset(float rotationOffset) {
this.rotationOffset = rotationOffset;
return this;
}
public ContraptionActorData setRotationAxis(Vector3f axis) {
setRotationAxis(axis.getX(), axis.getY(), axis.getZ());
return this;
}
public ContraptionActorData setRotationAxis(float rotationAxisX, float rotationAxisY, float rotationAxisZ) {
this.rotationAxisX = (byte) (rotationAxisX * 127);
this.rotationAxisY = (byte) (rotationAxisY * 127);
this.rotationAxisZ = (byte) (rotationAxisZ * 127);
return this;
}
public ContraptionActorData setRotationCenter(Vector3f axis) {
setRotationCenter(axis.getX(), axis.getY(), axis.getZ());
return this;
}
public ContraptionActorData setRotationCenter(float rotationCenterX, float rotationCenterY, float rotationCenterZ) {
this.rotationCenterX = (byte) (rotationCenterX * 127);
this.rotationCenterY = (byte) (rotationCenterY * 127);
this.rotationCenterZ = (byte) (rotationCenterZ * 127);
return this;
}
public ContraptionActorData setLocalRotation(Vector3f axis) {
setLocalRotation(axis.getX(), axis.getY(), axis.getZ());
return this;
}
public ContraptionActorData setLocalRotation(float localRotationX, float localRotationY, float localRotationZ) {
this.localRotationX = localRotationX;
this.localRotationY = localRotationY;
this.localRotationZ = localRotationZ;
return this;
}
@Override
public void write(ByteBuffer buf) {
putVec3(buf, x, y, z);
putVec2(buf, blockLight, skyLight);
put(buf, rotationOffset);
putVec3(buf, rotationAxisX, rotationAxisY, rotationAxisZ);
putVec3(buf, localRotationX, localRotationY, localRotationZ);
putVec3(buf, rotationCenterX, rotationCenterY, rotationCenterZ);
}
}

View file

@ -0,0 +1,53 @@
package com.simibubi.create.content.contraptions.components.actors;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.RotatingData;
import com.simibubi.create.content.contraptions.base.SingleRotatingInstance;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
import com.simibubi.create.content.contraptions.components.structureMovement.render.RenderedContraption;
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderRegistry;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
import com.simibubi.create.foundation.render.backend.instancing.RenderMaterial;
import com.simibubi.create.foundation.utility.AngleHelper;
import net.minecraft.block.BlockState;
import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.Direction;
import net.minecraft.world.LightType;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.fml.DistExecutor;
public class DrillInstance extends SingleRotatingInstance {
public static void register(TileEntityType<? extends KineticTileEntity> type) {
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () ->
InstancedTileRenderRegistry.instance.register(type, DrillInstance::new)); }
public DrillInstance(InstancedTileRenderer modelManager, KineticTileEntity tile) {
super(modelManager, tile);
}
public static void addInstanceForContraption(RenderedContraption contraption, MovementContext context) {
RenderMaterial<?, InstancedModel<ContraptionActorData>> renderMaterial = contraption.getActorMaterial();
BlockState state = context.state;
InstancedModel<ContraptionActorData> model = renderMaterial.getModel(AllBlockPartials.DRILL_HEAD, state);
model.setupInstance(data -> {
Direction facing = state.get(DrillBlock.FACING);
float eulerX = AngleHelper.verticalAngle(facing) + ((facing.getAxis() == Direction.Axis.Y) ? 180 : 0);
float eulerY = facing.getHorizontalAngle();
data.setPosition(context.localPos)
.setBlockLight(contraption.renderWorld.getLightLevel(LightType.BLOCK, context.localPos))
.setRotationOffset(0)
.setRotationAxis(0, 0, 1)
.setLocalRotation(eulerX, eulerY, 0);
});
}
@Override
protected InstancedModel<RotatingData> getModel() {
return AllBlockPartials.DRILL_HEAD.renderOnDirectionalSouthRotating(modelManager, tile.getBlockState());
}
}

View file

@ -2,6 +2,8 @@ package com.simibubi.create.content.contraptions.components.actors;
import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
import com.simibubi.create.content.contraptions.components.structureMovement.render.RenderedContraption;
import com.simibubi.create.foundation.render.backend.FastRenderDispatcher;
import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.VecHelper;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
@ -31,7 +33,18 @@ public class DrillMovementBehaviour extends BlockBreakingMovementBehaviour {
@OnlyIn(value = Dist.CLIENT) @OnlyIn(value = Dist.CLIENT)
public void renderInContraption(MovementContext context, MatrixStack ms, MatrixStack msLocal, public void renderInContraption(MovementContext context, MatrixStack ms, MatrixStack msLocal,
IRenderTypeBuffer buffer) { IRenderTypeBuffer buffer) {
DrillRenderer.renderInContraption(context, ms, msLocal, buffer); if (!FastRenderDispatcher.available())
DrillRenderer.renderInContraption(context, ms, msLocal, buffer);
}
@Override
public boolean hasSpecialInstancedRendering() {
return true;
}
@Override
public void addInstance(RenderedContraption contraption, MovementContext context) {
DrillInstance.addInstanceForContraption(contraption, context);
} }
@Override @Override

View file

@ -7,10 +7,10 @@ import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.AnimationTickHolder;
import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.MatrixStacker;
import com.simibubi.create.foundation.utility.SuperByteBuffer;
import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.VecHelper;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;

View file

@ -7,6 +7,8 @@ import org.apache.commons.lang3.mutable.MutableBoolean;
import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
import com.simibubi.create.content.contraptions.components.structureMovement.render.RenderedContraption;
import com.simibubi.create.foundation.render.backend.FastRenderDispatcher;
import com.simibubi.create.foundation.utility.BlockHelper; import com.simibubi.create.foundation.utility.BlockHelper;
import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.VecHelper;
@ -35,10 +37,21 @@ public class HarvesterMovementBehaviour extends MovementBehaviour {
.getOpposite()); .getOpposite());
} }
@Override
public boolean hasSpecialInstancedRendering() {
return true;
}
@Override
public void addInstance(RenderedContraption contraption, MovementContext context) {
HarvesterRenderer.addInstanceForContraption(contraption, context);
}
@Override @Override
public void renderInContraption(MovementContext context, MatrixStack ms, MatrixStack msLocal, public void renderInContraption(MovementContext context, MatrixStack ms, MatrixStack msLocal,
IRenderTypeBuffer buffers) { IRenderTypeBuffer buffers) {
HarvesterRenderer.renderInContraption(context, ms, msLocal, buffers); if (!FastRenderDispatcher.available())
HarvesterRenderer.renderInContraption(context, ms, msLocal, buffers);
} }
@Override @Override

View file

@ -5,19 +5,25 @@ import static net.minecraft.state.properties.BlockStateProperties.HORIZONTAL_FAC
import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher;
import com.simibubi.create.content.contraptions.components.structureMovement.render.RenderedContraption;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
import com.simibubi.create.foundation.render.backend.instancing.RenderMaterial;
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer; import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.AnimationTickHolder;
import com.simibubi.create.foundation.utility.SuperByteBuffer;
import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.VecHelper;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.Vector3f;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3d;
import net.minecraft.world.LightType;
public class HarvesterRenderer extends SafeTileEntityRenderer<HarvesterTileEntity> { public class HarvesterRenderer extends SafeTileEntityRenderer<HarvesterTileEntity> {
@ -34,6 +40,25 @@ public class HarvesterRenderer extends SafeTileEntityRenderer<HarvesterTileEntit
.renderInto(ms, buffer.getBuffer(RenderType.getCutoutMipped())); .renderInto(ms, buffer.getBuffer(RenderType.getCutoutMipped()));
} }
public static void addInstanceForContraption(RenderedContraption contraption, MovementContext context) {
RenderMaterial<?, InstancedModel<ContraptionActorData>> renderMaterial = contraption.getActorMaterial();
BlockState state = context.state;
InstancedModel<ContraptionActorData> model = renderMaterial.getModel(AllBlockPartials.HARVESTER_BLADE, state);
model.setupInstance(data -> {
Direction facing = state.get(HORIZONTAL_FACING);
float originOffset = 1 / 16f;
Vector3f rotOffset = new Vector3f(0.5f, -2 * originOffset + 0.5f, originOffset + 0.5f);
data.setPosition(context.localPos)
.setBlockLight(contraption.renderWorld.getLightLevel(LightType.BLOCK, context.localPos))
.setRotationOffset(0)
.setRotationCenter(rotOffset)
.setRotationAxis(-1, 0, 0)
.setLocalRotation(0, facing.getHorizontalAngle(), 0);
});
}
public static void renderInContraption(MovementContext context, MatrixStack ms, MatrixStack msLocal, public static void renderInContraption(MovementContext context, MatrixStack ms, MatrixStack msLocal,
IRenderTypeBuffer buffers) { IRenderTypeBuffer buffers) {
BlockState blockState = context.state; BlockState blockState = context.state;
@ -55,7 +80,7 @@ public class HarvesterRenderer extends SafeTileEntityRenderer<HarvesterTileEntit
.rotate(Direction.WEST, AngleHelper.rad(angle)) .rotate(Direction.WEST, AngleHelper.rad(angle))
.translate(-rotOffset.x, -rotOffset.y, -rotOffset.z) .translate(-rotOffset.x, -rotOffset.y, -rotOffset.z)
.light(msLocal.peek() .light(msLocal.peek()
.getModel()) .getModel(), ContraptionRenderDispatcher.getLightOnContraption(context))
.renderInto(ms, buffers.getBuffer(RenderType.getCutoutMipped())); .renderInto(ms, buffers.getBuffer(RenderType.getCutoutMipped()));
} }

View file

@ -37,6 +37,7 @@ public class PortableFluidInterfaceTileEntity extends PortableStorageInterfaceTi
LazyOptional<IFluidHandler> oldcap = capability; LazyOptional<IFluidHandler> oldcap = capability;
capability = createEmptyHandler(); capability = createEmptyHandler();
oldcap.invalidate(); oldcap.invalidate();
super.stopTransferring();
} }
private LazyOptional<IFluidHandler> createEmptyHandler() { private LazyOptional<IFluidHandler> createEmptyHandler() {
@ -90,7 +91,7 @@ public class PortableFluidInterfaceTileEntity extends PortableStorageInterfaceTi
@Override @Override
public FluidStack drain(FluidStack resource, FluidAction action) { public FluidStack drain(FluidStack resource, FluidAction action) {
if (!isConnected()) if (!canTransfer())
return FluidStack.EMPTY; return FluidStack.EMPTY;
FluidStack drain = wrapped.drain(resource, action); FluidStack drain = wrapped.drain(resource, action);
if (!drain.isEmpty() && action.execute()) if (!drain.isEmpty() && action.execute())
@ -100,7 +101,7 @@ public class PortableFluidInterfaceTileEntity extends PortableStorageInterfaceTi
@Override @Override
public FluidStack drain(int maxDrain, FluidAction action) { public FluidStack drain(int maxDrain, FluidAction action) {
if (!isConnected()) if (!canTransfer())
return FluidStack.EMPTY; return FluidStack.EMPTY;
FluidStack drain = wrapped.drain(maxDrain, action); FluidStack drain = wrapped.drain(maxDrain, action);
if (!drain.isEmpty() && (action.execute() || drain.getAmount() == 1)) if (!drain.isEmpty() && (action.execute() || drain.getAmount() == 1))

View file

@ -33,6 +33,7 @@ public class PortableItemInterfaceTileEntity extends PortableStorageInterfaceTil
LazyOptional<IItemHandlerModifiable> oldCap = capability; LazyOptional<IItemHandlerModifiable> oldCap = capability;
capability = LazyOptional.of(() -> new InterfaceItemHandler(new ItemStackHandler(0))); capability = LazyOptional.of(() -> new InterfaceItemHandler(new ItemStackHandler(0)));
oldCap.invalidate(); oldCap.invalidate();
super.stopTransferring();
} }
@Override @Override
@ -55,7 +56,7 @@ public class PortableItemInterfaceTileEntity extends PortableStorageInterfaceTil
@Override @Override
public ItemStack extractItem(int slot, int amount, boolean simulate) { public ItemStack extractItem(int slot, int amount, boolean simulate) {
if (!isConnected()) if (!canTransfer())
return ItemStack.EMPTY; return ItemStack.EMPTY;
ItemStack extractItem = super.extractItem(slot, amount, simulate); ItemStack extractItem = super.extractItem(slot, amount, simulate);
if (!simulate && !extractItem.isEmpty()) if (!simulate && !extractItem.isEmpty())
@ -65,7 +66,7 @@ public class PortableItemInterfaceTileEntity extends PortableStorageInterfaceTil
@Override @Override
public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) {
if (!isConnected()) if (!canTransfer())
return stack; return stack;
ItemStack insertItem = super.insertItem(slot, stack, simulate); ItemStack insertItem = super.insertItem(slot, stack, simulate);
if (!simulate && !insertItem.equals(stack, false)) if (!simulate && !insertItem.equals(stack, false))

View file

@ -7,13 +7,14 @@ import com.mojang.blaze3d.vertex.IVertexBuilder;
import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer; import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.MatrixStacker;
import com.simibubi.create.foundation.utility.SuperByteBuffer;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
@ -43,8 +44,7 @@ public class PortableStorageInterfaceRenderer extends SafeTileEntityRenderer<Por
BlockState blockState = context.state; BlockState blockState = context.state;
PortableStorageInterfaceTileEntity te = getTargetPSI(context); PortableStorageInterfaceTileEntity te = getTargetPSI(context);
IVertexBuilder vb = buffer.getBuffer(RenderType.getSolid()); IVertexBuilder vb = buffer.getBuffer(RenderType.getSolid());
float renderPartialTicks = Minecraft.getInstance() float renderPartialTicks = AnimationTickHolder.getPartialTicks();
.getRenderPartialTicks();
float progress = 0; float progress = 0;
boolean lit = false; boolean lit = false;
@ -54,26 +54,10 @@ public class PortableStorageInterfaceRenderer extends SafeTileEntityRenderer<Por
} }
render(blockState, progress, lit, sbb -> sbb.light(msLocal.peek() render(blockState, progress, lit, sbb -> sbb.light(msLocal.peek()
.getModel()) .getModel(), ContraptionRenderDispatcher.getLightOnContraption(context))
.renderInto(ms, vb), ms, msLocal); .renderInto(ms, vb), ms, msLocal);
} }
protected static PortableStorageInterfaceTileEntity getTargetPSI(MovementContext context) {
String _workingPos_ = PortableStorageInterfaceMovement._workingPos_;
if (!context.contraption.stalled || !context.data.contains(_workingPos_))
return null;
BlockPos pos = NBTUtil.readBlockPos(context.data.getCompound(_workingPos_));
TileEntity tileEntity = context.world.getTileEntity(pos);
if (!(tileEntity instanceof PortableStorageInterfaceTileEntity))
return null;
PortableStorageInterfaceTileEntity psi = (PortableStorageInterfaceTileEntity) tileEntity;
if (!psi.isTransferring())
return null;
return psi;
}
private static void render(BlockState blockState, float progress, boolean lit, private static void render(BlockState blockState, float progress, boolean lit,
Consumer<SuperByteBuffer> drawCallback, MatrixStack... matrixStacks) { Consumer<SuperByteBuffer> drawCallback, MatrixStack... matrixStacks) {
for (MatrixStack ms : matrixStacks) for (MatrixStack ms : matrixStacks)
@ -109,6 +93,22 @@ public class PortableStorageInterfaceRenderer extends SafeTileEntityRenderer<Por
ms.pop(); ms.pop();
} }
protected static PortableStorageInterfaceTileEntity getTargetPSI(MovementContext context) {
String _workingPos_ = PortableStorageInterfaceMovement._workingPos_;
if (!context.contraption.stalled || !context.data.contains(_workingPos_))
return null;
BlockPos pos = NBTUtil.readBlockPos(context.data.getCompound(_workingPos_));
TileEntity tileEntity = context.world.getTileEntity(pos);
if (!(tileEntity instanceof PortableStorageInterfaceTileEntity))
return null;
PortableStorageInterfaceTileEntity psi = (PortableStorageInterfaceTileEntity) tileEntity;
if (!psi.isTransferring())
return null;
return psi;
}
static AllBlockPartials getMiddleForState(BlockState state, boolean lit) { static AllBlockPartials getMiddleForState(BlockState state, boolean lit) {
if (AllBlocks.PORTABLE_FLUID_INTERFACE.has(state)) if (AllBlocks.PORTABLE_FLUID_INTERFACE.has(state))
return lit ? AllBlockPartials.PORTABLE_FLUID_INTERFACE_MIDDLE_POWERED return lit ? AllBlockPartials.PORTABLE_FLUID_INTERFACE_MIDDLE_POWERED

View file

@ -8,6 +8,7 @@ import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
import com.simibubi.create.foundation.utility.LerpedFloat; import com.simibubi.create.foundation.utility.LerpedFloat;
import net.minecraft.entity.Entity;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
import net.minecraft.tileentity.TileEntityType; import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.AxisAlignedBB;
@ -21,6 +22,7 @@ public abstract class PortableStorageInterfaceTileEntity extends SmartTileEntity
protected float distance; protected float distance;
protected LerpedFloat connectionAnimation; protected LerpedFloat connectionAnimation;
protected boolean powered; protected boolean powered;
protected Entity connectedEntity;
public PortableStorageInterfaceTileEntity(TileEntityType<?> tileEntityTypeIn) { public PortableStorageInterfaceTileEntity(TileEntityType<?> tileEntityTypeIn) {
super(tileEntityTypeIn); super(tileEntityTypeIn);
@ -32,11 +34,20 @@ public abstract class PortableStorageInterfaceTileEntity extends SmartTileEntity
public void startTransferringTo(Contraption contraption, float distance) { public void startTransferringTo(Contraption contraption, float distance) {
this.distance = distance; this.distance = distance;
connectedEntity = contraption.entity;
startConnecting(); startConnecting();
notifyUpdate(); notifyUpdate();
} }
protected abstract void stopTransferring(); protected void stopTransferring() {
connectedEntity = null;
}
public boolean canTransfer() {
if (connectedEntity != null && !connectedEntity.isAlive())
stopTransferring();
return connectedEntity != null && isConnected();
}
protected abstract void invalidateCapability(); protected abstract void invalidateCapability();
@ -100,10 +111,14 @@ public abstract class PortableStorageInterfaceTileEntity extends SmartTileEntity
return powered; return powered;
} }
protected AxisAlignedBB cachedBoundingBox;
@Override @Override
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public AxisAlignedBB getRenderBoundingBox() { public AxisAlignedBB getRenderBoundingBox() {
return super.getRenderBoundingBox().grow(2); if (cachedBoundingBox == null) {
cachedBoundingBox = super.getRenderBoundingBox().grow(2);
}
return cachedBoundingBox;
} }
public boolean isTransferring() { public boolean isTransferring() {

View file

@ -0,0 +1,23 @@
package com.simibubi.create.content.contraptions.components.actors;
import com.simibubi.create.foundation.render.backend.gl.attrib.VertexFormat;
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
import net.minecraft.client.renderer.BufferBuilder;
public class RotatingActorModel extends InstancedModel<ContraptionActorData> {
public RotatingActorModel(InstancedTileRenderer<?> renderer, BufferBuilder buf) {
super(renderer, buf);
}
@Override
protected VertexFormat getInstanceFormat() {
return ContraptionActorData.FORMAT;
}
@Override
protected ContraptionActorData newInstance() {
return new ContraptionActorData(this);
}
}

View file

@ -6,8 +6,8 @@ import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.content.contraptions.components.clock.CuckooClockTileEntity.Animation; import com.simibubi.create.content.contraptions.components.clock.CuckooClockTileEntity.Animation;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.SuperByteBuffer;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.IRenderTypeBuffer;

View file

@ -95,9 +95,9 @@ public class CuckooClockTileEntity extends KineticTileEntity {
moveHands(hours, minutes); moveHands(hours, minutes);
if (animationType == Animation.NONE) { if (animationType == Animation.NONE) {
if (AnimationTickHolder.ticks % 32 == 0) if (AnimationTickHolder.getTicks() % 32 == 0)
playSound(SoundEvents.BLOCK_NOTE_BLOCK_HAT, 1 / 16f, 2f); playSound(SoundEvents.BLOCK_NOTE_BLOCK_HAT, 1 / 16f, 2f);
else if (AnimationTickHolder.ticks % 16 == 0) else if (AnimationTickHolder.getTicks() % 16 == 0)
playSound(SoundEvents.BLOCK_NOTE_BLOCK_HAT, 1 / 16f, 1.5f); playSound(SoundEvents.BLOCK_NOTE_BLOCK_HAT, 1 / 16f, 1.5f);
} else { } else {
@ -172,4 +172,8 @@ public class CuckooClockTileEntity extends KineticTileEntity {
world.playSound(vec.x, vec.y, vec.z, sound, SoundCategory.BLOCKS, volume, pitch, false); world.playSound(vec.x, vec.y, vec.z, sound, SoundCategory.BLOCKS, volume, pitch, false);
} }
@Override
public boolean shouldRenderAsTE() {
return true;
}
} }

View file

@ -0,0 +1,48 @@
package com.simibubi.create.content.contraptions.components.crafter;
import java.util.function.Supplier;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.RotatingData;
import com.simibubi.create.content.contraptions.base.SingleRotatingInstance;
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderRegistry;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
import com.simibubi.create.foundation.utility.MatrixStacker;
import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.Direction;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.fml.DistExecutor;
public class MechanicalCrafterInstance extends SingleRotatingInstance {
public static void register(TileEntityType<? extends KineticTileEntity> type) {
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () ->
InstancedTileRenderRegistry.instance.register(type, MechanicalCrafterInstance::new));
}
public MechanicalCrafterInstance(InstancedTileRenderer<?> modelManager, KineticTileEntity tile) {
super(modelManager, tile);
}
@Override
protected InstancedModel<RotatingData> getModel() {
Direction facing = lastState.get(MechanicalCrafterBlock.HORIZONTAL_FACING);
Supplier<MatrixStack> ms = () -> {
MatrixStack stack = new MatrixStack();
MatrixStacker stacker = MatrixStacker.of(stack).centre();
if (facing.getAxis() == Direction.Axis.X)
stacker.rotateZ(90);
else if (facing.getAxis() == Direction.Axis.Z)
stacker.rotateX(90);
stacker.unCentre();
return stack;
};
return rotatingMaterial().getModel(AllBlockPartials.SHAFTLESS_COGWHEEL, lastState, facing, ms);
}
}

View file

@ -9,11 +9,12 @@ import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllSpriteShifts; import com.simibubi.create.AllSpriteShifts;
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterTileEntity.Phase; import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterTileEntity.Phase;
import com.simibubi.create.content.contraptions.components.crafter.RecipeGridHandler.GroupedItems; import com.simibubi.create.content.contraptions.components.crafter.RecipeGridHandler.GroupedItems;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.backend.FastRenderDispatcher;
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer; import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.AnimationTickHolder;
import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.MatrixStacker;
import com.simibubi.create.foundation.utility.SuperByteBuffer;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -25,7 +26,6 @@ import net.minecraft.client.renderer.model.ItemCameraTransforms.TransformType;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.Direction.Axis;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3d;
@ -154,12 +154,13 @@ public class MechanicalCrafterRenderer extends SafeTileEntityRenderer<Mechanical
BlockState blockState = te.getBlockState(); BlockState blockState = te.getBlockState();
IVertexBuilder vb = buffer.getBuffer(RenderType.getSolid()); IVertexBuilder vb = buffer.getBuffer(RenderType.getSolid());
SuperByteBuffer superBuffer = AllBlockPartials.SHAFTLESS_COGWHEEL.renderOn(blockState); if (!FastRenderDispatcher.available(te.getWorld())) {
standardKineticRotationTransform(superBuffer, te, light); SuperByteBuffer superBuffer = AllBlockPartials.SHAFTLESS_COGWHEEL.renderOn(blockState);
superBuffer.rotateCentered(Direction.UP, (float) (blockState.get(HORIZONTAL_FACING) standardKineticRotationTransform(superBuffer, te, light);
.getAxis() != Axis.X ? 0 : Math.PI / 2)); superBuffer.rotateCentered(Direction.UP, (float) (blockState.get(HORIZONTAL_FACING).getAxis() != Direction.Axis.X ? 0 : Math.PI / 2));
superBuffer.rotateCentered(Direction.EAST, (float) (Math.PI / 2)); superBuffer.rotateCentered(Direction.EAST, (float) (Math.PI / 2));
superBuffer.renderInto(ms, vb); superBuffer.renderInto(ms, vb);
}
Direction targetDirection = MechanicalCrafterBlock.getTargetDirection(blockState); Direction targetDirection = MechanicalCrafterBlock.getTargetDirection(blockState);
BlockPos pos = te.getPos(); BlockPos pos = te.getPos();
@ -177,7 +178,7 @@ public class MechanicalCrafterRenderer extends SafeTileEntityRenderer<Mechanical
renderAndTransform(te, AllBlockPartials.MECHANICAL_CRAFTER_BELT_FRAME, blockState, pos); renderAndTransform(te, AllBlockPartials.MECHANICAL_CRAFTER_BELT_FRAME, blockState, pos);
if (te.phase == Phase.EXPORTING) { if (te.phase == Phase.EXPORTING) {
int textureIndex = (int) ((te.getCountDownSpeed() / 128f * AnimationTickHolder.ticks)); int textureIndex = (int) ((te.getCountDownSpeed() / 128f * AnimationTickHolder.getTicks()));
beltBuffer.shiftUVtoSheet(AllSpriteShifts.CRAFTER_THINGIES, (textureIndex % 4) / 4f, 0, 1); beltBuffer.shiftUVtoSheet(AllSpriteShifts.CRAFTER_THINGIES, (textureIndex % 4) / 4f, 0, 1);
} }

View file

@ -490,4 +490,9 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity {
return inventory; return inventory;
} }
@Override
public boolean shouldRenderAsTE() {
return true;
}
} }

View file

@ -6,7 +6,7 @@ import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.foundation.utility.SuperByteBuffer; import com.simibubi.create.foundation.render.SuperByteBuffer;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;

View file

@ -73,4 +73,8 @@ public class HandCrankTileEntity extends GeneratingKineticTileEntity {
return AllBlocks.HAND_CRANK.get(); return AllBlocks.HAND_CRANK.get();
} }
@Override
public boolean shouldRenderAsTE() {
return true;
}
} }

View file

@ -1,6 +1,7 @@
package com.simibubi.create.content.contraptions.components.crusher; package com.simibubi.create.content.contraptions.components.crusher;
import static com.simibubi.create.content.contraptions.components.crusher.CrushingWheelControllerBlock.VALID; import static com.simibubi.create.content.contraptions.components.crusher.CrushingWheelControllerBlock.VALID;
import static com.simibubi.create.content.contraptions.components.crusher.CrushingWheelControllerBlock.FACING;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllShapes; import com.simibubi.create.AllShapes;
@ -17,6 +18,7 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.Direction.Axis; import net.minecraft.util.Direction.Axis;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.ISelectionContext;
import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.util.math.shapes.VoxelShape;
import net.minecraft.world.IBlockReader; import net.minecraft.world.IBlockReader;
@ -53,7 +55,7 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock implements ITE
@Override @Override
public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) { public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) {
for (Direction d : Iterate.horizontalDirections) { for (Direction d : Iterate.directions) {
if (d.getAxis() == state.get(AXIS)) if (d.getAxis() == state.get(AXIS))
continue; continue;
if (AllBlocks.CRUSHING_WHEEL_CONTROLLER.has(worldIn.getBlockState(pos.offset(d)))) if (AllBlocks.CRUSHING_WHEEL_CONTROLLER.has(worldIn.getBlockState(pos.offset(d))))
@ -65,21 +67,26 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock implements ITE
} }
} }
public void updateControllers(BlockState state, World world, BlockPos pos, Direction facing) { public void updateControllers(BlockState state, World world, BlockPos pos, Direction side) {
if (facing.getAxis() == state.get(AXIS) || facing.getAxis() if (side.getAxis() == state.get(AXIS))
.isVertical())
return; return;
if (world == null) if (world == null)
return; return;
BlockPos controllerPos = pos.offset(facing); BlockPos controllerPos = pos.offset(side);
BlockPos otherWheelPos = pos.offset(facing, 2); BlockPos otherWheelPos = pos.offset(side, 2);
boolean controllerExists = AllBlocks.CRUSHING_WHEEL_CONTROLLER.has(world.getBlockState(controllerPos)); boolean controllerExists = AllBlocks.CRUSHING_WHEEL_CONTROLLER.has(world.getBlockState(controllerPos));
boolean controllerIsValid = controllerExists && world.getBlockState(controllerPos) boolean controllerIsValid = controllerExists && world.getBlockState(controllerPos)
.get(VALID); .get(VALID);
Direction controllerOldDirection = controllerExists
? world.getBlockState(controllerPos)
.get(FACING)
: null;
boolean controllerShouldExist = false; boolean controllerShouldExist = false;
boolean controllerShouldBeValid = false; boolean controllerShouldBeValid = false;
Direction controllerNewDirection = Direction.DOWN;
BlockState otherState = world.getBlockState(otherWheelPos); BlockState otherState = world.getBlockState(otherWheelPos);
if (AllBlocks.CRUSHING_WHEEL.has(otherState)) { if (AllBlocks.CRUSHING_WHEEL.has(otherState)) {
@ -90,10 +97,22 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock implements ITE
CrushingWheelTileEntity otherTe = getTileEntity(world, otherWheelPos); CrushingWheelTileEntity otherTe = getTileEntity(world, otherWheelPos);
if (te != null && otherTe != null && (te.getSpeed() > 0) != (otherTe.getSpeed() > 0) if (te != null && otherTe != null && (te.getSpeed() > 0) != (otherTe.getSpeed() > 0)
&& te.getSpeed() != 0) { && te.getSpeed() != 0) {
float signum = Math.signum(te.getSpeed()) * (state.get(AXIS) == Axis.X ? -1 : 1); Axis wheelAxis = state.get(AXIS);
controllerShouldBeValid = facing.getAxisDirection() Axis sideAxis = side.getAxis();
.getOffset() != signum; int controllerADO = Math.round(Math.signum(te.getSpeed())) * side.getAxisDirection().getOffset();
Vec3d controllerDirVec = new Vec3d(wheelAxis == Axis.X ? 1 : 0
, wheelAxis == Axis.Y ? 1 : 0
, wheelAxis == Axis.Z ? 1 : 0)
.crossProduct(new Vec3d(sideAxis == Axis.X ? 1 : 0
, sideAxis == Axis.Y ? 1 : 0
, sideAxis == Axis.Z ? 1 : 0));
controllerNewDirection = Direction.getFacingFromVector(controllerDirVec.x * controllerADO
, controllerDirVec.y * controllerADO
, controllerDirVec.z * controllerADO);
controllerShouldBeValid = true;
} }
if (otherState.get(AXIS) != state.get(AXIS)) if (otherState.get(AXIS) != state.get(AXIS))
controllerShouldExist = false; controllerShouldExist = false;
@ -111,18 +130,20 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock implements ITE
if (!controllerExists) { if (!controllerExists) {
if (!world.getBlockState(controllerPos) if (!world.getBlockState(controllerPos)
.getMaterial() .getMaterial()
.isReplaceable()) .isReplaceable())
return; return;
world.setBlockState(controllerPos, AllBlocks.CRUSHING_WHEEL_CONTROLLER.getDefaultState() world.setBlockState(controllerPos, AllBlocks.CRUSHING_WHEEL_CONTROLLER.getDefaultState()
.with(VALID, controllerShouldBeValid)); .with(VALID, controllerShouldBeValid)
} else if (controllerIsValid != controllerShouldBeValid) { .with(FACING, controllerNewDirection));
} else if (controllerIsValid != controllerShouldBeValid || controllerOldDirection != controllerNewDirection) {
world.setBlockState(controllerPos, world.getBlockState(controllerPos) world.setBlockState(controllerPos, world.getBlockState(controllerPos)
.with(VALID, controllerShouldBeValid)); .with(VALID, controllerShouldBeValid)
.with(FACING, controllerNewDirection));
} }
((CrushingWheelControllerBlock) AllBlocks.CRUSHING_WHEEL_CONTROLLER.get()) ((CrushingWheelControllerBlock) AllBlocks.CRUSHING_WHEEL_CONTROLLER.get())
.updateSpeed(world.getBlockState(controllerPos), world, controllerPos); .updateSpeed(world.getBlockState(controllerPos), world, controllerPos);
} }

View file

@ -3,6 +3,7 @@ package com.simibubi.create.content.contraptions.components.crusher;
import java.util.Random; import java.util.Random;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllShapes;
import com.simibubi.create.AllTileEntities; import com.simibubi.create.AllTileEntities;
import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.foundation.block.ITE; import com.simibubi.create.foundation.block.ITE;
@ -11,6 +12,7 @@ import com.simibubi.create.foundation.utility.Iterate;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.DirectionalBlock;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.item.ItemEntity;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
@ -23,7 +25,7 @@ import net.minecraft.state.StateContainer.Builder;
import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.Direction.Axis;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3d;
import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.ISelectionContext;
@ -34,7 +36,7 @@ import net.minecraft.world.IBlockReader;
import net.minecraft.world.IWorld; import net.minecraft.world.IWorld;
import net.minecraft.world.World; import net.minecraft.world.World;
public class CrushingWheelControllerBlock extends Block public class CrushingWheelControllerBlock extends DirectionalBlock
implements ITE<CrushingWheelControllerTileEntity> { implements ITE<CrushingWheelControllerTileEntity> {
public CrushingWheelControllerBlock(Properties p_i48440_1_) { public CrushingWheelControllerBlock(Properties p_i48440_1_) {
@ -66,27 +68,40 @@ public class CrushingWheelControllerBlock extends Block
@Override @Override
protected void fillStateContainer(Builder<Block, BlockState> builder) { protected void fillStateContainer(Builder<Block, BlockState> builder) {
builder.add(VALID); builder.add(VALID);
builder.add(FACING);
super.fillStateContainer(builder); super.fillStateContainer(builder);
} }
public void onEntityCollision(BlockState state, World worldIn, BlockPos pos, Entity entityIn) { public void onEntityCollision(BlockState state, World worldIn, BlockPos pos, Entity entityIn) {
if (!state.get(VALID)) if (!state.get(VALID))
return; return;
Direction facing = state.get(FACING);
Axis axis = facing.getAxis();
checkEntityForProcessing(worldIn, pos, entityIn);
withTileEntityDo(worldIn, pos, te -> { withTileEntityDo(worldIn, pos, te -> {
if (te.processingEntity == entityIn) if (te.processingEntity == entityIn)
entityIn.setMotionMultiplier(state, new Vec3d(0.25D, (double) 0.05F, 0.25D));
entityIn.setMotionMultiplier(state, new Vec3d(axis == Axis.X ? (double) 0.05F : 0.25D
, axis == Axis.Y ? (double) 0.05F : 0.25D
, axis == Axis.Z ? (double) 0.05F : 0.25D));
}); });
} }
@Override public void checkEntityForProcessing(World worldIn, BlockPos pos, Entity entityIn){
public void onLanded(IBlockReader worldIn, Entity entityIn) {
super.onLanded(worldIn, entityIn);
try { try {
CrushingWheelControllerTileEntity te = getTileEntity(worldIn, entityIn.getPosition().down()); CrushingWheelControllerTileEntity te = getTileEntity(worldIn, pos);
if (te.crushingspeed == 0) if (te.crushingspeed == 0)
return; return;
if (entityIn instanceof ItemEntity) if (entityIn instanceof ItemEntity)
((ItemEntity) entityIn).setPickupDelay(10); ((ItemEntity) entityIn).setPickupDelay(10);
CompoundNBT data = entityIn.getPersistentData();
if (data.contains("BypassCrushingWheel")) {
if (pos.equals(NBTUtil.readBlockPos(data.getCompound("BypassCrushingWheel"))))
return;
}
if (te.isOccupied()) if (te.isOccupied())
return; return;
boolean isPlayer = entityIn instanceof PlayerEntity; boolean isPlayer = entityIn instanceof PlayerEntity;
@ -99,6 +114,12 @@ public class CrushingWheelControllerBlock extends Block
} catch (TileEntityException e) {} } catch (TileEntityException e) {}
} }
@Override
public void onLanded(IBlockReader worldIn, Entity entityIn) {
super.onLanded(worldIn, entityIn);
//Moved to onEntityCollision to allow for omnidirectional input
}
@Override @Override
public void animateTick(BlockState stateIn, World worldIn, BlockPos pos, Random rand) { public void animateTick(BlockState stateIn, World worldIn, BlockPos pos, Random rand) {
if (!stateIn.get(VALID)) if (!stateIn.get(VALID))
@ -128,7 +149,7 @@ public class CrushingWheelControllerBlock extends Block
return; return;
} }
for (Direction d : Iterate.horizontalDirections) { for (Direction d : Iterate.directions) {
BlockState neighbour = world.getBlockState(pos.offset(d)); BlockState neighbour = world.getBlockState(pos.offset(d));
if (!AllBlocks.CRUSHING_WHEEL.has(neighbour)) if (!AllBlocks.CRUSHING_WHEEL.has(neighbour))
continue; continue;
@ -144,22 +165,19 @@ public class CrushingWheelControllerBlock extends Block
@Override @Override
public VoxelShape getCollisionShape(BlockState state, IBlockReader worldIn, BlockPos pos, public VoxelShape getCollisionShape(BlockState state, IBlockReader worldIn, BlockPos pos,
ISelectionContext context) { ISelectionContext context) {
if (!state.get(VALID)) if (!state.get(VALID))
return VoxelShapes.fullCube(); return AllShapes.CRUSHING_WHEEL_CONTROLLER_COLLISION.get(state.get(FACING));
Entity entity = context.getEntity(); Entity entity = context.getEntity();
if (entity != null) { if (entity != null) {
if (entity != null) {
CompoundNBT data = entity.getPersistentData();
if (data.contains("BypassCrushingWheel")) {
if (pos.equals(NBTUtil.readBlockPos(data.getCompound("BypassCrushingWheel"))))
return VoxelShapes.empty();
}
}
if (new AxisAlignedBB(pos).contains(entity.getPositionVec())) CompoundNBT data = entity.getPersistentData();
return VoxelShapes.empty(); if (data.contains("BypassCrushingWheel")) {
if (pos.equals(NBTUtil.readBlockPos(data.getCompound("BypassCrushingWheel"))))
if (state.get(FACING) != Direction.UP) //Allow output items to land on top of the block rather than falling back through.
return VoxelShapes.empty();
}
try { try {
CrushingWheelControllerTileEntity te = getTileEntity(worldIn, pos); CrushingWheelControllerTileEntity te = getTileEntity(worldIn, pos);
@ -167,7 +185,7 @@ public class CrushingWheelControllerBlock extends Block
return VoxelShapes.empty(); return VoxelShapes.empty();
} catch (TileEntityException e) {} } catch (TileEntityException e) {}
} }
return VoxelShapes.fullCube(); return AllShapes.CRUSHING_WHEEL_CONTROLLER_COLLISION.get(state.get(FACING));
} }
@Override @Override

View file

@ -6,6 +6,8 @@ import java.util.Optional;
import java.util.Random; import java.util.Random;
import java.util.UUID; import java.util.UUID;
import static com.simibubi.create.content.contraptions.components.crusher.CrushingWheelControllerBlock.FACING;
import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.AllRecipeTypes;
import com.simibubi.create.content.contraptions.processing.ProcessingInventory; import com.simibubi.create.content.contraptions.processing.ProcessingInventory;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; import com.simibubi.create.content.contraptions.processing.ProcessingRecipe;
@ -16,6 +18,7 @@ import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour;
import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.VecHelper;
import net.minecraft.block.BlockState;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.item.ItemEntity;
import net.minecraft.item.BlockItem; import net.minecraft.item.BlockItem;
@ -28,7 +31,9 @@ import net.minecraft.particles.ItemParticleData;
import net.minecraft.particles.ParticleTypes; import net.minecraft.particles.ParticleTypes;
import net.minecraft.tileentity.TileEntityType; import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.Direction.Axis;
import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3d;
import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.Capability;
@ -63,7 +68,15 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity {
@Override @Override
public void addBehaviours(List<TileEntityBehaviour> behaviours) { public void addBehaviours(List<TileEntityBehaviour> behaviours) {
behaviours.add(new DirectBeltInputBehaviour(this)); behaviours.add(new DirectBeltInputBehaviour(this).onlyInsertWhen(this::supportsDirectBeltInput));
}
private boolean supportsDirectBeltInput(Direction side) {
BlockState blockState = getBlockState();
if (blockState == null)
return false;
Direction direction = blockState.get(CrushingWheelControllerBlock.FACING);
return direction == Direction.DOWN || direction == side;
} }
@Override @Override
@ -72,26 +85,37 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity {
if (searchForEntity) { if (searchForEntity) {
searchForEntity = false; searchForEntity = false;
List<Entity> search = world.getEntitiesInAABBexcluding(null, new AxisAlignedBB(getPos()), List<Entity> search = world.getEntitiesInAABBexcluding(null, new AxisAlignedBB(getPos()),
e -> entityUUID.equals(e.getUniqueID())); e -> entityUUID.equals(e.getUniqueID()));
if (search.isEmpty()) if (search.isEmpty())
clear(); clear();
else else
processingEntity = search.get(0); processingEntity = search.get(0);
} }
if (!isOccupied()) if (!isOccupied())
return; return;
if (crushingspeed == 0) if (crushingspeed == 0)
return; return;
float speed = crushingspeed * 4; float speed = crushingspeed * 4;
Vec3d outPos = VecHelper.getCenterOf(pos);
Vec3d centerPos = VecHelper.getCenterOf(pos);
Direction facing = getBlockState().get(FACING);
int offset = facing.getAxisDirection().getOffset();
Vec3d outSpeed = new Vec3d((facing.getAxis() == Axis.X ? 0.25D : 0.0D) * offset
, offset == 1 ? (facing.getAxis() == Axis.Y ? 0.5D : 0.0D) : 0.0D //Increased upwards speed so upwards crushing wheels shoot out the item properly.
, (facing.getAxis() == Axis.Z ? 0.25D : 0.0D) * offset); //No downwards speed, so downwards crushing wheels drop the items as before.
Vec3d outPos = centerPos.add((facing.getAxis() == Axis.X ? .55f * offset : 0f)
, (facing.getAxis() == Axis.Y ? .55f * offset : 0f)
, (facing.getAxis() == Axis.Z ? .55f * offset : 0f));
if (!hasEntity()) { if (!hasEntity()) {
float processingSpeed = float processingSpeed =
MathHelper.clamp((speed) / (!inventory.appliedRecipe ? MathHelper.log2(inventory.getStackInSlot(0) MathHelper.clamp((speed) / (!inventory.appliedRecipe ? MathHelper.log2(inventory.getStackInSlot(0)
.getCount()) : 1), .25f, 20); .getCount()) : 1), .25f, 20);
inventory.remainingTime -= processingSpeed; inventory.remainingTime -= processingSpeed;
spawnParticles(inventory.getStackInSlot(0)); spawnParticles(inventory.getStackInSlot(0));
@ -105,27 +129,59 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity {
return; return;
} }
if (inventory.remainingTime <= 0) { if (inventory.remainingTime > 0) {
for (int slot = 0; slot < inventory.getSlots(); slot++) {
ItemStack stack = inventory.getStackInSlot(slot);
if (stack.isEmpty())
continue;
ItemEntity entityIn = new ItemEntity(world, outPos.x, outPos.y, outPos.z, stack);
entityIn.setMotion(Vec3d.ZERO);
entityIn.getPersistentData()
.put("BypassCrushingWheel", NBTUtil.writeBlockPos(pos));
world.addEntity(entityIn);
}
inventory.clear();
world.notifyBlockUpdate(pos, getBlockState(), getBlockState(), 2 | 16);
return; return;
} }
inventory.remainingTime = 0;
//Output Items
if (facing.getAxis().isHorizontal() || facing == Direction.DOWN) {
BlockPos nextPos = pos.add(facing.getAxis() == Axis.X ? 1f * offset : 0f
, (-1f)
, facing.getAxis() == Axis.Z ? 1f * offset : 0f);
DirectBeltInputBehaviour behaviour = TileEntityBehaviour.get(world, nextPos, DirectBeltInputBehaviour.TYPE);
if (behaviour != null) {
boolean changed = false;
if (!behaviour.canInsertFromSide(facing))
return;
for (int slot = 0; slot < inventory.getSlots(); slot++) {
ItemStack stack = inventory.getStackInSlot(slot);
if (stack.isEmpty())
continue;
ItemStack remainder = behaviour.handleInsertion(stack, facing, false);
if (remainder.equals(stack, false))
continue;
inventory.setStackInSlot(slot, remainder);
changed = true;
}
if (changed) {
markDirty();
sendData();
}
return;
}
}
//Eject Items
for (int slot = 0; slot < inventory.getSlots(); slot++) {
ItemStack stack = inventory.getStackInSlot(slot);
if (stack.isEmpty())
continue;
ItemEntity entityIn = new ItemEntity(world, outPos.x, outPos.y, outPos.z, stack);
entityIn.setMotion(outSpeed);
entityIn.getPersistentData()
.put("BypassCrushingWheel", NBTUtil.writeBlockPos(pos));
world.addEntity(entityIn);
}
inventory.clear();
world.notifyBlockUpdate(pos, getBlockState(), getBlockState(), 2 | 16);
return; return;
} }
if (!processingEntity.isAlive() || !processingEntity.getBoundingBox() if (!processingEntity.isAlive() || !processingEntity.getBoundingBox()
.intersects(new AxisAlignedBB(pos).grow(.5f))) { .intersects(new AxisAlignedBB(pos).grow(.5f))) {
clear(); clear();
return; return;
} }
@ -134,32 +190,49 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity {
double zMotion = ((pos.getZ() + .5f) - processingEntity.getZ()) / 2f; double zMotion = ((pos.getZ() + .5f) - processingEntity.getZ()) / 2f;
if (processingEntity.isSneaking()) if (processingEntity.isSneaking())
xMotion = zMotion = 0; xMotion = zMotion = 0;
double movement = Math.max(-speed / 4f, -.5f) * -offset;
processingEntity.setMotion(new Vec3d(xMotion, Math.max(-speed / 4f, -.5f), zMotion)); processingEntity.setMotion(new Vec3d(facing.getAxis() == Axis.X ? movement : xMotion
, facing.getAxis() == Axis.Y ? movement : 0f //Do not move entities upwards or downwards for horizontal crushers,
, facing.getAxis() == Axis.Z ? movement : zMotion)); //Or they'll only get their feet crushed.
if (world.isRemote) if (world.isRemote)
return; return;
if (!(processingEntity instanceof ItemEntity)) { if (!(processingEntity instanceof ItemEntity)) {
processingEntity.attackEntityFrom(CrushingWheelTileEntity.damageSource, processingEntity.attackEntityFrom(CrushingWheelTileEntity.damageSource,
AllConfigs.SERVER.kinetics.crushingDamage.get()); AllConfigs.SERVER.kinetics.crushingDamage.get());
if (!processingEntity.isAlive()) { if (!processingEntity.isAlive()) {
processingEntity.setPosition(outPos.x, outPos.y - .75f, outPos.z); processingEntity.setPosition(outPos.x + (facing.getAxis() == Axis.X ? .75f * offset : 0f) //This is supposed to move the mobs to the output location
, outPos.y + (facing.getAxis() == Axis.Y ? .75f * offset : 0f) //So the item drops end up on the other end
, outPos.z + (facing.getAxis() == Axis.Z ? .75f * offset : 0f)); //This, however, does not currently work consistently for non-downwards crushers.
} }
return; return;
} }
ItemEntity itemEntity = (ItemEntity) processingEntity; ItemEntity itemEntity = (ItemEntity) processingEntity;
itemEntity.setPickupDelay(20); itemEntity.setPickupDelay(20);
if (processingEntity.getY() < pos.getY() + .25f) { if (facing.getAxis() == Axis.Y) {
inventory.clear(); if (processingEntity.getY() * -offset < (centerPos.y - .25f) * -offset) {
inventory.setStackInSlot(0, itemEntity.getItem() intakeItem(itemEntity);
.copy()); }
itemInserted(inventory.getStackInSlot(0)); } else if (facing.getAxis() == Axis.Z) {
itemEntity.remove(); if (processingEntity.getZ() * -offset < (centerPos.z - .25f) * -offset) {
world.notifyBlockUpdate(pos, getBlockState(), getBlockState(), 2 | 16); intakeItem(itemEntity);
}
} else {
if (processingEntity.getX() * -offset < (centerPos.x - .25f) * -offset) {
intakeItem(itemEntity);
}
} }
}
private void intakeItem(ItemEntity itemEntity) {
inventory.clear();
inventory.setStackInSlot(0, itemEntity.getItem()
.copy());
itemInserted(inventory.getStackInSlot(0));
itemEntity.remove();
world.notifyBlockUpdate(pos, getBlockState(), getBlockState(), 2 | 16);
} }
protected void spawnParticles(ItemStack stack) { protected void spawnParticles(ItemStack stack) {
@ -169,14 +242,14 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity {
IParticleData particleData = null; IParticleData particleData = null;
if (stack.getItem() instanceof BlockItem) if (stack.getItem() instanceof BlockItem)
particleData = new BlockParticleData(ParticleTypes.BLOCK, ((BlockItem) stack.getItem()).getBlock() particleData = new BlockParticleData(ParticleTypes.BLOCK, ((BlockItem) stack.getItem()).getBlock()
.getDefaultState()); .getDefaultState());
else else
particleData = new ItemParticleData(ParticleTypes.ITEM, stack); particleData = new ItemParticleData(ParticleTypes.ITEM, stack);
Random r = world.rand; Random r = world.rand;
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
world.addParticle(particleData, pos.getX() + r.nextFloat(), pos.getY() + r.nextFloat(), world.addParticle(particleData, pos.getX() + r.nextFloat(), pos.getY() + r.nextFloat(),
pos.getZ() + r.nextFloat(), 0, 0, 0); pos.getZ() + r.nextFloat(), 0, 0, 0);
} }
private void applyRecipe() { private void applyRecipe() {
@ -185,11 +258,11 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity {
List<ItemStack> list = new ArrayList<>(); List<ItemStack> list = new ArrayList<>();
if (recipe.isPresent()) { if (recipe.isPresent()) {
int rolls = inventory.getStackInSlot(0) int rolls = inventory.getStackInSlot(0)
.getCount(); .getCount();
inventory.clear(); inventory.clear();
for (int roll = 0; roll < rolls; roll++) { for (int roll = 0; roll < rolls; roll++) {
List<ItemStack> rolledResults = recipe.get() List<ItemStack> rolledResults = recipe.get()
.rollResults(); .rollResults();
for (int i = 0; i < rolledResults.size(); i++) { for (int i = 0; i < rolledResults.size(); i++) {
ItemStack stack = rolledResults.get(i); ItemStack stack = rolledResults.get(i);
ItemHelper.addToList(stack, list); ItemHelper.addToList(stack, list);
@ -238,7 +311,7 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity {
private void itemInserted(ItemStack stack) { private void itemInserted(ItemStack stack) {
Optional<ProcessingRecipe<RecipeWrapper>> recipe = findRecipe(); Optional<ProcessingRecipe<RecipeWrapper>> recipe = findRecipe();
inventory.remainingTime = recipe.isPresent() ? recipe.get() inventory.remainingTime = recipe.isPresent() ? recipe.get()
.getProcessingDuration() : 100; .getProcessingDuration() : 100;
inventory.appliedRecipe = false; inventory.appliedRecipe = false;
} }

View file

@ -36,7 +36,7 @@ public class CrushingWheelTileEntity extends KineticTileEntity {
} }
@Override @Override
public AxisAlignedBB getRenderBoundingBox() { public AxisAlignedBB makeRenderBoundingBox() {
return new AxisAlignedBB(pos).grow(1); return new AxisAlignedBB(pos).grow(1);
} }

View file

@ -11,12 +11,14 @@ import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.content.contraptions.components.deployer.DeployerTileEntity.Mode; import com.simibubi.create.content.contraptions.components.deployer.DeployerTileEntity.Mode;
import com.simibubi.create.content.contraptions.components.deployer.DeployerTileEntity.State; import com.simibubi.create.content.contraptions.components.deployer.DeployerTileEntity.State;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.backend.FastRenderDispatcher;
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringRenderer; import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringRenderer;
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer; import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.AnimationTickHolder;
import com.simibubi.create.foundation.utility.NBTHelper; import com.simibubi.create.foundation.utility.NBTHelper;
import com.simibubi.create.foundation.utility.SuperByteBuffer;
import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.VecHelper;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
@ -102,7 +104,9 @@ public class DeployerRenderer extends SafeTileEntityRenderer<DeployerTileEntity>
protected void renderComponents(DeployerTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, protected void renderComponents(DeployerTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer,
int light, int overlay) { int light, int overlay) {
IVertexBuilder vb = buffer.getBuffer(RenderType.getSolid()); IVertexBuilder vb = buffer.getBuffer(RenderType.getSolid());
KineticTileEntityRenderer.renderRotatingKineticBlock(te, getRenderedBlockState(te), ms, vb, light); if (!FastRenderDispatcher.available(te.getWorld())) {
KineticTileEntityRenderer.renderRotatingKineticBlock(te, getRenderedBlockState(te), ms, vb, light);
}
BlockState blockState = te.getBlockState(); BlockState blockState = te.getBlockState();
BlockPos pos = te.getPos(); BlockPos pos = te.getPos();
@ -178,8 +182,7 @@ public class DeployerRenderer extends SafeTileEntityRenderer<DeployerTileEntity>
double distance = context.position.distanceTo(center); double distance = context.position.distanceTo(center);
double nextDistance = context.position.add(context.motion) double nextDistance = context.position.add(context.motion)
.distanceTo(center); .distanceTo(center);
factor = .5f - MathHelper.clamp(MathHelper.lerp(Minecraft.getInstance() factor = .5f - MathHelper.clamp(MathHelper.lerp(AnimationTickHolder.getPartialTicks(), distance, nextDistance), 0, 1);
.getRenderPartialTicks(), distance, nextDistance), 0, 1);
} }
Vec3d offset = new Vec3d(blockState.get(FACING) Vec3d offset = new Vec3d(blockState.get(FACING)
@ -189,9 +192,9 @@ public class DeployerRenderer extends SafeTileEntityRenderer<DeployerTileEntity>
.getModel(); .getModel();
for (MatrixStack m : matrixStacks) for (MatrixStack m : matrixStacks)
m.translate(offset.x, offset.y, offset.z); m.translate(offset.x, offset.y, offset.z);
pole.light(lighting) pole.light(lighting, ContraptionRenderDispatcher.getLightOnContraption(context))
.renderInto(ms, builder); .renderInto(ms, builder);
hand.light(lighting) hand.light(lighting, ContraptionRenderDispatcher.getLightOnContraption(context))
.renderInto(ms, builder); .renderInto(ms, builder);
} }

View file

@ -346,8 +346,8 @@ public class DeployerTileEntity extends KineticTileEntity {
} }
@Override @Override
public AxisAlignedBB getRenderBoundingBox() { public AxisAlignedBB makeRenderBoundingBox() {
return super.getRenderBoundingBox().grow(3); return super.makeRenderBoundingBox().grow(3);
} }
@Override @Override
@ -382,4 +382,8 @@ public class DeployerTileEntity extends KineticTileEntity {
return true; return true;
} }
@Override
public boolean shouldRenderAsTE() {
return true;
}
} }

View file

@ -114,9 +114,10 @@ public class AirCurrent {
entityDistance -= .5f; entityDistance -= .5f;
InWorldProcessing.Type processingType = getSegmentAt((float) entityDistance); InWorldProcessing.Type processingType = getSegmentAt((float) entityDistance);
if (processingType == null) { if (entity instanceof ServerPlayerEntity)
if (entity instanceof ServerPlayerEntity) AllTriggers.triggerFor(AllTriggers.FAN_PROCESSING.constructTriggerFor(processingType), (PlayerEntity) entity);
AllTriggers.triggerFor(AllTriggers.FAN, (PlayerEntity) entity);
if (processingType == null || processingType == Type.NONE) {
continue; continue;
} }
@ -139,24 +140,18 @@ public class AirCurrent {
entity.setFire(10); entity.setFire(10);
entity.attackEntityFrom(damageSourceLava, 4); entity.attackEntityFrom(damageSourceLava, 4);
} }
if (entity instanceof ServerPlayerEntity)
AllTriggers.triggerFor(AllTriggers.FAN_LAVA, (PlayerEntity) entity);
break; break;
case SMOKING: case SMOKING:
if (!entity.isImmuneToFire()) { if (!entity.isImmuneToFire()) {
entity.setFire(2); entity.setFire(2);
entity.attackEntityFrom(damageSourceFire, 2); entity.attackEntityFrom(damageSourceFire, 2);
} }
if (entity instanceof ServerPlayerEntity)
AllTriggers.triggerFor(AllTriggers.FAN_SMOKE, (PlayerEntity) entity);
break; break;
case SPLASHING: case SPLASHING:
if (entity instanceof EndermanEntity || entity.getType() == EntityType.SNOW_GOLEM if (entity instanceof EndermanEntity || entity.getType() == EntityType.SNOW_GOLEM
|| entity.getType() == EntityType.BLAZE) { || entity.getType() == EntityType.BLAZE) {
entity.attackEntityFrom(DamageSource.DROWN, 2); entity.attackEntityFrom(DamageSource.DROWN, 2);
} }
if (entity instanceof ServerPlayerEntity)
AllTriggers.triggerFor(AllTriggers.FAN_WATER, (PlayerEntity) entity);
if (!entity.isBurning()) if (!entity.isBurning())
break; break;
entity.extinguish(); entity.extinguish();
@ -193,7 +188,7 @@ public class AirCurrent {
AirCurrentSegment currentSegment = new AirCurrentSegment(); AirCurrentSegment currentSegment = new AirCurrentSegment();
segments.clear(); segments.clear();
currentSegment.startOffset = 0; currentSegment.startOffset = 0;
InWorldProcessing.Type type = null; InWorldProcessing.Type type = Type.NONE;
int limit = (int) (maxDistance + .5f); int limit = (int) (maxDistance + .5f);
int searchStart = pushing ? 0 : limit; int searchStart = pushing ? 0 : limit;
@ -203,7 +198,7 @@ public class AirCurrent {
for (int i = searchStart; i * searchStep <= searchEnd * searchStep; i += searchStep) { for (int i = searchStart; i * searchStep <= searchEnd * searchStep; i += searchStep) {
BlockPos currentPos = start.offset(direction, i); BlockPos currentPos = start.offset(direction, i);
InWorldProcessing.Type newType = InWorldProcessing.Type.byBlock(world, currentPos); InWorldProcessing.Type newType = InWorldProcessing.Type.byBlock(world, currentPos);
if (newType != null) if (newType != Type.NONE)
type = newType; type = newType;
if (currentSegment.type != type || currentSegment.startOffset == 0) { if (currentSegment.type != type || currentSegment.startOffset == 0) {
currentSegment.endOffset = i; currentSegment.endOffset = i;
@ -341,7 +336,7 @@ public class AirCurrent {
continue; continue;
return airCurrentSegment.type; return airCurrentSegment.type;
} }
return null; return InWorldProcessing.Type.NONE;
} }
public static class AirCurrentSegment { public static class AirCurrentSegment {

View file

@ -7,8 +7,9 @@ import com.mojang.blaze3d.vertex.IVertexBuilder;
import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.backend.FastRenderDispatcher;
import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.AnimationTickHolder;
import com.simibubi.create.foundation.utility.SuperByteBuffer;
import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
@ -26,6 +27,8 @@ public class EncasedFanRenderer extends KineticTileEntityRenderer {
@Override @Override
protected void renderSafe(KineticTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, protected void renderSafe(KineticTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer,
int light, int overlay) { int light, int overlay) {
if (FastRenderDispatcher.available(te.getWorld())) return;
Direction direction = te.getBlockState() Direction direction = te.getBlockState()
.get(FACING); .get(FACING);
IVertexBuilder vb = buffer.getBuffer(RenderType.getCutoutMipped()); IVertexBuilder vb = buffer.getBuffer(RenderType.getCutoutMipped());

View file

@ -0,0 +1,118 @@
package com.simibubi.create.content.contraptions.components.fan;
import static net.minecraft.state.properties.BlockStateProperties.FACING;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.IRotate;
import com.simibubi.create.content.contraptions.base.KineticTileInstance;
import com.simibubi.create.content.contraptions.base.RotatingData;
import com.simibubi.create.foundation.render.backend.instancing.InstanceKey;
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderRegistry;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.Direction;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.LightType;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.fml.DistExecutor;
public class FanInstance extends KineticTileInstance<EncasedFanTileEntity> {
public static void register(TileEntityType<? extends EncasedFanTileEntity> type) {
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () ->
InstancedTileRenderRegistry.instance.register(type, FanInstance::new));
}
protected InstanceKey<RotatingData> shaft;
protected InstanceKey<RotatingData> fan;
public FanInstance(InstancedTileRenderer modelManager, EncasedFanTileEntity tile) {
super(modelManager, tile);
}
@Override
protected void init() {
final Direction direction = lastState.get(FACING);
final Direction.Axis axis = ((IRotate) lastState.getBlock()).getRotationAxis(lastState);
InstancedModel<RotatingData> shaftHalf =
AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouthRotating(modelManager, lastState, direction.getOpposite());
InstancedModel<RotatingData> fanInner =
AllBlockPartials.ENCASED_FAN_INNER.renderOnDirectionalSouthRotating(modelManager, lastState, direction.getOpposite());
shaft = shaftHalf.setupInstance(data -> {
BlockPos behind = pos.offset(direction.getOpposite());
int blockLight = world.getLightLevel(LightType.BLOCK, behind);
int skyLight = world.getLightLevel(LightType.SKY, behind);
data.setRotationalSpeed(tile.getSpeed())
.setRotationOffset(getRotationOffset(axis))
.setRotationAxis(Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, axis).getUnitVector())
.setTileEntity(tile)
.setBlockLight(blockLight)
.setSkyLight(skyLight);
});
fan = fanInner.setupInstance(data -> {
BlockPos inFront = pos.offset(direction);
int blockLight = world.getLightLevel(LightType.BLOCK, inFront);
int skyLight = world.getLightLevel(LightType.SKY, inFront);
data.setRotationalSpeed(getFanSpeed())
.setRotationOffset(getRotationOffset(axis))
.setRotationAxis(Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, axis).getUnitVector())
.setTileEntity(tile)
.setBlockLight(blockLight)
.setSkyLight(skyLight);
});
}
private float getFanSpeed() {
float speed = tile.getSpeed() * 5;
if (speed > 0)
speed = MathHelper.clamp(speed, 80, 64 * 20);
if (speed < 0)
speed = MathHelper.clamp(speed, -64 * 20, -80);
return speed;
}
@Override
protected void onUpdate() {
Direction.Axis axis = lastState.get(FACING).getAxis();
updateRotation(shaft, axis);
fan.modifyInstance(data -> {
data.setColor(tile.network)
.setRotationalSpeed(getFanSpeed())
.setRotationOffset(getRotationOffset(axis))
.setRotationAxis(Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, axis).getUnitVector());
});
}
@Override
public void updateLight() {
final Direction direction = lastState.get(FACING);
shaft.modifyInstance(data -> {
BlockPos behind = pos.offset(direction.getOpposite());
int blockLight = world.getLightLevel(LightType.BLOCK, behind);
int skyLight = world.getLightLevel(LightType.SKY, behind);
data.setBlockLight(blockLight)
.setSkyLight(skyLight);
});
fan.modifyInstance(data -> {
BlockPos inFront = pos.offset(direction);
int blockLight = world.getLightLevel(LightType.BLOCK, inFront);
int skyLight = world.getLightLevel(LightType.SKY, inFront);
data.setBlockLight(blockLight)
.setSkyLight(skyLight);
});
}
@Override
public void remove() {
shaft.delete();
fan.delete();
}
}

View file

@ -1,8 +1,11 @@
package com.simibubi.create.content.contraptions.components.fan; package com.simibubi.create.content.contraptions.components.fan;
import javax.annotation.ParametersAreNonnullByDefault;
import com.simibubi.create.AllShapes; import com.simibubi.create.AllShapes;
import com.simibubi.create.AllTileEntities; import com.simibubi.create.AllTileEntities;
import com.simibubi.create.foundation.block.ProperDirectionalBlock; import com.simibubi.create.foundation.block.ProperDirectionalBlock;
import mcp.MethodsReturnNonnullByDefault; import mcp.MethodsReturnNonnullByDefault;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
@ -18,8 +21,6 @@ import net.minecraft.world.IBlockReader;
import net.minecraft.world.IWorldReader; import net.minecraft.world.IWorldReader;
import net.minecraft.world.World; import net.minecraft.world.World;
import javax.annotation.ParametersAreNonnullByDefault;
@MethodsReturnNonnullByDefault @MethodsReturnNonnullByDefault
@ParametersAreNonnullByDefault @ParametersAreNonnullByDefault
public class NozzleBlock extends ProperDirectionalBlock { public class NozzleBlock extends ProperDirectionalBlock {

View file

@ -0,0 +1,76 @@
package com.simibubi.create.content.contraptions.components.flywheel;
import java.util.function.Consumer;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.IRotate;
import com.simibubi.create.content.contraptions.base.KineticTileInstance;
import com.simibubi.create.content.contraptions.base.RotatingData;
import com.simibubi.create.foundation.render.backend.instancing.InstanceKey;
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderRegistry;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
import net.minecraft.block.BlockState;
import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.Direction;
import net.minecraft.util.Rotation;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.fml.DistExecutor;
public class FlyWheelInstance extends KineticTileInstance<FlywheelTileEntity> {
public static void register(TileEntityType<? extends FlywheelTileEntity> type) {
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () ->
InstancedTileRenderRegistry.instance.register(type, FlyWheelInstance::new));
}
protected Direction facing;
protected InstanceKey<RotatingData> shaft;
// protected InstanceKey<RotatingData> wheel;
public FlyWheelInstance(InstancedTileRenderer<?> modelManager, FlywheelTileEntity tile) {
super(modelManager, tile);
}
@Override
protected void init() {
facing = lastState.get(BlockStateProperties.HORIZONTAL_FACING);
Direction.Axis axis = ((IRotate) lastState.getBlock()).getRotationAxis(lastState);
Consumer<RotatingData> setup = setupFunc(tile.getSpeed(), axis);
shaft = shaftModel().setupInstance(setup);
// wheel = wheelModel().setupInstance(setup);
}
@Override
protected void onUpdate() {
Direction.Axis axis = ((IRotate) lastState.getBlock()).getRotationAxis(lastState);
updateRotation(shaft, axis);
// updateRotation(wheel, axis);
}
@Override
public void updateLight() {
shaft.modifyInstance(this::relight);
// wheel.modifyInstance(this::relight);
}
@Override
public void remove() {
shaft.delete();
shaft = null;
// wheel.delete();
// wheel = null;
}
protected InstancedModel<RotatingData> shaftModel() {
return AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouthRotating(modelManager, lastState, facing.getOpposite());
}
protected InstancedModel<RotatingData> wheelModel() {
BlockState rotate = lastState.rotate(Rotation.CLOCKWISE_90);
return AllBlockPartials.FLYWHEEL.renderOnDirectionalSouthRotating(modelManager, rotate, rotate.get(BlockStateProperties.HORIZONTAL_FACING));
}
}

View file

@ -8,8 +8,8 @@ import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.content.contraptions.components.flywheel.FlywheelBlock.ConnectionState; import com.simibubi.create.content.contraptions.components.flywheel.FlywheelBlock.ConnectionState;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.SuperByteBuffer;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.IRenderTypeBuffer;

View file

@ -48,8 +48,8 @@ public class FlywheelTileEntity extends GeneratingKineticTileEntity {
} }
@Override @Override
public AxisAlignedBB getRenderBoundingBox() { public AxisAlignedBB makeRenderBoundingBox() {
return super.getRenderBoundingBox().grow(2); return super.makeRenderBoundingBox().grow(2);
} }
@Override @Override
@ -101,4 +101,8 @@ public class FlywheelTileEntity extends GeneratingKineticTileEntity {
} }
} }
@Override
public boolean shouldRenderAsTE() {
return true;
}
} }

View file

@ -14,6 +14,8 @@ import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
public class EngineTileEntity extends SmartTileEntity { public class EngineTileEntity extends SmartTileEntity {
@ -34,9 +36,14 @@ public class EngineTileEntity extends SmartTileEntity {
return true; return true;
} }
protected AxisAlignedBB cachedBoundingBox;
@Override @Override
@OnlyIn(Dist.CLIENT)
public AxisAlignedBB getRenderBoundingBox() { public AxisAlignedBB getRenderBoundingBox() {
return super.getRenderBoundingBox().grow(1.5f); if (cachedBoundingBox == null) {
cachedBoundingBox = super.getRenderBoundingBox().grow(1.5f);
}
return cachedBoundingBox;
} }
@Override @Override

View file

@ -0,0 +1,28 @@
package com.simibubi.create.content.contraptions.components.millstone;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.RotatingData;
import com.simibubi.create.content.contraptions.base.SingleRotatingInstance;
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderRegistry;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
import net.minecraft.tileentity.TileEntityType;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.fml.DistExecutor;
public class MillStoneCogInstance extends SingleRotatingInstance {
public static void register(TileEntityType<? extends KineticTileEntity> type) {
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () ->
InstancedTileRenderRegistry.instance.register(type, MillStoneCogInstance::new)); }
public MillStoneCogInstance(InstancedTileRenderer modelManager, KineticTileEntity tile) {
super(modelManager, tile);
}
@Override
protected InstancedModel<RotatingData> getModel() {
return AllBlockPartials.MILLSTONE_COG.renderOnRotating(modelManager, tile.getBlockState());
}
}

View file

@ -4,7 +4,7 @@ import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.CreateClient; import com.simibubi.create.CreateClient;
import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.foundation.utility.SuperByteBuffer; import com.simibubi.create.foundation.render.SuperByteBuffer;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;

View file

@ -5,8 +5,9 @@ import com.mojang.blaze3d.vertex.IVertexBuilder;
import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.backend.FastRenderDispatcher;
import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.AnimationTickHolder;
import com.simibubi.create.foundation.utility.SuperByteBuffer;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.IRenderTypeBuffer;
@ -22,6 +23,11 @@ public class MechanicalMixerRenderer extends KineticTileEntityRenderer {
super(dispatcher); super(dispatcher);
} }
@Override
public boolean isGlobalRenderer(KineticTileEntity te) {
return true;
}
@Override @Override
protected void renderSafe(KineticTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, protected void renderSafe(KineticTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer,
int light, int overlay) { int light, int overlay) {
@ -31,8 +37,10 @@ public class MechanicalMixerRenderer extends KineticTileEntityRenderer {
IVertexBuilder vb = buffer.getBuffer(RenderType.getSolid()); IVertexBuilder vb = buffer.getBuffer(RenderType.getSolid());
SuperByteBuffer superBuffer = AllBlockPartials.SHAFTLESS_COGWHEEL.renderOn(blockState); if (!FastRenderDispatcher.available(te.getWorld())) {
standardKineticRotationTransform(superBuffer, te, light).renderInto(ms, vb); SuperByteBuffer superBuffer = AllBlockPartials.SHAFTLESS_COGWHEEL.renderOn(blockState);
standardKineticRotationTransform(superBuffer, te, light).renderInto(ms, vb);
}
int packedLightmapCoords = WorldRenderer.getLightmapCoordinates(te.getWorld(), blockState, pos); int packedLightmapCoords = WorldRenderer.getLightmapCoordinates(te.getWorld(), blockState, pos);
float renderedHeadOffset = mixer.getRenderedHeadOffset(partialTicks); float renderedHeadOffset = mixer.getRenderedHeadOffset(partialTicks);

View file

@ -80,7 +80,7 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity {
} }
@Override @Override
public AxisAlignedBB getRenderBoundingBox() { public AxisAlignedBB makeRenderBoundingBox() {
return new AxisAlignedBB(pos).expand(0, -1.5, 0); return new AxisAlignedBB(pos).expand(0, -1.5, 0);
} }

View file

@ -3,7 +3,7 @@ package com.simibubi.create.content.contraptions.components.motor;
import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.foundation.utility.SuperByteBuffer; import com.simibubi.create.foundation.render.SuperByteBuffer;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;

View file

@ -4,7 +4,7 @@ import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.foundation.utility.SuperByteBuffer; import com.simibubi.create.foundation.render.SuperByteBuffer;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.IRenderTypeBuffer;
@ -19,6 +19,11 @@ public class MechanicalPressRenderer extends KineticTileEntityRenderer {
super(dispatcher); super(dispatcher);
} }
@Override
public boolean isGlobalRenderer(KineticTileEntity te) {
return true;
}
@Override @Override
protected void renderSafe(KineticTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, protected void renderSafe(KineticTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer,
int light, int overlay) { int light, int overlay) {

View file

@ -102,7 +102,7 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity {
} }
@Override @Override
public AxisAlignedBB getRenderBoundingBox() { public AxisAlignedBB makeRenderBoundingBox() {
return new AxisAlignedBB(pos).expand(0, -1.5, 0) return new AxisAlignedBB(pos).expand(0, -1.5, 0)
.expand(0, 1, 0); .expand(0, 1, 0);
} }

View file

@ -0,0 +1,36 @@
package com.simibubi.create.content.contraptions.components.saw;
import static net.minecraft.state.properties.BlockStateProperties.FACING;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.content.contraptions.base.RotatingData;
import com.simibubi.create.content.contraptions.base.SingleRotatingInstance;
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderRegistry;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.Rotation;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.fml.DistExecutor;
public class SawInstance extends SingleRotatingInstance {
public static void register(TileEntityType<? extends KineticTileEntity> type) {
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () ->
InstancedTileRenderRegistry.instance.register(type, SawInstance::new));
}
public SawInstance(InstancedTileRenderer modelManager, KineticTileEntity tile) {
super(modelManager, tile);
}
@Override
protected InstancedModel<RotatingData> getModel() {
if (lastState.get(FACING).getAxis().isHorizontal())
return AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouthRotating(modelManager, lastState.rotate(tile.getWorld(), tile.getPos(), Rotation.CLOCKWISE_180));
else
return rotatingMaterial().getModel(KineticTileEntityRenderer.KINETIC_TILE, shaft(getRotationAxis()));
}
}

View file

@ -8,11 +8,13 @@ import com.simibubi.create.CreateClient;
import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.backend.FastRenderDispatcher;
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringRenderer; import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringRenderer;
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer; import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.MatrixStacker;
import com.simibubi.create.foundation.utility.SuperByteBuffer;
import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.VecHelper;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
@ -42,6 +44,9 @@ public class SawRenderer extends SafeTileEntityRenderer<SawTileEntity> {
renderBlade(te, ms, buffer, light); renderBlade(te, ms, buffer, light);
renderItems(te, partialTicks, ms, buffer, light, overlay); renderItems(te, partialTicks, ms, buffer, light, overlay);
FilteringRenderer.renderOnTileEntity(te, partialTicks, ms, buffer, light, overlay); FilteringRenderer.renderOnTileEntity(te, partialTicks, ms, buffer, light, overlay);
if (FastRenderDispatcher.available(te.getWorld())) return;
renderShaft(te, ms, buffer, light, overlay); renderShaft(te, ms, buffer, light, overlay);
} }
@ -179,7 +184,7 @@ public class SawRenderer extends SafeTileEntityRenderer<SawTileEntity> {
superBuffer superBuffer
.light(msLocal.peek() .light(msLocal.peek()
.getModel()) .getModel(), ContraptionRenderDispatcher.getLightOnContraption(context))
.renderInto(ms, buffer.getBuffer(RenderType.getCutoutMipped())); .renderInto(ms, buffer.getBuffer(RenderType.getCutoutMipped()));
} }

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