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

This commit is contained in:
JozsefA 2021-06-11 01:17:01 -07:00
commit d612cfdd34
143 changed files with 5052 additions and 2660 deletions

View file

@ -407,21 +407,21 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j
6801fa1f466f172700e573e5b8ee8ee5f9ca4583 assets/create/blockstates/yellow_valve_handle.json
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
e9c463e0cf56ed28ee26a33debeae3ecc2e941d2 assets/create/lang/en_ud.json
dceb2a935135d2ef502cdcba7c9d58f64062513f assets/create/lang/en_us.json
eb40acb99f3c7af50b840f3c2058d7a7bdd5cff7 assets/create/lang/unfinished/de_de.json
bcbfd3a6768daf265a1c01a424e985a3fdec6504 assets/create/lang/unfinished/es_es.json
50dec8a7eb983ac4d29f3eeba3273dbaeca26902 assets/create/lang/unfinished/es_mx.json
cc723673107651024f3fc0e43690ac467ff729b2 assets/create/lang/unfinished/fr_fr.json
99452bacb5d80715ea0a52106b7e2734a32c55d4 assets/create/lang/unfinished/it_it.json
f3058ea623666a43029af307f632197c8ff8dcab assets/create/lang/unfinished/ja_jp.json
d756b02573d6a3a3b73bd03ec69fe760825e1606 assets/create/lang/unfinished/ko_kr.json
281712735ab6437a417dde63c855e18eb19493a0 assets/create/lang/unfinished/nl_nl.json
24056aefb7ff79a2127c194fe2918ab9e745d6b5 assets/create/lang/unfinished/pl_pl.json
0f9c83a9f70d809d8f66c0438529b169b92ffdb1 assets/create/lang/unfinished/pt_br.json
ff35273842d3190aa361f2a8ca7edae80f97864d assets/create/lang/unfinished/ru_ru.json
139a31cfd09d4aaca33d118d28de735ba72f4f0d assets/create/lang/unfinished/zh_cn.json
19bfa8f57e8b395a2cfd98039f44301a61c1f73c assets/create/lang/unfinished/zh_tw.json
c71f5246d2cb8e9913d1552d23fcc82c43cde7a0 assets/create/lang/en_ud.json
ec002cefbb883258daed50448e17f874eb814c18 assets/create/lang/en_us.json
639b3bbd99887014d67fc943d6e1415bebd1c70a assets/create/lang/unfinished/de_de.json
3dca81115778734215a4d361ec30f43b1342b51c assets/create/lang/unfinished/es_es.json
df82753f7276ceb72a834170bb09260c4c4f7936 assets/create/lang/unfinished/es_mx.json
021158ff586e33ccfd0012c2c4fbfba83b62d57b assets/create/lang/unfinished/fr_fr.json
4d3132ccb4a8d7c211451e195165fb3719c135a6 assets/create/lang/unfinished/it_it.json
741f5a61d9fec8ece2936649490318ef4b06b15f assets/create/lang/unfinished/ja_jp.json
79983f46c225a3dca6b9e6cecc26f73e07db1b86 assets/create/lang/unfinished/ko_kr.json
c85b841cf6ef7a5205782da242e98c2dc3b2af9a assets/create/lang/unfinished/nl_nl.json
2bcee4396da8bc2cbba794e7dd4b33a406d58360 assets/create/lang/unfinished/pl_pl.json
0b45c9ecdf8fc82f7f1e112d82cb95e94cf8b064 assets/create/lang/unfinished/pt_br.json
b7ef8659876e0890016e696b5adf73404b31ef8a assets/create/lang/unfinished/ru_ru.json
f04ba370732503448596909c56ff0e05aec5a233 assets/create/lang/unfinished/zh_cn.json
708e423b949fc4113cefc46a0119d02cad8f71ad assets/create/lang/unfinished/zh_tw.json
487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json
b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json
3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json
@ -1273,6 +1273,7 @@ d7cb2f7bac8fae893fc5179af8140786a908f3f5 assets/create/models/item/copper_shingl
f56bf22324faf8958eaef4d94b958f1108d52e5a assets/create/models/item/copper_tiles.json
5583368909c319acfcf0f7a419bedf23272fe613 assets/create/models/item/copper_valve_handle.json
4e253e7c0626dfd76e2d39786ce1a34e0baaa62d assets/create/models/item/crafter_slot_cover.json
1f947dafff30da701b7675f5b026ccab3129b079 assets/create/models/item/crafting_blueprint.json
7b333dea353afaa27b182aedc647c9e9e34e92ef assets/create/models/item/creative_crate.json
f7d06c52c3ca8c22ad67f5741471f06ac22e7fcb assets/create/models/item/creative_fluid_tank.json
5b39403f6c81f05e566b621b62e267267de47c41 assets/create/models/item/creative_motor.json

View file

@ -410,6 +410,7 @@
"block.create.zinc_block": "\u0254u\u0131Z \u025Fo \u029E\u0254o\u05DF\u15FA",
"block.create.zinc_ore": "\u01DD\u0279O \u0254u\u0131Z",
"entity.create.contraption": "uo\u0131\u0287d\u0250\u0279\u0287uo\u0186",
"entity.create.crafting_blueprint": "\u0287u\u0131\u0279d\u01DDn\u05DF\u15FA bu\u0131\u0287\u025F\u0250\u0279\u0186",
"entity.create.gantry_contraption": "uo\u0131\u0287d\u0250\u0279\u0287uo\u0186 \u028E\u0279\u0287u\u0250\u2141",
"entity.create.seat": "\u0287\u0250\u01DDS",
"entity.create.stationary_contraption": "uo\u0131\u0287d\u0250\u0279\u0287uo\u0186 \u028E\u0279\u0250uo\u0131\u0287\u0250\u0287S",
@ -438,6 +439,7 @@
"item.create.copper_nugget": "\u0287\u01DDbbnN \u0279\u01DDddo\u0186",
"item.create.copper_sheet": "\u0287\u01DD\u01DD\u0265S \u0279\u01DDddo\u0186",
"item.create.crafter_slot_cover": "\u0279\u01DD\u028Co\u0186 \u0287o\u05DFS \u0279\u01DD\u0287\u025F\u0250\u0279\u0186",
"item.create.crafting_blueprint": "\u0287u\u0131\u0279d\u01DDn\u05DF\u15FA bu\u0131\u0287\u025F\u0250\u0279\u0186",
"item.create.crushed_aluminum_ore": "\u01DD\u0279O \u026Fnu\u0131\u026Fn\u05DF\u2C6F p\u01DD\u0265sn\u0279\u0186",
"item.create.crushed_brass": "ss\u0250\u0279\u15FA p\u01DD\u0265sn\u0279\u0186",
"item.create.crushed_copper_ore": "\u01DD\u0279O \u0279\u01DDddo\u0186 p\u01DD\u0265sn\u0279\u0186",

View file

@ -404,26 +404,24 @@
"block.create.weighted_ejector": "Weighted Ejector",
"block.create.white_sail": "White Sail",
"block.create.white_seat": "White Seat",
"block.create.white_valve_handle": "White Valve Handle",
"block.create.windmill_bearing": "Windmill Bearing",
"block.create.wooden_bracket": "Wooden Bracket",
"block.create.yellow_sail": "Yellow Sail",
"block.create.yellow_seat": "Yellow Seat",
"block.create.yellow_valve_handle": "Yellow Valve Handle",
"block.create.zinc_block": "Block of Zinc",
"block.create.zinc_ore": "Zinc Ore",
"entity.create.contraption": "Contraption",
"entity.create.gantry_contraption": "Gantry Contraption",
"entity.create.seat": "Seat",
"entity.create.stationary_contraption": "Stationary Contraption",
"entity.create.super_glue": "Super Glue",
"fluid.create.milk": "Milk",
"fluid.create.potion": "Potion",
"fluid.create.tea": "Builder's Tea",
"item.create.andesite_alloy": "Andesite Alloy",
"block.create.white_valve_handle": "White Valve Handle",
"block.create.windmill_bearing": "Windmill Bearing",
"block.create.wooden_bracket": "Wooden Bracket",
"block.create.yellow_sail": "Yellow Sail",
"block.create.yellow_seat": "Yellow Seat",
"block.create.yellow_valve_handle": "Yellow Valve Handle",
"block.create.zinc_block": "Block of Zinc",
"block.create.zinc_ore": "Zinc Ore",
"entity.create.contraption": "Contraption",
"entity.create.crafting_blueprint": "Crafting Blueprint",
"entity.create.gantry_contraption": "Gantry Contraption",
"entity.create.seat": "Seat",
"entity.create.stationary_contraption": "Stationary Contraption",
"entity.create.super_glue": "Super Glue",
"fluid.create.milk": "Milk",
"fluid.create.potion": "Potion",
"fluid.create.tea": "Builder's Tea",
"item.create.andesite_alloy": "Andesite Alloy",
"item.create.attribute_filter": "Attribute Filter",
"item.create.bar_of_chocolate": "Bar of Chocolate",
"item.create.belt_connector": "Mechanical Belt",
@ -434,26 +432,27 @@
"item.create.brass_nugget": "Brass Nugget",
"item.create.brass_sheet": "Brass Sheet",
"item.create.builders_tea": "Builder's Tea",
"item.create.chest_minecart_contraption": "Chest Minecart Contraption",
"item.create.chocolate_bucket": "Chocolate Bucket",
"item.create.chocolate_glazed_berries": "Chocolate Glazed Berries",
"item.create.chromatic_compound": "Chromatic Compound",
"item.create.cinder_flour": "Cinder Flour",
"item.create.copper_backtank": "Copper Backtank",
"item.create.copper_ingot": "Copper Ingot",
"item.create.copper_nugget": "Copper Nugget",
"item.create.copper_sheet": "Copper Sheet",
"item.create.crafter_slot_cover": "Crafter Slot Cover",
"item.create.crushed_aluminum_ore": "Crushed Aluminum Ore",
"item.create.crushed_brass": "Crushed Brass",
"item.create.crushed_copper_ore": "Crushed Copper Ore",
"item.create.crushed_gold_ore": "Crushed Gold Ore",
"item.create.crushed_iron_ore": "Crushed Iron Ore",
"item.create.crushed_lead_ore": "Crushed Lead Ore",
"item.create.crushed_nickel_ore": "Crushed Nickel Ore",
"item.create.crushed_osmium_ore": "Crushed Osmium Ore",
"item.create.crushed_platinum_ore": "Crushed Platinum Ore",
"item.create.crushed_quicksilver_ore": "Crushed Quicksilver Ore",
"item.create.chest_minecart_contraption": "Chest Minecart Contraption",
"item.create.chocolate_bucket": "Chocolate Bucket",
"item.create.chocolate_glazed_berries": "Chocolate Glazed Berries",
"item.create.chromatic_compound": "Chromatic Compound",
"item.create.cinder_flour": "Cinder Flour",
"item.create.copper_backtank": "Copper Backtank",
"item.create.copper_ingot": "Copper Ingot",
"item.create.copper_nugget": "Copper Nugget",
"item.create.copper_sheet": "Copper Sheet",
"item.create.crafter_slot_cover": "Crafter Slot Cover",
"item.create.crafting_blueprint": "Crafting Blueprint",
"item.create.crushed_aluminum_ore": "Crushed Aluminum Ore",
"item.create.crushed_brass": "Crushed Brass",
"item.create.crushed_copper_ore": "Crushed Copper Ore",
"item.create.crushed_gold_ore": "Crushed Gold Ore",
"item.create.crushed_iron_ore": "Crushed Iron Ore",
"item.create.crushed_lead_ore": "Crushed Lead Ore",
"item.create.crushed_nickel_ore": "Crushed Nickel Ore",
"item.create.crushed_osmium_ore": "Crushed Osmium Ore",
"item.create.crushed_platinum_ore": "Crushed Platinum Ore",
"item.create.crushed_quicksilver_ore": "Crushed Quicksilver Ore",
"item.create.crushed_silver_ore": "Crushed Silver Ore",
"item.create.crushed_tin_ore": "Crushed Tin Ore",
"item.create.crushed_uranium_ore": "Crushed Uranium Ore",
@ -662,26 +661,29 @@
"itemGroup.create.base": "Create",
"itemGroup.create.palettes": "Create Palettes",
"death.attack.create.crush": "%1$s was processed by Crushing Wheels",
"death.attack.create.fan_fire": "%1$s was burned to death by hot air",
"death.attack.create.fan_lava": "%1$s was burned to death by lava fan",
"death.attack.create.mechanical_drill": "%1$s was impaled by a Mechanical Drill",
"death.attack.create.mechanical_saw": "%1$s got cut in half by a Mechanical Saw",
"death.attack.create.cuckoo_clock_explosion": "%1$s was blown up by tampered cuckoo clock",
"create.block.deployer.damage_source_name": "a rogue Deployer",
"create.block.cart_assembler.invalid": "Place your Cart Assembler on a rail block",
"create.recipe.crushing": "Crushing",
"create.recipe.milling": "Milling",
"create.recipe.fan_washing": "Bulk Washing",
"create.recipe.fan_washing.fan": "Fan behind Flowing Water",
"create.recipe.fan_smoking": "Bulk Smoking",
"create.recipe.fan_smoking.fan": "Fan behind Fire",
"create.recipe.fan_blasting": "Bulk Blasting",
"create.recipe.fan_blasting.fan": "Fan behind Lava",
"create.recipe.pressing": "Pressing",
"death.attack.create.crush": "%1$s was processed by Crushing Wheels",
"death.attack.create.fan_fire": "%1$s was burned to death by hot air",
"death.attack.create.fan_lava": "%1$s was burned to death by lava fan",
"death.attack.create.mechanical_drill": "%1$s was impaled by a Mechanical Drill",
"death.attack.create.mechanical_saw": "%1$s got cut in half by a Mechanical Saw",
"death.attack.create.cuckoo_clock_explosion": "%1$s was blown up by tampered cuckoo clock",
"create.block.deployer.damage_source_name": "a rogue Deployer",
"create.block.cart_assembler.invalid": "Place your Cart Assembler on a rail block",
"create.menu.return": "Return to Menu",
"create.menu.configure": "Configure...",
"create.menu.getting_started": "Getting Started",
"create.menu.project_page": "Project Page",
"create.menu.report_bugs": "Report Issues",
"create.menu.support": "Support Us",
"create.recipe.crushing": "Crushing",
"create.recipe.milling": "Milling",
"create.recipe.fan_washing": "Bulk Washing",
"create.recipe.fan_washing.fan": "Fan behind Flowing Water",
"create.recipe.fan_smoking": "Bulk Smoking",
"create.recipe.fan_smoking.fan": "Fan behind Fire",
"create.recipe.fan_blasting": "Bulk Blasting",
"create.recipe.fan_blasting.fan": "Fan behind Lava",
"create.recipe.pressing": "Pressing",
"create.recipe.mixing": "Mixing",
"create.recipe.deploying": "Deploying",
"create.recipe.automatic_shapeless": "Automated Shapeless Crafting",
@ -1102,24 +1104,29 @@
"create.tooltip.chute.no_fans_attached": "No attached fans",
"create.tooltip.chute.fans_push_up": "Fans push from Below",
"create.tooltip.chute.fans_push_down": "Fans push from Above",
"create.tooltip.chute.fans_pull_up": "Fans pull from Above",
"create.tooltip.chute.fans_pull_down": "Fans pull from Below",
"create.tooltip.chute.contains": "Contains: %1$s x%2$s",
"create.linked_controller.bind_mode": "Bind mode active",
"create.linked_controller.press_keybind": "Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "Keybind: %1$s, Freq. #2",
"create.hint.hose_pulley.title": "Bottomless Supply",
"create.hint.hose_pulley": "The targeted body of fluid is considered infinite.",
"create.hint.mechanical_arm_no_targets.title": "No Targets",
"create.hint.mechanical_arm_no_targets": "It appears this _Mechanical_ _Arm_ has not been assigned any _targets._ Select belts, depots, funnels and other blocks by _right-clicking_ them while _holding_ the _Mechanical_ _Arm_ in your _hand_.",
"create.hint.empty_bearing.title": "Update Bearing",
"create.hint.empty_bearing": "_Right-click_ the bearing with an _empty_ _hand_ to _attach_ the structure you just built in front of it.",
"create.hint.full_deployer.title": "Deployer Item Overflow",
"create.hint.full_deployer": "It appears this _Deployer_ contains _excess_ _items_ that need to be _extracted._ Use a _hopper,_ _funnel_ or other means to free it from its overflow.",
"create.tooltip.chute.fans_pull_up": "Fans pull from Above",
"create.tooltip.chute.fans_pull_down": "Fans pull from Below",
"create.tooltip.chute.contains": "Contains: %1$s x%2$s",
"create.linked_controller.bind_mode": "Bind mode active",
"create.linked_controller.press_keybind": "Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "Keybind: %1$s, Freq. #2",
"create.crafting_blueprint.crafting_slot": "Ingredient Slot",
"create.crafting_blueprint.filter_items_viable": "Advanced filter items are viable",
"create.crafting_blueprint.display_slot": "Display Slot",
"create.crafting_blueprint.inferred": "Inferred from recipe",
"create.crafting_blueprint.manually_assigned": "Manually assigned",
"create.crafting_blueprint.secondary_display_slot": "Secondary Display Slot",
"create.crafting_blueprint.optional": "Optional",
"create.hint.hose_pulley.title": "Bottomless Supply",
"create.hint.hose_pulley": "The targeted body of fluid is considered infinite.",
"create.hint.mechanical_arm_no_targets.title": "No Targets",
"create.hint.mechanical_arm_no_targets": "It appears this _Mechanical_ _Arm_ has not been assigned any _targets._ Select belts, depots, funnels and other blocks by _right-clicking_ them while _holding_ the _Mechanical_ _Arm_ in your _hand_.",
"create.hint.empty_bearing.title": "Update Bearing",
"create.hint.empty_bearing": "_Right-click_ the bearing with an _empty_ _hand_ to _attach_ the structure you just built in front of it.",
"create.hint.full_deployer.title": "Deployer Item Overflow",
"create.hint.full_deployer": "It appears this _Deployer_ contains _excess_ _items_ that need to be _extracted._ Use a _hopper,_ _funnel_ or other means to free it from its overflow.",
"create.gui.config.overlay1": "Hi :)",
"create.gui.config.overlay2": "This is a sample overlay",
@ -1611,27 +1618,24 @@
"create.ponder.cart_assembler_rails.header": "Other types of Minecarts and Rails",
"create.ponder.cart_assembler_rails.text_1": "Cart Assemblers on Regular Tracks will not affect the passing carts' motion",
"create.ponder.cart_assembler_rails.text_2": "When on Powered or Controller Rail, the carts will be held in place until it's Powered",
"create.ponder.cart_assembler_rails.text_3": "Other types of Minecarts can be used as the anchor",
"create.ponder.cart_assembler_rails.text_4": "Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
"create.ponder.chain_drive.header": "Relaying rotational force with Chain Drives",
"create.ponder.chain_drive.text_1": "Chain Drives relay rotation to each other in a row",
"create.ponder.chain_drive.text_2": "All shafts connected like this will rotate in the same direction",
"create.ponder.chain_drive.text_3": "Any part of the row can be rotated by 90 degrees",
"create.ponder.chain_gearshift.header": "Controlling rotational speed with Chain Gearshifts",
"create.ponder.chain_gearshift.text_1": "Unpowered Chain Gearshifts behave exacly like Chain Drives",
"create.ponder.chain_gearshift.text_2": "When Powered, the speed transmitted to other Chain Drives in the row is doubled",
"create.ponder.chain_gearshift.text_3": "Whenever the Powered Gearshift is not at the source, its speed will be halved instead",
"create.ponder.chain_gearshift.text_4": "In both cases, Chain Drives in the row always run at 2x the speed of the Powered Gearshift",
"create.ponder.chain_gearshift.text_5": "Using analog signals, the ratio can be adjusted more precisely between 1 and 2",
"create.ponder.chain_gearshift.text_6": "12 RPM",
"create.ponder.chute.header": "Transporting Items downward via Chutes",
"create.ponder.chute.text_1": "Chutes can transport items vertically from and to inventories",
"create.ponder.chute.text_2": "Using the Wrench, a window can be created",
"create.ponder.chute.text_3": "Placing chutes targeting the side faces of another will make it diagonal",
"create.ponder.cart_assembler_rails.text_2": "When on Powered or Controller Rail, the carts will be held in place until it's Powered",
"create.ponder.cart_assembler_rails.text_3": "Other types of Minecarts can be used as the anchor",
"create.ponder.cart_assembler_rails.text_4": "Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
"create.ponder.chain_drive.header": "Relaying rotational force with Chain Drives",
"create.ponder.chain_drive.text_1": "Chain Drives relay rotation to each other in a row",
"create.ponder.chain_drive.text_2": "All shafts connected like this will rotate in the same direction",
"create.ponder.chain_drive.text_3": "Any part of the row can be rotated by 90 degrees",
"create.ponder.chain_gearshift.header": "Controlling rotational speed with Chain Gearshifts",
"create.ponder.chain_gearshift.text_1": "Unpowered Chain Gearshifts behave exactly like Chain Drives",
"create.ponder.chain_gearshift.text_2": "When Powered, the speed transmitted to other Chain Drives in the row is doubled",
"create.ponder.chain_gearshift.text_3": "Whenever the Powered Gearshift is not at the source, its speed will be halved instead",
"create.ponder.chain_gearshift.text_4": "In both cases, Chain Drives in the row always run at 2x the speed of the Powered Gearshift",
"create.ponder.chain_gearshift.text_5": "Using analog signals, the ratio can be adjusted more precisely between 1 and 2",
"create.ponder.chain_gearshift.text_6": "12 RPM",
"create.ponder.chute.header": "Transporting Items downward via Chutes",
"create.ponder.chute.text_1": "Chutes can transport items vertically from and to inventories",
"create.ponder.chute.text_2": "Using the Wrench, a window can be created",
"create.ponder.chute.text_3": "Placing chutes targeting the side faces of another will make it diagonal",
"create.ponder.chute_upward.header": "Transporting Items upward via Chutes",
"create.ponder.chute_upward.text_1": "Using Encased Fans at the top or bottom, a Chute can move items upward",

View file

@ -1,15 +1,13 @@
{
"_": "Missing Localizations: 953",
"_": "->------------------------] Game Elements [------------------------<-",
"block.create.acacia_window": "Akazienholzfenster",
"block.create.acacia_window_pane": "Akazienholzfensterscheibe",
"block.create.adjustable_chain_gearshift": "Verstellbares Kettengetriebe",
"block.create.adjustable_crate": "Verstellbare Kiste",
"block.create.adjustable_pulse_repeater": "Verstellbarer Pulsverstärker",
"block.create.adjustable_repeater": "Verstellbarer Verstärker",
"block.create.analog_lever": "Analoger Schalter",
"_": "Missing Localizations: 968",
"_": "->------------------------] Game Elements [------------------------<-",
"block.create.acacia_window": "Akazienholzfenster",
"block.create.acacia_window_pane": "Akazienholzfensterscheibe",
"block.create.adjustable_chain_gearshift": "Verstellbares Kettengetriebe",
"block.create.adjustable_crate": "Verstellbare Kiste",
"block.create.adjustable_pulse_repeater": "Verstellbarer Pulsverstärker",
"block.create.adjustable_repeater": "Verstellbarer Verstärker",
"block.create.analog_lever": "Analoger Schalter",
"block.create.andesite_belt_funnel": "Riementrichter aus Andesit",
"block.create.andesite_bricks": "Andesitziegel",
"block.create.andesite_bricks_slab": "Andesitziegelstufe",
@ -404,26 +402,24 @@
"block.create.weighted_ejector": "Gewichteter Werfer",
"block.create.white_sail": "Weiße Segel",
"block.create.white_seat": "Weißer Sitz",
"block.create.white_valve_handle": "Weißer Ventilgriff",
"block.create.windmill_bearing": "Windmühlenlager",
"block.create.wooden_bracket": "Holzhalterung",
"block.create.yellow_sail": "Gelbes Segel",
"block.create.yellow_seat": "Gelber Sitz",
"block.create.yellow_valve_handle": "Gelber Ventilgriff",
"block.create.zinc_block": "Zinkblock",
"block.create.zinc_ore": "Zinkerz",
"entity.create.contraption": "Vorrichtung",
"entity.create.gantry_contraption": "Portalkran Vorrichtung",
"entity.create.seat": "Sitz",
"entity.create.stationary_contraption": "Stationäre Vorrichtung",
"entity.create.super_glue": "Superkleber",
"fluid.create.milk": "Milch",
"fluid.create.potion": "Trank",
"fluid.create.tea": "Bauherrentee",
"item.create.andesite_alloy": "Andesitlegierung",
"block.create.white_valve_handle": "Weißer Ventilgriff",
"block.create.windmill_bearing": "Windmühlenlager",
"block.create.wooden_bracket": "Holzhalterung",
"block.create.yellow_sail": "Gelbes Segel",
"block.create.yellow_seat": "Gelber Sitz",
"block.create.yellow_valve_handle": "Gelber Ventilgriff",
"block.create.zinc_block": "Zinkblock",
"block.create.zinc_ore": "Zinkerz",
"entity.create.contraption": "Vorrichtung",
"entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"entity.create.gantry_contraption": "Portalkran Vorrichtung",
"entity.create.seat": "Sitz",
"entity.create.stationary_contraption": "Stationäre Vorrichtung",
"entity.create.super_glue": "Superkleber",
"fluid.create.milk": "Milch",
"fluid.create.potion": "Trank",
"fluid.create.tea": "Bauherrentee",
"item.create.andesite_alloy": "Andesitlegierung",
"item.create.attribute_filter": "Attribut Filter",
"item.create.bar_of_chocolate": "Schokoladentafel",
"item.create.belt_connector": "Mechanischer Riemen",
@ -434,26 +430,27 @@
"item.create.brass_nugget": "Messingklumpen",
"item.create.brass_sheet": "Messingblech",
"item.create.builders_tea": "Baumeisters Tee",
"item.create.chest_minecart_contraption": "Güterloren Vorrichtung",
"item.create.chocolate_bucket": "Schokoladeneimer",
"item.create.chocolate_glazed_berries": "Schokoladenglasierte Beeren",
"item.create.chromatic_compound": "Chromatische Verbindung",
"item.create.cinder_flour": "Aschenmehl",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "Kupferbarren",
"item.create.copper_nugget": "Kupferklumpen",
"item.create.copper_sheet": "Kupferblech",
"item.create.crafter_slot_cover": "Handwerkseinheit Slot Abdeckung",
"item.create.crushed_aluminum_ore": "Zerkleinertes Aluminiumerz",
"item.create.crushed_brass": "Zerkleinertes Messing",
"item.create.crushed_copper_ore": "Zerkleinertes Kupfererz",
"item.create.crushed_gold_ore": "Zerkleinertes Golderz",
"item.create.crushed_iron_ore": "Zerkleinertes Eisenerz",
"item.create.crushed_lead_ore": "Zerkleinertes Bleierz",
"item.create.crushed_nickel_ore": "Zerkleinertes Nickelerz",
"item.create.crushed_osmium_ore": "Zerkleinertes Osmiumerz",
"item.create.crushed_platinum_ore": "Zerkleinertes Platinerz",
"item.create.crushed_quicksilver_ore": "Zerkleinertes Quecksilbererz",
"item.create.chest_minecart_contraption": "Güterloren Vorrichtung",
"item.create.chocolate_bucket": "Schokoladeneimer",
"item.create.chocolate_glazed_berries": "Schokoladenglasierte Beeren",
"item.create.chromatic_compound": "Chromatische Verbindung",
"item.create.cinder_flour": "Aschenmehl",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "Kupferbarren",
"item.create.copper_nugget": "Kupferklumpen",
"item.create.copper_sheet": "Kupferblech",
"item.create.crafter_slot_cover": "Handwerkseinheit Slot Abdeckung",
"item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"item.create.crushed_aluminum_ore": "Zerkleinertes Aluminiumerz",
"item.create.crushed_brass": "Zerkleinertes Messing",
"item.create.crushed_copper_ore": "Zerkleinertes Kupfererz",
"item.create.crushed_gold_ore": "Zerkleinertes Golderz",
"item.create.crushed_iron_ore": "Zerkleinertes Eisenerz",
"item.create.crushed_lead_ore": "Zerkleinertes Bleierz",
"item.create.crushed_nickel_ore": "Zerkleinertes Nickelerz",
"item.create.crushed_osmium_ore": "Zerkleinertes Osmiumerz",
"item.create.crushed_platinum_ore": "Zerkleinertes Platinerz",
"item.create.crushed_quicksilver_ore": "Zerkleinertes Quecksilbererz",
"item.create.crushed_silver_ore": "Zerkleinertes Silbererz",
"item.create.crushed_tin_ore": "Zerkleinertes Zinnerz",
"item.create.crushed_uranium_ore": "Zerkleinertes Uranerz",
@ -662,26 +659,29 @@
"itemGroup.create.base": "Create",
"itemGroup.create.palettes": "Create Paletten",
"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_lava": "%1$s wurde von Lava verweht",
"death.attack.create.mechanical_drill": "%1$s wurde von einem Bohrer durchlöchert",
"death.attack.create.mechanical_saw": "%1$s wurde zersägt",
"death.attack.create.cuckoo_clock_explosion": "%1$s wurde durch eine falsche Kuckucksuhr gesprengt",
"create.block.deployer.damage_source_name": "einem Finger",
"create.block.cart_assembler.invalid": "Platziere deinen Lorenmonteur auf einer Schiene.",
"create.recipe.crushing": "Mahlen (Mahlwerk)",
"create.recipe.milling": "Mahlen (Mahlstein)",
"create.recipe.fan_washing": "Sammelwaschen",
"create.recipe.fan_washing.fan": "Propeller hinter fließendem Wasser",
"create.recipe.fan_smoking": "Sammelräuchern",
"create.recipe.fan_smoking.fan": "Propeller hinter Feuer",
"create.recipe.fan_blasting": "Sammelschmelzen",
"create.recipe.fan_blasting.fan": "Propeller hinter Lava",
"create.recipe.pressing": "Mechanische Presse",
"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_lava": "%1$s wurde von Lava verweht",
"death.attack.create.mechanical_drill": "%1$s wurde von einem Bohrer durchlöchert",
"death.attack.create.mechanical_saw": "%1$s wurde zersägt",
"death.attack.create.cuckoo_clock_explosion": "%1$s wurde durch eine falsche Kuckucksuhr gesprengt",
"create.block.deployer.damage_source_name": "einem Finger",
"create.block.cart_assembler.invalid": "Platziere deinen Lorenmonteur auf einer Schiene.",
"create.menu.return": "UNLOCALIZED: Return to Menu",
"create.menu.configure": "UNLOCALIZED: Configure...",
"create.menu.getting_started": "UNLOCALIZED: Getting Started",
"create.menu.project_page": "UNLOCALIZED: Project Page",
"create.menu.report_bugs": "UNLOCALIZED: Report Issues",
"create.menu.support": "UNLOCALIZED: Support Us",
"create.recipe.crushing": "Mahlen (Mahlwerk)",
"create.recipe.milling": "Mahlen (Mahlstein)",
"create.recipe.fan_washing": "Sammelwaschen",
"create.recipe.fan_washing.fan": "Propeller hinter fließendem Wasser",
"create.recipe.fan_smoking": "Sammelräuchern",
"create.recipe.fan_smoking.fan": "Propeller hinter Feuer",
"create.recipe.fan_blasting": "Sammelschmelzen",
"create.recipe.fan_blasting.fan": "Propeller hinter Lava",
"create.recipe.pressing": "Mechanische Presse",
"create.recipe.mixing": "Mixen",
"create.recipe.deploying": "UNLOCALIZED: Deploying",
"create.recipe.automatic_shapeless": "Automatisiertes Formloses Bauen",
@ -1102,24 +1102,29 @@
"create.tooltip.chute.no_fans_attached": "Keine angeschlossenen Propeller",
"create.tooltip.chute.fans_push_up": "Propeller schieben von unterhalb",
"create.tooltip.chute.fans_push_down": "Propeller schieben von oberhalb",
"create.tooltip.chute.fans_pull_up": "Propeller ziehen von oberhalb",
"create.tooltip.chute.fans_pull_down": "Propeller ziehen von unterhalb",
"create.tooltip.chute.contains": "Enthält: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.hint.hose_pulley.title": "Endlose Versorgung",
"create.hint.hose_pulley": "Das angewählte Gewässer wird als unendlich betrachtet.",
"create.hint.mechanical_arm_no_targets.title": "Keine Ziele",
"create.hint.mechanical_arm_no_targets": "Es schein dieser _Mechanische_ _Arm_ hat keine _Ziele_. Wähle Riemen, Depots oder Trichter und andere Blöcke indem du sie _Rechts-Klickst_ während du den _Mechanischen_ _Arm_ in deiner _Hand_ _hälst_.",
"create.hint.empty_bearing.title": "Aktualisiere Lager",
"create.hint.empty_bearing": "_Rechts-Klicke_ das Lager mit einer _leeren_ _Hand_ um die Struktur die du davor gebaut hast _anzubringen_.",
"create.hint.full_deployer.title": "Einsatzgerät Gegenstand Überlauf",
"create.hint.full_deployer": "Es scheint, dieses _Einsatzgerät_ enthält _überflüssige_ _Gegenstände_ die _extrahiert_ werden müssen. Nutze _Trichter_ oder anderes um ihn von seinem Überfluss zu befreien.",
"create.tooltip.chute.fans_pull_up": "Propeller ziehen von oberhalb",
"create.tooltip.chute.fans_pull_down": "Propeller ziehen von unterhalb",
"create.tooltip.chute.contains": "Enthält: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.crafting_blueprint.crafting_slot": "UNLOCALIZED: Ingredient Slot",
"create.crafting_blueprint.filter_items_viable": "UNLOCALIZED: Advanced filter items are viable",
"create.crafting_blueprint.display_slot": "UNLOCALIZED: Display Slot",
"create.crafting_blueprint.inferred": "UNLOCALIZED: Inferred from recipe",
"create.crafting_blueprint.manually_assigned": "UNLOCALIZED: Manually assigned",
"create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot",
"create.crafting_blueprint.optional": "UNLOCALIZED: Optional",
"create.hint.hose_pulley.title": "Endlose Versorgung",
"create.hint.hose_pulley": "Das angewählte Gewässer wird als unendlich betrachtet.",
"create.hint.mechanical_arm_no_targets.title": "Keine Ziele",
"create.hint.mechanical_arm_no_targets": "Es schein dieser _Mechanische_ _Arm_ hat keine _Ziele_. Wähle Riemen, Depots oder Trichter und andere Blöcke indem du sie _Rechts-Klickst_ während du den _Mechanischen_ _Arm_ in deiner _Hand_ _hälst_.",
"create.hint.empty_bearing.title": "Aktualisiere Lager",
"create.hint.empty_bearing": "_Rechts-Klicke_ das Lager mit einer _leeren_ _Hand_ um die Struktur die du davor gebaut hast _anzubringen_.",
"create.hint.full_deployer.title": "Einsatzgerät Gegenstand Überlauf",
"create.hint.full_deployer": "Es scheint, dieses _Einsatzgerät_ enthält _überflüssige_ _Gegenstände_ die _extrahiert_ werden müssen. Nutze _Trichter_ oder anderes um ihn von seinem Überfluss zu befreien.",
"create.gui.config.overlay1": "Hi :)",
"create.gui.config.overlay2": "Dies ist ein Beispiel Overlay",
@ -1596,27 +1601,24 @@
"create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails",
"create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion",
"create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered",
"create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor",
"create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
"create.ponder.chain_drive.text_3": "UNLOCALIZED: Any part of the row can be rotated by 90 degrees",
"create.ponder.chain_gearshift.header": "UNLOCALIZED: Controlling rotational speed with Chain Gearshifts",
"create.ponder.chain_gearshift.text_1": "UNLOCALIZED: Unpowered Chain Gearshifts behave exacly like Chain Drives",
"create.ponder.chain_gearshift.text_2": "UNLOCALIZED: When Powered, the speed transmitted to other Chain Drives in the row is doubled",
"create.ponder.chain_gearshift.text_3": "UNLOCALIZED: Whenever the Powered Gearshift is not at the source, its speed will be halved instead",
"create.ponder.chain_gearshift.text_4": "UNLOCALIZED: In both cases, Chain Drives in the row always run at 2x the speed of the Powered Gearshift",
"create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2",
"create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM",
"create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes",
"create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories",
"create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created",
"create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal",
"create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered",
"create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor",
"create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
"create.ponder.chain_drive.text_3": "UNLOCALIZED: Any part of the row can be rotated by 90 degrees",
"create.ponder.chain_gearshift.header": "UNLOCALIZED: Controlling rotational speed with Chain Gearshifts",
"create.ponder.chain_gearshift.text_1": "UNLOCALIZED: Unpowered Chain Gearshifts behave exactly like Chain Drives",
"create.ponder.chain_gearshift.text_2": "UNLOCALIZED: When Powered, the speed transmitted to other Chain Drives in the row is doubled",
"create.ponder.chain_gearshift.text_3": "UNLOCALIZED: Whenever the Powered Gearshift is not at the source, its speed will be halved instead",
"create.ponder.chain_gearshift.text_4": "UNLOCALIZED: In both cases, Chain Drives in the row always run at 2x the speed of the Powered Gearshift",
"create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2",
"create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM",
"create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes",
"create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories",
"create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created",
"create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal",
"create.ponder.chute_upward.header": "UNLOCALIZED: Transporting Items upward via Chutes",
"create.ponder.chute_upward.text_1": "UNLOCALIZED: Using Encased Fans at the top or bottom, a Chute can move items upward",
@ -2119,4 +2121,4 @@
"_": "Thank you for translating Create!"
}
}

View file

@ -1,15 +1,13 @@
{
"_": "Missing Localizations: 654",
"_": "->------------------------] Game Elements [------------------------<-",
"block.create.acacia_window": "Ventana de acacia",
"block.create.acacia_window_pane": "Panel de ventana de acacia",
"block.create.adjustable_chain_gearshift": "Cadena de transmisión ajustable",
"block.create.adjustable_crate": "Caja ajustable",
"block.create.adjustable_pulse_repeater": "Repetidor de pulso ajustable",
"block.create.adjustable_repeater": "Repetidor ajustable",
"block.create.analog_lever": "Palanca analógica",
"_": "Missing Localizations: 669",
"_": "->------------------------] Game Elements [------------------------<-",
"block.create.acacia_window": "Ventana de acacia",
"block.create.acacia_window_pane": "Panel de ventana de acacia",
"block.create.adjustable_chain_gearshift": "Cadena de transmisión ajustable",
"block.create.adjustable_crate": "Caja ajustable",
"block.create.adjustable_pulse_repeater": "Repetidor de pulso ajustable",
"block.create.adjustable_repeater": "Repetidor ajustable",
"block.create.analog_lever": "Palanca analógica",
"block.create.andesite_belt_funnel": "Embudo de cinta de andesita",
"block.create.andesite_bricks": "Ladrillos de andesita",
"block.create.andesite_bricks_slab": "Losa de ladrillos de andesita",
@ -404,26 +402,24 @@
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector",
"block.create.white_sail": "Vela blanca",
"block.create.white_seat": "Asiento blanco",
"block.create.white_valve_handle": "Asa de válvula blanco",
"block.create.windmill_bearing": "Rodamiento del molino de viento",
"block.create.wooden_bracket": "Soporte de madera para ejes",
"block.create.yellow_sail": "Vela amarilla",
"block.create.yellow_seat": "Asiento amarillo",
"block.create.yellow_valve_handle": "Asa de válvula amarillo",
"block.create.zinc_block": "Bloque de zinc",
"block.create.zinc_ore": "Mineral de zinc",
"entity.create.contraption": "Artilugio",
"entity.create.gantry_contraption": "Artilugio de grúa",
"entity.create.seat": "Asiento",
"entity.create.stationary_contraption": "Artilugio estacionario",
"entity.create.super_glue": "Super Pegamento",
"fluid.create.milk": "Leche",
"fluid.create.potion": "Poción",
"fluid.create.tea": "Té del Constructor",
"item.create.andesite_alloy": "Aleación de andesita",
"block.create.white_valve_handle": "Asa de válvula blanco",
"block.create.windmill_bearing": "Rodamiento del molino de viento",
"block.create.wooden_bracket": "Soporte de madera para ejes",
"block.create.yellow_sail": "Vela amarilla",
"block.create.yellow_seat": "Asiento amarillo",
"block.create.yellow_valve_handle": "Asa de válvula amarillo",
"block.create.zinc_block": "Bloque de zinc",
"block.create.zinc_ore": "Mineral de zinc",
"entity.create.contraption": "Artilugio",
"entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"entity.create.gantry_contraption": "Artilugio de grúa",
"entity.create.seat": "Asiento",
"entity.create.stationary_contraption": "Artilugio estacionario",
"entity.create.super_glue": "Super Pegamento",
"fluid.create.milk": "Leche",
"fluid.create.potion": "Poción",
"fluid.create.tea": "Té del Constructor",
"item.create.andesite_alloy": "Aleación de andesita",
"item.create.attribute_filter": "Filtro de atributos",
"item.create.bar_of_chocolate": "Barra de chocolate",
"item.create.belt_connector": "Correa",
@ -434,26 +430,27 @@
"item.create.brass_nugget": "Pepita de latón",
"item.create.brass_sheet": "Lámina de latón",
"item.create.builders_tea": "Té del Constructor",
"item.create.chest_minecart_contraption": "Artilugio de vagoneta con cofre",
"item.create.chocolate_bucket": "Cubo de chocolate",
"item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries",
"item.create.chromatic_compound": "Compuesto cromático",
"item.create.cinder_flour": "Harina de ceniza",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "Lingote de cobre",
"item.create.copper_nugget": "Pepita de cobre",
"item.create.copper_sheet": "Lámina de cobre",
"item.create.crafter_slot_cover": "Tapa de ranura del Autoensamblador mecánico",
"item.create.crushed_aluminum_ore": "Mineral de aluminio molido",
"item.create.crushed_brass": "Latón molido",
"item.create.crushed_copper_ore": "Mineral de cobre molido",
"item.create.crushed_gold_ore": "Mineral de oro molido",
"item.create.crushed_iron_ore": "Mineral de hierro molido",
"item.create.crushed_lead_ore": "Mineral de plomo molido",
"item.create.crushed_nickel_ore": "Mineral de níquel molido",
"item.create.crushed_osmium_ore": "Mineral de osmio molido",
"item.create.crushed_platinum_ore": "Mineral de platino molido",
"item.create.crushed_quicksilver_ore": "Mineral de mercurio molido",
"item.create.chest_minecart_contraption": "Artilugio de vagoneta con cofre",
"item.create.chocolate_bucket": "Cubo de chocolate",
"item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries",
"item.create.chromatic_compound": "Compuesto cromático",
"item.create.cinder_flour": "Harina de ceniza",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "Lingote de cobre",
"item.create.copper_nugget": "Pepita de cobre",
"item.create.copper_sheet": "Lámina de cobre",
"item.create.crafter_slot_cover": "Tapa de ranura del Autoensamblador mecánico",
"item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"item.create.crushed_aluminum_ore": "Mineral de aluminio molido",
"item.create.crushed_brass": "Latón molido",
"item.create.crushed_copper_ore": "Mineral de cobre molido",
"item.create.crushed_gold_ore": "Mineral de oro molido",
"item.create.crushed_iron_ore": "Mineral de hierro molido",
"item.create.crushed_lead_ore": "Mineral de plomo molido",
"item.create.crushed_nickel_ore": "Mineral de níquel molido",
"item.create.crushed_osmium_ore": "Mineral de osmio molido",
"item.create.crushed_platinum_ore": "Mineral de platino molido",
"item.create.crushed_quicksilver_ore": "Mineral de mercurio molido",
"item.create.crushed_silver_ore": "Mineral de plata molido",
"item.create.crushed_tin_ore": "Mineral de estaño molido",
"item.create.crushed_uranium_ore": "Mineral de uranio molido",
@ -662,26 +659,29 @@
"itemGroup.create.base": "Create",
"itemGroup.create.palettes": "Paletas",
"death.attack.create.crush": "%1$s se procesó por las Ruedas de trituración",
"death.attack.create.fan_fire": "%1$s murió quemado por el aire caliente",
"death.attack.create.fan_lava": "%1$s murió quemado por un abanico de lava",
"death.attack.create.mechanical_drill": "%1$s fue empalado por un taladro mecánico",
"death.attack.create.mechanical_saw": "%1$s fue cortado por la mitad por una sierra mecánica",
"death.attack.create.cuckoo_clock_explosion": "%1$s fue volado por los aires por un reloj cucú manipulado",
"create.block.deployer.damage_source_name": "un Desplegador rebelde",
"create.block.cart_assembler.invalid": "Coloque su Ensamblador de vagonetas en un bloque de Raíles",
"create.recipe.crushing": "Trituración",
"create.recipe.milling": "Fresado",
"create.recipe.fan_washing": "Lavado a granel",
"create.recipe.fan_washing.fan": "Ventilador detrás del agua fluyente",
"create.recipe.fan_smoking": "Ahumador a granel",
"create.recipe.fan_smoking.fan": "Ventilador detrás del fuego",
"create.recipe.fan_blasting": "Voladuras a granel",
"create.recipe.fan_blasting.fan": "Ventilador detrás de la lava",
"create.recipe.pressing": "Prensando",
"death.attack.create.crush": "%1$s se procesó por las Ruedas de trituración",
"death.attack.create.fan_fire": "%1$s murió quemado por el aire caliente",
"death.attack.create.fan_lava": "%1$s murió quemado por un abanico de lava",
"death.attack.create.mechanical_drill": "%1$s fue empalado por un taladro mecánico",
"death.attack.create.mechanical_saw": "%1$s fue cortado por la mitad por una sierra mecánica",
"death.attack.create.cuckoo_clock_explosion": "%1$s fue volado por los aires por un reloj cucú manipulado",
"create.block.deployer.damage_source_name": "un Desplegador rebelde",
"create.block.cart_assembler.invalid": "Coloque su Ensamblador de vagonetas en un bloque de Raíles",
"create.menu.return": "UNLOCALIZED: Return to Menu",
"create.menu.configure": "UNLOCALIZED: Configure...",
"create.menu.getting_started": "UNLOCALIZED: Getting Started",
"create.menu.project_page": "UNLOCALIZED: Project Page",
"create.menu.report_bugs": "UNLOCALIZED: Report Issues",
"create.menu.support": "UNLOCALIZED: Support Us",
"create.recipe.crushing": "Trituración",
"create.recipe.milling": "Fresado",
"create.recipe.fan_washing": "Lavado a granel",
"create.recipe.fan_washing.fan": "Ventilador detrás del agua fluyente",
"create.recipe.fan_smoking": "Ahumador a granel",
"create.recipe.fan_smoking.fan": "Ventilador detrás del fuego",
"create.recipe.fan_blasting": "Voladuras a granel",
"create.recipe.fan_blasting.fan": "Ventilador detrás de la lava",
"create.recipe.pressing": "Prensando",
"create.recipe.mixing": "Mezclando",
"create.recipe.deploying": "UNLOCALIZED: Deploying",
"create.recipe.automatic_shapeless": "Elaboración automatizada de productos sin forma",
@ -1102,24 +1102,29 @@
"create.tooltip.chute.no_fans_attached": "No hay ventiladores adjuntos",
"create.tooltip.chute.fans_push_up": "Los ventiladores empujan desde abajo",
"create.tooltip.chute.fans_push_down": "Los ventiladores empujan desde arriba",
"create.tooltip.chute.fans_pull_up": "Los ventiladores tiran desde arriba",
"create.tooltip.chute.fans_pull_down": "Los ventiladores tiran desde abajo",
"create.tooltip.chute.contains": "Contiene: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.hint.hose_pulley.title": "Suministro sin fondo",
"create.hint.hose_pulley": "La masa de fluido objetivo se considera infinita",
"create.hint.mechanical_arm_no_targets.title": "No hay objetivos",
"create.hint.mechanical_arm_no_targets": "Parece que a este _brazo mecánico_ no se le ha asignado ningún _objetivo._ Selecciona correas, depósitos, embudos y otros bloques haciendo _clic derecho_ sobre ellos mientras _sostienes_ el _brazo mecánico_ en tu _mano_.",
"create.hint.empty_bearing.title": "Rodamiento de reloj",
"create.hint.empty_bearing": "_Haz clic con el botón derecho del ratón_ en el rodamiento con la _mano vacía_ para _adherir_ la estructura que acabas de construir delante de él",
"create.hint.full_deployer.title": "Desbordamiento de elementos del desplegador",
"create.hint.full_deployer": "Parece que este _Desplegador_ contiene _elementos_ en exceso que necesitan ser _extraídos._ Usa un _tolva,_embudo_ u otro medio para liberarlo de su desbordamiento.",
"create.tooltip.chute.fans_pull_up": "Los ventiladores tiran desde arriba",
"create.tooltip.chute.fans_pull_down": "Los ventiladores tiran desde abajo",
"create.tooltip.chute.contains": "Contiene: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.crafting_blueprint.crafting_slot": "UNLOCALIZED: Ingredient Slot",
"create.crafting_blueprint.filter_items_viable": "UNLOCALIZED: Advanced filter items are viable",
"create.crafting_blueprint.display_slot": "UNLOCALIZED: Display Slot",
"create.crafting_blueprint.inferred": "UNLOCALIZED: Inferred from recipe",
"create.crafting_blueprint.manually_assigned": "UNLOCALIZED: Manually assigned",
"create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot",
"create.crafting_blueprint.optional": "UNLOCALIZED: Optional",
"create.hint.hose_pulley.title": "Suministro sin fondo",
"create.hint.hose_pulley": "La masa de fluido objetivo se considera infinita",
"create.hint.mechanical_arm_no_targets.title": "No hay objetivos",
"create.hint.mechanical_arm_no_targets": "Parece que a este _brazo mecánico_ no se le ha asignado ningún _objetivo._ Selecciona correas, depósitos, embudos y otros bloques haciendo _clic derecho_ sobre ellos mientras _sostienes_ el _brazo mecánico_ en tu _mano_.",
"create.hint.empty_bearing.title": "Rodamiento de reloj",
"create.hint.empty_bearing": "_Haz clic con el botón derecho del ratón_ en el rodamiento con la _mano vacía_ para _adherir_ la estructura que acabas de construir delante de él",
"create.hint.full_deployer.title": "Desbordamiento de elementos del desplegador",
"create.hint.full_deployer": "Parece que este _Desplegador_ contiene _elementos_ en exceso que necesitan ser _extraídos._ Usa un _tolva,_embudo_ u otro medio para liberarlo de su desbordamiento.",
"create.gui.config.overlay1": "Hola :)",
"create.gui.config.overlay2": "Esta es una muestra de la superposición",
@ -1596,27 +1601,24 @@
"create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails",
"create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion",
"create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered",
"create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor",
"create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
"create.ponder.chain_drive.text_3": "UNLOCALIZED: Any part of the row can be rotated by 90 degrees",
"create.ponder.chain_gearshift.header": "UNLOCALIZED: Controlling rotational speed with Chain Gearshifts",
"create.ponder.chain_gearshift.text_1": "UNLOCALIZED: Unpowered Chain Gearshifts behave exacly like Chain Drives",
"create.ponder.chain_gearshift.text_2": "UNLOCALIZED: When Powered, the speed transmitted to other Chain Drives in the row is doubled",
"create.ponder.chain_gearshift.text_3": "UNLOCALIZED: Whenever the Powered Gearshift is not at the source, its speed will be halved instead",
"create.ponder.chain_gearshift.text_4": "UNLOCALIZED: In both cases, Chain Drives in the row always run at 2x the speed of the Powered Gearshift",
"create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2",
"create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM",
"create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes",
"create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories",
"create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created",
"create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal",
"create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered",
"create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor",
"create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
"create.ponder.chain_drive.text_3": "UNLOCALIZED: Any part of the row can be rotated by 90 degrees",
"create.ponder.chain_gearshift.header": "UNLOCALIZED: Controlling rotational speed with Chain Gearshifts",
"create.ponder.chain_gearshift.text_1": "UNLOCALIZED: Unpowered Chain Gearshifts behave exactly like Chain Drives",
"create.ponder.chain_gearshift.text_2": "UNLOCALIZED: When Powered, the speed transmitted to other Chain Drives in the row is doubled",
"create.ponder.chain_gearshift.text_3": "UNLOCALIZED: Whenever the Powered Gearshift is not at the source, its speed will be halved instead",
"create.ponder.chain_gearshift.text_4": "UNLOCALIZED: In both cases, Chain Drives in the row always run at 2x the speed of the Powered Gearshift",
"create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2",
"create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM",
"create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes",
"create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories",
"create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created",
"create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal",
"create.ponder.chute_upward.header": "UNLOCALIZED: Transporting Items upward via Chutes",
"create.ponder.chute_upward.text_1": "UNLOCALIZED: Using Encased Fans at the top or bottom, a Chute can move items upward",
@ -2119,4 +2121,4 @@
"_": "Thank you for translating Create!"
}
}

View file

@ -1,15 +1,13 @@
{
"_": "Missing Localizations: 1277",
"_": "->------------------------] Game Elements [------------------------<-",
"block.create.acacia_window": "Ventana de Acacia",
"block.create.acacia_window_pane": "Panel de Ventana de Acacia",
"block.create.adjustable_chain_gearshift": "Cambio Ajustable de Velocidad de Cadena",
"block.create.adjustable_crate": "Caja Ajustable",
"block.create.adjustable_pulse_repeater": "Repetidor de Pulso Ajustable",
"block.create.adjustable_repeater": "Repetidor Ajustable",
"block.create.analog_lever": "Palanca Analogica",
"_": "Missing Localizations: 1292",
"_": "->------------------------] Game Elements [------------------------<-",
"block.create.acacia_window": "Ventana de Acacia",
"block.create.acacia_window_pane": "Panel de Ventana de Acacia",
"block.create.adjustable_chain_gearshift": "Cambio Ajustable de Velocidad de Cadena",
"block.create.adjustable_crate": "Caja Ajustable",
"block.create.adjustable_pulse_repeater": "Repetidor de Pulso Ajustable",
"block.create.adjustable_repeater": "Repetidor Ajustable",
"block.create.analog_lever": "Palanca Analogica",
"block.create.andesite_belt_funnel": "UNLOCALIZED: Andesite Belt Funnel",
"block.create.andesite_bricks": "Ladrillos de Andesita",
"block.create.andesite_bricks_slab": "Losa de Ladrillos de Andesita",
@ -404,26 +402,24 @@
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector",
"block.create.white_sail": "Vela Blanca",
"block.create.white_seat": "Asiento Blanco",
"block.create.white_valve_handle": "Manija de Válvula Blanca",
"block.create.windmill_bearing": "Rodamiento de Molino de Viento",
"block.create.wooden_bracket": "Soporte de Madera",
"block.create.yellow_sail": "Vela Amarilla",
"block.create.yellow_seat": "Asiento Amarillo",
"block.create.yellow_valve_handle": "Manija de Válvula Amarilla",
"block.create.zinc_block": "Bloque de Zinc",
"block.create.zinc_ore": "Mineral de Zinc",
"entity.create.contraption": "Artefacto",
"entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption",
"entity.create.seat": "Asiento",
"entity.create.stationary_contraption": "Artefacto Estacionario",
"entity.create.super_glue": "Super Pegamento",
"fluid.create.milk": "Leche",
"fluid.create.potion": "Poción",
"fluid.create.tea": "Té del Constructor",
"item.create.andesite_alloy": "Aleación de Andesita",
"block.create.white_valve_handle": "Manija de Válvula Blanca",
"block.create.windmill_bearing": "Rodamiento de Molino de Viento",
"block.create.wooden_bracket": "Soporte de Madera",
"block.create.yellow_sail": "Vela Amarilla",
"block.create.yellow_seat": "Asiento Amarillo",
"block.create.yellow_valve_handle": "Manija de Válvula Amarilla",
"block.create.zinc_block": "Bloque de Zinc",
"block.create.zinc_ore": "Mineral de Zinc",
"entity.create.contraption": "Artefacto",
"entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption",
"entity.create.seat": "Asiento",
"entity.create.stationary_contraption": "Artefacto Estacionario",
"entity.create.super_glue": "Super Pegamento",
"fluid.create.milk": "Leche",
"fluid.create.potion": "Poción",
"fluid.create.tea": "Té del Constructor",
"item.create.andesite_alloy": "Aleación de Andesita",
"item.create.attribute_filter": "Filtro por Atributos",
"item.create.bar_of_chocolate": "Barra de Chocolate",
"item.create.belt_connector": "Conector de Correa",
@ -434,26 +430,27 @@
"item.create.brass_nugget": "Pepita de Latón",
"item.create.brass_sheet": "Lámina de Latón",
"item.create.builders_tea": "Té del Constructor",
"item.create.chest_minecart_contraption": "Artefacto de Vagón con Cofre",
"item.create.chocolate_bucket": "Cubeta de Chocolate",
"item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries",
"item.create.chromatic_compound": "Compuesto Cromático",
"item.create.cinder_flour": "Ceniza Molida",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "Lingote de Cobre",
"item.create.copper_nugget": "Pepita de Cobre",
"item.create.copper_sheet": "Lámina de Cobre",
"item.create.crafter_slot_cover": "Cubierta de Ranura del Crafter",
"item.create.crushed_aluminum_ore": "Mineral de Aluminio Molido",
"item.create.crushed_brass": "Latón Molido",
"item.create.crushed_copper_ore": "Mineral de Cobre Molido",
"item.create.crushed_gold_ore": "Mineral de Oro Molido",
"item.create.crushed_iron_ore": "Mineral de Hierro Molido",
"item.create.crushed_lead_ore": "Mineral de Plomo Molido",
"item.create.crushed_nickel_ore": "Mineral de Nickel Molido",
"item.create.crushed_osmium_ore": "Mineral de Osmio Molido",
"item.create.crushed_platinum_ore": "Mineral de Platino Molido",
"item.create.crushed_quicksilver_ore": "Mineral de Mercurio Molido",
"item.create.chest_minecart_contraption": "Artefacto de Vagón con Cofre",
"item.create.chocolate_bucket": "Cubeta de Chocolate",
"item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries",
"item.create.chromatic_compound": "Compuesto Cromático",
"item.create.cinder_flour": "Ceniza Molida",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "Lingote de Cobre",
"item.create.copper_nugget": "Pepita de Cobre",
"item.create.copper_sheet": "Lámina de Cobre",
"item.create.crafter_slot_cover": "Cubierta de Ranura del Crafter",
"item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"item.create.crushed_aluminum_ore": "Mineral de Aluminio Molido",
"item.create.crushed_brass": "Latón Molido",
"item.create.crushed_copper_ore": "Mineral de Cobre Molido",
"item.create.crushed_gold_ore": "Mineral de Oro Molido",
"item.create.crushed_iron_ore": "Mineral de Hierro Molido",
"item.create.crushed_lead_ore": "Mineral de Plomo Molido",
"item.create.crushed_nickel_ore": "Mineral de Nickel Molido",
"item.create.crushed_osmium_ore": "Mineral de Osmio Molido",
"item.create.crushed_platinum_ore": "Mineral de Platino Molido",
"item.create.crushed_quicksilver_ore": "Mineral de Mercurio Molido",
"item.create.crushed_silver_ore": "Mineral de Plata Molido",
"item.create.crushed_tin_ore": "Mineral de Estaño Molido",
"item.create.crushed_uranium_ore": "Mineral de Uranio Molido",
@ -662,26 +659,29 @@
"itemGroup.create.base": "UNLOCALIZED: Create",
"itemGroup.create.palettes": "UNLOCALIZED: Create Palettes",
"death.attack.create.crush": "UNLOCALIZED: %1$s was processed by Crushing Wheels",
"death.attack.create.fan_fire": "UNLOCALIZED: %1$s was burned to death by hot air",
"death.attack.create.fan_lava": "UNLOCALIZED: %1$s was burned to death by lava fan",
"death.attack.create.mechanical_drill": "UNLOCALIZED: %1$s was impaled by a Mechanical Drill",
"death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by a Mechanical Saw",
"death.attack.create.cuckoo_clock_explosion": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock",
"create.block.deployer.damage_source_name": "UNLOCALIZED: a rogue Deployer",
"create.block.cart_assembler.invalid": "UNLOCALIZED: Place your Cart Assembler on a rail block",
"create.recipe.crushing": "UNLOCALIZED: Crushing",
"create.recipe.milling": "UNLOCALIZED: Milling",
"create.recipe.fan_washing": "UNLOCALIZED: Bulk Washing",
"create.recipe.fan_washing.fan": "UNLOCALIZED: Fan behind Flowing Water",
"create.recipe.fan_smoking": "UNLOCALIZED: Bulk Smoking",
"create.recipe.fan_smoking.fan": "UNLOCALIZED: Fan behind Fire",
"create.recipe.fan_blasting": "UNLOCALIZED: Bulk Blasting",
"create.recipe.fan_blasting.fan": "UNLOCALIZED: Fan behind Lava",
"create.recipe.pressing": "UNLOCALIZED: Pressing",
"death.attack.create.crush": "UNLOCALIZED: %1$s was processed by Crushing Wheels",
"death.attack.create.fan_fire": "UNLOCALIZED: %1$s was burned to death by hot air",
"death.attack.create.fan_lava": "UNLOCALIZED: %1$s was burned to death by lava fan",
"death.attack.create.mechanical_drill": "UNLOCALIZED: %1$s was impaled by a Mechanical Drill",
"death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by a Mechanical Saw",
"death.attack.create.cuckoo_clock_explosion": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock",
"create.block.deployer.damage_source_name": "UNLOCALIZED: a rogue Deployer",
"create.block.cart_assembler.invalid": "UNLOCALIZED: Place your Cart Assembler on a rail block",
"create.menu.return": "UNLOCALIZED: Return to Menu",
"create.menu.configure": "UNLOCALIZED: Configure...",
"create.menu.getting_started": "UNLOCALIZED: Getting Started",
"create.menu.project_page": "UNLOCALIZED: Project Page",
"create.menu.report_bugs": "UNLOCALIZED: Report Issues",
"create.menu.support": "UNLOCALIZED: Support Us",
"create.recipe.crushing": "UNLOCALIZED: Crushing",
"create.recipe.milling": "UNLOCALIZED: Milling",
"create.recipe.fan_washing": "UNLOCALIZED: Bulk Washing",
"create.recipe.fan_washing.fan": "UNLOCALIZED: Fan behind Flowing Water",
"create.recipe.fan_smoking": "UNLOCALIZED: Bulk Smoking",
"create.recipe.fan_smoking.fan": "UNLOCALIZED: Fan behind Fire",
"create.recipe.fan_blasting": "UNLOCALIZED: Bulk Blasting",
"create.recipe.fan_blasting.fan": "UNLOCALIZED: Fan behind Lava",
"create.recipe.pressing": "UNLOCALIZED: Pressing",
"create.recipe.mixing": "UNLOCALIZED: Mixing",
"create.recipe.deploying": "UNLOCALIZED: Deploying",
"create.recipe.automatic_shapeless": "UNLOCALIZED: Automated Shapeless Crafting",
@ -1102,24 +1102,29 @@
"create.tooltip.chute.no_fans_attached": "UNLOCALIZED: No attached fans",
"create.tooltip.chute.fans_push_up": "UNLOCALIZED: Fans push from Below",
"create.tooltip.chute.fans_push_down": "UNLOCALIZED: Fans push from Above",
"create.tooltip.chute.fans_pull_up": "UNLOCALIZED: Fans pull from Above",
"create.tooltip.chute.fans_pull_down": "UNLOCALIZED: Fans pull from Below",
"create.tooltip.chute.contains": "UNLOCALIZED: Contains: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.hint.hose_pulley.title": "UNLOCALIZED: Bottomless Supply",
"create.hint.hose_pulley": "UNLOCALIZED: The targeted body of fluid is considered infinite.",
"create.hint.mechanical_arm_no_targets.title": "UNLOCALIZED: No Targets",
"create.hint.mechanical_arm_no_targets": "UNLOCALIZED: It appears this _Mechanical_ _Arm_ has not been assigned any _targets._ Select belts, depots, funnels and other blocks by _right-clicking_ them while _holding_ the _Mechanical_ _Arm_ in your _hand_.",
"create.hint.empty_bearing.title": "UNLOCALIZED: Update Bearing",
"create.hint.empty_bearing": "UNLOCALIZED: _Right-click_ the bearing with an _empty_ _hand_ to _attach_ the structure you just built in front of it.",
"create.hint.full_deployer.title": "UNLOCALIZED: Deployer Item Overflow",
"create.hint.full_deployer": "UNLOCALIZED: It appears this _Deployer_ contains _excess_ _items_ that need to be _extracted._ Use a _hopper,_ _funnel_ or other means to free it from its overflow.",
"create.tooltip.chute.fans_pull_up": "UNLOCALIZED: Fans pull from Above",
"create.tooltip.chute.fans_pull_down": "UNLOCALIZED: Fans pull from Below",
"create.tooltip.chute.contains": "UNLOCALIZED: Contains: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.crafting_blueprint.crafting_slot": "UNLOCALIZED: Ingredient Slot",
"create.crafting_blueprint.filter_items_viable": "UNLOCALIZED: Advanced filter items are viable",
"create.crafting_blueprint.display_slot": "UNLOCALIZED: Display Slot",
"create.crafting_blueprint.inferred": "UNLOCALIZED: Inferred from recipe",
"create.crafting_blueprint.manually_assigned": "UNLOCALIZED: Manually assigned",
"create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot",
"create.crafting_blueprint.optional": "UNLOCALIZED: Optional",
"create.hint.hose_pulley.title": "UNLOCALIZED: Bottomless Supply",
"create.hint.hose_pulley": "UNLOCALIZED: The targeted body of fluid is considered infinite.",
"create.hint.mechanical_arm_no_targets.title": "UNLOCALIZED: No Targets",
"create.hint.mechanical_arm_no_targets": "UNLOCALIZED: It appears this _Mechanical_ _Arm_ has not been assigned any _targets._ Select belts, depots, funnels and other blocks by _right-clicking_ them while _holding_ the _Mechanical_ _Arm_ in your _hand_.",
"create.hint.empty_bearing.title": "UNLOCALIZED: Update Bearing",
"create.hint.empty_bearing": "UNLOCALIZED: _Right-click_ the bearing with an _empty_ _hand_ to _attach_ the structure you just built in front of it.",
"create.hint.full_deployer.title": "UNLOCALIZED: Deployer Item Overflow",
"create.hint.full_deployer": "UNLOCALIZED: It appears this _Deployer_ contains _excess_ _items_ that need to be _extracted._ Use a _hopper,_ _funnel_ or other means to free it from its overflow.",
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
@ -1596,27 +1601,24 @@
"create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails",
"create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion",
"create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered",
"create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor",
"create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
"create.ponder.chain_drive.text_3": "UNLOCALIZED: Any part of the row can be rotated by 90 degrees",
"create.ponder.chain_gearshift.header": "UNLOCALIZED: Controlling rotational speed with Chain Gearshifts",
"create.ponder.chain_gearshift.text_1": "UNLOCALIZED: Unpowered Chain Gearshifts behave exacly like Chain Drives",
"create.ponder.chain_gearshift.text_2": "UNLOCALIZED: When Powered, the speed transmitted to other Chain Drives in the row is doubled",
"create.ponder.chain_gearshift.text_3": "UNLOCALIZED: Whenever the Powered Gearshift is not at the source, its speed will be halved instead",
"create.ponder.chain_gearshift.text_4": "UNLOCALIZED: In both cases, Chain Drives in the row always run at 2x the speed of the Powered Gearshift",
"create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2",
"create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM",
"create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes",
"create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories",
"create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created",
"create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal",
"create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered",
"create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor",
"create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
"create.ponder.chain_drive.text_3": "UNLOCALIZED: Any part of the row can be rotated by 90 degrees",
"create.ponder.chain_gearshift.header": "UNLOCALIZED: Controlling rotational speed with Chain Gearshifts",
"create.ponder.chain_gearshift.text_1": "UNLOCALIZED: Unpowered Chain Gearshifts behave exactly like Chain Drives",
"create.ponder.chain_gearshift.text_2": "UNLOCALIZED: When Powered, the speed transmitted to other Chain Drives in the row is doubled",
"create.ponder.chain_gearshift.text_3": "UNLOCALIZED: Whenever the Powered Gearshift is not at the source, its speed will be halved instead",
"create.ponder.chain_gearshift.text_4": "UNLOCALIZED: In both cases, Chain Drives in the row always run at 2x the speed of the Powered Gearshift",
"create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2",
"create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM",
"create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes",
"create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories",
"create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created",
"create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal",
"create.ponder.chute_upward.header": "UNLOCALIZED: Transporting Items upward via Chutes",
"create.ponder.chute_upward.text_1": "UNLOCALIZED: Using Encased Fans at the top or bottom, a Chute can move items upward",
@ -2119,4 +2121,4 @@
"_": "Thank you for translating Create!"
}
}

View file

@ -1,15 +1,13 @@
{
"_": "Missing Localizations: 1205",
"_": "->------------------------] Game Elements [------------------------<-",
"block.create.acacia_window": "Fenêtre en acacia",
"block.create.acacia_window_pane": "Vitre en acacia",
"block.create.adjustable_chain_gearshift": "UNLOCALIZED: Adjustable Chain Gearshift",
"block.create.adjustable_crate": "Caisse ajustable",
"block.create.adjustable_pulse_repeater": "Répéteur d'impulsions réglable",
"block.create.adjustable_repeater": "Répéteur réglable",
"block.create.analog_lever": "Levier analogique",
"_": "Missing Localizations: 1220",
"_": "->------------------------] Game Elements [------------------------<-",
"block.create.acacia_window": "Fenêtre en acacia",
"block.create.acacia_window_pane": "Vitre en acacia",
"block.create.adjustable_chain_gearshift": "UNLOCALIZED: Adjustable Chain Gearshift",
"block.create.adjustable_crate": "Caisse ajustable",
"block.create.adjustable_pulse_repeater": "Répéteur d'impulsions réglable",
"block.create.adjustable_repeater": "Répéteur réglable",
"block.create.analog_lever": "Levier analogique",
"block.create.andesite_belt_funnel": "Entonnoir en andésite pour tapis roulant",
"block.create.andesite_bricks": "Briques d'andésite",
"block.create.andesite_bricks_slab": "Dalle en briques d'andésite",
@ -404,26 +402,24 @@
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector",
"block.create.white_sail": "UNLOCALIZED: White Sail",
"block.create.white_seat": "UNLOCALIZED: White Seat",
"block.create.white_valve_handle": "UNLOCALIZED: White Valve Handle",
"block.create.windmill_bearing": "UNLOCALIZED: Windmill Bearing",
"block.create.wooden_bracket": "UNLOCALIZED: Wooden Bracket",
"block.create.yellow_sail": "UNLOCALIZED: Yellow Sail",
"block.create.yellow_seat": "UNLOCALIZED: Yellow Seat",
"block.create.yellow_valve_handle": "UNLOCALIZED: Yellow Valve Handle",
"block.create.zinc_block": "Bloc de zinc",
"block.create.zinc_ore": "Minerai de zinc",
"entity.create.contraption": "Engin",
"entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption",
"entity.create.seat": "Siège",
"entity.create.stationary_contraption": "Engin stationnaire",
"entity.create.super_glue": "Colle extra-forte",
"fluid.create.milk": "Lait",
"fluid.create.potion": "Potion",
"fluid.create.tea": "Thé du constructeur",
"item.create.andesite_alloy": "Alliage d'andésite",
"block.create.white_valve_handle": "UNLOCALIZED: White Valve Handle",
"block.create.windmill_bearing": "UNLOCALIZED: Windmill Bearing",
"block.create.wooden_bracket": "UNLOCALIZED: Wooden Bracket",
"block.create.yellow_sail": "UNLOCALIZED: Yellow Sail",
"block.create.yellow_seat": "UNLOCALIZED: Yellow Seat",
"block.create.yellow_valve_handle": "UNLOCALIZED: Yellow Valve Handle",
"block.create.zinc_block": "Bloc de zinc",
"block.create.zinc_ore": "Minerai de zinc",
"entity.create.contraption": "Engin",
"entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption",
"entity.create.seat": "Siège",
"entity.create.stationary_contraption": "Engin stationnaire",
"entity.create.super_glue": "Colle extra-forte",
"fluid.create.milk": "Lait",
"fluid.create.potion": "Potion",
"fluid.create.tea": "Thé du constructeur",
"item.create.andesite_alloy": "Alliage d'andésite",
"item.create.attribute_filter": "Filtre d'attribut",
"item.create.bar_of_chocolate": "Barre de chocolat",
"item.create.belt_connector": "Tapis roulant",
@ -434,26 +430,27 @@
"item.create.brass_nugget": "Pépite de laiton",
"item.create.brass_sheet": "Plaques de laiton",
"item.create.builders_tea": "Thé du constructeur",
"item.create.chest_minecart_contraption": "Engin de wagonnet avec coffre",
"item.create.chocolate_bucket": "Seau de chocolat",
"item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries",
"item.create.chromatic_compound": "Composé chromatique",
"item.create.cinder_flour": "Farine de braise",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "Lingot de cuivre",
"item.create.copper_nugget": "Pépite de cuivre",
"item.create.copper_sheet": "Plaques de cuivre",
"item.create.crafter_slot_cover": "Couvercle",
"item.create.crushed_aluminum_ore": "Aluminium concassé",
"item.create.crushed_brass": "Laiton concassé",
"item.create.crushed_copper_ore": "Cuivre concassé",
"item.create.crushed_gold_ore": "Or concassé",
"item.create.crushed_iron_ore": "Fer concassé",
"item.create.crushed_lead_ore": "Plomb concassé",
"item.create.crushed_nickel_ore": "Nickel concassé",
"item.create.crushed_osmium_ore": "Osmium concassé",
"item.create.crushed_platinum_ore": "Platinium concassé",
"item.create.crushed_quicksilver_ore": "Vif-argent concassé",
"item.create.chest_minecart_contraption": "Engin de wagonnet avec coffre",
"item.create.chocolate_bucket": "Seau de chocolat",
"item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries",
"item.create.chromatic_compound": "Composé chromatique",
"item.create.cinder_flour": "Farine de braise",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "Lingot de cuivre",
"item.create.copper_nugget": "Pépite de cuivre",
"item.create.copper_sheet": "Plaques de cuivre",
"item.create.crafter_slot_cover": "Couvercle",
"item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"item.create.crushed_aluminum_ore": "Aluminium concassé",
"item.create.crushed_brass": "Laiton concassé",
"item.create.crushed_copper_ore": "Cuivre concassé",
"item.create.crushed_gold_ore": "Or concassé",
"item.create.crushed_iron_ore": "Fer concassé",
"item.create.crushed_lead_ore": "Plomb concassé",
"item.create.crushed_nickel_ore": "Nickel concassé",
"item.create.crushed_osmium_ore": "Osmium concassé",
"item.create.crushed_platinum_ore": "Platinium concassé",
"item.create.crushed_quicksilver_ore": "Vif-argent concassé",
"item.create.crushed_silver_ore": "Argent concassé",
"item.create.crushed_tin_ore": "Etain concassé",
"item.create.crushed_uranium_ore": "Uranium concassé",
@ -662,26 +659,29 @@
"itemGroup.create.base": "Create",
"itemGroup.create.palettes": "Create Palettes",
"death.attack.create.crush": "%1$s a été concassé.e",
"death.attack.create.fan_fire": "%1$s a été brûlé à mort par l'air chaud",
"death.attack.create.fan_lava": "%1$s a été brûlé à mort par un ventilateur de lave",
"death.attack.create.mechanical_drill": "%1$s a été empalé par une perceuse mécanique",
"death.attack.create.mechanical_saw": "%1$s a été coupé en deux par une scie mécanique",
"death.attack.create.cuckoo_clock_explosion": "%1$s a été explosé par un coucou trafiquée",
"create.block.deployer.damage_source_name": "un déployeur voyou",
"create.block.cart_assembler.invalid": "UNLOCALIZED: Place your Cart Assembler on a rail block",
"create.recipe.crushing": "Ecrasement",
"create.recipe.milling": "Mouture",
"create.recipe.fan_washing": "Lavage",
"create.recipe.fan_washing.fan": "Ventilateur derrière de l'eau",
"create.recipe.fan_smoking": "Fumage",
"create.recipe.fan_smoking.fan": "Ventilateur derrière du feu",
"create.recipe.fan_blasting": "Fonte",
"create.recipe.fan_blasting.fan": "Ventilateur derrière de la lave",
"create.recipe.pressing": "Pressage",
"death.attack.create.crush": "%1$s a été concassé.e",
"death.attack.create.fan_fire": "%1$s a été brûlé à mort par l'air chaud",
"death.attack.create.fan_lava": "%1$s a été brûlé à mort par un ventilateur de lave",
"death.attack.create.mechanical_drill": "%1$s a été empalé par une perceuse mécanique",
"death.attack.create.mechanical_saw": "%1$s a été coupé en deux par une scie mécanique",
"death.attack.create.cuckoo_clock_explosion": "%1$s a été explosé par un coucou trafiquée",
"create.block.deployer.damage_source_name": "un déployeur voyou",
"create.block.cart_assembler.invalid": "UNLOCALIZED: Place your Cart Assembler on a rail block",
"create.menu.return": "UNLOCALIZED: Return to Menu",
"create.menu.configure": "UNLOCALIZED: Configure...",
"create.menu.getting_started": "UNLOCALIZED: Getting Started",
"create.menu.project_page": "UNLOCALIZED: Project Page",
"create.menu.report_bugs": "UNLOCALIZED: Report Issues",
"create.menu.support": "UNLOCALIZED: Support Us",
"create.recipe.crushing": "Ecrasement",
"create.recipe.milling": "Mouture",
"create.recipe.fan_washing": "Lavage",
"create.recipe.fan_washing.fan": "Ventilateur derrière de l'eau",
"create.recipe.fan_smoking": "Fumage",
"create.recipe.fan_smoking.fan": "Ventilateur derrière du feu",
"create.recipe.fan_blasting": "Fonte",
"create.recipe.fan_blasting.fan": "Ventilateur derrière de la lave",
"create.recipe.pressing": "Pressage",
"create.recipe.mixing": "Mixage",
"create.recipe.deploying": "UNLOCALIZED: Deploying",
"create.recipe.automatic_shapeless": "UNLOCALIZED: Automated Shapeless Crafting",
@ -1102,24 +1102,29 @@
"create.tooltip.chute.no_fans_attached": "UNLOCALIZED: No attached fans",
"create.tooltip.chute.fans_push_up": "UNLOCALIZED: Fans push from Below",
"create.tooltip.chute.fans_push_down": "UNLOCALIZED: Fans push from Above",
"create.tooltip.chute.fans_pull_up": "UNLOCALIZED: Fans pull from Above",
"create.tooltip.chute.fans_pull_down": "UNLOCALIZED: Fans pull from Below",
"create.tooltip.chute.contains": "UNLOCALIZED: Contains: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.hint.hose_pulley.title": "UNLOCALIZED: Bottomless Supply",
"create.hint.hose_pulley": "UNLOCALIZED: The targeted body of fluid is considered infinite.",
"create.hint.mechanical_arm_no_targets.title": "UNLOCALIZED: No Targets",
"create.hint.mechanical_arm_no_targets": "UNLOCALIZED: It appears this _Mechanical_ _Arm_ has not been assigned any _targets._ Select belts, depots, funnels and other blocks by _right-clicking_ them while _holding_ the _Mechanical_ _Arm_ in your _hand_.",
"create.hint.empty_bearing.title": "UNLOCALIZED: Update Bearing",
"create.hint.empty_bearing": "UNLOCALIZED: _Right-click_ the bearing with an _empty_ _hand_ to _attach_ the structure you just built in front of it.",
"create.hint.full_deployer.title": "UNLOCALIZED: Deployer Item Overflow",
"create.hint.full_deployer": "UNLOCALIZED: It appears this _Deployer_ contains _excess_ _items_ that need to be _extracted._ Use a _hopper,_ _funnel_ or other means to free it from its overflow.",
"create.tooltip.chute.fans_pull_up": "UNLOCALIZED: Fans pull from Above",
"create.tooltip.chute.fans_pull_down": "UNLOCALIZED: Fans pull from Below",
"create.tooltip.chute.contains": "UNLOCALIZED: Contains: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.crafting_blueprint.crafting_slot": "UNLOCALIZED: Ingredient Slot",
"create.crafting_blueprint.filter_items_viable": "UNLOCALIZED: Advanced filter items are viable",
"create.crafting_blueprint.display_slot": "UNLOCALIZED: Display Slot",
"create.crafting_blueprint.inferred": "UNLOCALIZED: Inferred from recipe",
"create.crafting_blueprint.manually_assigned": "UNLOCALIZED: Manually assigned",
"create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot",
"create.crafting_blueprint.optional": "UNLOCALIZED: Optional",
"create.hint.hose_pulley.title": "UNLOCALIZED: Bottomless Supply",
"create.hint.hose_pulley": "UNLOCALIZED: The targeted body of fluid is considered infinite.",
"create.hint.mechanical_arm_no_targets.title": "UNLOCALIZED: No Targets",
"create.hint.mechanical_arm_no_targets": "UNLOCALIZED: It appears this _Mechanical_ _Arm_ has not been assigned any _targets._ Select belts, depots, funnels and other blocks by _right-clicking_ them while _holding_ the _Mechanical_ _Arm_ in your _hand_.",
"create.hint.empty_bearing.title": "UNLOCALIZED: Update Bearing",
"create.hint.empty_bearing": "UNLOCALIZED: _Right-click_ the bearing with an _empty_ _hand_ to _attach_ the structure you just built in front of it.",
"create.hint.full_deployer.title": "UNLOCALIZED: Deployer Item Overflow",
"create.hint.full_deployer": "UNLOCALIZED: It appears this _Deployer_ contains _excess_ _items_ that need to be _extracted._ Use a _hopper,_ _funnel_ or other means to free it from its overflow.",
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
@ -1596,27 +1601,24 @@
"create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails",
"create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion",
"create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered",
"create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor",
"create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
"create.ponder.chain_drive.text_3": "UNLOCALIZED: Any part of the row can be rotated by 90 degrees",
"create.ponder.chain_gearshift.header": "UNLOCALIZED: Controlling rotational speed with Chain Gearshifts",
"create.ponder.chain_gearshift.text_1": "UNLOCALIZED: Unpowered Chain Gearshifts behave exacly like Chain Drives",
"create.ponder.chain_gearshift.text_2": "UNLOCALIZED: When Powered, the speed transmitted to other Chain Drives in the row is doubled",
"create.ponder.chain_gearshift.text_3": "UNLOCALIZED: Whenever the Powered Gearshift is not at the source, its speed will be halved instead",
"create.ponder.chain_gearshift.text_4": "UNLOCALIZED: In both cases, Chain Drives in the row always run at 2x the speed of the Powered Gearshift",
"create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2",
"create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM",
"create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes",
"create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories",
"create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created",
"create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal",
"create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered",
"create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor",
"create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
"create.ponder.chain_drive.text_3": "UNLOCALIZED: Any part of the row can be rotated by 90 degrees",
"create.ponder.chain_gearshift.header": "UNLOCALIZED: Controlling rotational speed with Chain Gearshifts",
"create.ponder.chain_gearshift.text_1": "UNLOCALIZED: Unpowered Chain Gearshifts behave exactly like Chain Drives",
"create.ponder.chain_gearshift.text_2": "UNLOCALIZED: When Powered, the speed transmitted to other Chain Drives in the row is doubled",
"create.ponder.chain_gearshift.text_3": "UNLOCALIZED: Whenever the Powered Gearshift is not at the source, its speed will be halved instead",
"create.ponder.chain_gearshift.text_4": "UNLOCALIZED: In both cases, Chain Drives in the row always run at 2x the speed of the Powered Gearshift",
"create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2",
"create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM",
"create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes",
"create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories",
"create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created",
"create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal",
"create.ponder.chute_upward.header": "UNLOCALIZED: Transporting Items upward via Chutes",
"create.ponder.chute_upward.text_1": "UNLOCALIZED: Using Encased Fans at the top or bottom, a Chute can move items upward",
@ -2119,4 +2121,4 @@
"_": "Thank you for translating Create!"
}
}

View file

@ -1,15 +1,13 @@
{
"_": "Missing Localizations: 671",
"_": "->------------------------] Game Elements [------------------------<-",
"block.create.acacia_window": "Finestra di acacia",
"block.create.acacia_window_pane": "Pannello di finestra di acacia",
"block.create.adjustable_chain_gearshift": "Cambio a catena regolabile",
"block.create.adjustable_crate": "Baule regolabile",
"block.create.adjustable_pulse_repeater": "Ripetitore di impulsi regolabile",
"block.create.adjustable_repeater": "Ripetitore regolabile",
"block.create.analog_lever": "Leva analogica",
"_": "Missing Localizations: 686",
"_": "->------------------------] Game Elements [------------------------<-",
"block.create.acacia_window": "Finestra di acacia",
"block.create.acacia_window_pane": "Pannello di finestra di acacia",
"block.create.adjustable_chain_gearshift": "Cambio a catena regolabile",
"block.create.adjustable_crate": "Baule regolabile",
"block.create.adjustable_pulse_repeater": "Ripetitore di impulsi regolabile",
"block.create.adjustable_repeater": "Ripetitore regolabile",
"block.create.analog_lever": "Leva analogica",
"block.create.andesite_belt_funnel": "Imbuto per nastro di andesite",
"block.create.andesite_bricks": "Mattoni di andesite",
"block.create.andesite_bricks_slab": "Lastra di mattoni di andesite",
@ -404,26 +402,24 @@
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector",
"block.create.white_sail": "Vela bianca",
"block.create.white_seat": "Sedile bianco",
"block.create.white_valve_handle": "Maniglia per valvola bianca",
"block.create.windmill_bearing": "Supporto per mulino a vento",
"block.create.wooden_bracket": "Supporto di legno",
"block.create.yellow_sail": "Vela gialla",
"block.create.yellow_seat": "Sedile giallo",
"block.create.yellow_valve_handle": "Maniglia per valvola gialla",
"block.create.zinc_block": "Blocco di zinco",
"block.create.zinc_ore": "Zinco grezzo",
"entity.create.contraption": "Contrazione",
"entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption",
"entity.create.seat": "Sedile",
"entity.create.stationary_contraption": "Contrazione stazionaria",
"entity.create.super_glue": "Super colla",
"fluid.create.milk": "Latte",
"fluid.create.potion": "Pozione",
"fluid.create.tea": "Tè del costruttore",
"item.create.andesite_alloy": "Lega di andesite",
"block.create.white_valve_handle": "Maniglia per valvola bianca",
"block.create.windmill_bearing": "Supporto per mulino a vento",
"block.create.wooden_bracket": "Supporto di legno",
"block.create.yellow_sail": "Vela gialla",
"block.create.yellow_seat": "Sedile giallo",
"block.create.yellow_valve_handle": "Maniglia per valvola gialla",
"block.create.zinc_block": "Blocco di zinco",
"block.create.zinc_ore": "Zinco grezzo",
"entity.create.contraption": "Contrazione",
"entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption",
"entity.create.seat": "Sedile",
"entity.create.stationary_contraption": "Contrazione stazionaria",
"entity.create.super_glue": "Super colla",
"fluid.create.milk": "Latte",
"fluid.create.potion": "Pozione",
"fluid.create.tea": "Tè del costruttore",
"item.create.andesite_alloy": "Lega di andesite",
"item.create.attribute_filter": "Filtro attributi",
"item.create.bar_of_chocolate": "Barretta di cioccolato",
"item.create.belt_connector": "Nastro meccanico",
@ -434,26 +430,27 @@
"item.create.brass_nugget": "Pepita di ottone",
"item.create.brass_sheet": "Lamiera di ottone",
"item.create.builders_tea": "Tè del costruttore",
"item.create.chest_minecart_contraption": "Contrazione per carrello da miniera con baule",
"item.create.chocolate_bucket": "Secchio di cioccolata",
"item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries",
"item.create.chromatic_compound": "Composto cromatico",
"item.create.cinder_flour": "Cenere farinosa",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "Lingotto di rame",
"item.create.copper_nugget": "Pepita di rame",
"item.create.copper_sheet": "Lamiera di rame",
"item.create.crafter_slot_cover": "Rivestimento per slot da costruzione",
"item.create.crushed_aluminum_ore": "Alluminio grezzo frantumato",
"item.create.crushed_brass": "Ottone frantumato",
"item.create.crushed_copper_ore": "Rame grezzo frantumato",
"item.create.crushed_gold_ore": "Oro grezzo frantumato",
"item.create.crushed_iron_ore": "Ferro grezzo frantumato",
"item.create.crushed_lead_ore": "Piombo grezzo frantumato",
"item.create.crushed_nickel_ore": "Nichel grezzo frantumato",
"item.create.crushed_osmium_ore": "Osmio grezzo frantumato",
"item.create.crushed_platinum_ore": "Platino grezzo frantumato",
"item.create.crushed_quicksilver_ore": "Mercurio grezzo frantumato",
"item.create.chest_minecart_contraption": "Contrazione per carrello da miniera con baule",
"item.create.chocolate_bucket": "Secchio di cioccolata",
"item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries",
"item.create.chromatic_compound": "Composto cromatico",
"item.create.cinder_flour": "Cenere farinosa",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "Lingotto di rame",
"item.create.copper_nugget": "Pepita di rame",
"item.create.copper_sheet": "Lamiera di rame",
"item.create.crafter_slot_cover": "Rivestimento per slot da costruzione",
"item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"item.create.crushed_aluminum_ore": "Alluminio grezzo frantumato",
"item.create.crushed_brass": "Ottone frantumato",
"item.create.crushed_copper_ore": "Rame grezzo frantumato",
"item.create.crushed_gold_ore": "Oro grezzo frantumato",
"item.create.crushed_iron_ore": "Ferro grezzo frantumato",
"item.create.crushed_lead_ore": "Piombo grezzo frantumato",
"item.create.crushed_nickel_ore": "Nichel grezzo frantumato",
"item.create.crushed_osmium_ore": "Osmio grezzo frantumato",
"item.create.crushed_platinum_ore": "Platino grezzo frantumato",
"item.create.crushed_quicksilver_ore": "Mercurio grezzo frantumato",
"item.create.crushed_silver_ore": "Argento grezzo frantumato",
"item.create.crushed_tin_ore": "Stagno grezzo frantumato",
"item.create.crushed_uranium_ore": "Uranio grezzo frantumato",
@ -662,26 +659,29 @@
"itemGroup.create.base": "Create",
"itemGroup.create.palettes": "Create: Blocchi",
"death.attack.create.crush": "%1$s è stato frantumato",
"death.attack.create.fan_fire": "%1$s è stato bruciato dall'aria calda",
"death.attack.create.fan_lava": "%1$s è stato bruciato dal ventilatore di lava",
"death.attack.create.mechanical_drill": "%1$s è stato trafitto dal trapano meccanico",
"death.attack.create.mechanical_saw": "%1$s è stato tagliato a metà dalla sega meccanica",
"death.attack.create.cuckoo_clock_explosion": "%1$s è saltato in aria da un orologio a cucù manomesso",
"create.block.deployer.damage_source_name": "un disadattato",
"create.block.cart_assembler.invalid": "Piazza il tuo assemblatore di carrelli da miniera su un binario",
"create.recipe.crushing": "Frantumazione",
"create.recipe.milling": "Macinatura",
"create.recipe.fan_washing": "Lavaggio volumetrico",
"create.recipe.fan_washing.fan": "Ventilatore dietro l'acqua corrente",
"create.recipe.fan_smoking": "Fumo volumetrico",
"create.recipe.fan_smoking.fan": "Ventilatore dietro il fuoco",
"create.recipe.fan_blasting": "Esplosione volumetrica",
"create.recipe.fan_blasting.fan": "Ventilatore dietro la lava",
"create.recipe.pressing": "Pressatura",
"death.attack.create.crush": "%1$s è stato frantumato",
"death.attack.create.fan_fire": "%1$s è stato bruciato dall'aria calda",
"death.attack.create.fan_lava": "%1$s è stato bruciato dal ventilatore di lava",
"death.attack.create.mechanical_drill": "%1$s è stato trafitto dal trapano meccanico",
"death.attack.create.mechanical_saw": "%1$s è stato tagliato a metà dalla sega meccanica",
"death.attack.create.cuckoo_clock_explosion": "%1$s è saltato in aria da un orologio a cucù manomesso",
"create.block.deployer.damage_source_name": "un disadattato",
"create.block.cart_assembler.invalid": "Piazza il tuo assemblatore di carrelli da miniera su un binario",
"create.menu.return": "UNLOCALIZED: Return to Menu",
"create.menu.configure": "UNLOCALIZED: Configure...",
"create.menu.getting_started": "UNLOCALIZED: Getting Started",
"create.menu.project_page": "UNLOCALIZED: Project Page",
"create.menu.report_bugs": "UNLOCALIZED: Report Issues",
"create.menu.support": "UNLOCALIZED: Support Us",
"create.recipe.crushing": "Frantumazione",
"create.recipe.milling": "Macinatura",
"create.recipe.fan_washing": "Lavaggio volumetrico",
"create.recipe.fan_washing.fan": "Ventilatore dietro l'acqua corrente",
"create.recipe.fan_smoking": "Fumo volumetrico",
"create.recipe.fan_smoking.fan": "Ventilatore dietro il fuoco",
"create.recipe.fan_blasting": "Esplosione volumetrica",
"create.recipe.fan_blasting.fan": "Ventilatore dietro la lava",
"create.recipe.pressing": "Pressatura",
"create.recipe.mixing": "Mescolamento",
"create.recipe.deploying": "UNLOCALIZED: Deploying",
"create.recipe.automatic_shapeless": "Costruzione informe automatizzata",
@ -1102,24 +1102,29 @@
"create.tooltip.chute.no_fans_attached": "Nessun ventilatore attaccato",
"create.tooltip.chute.fans_push_up": "I ventilatori spingono da sotto",
"create.tooltip.chute.fans_push_down": "I ventilatori spingono da sopra",
"create.tooltip.chute.fans_pull_up": "I ventilatori tirano da sopra",
"create.tooltip.chute.fans_pull_down": "I ventilatori tirano da sotto",
"create.tooltip.chute.contains": "Contiene: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.hint.hose_pulley.title": "Buco senza fondo",
"create.hint.hose_pulley": "Il corpo fluido selezionato è considerato infinito.",
"create.hint.mechanical_arm_no_targets.title": "Nessun bersaglio",
"create.hint.mechanical_arm_no_targets": "Sembra che questo _braccio_ _meccanico_ non sia stato assegnato a nessun _bersaglio_. Seleziona nastri, depositi, imbuti e altri blocchi _cliccandoli_ _col_ _destro_ e _tenendo_ _in_ _mano_ il _braccio_ _meccanico_.",
"create.hint.empty_bearing.title": "Aggiorna il supporto",
"create.hint.empty_bearing": "_Clicca_ _col_ _destro_ il supporto con una _mano_ _vuota_ per _attaccarci_ la struttura che ci hai appena costruito davanti.",
"create.hint.full_deployer.title": "Overflow di oggetti dell'installatore",
"create.hint.full_deployer": "Sembra che questo _installatore_ contenga _oggetti_ _eccessivi_ che necessitano di essere _estratti_. Usa una _tramoggia_, un _imbuto_ o altro per liberarlo dall'overflow.",
"create.tooltip.chute.fans_pull_up": "I ventilatori tirano da sopra",
"create.tooltip.chute.fans_pull_down": "I ventilatori tirano da sotto",
"create.tooltip.chute.contains": "Contiene: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.crafting_blueprint.crafting_slot": "UNLOCALIZED: Ingredient Slot",
"create.crafting_blueprint.filter_items_viable": "UNLOCALIZED: Advanced filter items are viable",
"create.crafting_blueprint.display_slot": "UNLOCALIZED: Display Slot",
"create.crafting_blueprint.inferred": "UNLOCALIZED: Inferred from recipe",
"create.crafting_blueprint.manually_assigned": "UNLOCALIZED: Manually assigned",
"create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot",
"create.crafting_blueprint.optional": "UNLOCALIZED: Optional",
"create.hint.hose_pulley.title": "Buco senza fondo",
"create.hint.hose_pulley": "Il corpo fluido selezionato è considerato infinito.",
"create.hint.mechanical_arm_no_targets.title": "Nessun bersaglio",
"create.hint.mechanical_arm_no_targets": "Sembra che questo _braccio_ _meccanico_ non sia stato assegnato a nessun _bersaglio_. Seleziona nastri, depositi, imbuti e altri blocchi _cliccandoli_ _col_ _destro_ e _tenendo_ _in_ _mano_ il _braccio_ _meccanico_.",
"create.hint.empty_bearing.title": "Aggiorna il supporto",
"create.hint.empty_bearing": "_Clicca_ _col_ _destro_ il supporto con una _mano_ _vuota_ per _attaccarci_ la struttura che ci hai appena costruito davanti.",
"create.hint.full_deployer.title": "Overflow di oggetti dell'installatore",
"create.hint.full_deployer": "Sembra che questo _installatore_ contenga _oggetti_ _eccessivi_ che necessitano di essere _estratti_. Usa una _tramoggia_, un _imbuto_ o altro per liberarlo dall'overflow.",
"create.gui.config.overlay1": "Ciao :)",
"create.gui.config.overlay2": "Questo overlay è di esempio",
@ -1596,27 +1601,24 @@
"create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails",
"create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion",
"create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered",
"create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor",
"create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
"create.ponder.chain_drive.text_3": "UNLOCALIZED: Any part of the row can be rotated by 90 degrees",
"create.ponder.chain_gearshift.header": "UNLOCALIZED: Controlling rotational speed with Chain Gearshifts",
"create.ponder.chain_gearshift.text_1": "UNLOCALIZED: Unpowered Chain Gearshifts behave exacly like Chain Drives",
"create.ponder.chain_gearshift.text_2": "UNLOCALIZED: When Powered, the speed transmitted to other Chain Drives in the row is doubled",
"create.ponder.chain_gearshift.text_3": "UNLOCALIZED: Whenever the Powered Gearshift is not at the source, its speed will be halved instead",
"create.ponder.chain_gearshift.text_4": "UNLOCALIZED: In both cases, Chain Drives in the row always run at 2x the speed of the Powered Gearshift",
"create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2",
"create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM",
"create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes",
"create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories",
"create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created",
"create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal",
"create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered",
"create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor",
"create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
"create.ponder.chain_drive.text_3": "UNLOCALIZED: Any part of the row can be rotated by 90 degrees",
"create.ponder.chain_gearshift.header": "UNLOCALIZED: Controlling rotational speed with Chain Gearshifts",
"create.ponder.chain_gearshift.text_1": "UNLOCALIZED: Unpowered Chain Gearshifts behave exactly like Chain Drives",
"create.ponder.chain_gearshift.text_2": "UNLOCALIZED: When Powered, the speed transmitted to other Chain Drives in the row is doubled",
"create.ponder.chain_gearshift.text_3": "UNLOCALIZED: Whenever the Powered Gearshift is not at the source, its speed will be halved instead",
"create.ponder.chain_gearshift.text_4": "UNLOCALIZED: In both cases, Chain Drives in the row always run at 2x the speed of the Powered Gearshift",
"create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2",
"create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM",
"create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes",
"create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories",
"create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created",
"create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal",
"create.ponder.chute_upward.header": "UNLOCALIZED: Transporting Items upward via Chutes",
"create.ponder.chute_upward.text_1": "UNLOCALIZED: Using Encased Fans at the top or bottom, a Chute can move items upward",
@ -2119,4 +2121,4 @@
"_": "Thank you for translating Create!"
}
}

View file

@ -1,15 +1,13 @@
{
"_": "Missing Localizations: 35",
"_": "->------------------------] Game Elements [------------------------<-",
"block.create.acacia_window": "アカシアの窓",
"block.create.acacia_window_pane": "アカシアの窓パネル",
"block.create.adjustable_chain_gearshift": "可変チェーンギアシフト",
"block.create.adjustable_crate": "可変クレート",
"block.create.adjustable_pulse_repeater": "可変パルスリピーター",
"block.create.adjustable_repeater": "可変リピーター",
"block.create.analog_lever": "アナログレバー",
"_": "Missing Localizations: 50",
"_": "->------------------------] Game Elements [------------------------<-",
"block.create.acacia_window": "アカシアの窓",
"block.create.acacia_window_pane": "アカシアの窓パネル",
"block.create.adjustable_chain_gearshift": "可変チェーンギアシフト",
"block.create.adjustable_crate": "可変クレート",
"block.create.adjustable_pulse_repeater": "可変パルスリピーター",
"block.create.adjustable_repeater": "可変リピーター",
"block.create.analog_lever": "アナログレバー",
"block.create.andesite_belt_funnel": "安山岩のベルトファンネル",
"block.create.andesite_bricks": "安山岩レンガ",
"block.create.andesite_bricks_slab": "安山岩レンガのハーフブロック",
@ -404,26 +402,24 @@
"block.create.weighted_ejector": "重量射出機",
"block.create.white_sail": "白色の帆",
"block.create.white_seat": "白色のシート",
"block.create.white_valve_handle": "白色のバルブハンドル",
"block.create.windmill_bearing": "風車ベアリング",
"block.create.wooden_bracket": "木製ブラケット",
"block.create.yellow_sail": "黄色の帆",
"block.create.yellow_seat": "黄色のシート",
"block.create.yellow_valve_handle": "黄色のバルブハンドル",
"block.create.zinc_block": "亜鉛ブロック",
"block.create.zinc_ore": "亜鉛鉱石",
"entity.create.contraption": "からくり",
"entity.create.gantry_contraption": "ガントリーからくり",
"entity.create.seat": "シート",
"entity.create.stationary_contraption": "付設からくり",
"entity.create.super_glue": "超粘着剤",
"fluid.create.milk": "牛乳",
"fluid.create.potion": "ポーション",
"fluid.create.tea": "建築家のお茶",
"item.create.andesite_alloy": "安山岩合金",
"block.create.white_valve_handle": "白色のバルブハンドル",
"block.create.windmill_bearing": "風車ベアリング",
"block.create.wooden_bracket": "木製ブラケット",
"block.create.yellow_sail": "黄色の帆",
"block.create.yellow_seat": "黄色のシート",
"block.create.yellow_valve_handle": "黄色のバルブハンドル",
"block.create.zinc_block": "亜鉛ブロック",
"block.create.zinc_ore": "亜鉛鉱石",
"entity.create.contraption": "からくり",
"entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"entity.create.gantry_contraption": "ガントリーからくり",
"entity.create.seat": "シート",
"entity.create.stationary_contraption": "付設からくり",
"entity.create.super_glue": "超粘着剤",
"fluid.create.milk": "牛乳",
"fluid.create.potion": "ポーション",
"fluid.create.tea": "建築家のお茶",
"item.create.andesite_alloy": "安山岩合金",
"item.create.attribute_filter": "属性フィルター",
"item.create.bar_of_chocolate": "チョコレートバー",
"item.create.belt_connector": "メカニカルベルト",
@ -434,26 +430,27 @@
"item.create.brass_nugget": "真鍮塊",
"item.create.brass_sheet": "真鍮シート",
"item.create.builders_tea": "建築家のお茶",
"item.create.chest_minecart_contraption": "からくりチェスト付きトロッコ",
"item.create.chocolate_bucket": "チョコレート入りバケツ",
"item.create.chocolate_glazed_berries": "チョコレートグレーズドベリー",
"item.create.chromatic_compound": "色彩の化合物",
"item.create.cinder_flour": "ネザーラックの粉",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "銅インゴット",
"item.create.copper_nugget": "銅塊",
"item.create.copper_sheet": "銅板",
"item.create.crafter_slot_cover": "クラフタースロットカバー",
"item.create.crushed_aluminum_ore": "砕いたアルミニウム鉱石",
"item.create.crushed_brass": "砕いた真鍮",
"item.create.crushed_copper_ore": "砕いた銅鉱石",
"item.create.crushed_gold_ore": "砕いた金鉱石",
"item.create.crushed_iron_ore": "砕いた鉄鉱石",
"item.create.crushed_lead_ore": "砕いた鉛鉱石",
"item.create.crushed_nickel_ore": "砕いたニッケル鉱石",
"item.create.crushed_osmium_ore": "砕いたオスミウム鉱石",
"item.create.crushed_platinum_ore": "砕いたプラチナ鉱石",
"item.create.crushed_quicksilver_ore": "砕いた水銀鉱石",
"item.create.chest_minecart_contraption": "からくりチェスト付きトロッコ",
"item.create.chocolate_bucket": "チョコレート入りバケツ",
"item.create.chocolate_glazed_berries": "チョコレートグレーズドベリー",
"item.create.chromatic_compound": "色彩の化合物",
"item.create.cinder_flour": "ネザーラックの粉",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "銅インゴット",
"item.create.copper_nugget": "銅塊",
"item.create.copper_sheet": "銅板",
"item.create.crafter_slot_cover": "クラフタースロットカバー",
"item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"item.create.crushed_aluminum_ore": "砕いたアルミニウム鉱石",
"item.create.crushed_brass": "砕いた真鍮",
"item.create.crushed_copper_ore": "砕いた銅鉱石",
"item.create.crushed_gold_ore": "砕いた金鉱石",
"item.create.crushed_iron_ore": "砕いた鉄鉱石",
"item.create.crushed_lead_ore": "砕いた鉛鉱石",
"item.create.crushed_nickel_ore": "砕いたニッケル鉱石",
"item.create.crushed_osmium_ore": "砕いたオスミウム鉱石",
"item.create.crushed_platinum_ore": "砕いたプラチナ鉱石",
"item.create.crushed_quicksilver_ore": "砕いた水銀鉱石",
"item.create.crushed_silver_ore": "砕いた銀鉱石",
"item.create.crushed_tin_ore": "砕いた錫鉱石",
"item.create.crushed_uranium_ore": "砕いたウラン鉱石",
@ -662,26 +659,29 @@
"itemGroup.create.base": "Create",
"itemGroup.create.palettes": "Create Palettes",
"death.attack.create.crush": "%1$s は破砕ホイールによって処理されました",
"death.attack.create.fan_fire": "%1$s は熱風で焼死した",
"death.attack.create.fan_lava": "%1$s は溶岩ファンによって焼死した",
"death.attack.create.mechanical_drill": "%1$s はメカニカルドリルに突き刺さった",
"death.attack.create.mechanical_saw": "%1$s はメカニカルソーで半分にカットされた",
"death.attack.create.cuckoo_clock_explosion": "%1$s は改ざんされた鳩時計に爆破された",
"create.block.deployer.damage_source_name": "悪いデプロイヤー",
"create.block.cart_assembler.invalid": "トロッコアセンブラはレールの上にのみ設置できます",
"create.recipe.crushing": "粉砕",
"create.recipe.milling": "製粉",
"create.recipe.fan_washing": "一括洗浄",
"create.recipe.fan_washing.fan": "水の奥のケース入りファン",
"create.recipe.fan_smoking": "一括燻製",
"create.recipe.fan_smoking.fan": "炎の奥のケース入りファン",
"create.recipe.fan_blasting": "一括精錬",
"create.recipe.fan_blasting.fan": "溶岩の奥のケース入りファン",
"create.recipe.pressing": "プレス",
"death.attack.create.crush": "%1$s は破砕ホイールによって処理されました",
"death.attack.create.fan_fire": "%1$s は熱風で焼死した",
"death.attack.create.fan_lava": "%1$s は溶岩ファンによって焼死した",
"death.attack.create.mechanical_drill": "%1$s はメカニカルドリルに突き刺さった",
"death.attack.create.mechanical_saw": "%1$s はメカニカルソーで半分にカットされた",
"death.attack.create.cuckoo_clock_explosion": "%1$s は改ざんされた鳩時計に爆破された",
"create.block.deployer.damage_source_name": "悪いデプロイヤー",
"create.block.cart_assembler.invalid": "トロッコアセンブラはレールの上にのみ設置できます",
"create.menu.return": "UNLOCALIZED: Return to Menu",
"create.menu.configure": "UNLOCALIZED: Configure...",
"create.menu.getting_started": "UNLOCALIZED: Getting Started",
"create.menu.project_page": "UNLOCALIZED: Project Page",
"create.menu.report_bugs": "UNLOCALIZED: Report Issues",
"create.menu.support": "UNLOCALIZED: Support Us",
"create.recipe.crushing": "粉砕",
"create.recipe.milling": "製粉",
"create.recipe.fan_washing": "一括洗浄",
"create.recipe.fan_washing.fan": "水の奥のケース入りファン",
"create.recipe.fan_smoking": "一括燻製",
"create.recipe.fan_smoking.fan": "炎の奥のケース入りファン",
"create.recipe.fan_blasting": "一括精錬",
"create.recipe.fan_blasting.fan": "溶岩の奥のケース入りファン",
"create.recipe.pressing": "プレス",
"create.recipe.mixing": "混合",
"create.recipe.deploying": "UNLOCALIZED: Deploying",
"create.recipe.automatic_shapeless": "自動不定形クラフト",
@ -1102,24 +1102,29 @@
"create.tooltip.chute.no_fans_attached": "ファンは接続されていません",
"create.tooltip.chute.fans_push_up": "下からファンが押しています",
"create.tooltip.chute.fans_push_down": "ファンが上から押しています",
"create.tooltip.chute.fans_pull_up": "ファンが上から吸い込んでいます",
"create.tooltip.chute.fans_pull_down": "ファンが下から吸い込んでいます",
"create.tooltip.chute.contains": "内容物: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.hint.hose_pulley.title": "底なし搬出",
"create.hint.hose_pulley": "対象となる液体は無限とみなされています。",
"create.hint.mechanical_arm_no_targets.title": "ターゲットが見つかりません",
"create.hint.mechanical_arm_no_targets": "どうやらこの_メカニカルアーム_には_ターゲット_が割り当てられていないようです。_メカニカルアーム_を_手_に持って_右クリック_して、ベルト、デポ、ファンネルなどのブロックを選択します。",
"create.hint.empty_bearing.title": "ベアリングの更新",
"create.hint.empty_bearing": "_素手_でベアリングを_右クリック_して、その前に先ほど作った構造物を_接続_します。",
"create.hint.full_deployer.title": "デプロイヤーのアイテムが溢れています",
"create.hint.full_deployer": "この_デプロイヤー_には、_搬出_する必要がある余分なアイテムが含まれています。_ ホッパー_や_漏斗_などの手段を利用して、溢れないようにしてください。",
"create.tooltip.chute.fans_pull_up": "ファンが上から吸い込んでいます",
"create.tooltip.chute.fans_pull_down": "ファンが下から吸い込んでいます",
"create.tooltip.chute.contains": "内容物: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.crafting_blueprint.crafting_slot": "UNLOCALIZED: Ingredient Slot",
"create.crafting_blueprint.filter_items_viable": "UNLOCALIZED: Advanced filter items are viable",
"create.crafting_blueprint.display_slot": "UNLOCALIZED: Display Slot",
"create.crafting_blueprint.inferred": "UNLOCALIZED: Inferred from recipe",
"create.crafting_blueprint.manually_assigned": "UNLOCALIZED: Manually assigned",
"create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot",
"create.crafting_blueprint.optional": "UNLOCALIZED: Optional",
"create.hint.hose_pulley.title": "底なし搬出",
"create.hint.hose_pulley": "対象となる液体は無限とみなされています。",
"create.hint.mechanical_arm_no_targets.title": "ターゲットが見つかりません",
"create.hint.mechanical_arm_no_targets": "どうやらこの_メカニカルアーム_には_ターゲット_が割り当てられていないようです。_メカニカルアーム_を_手_に持って_右クリック_して、ベルト、デポ、ファンネルなどのブロックを選択します。",
"create.hint.empty_bearing.title": "ベアリングの更新",
"create.hint.empty_bearing": "_素手_でベアリングを_右クリック_して、その前に先ほど作った構造物を_接続_します。",
"create.hint.full_deployer.title": "デプロイヤーのアイテムが溢れています",
"create.hint.full_deployer": "この_デプロイヤー_には、_搬出_する必要がある余分なアイテムが含まれています。_ ホッパー_や_漏斗_などの手段を利用して、溢れないようにしてください。",
"create.gui.config.overlay1": "やぁ(・∀・)",
"create.gui.config.overlay2": "これはオーバーレイのサンプルです",
@ -2119,4 +2124,4 @@
"_": "Thank you for translating Create!"
}
}

View file

@ -1,15 +1,13 @@
{
"_": "Missing Localizations: 724",
"_": "->------------------------] Game Elements [------------------------<-",
"block.create.acacia_window": "아카시아 유리창",
"block.create.acacia_window_pane": "아카시아나무 유리판 ",
"block.create.adjustable_chain_gearshift": "벨트 변속기",
"block.create.adjustable_crate": "가변 창고",
"block.create.adjustable_pulse_repeater": "가변 펄스 리피터",
"block.create.adjustable_repeater": "가변 리피터",
"block.create.analog_lever": "아날로그 레버",
"_": "Missing Localizations: 739",
"_": "->------------------------] Game Elements [------------------------<-",
"block.create.acacia_window": "아카시아 유리창",
"block.create.acacia_window_pane": "아카시아나무 유리판 ",
"block.create.adjustable_chain_gearshift": "벨트 변속기",
"block.create.adjustable_crate": "가변 창고",
"block.create.adjustable_pulse_repeater": "가변 펄스 리피터",
"block.create.adjustable_repeater": "가변 리피터",
"block.create.analog_lever": "아날로그 레버",
"block.create.andesite_belt_funnel": "안산암 깔때기",
"block.create.andesite_bricks": "안산암 벽돌",
"block.create.andesite_bricks_slab": "안산암 벽돌 반 블록",
@ -404,26 +402,24 @@
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector",
"block.create.white_sail": "하얀색 날개",
"block.create.white_seat": "하얀색 좌석",
"block.create.white_valve_handle": "하얀색 밸브 손잡이",
"block.create.windmill_bearing": "풍차 베어링",
"block.create.wooden_bracket": "나무 지지대",
"block.create.yellow_sail": "노란색 날개",
"block.create.yellow_seat": "노란색 좌석",
"block.create.yellow_valve_handle": "노란색 밸브 손잡이",
"block.create.zinc_block": "아연 블",
"block.create.zinc_ore": "아연 광석",
"entity.create.contraption": "장치",
"entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption",
"entity.create.seat": "좌석",
"entity.create.stationary_contraption": "고정된 장치",
"entity.create.super_glue": "강력 접착제",
"fluid.create.milk": "우유",
"fluid.create.potion": "포션",
"fluid.create.tea": "건축가의 차",
"item.create.andesite_alloy": "안산암 합금",
"block.create.white_valve_handle": "하얀색 밸브 손잡이",
"block.create.windmill_bearing": "풍차 베어링",
"block.create.wooden_bracket": "나무 지지대",
"block.create.yellow_sail": "노란색 날개",
"block.create.yellow_seat": "노란색 좌석",
"block.create.yellow_valve_handle": "노란색 밸브 손잡이",
"block.create.zinc_block": "아연 블",
"block.create.zinc_ore": "아연 광석",
"entity.create.contraption": "장치",
"entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption",
"entity.create.seat": "좌석",
"entity.create.stationary_contraption": "고정된 장치",
"entity.create.super_glue": "강력 접착제",
"fluid.create.milk": "우유",
"fluid.create.potion": "포션",
"fluid.create.tea": "건축가의 차",
"item.create.andesite_alloy": "안산암 합금",
"item.create.attribute_filter": "속성 필터 틀",
"item.create.bar_of_chocolate": "초콜릿 바",
"item.create.belt_connector": "기계식 벨트",
@ -434,26 +430,27 @@
"item.create.brass_nugget": "황동 조각",
"item.create.brass_sheet": "황동 판",
"item.create.builders_tea": "건축가의 차",
"item.create.chest_minecart_contraption": "상자가 실린 광산 수레 장치",
"item.create.chocolate_bucket": "초콜릿 양동이",
"item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries",
"item.create.chromatic_compound": "색채 혼합물",
"item.create.cinder_flour": "잿가루",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "구리 주괴",
"item.create.copper_nugget": "구리 조각",
"item.create.copper_sheet": "구리 판",
"item.create.crafter_slot_cover": "조합기 슬롯 덮개",
"item.create.crushed_aluminum_ore": "UNLOCALIZED: Crushed Aluminum Ore",
"item.create.crushed_brass": "분쇄된 황동",
"item.create.crushed_copper_ore": "분쇄된 구리 광석",
"item.create.crushed_gold_ore": "분쇄된 금 광석",
"item.create.crushed_iron_ore": "분쇄된 철 광석",
"item.create.crushed_lead_ore": "UNLOCALIZED: Crushed Lead Ore",
"item.create.crushed_nickel_ore": "UNLOCALIZED: Crushed Nickel Ore",
"item.create.crushed_osmium_ore": "UNLOCALIZED: Crushed Osmium Ore",
"item.create.crushed_platinum_ore": "UNLOCALIZED: Crushed Platinum Ore",
"item.create.crushed_quicksilver_ore": "UNLOCALIZED: Crushed Quicksilver Ore",
"item.create.chest_minecart_contraption": "상자가 실린 광산 수레 장치",
"item.create.chocolate_bucket": "초콜릿 양동이",
"item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries",
"item.create.chromatic_compound": "색채 혼합물",
"item.create.cinder_flour": "잿가루",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "구리 주괴",
"item.create.copper_nugget": "구리 조각",
"item.create.copper_sheet": "구리 판",
"item.create.crafter_slot_cover": "조합기 슬롯 덮개",
"item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"item.create.crushed_aluminum_ore": "UNLOCALIZED: Crushed Aluminum Ore",
"item.create.crushed_brass": "분쇄된 황동",
"item.create.crushed_copper_ore": "분쇄된 구리 광석",
"item.create.crushed_gold_ore": "분쇄된 금 광석",
"item.create.crushed_iron_ore": "분쇄된 철 광석",
"item.create.crushed_lead_ore": "UNLOCALIZED: Crushed Lead Ore",
"item.create.crushed_nickel_ore": "UNLOCALIZED: Crushed Nickel Ore",
"item.create.crushed_osmium_ore": "UNLOCALIZED: Crushed Osmium Ore",
"item.create.crushed_platinum_ore": "UNLOCALIZED: Crushed Platinum Ore",
"item.create.crushed_quicksilver_ore": "UNLOCALIZED: Crushed Quicksilver Ore",
"item.create.crushed_silver_ore": "UNLOCALIZED: Crushed Silver Ore",
"item.create.crushed_tin_ore": "UNLOCALIZED: Crushed Tin Ore",
"item.create.crushed_uranium_ore": "UNLOCALIZED: Crushed Uranium Ore",
@ -662,26 +659,29 @@
"itemGroup.create.base": "Create",
"itemGroup.create.palettes": "Create 팔레트",
"death.attack.create.crush": "%1$s이(가) 분쇄 휠에 의해 가공되었습니다",
"death.attack.create.fan_fire": "%1$s이(가) 뜨거운 바람에 의해 익어버렸습니다",
"death.attack.create.fan_lava": "%1$s이(가) 용암 바람으로 구워졌습니다",
"death.attack.create.mechanical_drill": "%1$s이(가) 드릴에 관통당했습니다",
"death.attack.create.mechanical_saw": "%1$s이(가) 톱날에 반으로 갈라져 죽었습니다",
"death.attack.create.cuckoo_clock_explosion": "%1$s이(가) 조작된 뻐꾸기 시계에 의해 폭파당했습니다",
"create.block.deployer.damage_source_name": "배포기",
"create.block.cart_assembler.invalid": "카트조립기를 레일 위에 설치하세요",
"create.recipe.crushing": "분쇄",
"create.recipe.milling": "맷돌질",
"create.recipe.fan_washing": "세척",
"create.recipe.fan_washing.fan": "물과 선풍기",
"create.recipe.fan_smoking": "훈연",
"create.recipe.fan_smoking.fan": "불과 선풍기",
"create.recipe.fan_blasting": "제련",
"create.recipe.fan_blasting.fan": "용암과 선풍기",
"create.recipe.pressing": "압착",
"death.attack.create.crush": "%1$s이(가) 분쇄 휠에 의해 가공되었습니다",
"death.attack.create.fan_fire": "%1$s이(가) 뜨거운 바람에 의해 익어버렸습니다",
"death.attack.create.fan_lava": "%1$s이(가) 용암 바람으로 구워졌습니다",
"death.attack.create.mechanical_drill": "%1$s이(가) 드릴에 관통당했습니다",
"death.attack.create.mechanical_saw": "%1$s이(가) 톱날에 반으로 갈라져 죽었습니다",
"death.attack.create.cuckoo_clock_explosion": "%1$s이(가) 조작된 뻐꾸기 시계에 의해 폭파당했습니다",
"create.block.deployer.damage_source_name": "배포기",
"create.block.cart_assembler.invalid": "카트조립기를 레일 위에 설치하세요",
"create.menu.return": "UNLOCALIZED: Return to Menu",
"create.menu.configure": "UNLOCALIZED: Configure...",
"create.menu.getting_started": "UNLOCALIZED: Getting Started",
"create.menu.project_page": "UNLOCALIZED: Project Page",
"create.menu.report_bugs": "UNLOCALIZED: Report Issues",
"create.menu.support": "UNLOCALIZED: Support Us",
"create.recipe.crushing": "분쇄",
"create.recipe.milling": "맷돌질",
"create.recipe.fan_washing": "세척",
"create.recipe.fan_washing.fan": "물과 선풍기",
"create.recipe.fan_smoking": "훈연",
"create.recipe.fan_smoking.fan": "불과 선풍기",
"create.recipe.fan_blasting": "제련",
"create.recipe.fan_blasting.fan": "용암과 선풍기",
"create.recipe.pressing": "압착",
"create.recipe.mixing": "혼합",
"create.recipe.deploying": "UNLOCALIZED: Deploying",
"create.recipe.automatic_shapeless": "무형 자동 조합",
@ -1102,24 +1102,29 @@
"create.tooltip.chute.no_fans_attached": "선풍기가 부착되지 않음",
"create.tooltip.chute.fans_push_up": "선풍기가 아래에서 밈",
"create.tooltip.chute.fans_push_down": "선풍기가 위에서 밈",
"create.tooltip.chute.fans_pull_up": "선풍기가 위에서 당김",
"create.tooltip.chute.fans_pull_down": "선풍기가 아래에서 당김",
"create.tooltip.chute.contains": "UNLOCALIZED: Contains: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.hint.hose_pulley.title": "UNLOCALIZED: Bottomless Supply",
"create.hint.hose_pulley": "UNLOCALIZED: The targeted body of fluid is considered infinite.",
"create.hint.mechanical_arm_no_targets.title": "목표 없음",
"create.hint.mechanical_arm_no_targets": "이 _기계 팔_은 _목표_가 설정되지 않은 것 같습니다. _기계 팔을 손에 들고_ 벨트, 아이템 거치대, 깔때기를 _우클릭_하여 목표로 지정하세요.",
"create.hint.empty_bearing.title": "베어링 업데이트_",
"create.hint.empty_bearing": "_맨 손_으로 베어링을 _우클릭_하여 구조물을 _부착_하세요.",
"create.hint.full_deployer.title": "UNLOCALIZED: Deployer Item Overflow",
"create.hint.full_deployer": "UNLOCALIZED: It appears this _Deployer_ contains _excess_ _items_ that need to be _extracted._ Use a _hopper,_ _funnel_ or other means to free it from its overflow.",
"create.tooltip.chute.fans_pull_up": "선풍기가 위에서 당김",
"create.tooltip.chute.fans_pull_down": "선풍기가 아래에서 당김",
"create.tooltip.chute.contains": "UNLOCALIZED: Contains: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.crafting_blueprint.crafting_slot": "UNLOCALIZED: Ingredient Slot",
"create.crafting_blueprint.filter_items_viable": "UNLOCALIZED: Advanced filter items are viable",
"create.crafting_blueprint.display_slot": "UNLOCALIZED: Display Slot",
"create.crafting_blueprint.inferred": "UNLOCALIZED: Inferred from recipe",
"create.crafting_blueprint.manually_assigned": "UNLOCALIZED: Manually assigned",
"create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot",
"create.crafting_blueprint.optional": "UNLOCALIZED: Optional",
"create.hint.hose_pulley.title": "UNLOCALIZED: Bottomless Supply",
"create.hint.hose_pulley": "UNLOCALIZED: The targeted body of fluid is considered infinite.",
"create.hint.mechanical_arm_no_targets.title": "목표 없음",
"create.hint.mechanical_arm_no_targets": "이 _기계 팔_은 _목표_가 설정되지 않은 것 같습니다. _기계 팔을 손에 들고_ 벨트, 아이템 거치대, 깔때기를 _우클릭_하여 목표로 지정하세요.",
"create.hint.empty_bearing.title": "베어링 업데이트_",
"create.hint.empty_bearing": "_맨 손_으로 베어링을 _우클릭_하여 구조물을 _부착_하세요.",
"create.hint.full_deployer.title": "UNLOCALIZED: Deployer Item Overflow",
"create.hint.full_deployer": "UNLOCALIZED: It appears this _Deployer_ contains _excess_ _items_ that need to be _extracted._ Use a _hopper,_ _funnel_ or other means to free it from its overflow.",
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
@ -1596,27 +1601,24 @@
"create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails",
"create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion",
"create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered",
"create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor",
"create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
"create.ponder.chain_drive.text_3": "UNLOCALIZED: Any part of the row can be rotated by 90 degrees",
"create.ponder.chain_gearshift.header": "UNLOCALIZED: Controlling rotational speed with Chain Gearshifts",
"create.ponder.chain_gearshift.text_1": "UNLOCALIZED: Unpowered Chain Gearshifts behave exacly like Chain Drives",
"create.ponder.chain_gearshift.text_2": "UNLOCALIZED: When Powered, the speed transmitted to other Chain Drives in the row is doubled",
"create.ponder.chain_gearshift.text_3": "UNLOCALIZED: Whenever the Powered Gearshift is not at the source, its speed will be halved instead",
"create.ponder.chain_gearshift.text_4": "UNLOCALIZED: In both cases, Chain Drives in the row always run at 2x the speed of the Powered Gearshift",
"create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2",
"create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM",
"create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes",
"create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories",
"create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created",
"create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal",
"create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered",
"create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor",
"create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
"create.ponder.chain_drive.text_3": "UNLOCALIZED: Any part of the row can be rotated by 90 degrees",
"create.ponder.chain_gearshift.header": "UNLOCALIZED: Controlling rotational speed with Chain Gearshifts",
"create.ponder.chain_gearshift.text_1": "UNLOCALIZED: Unpowered Chain Gearshifts behave exactly like Chain Drives",
"create.ponder.chain_gearshift.text_2": "UNLOCALIZED: When Powered, the speed transmitted to other Chain Drives in the row is doubled",
"create.ponder.chain_gearshift.text_3": "UNLOCALIZED: Whenever the Powered Gearshift is not at the source, its speed will be halved instead",
"create.ponder.chain_gearshift.text_4": "UNLOCALIZED: In both cases, Chain Drives in the row always run at 2x the speed of the Powered Gearshift",
"create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2",
"create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM",
"create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes",
"create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories",
"create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created",
"create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal",
"create.ponder.chute_upward.header": "UNLOCALIZED: Transporting Items upward via Chutes",
"create.ponder.chute_upward.text_1": "UNLOCALIZED: Using Encased Fans at the top or bottom, a Chute can move items upward",
@ -2119,4 +2121,4 @@
"_": "Thank you for translating Create!"
}
}

View file

@ -1,15 +1,13 @@
{
"_": "Missing Localizations: 1588",
"_": "->------------------------] Game Elements [------------------------<-",
"block.create.acacia_window": "UNLOCALIZED: Acacia Window",
"block.create.acacia_window_pane": "UNLOCALIZED: Acacia Window Pane",
"block.create.adjustable_chain_gearshift": "UNLOCALIZED: Adjustable Chain Gearshift",
"block.create.adjustable_crate": "FlexKrat",
"block.create.adjustable_pulse_repeater": "UNLOCALIZED: Adjustable Pulse Repeater",
"block.create.adjustable_repeater": "FlexSterker",
"block.create.analog_lever": "UNLOCALIZED: Analog Lever",
"_": "Missing Localizations: 1603",
"_": "->------------------------] Game Elements [------------------------<-",
"block.create.acacia_window": "UNLOCALIZED: Acacia Window",
"block.create.acacia_window_pane": "UNLOCALIZED: Acacia Window Pane",
"block.create.adjustable_chain_gearshift": "UNLOCALIZED: Adjustable Chain Gearshift",
"block.create.adjustable_crate": "FlexKrat",
"block.create.adjustable_pulse_repeater": "UNLOCALIZED: Adjustable Pulse Repeater",
"block.create.adjustable_repeater": "FlexSterker",
"block.create.analog_lever": "UNLOCALIZED: Analog Lever",
"block.create.andesite_belt_funnel": "UNLOCALIZED: Andesite Belt Funnel",
"block.create.andesite_bricks": "Andesietstenen",
"block.create.andesite_bricks_slab": "UNLOCALIZED: Andesite Bricks Slab",
@ -404,26 +402,24 @@
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector",
"block.create.white_sail": "UNLOCALIZED: White Sail",
"block.create.white_seat": "UNLOCALIZED: White Seat",
"block.create.white_valve_handle": "UNLOCALIZED: White Valve Handle",
"block.create.windmill_bearing": "UNLOCALIZED: Windmill Bearing",
"block.create.wooden_bracket": "UNLOCALIZED: Wooden Bracket",
"block.create.yellow_sail": "UNLOCALIZED: Yellow Sail",
"block.create.yellow_seat": "UNLOCALIZED: Yellow Seat",
"block.create.yellow_valve_handle": "UNLOCALIZED: Yellow Valve Handle",
"block.create.zinc_block": "UNLOCALIZED: Block of Zinc",
"block.create.zinc_ore": "UNLOCALIZED: Zinc Ore",
"entity.create.contraption": "UNLOCALIZED: Contraption",
"entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption",
"entity.create.seat": "UNLOCALIZED: Seat",
"entity.create.stationary_contraption": "UNLOCALIZED: Stationary Contraption",
"entity.create.super_glue": "UNLOCALIZED: Super Glue",
"fluid.create.milk": "UNLOCALIZED: Milk",
"fluid.create.potion": "UNLOCALIZED: Potion",
"fluid.create.tea": "UNLOCALIZED: Builder's Tea",
"item.create.andesite_alloy": "UNLOCALIZED: Andesite Alloy",
"block.create.white_valve_handle": "UNLOCALIZED: White Valve Handle",
"block.create.windmill_bearing": "UNLOCALIZED: Windmill Bearing",
"block.create.wooden_bracket": "UNLOCALIZED: Wooden Bracket",
"block.create.yellow_sail": "UNLOCALIZED: Yellow Sail",
"block.create.yellow_seat": "UNLOCALIZED: Yellow Seat",
"block.create.yellow_valve_handle": "UNLOCALIZED: Yellow Valve Handle",
"block.create.zinc_block": "UNLOCALIZED: Block of Zinc",
"block.create.zinc_ore": "UNLOCALIZED: Zinc Ore",
"entity.create.contraption": "UNLOCALIZED: Contraption",
"entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption",
"entity.create.seat": "UNLOCALIZED: Seat",
"entity.create.stationary_contraption": "UNLOCALIZED: Stationary Contraption",
"entity.create.super_glue": "UNLOCALIZED: Super Glue",
"fluid.create.milk": "UNLOCALIZED: Milk",
"fluid.create.potion": "UNLOCALIZED: Potion",
"fluid.create.tea": "UNLOCALIZED: Builder's Tea",
"item.create.andesite_alloy": "UNLOCALIZED: Andesite Alloy",
"item.create.attribute_filter": "UNLOCALIZED: Attribute Filter",
"item.create.bar_of_chocolate": "UNLOCALIZED: Bar of Chocolate",
"item.create.belt_connector": "Mechanische Transportband",
@ -434,26 +430,27 @@
"item.create.brass_nugget": "Brons klompje",
"item.create.brass_sheet": "Brons Platen",
"item.create.builders_tea": "UNLOCALIZED: Builder's Tea",
"item.create.chest_minecart_contraption": "UNLOCALIZED: Chest Minecart Contraption",
"item.create.chocolate_bucket": "UNLOCALIZED: Chocolate Bucket",
"item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries",
"item.create.chromatic_compound": "UNLOCALIZED: Chromatic Compound",
"item.create.cinder_flour": "UNLOCALIZED: Cinder Flour",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "Koperstaaf",
"item.create.copper_nugget": "Koper klompje",
"item.create.copper_sheet": "UNLOCALIZED: Copper Sheet",
"item.create.crafter_slot_cover": "UNLOCALIZED: Crafter Slot Cover",
"item.create.crushed_aluminum_ore": "UNLOCALIZED: Crushed Aluminum Ore",
"item.create.crushed_brass": "Gemalen Brons",
"item.create.crushed_copper_ore": "UNLOCALIZED: Crushed Copper Ore",
"item.create.crushed_gold_ore": "UNLOCALIZED: Crushed Gold Ore",
"item.create.crushed_iron_ore": "UNLOCALIZED: Crushed Iron Ore",
"item.create.crushed_lead_ore": "UNLOCALIZED: Crushed Lead Ore",
"item.create.crushed_nickel_ore": "UNLOCALIZED: Crushed Nickel Ore",
"item.create.crushed_osmium_ore": "UNLOCALIZED: Crushed Osmium Ore",
"item.create.crushed_platinum_ore": "UNLOCALIZED: Crushed Platinum Ore",
"item.create.crushed_quicksilver_ore": "UNLOCALIZED: Crushed Quicksilver Ore",
"item.create.chest_minecart_contraption": "UNLOCALIZED: Chest Minecart Contraption",
"item.create.chocolate_bucket": "UNLOCALIZED: Chocolate Bucket",
"item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries",
"item.create.chromatic_compound": "UNLOCALIZED: Chromatic Compound",
"item.create.cinder_flour": "UNLOCALIZED: Cinder Flour",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "Koperstaaf",
"item.create.copper_nugget": "Koper klompje",
"item.create.copper_sheet": "UNLOCALIZED: Copper Sheet",
"item.create.crafter_slot_cover": "UNLOCALIZED: Crafter Slot Cover",
"item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"item.create.crushed_aluminum_ore": "UNLOCALIZED: Crushed Aluminum Ore",
"item.create.crushed_brass": "Gemalen Brons",
"item.create.crushed_copper_ore": "UNLOCALIZED: Crushed Copper Ore",
"item.create.crushed_gold_ore": "UNLOCALIZED: Crushed Gold Ore",
"item.create.crushed_iron_ore": "UNLOCALIZED: Crushed Iron Ore",
"item.create.crushed_lead_ore": "UNLOCALIZED: Crushed Lead Ore",
"item.create.crushed_nickel_ore": "UNLOCALIZED: Crushed Nickel Ore",
"item.create.crushed_osmium_ore": "UNLOCALIZED: Crushed Osmium Ore",
"item.create.crushed_platinum_ore": "UNLOCALIZED: Crushed Platinum Ore",
"item.create.crushed_quicksilver_ore": "UNLOCALIZED: Crushed Quicksilver Ore",
"item.create.crushed_silver_ore": "UNLOCALIZED: Crushed Silver Ore",
"item.create.crushed_tin_ore": "UNLOCALIZED: Crushed Tin Ore",
"item.create.crushed_uranium_ore": "UNLOCALIZED: Crushed Uranium Ore",
@ -662,26 +659,29 @@
"itemGroup.create.base": "UNLOCALIZED: Create",
"itemGroup.create.palettes": "UNLOCALIZED: Create Palettes",
"death.attack.create.crush": "%1$s is verwerkd door verpulverende wielen",
"death.attack.create.fan_fire": "%1$s is verbrand door hete lucht",
"death.attack.create.fan_lava": "%1$s is verbrand door een lava ventilator",
"death.attack.create.mechanical_drill": "%1$s is gespietst door een mechanische boor",
"death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by a Mechanical Saw",
"death.attack.create.cuckoo_clock_explosion": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock",
"create.block.deployer.damage_source_name": "UNLOCALIZED: a rogue Deployer",
"create.block.cart_assembler.invalid": "UNLOCALIZED: Place your Cart Assembler on a rail block",
"create.recipe.crushing": "Verpulveren",
"create.recipe.milling": "UNLOCALIZED: Milling",
"create.recipe.fan_washing": "UNLOCALIZED: Bulk Washing",
"create.recipe.fan_washing.fan": "UNLOCALIZED: Fan behind Flowing Water",
"create.recipe.fan_smoking": "UNLOCALIZED: Bulk Smoking",
"create.recipe.fan_smoking.fan": "UNLOCALIZED: Fan behind Fire",
"create.recipe.fan_blasting": "UNLOCALIZED: Bulk Blasting",
"create.recipe.fan_blasting.fan": "UNLOCALIZED: Fan behind Lava",
"create.recipe.pressing": "Persen",
"death.attack.create.crush": "%1$s is verwerkd door verpulverende wielen",
"death.attack.create.fan_fire": "%1$s is verbrand door hete lucht",
"death.attack.create.fan_lava": "%1$s is verbrand door een lava ventilator",
"death.attack.create.mechanical_drill": "%1$s is gespietst door een mechanische boor",
"death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by a Mechanical Saw",
"death.attack.create.cuckoo_clock_explosion": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock",
"create.block.deployer.damage_source_name": "UNLOCALIZED: a rogue Deployer",
"create.block.cart_assembler.invalid": "UNLOCALIZED: Place your Cart Assembler on a rail block",
"create.menu.return": "UNLOCALIZED: Return to Menu",
"create.menu.configure": "UNLOCALIZED: Configure...",
"create.menu.getting_started": "UNLOCALIZED: Getting Started",
"create.menu.project_page": "UNLOCALIZED: Project Page",
"create.menu.report_bugs": "UNLOCALIZED: Report Issues",
"create.menu.support": "UNLOCALIZED: Support Us",
"create.recipe.crushing": "Verpulveren",
"create.recipe.milling": "UNLOCALIZED: Milling",
"create.recipe.fan_washing": "UNLOCALIZED: Bulk Washing",
"create.recipe.fan_washing.fan": "UNLOCALIZED: Fan behind Flowing Water",
"create.recipe.fan_smoking": "UNLOCALIZED: Bulk Smoking",
"create.recipe.fan_smoking.fan": "UNLOCALIZED: Fan behind Fire",
"create.recipe.fan_blasting": "UNLOCALIZED: Bulk Blasting",
"create.recipe.fan_blasting.fan": "UNLOCALIZED: Fan behind Lava",
"create.recipe.pressing": "Persen",
"create.recipe.mixing": "Mengen",
"create.recipe.deploying": "UNLOCALIZED: Deploying",
"create.recipe.automatic_shapeless": "UNLOCALIZED: Automated Shapeless Crafting",
@ -1102,24 +1102,29 @@
"create.tooltip.chute.no_fans_attached": "UNLOCALIZED: No attached fans",
"create.tooltip.chute.fans_push_up": "UNLOCALIZED: Fans push from Below",
"create.tooltip.chute.fans_push_down": "UNLOCALIZED: Fans push from Above",
"create.tooltip.chute.fans_pull_up": "UNLOCALIZED: Fans pull from Above",
"create.tooltip.chute.fans_pull_down": "UNLOCALIZED: Fans pull from Below",
"create.tooltip.chute.contains": "UNLOCALIZED: Contains: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.hint.hose_pulley.title": "UNLOCALIZED: Bottomless Supply",
"create.hint.hose_pulley": "UNLOCALIZED: The targeted body of fluid is considered infinite.",
"create.hint.mechanical_arm_no_targets.title": "UNLOCALIZED: No Targets",
"create.hint.mechanical_arm_no_targets": "UNLOCALIZED: It appears this _Mechanical_ _Arm_ has not been assigned any _targets._ Select belts, depots, funnels and other blocks by _right-clicking_ them while _holding_ the _Mechanical_ _Arm_ in your _hand_.",
"create.hint.empty_bearing.title": "UNLOCALIZED: Update Bearing",
"create.hint.empty_bearing": "UNLOCALIZED: _Right-click_ the bearing with an _empty_ _hand_ to _attach_ the structure you just built in front of it.",
"create.hint.full_deployer.title": "UNLOCALIZED: Deployer Item Overflow",
"create.hint.full_deployer": "UNLOCALIZED: It appears this _Deployer_ contains _excess_ _items_ that need to be _extracted._ Use a _hopper,_ _funnel_ or other means to free it from its overflow.",
"create.tooltip.chute.fans_pull_up": "UNLOCALIZED: Fans pull from Above",
"create.tooltip.chute.fans_pull_down": "UNLOCALIZED: Fans pull from Below",
"create.tooltip.chute.contains": "UNLOCALIZED: Contains: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.crafting_blueprint.crafting_slot": "UNLOCALIZED: Ingredient Slot",
"create.crafting_blueprint.filter_items_viable": "UNLOCALIZED: Advanced filter items are viable",
"create.crafting_blueprint.display_slot": "UNLOCALIZED: Display Slot",
"create.crafting_blueprint.inferred": "UNLOCALIZED: Inferred from recipe",
"create.crafting_blueprint.manually_assigned": "UNLOCALIZED: Manually assigned",
"create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot",
"create.crafting_blueprint.optional": "UNLOCALIZED: Optional",
"create.hint.hose_pulley.title": "UNLOCALIZED: Bottomless Supply",
"create.hint.hose_pulley": "UNLOCALIZED: The targeted body of fluid is considered infinite.",
"create.hint.mechanical_arm_no_targets.title": "UNLOCALIZED: No Targets",
"create.hint.mechanical_arm_no_targets": "UNLOCALIZED: It appears this _Mechanical_ _Arm_ has not been assigned any _targets._ Select belts, depots, funnels and other blocks by _right-clicking_ them while _holding_ the _Mechanical_ _Arm_ in your _hand_.",
"create.hint.empty_bearing.title": "UNLOCALIZED: Update Bearing",
"create.hint.empty_bearing": "UNLOCALIZED: _Right-click_ the bearing with an _empty_ _hand_ to _attach_ the structure you just built in front of it.",
"create.hint.full_deployer.title": "UNLOCALIZED: Deployer Item Overflow",
"create.hint.full_deployer": "UNLOCALIZED: It appears this _Deployer_ contains _excess_ _items_ that need to be _extracted._ Use a _hopper,_ _funnel_ or other means to free it from its overflow.",
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
@ -1596,27 +1601,24 @@
"create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails",
"create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion",
"create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered",
"create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor",
"create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
"create.ponder.chain_drive.text_3": "UNLOCALIZED: Any part of the row can be rotated by 90 degrees",
"create.ponder.chain_gearshift.header": "UNLOCALIZED: Controlling rotational speed with Chain Gearshifts",
"create.ponder.chain_gearshift.text_1": "UNLOCALIZED: Unpowered Chain Gearshifts behave exacly like Chain Drives",
"create.ponder.chain_gearshift.text_2": "UNLOCALIZED: When Powered, the speed transmitted to other Chain Drives in the row is doubled",
"create.ponder.chain_gearshift.text_3": "UNLOCALIZED: Whenever the Powered Gearshift is not at the source, its speed will be halved instead",
"create.ponder.chain_gearshift.text_4": "UNLOCALIZED: In both cases, Chain Drives in the row always run at 2x the speed of the Powered Gearshift",
"create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2",
"create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM",
"create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes",
"create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories",
"create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created",
"create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal",
"create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered",
"create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor",
"create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
"create.ponder.chain_drive.text_3": "UNLOCALIZED: Any part of the row can be rotated by 90 degrees",
"create.ponder.chain_gearshift.header": "UNLOCALIZED: Controlling rotational speed with Chain Gearshifts",
"create.ponder.chain_gearshift.text_1": "UNLOCALIZED: Unpowered Chain Gearshifts behave exactly like Chain Drives",
"create.ponder.chain_gearshift.text_2": "UNLOCALIZED: When Powered, the speed transmitted to other Chain Drives in the row is doubled",
"create.ponder.chain_gearshift.text_3": "UNLOCALIZED: Whenever the Powered Gearshift is not at the source, its speed will be halved instead",
"create.ponder.chain_gearshift.text_4": "UNLOCALIZED: In both cases, Chain Drives in the row always run at 2x the speed of the Powered Gearshift",
"create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2",
"create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM",
"create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes",
"create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories",
"create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created",
"create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal",
"create.ponder.chute_upward.header": "UNLOCALIZED: Transporting Items upward via Chutes",
"create.ponder.chute_upward.text_1": "UNLOCALIZED: Using Encased Fans at the top or bottom, a Chute can move items upward",
@ -2119,4 +2121,4 @@
"_": "Thank you for translating Create!"
}
}

View file

@ -1,15 +1,13 @@
{
"_": "Missing Localizations: 11",
"_": "->------------------------] Game Elements [------------------------<-",
"block.create.acacia_window": "Akacjowe okno",
"block.create.acacia_window_pane": "Akacjowa szyba okienna",
"block.create.adjustable_chain_gearshift": "Regulowany przekładnik łańcuchowy",
"block.create.adjustable_crate": "Regulowana skrzynka",
"block.create.adjustable_pulse_repeater": "Regulowany przekaźnik pulsu",
"block.create.adjustable_repeater": "Regulowany przekaźnik",
"block.create.analog_lever": "Dźwignia analogowa",
"_": "Missing Localizations: 26",
"_": "->------------------------] Game Elements [------------------------<-",
"block.create.acacia_window": "Akacjowe okno",
"block.create.acacia_window_pane": "Akacjowa szyba okienna",
"block.create.adjustable_chain_gearshift": "Regulowany przekładnik łańcuchowy",
"block.create.adjustable_crate": "Regulowana skrzynka",
"block.create.adjustable_pulse_repeater": "Regulowany przekaźnik pulsu",
"block.create.adjustable_repeater": "Regulowany przekaźnik",
"block.create.analog_lever": "Dźwignia analogowa",
"block.create.andesite_belt_funnel": "Andezytowy lejek taśmowy",
"block.create.andesite_bricks": "Andezytowe cegły",
"block.create.andesite_bricks_slab": "Andezytowa ceglana płyta",
@ -404,26 +402,24 @@
"block.create.weighted_ejector": "Wyrzutnia odważnikowa",
"block.create.white_sail": "Biały żagiel",
"block.create.white_seat": "Białe siedzenie",
"block.create.white_valve_handle": "Białe pokrętło",
"block.create.windmill_bearing": "Łożysko wiatraka",
"block.create.wooden_bracket": "Drewniany wspornik",
"block.create.yellow_sail": "Żółty żagiel",
"block.create.yellow_seat": "Żółte siedzenie",
"block.create.yellow_valve_handle": "Żółte pokrętło",
"block.create.zinc_block": "Blok cynku",
"block.create.zinc_ore": "Ruda cynku",
"entity.create.contraption": "Maszyna",
"entity.create.gantry_contraption": "Maszyna suwnicowa",
"entity.create.seat": "Siedzenie",
"entity.create.stationary_contraption": "Maszyna stacjonarna",
"entity.create.super_glue": "Super Glue",
"fluid.create.milk": "Mleko",
"fluid.create.potion": "Mikstura",
"fluid.create.tea": "Herbatka Budowniczego",
"item.create.andesite_alloy": "Stop andezytu",
"block.create.white_valve_handle": "Białe pokrętło",
"block.create.windmill_bearing": "Łożysko wiatraka",
"block.create.wooden_bracket": "Drewniany wspornik",
"block.create.yellow_sail": "Żółty żagiel",
"block.create.yellow_seat": "Żółte siedzenie",
"block.create.yellow_valve_handle": "Żółte pokrętło",
"block.create.zinc_block": "Blok cynku",
"block.create.zinc_ore": "Ruda cynku",
"entity.create.contraption": "Maszyna",
"entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"entity.create.gantry_contraption": "Maszyna suwnicowa",
"entity.create.seat": "Siedzenie",
"entity.create.stationary_contraption": "Maszyna stacjonarna",
"entity.create.super_glue": "Super Glue",
"fluid.create.milk": "Mleko",
"fluid.create.potion": "Mikstura",
"fluid.create.tea": "Herbatka Budowniczego",
"item.create.andesite_alloy": "Stop andezytu",
"item.create.attribute_filter": "Filtr atrybutowy",
"item.create.bar_of_chocolate": "Tabliczka czekolady",
"item.create.belt_connector": "Taśma",
@ -434,26 +430,27 @@
"item.create.brass_nugget": "Bryłka mosiądzu",
"item.create.brass_sheet": "Arkusz mosiądzu",
"item.create.builders_tea": "Herbatka Budowniczego",
"item.create.chest_minecart_contraption": "Maszyna w wagoniku ze skrzynią",
"item.create.chocolate_bucket": "Wiadro czekolady",
"item.create.chocolate_glazed_berries": "Jagody w czekoladzie",
"item.create.chromatic_compound": "Związek chromatyczny",
"item.create.cinder_flour": "Rozżarzona mąka",
"item.create.copper_backtank": "Miedziany zbiornik w plecaku",
"item.create.copper_ingot": "Sztabka miedzi",
"item.create.copper_nugget": "Bryłka miedzi",
"item.create.copper_sheet": "Arkusz miedzi",
"item.create.crafter_slot_cover": "Przykrywka na slot stołu rzemieślniczego",
"item.create.crushed_aluminum_ore": "Rozkruszona ruda żelaza",
"item.create.crushed_brass": "Rozkruszony mosiądz",
"item.create.crushed_copper_ore": "Rozkruszona ruda miedzi",
"item.create.crushed_gold_ore": "Rozkruszona ruda złota",
"item.create.crushed_iron_ore": "Rozkruszona ruda żelaza",
"item.create.crushed_lead_ore": "Rozkruszona ruda ołowiu",
"item.create.crushed_nickel_ore": "Rozkruszona ruda niklu",
"item.create.crushed_osmium_ore": "Rozkruszona ruda osmu",
"item.create.crushed_platinum_ore": "Rozkruszona ruda platyny",
"item.create.crushed_quicksilver_ore": "Rozkruszona ruda rtęci",
"item.create.chest_minecart_contraption": "Maszyna w wagoniku ze skrzynią",
"item.create.chocolate_bucket": "Wiadro czekolady",
"item.create.chocolate_glazed_berries": "Jagody w czekoladzie",
"item.create.chromatic_compound": "Związek chromatyczny",
"item.create.cinder_flour": "Rozżarzona mąka",
"item.create.copper_backtank": "Miedziany zbiornik w plecaku",
"item.create.copper_ingot": "Sztabka miedzi",
"item.create.copper_nugget": "Bryłka miedzi",
"item.create.copper_sheet": "Arkusz miedzi",
"item.create.crafter_slot_cover": "Przykrywka na slot stołu rzemieślniczego",
"item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"item.create.crushed_aluminum_ore": "Rozkruszona ruda żelaza",
"item.create.crushed_brass": "Rozkruszony mosiądz",
"item.create.crushed_copper_ore": "Rozkruszona ruda miedzi",
"item.create.crushed_gold_ore": "Rozkruszona ruda złota",
"item.create.crushed_iron_ore": "Rozkruszona ruda żelaza",
"item.create.crushed_lead_ore": "Rozkruszona ruda ołowiu",
"item.create.crushed_nickel_ore": "Rozkruszona ruda niklu",
"item.create.crushed_osmium_ore": "Rozkruszona ruda osmu",
"item.create.crushed_platinum_ore": "Rozkruszona ruda platyny",
"item.create.crushed_quicksilver_ore": "Rozkruszona ruda rtęci",
"item.create.crushed_silver_ore": "Rozkruszona ruda srebra",
"item.create.crushed_tin_ore": "Rozkruszona ruda cyny",
"item.create.crushed_uranium_ore": "Rozkruszona ruda uranu",
@ -662,26 +659,29 @@
"itemGroup.create.base": "Create",
"itemGroup.create.palettes": "Palety Create",
"death.attack.create.crush": "Gracz %1$s został zgnieciony przez koło kruszące",
"death.attack.create.fan_fire": "Gracz %1$s poparzył się gorącym powietrzem",
"death.attack.create.fan_lava": "Gracz %1$s poparzył się kroplami lawy",
"death.attack.create.mechanical_drill": "Gracz %1$s nabił się na mechaniczne wiertło",
"death.attack.create.mechanical_saw": "Gracz %1$s został przecięty na pół przez mechaniczną piłę",
"death.attack.create.cuckoo_clock_explosion": "Gracz %1$s został wysadzony w powietrze przez uszkodzony zegar z kukułką",
"create.block.deployer.damage_source_name": "zbuntowany aplikator",
"create.block.cart_assembler.invalid": "Postaw monter wagoników na torze",
"create.recipe.crushing": "Kruszenie",
"create.recipe.milling": "Mielenie",
"create.recipe.fan_washing": "Hurtowe płukanie",
"create.recipe.fan_washing.fan": "Wiatrak za płynącą wodą",
"create.recipe.fan_smoking": "Hurtowe wędzenie",
"create.recipe.fan_smoking.fan": "Wiatrak za ogniem",
"create.recipe.fan_blasting": "Hurtowe topienie",
"create.recipe.fan_blasting.fan": "Wiatrak za lawą",
"create.recipe.pressing": "Tłoczenie",
"death.attack.create.crush": "Gracz %1$s został zgnieciony przez koło kruszące",
"death.attack.create.fan_fire": "Gracz %1$s poparzył się gorącym powietrzem",
"death.attack.create.fan_lava": "Gracz %1$s poparzył się kroplami lawy",
"death.attack.create.mechanical_drill": "Gracz %1$s nabił się na mechaniczne wiertło",
"death.attack.create.mechanical_saw": "Gracz %1$s został przecięty na pół przez mechaniczną piłę",
"death.attack.create.cuckoo_clock_explosion": "Gracz %1$s został wysadzony w powietrze przez uszkodzony zegar z kukułką",
"create.block.deployer.damage_source_name": "zbuntowany aplikator",
"create.block.cart_assembler.invalid": "Postaw monter wagoników na torze",
"create.menu.return": "UNLOCALIZED: Return to Menu",
"create.menu.configure": "UNLOCALIZED: Configure...",
"create.menu.getting_started": "UNLOCALIZED: Getting Started",
"create.menu.project_page": "UNLOCALIZED: Project Page",
"create.menu.report_bugs": "UNLOCALIZED: Report Issues",
"create.menu.support": "UNLOCALIZED: Support Us",
"create.recipe.crushing": "Kruszenie",
"create.recipe.milling": "Mielenie",
"create.recipe.fan_washing": "Hurtowe płukanie",
"create.recipe.fan_washing.fan": "Wiatrak za płynącą wodą",
"create.recipe.fan_smoking": "Hurtowe wędzenie",
"create.recipe.fan_smoking.fan": "Wiatrak za ogniem",
"create.recipe.fan_blasting": "Hurtowe topienie",
"create.recipe.fan_blasting.fan": "Wiatrak za lawą",
"create.recipe.pressing": "Tłoczenie",
"create.recipe.mixing": "Mieszanie",
"create.recipe.deploying": "Aplikowanie",
"create.recipe.automatic_shapeless": "Zautomatyzowanie nieokreślone konstruowanie",
@ -1102,24 +1102,29 @@
"create.tooltip.chute.no_fans_attached": "Brak przyłączonych wiatraków",
"create.tooltip.chute.fans_push_up": "Wiatraki pchają od dołu",
"create.tooltip.chute.fans_push_down": "Wiatraki pchają od góry",
"create.tooltip.chute.fans_pull_up": "Wiatraki ciągną od góry",
"create.tooltip.chute.fans_pull_down": "Wiatraki ciągną od dołu",
"create.tooltip.chute.contains": "Zawiera: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.hint.hose_pulley.title": "Niewyczerpany zapas",
"create.hint.hose_pulley": "Wybrane zbiornik cieczy jest uznany za nieskończony",
"create.hint.mechanical_arm_no_targets.title": "Brak celi",
"create.hint.mechanical_arm_no_targets": "Wygląda na to, że żadne _cele_ nie zostały przypisane do tego _mechanicznego_ _ramienia_. Wybierz taśmociągi, składnice, lejki i inne bloki _klikając_ na nie _PPM_, trzymając w _ręce_ _mechaniczne_ _ramię_",
"create.hint.empty_bearing.title": "Aktualizuj łożysko",
"create.hint.empty_bearing": "_Kliknij_ na łożysko _PPM_ pustą ręką, aby _przyczepić_ do niego strukturę zbudowaną z przodu.",
"create.hint.full_deployer.title": "Nadmiar przedmiotów w aplikatorze",
"create.hint.full_deployer": "Wygląda na to, że ten _aplikator_ zawiera _nadmiar_ _przedmiotów_, które muszą zostać _wyciągnięte_. Użyj _leji_, _lejków_ lub innych sposobów, aby uwolnić od przepełnienia.",
"create.tooltip.chute.fans_pull_up": "Wiatraki ciągną od góry",
"create.tooltip.chute.fans_pull_down": "Wiatraki ciągną od dołu",
"create.tooltip.chute.contains": "Zawiera: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.crafting_blueprint.crafting_slot": "UNLOCALIZED: Ingredient Slot",
"create.crafting_blueprint.filter_items_viable": "UNLOCALIZED: Advanced filter items are viable",
"create.crafting_blueprint.display_slot": "UNLOCALIZED: Display Slot",
"create.crafting_blueprint.inferred": "UNLOCALIZED: Inferred from recipe",
"create.crafting_blueprint.manually_assigned": "UNLOCALIZED: Manually assigned",
"create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot",
"create.crafting_blueprint.optional": "UNLOCALIZED: Optional",
"create.hint.hose_pulley.title": "Niewyczerpany zapas",
"create.hint.hose_pulley": "Wybrane zbiornik cieczy jest uznany za nieskończony",
"create.hint.mechanical_arm_no_targets.title": "Brak celi",
"create.hint.mechanical_arm_no_targets": "Wygląda na to, że żadne _cele_ nie zostały przypisane do tego _mechanicznego_ _ramienia_. Wybierz taśmociągi, składnice, lejki i inne bloki _klikając_ na nie _PPM_, trzymając w _ręce_ _mechaniczne_ _ramię_",
"create.hint.empty_bearing.title": "Aktualizuj łożysko",
"create.hint.empty_bearing": "_Kliknij_ na łożysko _PPM_ pustą ręką, aby _przyczepić_ do niego strukturę zbudowaną z przodu.",
"create.hint.full_deployer.title": "Nadmiar przedmiotów w aplikatorze",
"create.hint.full_deployer": "Wygląda na to, że ten _aplikator_ zawiera _nadmiar_ _przedmiotów_, które muszą zostać _wyciągnięte_. Użyj _leji_, _lejków_ lub innych sposobów, aby uwolnić od przepełnienia.",
"create.gui.config.overlay1": "Cześć :)",
"create.gui.config.overlay2": "To jest przykładowa nakładka",
@ -2119,4 +2124,4 @@
"_": "Thank you for translating Create!"
}
}

View file

@ -1,15 +1,13 @@
{
"_": "Missing Localizations: 1640",
"_": "->------------------------] Game Elements [------------------------<-",
"block.create.acacia_window": "UNLOCALIZED: Acacia Window",
"block.create.acacia_window_pane": "UNLOCALIZED: Acacia Window Pane",
"block.create.adjustable_chain_gearshift": "UNLOCALIZED: Adjustable Chain Gearshift",
"block.create.adjustable_crate": "adjustable_crate",
"block.create.adjustable_pulse_repeater": "UNLOCALIZED: Adjustable Pulse Repeater",
"block.create.adjustable_repeater": "Repetidor Flex",
"block.create.analog_lever": "UNLOCALIZED: Analog Lever",
"_": "Missing Localizations: 1655",
"_": "->------------------------] Game Elements [------------------------<-",
"block.create.acacia_window": "UNLOCALIZED: Acacia Window",
"block.create.acacia_window_pane": "UNLOCALIZED: Acacia Window Pane",
"block.create.adjustable_chain_gearshift": "UNLOCALIZED: Adjustable Chain Gearshift",
"block.create.adjustable_crate": "adjustable_crate",
"block.create.adjustable_pulse_repeater": "UNLOCALIZED: Adjustable Pulse Repeater",
"block.create.adjustable_repeater": "Repetidor Flex",
"block.create.analog_lever": "UNLOCALIZED: Analog Lever",
"block.create.andesite_belt_funnel": "UNLOCALIZED: Andesite Belt Funnel",
"block.create.andesite_bricks": "Tijolos de Andesite",
"block.create.andesite_bricks_slab": "UNLOCALIZED: Andesite Bricks Slab",
@ -404,26 +402,24 @@
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector",
"block.create.white_sail": "UNLOCALIZED: White Sail",
"block.create.white_seat": "UNLOCALIZED: White Seat",
"block.create.white_valve_handle": "UNLOCALIZED: White Valve Handle",
"block.create.windmill_bearing": "UNLOCALIZED: Windmill Bearing",
"block.create.wooden_bracket": "UNLOCALIZED: Wooden Bracket",
"block.create.yellow_sail": "UNLOCALIZED: Yellow Sail",
"block.create.yellow_seat": "UNLOCALIZED: Yellow Seat",
"block.create.yellow_valve_handle": "UNLOCALIZED: Yellow Valve Handle",
"block.create.zinc_block": "UNLOCALIZED: Block of Zinc",
"block.create.zinc_ore": "UNLOCALIZED: Zinc Ore",
"entity.create.contraption": "UNLOCALIZED: Contraption",
"entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption",
"entity.create.seat": "UNLOCALIZED: Seat",
"entity.create.stationary_contraption": "UNLOCALIZED: Stationary Contraption",
"entity.create.super_glue": "UNLOCALIZED: Super Glue",
"fluid.create.milk": "UNLOCALIZED: Milk",
"fluid.create.potion": "UNLOCALIZED: Potion",
"fluid.create.tea": "UNLOCALIZED: Builder's Tea",
"item.create.andesite_alloy": "UNLOCALIZED: Andesite Alloy",
"block.create.white_valve_handle": "UNLOCALIZED: White Valve Handle",
"block.create.windmill_bearing": "UNLOCALIZED: Windmill Bearing",
"block.create.wooden_bracket": "UNLOCALIZED: Wooden Bracket",
"block.create.yellow_sail": "UNLOCALIZED: Yellow Sail",
"block.create.yellow_seat": "UNLOCALIZED: Yellow Seat",
"block.create.yellow_valve_handle": "UNLOCALIZED: Yellow Valve Handle",
"block.create.zinc_block": "UNLOCALIZED: Block of Zinc",
"block.create.zinc_ore": "UNLOCALIZED: Zinc Ore",
"entity.create.contraption": "UNLOCALIZED: Contraption",
"entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption",
"entity.create.seat": "UNLOCALIZED: Seat",
"entity.create.stationary_contraption": "UNLOCALIZED: Stationary Contraption",
"entity.create.super_glue": "UNLOCALIZED: Super Glue",
"fluid.create.milk": "UNLOCALIZED: Milk",
"fluid.create.potion": "UNLOCALIZED: Potion",
"fluid.create.tea": "UNLOCALIZED: Builder's Tea",
"item.create.andesite_alloy": "UNLOCALIZED: Andesite Alloy",
"item.create.attribute_filter": "UNLOCALIZED: Attribute Filter",
"item.create.bar_of_chocolate": "UNLOCALIZED: Bar of Chocolate",
"item.create.belt_connector": "Esteira Mecânica",
@ -434,26 +430,27 @@
"item.create.brass_nugget": "UNLOCALIZED: Brass Nugget",
"item.create.brass_sheet": "UNLOCALIZED: Brass Sheet",
"item.create.builders_tea": "UNLOCALIZED: Builder's Tea",
"item.create.chest_minecart_contraption": "UNLOCALIZED: Chest Minecart Contraption",
"item.create.chocolate_bucket": "UNLOCALIZED: Chocolate Bucket",
"item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries",
"item.create.chromatic_compound": "UNLOCALIZED: Chromatic Compound",
"item.create.cinder_flour": "UNLOCALIZED: Cinder Flour",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "UNLOCALIZED: Copper Ingot",
"item.create.copper_nugget": "UNLOCALIZED: Copper Nugget",
"item.create.copper_sheet": "UNLOCALIZED: Copper Sheet",
"item.create.crafter_slot_cover": "UNLOCALIZED: Crafter Slot Cover",
"item.create.crushed_aluminum_ore": "UNLOCALIZED: Crushed Aluminum Ore",
"item.create.crushed_brass": "UNLOCALIZED: Crushed Brass",
"item.create.crushed_copper_ore": "UNLOCALIZED: Crushed Copper Ore",
"item.create.crushed_gold_ore": "UNLOCALIZED: Crushed Gold Ore",
"item.create.crushed_iron_ore": "UNLOCALIZED: Crushed Iron Ore",
"item.create.crushed_lead_ore": "UNLOCALIZED: Crushed Lead Ore",
"item.create.crushed_nickel_ore": "UNLOCALIZED: Crushed Nickel Ore",
"item.create.crushed_osmium_ore": "UNLOCALIZED: Crushed Osmium Ore",
"item.create.crushed_platinum_ore": "UNLOCALIZED: Crushed Platinum Ore",
"item.create.crushed_quicksilver_ore": "UNLOCALIZED: Crushed Quicksilver Ore",
"item.create.chest_minecart_contraption": "UNLOCALIZED: Chest Minecart Contraption",
"item.create.chocolate_bucket": "UNLOCALIZED: Chocolate Bucket",
"item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries",
"item.create.chromatic_compound": "UNLOCALIZED: Chromatic Compound",
"item.create.cinder_flour": "UNLOCALIZED: Cinder Flour",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "UNLOCALIZED: Copper Ingot",
"item.create.copper_nugget": "UNLOCALIZED: Copper Nugget",
"item.create.copper_sheet": "UNLOCALIZED: Copper Sheet",
"item.create.crafter_slot_cover": "UNLOCALIZED: Crafter Slot Cover",
"item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"item.create.crushed_aluminum_ore": "UNLOCALIZED: Crushed Aluminum Ore",
"item.create.crushed_brass": "UNLOCALIZED: Crushed Brass",
"item.create.crushed_copper_ore": "UNLOCALIZED: Crushed Copper Ore",
"item.create.crushed_gold_ore": "UNLOCALIZED: Crushed Gold Ore",
"item.create.crushed_iron_ore": "UNLOCALIZED: Crushed Iron Ore",
"item.create.crushed_lead_ore": "UNLOCALIZED: Crushed Lead Ore",
"item.create.crushed_nickel_ore": "UNLOCALIZED: Crushed Nickel Ore",
"item.create.crushed_osmium_ore": "UNLOCALIZED: Crushed Osmium Ore",
"item.create.crushed_platinum_ore": "UNLOCALIZED: Crushed Platinum Ore",
"item.create.crushed_quicksilver_ore": "UNLOCALIZED: Crushed Quicksilver Ore",
"item.create.crushed_silver_ore": "UNLOCALIZED: Crushed Silver Ore",
"item.create.crushed_tin_ore": "UNLOCALIZED: Crushed Tin Ore",
"item.create.crushed_uranium_ore": "UNLOCALIZED: Crushed Uranium Ore",
@ -662,26 +659,29 @@
"itemGroup.create.base": "UNLOCALIZED: Create",
"itemGroup.create.palettes": "UNLOCALIZED: Create Palettes",
"death.attack.create.crush": "%1$s foi processado pelas Rodas de Moer",
"death.attack.create.fan_fire": "%1$s foi queimado por ar quente",
"death.attack.create.fan_lava": "%1$s foi queimado pelo ventilador de lava",
"death.attack.create.mechanical_drill": "%1$s foi empalado pela Furadeira Mecânica",
"death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by a Mechanical Saw",
"death.attack.create.cuckoo_clock_explosion": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock",
"create.block.deployer.damage_source_name": "UNLOCALIZED: a rogue Deployer",
"create.block.cart_assembler.invalid": "UNLOCALIZED: Place your Cart Assembler on a rail block",
"create.recipe.crushing": "Moendo",
"create.recipe.milling": "UNLOCALIZED: Milling",
"create.recipe.fan_washing": "UNLOCALIZED: Bulk Washing",
"create.recipe.fan_washing.fan": "UNLOCALIZED: Fan behind Flowing Water",
"create.recipe.fan_smoking": "UNLOCALIZED: Bulk Smoking",
"create.recipe.fan_smoking.fan": "UNLOCALIZED: Fan behind Fire",
"create.recipe.fan_blasting": "UNLOCALIZED: Bulk Blasting",
"create.recipe.fan_blasting.fan": "UNLOCALIZED: Fan behind Lava",
"create.recipe.pressing": "Prensa Mecânica",
"death.attack.create.crush": "%1$s foi processado pelas Rodas de Moer",
"death.attack.create.fan_fire": "%1$s foi queimado por ar quente",
"death.attack.create.fan_lava": "%1$s foi queimado pelo ventilador de lava",
"death.attack.create.mechanical_drill": "%1$s foi empalado pela Furadeira Mecânica",
"death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by a Mechanical Saw",
"death.attack.create.cuckoo_clock_explosion": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock",
"create.block.deployer.damage_source_name": "UNLOCALIZED: a rogue Deployer",
"create.block.cart_assembler.invalid": "UNLOCALIZED: Place your Cart Assembler on a rail block",
"create.menu.return": "UNLOCALIZED: Return to Menu",
"create.menu.configure": "UNLOCALIZED: Configure...",
"create.menu.getting_started": "UNLOCALIZED: Getting Started",
"create.menu.project_page": "UNLOCALIZED: Project Page",
"create.menu.report_bugs": "UNLOCALIZED: Report Issues",
"create.menu.support": "UNLOCALIZED: Support Us",
"create.recipe.crushing": "Moendo",
"create.recipe.milling": "UNLOCALIZED: Milling",
"create.recipe.fan_washing": "UNLOCALIZED: Bulk Washing",
"create.recipe.fan_washing.fan": "UNLOCALIZED: Fan behind Flowing Water",
"create.recipe.fan_smoking": "UNLOCALIZED: Bulk Smoking",
"create.recipe.fan_smoking.fan": "UNLOCALIZED: Fan behind Fire",
"create.recipe.fan_blasting": "UNLOCALIZED: Bulk Blasting",
"create.recipe.fan_blasting.fan": "UNLOCALIZED: Fan behind Lava",
"create.recipe.pressing": "Prensa Mecânica",
"create.recipe.mixing": "UNLOCALIZED: Mixing",
"create.recipe.deploying": "UNLOCALIZED: Deploying",
"create.recipe.automatic_shapeless": "UNLOCALIZED: Automated Shapeless Crafting",
@ -1102,24 +1102,29 @@
"create.tooltip.chute.no_fans_attached": "UNLOCALIZED: No attached fans",
"create.tooltip.chute.fans_push_up": "UNLOCALIZED: Fans push from Below",
"create.tooltip.chute.fans_push_down": "UNLOCALIZED: Fans push from Above",
"create.tooltip.chute.fans_pull_up": "UNLOCALIZED: Fans pull from Above",
"create.tooltip.chute.fans_pull_down": "UNLOCALIZED: Fans pull from Below",
"create.tooltip.chute.contains": "UNLOCALIZED: Contains: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.hint.hose_pulley.title": "UNLOCALIZED: Bottomless Supply",
"create.hint.hose_pulley": "UNLOCALIZED: The targeted body of fluid is considered infinite.",
"create.hint.mechanical_arm_no_targets.title": "UNLOCALIZED: No Targets",
"create.hint.mechanical_arm_no_targets": "UNLOCALIZED: It appears this _Mechanical_ _Arm_ has not been assigned any _targets._ Select belts, depots, funnels and other blocks by _right-clicking_ them while _holding_ the _Mechanical_ _Arm_ in your _hand_.",
"create.hint.empty_bearing.title": "UNLOCALIZED: Update Bearing",
"create.hint.empty_bearing": "UNLOCALIZED: _Right-click_ the bearing with an _empty_ _hand_ to _attach_ the structure you just built in front of it.",
"create.hint.full_deployer.title": "UNLOCALIZED: Deployer Item Overflow",
"create.hint.full_deployer": "UNLOCALIZED: It appears this _Deployer_ contains _excess_ _items_ that need to be _extracted._ Use a _hopper,_ _funnel_ or other means to free it from its overflow.",
"create.tooltip.chute.fans_pull_up": "UNLOCALIZED: Fans pull from Above",
"create.tooltip.chute.fans_pull_down": "UNLOCALIZED: Fans pull from Below",
"create.tooltip.chute.contains": "UNLOCALIZED: Contains: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.crafting_blueprint.crafting_slot": "UNLOCALIZED: Ingredient Slot",
"create.crafting_blueprint.filter_items_viable": "UNLOCALIZED: Advanced filter items are viable",
"create.crafting_blueprint.display_slot": "UNLOCALIZED: Display Slot",
"create.crafting_blueprint.inferred": "UNLOCALIZED: Inferred from recipe",
"create.crafting_blueprint.manually_assigned": "UNLOCALIZED: Manually assigned",
"create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot",
"create.crafting_blueprint.optional": "UNLOCALIZED: Optional",
"create.hint.hose_pulley.title": "UNLOCALIZED: Bottomless Supply",
"create.hint.hose_pulley": "UNLOCALIZED: The targeted body of fluid is considered infinite.",
"create.hint.mechanical_arm_no_targets.title": "UNLOCALIZED: No Targets",
"create.hint.mechanical_arm_no_targets": "UNLOCALIZED: It appears this _Mechanical_ _Arm_ has not been assigned any _targets._ Select belts, depots, funnels and other blocks by _right-clicking_ them while _holding_ the _Mechanical_ _Arm_ in your _hand_.",
"create.hint.empty_bearing.title": "UNLOCALIZED: Update Bearing",
"create.hint.empty_bearing": "UNLOCALIZED: _Right-click_ the bearing with an _empty_ _hand_ to _attach_ the structure you just built in front of it.",
"create.hint.full_deployer.title": "UNLOCALIZED: Deployer Item Overflow",
"create.hint.full_deployer": "UNLOCALIZED: It appears this _Deployer_ contains _excess_ _items_ that need to be _extracted._ Use a _hopper,_ _funnel_ or other means to free it from its overflow.",
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
@ -1596,27 +1601,24 @@
"create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails",
"create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion",
"create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered",
"create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor",
"create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
"create.ponder.chain_drive.text_3": "UNLOCALIZED: Any part of the row can be rotated by 90 degrees",
"create.ponder.chain_gearshift.header": "UNLOCALIZED: Controlling rotational speed with Chain Gearshifts",
"create.ponder.chain_gearshift.text_1": "UNLOCALIZED: Unpowered Chain Gearshifts behave exacly like Chain Drives",
"create.ponder.chain_gearshift.text_2": "UNLOCALIZED: When Powered, the speed transmitted to other Chain Drives in the row is doubled",
"create.ponder.chain_gearshift.text_3": "UNLOCALIZED: Whenever the Powered Gearshift is not at the source, its speed will be halved instead",
"create.ponder.chain_gearshift.text_4": "UNLOCALIZED: In both cases, Chain Drives in the row always run at 2x the speed of the Powered Gearshift",
"create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2",
"create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM",
"create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes",
"create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories",
"create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created",
"create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal",
"create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered",
"create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor",
"create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
"create.ponder.chain_drive.text_3": "UNLOCALIZED: Any part of the row can be rotated by 90 degrees",
"create.ponder.chain_gearshift.header": "UNLOCALIZED: Controlling rotational speed with Chain Gearshifts",
"create.ponder.chain_gearshift.text_1": "UNLOCALIZED: Unpowered Chain Gearshifts behave exactly like Chain Drives",
"create.ponder.chain_gearshift.text_2": "UNLOCALIZED: When Powered, the speed transmitted to other Chain Drives in the row is doubled",
"create.ponder.chain_gearshift.text_3": "UNLOCALIZED: Whenever the Powered Gearshift is not at the source, its speed will be halved instead",
"create.ponder.chain_gearshift.text_4": "UNLOCALIZED: In both cases, Chain Drives in the row always run at 2x the speed of the Powered Gearshift",
"create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2",
"create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM",
"create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes",
"create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories",
"create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created",
"create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal",
"create.ponder.chute_upward.header": "UNLOCALIZED: Transporting Items upward via Chutes",
"create.ponder.chute_upward.text_1": "UNLOCALIZED: Using Encased Fans at the top or bottom, a Chute can move items upward",
@ -2119,4 +2121,4 @@
"_": "Thank you for translating Create!"
}
}

View file

@ -1,15 +1,13 @@
{
"_": "Missing Localizations: 568",
"_": "->------------------------] Game Elements [------------------------<-",
"block.create.acacia_window": "Акациевое окно",
"block.create.acacia_window_pane": "Панель из акациевого окна",
"block.create.adjustable_chain_gearshift": "Регулируемый цепной механизм",
"block.create.adjustable_crate": "Регулируемый ящик",
"block.create.adjustable_pulse_repeater": "Регулируемый импульсный повторитель",
"block.create.adjustable_repeater": "Регулируемый повторитель",
"block.create.analog_lever": "Аналоговый рычаг",
"_": "Missing Localizations: 583",
"_": "->------------------------] Game Elements [------------------------<-",
"block.create.acacia_window": "Акациевое окно",
"block.create.acacia_window_pane": "Панель из акациевого окна",
"block.create.adjustable_chain_gearshift": "Регулируемый цепной механизм",
"block.create.adjustable_crate": "Регулируемый ящик",
"block.create.adjustable_pulse_repeater": "Регулируемый импульсный повторитель",
"block.create.adjustable_repeater": "Регулируемый повторитель",
"block.create.analog_lever": "Аналоговый рычаг",
"block.create.andesite_belt_funnel": "Андезитовая конвейерная воронка",
"block.create.andesite_bricks": "Андезитовый кирпич",
"block.create.andesite_bricks_slab": "Плита из андезитового кирпича",
@ -404,26 +402,24 @@
"block.create.weighted_ejector": "Взвешенная катапульта",
"block.create.white_sail": "Белый парус",
"block.create.white_seat": "Белое сиденье",
"block.create.white_valve_handle": "Белый ручной вентиль",
"block.create.windmill_bearing": "Подшипник ветряной мельницы",
"block.create.wooden_bracket": "Деревянная скоба",
"block.create.yellow_sail": "Жёлтый парус",
"block.create.yellow_seat": "Жёлтое сиденье",
"block.create.yellow_valve_handle": "Жёлтый ручной вентиль",
"block.create.zinc_block": "Цинковый блок",
"block.create.zinc_ore": "Цинковая руда",
"entity.create.contraption": "Штуковина",
"entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption",
"entity.create.seat": "Сиденье",
"entity.create.stationary_contraption": "Стационарная штуковина",
"entity.create.super_glue": "Супер-клей",
"fluid.create.milk": "Молоко",
"fluid.create.potion": "Зелье",
"fluid.create.tea": "Чай Строителя",
"item.create.andesite_alloy": "Андезитовый сплав",
"block.create.white_valve_handle": "Белый ручной вентиль",
"block.create.windmill_bearing": "Подшипник ветряной мельницы",
"block.create.wooden_bracket": "Деревянная скоба",
"block.create.yellow_sail": "Жёлтый парус",
"block.create.yellow_seat": "Жёлтое сиденье",
"block.create.yellow_valve_handle": "Жёлтый ручной вентиль",
"block.create.zinc_block": "Цинковый блок",
"block.create.zinc_ore": "Цинковая руда",
"entity.create.contraption": "Штуковина",
"entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption",
"entity.create.seat": "Сиденье",
"entity.create.stationary_contraption": "Стационарная штуковина",
"entity.create.super_glue": "Супер-клей",
"fluid.create.milk": "Молоко",
"fluid.create.potion": "Зелье",
"fluid.create.tea": "Чай Строителя",
"item.create.andesite_alloy": "Андезитовый сплав",
"item.create.attribute_filter": "Фильтр атрибутов",
"item.create.bar_of_chocolate": "Плитка шоколада",
"item.create.belt_connector": "Механический ремень",
@ -434,26 +430,27 @@
"item.create.brass_nugget": "Кусочек латуни",
"item.create.brass_sheet": "Латунный лист",
"item.create.builders_tea": "Чай Строителя",
"item.create.chest_minecart_contraption": "Сундуко-вагонеточная штуковина",
"item.create.chocolate_bucket": "Ведро шоколада",
"item.create.chocolate_glazed_berries": "Ягоды в шоколадной глазури",
"item.create.chromatic_compound": "Хроматический компаунд",
"item.create.cinder_flour": "Незераковая пыль",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "Медный слиток",
"item.create.copper_nugget": "Кусочек меди",
"item.create.copper_sheet": "Медный лист",
"item.create.crafter_slot_cover": "Крышка на слот крафтера",
"item.create.crushed_aluminum_ore": "Измельчённая алюминиевая руда",
"item.create.crushed_brass": "Дроблёная латунь",
"item.create.crushed_copper_ore": "Дроблёная медная руда",
"item.create.crushed_gold_ore": "Дроблёная золотая руда",
"item.create.crushed_iron_ore": "Дроблёная железная руда",
"item.create.crushed_lead_ore": "Дроблёная свинцовая руда",
"item.create.crushed_nickel_ore": "Дроблёная никелевая руда",
"item.create.crushed_osmium_ore": "Дроблёная осмиевая руда",
"item.create.crushed_platinum_ore": "Дроблёная платиновая руда",
"item.create.crushed_quicksilver_ore": "Дроблёная ртутная руда",
"item.create.chest_minecart_contraption": "Сундуко-вагонеточная штуковина",
"item.create.chocolate_bucket": "Ведро шоколада",
"item.create.chocolate_glazed_berries": "Ягоды в шоколадной глазури",
"item.create.chromatic_compound": "Хроматический компаунд",
"item.create.cinder_flour": "Незераковая пыль",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "Медный слиток",
"item.create.copper_nugget": "Кусочек меди",
"item.create.copper_sheet": "Медный лист",
"item.create.crafter_slot_cover": "Крышка на слот крафтера",
"item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"item.create.crushed_aluminum_ore": "Измельчённая алюминиевая руда",
"item.create.crushed_brass": "Дроблёная латунь",
"item.create.crushed_copper_ore": "Дроблёная медная руда",
"item.create.crushed_gold_ore": "Дроблёная золотая руда",
"item.create.crushed_iron_ore": "Дроблёная железная руда",
"item.create.crushed_lead_ore": "Дроблёная свинцовая руда",
"item.create.crushed_nickel_ore": "Дроблёная никелевая руда",
"item.create.crushed_osmium_ore": "Дроблёная осмиевая руда",
"item.create.crushed_platinum_ore": "Дроблёная платиновая руда",
"item.create.crushed_quicksilver_ore": "Дроблёная ртутная руда",
"item.create.crushed_silver_ore": "Дроблёная серебрянная руда",
"item.create.crushed_tin_ore": "Дроблёная оловянная руда",
"item.create.crushed_uranium_ore": "Дроблёная урановая руда",
@ -662,26 +659,29 @@
"itemGroup.create.base": "Create: Механизмы",
"itemGroup.create.palettes": "Create: Декор",
"death.attack.create.crush": "%1$s был передроблен",
"death.attack.create.fan_fire": "%1$s был сожжен до смерти горячим воздухом",
"death.attack.create.fan_lava": "%1$s был сожжен до смерти поклонником лавы",
"death.attack.create.mechanical_drill": "%1$s был пронзен с помощью механической дрели",
"death.attack.create.mechanical_saw": "%1$s был разрезан пополам механической пилой",
"death.attack.create.cuckoo_clock_explosion": "%1$s взорвали подделанные часы с кукушкой",
"create.block.deployer.damage_source_name": "автономным активатором",
"create.block.cart_assembler.invalid": "Поместите сборщик вагонеток на блок рельс",
"create.recipe.crushing": "Измельчение",
"create.recipe.milling": "Помол",
"create.recipe.fan_washing": "Массовая промывка",
"create.recipe.fan_washing.fan": "Вентилятор за текущей водой",
"create.recipe.fan_smoking": "Массовое копчение",
"create.recipe.fan_smoking.fan": "Вентилятор за горящим огнём",
"create.recipe.fan_blasting": "Массовое плавление",
"create.recipe.fan_blasting.fan": "Вентилятор за текущей лавой",
"create.recipe.pressing": "Прессование",
"death.attack.create.crush": "%1$s был передроблен",
"death.attack.create.fan_fire": "%1$s был сожжен до смерти горячим воздухом",
"death.attack.create.fan_lava": "%1$s был сожжен до смерти поклонником лавы",
"death.attack.create.mechanical_drill": "%1$s был пронзен с помощью механической дрели",
"death.attack.create.mechanical_saw": "%1$s был разрезан пополам механической пилой",
"death.attack.create.cuckoo_clock_explosion": "%1$s взорвали подделанные часы с кукушкой",
"create.block.deployer.damage_source_name": "автономным активатором",
"create.block.cart_assembler.invalid": "Поместите сборщик вагонеток на блок рельс",
"create.menu.return": "UNLOCALIZED: Return to Menu",
"create.menu.configure": "UNLOCALIZED: Configure...",
"create.menu.getting_started": "UNLOCALIZED: Getting Started",
"create.menu.project_page": "UNLOCALIZED: Project Page",
"create.menu.report_bugs": "UNLOCALIZED: Report Issues",
"create.menu.support": "UNLOCALIZED: Support Us",
"create.recipe.crushing": "Измельчение",
"create.recipe.milling": "Помол",
"create.recipe.fan_washing": "Массовая промывка",
"create.recipe.fan_washing.fan": "Вентилятор за текущей водой",
"create.recipe.fan_smoking": "Массовое копчение",
"create.recipe.fan_smoking.fan": "Вентилятор за горящим огнём",
"create.recipe.fan_blasting": "Массовое плавление",
"create.recipe.fan_blasting.fan": "Вентилятор за текущей лавой",
"create.recipe.pressing": "Прессование",
"create.recipe.mixing": "Смешивание",
"create.recipe.deploying": "UNLOCALIZED: Deploying",
"create.recipe.automatic_shapeless": "Автоматическая бесформенная сборка",
@ -1102,24 +1102,29 @@
"create.tooltip.chute.no_fans_attached": "Нет подключеных вентиляторов",
"create.tooltip.chute.fans_push_up": "Вентилятор толкает снизу",
"create.tooltip.chute.fans_push_down": "Вентилятор толкает сверху",
"create.tooltip.chute.fans_pull_up": "Вентилятор тянет сверху",
"create.tooltip.chute.fans_pull_down": "Вентилятор тянет снизу",
"create.tooltip.chute.contains": "Содержит: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.hint.hose_pulley.title": "Безграничное снабжение",
"create.hint.hose_pulley": "Целевой водный резервуар считается бесконечным.",
"create.hint.mechanical_arm_no_targets.title": "Нет целей",
"create.hint.mechanical_arm_no_targets": "Кажется, эта _Механическая рука_ не имеет никаких целей. Выберите _ремни_, _депо_, _воронки_, или другие блоки, с помощью _правого клика_, удерживая _Механическую руку_.",
"create.hint.empty_bearing.title": "Обновить подшипник",
"create.hint.empty_bearing": "_Правый клик_ по подшипнику _пустой рукой_, чтобы _присоединить_ к нему структуру, которую вы только что построили перед ним.",
"create.hint.full_deployer.title": "Переполнение автономного активатора",
"create.hint.full_deployer": "Похоже, этот _автономный активатор_ содержит _лишние_ _предметы_, которые необходимо _извлечь_. Используйте _воронку_ или _другие способы_, чтобы освободить его от переполнения.",
"create.tooltip.chute.fans_pull_up": "Вентилятор тянет сверху",
"create.tooltip.chute.fans_pull_down": "Вентилятор тянет снизу",
"create.tooltip.chute.contains": "Содержит: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.crafting_blueprint.crafting_slot": "UNLOCALIZED: Ingredient Slot",
"create.crafting_blueprint.filter_items_viable": "UNLOCALIZED: Advanced filter items are viable",
"create.crafting_blueprint.display_slot": "UNLOCALIZED: Display Slot",
"create.crafting_blueprint.inferred": "UNLOCALIZED: Inferred from recipe",
"create.crafting_blueprint.manually_assigned": "UNLOCALIZED: Manually assigned",
"create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot",
"create.crafting_blueprint.optional": "UNLOCALIZED: Optional",
"create.hint.hose_pulley.title": "Безграничное снабжение",
"create.hint.hose_pulley": "Целевой водный резервуар считается бесконечным.",
"create.hint.mechanical_arm_no_targets.title": "Нет целей",
"create.hint.mechanical_arm_no_targets": "Кажется, эта _Механическая рука_ не имеет никаких целей. Выберите _ремни_, _депо_, _воронки_, или другие блоки, с помощью _правого клика_, удерживая _Механическую руку_.",
"create.hint.empty_bearing.title": "Обновить подшипник",
"create.hint.empty_bearing": "_Правый клик_ по подшипнику _пустой рукой_, чтобы _присоединить_ к нему структуру, которую вы только что построили перед ним.",
"create.hint.full_deployer.title": "Переполнение автономного активатора",
"create.hint.full_deployer": "Похоже, этот _автономный активатор_ содержит _лишние_ _предметы_, которые необходимо _извлечь_. Используйте _воронку_ или _другие способы_, чтобы освободить его от переполнения.",
"create.gui.config.overlay1": "Привет :)",
"create.gui.config.overlay2": "Это образец оверлея",
@ -1596,27 +1601,24 @@
"create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails",
"create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion",
"create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered",
"create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor",
"create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
"create.ponder.chain_drive.text_3": "UNLOCALIZED: Any part of the row can be rotated by 90 degrees",
"create.ponder.chain_gearshift.header": "UNLOCALIZED: Controlling rotational speed with Chain Gearshifts",
"create.ponder.chain_gearshift.text_1": "UNLOCALIZED: Unpowered Chain Gearshifts behave exacly like Chain Drives",
"create.ponder.chain_gearshift.text_2": "UNLOCALIZED: When Powered, the speed transmitted to other Chain Drives in the row is doubled",
"create.ponder.chain_gearshift.text_3": "UNLOCALIZED: Whenever the Powered Gearshift is not at the source, its speed will be halved instead",
"create.ponder.chain_gearshift.text_4": "UNLOCALIZED: In both cases, Chain Drives in the row always run at 2x the speed of the Powered Gearshift",
"create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2",
"create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM",
"create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes",
"create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories",
"create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created",
"create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal",
"create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered",
"create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor",
"create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
"create.ponder.chain_drive.text_3": "UNLOCALIZED: Any part of the row can be rotated by 90 degrees",
"create.ponder.chain_gearshift.header": "UNLOCALIZED: Controlling rotational speed with Chain Gearshifts",
"create.ponder.chain_gearshift.text_1": "UNLOCALIZED: Unpowered Chain Gearshifts behave exactly like Chain Drives",
"create.ponder.chain_gearshift.text_2": "UNLOCALIZED: When Powered, the speed transmitted to other Chain Drives in the row is doubled",
"create.ponder.chain_gearshift.text_3": "UNLOCALIZED: Whenever the Powered Gearshift is not at the source, its speed will be halved instead",
"create.ponder.chain_gearshift.text_4": "UNLOCALIZED: In both cases, Chain Drives in the row always run at 2x the speed of the Powered Gearshift",
"create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2",
"create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM",
"create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes",
"create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories",
"create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created",
"create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal",
"create.ponder.chute_upward.header": "UNLOCALIZED: Transporting Items upward via Chutes",
"create.ponder.chute_upward.text_1": "UNLOCALIZED: Using Encased Fans at the top or bottom, a Chute can move items upward",
@ -2119,4 +2121,4 @@
"_": "Thank you for translating Create!"
}
}

View file

@ -1,15 +1,13 @@
{
"_": "Missing Localizations: 54",
"_": "->------------------------] Game Elements [------------------------<-",
"block.create.acacia_window": "金合欢窗户",
"block.create.acacia_window_pane": "金合欢窗户板",
"block.create.adjustable_chain_gearshift": "可调节链式传动箱",
"block.create.adjustable_crate": "可调节板条箱",
"block.create.adjustable_pulse_repeater": "可调节脉冲中继器",
"block.create.adjustable_repeater": "可调节中继器",
"block.create.analog_lever": "模拟拉杆",
"_": "Missing Localizations: 69",
"_": "->------------------------] Game Elements [------------------------<-",
"block.create.acacia_window": "金合欢窗户",
"block.create.acacia_window_pane": "金合欢窗户板",
"block.create.adjustable_chain_gearshift": "可调节链式传动箱",
"block.create.adjustable_crate": "可调节板条箱",
"block.create.adjustable_pulse_repeater": "可调节脉冲中继器",
"block.create.adjustable_repeater": "可调节中继器",
"block.create.analog_lever": "模拟拉杆",
"block.create.andesite_belt_funnel": "安山岩传送带漏斗",
"block.create.andesite_bricks": "安山岩砖",
"block.create.andesite_bricks_slab": "安山岩砖台阶",
@ -404,26 +402,24 @@
"block.create.weighted_ejector": "弹射置物台",
"block.create.white_sail": "白色风帆",
"block.create.white_seat": "白色坐垫",
"block.create.white_valve_handle": "白色阀门手轮",
"block.create.windmill_bearing": "风车轴承",
"block.create.wooden_bracket": "木质支架",
"block.create.yellow_sail": "黄色风帆",
"block.create.yellow_seat": "黄色坐垫",
"block.create.yellow_valve_handle": "黄色阀门手轮",
"block.create.zinc_block": "锌块",
"block.create.zinc_ore": "锌矿石",
"entity.create.contraption": "装置",
"entity.create.gantry_contraption": "起重机装置",
"entity.create.seat": "坐垫",
"entity.create.stationary_contraption": "固定装置",
"entity.create.super_glue": "强力胶",
"fluid.create.milk": "牛奶",
"fluid.create.potion": "药水",
"fluid.create.tea": "茶",
"item.create.andesite_alloy": "安山合金",
"block.create.white_valve_handle": "白色阀门手轮",
"block.create.windmill_bearing": "风车轴承",
"block.create.wooden_bracket": "木质支架",
"block.create.yellow_sail": "黄色风帆",
"block.create.yellow_seat": "黄色坐垫",
"block.create.yellow_valve_handle": "黄色阀门手轮",
"block.create.zinc_block": "锌块",
"block.create.zinc_ore": "锌矿石",
"entity.create.contraption": "装置",
"entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"entity.create.gantry_contraption": "起重机装置",
"entity.create.seat": "坐垫",
"entity.create.stationary_contraption": "固定装置",
"entity.create.super_glue": "强力胶",
"fluid.create.milk": "牛奶",
"fluid.create.potion": "药水",
"fluid.create.tea": "茶",
"item.create.andesite_alloy": "安山合金",
"item.create.attribute_filter": "属性过滤器",
"item.create.bar_of_chocolate": "巧克力棒",
"item.create.belt_connector": "传送带",
@ -434,26 +430,27 @@
"item.create.brass_nugget": "黄铜粒",
"item.create.brass_sheet": "黄铜板",
"item.create.builders_tea": "建造工茶饮",
"item.create.chest_minecart_contraption": "装配过的动力矿车",
"item.create.chocolate_bucket": "巧克力桶",
"item.create.chocolate_glazed_berries": "巧克力包层浆果",
"item.create.chromatic_compound": "异彩化合物",
"item.create.cinder_flour": "下界面粉",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "铜锭",
"item.create.copper_nugget": "铜粒",
"item.create.copper_sheet": "铜板",
"item.create.crafter_slot_cover": "合成器盖板",
"item.create.crushed_aluminum_ore": "粉碎铝矿石",
"item.create.crushed_brass": "粉碎黄铜",
"item.create.crushed_copper_ore": "粉碎铜矿石",
"item.create.crushed_gold_ore": "粉碎金矿石",
"item.create.crushed_iron_ore": "粉碎铁矿石",
"item.create.crushed_lead_ore": "粉碎铅矿石",
"item.create.crushed_nickel_ore": "粉碎镍矿石",
"item.create.crushed_osmium_ore": "粉碎锇矿石",
"item.create.crushed_platinum_ore": "粉碎铂矿石",
"item.create.crushed_quicksilver_ore": "粉碎水银矿石",
"item.create.chest_minecart_contraption": "装配过的动力矿车",
"item.create.chocolate_bucket": "巧克力桶",
"item.create.chocolate_glazed_berries": "巧克力包层浆果",
"item.create.chromatic_compound": "异彩化合物",
"item.create.cinder_flour": "下界面粉",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "铜锭",
"item.create.copper_nugget": "铜粒",
"item.create.copper_sheet": "铜板",
"item.create.crafter_slot_cover": "合成器盖板",
"item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"item.create.crushed_aluminum_ore": "粉碎铝矿石",
"item.create.crushed_brass": "粉碎黄铜",
"item.create.crushed_copper_ore": "粉碎铜矿石",
"item.create.crushed_gold_ore": "粉碎金矿石",
"item.create.crushed_iron_ore": "粉碎铁矿石",
"item.create.crushed_lead_ore": "粉碎铅矿石",
"item.create.crushed_nickel_ore": "粉碎镍矿石",
"item.create.crushed_osmium_ore": "粉碎锇矿石",
"item.create.crushed_platinum_ore": "粉碎铂矿石",
"item.create.crushed_quicksilver_ore": "粉碎水银矿石",
"item.create.crushed_silver_ore": "粉碎银矿石",
"item.create.crushed_tin_ore": "粉碎锡矿石",
"item.create.crushed_uranium_ore": "粉碎铀矿石",
@ -662,26 +659,29 @@
"itemGroup.create.base": "机械动力",
"itemGroup.create.palettes": "机械动力建筑方块",
"death.attack.create.crush": "%1$s被压扁了",
"death.attack.create.fan_fire": "%1$s试图接受热风的洗礼",
"death.attack.create.fan_lava": "%1$s在接受热风的洗礼中浴火焚身",
"death.attack.create.mechanical_drill": "%1$s被钻头钻的坏掉了",
"death.attack.create.mechanical_saw": "%1$s被圆锯切成了两截",
"death.attack.create.cuckoo_clock_explosion": "%1$s被布谷鸟钟炸得粉身碎骨",
"create.block.deployer.damage_source_name": "二五仔机械手",
"create.block.cart_assembler.invalid": "请将矿车装配器放置在铁轨上",
"create.recipe.crushing": "粉碎",
"create.recipe.milling": "研磨",
"create.recipe.fan_washing": "批量洗涤",
"create.recipe.fan_washing.fan": "在水后放置鼓风机",
"create.recipe.fan_smoking": "批量烟熏",
"create.recipe.fan_smoking.fan": "在火焰后放置鼓风机",
"create.recipe.fan_blasting": "批量熔炼",
"create.recipe.fan_blasting.fan": "在熔岩后放置鼓风机",
"create.recipe.pressing": "金属压片",
"death.attack.create.crush": "%1$s被压扁了",
"death.attack.create.fan_fire": "%1$s试图接受热风的洗礼",
"death.attack.create.fan_lava": "%1$s在接受热风的洗礼中浴火焚身",
"death.attack.create.mechanical_drill": "%1$s被钻头钻的坏掉了",
"death.attack.create.mechanical_saw": "%1$s被圆锯切成了两截",
"death.attack.create.cuckoo_clock_explosion": "%1$s被布谷鸟钟炸得粉身碎骨",
"create.block.deployer.damage_source_name": "二五仔机械手",
"create.block.cart_assembler.invalid": "请将矿车装配器放置在铁轨上",
"create.menu.return": "UNLOCALIZED: Return to Menu",
"create.menu.configure": "UNLOCALIZED: Configure...",
"create.menu.getting_started": "UNLOCALIZED: Getting Started",
"create.menu.project_page": "UNLOCALIZED: Project Page",
"create.menu.report_bugs": "UNLOCALIZED: Report Issues",
"create.menu.support": "UNLOCALIZED: Support Us",
"create.recipe.crushing": "粉碎",
"create.recipe.milling": "研磨",
"create.recipe.fan_washing": "批量洗涤",
"create.recipe.fan_washing.fan": "在水后放置鼓风机",
"create.recipe.fan_smoking": "批量烟熏",
"create.recipe.fan_smoking.fan": "在火焰后放置鼓风机",
"create.recipe.fan_blasting": "批量熔炼",
"create.recipe.fan_blasting.fan": "在熔岩后放置鼓风机",
"create.recipe.pressing": "金属压片",
"create.recipe.mixing": "混合搅拌",
"create.recipe.deploying": "UNLOCALIZED: Deploying",
"create.recipe.automatic_shapeless": "自动搅拌",
@ -1102,24 +1102,29 @@
"create.tooltip.chute.no_fans_attached": "未安装鼓风机",
"create.tooltip.chute.fans_push_up": "鼓风机从下方进行推动",
"create.tooltip.chute.fans_push_down": "鼓风机从上方进行推动",
"create.tooltip.chute.fans_pull_up": "鼓风机从上方进行吸引",
"create.tooltip.chute.fans_pull_down": "鼓风机从下方进行吸引",
"create.tooltip.chute.contains": "内含物品:%1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.hint.hose_pulley.title": "无限供应",
"create.hint.hose_pulley": "目标液体对象被视为无限量的。",
"create.hint.mechanical_arm_no_targets.title": "没有目标",
"create.hint.mechanical_arm_no_targets": "看起来这个_动力臂_没有被分配给任何_目标_。在手持机械臂的同时右击选取传送带、置物台、漏斗或其他设备来设置目标。",
"create.hint.empty_bearing.title": "更新轴承",
"create.hint.empty_bearing": "_空手右击_轴承来_激活_你新建造的结构。",
"create.hint.full_deployer.title": "机械手物品溢出",
"create.hint.full_deployer": "_机械手_包含_过剩的物品_需要被_提取。你需要_使用_料斗__漏斗_或其他方法将溢出释放出来。",
"create.tooltip.chute.fans_pull_up": "鼓风机从上方进行吸引",
"create.tooltip.chute.fans_pull_down": "鼓风机从下方进行吸引",
"create.tooltip.chute.contains": "内含物品:%1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.crafting_blueprint.crafting_slot": "UNLOCALIZED: Ingredient Slot",
"create.crafting_blueprint.filter_items_viable": "UNLOCALIZED: Advanced filter items are viable",
"create.crafting_blueprint.display_slot": "UNLOCALIZED: Display Slot",
"create.crafting_blueprint.inferred": "UNLOCALIZED: Inferred from recipe",
"create.crafting_blueprint.manually_assigned": "UNLOCALIZED: Manually assigned",
"create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot",
"create.crafting_blueprint.optional": "UNLOCALIZED: Optional",
"create.hint.hose_pulley.title": "无限供应",
"create.hint.hose_pulley": "目标液体对象被视为无限量的。",
"create.hint.mechanical_arm_no_targets.title": "没有目标",
"create.hint.mechanical_arm_no_targets": "看起来这个_动力臂_没有被分配给任何_目标_。在手持机械臂的同时右击选取传送带、置物台、漏斗或其他设备来设置目标。",
"create.hint.empty_bearing.title": "更新轴承",
"create.hint.empty_bearing": "_空手右击_轴承来_激活_你新建造的结构。",
"create.hint.full_deployer.title": "机械手物品溢出",
"create.hint.full_deployer": "_机械手_包含_过剩的物品_需要被_提取。你需要_使用_料斗__漏斗_或其他方法将溢出释放出来。",
"create.gui.config.overlay1": "Hi :)",
"create.gui.config.overlay2": "这是一个实例层",
@ -2119,4 +2124,4 @@
"_": "Thank you for translating Create!"
}
}

View file

@ -1,15 +1,13 @@
{
"_": "Missing Localizations: 47",
"_": "->------------------------] Game Elements [------------------------<-",
"block.create.acacia_window": "相思木窗戶",
"block.create.acacia_window_pane": "相思木窗戶片",
"block.create.adjustable_chain_gearshift": "可調式鏈式變速箱",
"block.create.adjustable_crate": "可調式板條箱",
"block.create.adjustable_pulse_repeater": "可調式脈衝中繼器",
"block.create.adjustable_repeater": "可調式中繼器",
"block.create.analog_lever": "可調式拉桿",
"_": "Missing Localizations: 62",
"_": "->------------------------] Game Elements [------------------------<-",
"block.create.acacia_window": "相思木窗戶",
"block.create.acacia_window_pane": "相思木窗戶片",
"block.create.adjustable_chain_gearshift": "可調式鏈式變速箱",
"block.create.adjustable_crate": "可調式板條箱",
"block.create.adjustable_pulse_repeater": "可調式脈衝中繼器",
"block.create.adjustable_repeater": "可調式中繼器",
"block.create.analog_lever": "可調式拉桿",
"block.create.andesite_belt_funnel": "安山岩輸送帶漏斗",
"block.create.andesite_bricks": "安山岩磚",
"block.create.andesite_bricks_slab": "安山岩半磚",
@ -404,26 +402,24 @@
"block.create.weighted_ejector": "物品彈射器",
"block.create.white_sail": "白色風帆",
"block.create.white_seat": "白色坐墊",
"block.create.white_valve_handle": "白色閥門開關",
"block.create.windmill_bearing": "風車軸承",
"block.create.wooden_bracket": "木製支架",
"block.create.yellow_sail": "黃色風帆",
"block.create.yellow_seat": "黃色坐墊",
"block.create.yellow_valve_handle": "黃色閥門開關",
"block.create.zinc_block": "鋅磚",
"block.create.zinc_ore": "鋅礦石",
"entity.create.contraption": "結構",
"entity.create.gantry_contraption": "門式結構",
"entity.create.seat": "坐墊",
"entity.create.stationary_contraption": "固定結構",
"entity.create.super_glue": "強力膠",
"fluid.create.milk": "牛奶",
"fluid.create.potion": "藥水",
"fluid.create.tea": "茶",
"item.create.andesite_alloy": "安山合金",
"block.create.white_valve_handle": "白色閥門開關",
"block.create.windmill_bearing": "風車軸承",
"block.create.wooden_bracket": "木製支架",
"block.create.yellow_sail": "黃色風帆",
"block.create.yellow_seat": "黃色坐墊",
"block.create.yellow_valve_handle": "黃色閥門開關",
"block.create.zinc_block": "鋅磚",
"block.create.zinc_ore": "鋅礦石",
"entity.create.contraption": "結構",
"entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"entity.create.gantry_contraption": "門式結構",
"entity.create.seat": "坐墊",
"entity.create.stationary_contraption": "固定結構",
"entity.create.super_glue": "強力膠",
"fluid.create.milk": "牛奶",
"fluid.create.potion": "藥水",
"fluid.create.tea": "茶",
"item.create.andesite_alloy": "安山合金",
"item.create.attribute_filter": "屬性過濾器",
"item.create.bar_of_chocolate": "巧克力棒",
"item.create.belt_connector": "輸送帶",
@ -434,26 +430,27 @@
"item.create.brass_nugget": "黃銅粒",
"item.create.brass_sheet": "黃銅板",
"item.create.builders_tea": "工人茶",
"item.create.chest_minecart_contraption": "裝修過的機械礦車",
"item.create.chocolate_bucket": "巧克力桶",
"item.create.chocolate_glazed_berries": "巧克力甜莓",
"item.create.chromatic_compound": "異彩化合物",
"item.create.cinder_flour": "地獄麵粉",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "銅錠",
"item.create.copper_nugget": "銅粒",
"item.create.copper_sheet": "銅板",
"item.create.crafter_slot_cover": "合成器蓋板",
"item.create.crushed_aluminum_ore": "碎狀鋁礦石",
"item.create.crushed_brass": "碎狀黃銅",
"item.create.crushed_copper_ore": "碎狀銅礦石",
"item.create.crushed_gold_ore": "碎狀金礦石",
"item.create.crushed_iron_ore": "碎狀鐵礦石",
"item.create.crushed_lead_ore": "碎狀鉛礦石",
"item.create.crushed_nickel_ore": "碎狀鎳礦石",
"item.create.crushed_osmium_ore": "碎狀鋨礦石",
"item.create.crushed_platinum_ore": "碎狀白金礦石",
"item.create.crushed_quicksilver_ore": "碎狀水銀礦石",
"item.create.chest_minecart_contraption": "裝修過的機械礦車",
"item.create.chocolate_bucket": "巧克力桶",
"item.create.chocolate_glazed_berries": "巧克力甜莓",
"item.create.chromatic_compound": "異彩化合物",
"item.create.cinder_flour": "地獄麵粉",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "銅錠",
"item.create.copper_nugget": "銅粒",
"item.create.copper_sheet": "銅板",
"item.create.crafter_slot_cover": "合成器蓋板",
"item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"item.create.crushed_aluminum_ore": "碎狀鋁礦石",
"item.create.crushed_brass": "碎狀黃銅",
"item.create.crushed_copper_ore": "碎狀銅礦石",
"item.create.crushed_gold_ore": "碎狀金礦石",
"item.create.crushed_iron_ore": "碎狀鐵礦石",
"item.create.crushed_lead_ore": "碎狀鉛礦石",
"item.create.crushed_nickel_ore": "碎狀鎳礦石",
"item.create.crushed_osmium_ore": "碎狀鋨礦石",
"item.create.crushed_platinum_ore": "碎狀白金礦石",
"item.create.crushed_quicksilver_ore": "碎狀水銀礦石",
"item.create.crushed_silver_ore": "碎狀銀礦石",
"item.create.crushed_tin_ore": "碎狀錫礦石",
"item.create.crushed_uranium_ore": "碎狀鈾礦石",
@ -662,26 +659,29 @@
"itemGroup.create.base": "動力機械",
"itemGroup.create.palettes": "動力機械建築與裝飾方塊",
"death.attack.create.crush": "%1$s被壓扁了",
"death.attack.create.fan_fire": "%1$s想接受熱風的洗禮",
"death.attack.create.fan_lava": "%1$s想接受熱風的洗禮但走火入魔",
"death.attack.create.mechanical_drill": "%1$s被鑽頭鑽爆腦袋",
"death.attack.create.mechanical_saw": "%1$s被鋸切成了兩半",
"death.attack.create.cuckoo_clock_explosion": "%1$s 被布穀鳥鐘炸得粉身碎骨",
"create.block.deployer.damage_source_name": "機械手",
"create.block.cart_assembler.invalid": "將您的礦車裝修站放在鐵軌上",
"create.recipe.crushing": "粉碎",
"create.recipe.milling": "研磨",
"create.recipe.fan_washing": "批次洗滌",
"create.recipe.fan_washing.fan": "在水後放置鼓風機",
"create.recipe.fan_smoking": "批次煙燻",
"create.recipe.fan_smoking.fan": "在火焰後放置鼓風機",
"create.recipe.fan_blasting": "批次融煉",
"create.recipe.fan_blasting.fan": "在熔岩後放置鼓風機",
"create.recipe.pressing": "金屬壓片",
"death.attack.create.crush": "%1$s被壓扁了",
"death.attack.create.fan_fire": "%1$s想接受熱風的洗禮",
"death.attack.create.fan_lava": "%1$s想接受熱風的洗禮但走火入魔",
"death.attack.create.mechanical_drill": "%1$s被鑽頭鑽爆腦袋",
"death.attack.create.mechanical_saw": "%1$s被鋸切成了兩半",
"death.attack.create.cuckoo_clock_explosion": "%1$s 被布穀鳥鐘炸得粉身碎骨",
"create.block.deployer.damage_source_name": "機械手",
"create.block.cart_assembler.invalid": "將您的礦車裝修站放在鐵軌上",
"create.menu.return": "UNLOCALIZED: Return to Menu",
"create.menu.configure": "UNLOCALIZED: Configure...",
"create.menu.getting_started": "UNLOCALIZED: Getting Started",
"create.menu.project_page": "UNLOCALIZED: Project Page",
"create.menu.report_bugs": "UNLOCALIZED: Report Issues",
"create.menu.support": "UNLOCALIZED: Support Us",
"create.recipe.crushing": "粉碎",
"create.recipe.milling": "研磨",
"create.recipe.fan_washing": "批次洗滌",
"create.recipe.fan_washing.fan": "在水後放置鼓風機",
"create.recipe.fan_smoking": "批次煙燻",
"create.recipe.fan_smoking.fan": "在火焰後放置鼓風機",
"create.recipe.fan_blasting": "批次融煉",
"create.recipe.fan_blasting.fan": "在熔岩後放置鼓風機",
"create.recipe.pressing": "金屬壓片",
"create.recipe.mixing": "混合攪拌",
"create.recipe.deploying": "UNLOCALIZED: Deploying",
"create.recipe.automatic_shapeless": "自動攪拌",
@ -1102,24 +1102,29 @@
"create.tooltip.chute.no_fans_attached": "未安裝鼓風機",
"create.tooltip.chute.fans_push_up": "鼓風機從下方進行推動",
"create.tooltip.chute.fans_push_down": "鼓風機從上方進行推動",
"create.tooltip.chute.fans_pull_up": "鼓風機從下方進行吸引",
"create.tooltip.chute.fans_pull_down": "鼓風機從上方進行吸引",
"create.tooltip.chute.contains": "物品: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.hint.hose_pulley.title": "無限供應",
"create.hint.hose_pulley": "目標液體為無限供應",
"create.hint.mechanical_arm_no_targets.title": "沒有目標",
"create.hint.mechanical_arm_no_targets": "看起來這個_機械手臂_沒有被分配任何_目標_。在手持機械手臂的同時右鍵選取輸送帶、置物臺、漏斗或其他設備來設定目標。",
"create.hint.empty_bearing.title": "更新軸承",
"create.hint.empty_bearing": "_空手右鍵_軸承來_添加_你新建造的結構。",
"create.hint.full_deployer.title": "機械手物品溢出",
"create.hint.full_deployer": "_機械手_包含_過剩的物品_需要被_取出._使用漏斗_或其他方法將溢出解決。",
"create.tooltip.chute.fans_pull_up": "鼓風機從下方進行吸引",
"create.tooltip.chute.fans_pull_down": "鼓風機從上方進行吸引",
"create.tooltip.chute.contains": "物品: %1$s x%2$s",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.crafting_blueprint.crafting_slot": "UNLOCALIZED: Ingredient Slot",
"create.crafting_blueprint.filter_items_viable": "UNLOCALIZED: Advanced filter items are viable",
"create.crafting_blueprint.display_slot": "UNLOCALIZED: Display Slot",
"create.crafting_blueprint.inferred": "UNLOCALIZED: Inferred from recipe",
"create.crafting_blueprint.manually_assigned": "UNLOCALIZED: Manually assigned",
"create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot",
"create.crafting_blueprint.optional": "UNLOCALIZED: Optional",
"create.hint.hose_pulley.title": "無限供應",
"create.hint.hose_pulley": "目標液體為無限供應",
"create.hint.mechanical_arm_no_targets.title": "沒有目標",
"create.hint.mechanical_arm_no_targets": "看起來這個_機械手臂_沒有被分配任何_目標_。在手持機械手臂的同時右鍵選取輸送帶、置物臺、漏斗或其他設備來設定目標。",
"create.hint.empty_bearing.title": "更新軸承",
"create.hint.empty_bearing": "_空手右鍵_軸承來_添加_你新建造的結構。",
"create.hint.full_deployer.title": "機械手物品溢出",
"create.hint.full_deployer": "_機械手_包含_過剩的物品_需要被_取出._使用漏斗_或其他方法將溢出解決。",
"create.gui.config.overlay1": "嗨 :)",
"create.gui.config.overlay2": "這是一個實例層",
@ -2119,4 +2124,4 @@
"_": "Thank you for translating Create!"
}
}

View file

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

View file

@ -71,7 +71,7 @@ public class InstancedRenderDispatcher {
Minecraft mc = Minecraft.getInstance();
ClientWorld world = mc.world;
Entity renderViewEntity = mc.renderViewEntity;
Entity renderViewEntity = mc.renderViewEntity != null ? mc.renderViewEntity : mc.player;
if (renderViewEntity == null) return;

View file

@ -93,20 +93,22 @@ public class AllBlockPartials {
SPOUT_TOP = get("spout/top"), SPOUT_MIDDLE = get("spout/middle"), SPOUT_BOTTOM = get("spout/bottom"),
SPEED_CONTROLLER_BRACKET = get("rotation_speed_controller/bracket"),
SPEED_CONTROLLER_BRACKET = get("rotation_speed_controller/bracket"),
GOGGLES = get("goggles"),
GOGGLES = get("goggles"),
EJECTOR_TOP = get("weighted_ejector/top"),
EJECTOR_TOP = get("weighted_ejector/top"),
COPPER_BACKTANK_SHAFT = get("copper_backtank/block_shaft_input"),
COPPER_BACKTANK_COGS = get("copper_backtank/block_cogs"),
COPPER_BACKTANK_SHAFT = get("copper_backtank/block_shaft_input"),
COPPER_BACKTANK_COGS = get("copper_backtank/block_cogs"),
COUPLING_ATTACHMENT = getEntity("minecart_coupling/attachment"),
COUPLING_RING = getEntity("minecart_coupling/ring"),
COUPLING_CONNECTOR = getEntity("minecart_coupling/connector")
CRAFTING_BLUEPRINT_1x1 = getEntity("crafting_blueprint_small"),
CRAFTING_BLUEPRINT_2x2 = getEntity("crafting_blueprint_medium"),
CRAFTING_BLUEPRINT_3x3 = getEntity("crafting_blueprint_large"),
;
COUPLING_ATTACHMENT = getEntity("minecart_coupling/attachment"),
COUPLING_RING = getEntity("minecart_coupling/ring"),
COUPLING_CONNECTOR = getEntity("minecart_coupling/connector");
public static final Map<FluidTransportBehaviour.AttachmentTypes, Map<Direction, PartialModel>> PIPE_ATTACHMENTS = new HashMap<>();
public static final Map<BlazeBurnerBlock.HeatLevel, PartialModel> BLAZES = new HashMap<>();

View file

@ -156,6 +156,7 @@ import com.simibubi.create.content.logistics.block.redstone.RedstoneLinkGenerato
import com.simibubi.create.content.logistics.block.redstone.StockpileSwitchBlock;
import com.simibubi.create.content.schematics.block.SchematicTableBlock;
import com.simibubi.create.content.schematics.block.SchematicannonBlock;
import com.simibubi.create.foundation.block.DyedBlockList;
import com.simibubi.create.foundation.block.ItemUseOverrides;
import com.simibubi.create.foundation.config.StressConfigDefaults;
import com.simibubi.create.foundation.data.AssetLookup;
@ -165,6 +166,7 @@ import com.simibubi.create.foundation.data.CreateRegistrate;
import com.simibubi.create.foundation.data.ModelGen;
import com.simibubi.create.foundation.data.SharedProperties;
import com.simibubi.create.foundation.item.TooltipHelper;
import com.simibubi.create.foundation.utility.ColorHandlers;
import com.simibubi.create.foundation.utility.DyeHelper;
import com.simibubi.create.foundation.worldgen.OxidizingBlock;
import com.tterrag.registrate.providers.RegistrateRecipeProvider;
@ -626,33 +628,29 @@ public class AllBlocks {
.transform(BuilderTransformers.valveHandle(null))
.register();
public static final BlockEntry<?>[] DYED_VALVE_HANDLES = new BlockEntry<?>[DyeColor.values().length];
static {
for (DyeColor colour : DyeColor.values()) {
String colourName = colour.getString();
DYED_VALVE_HANDLES[colour.ordinal()] = REGISTRATE.block(colourName + "_valve_handle", ValveHandleBlock::dyed)
.transform(BuilderTransformers.valveHandle(colour))
.recipe((c, p) -> ShapedRecipeBuilder.shapedRecipe(c.get())
.patternLine("#")
.patternLine("-")
.key('#', DyeHelper.getTagOfDye(colour))
.key('-', AllItemTags.VALVE_HANDLES.tag)
.addCriterion("has_valve", RegistrateRecipeProvider.hasItem(AllItemTags.VALVE_HANDLES.tag))
.build(p, Create.asResource("crafting/kinetics/" + c.getName() + "_from_other_valve_handle")))
.register();
}
}
public static final DyedBlockList<ValveHandleBlock> DYED_VALVE_HANDLES = new DyedBlockList<>(colour -> {
String colourName = colour.getString();
return REGISTRATE.block(colourName + "_valve_handle", ValveHandleBlock::dyed)
.transform(BuilderTransformers.valveHandle(colour))
.recipe((c, p) -> ShapedRecipeBuilder.shapedRecipe(c.get())
.patternLine("#")
.patternLine("-")
.key('#', DyeHelper.getTagOfDye(colour))
.key('-', AllItemTags.VALVE_HANDLES.tag)
.addCriterion("has_valve", RegistrateRecipeProvider.hasItem(AllItemTags.VALVE_HANDLES.tag))
.build(p, Create.asResource("crafting/kinetics/" + c.getName() + "_from_other_valve_handle")))
.register();
});
public static final BlockEntry<FluidTankBlock> FLUID_TANK = REGISTRATE.block("fluid_tank", FluidTankBlock::regular)
.initialProperties(SharedProperties::softMetal)
.properties(AbstractBlock.Properties::nonOpaque)
.blockstate(new FluidTankGenerator()::generate)
.onRegister(CreateRegistrate.blockModel(() -> FluidTankModel::standard))
.addLayer(() -> RenderType::getCutoutMipped)
.item(FluidTankItem::new)
.model(AssetLookup.<FluidTankItem>customBlockItemModel("_", "block_single_window"))
.build()
.initialProperties(SharedProperties::softMetal)
.properties(AbstractBlock.Properties::nonOpaque)
.blockstate(new FluidTankGenerator()::generate)
.onRegister(CreateRegistrate.blockModel(() -> FluidTankModel::standard))
.addLayer(() -> RenderType::getCutoutMipped)
.item(FluidTankItem::new)
.model(AssetLookup.<FluidTankItem>customBlockItemModel("_", "block_single_window"))
.build()
.register();
public static final BlockEntry<FluidTankBlock> CREATIVE_FLUID_TANK =
@ -838,11 +836,11 @@ public class AllBlocks {
.register();
public static final BlockEntry<ControllerRailBlock> CONTROLLER_RAIL =
REGISTRATE.block("controller_rail", ControllerRailBlock::new)
.initialProperties(() -> Blocks.POWERED_RAIL)
.blockstate(new ControllerRailGenerator()::generate)
.addLayer(() -> RenderType::getCutoutMipped)
.onRegister(CreateRegistrate.blockColors(() -> AllColorHandlers::getRedstonePower))
REGISTRATE.block("controller_rail", ControllerRailBlock::new)
.initialProperties(() -> Blocks.POWERED_RAIL)
.blockstate(new ControllerRailGenerator()::generate)
.addLayer(() -> RenderType::getCutoutMipped)
.color(() -> ColorHandlers::getRedstonePower)
.tag(BlockTags.RAILS)
.item()
.model((c, p) -> p.generated(c, Create.asResource("block/" + c.getName())))
@ -951,105 +949,93 @@ public class AllBlocks {
.addLayer(() -> RenderType::getCutoutMipped)
.item()
.transform(customItemModel())
.register();
.register();
public static final BlockEntry<PloughBlock> MECHANICAL_PLOUGH =
REGISTRATE.block("mechanical_plough", PloughBlock::new)
.initialProperties(SharedProperties::stone)
.onRegister(addMovementBehaviour(new PloughMovementBehaviour()))
.blockstate(BlockStateGen.horizontalBlockProvider(false))
.simpleItem()
.register();
REGISTRATE.block("mechanical_plough", PloughBlock::new)
.initialProperties(SharedProperties::stone)
.onRegister(addMovementBehaviour(new PloughMovementBehaviour()))
.blockstate(BlockStateGen.horizontalBlockProvider(false))
.simpleItem()
.register();
public static final BlockEntry<?>[] SEATS = new BlockEntry<?>[DyeColor.values().length];
static {
// SEATS
for (DyeColor colour : DyeColor.values()) {
String colourName = colour.getString();
SeatMovementBehaviour movementBehaviour = new SeatMovementBehaviour();
SEATS[colour.ordinal()] =
REGISTRATE.block(colourName + "_seat", p -> new SeatBlock(p, colour == DyeColor.RED))
.initialProperties(SharedProperties::wooden)
.onRegister(addMovementBehaviour(movementBehaviour))
.blockstate((c, p) -> {
p.simpleBlock(c.get(), p.models()
public static final DyedBlockList<SeatBlock> SEATS = new DyedBlockList<>(colour -> {
String colourName = colour.getString();
SeatMovementBehaviour movementBehaviour = new SeatMovementBehaviour();
return REGISTRATE.block(colourName + "_seat", p -> new SeatBlock(p, colour == DyeColor.RED))
.initialProperties(SharedProperties::wooden)
.onRegister(addMovementBehaviour(movementBehaviour))
.blockstate((c, p) -> {
p.simpleBlock(c.get(), p.models()
.withExistingParent(colourName + "_seat", p.modLoc("block/seat"))
.texture("1", p.modLoc("block/seat/top_" + colourName))
.texture("2", p.modLoc("block/seat/side_" + colourName)));
})
.recipe((c, p) -> {
ShapedRecipeBuilder.shapedRecipe(c.get())
})
.recipe((c, p) -> {
ShapedRecipeBuilder.shapedRecipe(c.get())
.patternLine("#")
.patternLine("-")
.key('#', DyeHelper.getWoolOfDye(colour))
.key('-', ItemTags.WOODEN_SLABS)
.addCriterion("has_wool", RegistrateRecipeProvider.hasItem(ItemTags.WOOL))
.build(p, Create.asResource("crafting/kinetics/" + c.getName()));
ShapedRecipeBuilder.shapedRecipe(c.get())
ShapedRecipeBuilder.shapedRecipe(c.get())
.patternLine("#")
.patternLine("-")
.key('#', DyeHelper.getTagOfDye(colour))
.key('-', AllItemTags.SEATS.tag)
.addCriterion("has_seat", RegistrateRecipeProvider.hasItem(AllItemTags.SEATS.tag))
.build(p, Create.asResource("crafting/kinetics/" + c.getName() + "_from_other_seat"));
})
.onRegisterAfter(Item.class, v -> TooltipHelper.referTo(v, "block.create.seat"))
.tag(AllBlockTags.SEATS.tag)
.item()
.tag(AllItemTags.SEATS.tag)
.build()
.register();
}
}
})
.onRegisterAfter(Item.class, v -> TooltipHelper.referTo(v, "block.create.seat"))
.tag(AllBlockTags.SEATS.tag)
.item()
.tag(AllItemTags.SEATS.tag)
.build()
.register();
});
public static final BlockEntry<SailBlock> SAIL_FRAME = REGISTRATE.block("sail_frame", p -> SailBlock.frame(p))
.initialProperties(SharedProperties::wooden)
.properties(Block.Properties::nonOpaque)
.blockstate(BlockStateGen.directionalBlockProvider(false))
.tag(AllBlockTags.WINDMILL_SAILS.tag)
.tag(AllBlockTags.FAN_TRANSPARENT.tag)
.simpleItem()
.register();
public static final BlockEntry<?>[] DYED_SAILS = new BlockEntry<?>[DyeColor.values().length];
.initialProperties(SharedProperties::wooden)
.properties(Block.Properties::nonOpaque)
.blockstate(BlockStateGen.directionalBlockProvider(false))
.tag(AllBlockTags.WINDMILL_SAILS.tag)
.tag(AllBlockTags.FAN_TRANSPARENT.tag)
.simpleItem()
.register();
public static final BlockEntry<SailBlock> SAIL = REGISTRATE.block("white_sail", p -> SailBlock.withCanvas(p))
.initialProperties(SharedProperties::wooden)
.properties(Block.Properties::nonOpaque)
.blockstate(BlockStateGen.directionalBlockProvider(false))
.tag(AllBlockTags.WINDMILL_SAILS.tag)
.simpleItem()
.register();
.initialProperties(SharedProperties::wooden)
.properties(Block.Properties::nonOpaque)
.blockstate(BlockStateGen.directionalBlockProvider(false))
.tag(AllBlockTags.WINDMILL_SAILS.tag)
.simpleItem()
.register();
static {
// DYED SAILS
for (DyeColor colour : DyeColor.values()) {
if (colour == DyeColor.WHITE) {
DYED_SAILS[colour.ordinal()] = SAIL;
continue;
}
String colourName = colour.getString();
DYED_SAILS[colour.ordinal()] = REGISTRATE.block(colourName + "_sail", p -> SailBlock.withCanvas(p))
public static final DyedBlockList<SailBlock> DYED_SAILS = new DyedBlockList<>(colour -> {
if (colour == DyeColor.WHITE) {
return SAIL;
}
String colourName = colour.getString();
return REGISTRATE.block(colourName + "_sail", p -> SailBlock.withCanvas(p))
.properties(Block.Properties::nonOpaque)
.initialProperties(SharedProperties::wooden)
.blockstate((c, p) -> p.directionalBlock(c.get(), p.models()
.withExistingParent(colourName + "_sail", p.modLoc("block/white_sail"))
.texture("0", p.modLoc("block/sail/canvas_" + colourName))))
.withExistingParent(colourName + "_sail", p.modLoc("block/white_sail"))
.texture("0", p.modLoc("block/sail/canvas_" + colourName))))
.tag(AllBlockTags.WINDMILL_SAILS.tag)
.tag(AllBlockTags.SAILS.tag)
.loot((p, b) -> p.registerDropping(b, SAIL.get()))
.register();
}
}
});
public static final BlockEntry<CasingBlock> ANDESITE_CASING = REGISTRATE.block("andesite_casing", CasingBlock::new)
.transform(BuilderTransformers.casing(AllSpriteShifts.ANDESITE_CASING))
.register();
.transform(BuilderTransformers.casing(AllSpriteShifts.ANDESITE_CASING))
.register();
public static final BlockEntry<CasingBlock> BRASS_CASING = REGISTRATE.block("brass_casing", CasingBlock::new)
.transform(BuilderTransformers.casing(AllSpriteShifts.BRASS_CASING))
.register();
.transform(BuilderTransformers.casing(AllSpriteShifts.BRASS_CASING))
.register();
public static final BlockEntry<CasingBlock> COPPER_CASING = REGISTRATE.block("copper_casing", CasingBlock::new)
.transform(BuilderTransformers.casing(AllSpriteShifts.COPPER_CASING))

View file

@ -1,64 +0,0 @@
package com.simibubi.create;
import java.util.HashMap;
import java.util.Map;
import net.minecraft.block.Block;
import net.minecraft.block.RedstoneWireBlock;
import net.minecraft.client.renderer.color.BlockColors;
import net.minecraft.client.renderer.color.IBlockColor;
import net.minecraft.client.renderer.color.IItemColor;
import net.minecraft.client.renderer.color.ItemColors;
import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.util.IItemProvider;
import net.minecraft.world.GrassColors;
import net.minecraft.world.biome.BiomeColors;
import net.minecraftforge.client.event.ColorHandlerEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
public class AllColorHandlers {
private final Map<Block, IBlockColor> coloredBlocks = new HashMap<>();
private final Map<IItemProvider, IItemColor> coloredItems = new HashMap<>();
//
public static IBlockColor getGrassyBlock() {
return (state, world, pos, layer) -> pos != null && world != null ? BiomeColors.getGrassColor(world, pos)
: GrassColors.get(0.5D, 1.0D);
}
public static IItemColor getGrassyItem() {
return (stack, layer) -> GrassColors.get(0.5D, 1.0D);
}
public static IBlockColor getRedstonePower() {
return (state, world, pos, layer) -> RedstoneWireBlock
.getWireColor(pos != null && world != null ? state.get(BlockStateProperties.POWER_0_15) : 0);
}
//
public void register(Block block, IBlockColor color) {
coloredBlocks.put(block, color);
}
public void register(IItemProvider item, IItemColor color) {
coloredItems.put(item, color);
}
//
@SubscribeEvent
public void registerBlockColors(ColorHandlerEvent.Block event) {
BlockColors blockColors = event.getBlockColors();
coloredBlocks.forEach((block, color) -> blockColors.register(color, block));
}
@SubscribeEvent
public void registerItemColors(ColorHandlerEvent.Item event) {
ItemColors itemColors = event.getItemColors();
coloredItems.forEach((item, color) -> itemColors.register(color, item));
}
}

View file

@ -1,5 +1,7 @@
package com.simibubi.create;
import com.simibubi.create.content.curiosities.tools.BlueprintContainer;
import com.simibubi.create.content.curiosities.tools.BlueprintScreen;
import com.simibubi.create.content.logistics.block.inventories.AdjustableCrateContainer;
import com.simibubi.create.content.logistics.block.inventories.AdjustableCrateScreen;
import com.simibubi.create.content.logistics.item.LinkedControllerContainer;
@ -30,21 +32,25 @@ public class AllContainerTypes {
register("schematicannon", SchematicannonContainer::new, () -> SchematicannonScreen::new);
public static final ContainerEntry<AdjustableCrateContainer> FLEXCRATE =
register("flexcrate", AdjustableCrateContainer::new, () -> AdjustableCrateScreen::new);
register("flexcrate", AdjustableCrateContainer::new, () -> AdjustableCrateScreen::new);
public static final ContainerEntry<FilterContainer> FILTER =
register("filter", FilterContainer::new, () -> FilterScreen::new);
register("filter", FilterContainer::new, () -> FilterScreen::new);
public static final ContainerEntry<AttributeFilterContainer> ATTRIBUTE_FILTER =
register("attribute_filter", AttributeFilterContainer::new, () -> AttributeFilterScreen::new);
register("attribute_filter", AttributeFilterContainer::new, () -> AttributeFilterScreen::new);
public static final ContainerEntry<BlueprintContainer> CRAFTING_BLUEPRINT =
register("crafting_blueprint", BlueprintContainer::new, () -> BlueprintScreen::new);
public static final ContainerEntry<LinkedControllerContainer> LINKED_CONTROLLER =
register("linked_controller", LinkedControllerContainer::new, () -> LinkedControllerScreen::new);
register("linked_controller", LinkedControllerContainer::new, () -> LinkedControllerScreen::new);
private static <C extends Container, S extends Screen & IHasContainer<C>> ContainerEntry<C> register(String name, ForgeContainerFactory<C> factory, NonNullSupplier<ScreenFactory<C, S>> screenFactory) {
return Create.registrate().container(name, factory, screenFactory).register();
}
public static void register() {}
public static void register() {
}
}

View file

@ -9,6 +9,8 @@ import com.simibubi.create.content.contraptions.components.structureMovement.Ori
import com.simibubi.create.content.contraptions.components.structureMovement.gantry.GantryContraptionEntity;
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.curiosities.tools.BlueprintEntity;
import com.simibubi.create.content.curiosities.tools.BlueprintRenderer;
import com.simibubi.create.foundation.utility.Lang;
import com.tterrag.registrate.util.entry.EntityEntry;
import com.tterrag.registrate.util.nullness.NonNullConsumer;
@ -35,6 +37,11 @@ public class AllEntityTypes {
public static final EntityEntry<SuperGlueEntity> SUPER_GLUE =
register("super_glue", SuperGlueEntity::new, () -> SuperGlueRenderer::new,
EntityClassification.MISC, 10, Integer.MAX_VALUE, false, true, SuperGlueEntity::build);
public static final EntityEntry<BlueprintEntity> CRAFTING_BLUEPRINT =
register("crafting_blueprint", BlueprintEntity::new, () -> BlueprintRenderer::new,
EntityClassification.MISC, 10, Integer.MAX_VALUE, false, true, BlueprintEntity::build);
public static final EntityEntry<SeatEntity> SEAT =
register("seat", SeatEntity::new, () -> SeatEntity.Render::new,
EntityClassification.MISC, 0, Integer.MAX_VALUE, false, true, SeatEntity::build);

View file

@ -35,6 +35,7 @@ import com.simibubi.create.content.curiosities.armor.DivingBootsItem;
import com.simibubi.create.content.curiosities.armor.DivingHelmetItem;
import com.simibubi.create.content.curiosities.symmetry.SymmetryWandItem;
import com.simibubi.create.content.curiosities.symmetry.client.SymmetryWandModel;
import com.simibubi.create.content.curiosities.tools.BlueprintItem;
import com.simibubi.create.content.curiosities.tools.ExtendoGripItem;
import com.simibubi.create.content.curiosities.tools.ExtendoGripModel;
import com.simibubi.create.content.curiosities.tools.SandPaperItem;
@ -125,10 +126,10 @@ public class AllItems {
BRASS_INGOT = taggedIngredient("brass_ingot", forgeItemTag("ingots/brass"), CREATE_INGOTS.tag);
public static final ItemEntry<ChromaticCompoundItem> CHROMATIC_COMPOUND =
REGISTRATE.item("chromatic_compound", ChromaticCompoundItem::new)
.properties(p -> p.rarity(Rarity.UNCOMMON))
.model(AssetLookup.existingItemModel())
.onRegister(CreateRegistrate.itemColors(() -> ChromaticCompoundColor::new))
REGISTRATE.item("chromatic_compound", ChromaticCompoundItem::new)
.properties(p -> p.rarity(Rarity.UNCOMMON))
.model(AssetLookup.existingItemModel())
.color(() -> ChromaticCompoundColor::new)
.register();
public static final ItemEntry<ShadowSteelItem> SHADOW_STEEL = REGISTRATE.item("shadow_steel", ShadowSteelItem::new)
@ -186,25 +187,29 @@ public class AllItems {
public static final ItemEntry<GogglesItem> GOGGLES = REGISTRATE.item("goggles", GogglesItem::new)
.properties(p -> p.maxStackSize(1))
.onRegister(CreateRegistrate.itemModel(() -> GogglesModel::new))
.lang("Engineer's Goggles")
.register();
public static final ItemEntry<SuperGlueItem> SUPER_GLUE = REGISTRATE.item("super_glue", SuperGlueItem::new)
.register();
public static final ItemEntry<MinecartCouplingItem> MINECART_COUPLING =
REGISTRATE.item("minecart_coupling", MinecartCouplingItem::new)
.onRegister(CreateRegistrate.itemModel(() -> GogglesModel::new))
.lang("Engineer's Goggles")
.register();
public static final ItemEntry<SuperGlueItem> SUPER_GLUE = REGISTRATE.item("super_glue", SuperGlueItem::new)
.register();
public static final ItemEntry<MinecartCouplingItem> MINECART_COUPLING =
REGISTRATE.item("minecart_coupling", MinecartCouplingItem::new)
.register();
public static final ItemEntry<BlueprintItem> CRAFTING_BLUEPRINT =
REGISTRATE.item("crafting_blueprint", BlueprintItem::new)
.register();
public static final ItemEntry<SandPaperItem> SAND_PAPER = REGISTRATE.item("sand_paper", SandPaperItem::new)
.transform(CreateRegistrate.customRenderedItem(() -> SandPaperModel::new))
.register();
.transform(CreateRegistrate.customRenderedItem(() -> SandPaperModel::new))
.register();
public static final ItemEntry<SandPaperItem> RED_SAND_PAPER = REGISTRATE.item("red_sand_paper", SandPaperItem::new)
.transform(CreateRegistrate.customRenderedItem(() -> SandPaperModel::new))
.onRegister(s -> TooltipHelper.referTo(s, SAND_PAPER))
.register();
.transform(CreateRegistrate.customRenderedItem(() -> SandPaperModel::new))
.onRegister(s -> TooltipHelper.referTo(s, SAND_PAPER))
.register();
public static final ItemEntry<WrenchItem> WRENCH = REGISTRATE.item("wrench", WrenchItem::new)
.properties(p -> p.maxStackSize(1))
@ -222,7 +227,7 @@ public class AllItems {
.transform(CreateRegistrate.customRenderedItem(() -> LinkedControllerModel::new))
.model(AssetLookup.itemModelWithPartials())
.register();
public static final ItemEntry<SymmetryWandItem> WAND_OF_SYMMETRY =
REGISTRATE.item("wand_of_symmetry", SymmetryWandItem::new)
.transform(CreateRegistrate.customRenderedItem(() -> SymmetryWandModel::new))

View file

@ -250,7 +250,7 @@ public class AllTileEntities {
.tileEntity("hand_crank", HandCrankTileEntity::new)
.instance(() -> HandCrankInstance::new)
.validBlocks(AllBlocks.HAND_CRANK, AllBlocks.COPPER_VALVE_HANDLE)
.validBlocks(AllBlocks.DYED_VALVE_HANDLES)
.validBlocks(AllBlocks.DYED_VALVE_HANDLES.toArray())
.renderer(() -> HandCrankRenderer::new)
.register();

View file

@ -54,7 +54,7 @@ public class Create {
public static final String ID = "create";
public static final String NAME = "Create";
public static final String VERSION = "0.3.1c";
public static final String VERSION = "0.3.2";
public static final Logger LOGGER = LogManager.getLogger();

View file

@ -21,8 +21,8 @@ import com.simibubi.create.foundation.block.render.CustomBlockModels;
import com.simibubi.create.foundation.block.render.SpriteShifter;
import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.gui.UIRenderHelper;
import com.simibubi.create.foundation.item.CustomItemModels;
import com.simibubi.create.foundation.item.CustomRenderedItems;
import com.simibubi.create.foundation.item.render.CustomItemModels;
import com.simibubi.create.foundation.item.render.CustomRenderedItems;
import com.simibubi.create.foundation.ponder.content.PonderIndex;
import com.simibubi.create.foundation.ponder.elements.WorldSectionElement;
import com.simibubi.create.foundation.render.SuperByteBufferCache;
@ -66,12 +66,10 @@ public class CreateClient {
private static CustomBlockModels customBlockModels;
private static CustomItemModels customItemModels;
private static CustomRenderedItems customRenderedItems;
private static AllColorHandlers colorHandlers;
private static CasingConnectivity casingConnectivity;
public static void addClientListeners(IEventBus modEventBus) {
modEventBus.addListener(CreateClient::clientInit);
modEventBus.register(getColorHandler());
modEventBus.addListener(CreateClient::onTextureStitch);
modEventBus.addListener(CreateClient::onModelRegistry);
modEventBus.addListener(CreateClient::onModelBake);
@ -186,12 +184,6 @@ public class CreateClient {
return customBlockModels;
}
public static AllColorHandlers getColorHandler() {
if (colorHandlers == null)
colorHandlers = new AllColorHandlers();
return colorHandlers;
}
public static CasingConnectivity getCasingConnectivity() {
if (casingConnectivity == null)
casingConnectivity = new CasingConnectivity();

View file

@ -0,0 +1,31 @@
package com.simibubi.create.compat.jei;
import com.simibubi.create.content.curiosities.tools.BlueprintAssignCompleteRecipePacket;
import com.simibubi.create.content.curiosities.tools.BlueprintContainer;
import com.simibubi.create.foundation.networking.AllPackets;
import mezz.jei.api.gui.IRecipeLayout;
import mezz.jei.api.recipe.transfer.IRecipeTransferError;
import mezz.jei.api.recipe.transfer.IRecipeTransferHandler;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.crafting.IRecipe;
public class BlueprintTransferHandler implements IRecipeTransferHandler<BlueprintContainer> {
@Override
public Class<BlueprintContainer> getContainerClass() {
return BlueprintContainer.class;
}
@Override
public IRecipeTransferError transferRecipe(BlueprintContainer container, Object recipe, IRecipeLayout recipeLayout,
PlayerEntity player, boolean maxTransfer, boolean doTransfer) {
if (!(recipe instanceof IRecipe))
return null;
IRecipe<?> iRecipe = (IRecipe<?>) recipe;
// Continued server-side in BlueprintItem.assignCompleteRecipe()
AllPackets.channel.sendToServer(new BlueprintAssignCompleteRecipePacket(iRecipe.getId()));
return null;
}
}

View file

@ -39,6 +39,7 @@ import com.simibubi.create.content.contraptions.components.press.MechanicalPress
import com.simibubi.create.content.contraptions.components.saw.SawTileEntity;
import com.simibubi.create.content.contraptions.fluids.recipe.PotionMixingRecipeManager;
import com.simibubi.create.content.contraptions.processing.BasinRecipe;
import com.simibubi.create.content.curiosities.tools.BlueprintScreen;
import com.simibubi.create.content.logistics.block.inventories.AdjustableCrateScreen;
import com.simibubi.create.content.logistics.item.filter.AbstractFilterScreen;
import com.simibubi.create.content.logistics.item.filter.AttributeFilterScreen;
@ -51,10 +52,12 @@ import com.simibubi.create.foundation.config.ConfigBase.ConfigBool;
import mezz.jei.api.IModPlugin;
import mezz.jei.api.JeiPlugin;
import mezz.jei.api.constants.VanillaRecipeCategoryUid;
import mezz.jei.api.registration.IGuiHandlerRegistration;
import mezz.jei.api.registration.IRecipeCatalystRegistration;
import mezz.jei.api.registration.IRecipeCategoryRegistration;
import mezz.jei.api.registration.IRecipeRegistration;
import mezz.jei.api.registration.IRecipeTransferRegistration;
import mezz.jei.api.runtime.IIngredientManager;
import net.minecraft.client.Minecraft;
import net.minecraft.item.ItemStack;
@ -84,16 +87,16 @@ public class CreateJEI implements IModPlugin {
private final List<CreateRecipeCategory<?>> allCategories = new ArrayList<>();
private final CreateRecipeCategory<?>
milling = register("milling", MillingCategory::new).recipes(AllRecipeTypes.MILLING)
milling = register("milling", MillingCategory::new).recipes(AllRecipeTypes.MILLING)
.catalyst(AllBlocks.MILLSTONE::get)
.build(),
crushing = register("crushing", CrushingCategory::new).recipes(AllRecipeTypes.CRUSHING)
crushing = register("crushing", CrushingCategory::new).recipes(AllRecipeTypes.CRUSHING)
.recipesExcluding(AllRecipeTypes.MILLING::getType, AllRecipeTypes.CRUSHING::getType)
.catalyst(AllBlocks.CRUSHING_WHEEL::get)
.build(),
pressing = register("pressing", PressingCategory::new).recipes(AllRecipeTypes.PRESSING)
pressing = register("pressing", PressingCategory::new).recipes(AllRecipeTypes.PRESSING)
.catalyst(AllBlocks.MECHANICAL_PRESS::get)
.build(),
@ -167,9 +170,10 @@ public class CreateJEI implements IModPlugin {
.catalyst(AllItems.SAND_PAPER::get)
.catalyst(AllItems.RED_SAND_PAPER::get)
.build(),
deploying = register("deploying", DeployingCategory::new)
.recipeList(() -> DeployerApplicationRecipe.convert(findRecipesByType(AllRecipeTypes.SANDPAPER_POLISHING.type)))
.recipeList(
() -> DeployerApplicationRecipe.convert(findRecipesByType(AllRecipeTypes.SANDPAPER_POLISHING.type)))
.recipes(AllRecipeTypes.DEPLOYING)
.catalyst(AllBlocks.DEPLOYER::get)
.catalyst(AllBlocks.DEPOT::get)
@ -203,16 +207,19 @@ public class CreateJEI implements IModPlugin {
mechanicalCrafting =
register("mechanical_crafting", MechanicalCraftingCategory::new).recipes(AllRecipeTypes.MECHANICAL_CRAFTING)
.catalyst(AllBlocks.MECHANICAL_CRAFTER::get)
.build()
;
.catalyst(AllBlocks.MECHANICAL_CRAFTER::get)
.build();
private <T extends IRecipe<?>> CategoryBuilder<T> register(String name,
Supplier<CreateRecipeCategory<T>> supplier) {
Supplier<CreateRecipeCategory<T>> supplier) {
return new CategoryBuilder<T>(name, supplier);
}
@Override
public void registerRecipeTransferHandlers(IRecipeTransferRegistration registration) {
registration.addRecipeTransferHandler(new BlueprintTransferHandler(), VanillaRecipeCategoryUid.CRAFTING);
}
@Override
public void registerCategories(IRecipeCategoryRegistration registration) {
allCategories.forEach(registration::addRecipeCategories);
@ -238,7 +245,8 @@ public class CreateJEI implements IModPlugin {
registration.addGuiContainerHandler(SchematicTableScreen.class, slotMover);
registration.addGuiContainerHandler(FilterScreen.class, slotMover);
registration.addGuiContainerHandler(AttributeFilterScreen.class, slotMover);
registration.addGhostIngredientHandler(AbstractFilterScreen.class, new FilterGhostIngredientHandler());
registration.addGhostIngredientHandler(AbstractFilterScreen.class, new GhostIngredientHandler());
registration.addGhostIngredientHandler(BlueprintScreen.class, new GhostIngredientHandler());
}
private class CategoryBuilder<T extends IRecipe<?>> {
@ -278,14 +286,14 @@ public class CreateJEI implements IModPlugin {
return recipeList(list, null);
}
public CategoryBuilder<T> recipeList(Supplier<List<? extends IRecipe<?>>> list, Function<IRecipe<?>, T> converter) {
public CategoryBuilder<T> recipeList(Supplier<List<? extends IRecipe<?>>> list,
Function<IRecipe<?>, T> converter) {
recipeListConsumers.add(recipes -> {
List<? extends IRecipe<?>> toAdd = list.get();
if (converter != null)
toAdd = toAdd
.stream()
.map(converter)
.collect(Collectors.toList());
toAdd = toAdd.stream()
.map(converter)
.collect(Collectors.toList());
recipes.addAll(toAdd);
});
return this;

View file

@ -5,12 +5,10 @@ import java.util.List;
import javax.annotation.ParametersAreNonnullByDefault;
import org.apache.logging.log4j.LogManager;
import com.simibubi.create.content.logistics.item.filter.AbstractFilterContainer;
import com.simibubi.create.content.logistics.item.filter.AbstractFilterScreen;
import com.simibubi.create.content.logistics.item.filter.AttributeFilterScreen;
import com.simibubi.create.content.logistics.item.filter.FilterScreenPacket;
import com.simibubi.create.foundation.gui.AbstractSimiContainerScreen;
import com.simibubi.create.foundation.gui.GhostItemContainer;
import com.simibubi.create.foundation.gui.GhostItemSubmitPacket;
import com.simibubi.create.foundation.networking.AllPackets;
import mcp.MethodsReturnNonnullByDefault;
@ -18,21 +16,20 @@ import mezz.jei.api.gui.handlers.IGhostIngredientHandler;
import net.minecraft.client.renderer.Rectangle2d;
import net.minecraft.inventory.container.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT;
@MethodsReturnNonnullByDefault
@ParametersAreNonnullByDefault
public class FilterGhostIngredientHandler<T extends AbstractFilterContainer>
implements IGhostIngredientHandler<AbstractFilterScreen<T>> {
public class GhostIngredientHandler<T extends GhostItemContainer<?>>
implements IGhostIngredientHandler<AbstractSimiContainerScreen<T>> {
@Override
public <I> List<Target<I>> getTargets(AbstractFilterScreen<T> gui, I ingredient, boolean doStart) {
public <I> List<Target<I>> getTargets(AbstractSimiContainerScreen<T> gui, I ingredient, boolean doStart) {
List<Target<I>> targets = new ArrayList<>();
boolean isAttributeFilter = gui instanceof AttributeFilterScreen;
if (ingredient instanceof ItemStack) {
for (int i = 36; i < gui.getContainer().inventorySlots.size(); i++) {
targets.add(new FilterGhostTarget<>(gui, i - 36, isAttributeFilter));
targets.add(new GhostTarget<>(gui, i - 36, isAttributeFilter));
// Only accept items in 1st slot. 2nd is used for functionality, don't wanna override that one
if (isAttributeFilter)
@ -44,7 +41,8 @@ public class FilterGhostIngredientHandler<T extends AbstractFilterContainer>
}
@Override
public void onComplete() {}
public void onComplete() {
}
@Override
public boolean shouldHighlightTargets() {
@ -52,14 +50,14 @@ public class FilterGhostIngredientHandler<T extends AbstractFilterContainer>
return true;
}
private static class FilterGhostTarget<I, T extends AbstractFilterContainer> implements Target<I> {
private static class GhostTarget<I, T extends GhostItemContainer<?>> implements Target<I> {
private final Rectangle2d area;
private final AbstractFilterScreen<T> gui;
private final AbstractSimiContainerScreen<T> gui;
private final int slotIndex;
private final boolean isAttributeFilter;
public FilterGhostTarget(AbstractFilterScreen<T> gui, int slotIndex, boolean isAttributeFilter) {
public GhostTarget(AbstractSimiContainerScreen<T> gui, int slotIndex, boolean isAttributeFilter) {
this.gui = gui;
this.slotIndex = slotIndex;
this.isAttributeFilter = isAttributeFilter;
@ -75,19 +73,14 @@ public class FilterGhostIngredientHandler<T extends AbstractFilterContainer>
@Override
public void accept(I ingredient) {
ItemStack stack = ((ItemStack) ingredient).copy();
LogManager.getLogger()
.info(stack);
stack.setCount(1);
gui.getContainer().filterInventory.setStackInSlot(slotIndex, stack);
gui.getContainer().ghostInventory.setStackInSlot(slotIndex, stack);
if (isAttributeFilter)
return;
// sync new filter contents with server
CompoundNBT data = new CompoundNBT();
data.putInt("Slot", slotIndex);
data.put("Item", stack.serializeNBT());
AllPackets.channel.sendToServer(new FilterScreenPacket(FilterScreenPacket.Option.UPDATE_FILTER_ITEM, data));
AllPackets.channel.sendToServer(new GhostItemSubmitPacket(stack, slotIndex));
}
}
}

View file

@ -16,6 +16,7 @@ import com.simibubi.create.foundation.utility.BlockHelper;
import com.simibubi.create.foundation.utility.VecHelper;
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.block.CocoaBlock;
@ -151,24 +152,28 @@ public class HarvesterMovementBehaviour extends MovementBehaviour {
}
private BlockState cutCrop(World world, BlockPos pos, BlockState state) {
if (state.getBlock() instanceof CropsBlock) {
CropsBlock crop = (CropsBlock) state.getBlock();
Block block = state.getBlock();
if (block instanceof CropsBlock) {
CropsBlock crop = (CropsBlock) block;
return crop.withAge(0);
}
if (state.getBlock() == Blocks.SUGAR_CANE || state.getBlock() == Blocks.KELP) {
if (block == Blocks.SWEET_BERRY_BUSH) {
return state.with(BlockStateProperties.AGE_0_3, Integer.valueOf(1));
}
if (block == Blocks.SUGAR_CANE || block == Blocks.KELP) {
if (state.getFluidState()
.isEmpty())
.isEmpty())
return Blocks.AIR.getDefaultState();
return state.getFluidState()
.getBlockState();
.getBlockState();
}
if (state.getCollisionShape(world, pos)
.isEmpty() || state.getBlock() instanceof CocoaBlock) {
.isEmpty() || block instanceof CocoaBlock) {
for (Property<?> property : state.getProperties()) {
if (!(property instanceof IntegerProperty))
continue;
if (!property.getName()
.equals(BlockStateProperties.AGE_0_1.getName()))
.equals(BlockStateProperties.AGE_0_1.getName()))
continue;
return state.with((IntegerProperty) property, Integer.valueOf(0));
}

View file

@ -96,12 +96,12 @@ public class SeatBlock extends Block {
ItemStack heldItem = player.getHeldItem(hand);
for (DyeColor color : DyeColor.values()) {
if (!heldItem.getItem()
.isIn(DyeHelper.getTagOfDye(color)))
.isIn(DyeHelper.getTagOfDye(color)))
continue;
if (world.isRemote)
return ActionResultType.SUCCESS;
BlockState newState = AllBlocks.SEATS[color.ordinal()].getDefaultState();
BlockState newState = AllBlocks.SEATS.get(color).getDefaultState();
if (newState != state)
world.setBlockState(pos, newState);
return ActionResultType.SUCCESS;
@ -148,5 +148,5 @@ public class SeatBlock extends Block {
public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) {
return false;
}
}

View file

@ -66,10 +66,24 @@ public class CuckooClockTileEntity extends KineticTileEntity {
if (getSpeed() == 0)
return;
int dayTime = (int) (world.getDayTime() % 24000);
boolean isNatural = world.getDimension().isNatural();
int dayTime = (int) ((world.getDayTime() * (isNatural ? 1 : 24)) % 24000);
int hours = (dayTime / 1000 + 6) % 24;
int minutes = (dayTime % 1000) * 60 / 1000;
if (!isNatural) {
if (world.isRemote) {
moveHands(hours, minutes);
if (AnimationTickHolder.getTicks() % 6 == 0)
playSound(SoundEvents.BLOCK_NOTE_BLOCK_HAT, 1 / 16f, 2f);
else if (AnimationTickHolder.getTicks() % 3 == 0)
playSound(SoundEvents.BLOCK_NOTE_BLOCK_HAT, 1 / 16f, 1.5f);
}
return;
}
if (!world.isRemote) {
if (animationType == Animation.NONE) {
if (hours == 12 && minutes < 5)

View file

@ -48,7 +48,7 @@ public class ValveHandleBlock extends HandCrankBlock {
if (worldIn.isRemote)
return ActionResultType.SUCCESS;
BlockState newState = AllBlocks.DYED_VALVE_HANDLES[color.ordinal()]
BlockState newState = AllBlocks.DYED_VALVE_HANDLES.get(color)
.getDefaultState()
.with(FACING, state.get(FACING));
if (newState != state)

View file

@ -92,34 +92,29 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock implements ITE
if (AllBlocks.CRUSHING_WHEEL.has(otherState)) {
controllerShouldExist = true;
try {
CrushingWheelTileEntity te = getTileEntity(world, pos);
CrushingWheelTileEntity otherTe = getTileEntity(world, otherWheelPos);
CrushingWheelTileEntity te = getTileEntity(world, pos);
CrushingWheelTileEntity otherTe = getTileEntity(world, otherWheelPos);
if (te != null && otherTe != null && (te.getSpeed() > 0) != (otherTe.getSpeed() > 0)
&& te.getSpeed() != 0) {
Axis wheelAxis = state.get(AXIS);
Axis sideAxis = side.getAxis();
int controllerADO = Math.round(Math.signum(te.getSpeed())) * side.getAxisDirection().getOffset();
Vector3d controllerDirVec = new Vector3d(wheelAxis == Axis.X ? 1 : 0
, wheelAxis == Axis.Y ? 1 : 0
, wheelAxis == Axis.Z ? 1 : 0)
.crossProduct(new Vector3d(sideAxis == Axis.X ? 1 : 0
, sideAxis == Axis.Y ? 1 : 0
, sideAxis == Axis.Z ? 1 : 0));
if (te != null && otherTe != null && (te.getSpeed() > 0) != (otherTe.getSpeed() > 0)
&& te.getSpeed() != 0) {
Axis wheelAxis = state.get(AXIS);
Axis sideAxis = side.getAxis();
int controllerADO = Math.round(Math.signum(te.getSpeed())) * side.getAxisDirection().getOffset();
Vector3d controllerDirVec = new Vector3d(wheelAxis == Axis.X ? 1 : 0
, wheelAxis == Axis.Y ? 1 : 0
, wheelAxis == Axis.Z ? 1 : 0)
.crossProduct(new Vector3d(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);
controllerNewDirection = Direction.getFacingFromVector(controllerDirVec.x * controllerADO
, controllerDirVec.y * controllerADO
, controllerDirVec.z * controllerADO);
controllerShouldBeValid = true;
}
if (otherState.get(AXIS) != state.get(AXIS))
controllerShouldExist = false;
} catch (TileEntityException e) {
controllerShouldExist = false;
controllerShouldBeValid = true;
}
if (otherState.get(AXIS) != state.get(AXIS))
controllerShouldExist = false;
}
if (!controllerShouldExist) {
@ -149,27 +144,25 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock implements ITE
@Override
public void onEntityCollision(BlockState state, World worldIn, BlockPos pos, Entity entityIn) {
try {
CrushingWheelTileEntity te = getTileEntity(worldIn, pos);
if (entityIn.getY() < pos.getY() + 1.25f || !entityIn.isOnGround())
return;
if (entityIn.getY() < pos.getY() + 1.25f || !entityIn.isOnGround())
return;
double x = 0;
double z = 0;
float speed = getTileEntityOptional(worldIn, pos).map(CrushingWheelTileEntity::getSpeed)
.orElse(0f);
if (state.get(AXIS) == Axis.X) {
z = te.getSpeed() / 20f;
x += (pos.getX() + .5f - entityIn.getX()) * .1f;
}
if (state.get(AXIS) == Axis.Z) {
x = te.getSpeed() / -20f;
z += (pos.getZ() + .5f - entityIn.getZ()) * .1f;
}
entityIn.setMotion(entityIn.getMotion()
.add(x, 0, z));
double x = 0;
double z = 0;
} catch (TileEntityException e) {
if (state.get(AXIS) == Axis.X) {
z = speed / 20f;
x += (pos.getX() + .5f - entityIn.getX()) * .1f;
}
if (state.get(AXIS) == Axis.Z) {
x = speed / -20f;
z += (pos.getZ() + .5f - entityIn.getZ()) * .1f;
}
entityIn.setMotion(entityIn.getMotion()
.add(x, 0, z));
}
@Override

View file

@ -91,28 +91,28 @@ public class CrushingWheelControllerBlock extends DirectionalBlock
});
}
public void checkEntityForProcessing(World worldIn, BlockPos pos, Entity entityIn){
try {
CrushingWheelControllerTileEntity te = getTileEntity(worldIn, pos);
if (te.crushingspeed == 0)
return;
if (entityIn instanceof ItemEntity)
((ItemEntity) entityIn).setPickupDelay(10);
CompoundNBT data = entityIn.getPersistentData();
if (data.contains("BypassCrushingWheel")) {
if (pos.equals(NBTUtil.readBlockPos(data.getCompound("BypassCrushingWheel"))))
return;
}
if (te.isOccupied())
return;
boolean isPlayer = entityIn instanceof PlayerEntity;
if (isPlayer && ((PlayerEntity) entityIn).isCreative())
return;
if (isPlayer && entityIn.world.getDifficulty() == Difficulty.PEACEFUL)
public void checkEntityForProcessing(World worldIn, BlockPos pos, Entity entityIn) {
CrushingWheelControllerTileEntity te = getTileEntity(worldIn, pos);
if (te == null)
return;
if (te.crushingspeed == 0)
return;
if (entityIn instanceof ItemEntity)
((ItemEntity) entityIn).setPickupDelay(10);
CompoundNBT data = entityIn.getPersistentData();
if (data.contains("BypassCrushingWheel")) {
if (pos.equals(NBTUtil.readBlockPos(data.getCompound("BypassCrushingWheel"))))
return;
}
if (te.isOccupied())
return;
boolean isPlayer = entityIn instanceof PlayerEntity;
if (isPlayer && ((PlayerEntity) entityIn).isCreative())
return;
if (isPlayer && entityIn.world.getDifficulty() == Difficulty.PEACEFUL)
return;
te.startCrushing(entityIn);
} catch (TileEntityException e) {}
te.startCrushing(entityIn);
}
@Override
@ -167,26 +167,26 @@ public class CrushingWheelControllerBlock extends DirectionalBlock
@Override
public VoxelShape getCollisionShape(BlockState state, IBlockReader worldIn, BlockPos pos,
ISelectionContext context) {
VoxelShape standardShape = AllShapes.CRUSHING_WHEEL_CONTROLLER_COLLISION.get(state.get(FACING));
if (!state.get(VALID))
return AllShapes.CRUSHING_WHEEL_CONTROLLER_COLLISION.get(state.get(FACING));
return standardShape;
Entity entity = context.getEntity();
if (entity != null) {
if (entity == null)
return standardShape;
CompoundNBT data = entity.getPersistentData();
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 {
CrushingWheelControllerTileEntity te = getTileEntity(worldIn, pos);
if (te.processingEntity == entity)
CompoundNBT data = entity.getPersistentData();
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();
} catch (TileEntityException e) {}
}
return AllShapes.CRUSHING_WHEEL_CONTROLLER_COLLISION.get(state.get(FACING));
CrushingWheelControllerTileEntity te = getTileEntity(worldIn, pos);
if (te != null && te.processingEntity == entity)
return VoxelShapes.empty();
return standardShape;
}
@Override
@ -202,7 +202,7 @@ public class CrushingWheelControllerBlock extends DirectionalBlock
public Class<CrushingWheelControllerTileEntity> getTileEntityClass() {
return CrushingWheelControllerTileEntity.class;
}
@Override
public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) {
return false;

View file

@ -274,7 +274,7 @@ public class DeployerHandler {
// Use on block
if (useBlock != DENY && flag1
&& safeOnUse(clickedState, world, clickedPos, player, hand, result) == ActionResultType.SUCCESS)
&& safeOnUse(clickedState, world, clickedPos, player, hand, result).isAccepted())
return;
if (stack.isEmpty())
return;
@ -299,7 +299,7 @@ public class DeployerHandler {
// 'Inert' item use behaviour & block placement
ActionResultType onItemUse = stack.onItemUse(itemusecontext);
if (onItemUse == ActionResultType.SUCCESS)
if (onItemUse.isAccepted())
return;
if (item == Items.ENDER_PEARL)
return;

View file

@ -99,13 +99,10 @@ public class MillstoneBlock extends KineticBlock implements ITE<MillstoneTileEnt
return;
MillstoneTileEntity millstone = null;
for (BlockPos pos : Iterate.hereAndBelow(entityIn.getBlockPos())) {
try {
for (BlockPos pos : Iterate.hereAndBelow(entityIn.getBlockPos()))
if (millstone == null)
millstone = getTileEntity(worldIn, pos);
} catch (TileEntityException e) {
continue;
}
}
if (millstone == null)
return;
@ -142,7 +139,7 @@ public class MillstoneBlock extends KineticBlock implements ITE<MillstoneTileEnt
public Class<MillstoneTileEntity> getTileEntityClass() {
return MillstoneTileEntity.class;
}
@Override
public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) {
return false;

View file

@ -1,6 +1,7 @@
package com.simibubi.create.content.contraptions.components.structureMovement;
import com.simibubi.create.AllTileEntities;
import com.simibubi.create.content.contraptions.processing.ProcessingInventory;
import com.simibubi.create.content.logistics.block.inventories.AdjustableCrateBlock;
import com.simibubi.create.content.logistics.block.inventories.BottomlessItemHandler;
import com.simibubi.create.foundation.utility.NBTHelper;
@ -44,7 +45,8 @@ public class MountedStorage {
return true;
LazyOptional<IItemHandler> capability = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY);
return capability.orElse(null) instanceof ItemStackHandler;
IItemHandler handler = capability.orElse(null);
return handler instanceof ItemStackHandler && !(handler instanceof ProcessingInventory);
}
public MountedStorage(TileEntity te) {

View file

@ -177,21 +177,23 @@ public class ClockworkBearingTileEntity extends KineticTileEntity
}
protected float getHourTarget(boolean cycle24) {
int dayTime = (int) (world.getDayTime() % 24000);
boolean isNatural = world.getDimension().isNatural();
int dayTime = (int) ((world.getDayTime() * (isNatural ? 1 : 24)) % 24000);
int hours = (dayTime / 1000 + 6) % 24;
int offset = getBlockState().get(ClockworkBearingBlock.FACING)
.getAxisDirection()
.getOffset();
.getAxisDirection()
.getOffset();
float hourTarget = (float) (offset * -360 / (cycle24 ? 24f : 12f) * (hours % (cycle24 ? 24 : 12)));
return hourTarget;
}
protected float getMinuteTarget() {
int dayTime = (int) (world.getDayTime() % 24000);
boolean isNatural = world.getDimension().isNatural();
int dayTime = (int) ((world.getDayTime() * (isNatural ? 1 : 24)) % 24000);
int minutes = (dayTime % 1000) * 60 / 1000;
int offset = getBlockState().get(ClockworkBearingBlock.FACING)
.getAxisDirection()
.getOffset();
.getAxisDirection()
.getOffset();
float minuteTarget = (float) (offset * -360 / 60f * (minutes));
return minuteTarget;
}

View file

@ -97,7 +97,7 @@ public class SailBlock extends ProperDirectionalBlock {
protected void applyDye(BlockState state, World world, BlockPos pos, @Nullable DyeColor color) {
BlockState newState =
(color == null ? AllBlocks.SAIL_FRAME : AllBlocks.DYED_SAILS[color.ordinal()]).getDefaultState()
(color == null ? AllBlocks.SAIL_FRAME : AllBlocks.DYED_SAILS.get(color)).getDefaultState()
.with(FACING, state.get(FACING));
// Dye the block itself

View file

@ -182,16 +182,18 @@ public class SuperGlueEntity extends Entity implements IEntityAdditionalSpawnDat
public boolean onValidSurface() {
BlockPos pos = hangingPosition;
BlockPos pos2 = hangingPosition.offset(getFacingDirection().getOpposite());
if (pos2.getY() >= 256)
return false;
if (!world.isAreaLoaded(pos, 0) || !world.isAreaLoaded(pos2, 0))
return true;
if (!isValidFace(world, pos2, getFacingDirection())
&& !isValidFace(world, pos, getFacingDirection().getOpposite()))
&& !isValidFace(world, pos, getFacingDirection().getOpposite()))
return false;
if (isSideSticky(world, pos2, getFacingDirection())
|| isSideSticky(world, pos, getFacingDirection().getOpposite()))
|| isSideSticky(world, pos, getFacingDirection().getOpposite()))
return false;
return world.getEntitiesInAABBexcluding(this, getBoundingBox(), e -> e instanceof SuperGlueEntity)
.isEmpty();
.isEmpty();
}
public static boolean isValidFace(World world, BlockPos pos, Direction direction) {

View file

@ -2,8 +2,6 @@ package com.simibubi.create.content.contraptions.components.structureMovement.mo
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@ -11,21 +9,12 @@ import javax.annotation.Nullable;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllShapes;
import com.simibubi.create.AllTileEntities;
import com.simibubi.create.content.contraptions.components.structureMovement.AssemblyException;
import com.simibubi.create.content.contraptions.components.structureMovement.OrientedContraptionEntity;
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerTileEntity.CartMovementMode;
import com.simibubi.create.content.contraptions.components.structureMovement.train.CouplingHandler;
import com.simibubi.create.content.contraptions.components.structureMovement.train.capability.CapabilityMinecartController;
import com.simibubi.create.content.contraptions.components.structureMovement.train.capability.MinecartController;
import com.simibubi.create.content.contraptions.components.tracks.ControllerRailBlock;
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
import com.simibubi.create.content.schematics.ISpecialBlockItemRequirement;
import com.simibubi.create.content.schematics.ItemRequirement;
import com.simibubi.create.content.schematics.ItemRequirement.ItemUseType;
import com.simibubi.create.foundation.block.ITE;
import com.simibubi.create.foundation.utility.Couple;
import com.simibubi.create.foundation.utility.Iterate;
import com.simibubi.create.foundation.utility.VecHelper;
import net.minecraft.block.AbstractRailBlock;
import net.minecraft.block.Block;
@ -41,7 +30,6 @@ import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemUseContext;
import net.minecraft.loot.LootContext;
import net.minecraft.loot.LootParameters;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.pathfinding.PathType;
import net.minecraft.state.BooleanProperty;
import net.minecraft.state.EnumProperty;
@ -60,17 +48,14 @@ import net.minecraft.util.SoundCategory;
import net.minecraft.util.SoundEvents;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.shapes.ISelectionContext;
import net.minecraft.util.math.shapes.VoxelShape;
import net.minecraft.util.math.shapes.VoxelShapes;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.util.math.vector.Vector3i;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.IWorldReader;
import net.minecraft.world.World;
import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.common.util.LazyOptional;
public class CartAssemblerBlock extends AbstractRailBlock
implements ITE<CartAssemblerTileEntity>, IWrenchable, ISpecialBlockItemRequirement {
@ -138,42 +123,7 @@ public class CartAssemblerBlock extends AbstractRailBlock
if (world.isRemote)
return;
withTileEntityDo(world, pos, te -> {
if (!te.isMinecartUpdateValid())
return;
CartAssemblerAction action = getActionForCart(state, cart);
if (action.shouldAssemble())
assemble(world, pos, cart);
if (action.shouldDisassemble())
disassemble(world, pos, cart);
if (action == CartAssemblerAction.ASSEMBLE_ACCELERATE) {
Direction facing = cart.getAdjustedHorizontalFacing();
RailShape railShape = state.get(RAIL_SHAPE);
for (Direction d : Iterate.directionsInAxis(railShape == RailShape.EAST_WEST ? Axis.X : Axis.Z))
if (world.getBlockState(pos.offset(d))
.isNormalCube(world, pos.offset(d)))
facing = d.getOpposite();
float speed = getRailMaxSpeed(state, world, pos, cart);
cart.setMotion(facing.getXOffset() * speed, facing.getYOffset() * speed, facing.getZOffset() * speed);
}
if (action == CartAssemblerAction.ASSEMBLE_ACCELERATE_DIRECTIONAL) {
Vector3i accelerationVector = ControllerRailBlock.getAccelerationVector(
AllBlocks.CONTROLLER_RAIL.getDefaultState()
.with(ControllerRailBlock.SHAPE, state.get(RAIL_SHAPE))
.with(ControllerRailBlock.BACKWARDS, state.get(RAIL_TYPE) == CartAssembleRailType.CONTROLLER_RAIL_BACKWARDS));
float speed = getRailMaxSpeed(state, world, pos, cart);
cart.setMotion(Vector3d.of(accelerationVector).scale(speed));
}
if (action == CartAssemblerAction.DISASSEMBLE_BRAKE) {
Vector3d diff = VecHelper.getCenterOf(pos)
.subtract(cart.getPositionVec());
cart.setMotion(diff.x / 16f, 0, diff.z / 16f);
}
});
withTileEntityDo(world, pos, te -> te.assembleNextTick(cart));
}
public enum CartAssemblerAction {
@ -245,124 +195,6 @@ public class CartAssemblerBlock extends AbstractRailBlock
return ActionResultType.PASS;
}
protected void assemble(World world, BlockPos pos, AbstractMinecartEntity cart) {
if (!cart.getPassengers()
.isEmpty())
return;
LazyOptional<MinecartController> optional =
cart.getCapability(CapabilityMinecartController.MINECART_CONTROLLER_CAPABILITY);
if (optional.isPresent() && optional.orElse(null)
.isCoupledThroughContraption())
return;
Optional<CartAssemblerTileEntity> assembler = getTileEntityOptional(world, pos);
CartMovementMode mode = assembler.map(te -> CartMovementMode.values()[te.movementMode.value])
.orElse(CartMovementMode.ROTATE);
MountedContraption contraption = new MountedContraption(mode);
try {
if (!contraption.assemble(world, pos))
return;
assembler.ifPresent(te -> {
te.lastException = null;
te.sendData();
});
} catch (AssemblyException e) {
assembler.ifPresent(te -> {
te.lastException = e;
te.sendData();
});
return;
}
boolean couplingFound = contraption.connectedCart != null;
Optional<Direction> initialOrientation = cart.getMotion()
.length() < 1 / 512f ? Optional.empty() : Optional.of(cart.getAdjustedHorizontalFacing());
if (couplingFound) {
cart.setPosition(pos.getX() + .5f, pos.getY(), pos.getZ() + .5f);
if (!CouplingHandler.tryToCoupleCarts(null, world, cart.getEntityId(),
contraption.connectedCart.getEntityId()))
return;
}
contraption.removeBlocksFromWorld(world, BlockPos.ZERO);
contraption.startMoving(world);
contraption.expandBoundsAroundAxis(Axis.Y);
if (couplingFound) {
Vector3d diff = contraption.connectedCart.getPositionVec()
.subtract(cart.getPositionVec());
initialOrientation = Optional.of(Direction.fromAngle(MathHelper.atan2(diff.z, diff.x) * 180 / Math.PI));
}
OrientedContraptionEntity entity = OrientedContraptionEntity.create(world, contraption, initialOrientation);
if (couplingFound)
entity.setCouplingId(cart.getUniqueID());
entity.setPosition(pos.getX(), pos.getY(), pos.getZ());
world.addEntity(entity);
entity.startRiding(cart);
if (cart instanceof FurnaceMinecartEntity) {
CompoundNBT nbt = cart.serializeNBT();
nbt.putDouble("PushZ", 0);
nbt.putDouble("PushX", 0);
cart.deserializeNBT(nbt);
}
}
protected void disassemble(World world, BlockPos pos, AbstractMinecartEntity cart) {
if (cart.getPassengers()
.isEmpty())
return;
Entity entity = cart.getPassengers()
.get(0);
if (!(entity instanceof OrientedContraptionEntity))
return;
OrientedContraptionEntity contraption = (OrientedContraptionEntity) entity;
UUID couplingId = contraption.getCouplingId();
if (couplingId == null) {
disassembleCart(cart);
return;
}
Couple<MinecartController> coupledCarts = contraption.getCoupledCartsIfPresent();
if (coupledCarts == null)
return;
// Make sure connected cart is present and being disassembled
for (boolean current : Iterate.trueAndFalse) {
MinecartController minecartController = coupledCarts.get(current);
if (minecartController.cart() == cart)
continue;
BlockPos otherPos = minecartController.cart()
.getBlockPos();
BlockState blockState = world.getBlockState(otherPos);
if (!AllBlocks.CART_ASSEMBLER.has(blockState))
return;
if (!getActionForCart(blockState, minecartController.cart()).shouldDisassemble())
return;
}
for (boolean current : Iterate.trueAndFalse)
coupledCarts.get(current)
.removeConnection(current);
disassembleCart(cart);
}
protected void disassembleCart(AbstractMinecartEntity cart) {
cart.removePassengers();
if (cart instanceof FurnaceMinecartEntity) {
CompoundNBT nbt = cart.serializeNBT();
nbt.putDouble("PushZ", cart.getMotion().x);
nbt.putDouble("PushX", cart.getMotion().z);
cart.deserializeNBT(nbt);
}
}
@Override
public void neighborChanged(@Nonnull BlockState state, @Nonnull World worldIn, @Nonnull BlockPos pos,
@Nonnull Block blockIn, @Nonnull BlockPos fromPos, boolean isMoving) {

View file

@ -1,9 +1,17 @@
package com.simibubi.create.content.contraptions.components.structureMovement.mounted;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.contraptions.components.structureMovement.AssemblyException;
import com.simibubi.create.content.contraptions.components.structureMovement.IDisplayAssemblyExceptions;
import com.simibubi.create.content.contraptions.components.structureMovement.OrientedContraptionEntity;
import com.simibubi.create.content.contraptions.components.structureMovement.train.CouplingHandler;
import com.simibubi.create.content.contraptions.components.structureMovement.train.capability.CapabilityMinecartController;
import com.simibubi.create.content.contraptions.components.structureMovement.train.capability.MinecartController;
import com.simibubi.create.content.contraptions.components.tracks.ControllerRailBlock;
import com.simibubi.create.foundation.gui.AllIcons;
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
@ -11,15 +19,26 @@ import com.simibubi.create.foundation.tileEntity.behaviour.CenteredSideValueBoxT
import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform;
import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.INamedIconOptions;
import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollOptionBehaviour;
import com.simibubi.create.foundation.utility.Couple;
import com.simibubi.create.foundation.utility.Iterate;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.VecHelper;
import net.minecraft.block.BlockState;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.minecart.AbstractMinecartEntity;
import net.minecraft.entity.item.minecart.FurnaceMinecartEntity;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.state.properties.RailShape;
import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.Direction;
import net.minecraft.util.Direction.Axis;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.util.math.vector.Vector3i;
import net.minecraft.world.World;
import net.minecraftforge.common.util.LazyOptional;
public class CartAssemblerTileEntity extends SmartTileEntity implements IDisplayAssemblyExceptions {
private static final int assemblyCooldown = 8;
@ -28,6 +47,8 @@ public class CartAssemblerTileEntity extends SmartTileEntity implements IDisplay
private int ticksSinceMinecartUpdate;
protected AssemblyException lastException;
protected AbstractMinecartEntity cartToAssemble;
public CartAssemblerTileEntity(TileEntityType<? extends CartAssemblerTileEntity> type) {
super(type);
ticksSinceMinecartUpdate = assemblyCooldown;
@ -39,12 +60,172 @@ public class CartAssemblerTileEntity extends SmartTileEntity implements IDisplay
if (ticksSinceMinecartUpdate < assemblyCooldown) {
ticksSinceMinecartUpdate++;
}
tryAssemble(cartToAssemble);
cartToAssemble = null;
}
public void tryAssemble(AbstractMinecartEntity cart) {
if (cart == null)
return;
if (!isMinecartUpdateValid())
return;
resetTicksSinceMinecartUpdate();
BlockState state = world.getBlockState(pos);
if (!AllBlocks.CART_ASSEMBLER.has(state))
return;
CartAssemblerBlock block = (CartAssemblerBlock) state.getBlock();
CartAssemblerBlock.CartAssemblerAction action = CartAssemblerBlock.getActionForCart(state, cart);
if (action.shouldAssemble())
assemble(world, pos, cart);
if (action.shouldDisassemble())
disassemble(world, pos, cart);
if (action == CartAssemblerBlock.CartAssemblerAction.ASSEMBLE_ACCELERATE) {
Direction facing = cart.getAdjustedHorizontalFacing();
RailShape railShape = state.get(CartAssemblerBlock.RAIL_SHAPE);
for (Direction d : Iterate.directionsInAxis(railShape == RailShape.EAST_WEST ? Axis.X : Axis.Z))
if (world.getBlockState(pos.offset(d))
.isNormalCube(world, pos.offset(d)))
facing = d.getOpposite();
float speed = block.getRailMaxSpeed(state, world, pos, cart);
cart.setMotion(facing.getXOffset() * speed, facing.getYOffset() * speed, facing.getZOffset() * speed);
}
if (action == CartAssemblerBlock.CartAssemblerAction.ASSEMBLE_ACCELERATE_DIRECTIONAL) {
Vector3i accelerationVector = ControllerRailBlock.getAccelerationVector(
AllBlocks.CONTROLLER_RAIL.getDefaultState()
.with(ControllerRailBlock.SHAPE, state.get(CartAssemblerBlock.RAIL_SHAPE))
.with(ControllerRailBlock.BACKWARDS, state.get(CartAssemblerBlock.RAIL_TYPE) == CartAssembleRailType.CONTROLLER_RAIL_BACKWARDS));
float speed = block.getRailMaxSpeed(state, world, pos, cart);
cart.setMotion(Vector3d.of(accelerationVector).scale(speed));
}
if (action == CartAssemblerBlock.CartAssemblerAction.DISASSEMBLE_BRAKE) {
Vector3d diff = VecHelper.getCenterOf(pos)
.subtract(cart.getPositionVec());
cart.setMotion(diff.x / 16f, 0, diff.z / 16f);
}
}
protected void assemble(World world, BlockPos pos, AbstractMinecartEntity cart) {
if (!cart.getPassengers()
.isEmpty())
return;
LazyOptional<MinecartController> optional =
cart.getCapability(CapabilityMinecartController.MINECART_CONTROLLER_CAPABILITY);
if (optional.isPresent() && optional.orElse(null)
.isCoupledThroughContraption())
return;
CartMovementMode mode = CartMovementMode.values()[movementMode.value];
MountedContraption contraption = new MountedContraption(mode);
try {
if (!contraption.assemble(world, pos))
return;
lastException = null;
sendData();
} catch (AssemblyException e) {
lastException = e;
sendData();
return;
}
boolean couplingFound = contraption.connectedCart != null;
Optional<Direction> initialOrientation = cart.getMotion()
.length() < 1 / 512f ? Optional.empty() : Optional.of(cart.getAdjustedHorizontalFacing());
if (couplingFound) {
cart.setPosition(pos.getX() + .5f, pos.getY(), pos.getZ() + .5f);
if (!CouplingHandler.tryToCoupleCarts(null, world, cart.getEntityId(),
contraption.connectedCart.getEntityId()))
return;
}
contraption.removeBlocksFromWorld(world, BlockPos.ZERO);
contraption.startMoving(world);
contraption.expandBoundsAroundAxis(Axis.Y);
if (couplingFound) {
Vector3d diff = contraption.connectedCart.getPositionVec()
.subtract(cart.getPositionVec());
initialOrientation = Optional.of(Direction.fromAngle(MathHelper.atan2(diff.z, diff.x) * 180 / Math.PI));
}
OrientedContraptionEntity entity = OrientedContraptionEntity.create(world, contraption, initialOrientation);
if (couplingFound)
entity.setCouplingId(cart.getUniqueID());
entity.setPosition(pos.getX(), pos.getY(), pos.getZ());
world.addEntity(entity);
entity.startRiding(cart);
if (cart instanceof FurnaceMinecartEntity) {
CompoundNBT nbt = cart.serializeNBT();
nbt.putDouble("PushZ", 0);
nbt.putDouble("PushX", 0);
cart.deserializeNBT(nbt);
}
}
protected void disassemble(World world, BlockPos pos, AbstractMinecartEntity cart) {
if (cart.getPassengers()
.isEmpty())
return;
Entity entity = cart.getPassengers()
.get(0);
if (!(entity instanceof OrientedContraptionEntity))
return;
OrientedContraptionEntity contraption = (OrientedContraptionEntity) entity;
UUID couplingId = contraption.getCouplingId();
if (couplingId == null) {
disassembleCart(cart);
return;
}
Couple<MinecartController> coupledCarts = contraption.getCoupledCartsIfPresent();
if (coupledCarts == null)
return;
// Make sure connected cart is present and being disassembled
for (boolean current : Iterate.trueAndFalse) {
MinecartController minecartController = coupledCarts.get(current);
if (minecartController.cart() == cart)
continue;
BlockPos otherPos = minecartController.cart()
.getBlockPos();
BlockState blockState = world.getBlockState(otherPos);
if (!AllBlocks.CART_ASSEMBLER.has(blockState))
return;
if (!CartAssemblerBlock.getActionForCart(blockState, minecartController.cart()).shouldDisassemble())
return;
}
for (boolean current : Iterate.trueAndFalse)
coupledCarts.get(current)
.removeConnection(current);
disassembleCart(cart);
}
protected void disassembleCart(AbstractMinecartEntity cart) {
cart.removePassengers();
if (cart instanceof FurnaceMinecartEntity) {
CompoundNBT nbt = cart.serializeNBT();
nbt.putDouble("PushZ", cart.getMotion().x);
nbt.putDouble("PushX", cart.getMotion().z);
cart.deserializeNBT(nbt);
}
}
@Override
public void addBehaviours(List<TileEntityBehaviour> behaviours) {
movementMode = new ScrollOptionBehaviour<>(CartMovementMode.class,
Lang.translate("contraptions.cart_movement_mode"), this, getMovementModeSlot());
Lang.translate("contraptions.cart_movement_mode"), this, getMovementModeSlot());
movementMode.requiresWrench();
behaviours.add(movementMode);
}
@ -71,7 +252,7 @@ public class CartAssemblerTileEntity extends SmartTileEntity implements IDisplay
}
private class CartAssemblerValueBoxTransform extends CenteredSideValueBoxTransform {
public CartAssemblerValueBoxTransform() {
super((state, d) -> {
if (d.getAxis()
@ -83,15 +264,15 @@ public class CartAssemblerTileEntity extends SmartTileEntity implements IDisplay
return (d.getAxis() == Axis.X) == (railShape == RailShape.NORTH_SOUTH);
});
}
@Override
protected Vector3d getSouthLocation() {
return VecHelper.voxelSpace(8, 8, 18);
}
}
public static enum CartMovementMode implements INamedIconOptions {
public enum CartMovementMode implements INamedIconOptions {
ROTATE(AllIcons.I_CART_ROTATE),
ROTATE_PAUSED(AllIcons.I_CART_ROTATE_PAUSED),
@ -102,7 +283,7 @@ public class CartAssemblerTileEntity extends SmartTileEntity implements IDisplay
private String translationKey;
private AllIcons icon;
private CartMovementMode(AllIcons icon) {
CartMovementMode(AllIcons icon) {
this.icon = icon;
translationKey = "contraptions.cart_movement_mode." + Lang.asId(name());
}
@ -122,6 +303,11 @@ public class CartAssemblerTileEntity extends SmartTileEntity implements IDisplay
ticksSinceMinecartUpdate = 0;
}
public void assembleNextTick(AbstractMinecartEntity cart) {
if (cartToAssemble == null)
cartToAssemble = cart;
}
public boolean isMinecartUpdateValid() {
return ticksSinceMinecartUpdate >= assemblyCooldown;
}

View file

@ -36,8 +36,7 @@ public class ItemDrainBlock extends Block implements IWrenchable, ITE<ItemDrainT
BlockRayTraceResult hit) {
ItemStack heldItem = player.getHeldItem(handIn);
try {
ItemDrainTileEntity te = getTileEntity(worldIn, pos);
return onTileEntityUse(worldIn, pos, te -> {
if (!heldItem.isEmpty()) {
te.internalTank.allowInsertion();
ActionResultType tryExchange = tryExchange(worldIn, player, handIn, heldItem, te);
@ -45,7 +44,7 @@ public class ItemDrainBlock extends Block implements IWrenchable, ITE<ItemDrainT
if (tryExchange.isAccepted())
return tryExchange;
}
ItemStack heldItemStack = te.getHeldItemStack();
if (!worldIn.isRemote && !heldItemStack.isEmpty()) {
player.inventory.placeItemBackInInventory(worldIn, heldItemStack);
@ -53,10 +52,7 @@ public class ItemDrainBlock extends Block implements IWrenchable, ITE<ItemDrainT
te.notifyUpdate();
}
return ActionResultType.SUCCESS;
} catch (TileEntityException e) {
}
return ActionResultType.PASS;
});
}
protected ActionResultType tryExchange(World worldIn, PlayerEntity player, Hand handIn, ItemStack heldItem,
@ -110,7 +106,7 @@ public class ItemDrainBlock extends Block implements IWrenchable, ITE<ItemDrainT
public int getComparatorInputOverride(BlockState blockState, World worldIn, BlockPos pos) {
return ComparatorUtil.levelOfSmartFluidTank(worldIn, pos);
}
@Override
public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) {
return false;

View file

@ -1,5 +1,6 @@
package com.simibubi.create.content.contraptions.fluids.pipes;
import java.util.Arrays;
import java.util.Optional;
import java.util.Random;
@ -231,6 +232,12 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWren
if (bracket != null && bracket.isBracketPresent())
return state;
BlockState prevState = state;
int prevStateSides = (int) Arrays.stream(Iterate.directions)
.map(FACING_TO_PROPERTY_MAP::get)
.filter(prevState::get)
.count();
// Update sides that are not ignored
for (Direction d : Iterate.directions)
if (d != ignore) {
@ -252,9 +259,13 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWren
if (connectedDirection != null)
return state.with(FACING_TO_PROPERTY_MAP.get(connectedDirection.getOpposite()), true);
// If we can't connect to anything and weren't connected before, do nothing
if (prevStateSides == 2)
return prevState;
// Use preferred
return state.with(FACING_TO_PROPERTY_MAP.get(preferredDirection), true)
.with(FACING_TO_PROPERTY_MAP.get(preferredDirection.getOpposite()), true);
.with(FACING_TO_PROPERTY_MAP.get(preferredDirection.getOpposite()), true);
}
@Override

View file

@ -92,8 +92,7 @@ public class BasinBlock extends Block implements ITE<BasinTileEntity>, IWrenchab
BlockRayTraceResult hit) {
ItemStack heldItem = player.getHeldItem(handIn);
try {
BasinTileEntity te = getTileEntity(worldIn, pos);
return onTileEntityUse(worldIn, pos, te -> {
if (!heldItem.isEmpty()) {
if (FluidHelper.tryEmptyItemIntoTE(worldIn, player, handIn, heldItem, te))
return ActionResultType.SUCCESS;
@ -101,7 +100,7 @@ public class BasinBlock extends Block implements ITE<BasinTileEntity>, IWrenchab
return ActionResultType.SUCCESS;
if (EmptyingByBasin.canItemBeEmptied(worldIn, heldItem)
|| GenericItemFilling.canItemBeFilled(worldIn, heldItem))
|| GenericItemFilling.canItemBeFilled(worldIn, heldItem))
return ActionResultType.SUCCESS;
if (heldItem.getItem()
.equals(Items.SPONGE)
@ -128,10 +127,8 @@ public class BasinBlock extends Block implements ITE<BasinTileEntity>, IWrenchab
worldIn.playSound(null, pos, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.PLAYERS, .2f,
1f + Create.RANDOM.nextFloat());
te.onEmptied();
} catch (TileEntityException e) {
}
return ActionResultType.SUCCESS;
return ActionResultType.SUCCESS;
});
}
@Override

View file

@ -102,11 +102,8 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE<BeltTileEnt
public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) {
if (face.getAxis() != getRotationAxis(state))
return false;
try {
return getTileEntity(world, pos).hasPulley();
} catch (TileEntityException e) {
}
return false;
return getTileEntityOptional(world, pos).map(BeltTileEntity::hasPulley)
.orElse(false);
}
@Override
@ -367,22 +364,18 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE<BeltTileEnt
return VoxelShapes.empty();
VoxelShape shape = getShape(state, worldIn, pos, context);
try {
return getTileEntityOptional(worldIn, pos).map(te -> {
if (context.getEntity() == null)
return shape;
BeltTileEntity belt = getTileEntity(worldIn, pos);
BeltTileEntity controller = belt.getControllerTE();
BeltTileEntity controller = te.getControllerTE();
if (controller == null)
return shape;
if (controller.passengers == null || !controller.passengers.containsKey(context.getEntity())) {
if (controller.passengers == null || !controller.passengers.containsKey(context.getEntity()))
return BeltShapes.getCollisionShape(state);
}
return shape;
} catch (TileEntityException e) {
}
return shape;
}).orElse(shape);
}
@Override

View file

@ -1,8 +1,8 @@
package com.simibubi.create.content.contraptions.wrench;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.foundation.block.render.CustomRenderedItemModelRenderer;
import com.simibubi.create.foundation.item.PartialItemModelRenderer;
import com.simibubi.create.foundation.item.render.CustomRenderedItemModelRenderer;
import com.simibubi.create.foundation.item.render.PartialItemModelRenderer;
import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollValueHandler;
import com.simibubi.create.foundation.utility.AnimationTickHolder;

View file

@ -1,6 +1,6 @@
package com.simibubi.create.content.contraptions.wrench;
import com.simibubi.create.foundation.block.render.CustomRenderedItemModel;
import com.simibubi.create.foundation.item.render.CustomRenderedItemModel;
import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.tileentity.ItemStackTileEntityRenderer;

View file

@ -7,6 +7,8 @@ import java.util.Map;
import javax.annotation.Nonnull;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerBlock;
import com.simibubi.create.content.curiosities.symmetry.mirror.CrossPlaneMirror;
import com.simibubi.create.content.curiosities.symmetry.mirror.EmptyMirror;
import com.simibubi.create.content.curiosities.symmetry.mirror.PlaneMirror;
@ -225,12 +227,21 @@ public class SymmetryWandItem extends Item {
BlockState toReplace = world.getBlockState(position);
if (!toReplace.getMaterial()
.isReplaceable())
.isReplaceable())
continue;
if (toReplace.getBlockHardness(world, position) == -1)
continue;
if (BlockHelper.findAndRemoveInInventory(blockState, player, 1) == 0)
continue;
if (AllBlocks.CART_ASSEMBLER.has(blockState)) {
BlockState railBlock = CartAssemblerBlock.getRailBlock(blockState);
if (BlockHelper.findAndRemoveInInventory(railBlock, player, 1) == 0)
continue;
if (BlockHelper.findAndRemoveInInventory(blockState, player, 1) == 0)
blockState = railBlock;
} else {
if (BlockHelper.findAndRemoveInInventory(blockState, player, 1) == 0)
continue;
}
BlockSnapshot blocksnapshot = BlockSnapshot.create(world.getRegistryKey(), world, position);
FluidState ifluidstate = world.getFluidState(position);

View file

@ -1,8 +1,8 @@
package com.simibubi.create.content.curiosities.symmetry.client;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.foundation.block.render.CustomRenderedItemModelRenderer;
import com.simibubi.create.foundation.item.PartialItemModelRenderer;
import com.simibubi.create.foundation.item.render.CustomRenderedItemModelRenderer;
import com.simibubi.create.foundation.item.render.PartialItemModelRenderer;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
import net.minecraft.client.renderer.IRenderTypeBuffer;

View file

@ -1,6 +1,6 @@
package com.simibubi.create.content.curiosities.symmetry.client;
import com.simibubi.create.foundation.block.render.CustomRenderedItemModel;
import com.simibubi.create.foundation.item.render.CustomRenderedItemModel;
import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.tileentity.ItemStackTileEntityRenderer;

View file

@ -0,0 +1,49 @@
package com.simibubi.create.content.curiosities.tools;
import java.util.function.Supplier;
import com.simibubi.create.foundation.networking.SimplePacketBase;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.network.PacketBuffer;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.network.NetworkEvent.Context;
public class BlueprintAssignCompleteRecipePacket extends SimplePacketBase {
private ResourceLocation recipeID;
public BlueprintAssignCompleteRecipePacket(ResourceLocation recipeID) {
this.recipeID = recipeID;
}
public BlueprintAssignCompleteRecipePacket(PacketBuffer buffer) {
recipeID = buffer.readResourceLocation();
}
@Override
public void write(PacketBuffer buffer) {
buffer.writeResourceLocation(recipeID);
}
@Override
public void handle(Supplier<Context> context) {
context.get()
.enqueueWork(() -> {
ServerPlayerEntity player = context.get()
.getSender();
if (player == null)
return;
if (player.openContainer instanceof BlueprintContainer) {
BlueprintContainer c = (BlueprintContainer) player.openContainer;
player.getServerWorld()
.getRecipeManager()
.getRecipe(recipeID)
.ifPresent(r -> BlueprintItem.assignCompleteRecipe(c.ghostInventory, r));
}
});
context.get()
.setPacketHandled(true);
}
}

View file

@ -0,0 +1,173 @@
package com.simibubi.create.content.curiosities.tools;
import java.util.Optional;
import com.simibubi.create.AllContainerTypes;
import com.simibubi.create.content.curiosities.tools.BlueprintEntity.BlueprintSection;
import com.simibubi.create.foundation.gui.GhostItemContainer;
import com.simibubi.create.foundation.gui.IClearableContainer;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.inventory.CraftingInventory;
import net.minecraft.inventory.container.Container;
import net.minecraft.inventory.container.ContainerType;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.ICraftingRecipe;
import net.minecraft.item.crafting.IRecipeType;
import net.minecraft.network.PacketBuffer;
import net.minecraft.network.play.server.SSetSlotPacket;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.ItemStackHandler;
import net.minecraftforge.items.SlotItemHandler;
public class BlueprintContainer extends GhostItemContainer<BlueprintSection> implements IClearableContainer {
public BlueprintContainer(ContainerType<?> type, int id, PlayerInventory inv, PacketBuffer extraData) {
super(type, id, inv, extraData);
}
public BlueprintContainer(ContainerType<?> type, int id, PlayerInventory inv, BlueprintSection section) {
super(type, id, inv, section);
}
public static BlueprintContainer create(int id, PlayerInventory inv, BlueprintSection section) {
return new BlueprintContainer(AllContainerTypes.CRAFTING_BLUEPRINT.get(), id, inv, section);
}
@Override
protected boolean allowRepeats() {
return true;
}
@Override
protected void addSlots() {
addPlayerSlots(33, 137);
int x = 29;
int y = 21;
int index = 0;
for (int row = 0; row < 3; ++row)
for (int col = 0; col < 3; ++col)
this.addSlot(new BlueprintCraftSlot(ghostInventory, index++, x + col * 18, y + row * 18));
addSlot(new BlueprintCraftSlot(ghostInventory, index++, 123, 40));
addSlot(new SlotItemHandler(ghostInventory, index++, 135, 57));
}
public void onCraftMatrixChanged() {
if (contentHolder.getBlueprintWorld().isRemote)
return;
ServerPlayerEntity serverplayerentity = (ServerPlayerEntity) player;
CraftingInventory craftingInventory = new BlueprintCraftingInventory(this, ghostInventory);
Optional<ICraftingRecipe> optional = player.getServer()
.getRecipeManager()
.getRecipe(IRecipeType.CRAFTING, craftingInventory, player.getEntityWorld());
if (!optional.isPresent()) {
if (ghostInventory.getStackInSlot(9)
.isEmpty())
return;
if (!contentHolder.inferredIcon)
return;
ghostInventory.setStackInSlot(9, ItemStack.EMPTY);
serverplayerentity.connection.sendPacket(new SSetSlotPacket(windowId, 36 + 9, ItemStack.EMPTY));
contentHolder.inferredIcon = false;
return;
}
ICraftingRecipe icraftingrecipe = optional.get();
ItemStack itemstack = icraftingrecipe.getCraftingResult(craftingInventory);
ghostInventory.setStackInSlot(9, itemstack);
contentHolder.inferredIcon = true;
ItemStack toSend = itemstack.copy();
toSend.getOrCreateTag()
.putBoolean("InferredFromRecipe", true);
serverplayerentity.connection.sendPacket(new SSetSlotPacket(windowId, 36 + 9, toSend));
}
@Override
public void putStackInSlot(int p_75141_1_, ItemStack p_75141_2_) {
if (p_75141_1_ == 36 + 9) {
if (p_75141_2_.hasTag()) {
contentHolder.inferredIcon = p_75141_2_.getTag()
.getBoolean("InferredFromRecipe");
p_75141_2_.getTag()
.remove("InferredFromRecipe");
} else
contentHolder.inferredIcon = false;
}
super.putStackInSlot(p_75141_1_, p_75141_2_);
}
@Override
protected ItemStackHandler createGhostInventory() {
return contentHolder.getItems();
}
@Override
protected void readData(BlueprintSection contentHolder) {
}
@Override
protected void saveData(BlueprintSection contentHolder) {
contentHolder.save(ghostInventory);
}
@Override
@OnlyIn(Dist.CLIENT)
protected BlueprintSection createOnClient(PacketBuffer extraData) {
int entityID = extraData.readVarInt();
int section = extraData.readVarInt();
Entity entityByID = Minecraft.getInstance().world.getEntityByID(entityID);
if (!(entityByID instanceof BlueprintEntity))
return null;
BlueprintEntity blueprintEntity = (BlueprintEntity) entityByID;
BlueprintSection blueprintSection = blueprintEntity.getSection(section);
return blueprintSection;
}
static class BlueprintCraftingInventory extends CraftingInventory {
public BlueprintCraftingInventory(Container container, ItemStackHandler items) {
super(container, 3, 3);
for (int y = 0; y < 3; y++) {
for (int x = 0; x < 3; x++) {
ItemStack stack = items.getStackInSlot(y * 3 + x);
setInventorySlotContents(y * 3 + x, stack == null ? ItemStack.EMPTY : stack.copy());
}
}
}
}
class BlueprintCraftSlot extends SlotItemHandler {
private int index;
public BlueprintCraftSlot(IItemHandler itemHandler, int index, int xPosition, int yPosition) {
super(itemHandler, index, xPosition, yPosition);
this.index = index;
}
@Override
public void onSlotChanged() {
super.onSlotChanged();
if (index == 9 && getHasStack() && !contentHolder.getBlueprintWorld().isRemote) {
contentHolder.inferredIcon = false;
ServerPlayerEntity serverplayerentity = (ServerPlayerEntity) player;
serverplayerentity.connection.sendPacket(new SSetSlotPacket(windowId, 36 + 9, getStack()));
}
if (index < 9)
onCraftMatrixChanged();
}
}
}

View file

@ -0,0 +1,528 @@
package com.simibubi.create.content.curiosities.tools;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
import javax.annotation.Nullable;
import org.apache.commons.lang3.Validate;
import com.simibubi.create.AllEntityTypes;
import com.simibubi.create.AllItems;
import com.simibubi.create.Create;
import com.simibubi.create.content.logistics.item.filter.FilterItem;
import com.simibubi.create.content.schematics.ISpecialEntityItemRequirement;
import com.simibubi.create.content.schematics.ItemRequirement;
import com.simibubi.create.content.schematics.ItemRequirement.ItemUseType;
import com.simibubi.create.foundation.networking.ISyncPersistentData;
import com.simibubi.create.foundation.utility.Couple;
import com.simibubi.create.foundation.utility.VecHelper;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.RedstoneDiodeBlock;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntitySize;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.Pose;
import net.minecraft.entity.item.HangingEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.inventory.CraftingInventory;
import net.minecraft.inventory.container.Container;
import net.minecraft.inventory.container.INamedContainerProvider;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.ICraftingRecipe;
import net.minecraft.item.crafting.IRecipeType;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.network.IPacket;
import net.minecraft.network.PacketBuffer;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.Direction;
import net.minecraft.util.Direction.Axis;
import net.minecraft.util.Hand;
import net.minecraft.util.NonNullList;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.SoundEvents;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;
import net.minecraft.world.GameRules;
import net.minecraft.world.World;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.common.ForgeHooks;
import net.minecraftforge.common.util.FakePlayer;
import net.minecraftforge.fml.common.registry.IEntityAdditionalSpawnData;
import net.minecraftforge.fml.hooks.BasicEventHooks;
import net.minecraftforge.fml.network.NetworkHooks;
import net.minecraftforge.items.IItemHandlerModifiable;
import net.minecraftforge.items.ItemStackHandler;
import net.minecraftforge.items.wrapper.InvWrapper;
public class BlueprintEntity extends HangingEntity
implements IEntityAdditionalSpawnData, ISpecialEntityItemRequirement, ISyncPersistentData {
protected int size;
protected Direction verticalOrientation;
@SuppressWarnings("unchecked")
public BlueprintEntity(EntityType<?> p_i50221_1_, World p_i50221_2_) {
super((EntityType<? extends HangingEntity>) p_i50221_1_, p_i50221_2_);
size = 1;
}
public BlueprintEntity(World world, BlockPos pos, Direction facing, Direction verticalOrientation) {
super(AllEntityTypes.CRAFTING_BLUEPRINT.get(), world, pos);
for (int size = 3; size > 0; size--) {
this.size = size;
this.updateFacingWithBoundingBox(facing, verticalOrientation);
if (this.onValidSurface())
break;
}
}
public static EntityType.Builder<?> build(EntityType.Builder<?> builder) {
@SuppressWarnings("unchecked")
EntityType.Builder<BlueprintEntity> entityBuilder = (EntityType.Builder<BlueprintEntity>) builder;
return entityBuilder;
}
@Override
public IPacket<?> createSpawnPacket() {
return NetworkHooks.getEntitySpawningPacket(this);
}
@Override
public void writeAdditional(CompoundNBT p_213281_1_) {
p_213281_1_.putByte("Facing", (byte) this.facingDirection.getIndex());
p_213281_1_.putByte("Orientation", (byte) this.verticalOrientation.getIndex());
p_213281_1_.putInt("Size", size);
super.writeAdditional(p_213281_1_);
}
@Override
public void readAdditional(CompoundNBT p_70037_1_) {
this.facingDirection = Direction.byIndex(p_70037_1_.getByte("Facing"));
this.verticalOrientation = Direction.byIndex(p_70037_1_.getByte("Orientation"));
this.size = p_70037_1_.getInt("Size");
super.readAdditional(p_70037_1_);
this.updateFacingWithBoundingBox(this.facingDirection, this.verticalOrientation);
}
protected void updateFacingWithBoundingBox(Direction facing, Direction verticalOrientation) {
Validate.notNull(facing);
this.facingDirection = facing;
this.verticalOrientation = verticalOrientation;
if (facing.getAxis()
.isHorizontal()) {
this.rotationPitch = 0.0F;
this.rotationYaw = (float) (this.facingDirection.getHorizontalIndex() * 90);
} else {
this.rotationPitch = (float) (-90 * facing.getAxisDirection()
.getOffset());
this.rotationYaw = verticalOrientation.getAxis()
.isHorizontal() ? 180 + verticalOrientation.getHorizontalAngle() : 0;
}
this.prevRotationPitch = this.rotationPitch;
this.prevRotationYaw = this.rotationYaw;
this.updateBoundingBox();
}
@Override
protected float getEyeHeight(Pose p_213316_1_, EntitySize p_213316_2_) {
return 0;
}
@Override
protected void updateBoundingBox() {
if (this.facingDirection == null)
return;
if (this.verticalOrientation == null)
return;
Vector3d pos = Vector3d.of(hangingPosition)
.add(.5, .5, .5)
.subtract(Vector3d.of(facingDirection.getDirectionVec())
.scale(0.46875));
double d1 = pos.x;
double d2 = pos.y;
double d3 = pos.z;
this.setPos(d1, d2, d3);
Axis axis = facingDirection.getAxis();
if (size == 2)
pos = pos.add(Vector3d.of(axis.isHorizontal() ? facingDirection.rotateYCCW()
.getDirectionVec()
: verticalOrientation.rotateY()
.getDirectionVec())
.scale(0.5))
.add(Vector3d
.of(axis.isHorizontal() ? Direction.UP.getDirectionVec()
: facingDirection == Direction.UP ? verticalOrientation.getDirectionVec()
: verticalOrientation.getOpposite()
.getDirectionVec())
.scale(0.5));
d1 = pos.x;
d2 = pos.y;
d3 = pos.z;
double d4 = (double) this.getWidthPixels();
double d5 = (double) this.getHeightPixels();
double d6 = (double) this.getWidthPixels();
Direction.Axis direction$axis = this.facingDirection.getAxis();
switch (direction$axis) {
case X:
d4 = 1.0D;
break;
case Y:
d5 = 1.0D;
break;
case Z:
d6 = 1.0D;
}
d4 = d4 / 32.0D;
d5 = d5 / 32.0D;
d6 = d6 / 32.0D;
this.setBoundingBox(new AxisAlignedBB(d1 - d4, d2 - d5, d3 - d6, d1 + d4, d2 + d5, d3 + d6));
}
public boolean onValidSurface() {
if (!world.isSpaceEmpty(this))
return false;
int i = Math.max(1, this.getWidthPixels() / 16);
int j = Math.max(1, this.getHeightPixels() / 16);
BlockPos blockpos = this.hangingPosition.offset(this.facingDirection.getOpposite());
Direction upDirection = facingDirection.getAxis()
.isHorizontal() ? Direction.UP
: facingDirection == Direction.UP ? verticalOrientation : verticalOrientation.getOpposite();
Direction direction = facingDirection.getAxis()
.isVertical() ? verticalOrientation.rotateY() : facingDirection.rotateYCCW();
BlockPos.Mutable blockpos$mutable = new BlockPos.Mutable();
for (int k = 0; k < i; ++k) {
for (int l = 0; l < j; ++l) {
int i1 = (i - 1) / -2;
int j1 = (j - 1) / -2;
blockpos$mutable.setPos(blockpos)
.move(direction, k + i1)
.move(upDirection, l + j1);
BlockState blockstate = this.world.getBlockState(blockpos$mutable);
if (Block.hasEnoughSolidSide(this.world, blockpos$mutable, this.facingDirection))
continue;
if (!blockstate.getMaterial()
.isSolid() && !RedstoneDiodeBlock.isDiode(blockstate)) {
return false;
}
}
}
return this.world.getEntitiesInAABBexcluding(this, this.getBoundingBox(), IS_HANGING_ENTITY)
.isEmpty();
}
@Override
public int getWidthPixels() {
return 16 * size;
}
@Override
public int getHeightPixels() {
return 16 * size;
}
@Override
public void onBroken(@Nullable Entity p_110128_1_) {
if (!world.getGameRules()
.getBoolean(GameRules.DO_ENTITY_DROPS))
return;
playSound(SoundEvents.ENTITY_PAINTING_BREAK, 1.0F, 1.0F);
if (p_110128_1_ instanceof PlayerEntity) {
PlayerEntity playerentity = (PlayerEntity) p_110128_1_;
if (playerentity.abilities.isCreativeMode) {
return;
}
}
entityDropItem(AllItems.CRAFTING_BLUEPRINT.asStack());
}
@Override
public ItemStack getPickedResult(RayTraceResult target) {
return AllItems.CRAFTING_BLUEPRINT.asStack();
}
@Override
public ItemRequirement getRequiredItems() {
return new ItemRequirement(ItemUseType.CONSUME, AllItems.CRAFTING_BLUEPRINT.get());
}
@Override
public void playPlaceSound() {
this.playSound(SoundEvents.ENTITY_PAINTING_PLACE, 1.0F, 1.0F);
}
@Override
public void setLocationAndAngles(double p_70012_1_, double p_70012_3_, double p_70012_5_, float p_70012_7_,
float p_70012_8_) {
this.setPosition(p_70012_1_, p_70012_3_, p_70012_5_);
}
@Override
@OnlyIn(Dist.CLIENT)
public void setPositionAndRotationDirect(double p_180426_1_, double p_180426_3_, double p_180426_5_,
float p_180426_7_, float p_180426_8_, int p_180426_9_, boolean p_180426_10_) {
BlockPos blockpos =
this.hangingPosition.add(p_180426_1_ - this.getX(), p_180426_3_ - this.getY(), p_180426_5_ - this.getZ());
this.setPosition((double) blockpos.getX(), (double) blockpos.getY(), (double) blockpos.getZ());
}
@Override
public void writeSpawnData(PacketBuffer buffer) {
CompoundNBT compound = new CompoundNBT();
writeAdditional(compound);
buffer.writeCompoundTag(compound);
buffer.writeCompoundTag(getPersistentData());
}
@Override
public void readSpawnData(PacketBuffer additionalData) {
readAdditional(additionalData.readCompoundTag());
getPersistentData().merge(additionalData.readCompoundTag());
}
@Override
public ActionResultType applyPlayerInteraction(PlayerEntity player, Vector3d vec, Hand hand) {
if (player instanceof FakePlayer)
return ActionResultType.PASS;
BlueprintSection section = getSectionAt(vec);
if (!AllItems.WRENCH.isIn(player.getHeldItem(hand)) && !world.isRemote) {
boolean empty = true;
ItemStackHandler items = section.getItems();
for (int i = 0; i < 9; i++) {
if (!items.getStackInSlot(i)
.isEmpty()) {
empty = false;
break;
}
}
if (!empty) {
IItemHandlerModifiable playerInv = new InvWrapper(player.inventory);
boolean firstPass = true;
int amountCrafted = 0;
ForgeHooks.setCraftingPlayer(player);
Optional<ICraftingRecipe> recipe = Optional.empty();
do {
Map<Integer, ItemStack> stacksTaken = new HashMap<>();
Map<Integer, ItemStack> craftingGrid = new HashMap<>();
boolean success = true;
Search:
for (int i = 0; i < 9; i++) {
ItemStack requestedItem = items.getStackInSlot(i);
if (requestedItem.isEmpty()) {
craftingGrid.put(i, ItemStack.EMPTY);
continue;
}
for (int slot = 0; slot < playerInv.getSlots(); slot++) {
if (!FilterItem.test(world, playerInv.getStackInSlot(slot), requestedItem))
continue;
ItemStack currentItem = playerInv.extractItem(slot, 1, false);
if (stacksTaken.containsKey(slot)) {
stacksTaken.get(slot)
.grow(1);
} else {
stacksTaken.put(slot, currentItem.copy());
}
craftingGrid.put(i, currentItem);
continue Search;
}
success = false;
break;
}
if (success) {
CraftingInventory craftingInventory = new BlueprintCraftingInventory(craftingGrid);
if (!recipe.isPresent())
recipe = world.getRecipeManager()
.getRecipe(IRecipeType.CRAFTING, craftingInventory, world);
ItemStack result = recipe.filter(r -> r.matches(craftingInventory, world))
.map(r -> r.getCraftingResult(craftingInventory))
.orElse(ItemStack.EMPTY);
if (result.isEmpty()) {
success = false;
} else if (result.getCount() + amountCrafted > 64) {
success = false;
} else {
amountCrafted += result.getCount();
result.onCrafting(player.world, player, 1);
BasicEventHooks.firePlayerCraftingEvent(player, result, craftingInventory);
NonNullList<ItemStack> nonnulllist = world.getRecipeManager()
.getRecipeNonNull(IRecipeType.CRAFTING, craftingInventory, world);
if (firstPass)
world.playSound(null, player.getBlockPos(), SoundEvents.ENTITY_ITEM_PICKUP,
SoundCategory.PLAYERS, .2f, 1f + Create.RANDOM.nextFloat());
player.inventory.placeItemBackInInventory(world, result);
for (ItemStack itemStack : nonnulllist)
player.inventory.placeItemBackInInventory(world, itemStack);
firstPass = false;
}
}
if (!success) {
for (Entry<Integer, ItemStack> entry : stacksTaken.entrySet())
playerInv.insertItem(entry.getKey(), entry.getValue(), false);
break;
}
} while (player.isSneaking());
ForgeHooks.setCraftingPlayer(null);
return ActionResultType.SUCCESS;
}
}
int i = section.index;
if (!world.isRemote && player instanceof ServerPlayerEntity) {
NetworkHooks.openGui((ServerPlayerEntity) player, section, buf -> {
buf.writeVarInt(getEntityId());
buf.writeVarInt(i);
});
}
return ActionResultType.SUCCESS;
}
public BlueprintSection getSectionAt(Vector3d vec) {
int index = 0;
if (size > 1) {
vec = VecHelper.rotate(vec, rotationYaw, Axis.Y);
vec = VecHelper.rotate(vec, -rotationPitch, Axis.X);
vec = vec.add(0.5, 0.5, 0);
if (size == 3)
vec = vec.add(1, 1, 0);
int x = MathHelper.clamp(MathHelper.floor(vec.x), 0, size - 1);
int y = MathHelper.clamp(MathHelper.floor(vec.y), 0, size - 1);
index = x + y * size;
}
BlueprintSection section = getSection(index);
return section;
}
static class BlueprintCraftingInventory extends CraftingInventory {
private static Container dummyContainer = new Container(null, -1) {
public boolean canInteractWith(PlayerEntity playerIn) {
return false;
}
};
public BlueprintCraftingInventory(Map<Integer, ItemStack> items) {
super(dummyContainer, 3, 3);
for (int y = 0; y < 3; y++) {
for (int x = 0; x < 3; x++) {
ItemStack stack = items.get(y * 3 + x);
setInventorySlotContents(y * 3 + x, stack == null ? ItemStack.EMPTY : stack.copy());
}
}
}
}
public CompoundNBT getOrCreateRecipeCompound() {
CompoundNBT persistentData = getPersistentData();
if (!persistentData.contains("Recipes"))
persistentData.put("Recipes", new CompoundNBT());
return persistentData.getCompound("Recipes");
}
private Map<Integer, BlueprintSection> sectionCache = new HashMap<>();
public BlueprintSection getSection(int index) {
return sectionCache.computeIfAbsent(index, i -> new BlueprintSection(i));
}
class BlueprintSection implements INamedContainerProvider {
int index;
Couple<ItemStack> cachedDisplayItems;
public boolean inferredIcon = false;
public BlueprintSection(int index) {
this.index = index;
}
public Couple<ItemStack> getDisplayItems() {
if (cachedDisplayItems != null)
return cachedDisplayItems;
ItemStackHandler items = getItems();
return cachedDisplayItems = Couple.create(items.getStackInSlot(9), items.getStackInSlot(10));
}
public ItemStackHandler getItems() {
ItemStackHandler newInv = new ItemStackHandler(11);
CompoundNBT list = getOrCreateRecipeCompound();
CompoundNBT invNBT = list.getCompound(index + "");
inferredIcon = list.getBoolean("InferredIcon");
if (!invNBT.isEmpty())
newInv.deserializeNBT(invNBT);
return newInv;
}
public void save(ItemStackHandler inventory) {
CompoundNBT list = getOrCreateRecipeCompound();
list.put(index + "", inventory.serializeNBT());
list.putBoolean("InferredIcon", inferredIcon);
cachedDisplayItems = null;
if (!world.isRemote)
syncPersistentDataWithTracking(BlueprintEntity.this);
}
public boolean isEntityAlive() {
return isAlive();
}
public World getBlueprintWorld() {
return world;
}
@Override
public Container createMenu(int id, PlayerInventory inv, PlayerEntity player) {
return BlueprintContainer.create(id, inv, this);
}
@Override
public ITextComponent getDisplayName() {
return new StringTextComponent("");
}
}
@Override
public void onPersistentDataUpdated() {
sectionCache.clear();
}
}

View file

@ -0,0 +1,154 @@
package com.simibubi.create.content.curiosities.tools;
import java.util.Collection;
import com.simibubi.create.AllItems;
import com.simibubi.create.content.logistics.item.filter.AttributeFilterContainer.WhitelistMode;
import com.simibubi.create.content.logistics.item.filter.FilterItem;
import com.simibubi.create.content.logistics.item.filter.ItemAttribute;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.item.HangingEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemUseContext;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.item.crafting.Ingredient.IItemList;
import net.minecraft.item.crafting.Ingredient.SingleItemList;
import net.minecraft.item.crafting.Ingredient.TagList;
import net.minecraft.item.crafting.ShapedRecipe;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.ListNBT;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.Direction;
import net.minecraft.util.JSONUtils;
import net.minecraft.util.NonNullList;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.common.crafting.StackList;
import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
import net.minecraftforge.items.ItemStackHandler;
public class BlueprintItem extends Item {
public BlueprintItem(Properties p_i48487_1_) {
super(p_i48487_1_);
}
@Override
public ActionResultType onItemUse(ItemUseContext ctx) {
Direction face = ctx.getFace();
PlayerEntity player = ctx.getPlayer();
ItemStack stack = ctx.getItem();
BlockPos pos = ctx.getPos()
.offset(face);
if (player != null && !player.canPlayerEdit(pos, face, stack))
return ActionResultType.FAIL;
World world = ctx.getWorld();
HangingEntity hangingentity = new BlueprintEntity(world, pos, face, face.getAxis()
.isHorizontal() ? Direction.DOWN : ctx.getPlacementHorizontalFacing());
CompoundNBT compoundnbt = stack.getTag();
if (compoundnbt != null)
EntityType.applyItemNBT(world, player, hangingentity, compoundnbt);
if (!hangingentity.onValidSurface())
return ActionResultType.CONSUME;
if (!world.isRemote) {
hangingentity.playPlaceSound();
world.addEntity(hangingentity);
}
stack.shrink(1);
return ActionResultType.success(world.isRemote);
}
protected boolean canPlace(PlayerEntity p_200127_1_, Direction p_200127_2_, ItemStack p_200127_3_,
BlockPos p_200127_4_) {
return p_200127_1_.canPlayerEdit(p_200127_4_, p_200127_2_, p_200127_3_);
}
public static void assignCompleteRecipe(ItemStackHandler inv, IRecipe<?> recipe) {
NonNullList<Ingredient> ingredients = recipe.getIngredients();
for (int i = 0; i < 9; i++)
inv.setStackInSlot(i, ItemStack.EMPTY);
inv.setStackInSlot(9, recipe.getRecipeOutput());
if (recipe instanceof ShapedRecipe) {
ShapedRecipe shapedRecipe = (ShapedRecipe) recipe;
for (int row = 0; row < shapedRecipe.getHeight(); row++)
for (int col = 0; col < shapedRecipe.getWidth(); col++)
inv.setStackInSlot(row * 3 + col,
convertIngredientToFilter(ingredients.get(row * shapedRecipe.getWidth() + col)));
} else {
for (int i = 0; i < ingredients.size(); i++)
inv.setStackInSlot(i, convertIngredientToFilter(ingredients.get(i)));
}
}
private static ItemStack convertIngredientToFilter(Ingredient ingredient) {
Ingredient.IItemList[] acceptedItems =
ObfuscationReflectionHelper.getPrivateValue(Ingredient.class, ingredient, "field_199807_b");
if (acceptedItems == null || acceptedItems.length > 18)
return ItemStack.EMPTY;
if (acceptedItems.length == 0)
return ItemStack.EMPTY;
if (acceptedItems.length == 1)
return convertIItemListToFilter(acceptedItems[0]);
ItemStack result = AllItems.FILTER.asStack();
ItemStackHandler filterItems = FilterItem.getFilterItems(result);
for (int i = 0; i < acceptedItems.length; i++)
filterItems.setStackInSlot(i, convertIItemListToFilter(acceptedItems[i]));
result.getOrCreateTag()
.put("Items", filterItems.serializeNBT());
return result;
}
private static ItemStack convertIItemListToFilter(IItemList itemList) {
Collection<ItemStack> stacks = itemList.getStacks();
if (itemList instanceof SingleItemList) {
for (ItemStack itemStack : stacks)
return itemStack;
}
if (itemList instanceof TagList) {
ResourceLocation resourcelocation = new ResourceLocation(JSONUtils.getString(itemList.serialize(), "tag"));
ItemStack filterItem = AllItems.ATTRIBUTE_FILTER.asStack();
filterItem.getOrCreateTag()
.putInt("WhitelistMode", WhitelistMode.WHITELIST_DISJ.ordinal());
ListNBT attributes = new ListNBT();
ItemAttribute at = new ItemAttribute.InTag(resourcelocation);
CompoundNBT compoundNBT = new CompoundNBT();
at.serializeNBT(compoundNBT);
compoundNBT.putBoolean("Inverted", false);
attributes.add(compoundNBT);
filterItem.getOrCreateTag()
.put("MatchedAttributes", attributes);
return filterItem;
}
if (itemList instanceof StackList) {
ItemStack result = AllItems.FILTER.asStack();
ItemStackHandler filterItems = FilterItem.getFilterItems(result);
int i = 0;
for (ItemStack itemStack : stacks) {
if (i >= 18)
break;
filterItems.setStackInSlot(i++, itemStack);
}
CompoundNBT tag = result.getOrCreateTag();
tag.put("Items", filterItems.serializeNBT());
tag.putBoolean("RespectNBT", true);
return result;
}
return ItemStack.EMPTY;
}
}

View file

@ -0,0 +1,241 @@
package com.simibubi.create.content.curiosities.tools;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.systems.RenderSystem;
import com.simibubi.create.content.curiosities.tools.BlueprintEntity.BlueprintCraftingInventory;
import com.simibubi.create.content.curiosities.tools.BlueprintEntity.BlueprintSection;
import com.simibubi.create.content.logistics.item.filter.FilterItem;
import com.simibubi.create.foundation.gui.AllGuiTextures;
import com.simibubi.create.foundation.gui.GuiGameElement;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
import com.simibubi.create.foundation.utility.Pair;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.inventory.CraftingInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.item.crafting.ICraftingRecipe;
import net.minecraft.item.crafting.IRecipeType;
import net.minecraft.util.math.EntityRayTraceResult;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.math.RayTraceResult.Type;
import net.minecraft.util.text.TextFormatting;
import net.minecraftforge.items.ItemHandlerHelper;
import net.minecraftforge.items.ItemStackHandler;
public class BlueprintOverlayRenderer {
static boolean active;
static boolean empty;
static boolean lastSneakState;
static BlueprintSection lastTargetedSection;
static List<Pair<ItemStack, Boolean>> ingredients = new ArrayList<>();
static ItemStack result = ItemStack.EMPTY;
static boolean resultCraftable = false;
public static void tick() {
Minecraft mc = Minecraft.getInstance();
RayTraceResult mouseOver = mc.objectMouseOver;
BlueprintSection last = lastTargetedSection;
boolean sneak = mc.player.isSneaking();
lastTargetedSection = null;
active = false;
if (mouseOver == null)
return;
if (mouseOver.getType() != Type.ENTITY)
return;
EntityRayTraceResult entityRay = (EntityRayTraceResult) mouseOver;
if (!(entityRay.getEntity() instanceof BlueprintEntity))
return;
BlueprintEntity blueprintEntity = (BlueprintEntity) entityRay.getEntity();
BlueprintSection sectionAt = blueprintEntity.getSectionAt(entityRay.getHitVec()
.subtract(blueprintEntity.getPositionVec()));
lastTargetedSection = last;
active = true;
if (sectionAt != lastTargetedSection || AnimationTickHolder.getTicks() % 10 == 0 || lastSneakState != sneak)
rebuild(sectionAt, sneak);
lastTargetedSection = sectionAt;
lastSneakState = sneak;
}
public static void rebuild(BlueprintSection sectionAt, boolean sneak) {
ItemStackHandler items = sectionAt.getItems();
boolean empty = true;
for (int i = 0; i < 9; i++) {
if (!items.getStackInSlot(i)
.isEmpty()) {
empty = false;
break;
}
}
BlueprintOverlayRenderer.empty = empty;
BlueprintOverlayRenderer.result = ItemStack.EMPTY;
if (empty)
return;
boolean firstPass = true;
boolean success = true;
Minecraft mc = Minecraft.getInstance();
ItemStackHandler playerInv = new ItemStackHandler(mc.player.inventory.getSizeInventory());
for (int i = 0; i < playerInv.getSlots(); i++)
playerInv.setStackInSlot(i, mc.player.inventory.getStackInSlot(i)
.copy());
int amountCrafted = 0;
Optional<ICraftingRecipe> recipe = Optional.empty();
Map<Integer, ItemStack> craftingGrid = new HashMap<>();
ingredients.clear();
ItemStackHandler missingItems = new ItemStackHandler(64);
ItemStackHandler availableItems = new ItemStackHandler(64);
List<ItemStack> newlyAdded = new ArrayList<>();
List<ItemStack> newlyMissing = new ArrayList<>();
boolean invalid = false;
do {
craftingGrid.clear();
newlyAdded.clear();
newlyMissing.clear();
Search:
for (int i = 0; i < 9; i++) {
ItemStack requestedItem = items.getStackInSlot(i);
if (requestedItem.isEmpty()) {
craftingGrid.put(i, ItemStack.EMPTY);
continue;
}
for (int slot = 0; slot < playerInv.getSlots(); slot++) {
if (!FilterItem.test(mc.world, playerInv.getStackInSlot(slot), requestedItem))
continue;
ItemStack currentItem = playerInv.extractItem(slot, 1, false);
craftingGrid.put(i, currentItem);
newlyAdded.add(currentItem);
continue Search;
}
success = false;
newlyMissing.add(requestedItem);
}
if (success) {
CraftingInventory craftingInventory = new BlueprintCraftingInventory(craftingGrid);
if (!recipe.isPresent())
recipe = mc.world.getRecipeManager()
.getRecipe(IRecipeType.CRAFTING, craftingInventory, mc.world);
ItemStack resultFromRecipe = recipe.filter(r -> r.matches(craftingInventory, mc.world))
.map(r -> r.getCraftingResult(craftingInventory))
.orElse(ItemStack.EMPTY);
if (resultFromRecipe.isEmpty()) {
if (!recipe.isPresent())
invalid = true;
success = false;
} else if (resultFromRecipe.getCount() + amountCrafted > 64) {
success = false;
} else {
amountCrafted += resultFromRecipe.getCount();
if (result.isEmpty())
result = resultFromRecipe.copy();
else
result.grow(resultFromRecipe.getCount());
resultCraftable = true;
firstPass = false;
}
}
if (success || firstPass) {
newlyAdded.forEach(s -> ItemHandlerHelper.insertItemStacked(availableItems, s, false));
newlyMissing.forEach(s -> ItemHandlerHelper.insertItemStacked(missingItems, s, false));
}
if (!success) {
if (firstPass) {
result = invalid ? ItemStack.EMPTY : items.getStackInSlot(9);
resultCraftable = false;
}
break;
}
if (!sneak)
break;
} while (success);
for (int i = 0; i < 9; i++) {
ItemStack available = availableItems.getStackInSlot(i);
if (available.isEmpty())
continue;
ingredients.add(Pair.of(available, true));
}
for (int i = 0; i < 9; i++) {
ItemStack missing = missingItems.getStackInSlot(i);
if (missing.isEmpty())
continue;
ingredients.add(Pair.of(missing, false));
}
}
public static void renderOverlay(MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay,
float partialTicks) {
if (!active || empty)
return;
Minecraft mc = Minecraft.getInstance();
int w = 30 + 21 * ingredients.size() + 21;
int x = (mc.getWindow()
.getScaledWidth() - w) / 2;
int y = (int) (mc.getWindow()
.getScaledHeight() / 3f * 2);
for (Pair<ItemStack, Boolean> pair : ingredients) {
RenderSystem.enableBlend();
(pair.getSecond() ? AllGuiTextures.HOTSLOT_ACTIVE : AllGuiTextures.HOTSLOT).draw(ms, x, y);
ItemStack itemStack = pair.getFirst();
GuiGameElement.of(itemStack)
.at(x + 3, y + 3)
.render(ms);
mc.getItemRenderer()
.renderItemOverlayIntoGUI(mc.fontRenderer, itemStack, x + 3, y + 3,
pair.getSecond() || itemStack.getCount() == 1 ? null
: TextFormatting.GOLD.toString() + itemStack.getCount());
x += 21;
}
x += 5;
RenderSystem.enableBlend();
AllGuiTextures.HOTSLOT_ARROW.draw(ms, x, y + 4);
x += 25;
if (result.isEmpty()) {
AllGuiTextures.HOTSLOT.draw(ms, x, y);
GuiGameElement.of(Items.BARRIER)
.at(x + 3, y + 3)
.render(ms);
} else {
(resultCraftable ? AllGuiTextures.HOTSLOT_SUPER_ACTIVE : AllGuiTextures.HOTSLOT).draw(ms,
resultCraftable ? x - 1 : x, resultCraftable ? y - 1 : y);
GuiGameElement.of(result)
.at(x + 3, y + 3)
.render(ms);
mc.getItemRenderer()
.renderItemOverlayIntoGUI(mc.fontRenderer, result, x + 3, y + 3, null);
}
}
}

View file

@ -0,0 +1,116 @@
package com.simibubi.create.content.curiosities.tools;
import com.jozufozu.flywheel.core.PartialModel;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.curiosities.tools.BlueprintEntity.BlueprintSection;
import com.simibubi.create.foundation.render.PartialBufferer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.utility.Couple;
import com.simibubi.create.foundation.utility.MatrixStacker;
import net.minecraft.block.Blocks;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.WorldRenderer;
import net.minecraft.client.renderer.entity.EntityRenderer;
import net.minecraft.client.renderer.entity.EntityRendererManager;
import net.minecraft.client.renderer.model.ItemCameraTransforms.TransformType;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.vector.Matrix3f;
public class BlueprintRenderer extends EntityRenderer<BlueprintEntity> {
public BlueprintRenderer(EntityRendererManager p_i46179_1_) {
super(p_i46179_1_);
}
@Override
public void render(BlueprintEntity entity, float yaw, float pt, MatrixStack ms, IRenderTypeBuffer buffer,
int overlay) {
PartialModel partialModel = entity.size == 3 ? AllBlockPartials.CRAFTING_BLUEPRINT_3x3
: entity.size == 2 ? AllBlockPartials.CRAFTING_BLUEPRINT_2x2 : AllBlockPartials.CRAFTING_BLUEPRINT_1x1;
SuperByteBuffer sbb = PartialBufferer.get(partialModel, Blocks.AIR.getDefaultState());
int light = WorldRenderer.getLightmapCoordinates(entity.world, entity.getBlockPos());
sbb.matrixStacker()
.rotateY(-yaw)
.rotateX(90.0F + entity.rotationPitch)
.translate(-.5, -1 / 32f, -.5);
if (entity.size == 2)
sbb.translate(.5, 0, -.5);
sbb.light(light)
.renderInto(ms, buffer.getBuffer(RenderType.getSolid()));
super.render(entity, yaw, pt, ms, buffer, light);
ms.push();
MatrixStacker.of(ms)
.rotateY(-yaw)
.rotateX(entity.rotationPitch == -90 ? -45 : entity.rotationPitch == 0 ? -15 : -5);
Matrix3f copy = ms.peek()
.getNormal()
.copy();
ms.pop();
ms.push();
MatrixStacker.of(ms)
.rotateY(-yaw)
.rotateX(entity.rotationPitch)
.translate(0, 0, 1 / 32f + .001);
if (entity.size == 3)
ms.translate(-1, -1, 0);
for (int x = 0; x < entity.size; x++) {
ms.push();
for (int y = 0; y < entity.size; y++) {
BlueprintSection section = entity.getSection(x * entity.size + y);
Couple<ItemStack> displayItems = section.getDisplayItems();
ms.push();
ms.scale(.5f, .5f, 1 / 1024f);
displayItems.forEachWithContext((stack, primary) -> {
if (stack.isEmpty())
return;
ms.push();
if (!primary) {
ms.translate(0.325f, -0.325f, 1);
ms.scale(.625f, .625f, 1);
}
Matrix3f n = ms.peek()
.getNormal();
n.a00 = copy.a00;
n.a01 = copy.a01;
n.a02 = copy.a02;
n.a10 = copy.a10;
n.a11 = copy.a11;
n.a12 = copy.a12;
n.a20 = copy.a20;
n.a21 = copy.a21;
n.a22 = copy.a22;
Minecraft.getInstance()
.getItemRenderer()
.renderItem(stack, TransformType.GUI, light, overlay, ms, buffer);
ms.pop();
});
ms.pop();
ms.translate(1, 0, 0);
}
ms.pop();
ms.translate(0, 1, 0);
}
ms.pop();
}
@Override
public ResourceLocation getEntityTexture(BlueprintEntity p_110775_1_) {
return null;
}
}

View file

@ -0,0 +1,193 @@
package com.simibubi.create.content.curiosities.tools;
import static com.simibubi.create.foundation.gui.AllGuiTextures.PLAYER_INVENTORY;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import com.google.common.collect.ImmutableList;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllItems;
import com.simibubi.create.content.logistics.item.filter.FilterScreenPacket;
import com.simibubi.create.content.logistics.item.filter.FilterScreenPacket.Option;
import com.simibubi.create.foundation.gui.AbstractSimiContainerScreen;
import com.simibubi.create.foundation.gui.AllGuiTextures;
import com.simibubi.create.foundation.gui.AllIcons;
import com.simibubi.create.foundation.gui.GuiGameElement;
import com.simibubi.create.foundation.gui.widgets.IconButton;
import com.simibubi.create.foundation.networking.AllPackets;
import com.simibubi.create.foundation.utility.Lang;
import net.minecraft.client.renderer.Rectangle2d;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TextFormatting;
public class BlueprintScreen extends AbstractSimiContainerScreen<BlueprintContainer> {
protected AllGuiTextures background;
private List<Rectangle2d> extraAreas = Collections.emptyList();
private IconButton resetButton;
private IconButton confirmButton;
public BlueprintScreen(BlueprintContainer container, PlayerInventory inv, ITextComponent title) {
super(container, inv, title);
this.background = AllGuiTextures.BLUEPRINT;
}
@Override
protected void init() {
setWindowSize(background.width + 50, background.height + PLAYER_INVENTORY.height + 20);
super.init();
widgets.clear();
int x = guiLeft;
int offset = guiTop < 30 ? 30 - guiTop : 0;
extraAreas =
ImmutableList.of(new Rectangle2d(x, guiTop + offset, background.width + 70, background.height - offset));
resetButton = new IconButton(x + background.width - 62, guiTop + background.height - 24, AllIcons.I_TRASH);
confirmButton = new IconButton(x + background.width - 33, guiTop + background.height - 24, AllIcons.I_CONFIRM);
widgets.add(resetButton);
widgets.add(confirmButton);
}
@Override
protected void renderWindow(MatrixStack ms, int mouseX, int mouseY, float partialTicks) {
int x = guiLeft;
int y = guiTop;
background.draw(ms, this, x, y);
int invX = guiLeft + 25;
int invY = y + background.height + 10;
PLAYER_INVENTORY.draw(ms, this, invX, invY);
String localizedName = I18n.format(AllItems.CRAFTING_BLUEPRINT.get()
.getTranslationKey());
textRenderer.draw(ms, playerInventory.getDisplayName(), invX + 7, invY + 6, 0x666666);
textRenderer.draw(ms, localizedName, x + 15, y + 4, 0xFFFFFF);
GuiGameElement.of(AllBlockPartials.CRAFTING_BLUEPRINT_1x1).<GuiGameElement
.GuiRenderBuilder>at(x + background.width + 20, guiTop + background.height - 35, 0)
.rotate(45, -45, 22.5f)
.scale(40)
.render(ms);
}
@Override
protected void drawMouseoverTooltip(MatrixStack ms, int x, int y) {
if (!this.client.player.inventory.getItemStack()
.isEmpty() || this.hoveredSlot == null || this.hoveredSlot.getHasStack()
|| hoveredSlot.inventory == container.playerInventory) {
super.drawMouseoverTooltip(ms, x, y);
return;
}
renderWrappedToolTip(ms, addToTooltip(new LinkedList<>(), hoveredSlot.getSlotIndex(), true), x, y,
textRenderer);
}
@Override
public List<ITextComponent> getTooltipFromItem(ItemStack stack) {
List<ITextComponent> list = super.getTooltipFromItem(stack);
if (hoveredSlot.inventory == container.playerInventory)
return list;
return hoveredSlot != null ? addToTooltip(list, hoveredSlot.getSlotIndex(), false) : list;
}
private List<ITextComponent> addToTooltip(List<ITextComponent> list, int slot, boolean isEmptySlot) {
if (slot < 0 || slot > 10)
return list;
if (slot < 9) {
list.add(Lang.createTranslationTextComponent("crafting_blueprint.crafting_slot")
.formatted(TextFormatting.GOLD));
if (isEmptySlot)
list.add(Lang.createTranslationTextComponent("crafting_blueprint.filter_items_viable")
.formatted(TextFormatting.GRAY));
} else if (slot == 9) {
list.add(Lang.createTranslationTextComponent("crafting_blueprint.display_slot")
.formatted(TextFormatting.GOLD));
if (!isEmptySlot)
list.add(Lang
.createTranslationTextComponent("crafting_blueprint."
+ (container.contentHolder.inferredIcon ? "inferred" : "manually_assigned"))
.formatted(TextFormatting.GRAY));
} else if (slot == 10) {
list.add(Lang.createTranslationTextComponent("crafting_blueprint.secondary_display_slot")
.formatted(TextFormatting.GOLD));
if (isEmptySlot)
list.add(Lang.createTranslationTextComponent("crafting_blueprint.optional")
.formatted(TextFormatting.GRAY));
}
return list;
}
@Override
public void tick() {
// handleTooltips();
super.tick();
if (!container.contentHolder.isEntityAlive())
client.player.closeScreen();
}
// protected void handleTooltips() {
// List<IconButton> tooltipButtons = getTooltipButtons();
//
// for (IconButton button : tooltipButtons) {
// if (!button.getToolTip()
// .isEmpty()) {
// button.setToolTip(button.getToolTip()
// .get(0));
// button.getToolTip()
// .add(TooltipHelper.holdShift(Palette.Yellow, hasShiftDown()));
// }
// }
//
// if (hasShiftDown()) {
// List<IFormattableTextComponent> tooltipDescriptions = getTooltipDescriptions();
// for (int i = 0; i < tooltipButtons.size(); i++)
// fillToolTip(tooltipButtons.get(i), tooltipDescriptions.get(i));
// }
// }
@Override
public boolean mouseClicked(double x, double y, int button) {
boolean mouseClicked = super.mouseClicked(x, y, button);
if (button == 0) {
if (confirmButton.isHovered()) {
client.player.closeScreen();
return true;
}
if (resetButton.isHovered()) {
container.clearContents();
contentsCleared();
container.sendClearPacket();
return true;
}
}
return mouseClicked;
}
protected void contentsCleared() {
}
protected void sendOptionUpdate(Option option) {
AllPackets.channel.sendToServer(new FilterScreenPacket(option));
}
@Override
public List<Rectangle2d> getExtraAreas() {
return extraAreas;
}
}

View file

@ -37,6 +37,7 @@ import net.minecraftforge.event.entity.living.LivingAttackEvent;
import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent;
import net.minecraftforge.event.entity.living.LivingKnockBackEvent;
import net.minecraftforge.event.entity.player.AttackEntityEvent;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
@ -62,17 +63,18 @@ public class ExtendoGripItem extends Item {
public ExtendoGripItem(Properties properties) {
super(properties.maxStackSize(1)
.rarity(Rarity.UNCOMMON));
.rarity(Rarity.UNCOMMON));
}
public static final String EXTENDO_MARKER = "createExtendo";
public static final String DUAL_EXTENDO_MARKER = "createDualExtendo";
@SubscribeEvent
public static void holdingExtendoGripIncreasesRange(LivingUpdateEvent event) {
if (!(event.getEntity() instanceof PlayerEntity))
return;
PlayerEntity player = (PlayerEntity) event.getEntityLiving();
String marker = "createExtendo";
String dualMarker = "createDualExtendo";
CompoundNBT persistentData = player.getPersistentData();
boolean inOff = AllItems.EXTENDO_GRIP.isIn(player.getHeldItemOffhand());
@ -80,38 +82,49 @@ public class ExtendoGripItem extends Item {
boolean holdingDualExtendo = inOff && inMain;
boolean holdingExtendo = inOff ^ inMain;
holdingExtendo &= !holdingDualExtendo;
boolean wasHoldingExtendo = persistentData.contains(marker);
boolean wasHoldingDualExtendo = persistentData.contains(dualMarker);
boolean wasHoldingExtendo = persistentData.contains(EXTENDO_MARKER);
boolean wasHoldingDualExtendo = persistentData.contains(DUAL_EXTENDO_MARKER);
if (holdingExtendo != wasHoldingExtendo) {
if (!holdingExtendo) {
player.getAttributes().removeModifiers(rangeModifier.getValue());
persistentData.remove(marker);
persistentData.remove(EXTENDO_MARKER);
} else {
if (player instanceof ServerPlayerEntity)
AllTriggers.EXTENDO.trigger((ServerPlayerEntity) player);
player.getAttributes()
.addTemporaryModifiers(rangeModifier.getValue());
persistentData.putBoolean(marker, true);
.addTemporaryModifiers(rangeModifier.getValue());
persistentData.putBoolean(EXTENDO_MARKER, true);
}
}
if (holdingDualExtendo != wasHoldingDualExtendo) {
if (!holdingDualExtendo) {
player.getAttributes()
.removeModifiers(doubleRangeModifier.getValue());
persistentData.remove(dualMarker);
.removeModifiers(doubleRangeModifier.getValue());
persistentData.remove(DUAL_EXTENDO_MARKER);
} else {
if (player instanceof ServerPlayerEntity)
AllTriggers.GIGA_EXTENDO.trigger((ServerPlayerEntity) player);
player.getAttributes()
.addTemporaryModifiers(doubleRangeModifier.getValue());
persistentData.putBoolean(dualMarker, true);
.addTemporaryModifiers(doubleRangeModifier.getValue());
persistentData.putBoolean(DUAL_EXTENDO_MARKER, true);
}
}
}
@SubscribeEvent
public static void addReachToJoiningPlayersHoldingExtendo(PlayerEvent.PlayerLoggedInEvent event) {
PlayerEntity player = event.getPlayer();
CompoundNBT persistentData = player.getPersistentData();
if (persistentData.contains(DUAL_EXTENDO_MARKER))
player.getAttributes().addTemporaryModifiers(doubleRangeModifier.getValue());
else if (persistentData.contains(EXTENDO_MARKER))
player.getAttributes().addTemporaryModifiers(rangeModifier.getValue());
}
@SubscribeEvent
@OnlyIn(Dist.CLIENT)
public static void dontMissEntitiesWhenYouHaveHighReachDistance(ClickInputEvent event) {

View file

@ -2,8 +2,8 @@ package com.simibubi.create.content.curiosities.tools;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.foundation.block.render.CustomRenderedItemModelRenderer;
import com.simibubi.create.foundation.item.PartialItemModelRenderer;
import com.simibubi.create.foundation.item.render.CustomRenderedItemModelRenderer;
import com.simibubi.create.foundation.item.render.PartialItemModelRenderer;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
import com.simibubi.create.foundation.utility.MatrixStacker;

View file

@ -1,6 +1,6 @@
package com.simibubi.create.content.curiosities.tools;
import com.simibubi.create.foundation.block.render.CustomRenderedItemModel;
import com.simibubi.create.foundation.item.render.CustomRenderedItemModel;
import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.tileentity.ItemStackTileEntityRenderer;

View file

@ -1,7 +1,7 @@
package com.simibubi.create.content.curiosities.tools;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.foundation.block.render.CustomRenderedItemModel;
import com.simibubi.create.foundation.item.render.CustomRenderedItemModel;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
import net.minecraft.client.Minecraft;

View file

@ -1,9 +1,9 @@
package com.simibubi.create.content.curiosities.zapper;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.foundation.block.render.CustomRenderedItemModel;
import com.simibubi.create.foundation.block.render.CustomRenderedItemModelRenderer;
import com.simibubi.create.foundation.item.PartialItemModelRenderer;
import com.simibubi.create.foundation.item.render.CustomRenderedItemModel;
import com.simibubi.create.foundation.item.render.CustomRenderedItemModelRenderer;
import com.simibubi.create.foundation.item.render.PartialItemModelRenderer;
import net.minecraft.block.BlockState;
import net.minecraft.block.FourWayBlock;

View file

@ -5,7 +5,7 @@ import static net.minecraft.util.math.MathHelper.clamp;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.content.curiosities.zapper.ZapperItemRenderer;
import com.simibubi.create.foundation.item.PartialItemModelRenderer;
import com.simibubi.create.foundation.item.render.PartialItemModelRenderer;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
import net.minecraft.client.Minecraft;

View file

@ -1,6 +1,6 @@
package com.simibubi.create.content.curiosities.zapper.terrainzapper;
import com.simibubi.create.foundation.block.render.CustomRenderedItemModel;
import com.simibubi.create.foundation.item.render.CustomRenderedItemModel;
import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.tileentity.ItemStackTileEntityRenderer;

View file

@ -200,24 +200,18 @@ public abstract class AbstractChuteBlock extends Block implements IWrenchable, I
public ActionResultType onUse(BlockState p_225533_1_, World world, BlockPos pos, PlayerEntity player, Hand hand,
BlockRayTraceResult p_225533_6_) {
if (!player.getHeldItem(hand)
.isEmpty())
.isEmpty())
return ActionResultType.PASS;
if (world.isRemote)
return ActionResultType.SUCCESS;
try {
ChuteTileEntity te = getTileEntity(world, pos);
if (te == null)
return ActionResultType.PASS;
return onTileEntityUse(world, pos, te -> {
if (te.item.isEmpty())
return ActionResultType.PASS;
player.inventory.placeItemBackInInventory(world, te.item);
te.setItem(ItemStack.EMPTY);
return ActionResultType.SUCCESS;
} catch (TileEntityException e) {
e.printStackTrace();
}
return ActionResultType.PASS;
});
}
}

View file

@ -47,30 +47,25 @@ public class AnalogLeverBlock extends HorizontalFaceBlock implements ITE<AnalogL
@Override
public ActionResultType onUse(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn,
BlockRayTraceResult hit) {
BlockRayTraceResult hit) {
if (worldIn.isRemote) {
addParticles(state, worldIn, pos, 1.0F);
return ActionResultType.SUCCESS;
}
try {
return onTileEntityUse(worldIn, pos, te -> {
boolean sneak = player.isSneaking();
AnalogLeverTileEntity te = getTileEntity(worldIn, pos);
te.changeState(sneak);
float f = .25f + ((te.state + 5) / 15f) * .5f;
worldIn.playSound(null, pos, SoundEvents.BLOCK_LEVER_CLICK, SoundCategory.BLOCKS, 0.2F, f);
} catch (TileEntityException e) {}
return ActionResultType.SUCCESS;
return ActionResultType.SUCCESS;
});
}
@Override
public int getWeakPower(BlockState blockState, IBlockReader blockAccess, BlockPos pos, Direction side) {
try {
return getTileEntity(blockAccess, pos).state;
} catch (TileEntityException e) {
return 0;
}
return getTileEntityOptional(blockAccess, pos).map(al -> al.state)
.orElse(0);
}
@Override
@ -86,27 +81,26 @@ public class AnalogLeverBlock extends HorizontalFaceBlock implements ITE<AnalogL
@Override
@OnlyIn(Dist.CLIENT)
public void animateTick(BlockState stateIn, World worldIn, BlockPos pos, Random rand) {
try {
AnalogLeverTileEntity tileEntity = getTileEntity(worldIn, pos);
if (tileEntity.state != 0 && rand.nextFloat() < 0.25F)
withTileEntityDo(worldIn, pos, te -> {
if (te.state != 0 && rand.nextFloat() < 0.25F)
addParticles(stateIn, worldIn, pos, 0.5F);
} catch (TileEntityException e) {}
});
}
@Override
public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) {
try {
AnalogLeverTileEntity tileEntity = getTileEntity(worldIn, pos);
if (!isMoving && state.getBlock() != newState.getBlock()) {
if (tileEntity.state != 0)
updateNeighbors(state, worldIn, pos);
worldIn.removeTileEntity(pos);
}
} catch (TileEntityException e) {}
if (isMoving || state.getBlock() == newState.getBlock())
return;
withTileEntityDo(worldIn, pos, te -> {
if (te.state != 0)
updateNeighbors(state, worldIn, pos);
worldIn.removeTileEntity(pos);
});
}
private static void addParticles(BlockState state, IWorld worldIn, BlockPos pos, float alpha) {
Direction direction = state.get(HORIZONTAL_FACING).getOpposite();
Direction direction = state.get(HORIZONTAL_FACING)
.getOpposite();
Direction direction1 = getFacing(state).getOpposite();
double d0 = (double) pos.getX() + 0.5D + 0.1D * (double) direction.getXOffset()
+ 0.2D * (double) direction1.getXOffset();
@ -137,7 +131,7 @@ public class AnalogLeverBlock extends HorizontalFaceBlock implements ITE<AnalogL
public Class<AnalogLeverTileEntity> getTileEntityClass() {
return AnalogLeverTileEntity.class;
}
@Override
public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) {
return false;

View file

@ -42,52 +42,50 @@ public class NixieTubeBlock extends HorizontalBlock implements ITE<NixieTubeTile
@Override
public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand,
BlockRayTraceResult ray) {
try {
ItemStack heldItem = player.getHeldItem(hand);
NixieTubeTileEntity nixie = getTileEntity(world, pos);
ItemStack heldItem = player.getHeldItem(hand);
NixieTubeTileEntity nixie = getTileEntity(world, pos);
if (player.isSneaking())
if (nixie == null)
return ActionResultType.PASS;
if (player.isSneaking())
return ActionResultType.PASS;
if (heldItem.isEmpty()) {
if (nixie.reactsToRedstone())
return ActionResultType.PASS;
nixie.clearCustomText();
updateDisplayedRedstoneValue(state, world, pos);
return ActionResultType.SUCCESS;
}
if (heldItem.isEmpty()) {
if (nixie.reactsToRedstone())
return ActionResultType.PASS;
nixie.clearCustomText();
updateDisplayedRedstoneValue(state, world, pos);
return ActionResultType.SUCCESS;
}
if (heldItem.getItem() == Items.NAME_TAG && heldItem.hasDisplayName()) {
Direction left = state.get(HORIZONTAL_FACING)
if (heldItem.getItem() == Items.NAME_TAG && heldItem.hasDisplayName()) {
Direction left = state.get(HORIZONTAL_FACING)
.rotateY();
Direction right = left.getOpposite();
Direction right = left.getOpposite();
if (world.isRemote)
return ActionResultType.SUCCESS;
if (world.isRemote)
return ActionResultType.SUCCESS;
BlockPos currentPos = pos;
while (true) {
BlockPos nextPos = currentPos.offset(left);
if (world.getBlockState(nextPos) != state)
break;
currentPos = nextPos;
}
int index = 0;
while (true) {
final int rowPosition = index;
withTileEntityDo(world, currentPos, te -> te.displayCustomNameOf(heldItem, rowPosition));
BlockPos nextPos = currentPos.offset(right);
if (world.getBlockState(nextPos) != state)
break;
currentPos = nextPos;
index++;
}
BlockPos currentPos = pos;
while (true) {
BlockPos nextPos = currentPos.offset(left);
if (world.getBlockState(nextPos) != state)
break;
currentPos = nextPos;
}
} catch (TileEntityException e) {
int index = 0;
while (true) {
final int rowPosition = index;
withTileEntityDo(world, currentPos, te -> te.displayCustomNameOf(heldItem, rowPosition));
BlockPos nextPos = currentPos.offset(right);
if (world.getBlockState(nextPos) != state)
break;
currentPos = nextPos;
index++;
}
}
return ActionResultType.PASS;

View file

@ -114,12 +114,8 @@ public class RedstoneLinkBlock extends ProperDirectionalBlock implements ITE<Red
public int getWeakPower(BlockState state, IBlockReader blockAccess, BlockPos pos, Direction side) {
if (!state.get(RECEIVER))
return 0;
try {
RedstoneLinkTileEntity tileEntity = getTileEntity(blockAccess, pos);
return tileEntity.getReceivedSignal();
} catch (TileEntityException e) {
}
return 0;
return getTileEntityOptional(blockAccess, pos).map(RedstoneLinkTileEntity::getReceivedSignal)
.orElse(0);
}
@Override
@ -149,17 +145,15 @@ public class RedstoneLinkBlock extends ProperDirectionalBlock implements ITE<Red
public ActionResultType toggleMode(BlockState state, World worldIn, BlockPos pos) {
if (worldIn.isRemote)
return ActionResultType.SUCCESS;
try {
RedstoneLinkTileEntity te = getTileEntity(worldIn, pos);
return onTileEntityUse(worldIn, pos, te -> {
Boolean wasReceiver = state.get(RECEIVER);
boolean blockPowered = worldIn.isBlockPowered(pos);
worldIn.setBlockState(pos, state.cycle(RECEIVER)
.with(POWERED, blockPowered), 3);
.with(POWERED, blockPowered), 3);
te.transmit(wasReceiver ? 0 : getPower(worldIn, pos));
return ActionResultType.SUCCESS;
} catch (TileEntityException e) {
}
return ActionResultType.PASS;
});
}
@Override

View file

@ -1,5 +1,7 @@
package com.simibubi.create.content.logistics.block.redstone;
import java.util.Random;
import com.simibubi.create.AllItems;
import com.simibubi.create.AllShapes;
import com.simibubi.create.AllTileEntities;
@ -27,6 +29,7 @@ import net.minecraft.util.math.shapes.VoxelShape;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.IWorldReader;
import net.minecraft.world.World;
import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.fml.DistExecutor;
@ -82,11 +85,14 @@ public class StockpileSwitchBlock extends HorizontalBlock implements ITE<Stockpi
public int getWeakPower(BlockState blockState, IBlockReader blockAccess, BlockPos pos, Direction side) {
if (side == blockState.get(HORIZONTAL_FACING).getOpposite())
return 0;
try {
return getTileEntity(blockAccess, pos).isPowered() ? 15 : 0;
} catch (TileEntityException e) {
}
return 0;
return getTileEntityOptional(blockAccess, pos).filter(StockpileSwitchTileEntity::isPowered)
.map($ -> 15)
.orElse(0);
}
@Override
public void scheduledTick(BlockState blockState, ServerWorld world, BlockPos pos, Random random) {
getTileEntityOptional(world, pos).ifPresent(StockpileSwitchTileEntity::updatePowerAfterDelay);
}
@Override

View file

@ -14,6 +14,7 @@ import net.minecraft.nbt.CompoundNBT;
import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.world.TickPriority;
import net.minecraftforge.items.IItemHandler;
public class StockpileSwitchTileEntity extends SmartTileEntity {
@ -23,6 +24,7 @@ public class StockpileSwitchTileEntity extends SmartTileEntity {
public float currentLevel;
private boolean state;
private boolean inverted;
private boolean poweredAfterDelay;
private FilteringBehaviour filtering;
private InvManipulationBehaviour observedInventory;
@ -34,6 +36,7 @@ public class StockpileSwitchTileEntity extends SmartTileEntity {
currentLevel = -1;
state = false;
inverted = false;
poweredAfterDelay = false;
setLazyTickRate(10);
}
@ -44,6 +47,7 @@ public class StockpileSwitchTileEntity extends SmartTileEntity {
currentLevel = compound.getFloat("Current");
state = compound.getBoolean("Powered");
inverted = compound.getBoolean("Inverted");
poweredAfterDelay = compound.getBoolean("PoweredAfterDelay");
super.fromTag(blockState, compound, clientPacket);
}
@ -54,6 +58,7 @@ public class StockpileSwitchTileEntity extends SmartTileEntity {
compound.putFloat("Current", currentLevel);
compound.putBoolean("Powered", state);
compound.putBoolean("Inverted", inverted);
compound.putBoolean("PoweredAfterDelay", poweredAfterDelay);
super.write(compound, clientPacket);
}
@ -110,8 +115,10 @@ public class StockpileSwitchTileEntity extends SmartTileEntity {
if (currentLevel > 0)
displayLevel = (int) (currentLevel * 6);
world.setBlockState(pos, getBlockState().with(StockpileSwitchBlock.INDICATOR, displayLevel), update ? 3 : 2);
if (update)
world.updateNeighbors(pos, getBlockState().getBlock());
if (update && !world.getPendingBlockTicks().isTickPending(pos, getBlockState().getBlock()))
world.getPendingBlockTicks().scheduleTick(pos, getBlockState().getBlock(), 2, TickPriority.NORMAL);
if (changed || update)
sendData();
}
@ -137,19 +144,28 @@ public class StockpileSwitchTileEntity extends SmartTileEntity {
public float getLevelForDisplay() {
return currentLevel == -1 ? 0 : currentLevel;
}
public boolean getState() {
return state;
}
public boolean isPowered() {
public boolean shouldBePowered() {
return inverted != state;
}
public void updatePowerAfterDelay() {
poweredAfterDelay = shouldBePowered();
world.updateNeighbors(pos, getBlockState().getBlock());
}
public boolean isPowered() {
return poweredAfterDelay;
}
public boolean isInverted() {
return inverted;
}
public void setInverted(boolean inverted) {
if (inverted == this.inverted)
return;

View file

@ -5,8 +5,8 @@ import java.util.Vector;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllItems;
import com.simibubi.create.content.logistics.item.LinkedControllerClientHandler.Mode;
import com.simibubi.create.foundation.block.render.CustomRenderedItemModelRenderer;
import com.simibubi.create.foundation.item.PartialItemModelRenderer;
import com.simibubi.create.foundation.item.render.CustomRenderedItemModelRenderer;
import com.simibubi.create.foundation.item.render.PartialItemModelRenderer;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
import com.simibubi.create.foundation.utility.MatrixStacker;
import com.simibubi.create.foundation.utility.animation.LerpedFloat;

View file

@ -1,6 +1,6 @@
package com.simibubi.create.content.logistics.item;
import com.simibubi.create.foundation.block.render.CustomRenderedItemModel;
import com.simibubi.create.foundation.item.render.CustomRenderedItemModel;
import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.tileentity.ItemStackTileEntityRenderer;

View file

@ -38,7 +38,8 @@ public class LinkedControllerScreen extends AbstractSimiContainerScreen<LinkedCo
@Override
protected void drawMouseoverTooltip(MatrixStack ms, int x, int y) {
if (!this.client.player.inventory.getItemStack()
.isEmpty() || this.hoveredSlot == null || this.hoveredSlot.getHasStack()) {
.isEmpty() || this.hoveredSlot == null || this.hoveredSlot.getHasStack()
|| hoveredSlot.inventory == container.playerInventory) {
super.drawMouseoverTooltip(ms, x, y);
return;
}
@ -48,6 +49,8 @@ public class LinkedControllerScreen extends AbstractSimiContainerScreen<LinkedCo
@Override
public List<ITextComponent> getTooltipFromItem(ItemStack stack) {
List<ITextComponent> list = super.getTooltipFromItem(stack);
if (hoveredSlot.inventory == container.playerInventory)
return list;
return hoveredSlot != null ? addToTooltip(list, hoveredSlot.getSlotIndex()) : list;
}

View file

@ -1,145 +1,58 @@
package com.simibubi.create.content.logistics.item.filter;
import com.simibubi.create.foundation.gui.IClearableContainer;
import com.simibubi.create.foundation.gui.GhostItemContainer;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.ClickType;
import net.minecraft.inventory.container.Container;
import net.minecraft.inventory.container.ContainerType;
import net.minecraft.inventory.container.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketBuffer;
import net.minecraftforge.items.ItemHandlerHelper;
import net.minecraftforge.items.ItemStackHandler;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
public abstract class AbstractFilterContainer extends Container implements IClearableContainer {
public PlayerEntity player;
protected PlayerInventory playerInventory;
public ItemStack filterItem;
public ItemStackHandler filterInventory;
public abstract class AbstractFilterContainer extends GhostItemContainer<ItemStack> {
protected AbstractFilterContainer(ContainerType<?> type, int id, PlayerInventory inv, PacketBuffer extraData) {
this(type, id, inv, extraData.readItemStack());
super(type, id, inv, extraData);
}
protected AbstractFilterContainer(ContainerType<?> type, int id, PlayerInventory inv, ItemStack filterItem) {
super(type, id);
player = inv.player;
playerInventory = inv;
this.filterItem = filterItem;
init();
}
protected void init() {
this.filterInventory = createFilterInventory();
readData(filterItem);
addPlayerSlots();
addFilterSlots();
detectAndSendChanges();
}
@Override
public void clearContents() {
for (int i = 0; i < filterInventory.getSlots(); i++)
filterInventory.setStackInSlot(i, ItemStack.EMPTY);
}
protected abstract int getInventoryOffset();
protected abstract void addFilterSlots();
protected abstract ItemStackHandler createFilterInventory();
protected abstract void readData(ItemStack filterItem);
protected abstract void saveData(ItemStack filterItem);
protected void addPlayerSlots() {
int x = 8;
int y = 28 + getInventoryOffset();
for (int hotbarSlot = 0; hotbarSlot < 9; ++hotbarSlot)
this.addSlot(new Slot(playerInventory, hotbarSlot, x + hotbarSlot * 18, y + 58));
for (int row = 0; row < 3; ++row)
for (int col = 0; col < 9; ++col)
this.addSlot(new Slot(playerInventory, col + row * 9 + 9, x + col * 18, y + row * 18));
}
@Override
public boolean canMergeSlot(ItemStack stack, Slot slotIn) {
return canDragIntoSlot(slotIn);
}
@Override
public boolean canDragIntoSlot(Slot slotIn) {
return slotIn.inventory == playerInventory;
}
@Override
public boolean canInteractWith(PlayerEntity playerIn) {
return true;
protected AbstractFilterContainer(ContainerType<?> type, int id, PlayerInventory inv, ItemStack contentHolder) {
super(type, id, inv, contentHolder);
}
@Override
public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, PlayerEntity player) {
if (slotId == playerInventory.currentItem && clickTypeIn != ClickType.THROW)
return ItemStack.EMPTY;
ItemStack held = playerInventory.getItemStack();
if (slotId < 36)
return super.slotClick(slotId, dragType, clickTypeIn, player);
if (clickTypeIn == ClickType.THROW)
return ItemStack.EMPTY;
int slot = slotId - 36;
if (clickTypeIn == ClickType.CLONE) {
if (player.isCreative() && held.isEmpty()) {
ItemStack stackInSlot = filterInventory.getStackInSlot(slot).copy();
stackInSlot.setCount(64);
playerInventory.setItemStack(stackInSlot);
return ItemStack.EMPTY;
}
return ItemStack.EMPTY;
}
if (held.isEmpty()) {
filterInventory.setStackInSlot(slot, ItemStack.EMPTY);
return ItemStack.EMPTY;
}
ItemStack insert = held.copy();
insert.setCount(1);
filterInventory.setStackInSlot(slot, insert);
return held;
return super.slotClick(slotId, dragType, clickTypeIn, player);
}
@Override
public ItemStack transferStackInSlot(PlayerEntity playerIn, int index) {
if (index < 36) {
ItemStack stackToInsert = playerInventory.getStackInSlot(index);
for (int i = 0; i < filterInventory.getSlots(); i++) {
ItemStack stack = filterInventory.getStackInSlot(i);
if (ItemHandlerHelper.canItemStacksStack(stack, stackToInsert))
break;
if (stack.isEmpty()) {
ItemStack copy = stackToInsert.copy();
copy.setCount(1);
filterInventory.insertItem(i, copy, false);
break;
}
}
} else
filterInventory.extractItem(index - 36, 1, false);
return ItemStack.EMPTY;
protected boolean allowRepeats() {
return false;
}
@Override
public void onContainerClosed(PlayerEntity playerIn) {
super.onContainerClosed(playerIn);
filterItem.getOrCreateTag().put("Items", filterInventory.serializeNBT());
saveData(filterItem);
@OnlyIn(Dist.CLIENT)
protected ItemStack createOnClient(PacketBuffer extraData) {
return extraData.readItemStack();
}
protected abstract int getPlayerInventoryXOffset();
protected abstract void addFilterSlots();
@Override
protected void addSlots() {
addPlayerSlots(8, 28 + getPlayerInventoryXOffset());
addFilterSlots();
}
@Override
protected void saveData(ItemStack contentHolder) {
contentHolder.getOrCreateTag()
.put("Items", ghostInventory.serializeNBT());
}
}

View file

@ -66,9 +66,9 @@ public abstract class AbstractFilterScreen<F extends AbstractFilterContainer> ex
int invY = y + background.height + 10;
PLAYER_INVENTORY.draw(ms, this, invX, invY);
textRenderer.draw(ms, playerInventory.getDisplayName(), invX + 7, invY + 6, 0x666666);
textRenderer.draw(ms, I18n.format(container.filterItem.getTranslationKey()), x + 15, y + 3, 0xdedede);
textRenderer.draw(ms, I18n.format(container.contentHolder.getTranslationKey()), x + 15, y + 3, 0xdedede);
GuiGameElement.of(container.filterItem)
GuiGameElement.of(container.contentHolder)
.<GuiGameElement.GuiRenderBuilder>at(x + background.width, guiTop + background.height - 60, -200)
.scale(5)
.render(ms);
@ -82,7 +82,7 @@ public abstract class AbstractFilterScreen<F extends AbstractFilterContainer> ex
handleIndicators();
if (!container.player.getHeldItemMainhand()
.equals(container.filterItem, false))
.equals(container.contentHolder, false))
client.player.closeScreen();
}

View file

@ -53,22 +53,22 @@ public class AttributeFilterContainer extends AbstractFilterContainer {
}
@Override
protected void init() {
super.init();
protected void init(PlayerInventory inv, ItemStack contentHolder) {
super.init(inv, contentHolder);
ItemStack stack = new ItemStack(Items.NAME_TAG);
stack.setDisplayName(
new StringTextComponent("Selected Tags").formatted(TextFormatting.RESET, TextFormatting.BLUE));
filterInventory.setStackInSlot(1, stack);
new StringTextComponent("Selected Tags").formatted(TextFormatting.RESET, TextFormatting.BLUE));
ghostInventory.setStackInSlot(1, stack);
}
@Override
protected ItemStackHandler createFilterInventory() {
protected ItemStackHandler createGhostInventory() {
return new ItemStackHandler(2);
}
protected void addFilterSlots() {
this.addSlot(new SlotItemHandler(filterInventory, 0, -34, 22));
this.addSlot(new SlotItemHandler(filterInventory, 1, -28, 57) {
this.addSlot(new SlotItemHandler(ghostInventory, 0, -34, 22));
this.addSlot(new SlotItemHandler(ghostInventory, 1, -28, 57) {
@Override
public boolean canTakeStack(PlayerEntity playerIn) {
return false;
@ -102,20 +102,20 @@ public class AttributeFilterContainer extends AbstractFilterContainer {
if (index == 37)
return ItemStack.EMPTY;
if (index == 36) {
filterInventory.setStackInSlot(37, ItemStack.EMPTY);
ghostInventory.setStackInSlot(37, ItemStack.EMPTY);
return ItemStack.EMPTY;
}
if (index < 36) {
ItemStack stackToInsert = playerInventory.getStackInSlot(index);
ItemStack copy = stackToInsert.copy();
copy.setCount(1);
filterInventory.setStackInSlot(0, copy);
ghostInventory.setStackInSlot(0, copy);
}
return ItemStack.EMPTY;
}
@Override
protected int getInventoryOffset() {
protected int getPlayerInventoryXOffset() {
return 83;
}
@ -134,14 +134,16 @@ public class AttributeFilterContainer extends AbstractFilterContainer {
@Override
protected void saveData(ItemStack filterItem) {
super.saveData(filterItem);
filterItem.getOrCreateTag()
.putInt("WhitelistMode", whitelistMode.ordinal());
.putInt("WhitelistMode", whitelistMode.ordinal());
ListNBT attributes = new ListNBT();
selectedAttributes.forEach(at -> {
if (at == null)
return;
CompoundNBT compoundNBT = new CompoundNBT();
at.getFirst().serializeNBT(compoundNBT);
at.getFirst()
.serializeNBT(compoundNBT);
compoundNBT.putBoolean("Inverted", at.getSecond());
attributes.add(compoundNBT);
});

View file

@ -87,21 +87,21 @@ public class AttributeFilterScreen extends AbstractFilterScreen<AttributeFilterC
handleIndicators();
attributeSelectorLabel = new Label(x + 43, y + 26, StringTextComponent.EMPTY).colored(0xF3EBDE)
.withShadow();
.withShadow();
attributeSelector = new SelectionScrollInput(x + 39, y + 21, 137, 18);
attributeSelector.forOptions(Arrays.asList(StringTextComponent.EMPTY));
attributeSelector.removeCallback();
referenceItemChanged(container.filterInventory.getStackInSlot(0));
referenceItemChanged(container.ghostInventory.getStackInSlot(0));
widgets.add(attributeSelector);
widgets.add(attributeSelectorLabel);
selectedAttributes.clear();
selectedAttributes.add((container.selectedAttributes.isEmpty() ? noSelectedT : selectedT).copy()
.formatted(TextFormatting.YELLOW));
.formatted(TextFormatting.YELLOW));
container.selectedAttributes.forEach(at -> selectedAttributes.add(new StringTextComponent("- ")
.append(at.getFirst()
.format(at.getSecond()))
.append(at.getFirst()
.format(at.getSecond()))
.formatted(TextFormatting.GRAY)));
}
@ -160,13 +160,13 @@ public class AttributeFilterScreen extends AbstractFilterScreen<AttributeFilterC
@Override
public void renderWindowForeground(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
ItemStack stack = container.filterInventory.getStackInSlot(1);
ItemStack stack = container.ghostInventory.getStackInSlot(1);
matrixStack.push();
matrixStack.translate(0.0F, 0.0F, 32.0F);
this.setZOffset(200);
this.itemRenderer.zLevel = 200.0F;
this.itemRenderer.renderItemOverlayIntoGUI(textRenderer, stack, guiLeft - 27, guiTop + 57,
String.valueOf(selectedAttributes.size() - 1));
String.valueOf(selectedAttributes.size() - 1));
this.setZOffset(0);
this.itemRenderer.zLevel = 0.0F;
matrixStack.pop();
@ -177,7 +177,7 @@ public class AttributeFilterScreen extends AbstractFilterScreen<AttributeFilterC
@Override
public void tick() {
super.tick();
ItemStack stackInSlot = container.filterInventory.getStackInSlot(0);
ItemStack stackInSlot = container.ghostInventory.getStackInSlot(0);
if (!stackInSlot.equals(lastItemScanned, false))
referenceItemChanged(stackInSlot);
}

View file

@ -31,31 +31,31 @@ public class FilterContainer extends AbstractFilterContainer {
protected void addFilterSlots() {
int x = -27;
int y = 20;
for (int row = 0; row < 2; ++row)
for (int col = 0; col < 9; ++col)
this.addSlot(new SlotItemHandler(filterInventory, col + row * 9, x + col * 18, y + row * 18));
}
@Override
protected ItemStackHandler createFilterInventory() {
return FilterItem.getFilterItems(filterItem);
this.addSlot(new SlotItemHandler(ghostInventory, col + row * 9, x + col * 18, y + row * 18));
}
@Override
protected int getInventoryOffset() {
protected ItemStackHandler createGhostInventory() {
return FilterItem.getFilterItems(contentHolder);
}
@Override
protected int getPlayerInventoryXOffset() {
return 97;
}
@Override
protected void readData(ItemStack filterItem) {
CompoundNBT tag = filterItem.getOrCreateTag();
respectNBT = tag.getBoolean("RespectNBT");
blacklist = tag.getBoolean("Blacklist");
}
@Override
protected void saveData(ItemStack filterItem) {
super.saveData(filterItem);
CompoundNBT tag = filterItem.getOrCreateTag();
tag.putBoolean("RespectNBT", respectNBT);
tag.putBoolean("Blacklist", blacklist);

View file

@ -57,7 +57,7 @@ public class FilterScreenPacket extends SimplePacketBase {
if (option == Option.IGNORE_DATA)
c.respectNBT = false;
if (option == Option.UPDATE_FILTER_ITEM)
c.filterInventory.setStackInSlot(
c.ghostInventory.setStackInSlot(
data.getInt("Slot"),
net.minecraft.item.ItemStack.read(data.getCompound("Item")));
}

View file

@ -3,10 +3,10 @@ package com.simibubi.create.content.palettes;
import static com.simibubi.create.foundation.data.CreateRegistrate.connectedTextures;
import com.google.common.collect.ImmutableList;
import com.simibubi.create.AllColorHandlers;
import com.simibubi.create.AllTags;
import com.simibubi.create.Create;
import com.simibubi.create.foundation.data.CreateRegistrate;
import com.simibubi.create.foundation.utility.ColorHandlers;
import com.simibubi.create.foundation.utility.Lang;
import com.tterrag.registrate.builders.BlockBuilder;
import com.tterrag.registrate.util.DataIngredient;
@ -41,7 +41,7 @@ public class PalettesVariantEntry {
if (pattern == PaletteBlockPattern.COBBLESTONE)
builder.item().tag(AllTags.AllItemTags.COBBLESTONE.tag);
if (pattern.hasFoliage())
builder.onRegister(CreateRegistrate.blockColors(() -> AllColorHandlers::getGrassyBlock));
builder.color(() -> ColorHandlers::getGrassyBlock);
pattern.createCTBehaviour(variant)
.ifPresent(b -> builder.onRegister(connectedTextures(b)));
@ -53,7 +53,7 @@ public class PalettesVariantEntry {
if (pattern.hasFoliage())
builder.item()
.onRegister(CreateRegistrate.itemColors(() -> AllColorHandlers::getGrassyItem))
.color(() -> ColorHandlers::getGrassyItem)
.build();
else
builder.simpleItem();

View file

@ -1,6 +1,6 @@
package com.simibubi.create.content.palettes;
import com.simibubi.create.foundation.block.IBlockVertexColor;
import com.simibubi.create.foundation.block.render.IBlockVertexColor;
import com.simibubi.create.foundation.utility.ColorHelper;
public class ScoriaVertexColor implements IBlockVertexColor {

View file

@ -25,6 +25,7 @@ import com.simibubi.create.content.contraptions.components.turntable.TurntableHa
import com.simibubi.create.content.contraptions.goggles.IHaveGoggleInformation;
import com.simibubi.create.content.contraptions.relays.belt.item.BeltConnectorHandler;
import com.simibubi.create.content.curiosities.armor.CopperBacktankArmorLayer;
import com.simibubi.create.content.curiosities.tools.BlueprintOverlayRenderer;
import com.simibubi.create.content.curiosities.tools.ExtendoGripRenderHandler;
import com.simibubi.create.content.curiosities.zapper.ZapperItem;
import com.simibubi.create.content.curiosities.zapper.ZapperRenderHandler;
@ -141,6 +142,7 @@ public class ClientEvents {
CreateClient.OUTLINER.tickOutlines();
CreateClient.GHOST_BLOCKS.tickGhosts();
ContraptionRenderDispatcher.tick();
BlueprintOverlayRenderer.tick();
}
@SubscribeEvent
@ -218,6 +220,7 @@ public class ClientEvents {
float partialTicks) {
CreateClient.SCHEMATIC_HANDLER.renderOverlay(ms, buffer, light, overlay, partialTicks);
LinkedControllerClientHandler.renderOverlay(ms, buffer, light, overlay, partialTicks);
BlueprintOverlayRenderer.renderOverlay(ms, buffer, light, overlay, partialTicks);
}
@SubscribeEvent

View file

@ -0,0 +1,33 @@
package com.simibubi.create.foundation.block;
import java.util.Arrays;
import java.util.function.Function;
import com.tterrag.registrate.util.entry.BlockEntry;
import net.minecraft.block.Block;
import net.minecraft.item.DyeColor;
public class DyedBlockList<T extends Block> {
private static final int COLOR_AMOUNT = DyeColor.values().length;
private final BlockEntry<?>[] values = new BlockEntry<?>[COLOR_AMOUNT];
public DyedBlockList(Function<DyeColor, BlockEntry<? extends T>> filler) {
for (DyeColor color : DyeColor.values()) {
values[color.ordinal()] = filler.apply(color);
}
}
@SuppressWarnings("unchecked")
public BlockEntry<T> get(DyeColor color) {
return (BlockEntry<T>) values[color.ordinal()];
}
@SuppressWarnings("unchecked")
public BlockEntry<T>[] toArray() {
return (BlockEntry<T>[]) Arrays.copyOf(values, values.length);
}
}

View file

@ -2,102 +2,44 @@ package com.simibubi.create.foundation.block;
import java.util.Optional;
import java.util.function.Consumer;
import java.util.function.Function;
import com.simibubi.create.Create;
import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.utility.WorldHelper;
import javax.annotation.Nullable;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.IWorld;
public interface ITE<T extends TileEntity> {
Class<T> getTileEntityClass();
default void withTileEntityDo(IBlockReader world, BlockPos pos, Consumer<T> action) {
try {
action.accept(getTileEntity(world, pos));
} catch (TileEntityException e) {
}
getTileEntityOptional(world, pos).ifPresent(action);
}
default ActionResultType onTileEntityUse(IBlockReader world, BlockPos pos, Function<T, ActionResultType> action) {
return getTileEntityOptional(world, pos).map(action)
.orElse(ActionResultType.PASS);
}
default Optional<T> getTileEntityOptional(IBlockReader world, BlockPos pos) {
try {
return Optional.of(getTileEntity(world, pos));
} catch (TileEntityException e) {
}
return Optional.empty();
return Optional.ofNullable(getTileEntity(world, pos));
}
@Nullable
@SuppressWarnings("unchecked")
default T getTileEntity(IBlockReader worldIn, BlockPos pos) throws TileEntityException {
default T getTileEntity(IBlockReader worldIn, BlockPos pos) {
TileEntity tileEntity = worldIn.getTileEntity(pos);
Class<T> expectedClass = getTileEntityClass();
IWorld world = null;
if (worldIn instanceof IWorld)
world = (IWorld) worldIn;
if (tileEntity == null)
throw new MissingTileEntityException(world, pos, expectedClass);
return null;
if (!expectedClass.isInstance(tileEntity))
throw new InvalidTileEntityException(world, pos, expectedClass, tileEntity.getClass());
return null;
return (T) tileEntity;
}
static class TileEntityException extends Throwable {
private static final long serialVersionUID = 1L;
public TileEntityException(IWorld world, BlockPos pos, Class<?> teClass) {
super(makeBaseMessage(world, pos, teClass));
}
public TileEntityException(String message) {
super(message);
report(this);
}
static String makeBaseMessage(IWorld world, BlockPos pos, Class<?> expectedTeClass) {
return String.format("[%s] @(%d, %d, %d), expecting a %s", getDimensionName(world), pos.getX(), pos.getY(),
pos.getZ(), expectedTeClass.getSimpleName());
}
static String getDimensionName(IWorld world) {
String notAvailable = "Dim N/A";
if (world == null)
return notAvailable;
ResourceLocation registryName = WorldHelper.getDimensionID(world);
if (registryName == null)
return notAvailable;
return registryName.toString();
}
}
static class MissingTileEntityException extends TileEntityException {
private static final long serialVersionUID = 1L;
public MissingTileEntityException(IWorld world, BlockPos pos, Class<?> teClass) {
super("Missing TileEntity: " + makeBaseMessage(world, pos, teClass));
}
}
static class InvalidTileEntityException extends TileEntityException {
private static final long serialVersionUID = 1L;
public InvalidTileEntityException(IWorld world, BlockPos pos, Class<?> expectedTeClass, Class<?> foundTeClass) {
super("Wrong TileEntity: " + makeBaseMessage(world, pos, expectedTeClass) + ", found "
+ foundTeClass.getSimpleName());
}
}
static void report(TileEntityException e) {
if (AllConfigs.COMMON.logTeErrors.get())
Create.LOGGER.debug("TileEntityException thrown!", e);
}
}

View file

@ -13,15 +13,15 @@ import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
@Mod.EventBusSubscriber
@EventBusSubscriber
public class ItemUseOverrides {
private static final Set<ResourceLocation> overrides = new HashSet<>();
private static final Set<ResourceLocation> OVERRIDES = new HashSet<>();
public static void addBlock(Block block) {
overrides.add(block.getRegistryName());
OVERRIDES.add(block.getRegistryName());
}
@SubscribeEvent
@ -30,15 +30,15 @@ public class ItemUseOverrides {
return;
BlockState state = event.getWorld()
.getBlockState(event.getPos());
.getBlockState(event.getPos());
ResourceLocation id = state.getBlock()
.getRegistryName();
.getRegistryName();
if (!overrides.contains(id))
if (!OVERRIDES.contains(id))
return;
BlockRayTraceResult blockTrace =
new BlockRayTraceResult(VecHelper.getCenterOf(event.getPos()), event.getFace(), event.getPos(), true);
new BlockRayTraceResult(VecHelper.getCenterOf(event.getPos()), event.getFace(), event.getPos(), true);
ActionResultType result = state.onUse(event.getWorld(), event.getPlayer(), event.getHand(), blockTrace);
if (!result.isAccepted())
@ -46,6 +46,6 @@ public class ItemUseOverrides {
event.setCanceled(true);
event.setCancellationResult(result);
}
}

View file

@ -4,8 +4,6 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import com.simibubi.create.foundation.block.IBlockVertexColor;
import net.minecraft.block.BlockState;
import net.minecraft.client.renderer.model.BakedQuad;
import net.minecraft.client.renderer.model.IBakedModel;

View file

@ -1,4 +1,4 @@
package com.simibubi.create.foundation.block;
package com.simibubi.create.foundation.block.render;
@FunctionalInterface
public interface IBlockVertexColor {

View file

@ -3,7 +3,6 @@ package com.simibubi.create.foundation.config;
public class CCommon extends ConfigBase {
public CWorldGen worldGen = nested(0, CWorldGen::new, Comments.worldGen);
public ConfigBool logTeErrors = b(false, "logTeErrors", Comments.logTeErrors);
@Override
public String getName() {
@ -12,7 +11,6 @@ public class CCommon extends ConfigBase {
private static class Comments {
static String worldGen = "Modify Create's impact on your terrain";
static String logTeErrors = "Forward caught TileEntityExceptions to the log at debug level.";
}
}

View file

@ -5,12 +5,14 @@ import javax.annotation.Nullable;
import com.simibubi.create.Create;
import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.gui.AllIcons;
import com.simibubi.create.foundation.gui.DelegatedStencilElement;
import com.simibubi.create.foundation.gui.ScreenOpener;
import com.simibubi.create.foundation.gui.TextStencilElement;
import com.simibubi.create.foundation.gui.Theme;
import com.simibubi.create.foundation.gui.UIRenderHelper;
import com.simibubi.create.foundation.gui.widgets.BoxWidget;
import com.simibubi.create.foundation.item.TooltipHelper;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screen.Screen;
@ -32,6 +34,7 @@ public class BaseConfigScreen extends ConfigScreen {
BoxWidget clientConfigWidget;
BoxWidget commonConfigWidget;
BoxWidget serverConfigWidget;
BoxWidget goBack;
ForgeConfigSpec clientSpec;
ForgeConfigSpec commonSpec;
@ -40,6 +43,7 @@ public class BaseConfigScreen extends ConfigScreen {
String commonTile = "COMMON CONFIG";
String serverTile = "SERVER CONFIG";
String modID = Create.ID;
protected boolean returnOnClose;
/**
* If you are a Create Addon dev and want to make use of the same GUI
@ -107,12 +111,13 @@ public class BaseConfigScreen extends ConfigScreen {
protected void init() {
widgets.clear();
super.init();
returnOnClose = true;
TextStencilElement clientText = new TextStencilElement(client.fontRenderer, new StringTextComponent(clientTile).formatted(TextFormatting.BOLD)).centered(true, true);
TextStencilElement clientText = new TextStencilElement(client.fontRenderer, new StringTextComponent(clientTile)).centered(true, true);
widgets.add(clientConfigWidget = new BoxWidget(width / 2 - 100, height / 2 - 15 - 30, 200, 16).showingElement(clientText));
if (clientSpec != null) {
clientConfigWidget.withCallback(() -> ScreenOpener.open(new SubMenuConfigScreen(this, ModConfig.Type.CLIENT, clientSpec)));
clientConfigWidget.withCallback(() -> linkTo(new SubMenuConfigScreen(this, ModConfig.Type.CLIENT, clientSpec)));
clientText.withElementRenderer(BoxWidget.gradientFactory.apply(clientConfigWidget));
} else {
clientConfigWidget.active = false;
@ -120,11 +125,11 @@ public class BaseConfigScreen extends ConfigScreen {
clientText.withElementRenderer(DISABLED_RENDERER);
}
TextStencilElement commonText = new TextStencilElement(client.fontRenderer, new StringTextComponent(commonTile).formatted(TextFormatting.BOLD)).centered(true, true);
TextStencilElement commonText = new TextStencilElement(client.fontRenderer, new StringTextComponent(commonTile)).centered(true, true);
widgets.add(commonConfigWidget = new BoxWidget(width / 2 - 100, height / 2 - 15, 200, 16).showingElement(commonText));
if (commonSpec != null) {
commonConfigWidget.withCallback(() -> ScreenOpener.open(new SubMenuConfigScreen(this, ModConfig.Type.COMMON, commonSpec)));
commonConfigWidget.withCallback(() -> linkTo(new SubMenuConfigScreen(this, ModConfig.Type.COMMON, commonSpec)));
commonText.withElementRenderer(BoxWidget.gradientFactory.apply(commonConfigWidget));
} else {
commonConfigWidget.active = false;
@ -132,18 +137,46 @@ public class BaseConfigScreen extends ConfigScreen {
commonText.withElementRenderer(DISABLED_RENDERER);
}
TextStencilElement serverText = new TextStencilElement(client.fontRenderer, new StringTextComponent(serverTile).formatted(TextFormatting.BOLD)).centered(true, true);
TextStencilElement serverText = new TextStencilElement(client.fontRenderer, new StringTextComponent(serverTile)).centered(true, true);
widgets.add(serverConfigWidget = new BoxWidget(width / 2 - 100, height / 2 - 15 + 30, 200, 16).showingElement(serverText));
if (serverSpec != null && Minecraft.getInstance().world != null) {
serverConfigWidget.withCallback(() -> ScreenOpener.open(new SubMenuConfigScreen(this, ModConfig.Type.SERVER, serverSpec)));
serverConfigWidget.withCallback(() -> linkTo(new SubMenuConfigScreen(this, ModConfig.Type.SERVER, serverSpec)));
serverText.withElementRenderer(BoxWidget.gradientFactory.apply(serverConfigWidget));
} else {
serverConfigWidget.active = false;
serverConfigWidget.updateColorsFromState();
serverText.withElementRenderer(DISABLED_RENDERER);
serverConfigWidget.active = true;
serverConfigWidget.getToolTip()
.add(new StringTextComponent("Stored individually per World"));
serverConfigWidget.getToolTip()
.addAll(TooltipHelper.cutTextComponent(
new StringTextComponent(
"Gameplay settings can only be accessed from the in-game menu after joining a World or Server."),
TextFormatting.GRAY, TextFormatting.GRAY));
}
ConfigScreen.modID = this.modID;
goBack = new BoxWidget(width / 2 - 134, height / 2, 20, 20).withPadding(2, 2)
.withCallback(this::onClose);
goBack.showingElement(AllIcons.I_CONFIG_BACK.asStencil()
.withElementRenderer(BoxWidget.gradientFactory.apply(goBack)));
goBack.getToolTip()
.add(new StringTextComponent("Go Back"));
widgets.add(goBack);
}
private void linkTo(Screen screen) {
returnOnClose = false;
ScreenOpener.open(screen);
}
@Override
public void onClose() {
super.onClose();
ScreenOpener.open(parent);
}
}

View file

@ -135,7 +135,8 @@ public class ConfigScreenList extends ExtendedList<ConfigScreenList.Entry> {
@Override
public void render(MatrixStack ms, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean p_230432_9_, float partialTicks) {
UIRenderHelper.streak(ms, 0, x, y + height / 2, height - 6, width, 0xdd_000000);
UIRenderHelper.streak(ms, 0, x - 10, y + height / 2, height - 6, width / 8 * 7, 0xdd_000000);
UIRenderHelper.streak(ms, 180, x + (int) (width * 1.35f) + 10, y + height / 2, height - 6, width / 8 * 7, 0xdd_000000);
IFormattableTextComponent component = label.getComponent();
FontRenderer font = Minecraft.getInstance().fontRenderer;
if (font.getWidth(component) > getLabelWidth(width) - 10) {

View file

@ -7,6 +7,8 @@ import java.util.stream.Collectors;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllItems;
import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.gui.ScreenOpener;
import com.simibubi.create.foundation.gui.mainMenu.CreateMainMenuScreen;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screen.IngameMenuScreen;
@ -21,12 +23,12 @@ import net.minecraftforge.client.event.GuiScreenEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
public class OpenConfigButton extends Button {
public class OpenCreateMenuButton extends Button {
public static ItemStack icon = AllItems.GOGGLES.asStack();
public OpenConfigButton(int x, int y) {
super(x, y, 20, 20, StringTextComponent.EMPTY, OpenConfigButton::click);
public OpenCreateMenuButton(int x, int y) {
super(x, y, 20, 20, StringTextComponent.EMPTY, OpenCreateMenuButton::click);
}
@Override
@ -36,7 +38,7 @@ public class OpenConfigButton extends Button {
}
public static void click(Button b) {
Minecraft.getInstance().displayGuiScreen(BaseConfigScreen.forCreate(Minecraft.getInstance().currentScreen));
ScreenOpener.open(new CreateMainMenuScreen(Minecraft.getInstance().currentScreen));
}
public static class SingleMenuRow {
@ -102,7 +104,7 @@ public class OpenConfigButton extends Button {
.filter(w -> w.getMessage().getString().equals(target))
.findFirst()
.ifPresent(w -> event.addWidget(
new OpenConfigButton(w.x + offsetX_ + (onLeft ? -20 : w.getWidth()), w.y)
new OpenCreateMenuButton(w.x + offsetX_ + (onLeft ? -20 : w.getWidth()), w.y)
));
}
}

View file

@ -1,9 +1,11 @@
package com.simibubi.create.foundation.config.ui;
import java.awt.Color;
import java.awt.*;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.function.Consumer;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@ -14,6 +16,7 @@ import com.electronwill.nightconfig.core.AbstractConfig;
import com.electronwill.nightconfig.core.UnmodifiableConfig;
import com.google.common.collect.Lists;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.foundation.config.ui.ConfigScreenList.LabeledEntry;
import com.simibubi.create.foundation.config.ui.entries.BooleanEntry;
import com.simibubi.create.foundation.config.ui.entries.EnumEntry;
import com.simibubi.create.foundation.config.ui.entries.NumberEntry;
@ -21,6 +24,7 @@ import com.simibubi.create.foundation.config.ui.entries.SubMenuEntry;
import com.simibubi.create.foundation.config.ui.entries.ValueEntry;
import com.simibubi.create.foundation.gui.AllIcons;
import com.simibubi.create.foundation.gui.ConfirmationScreen;
import com.simibubi.create.foundation.gui.ConfirmationScreen.Response;
import com.simibubi.create.foundation.gui.DelegatedStencilElement;
import com.simibubi.create.foundation.gui.ScreenOpener;
import com.simibubi.create.foundation.gui.Theme;
@ -161,8 +165,8 @@ public class SubMenuConfigScreen extends ConfigScreen {
.withPadding(2, 2)
.withCallback((x, y) ->
new ConfirmationScreen()
.at(x, y)
.withText(ITextProperties.plain("You are about to reset all settings for the " + type.toString() + " config. Are you sure?"))
.centered()
.withText(ITextProperties.plain("Resetting all settings of the " + type.toString() + " config. Are you sure?"))
.withAction(success -> {
if (success)
resetConfig(spec.getValues());
@ -172,7 +176,7 @@ public class SubMenuConfigScreen extends ConfigScreen {
resetAll.showingElement(AllIcons.I_CONFIG_RESET.asStencil().withElementRenderer(BoxWidget.gradientFactory.apply(resetAll)));
resetAll.getToolTip().add(new StringTextComponent("Reset All"));
resetAll.getToolTip().addAll(TooltipHelper.cutStringTextComponent("Click here to reset all configs to their default value.", TextFormatting.GRAY, TextFormatting.GRAY));
resetAll.getToolTip().addAll(TooltipHelper.cutStringTextComponent("Click here to reset all settings to their default value.", TextFormatting.GRAY, TextFormatting.GRAY));
saveChanges = new BoxWidget(listL - 30, yCenter - 25, 20, 20)
.withPadding(2, 2)
@ -181,8 +185,8 @@ public class SubMenuConfigScreen extends ConfigScreen {
return;
new ConfirmationScreen()
.at(x, y)
.withText(ITextProperties.plain("You are about to change " + changes.size() + " value" + (changes.size() != 1 ? "s" : "") + ". Are you sure?"))
.centered()
.withText(ITextProperties.plain("Saving " + changes.size() + " changed value" + (changes.size() != 1 ? "s" : "") + ""))
.withAction(success -> {
if (success)
saveChanges();
@ -200,8 +204,8 @@ public class SubMenuConfigScreen extends ConfigScreen {
return;
new ConfirmationScreen()
.at(x, y)
.withText(ITextProperties.plain("You are about to discard " + changes.size() + " unsaved change" + (changes.size() != 1 ? "s" : "") + ". Are you sure?"))
.centered()
.withText(ITextProperties.plain("Discarding " + changes.size() + " unsaved change" + (changes.size() != 1 ? "s" : "") + ""))
.withAction(success -> {
if (success)
clearChanges();
@ -234,6 +238,10 @@ public class SubMenuConfigScreen extends ConfigScreen {
if (obj instanceof AbstractConfig) {
SubMenuEntry entry = new SubMenuEntry(this, humanKey, spec, (UnmodifiableConfig) obj);
list.children().add(entry);
if (configGroup.valueMap()
.size() == 1)
ScreenOpener.open(
new SubMenuConfigScreen(parent, humanKey, type, spec, (UnmodifiableConfig) obj));
} else if (obj instanceof ForgeConfigSpec.ConfigValue<?>) {
ForgeConfigSpec.ConfigValue<?> configValue = (ForgeConfigSpec.ConfigValue<?>) obj;
@ -259,9 +267,25 @@ public class SubMenuConfigScreen extends ConfigScreen {
}
});
Collections.sort(list.children(),
(e, e2) -> {
int group = (e2 instanceof SubMenuEntry ? 1 : 0) - (e instanceof SubMenuEntry ? 1 : 0);
if (group == 0 && e instanceof LabeledEntry && e2 instanceof LabeledEntry) {
LabeledEntry le = (LabeledEntry) e;
LabeledEntry le2 = (LabeledEntry) e2;
return le.label.getComponent()
.getString()
.compareTo(le2.label.getComponent()
.getString());
}
return group;
});
//extras for server configs
if (type != ModConfig.Type.SERVER)
return;
if (client.isSingleplayer())
return;
list.isForServer = true;
boolean canEdit = client != null && client.player != null && client.player.hasPermissionLevel(2);
@ -275,6 +299,7 @@ public class SubMenuConfigScreen extends ConfigScreen {
.withPadding(2, 2)
.showingElement(stencil);
if (!canEdit) {
list.children().forEach(e -> e.setEditable(false));
resetAll.active = false;
@ -282,7 +307,7 @@ public class SubMenuConfigScreen extends ConfigScreen {
stencil.withElementRenderer((ms, w, h, alpha) -> UIRenderHelper.angledGradient(ms, 90, 8, 0, 16, 16, red));
serverLocked.withBorderColors(red);
serverLocked.getToolTip().add(new StringTextComponent("Locked").formatted(TextFormatting.BOLD));
serverLocked.getToolTip().addAll(TooltipHelper.cutStringTextComponent("You don't have enough permissions to edit the server config. You can still look at the current values here though.", TextFormatting.GRAY, TextFormatting.GRAY));
serverLocked.getToolTip().addAll(TooltipHelper.cutStringTextComponent("You do not have enough permissions to edit the server config. You can still look at the current values here though.", TextFormatting.GRAY, TextFormatting.GRAY));
} else {
stencil.withStencilRenderer((ms, w, h, alpha) -> AllIcons.I_CONFIG_UNLOCKED.draw(ms, 0, 0));
stencil.withElementRenderer((ms, w, h, alpha) -> UIRenderHelper.angledGradient(ms, 90, 8, 0, 16, 16, green));
@ -298,8 +323,8 @@ public class SubMenuConfigScreen extends ConfigScreen {
protected void renderWindow(MatrixStack ms, int mouseX, int mouseY, float partialTicks) {
super.renderWindow(ms, mouseX, mouseY, partialTicks);
int x = width/2;
drawCenteredString(ms, client.fontRenderer, "Editing config: " + ConfigScreen.modID + ":" + type.toString().toLowerCase(Locale.ROOT) + "@" + title, x, 15, Theme.i(Theme.Key.TEXT));
int x = width / 2;
drawCenteredString(ms, client.fontRenderer, ConfigScreen.modID + " > " + type.toString().toLowerCase(Locale.ROOT) + " > " + title, x, 15, Theme.i(Theme.Key.TEXT));
list.render(ms, mouseX, mouseY, partialTicks);
}
@ -338,42 +363,49 @@ public class SubMenuConfigScreen extends ConfigScreen {
}
private void attemptBackstep() {
if (!changes.isEmpty() && parent instanceof BaseConfigScreen) {
new ConfirmationScreen()
.centered()
.addText(ITextProperties.plain("You still have " + changes.size() + " unsaved change" + (changes.size() != 1 ? "s" : "") + " for this config."))
.addText(ITextProperties.plain("Leaving this screen will discard them without saving. Are you sure?"))
.withAction(success -> {
if (!success)
return;
changes.clear();
ScreenOpener.open(parent);
})
.open(this);
} else {
if (changes.isEmpty() || !(parent instanceof BaseConfigScreen)) {
ScreenOpener.open(parent);
return;
}
Consumer<ConfirmationScreen.Response> action = success -> {
if (success == Response.Cancel)
return;
if (success == Response.Confirm)
saveChanges();
changes.clear();
ScreenOpener.open(parent);
};
showLeavingPrompt(action);
}
@Override
public void onClose() {
if (changes.isEmpty()) {
super.onClose();
ScreenOpener.open(parent);
return;
}
new ConfirmationScreen()
.centered()
.addText(ITextProperties.plain("You still have " + changes.size() + " unsaved change" + (changes.size() != 1 ? "s" : "") + " for this config."))
.addText(ITextProperties.plain("Leaving this screen will discard them without saving. Are you sure?"))
.withAction(success -> {
if (!success)
return;
Consumer<ConfirmationScreen.Response> action = success -> {
if (success == Response.Cancel)
return;
if (success == Response.Confirm)
saveChanges();
changes.clear();
super.onClose();
};
changes.clear();
super.onClose();
})
showLeavingPrompt(action);
}
public void showLeavingPrompt(Consumer<ConfirmationScreen.Response> action) {
new ConfirmationScreen().centered()
.addText(ITextProperties.plain("Leaving with " + changes.size() + " unsaved change"
+ (changes.size() != 1 ? "s" : "") + " for this config"))
.withThreeActions(action)
.open(this);
}
}

View file

@ -1,5 +1,7 @@
package com.simibubi.create.foundation.config.ui.entries;
import java.util.Locale;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.foundation.gui.AllIcons;
import com.simibubi.create.foundation.gui.BoxElement;
@ -78,9 +80,9 @@ public class EnumEntry extends ValueEntry<Enum<?>> {
cycleLeft.y = y + 10;
cycleLeft.render(ms, mouseX, mouseY, partialTicks);
valueText.at(cycleLeft.x + cycleWidth - 8, y + 11, 200)
.withBounds(width - getLabelWidth(width) - 2 * cycleWidth - resetWidth - 4, 16)
.render(ms);
valueText.at(cycleLeft.x + cycleWidth - 8, y + 10, 200)
.withBounds(width - getLabelWidth(width) - 2 * cycleWidth - resetWidth - 4, 16)
.render(ms);
cycleRight.x = x + width - cycleWidth * 2 - resetWidth + 10;
cycleRight.y = y + 10;
@ -97,6 +99,10 @@ public class EnumEntry extends ValueEntry<Enum<?>> {
@Override
public void onValueChange(Enum<?> newValue) {
super.onValueChange(newValue);
valueText.withText(newValue.name());
valueText.withText(newValue.name()
.substring(0, 1)
+ newValue.name()
.substring(1)
.toLowerCase(Locale.ROOT));
}
}

View file

@ -10,6 +10,7 @@ import javax.annotation.Nonnull;
import org.apache.commons.lang3.ArrayUtils;
import com.google.common.base.Predicates;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.foundation.config.ui.ConfigHelper;
import com.simibubi.create.foundation.config.ui.ConfigScreen;
@ -17,6 +18,7 @@ import com.simibubi.create.foundation.config.ui.ConfigScreenList;
import com.simibubi.create.foundation.gui.AllIcons;
import com.simibubi.create.foundation.gui.DelegatedStencilElement;
import com.simibubi.create.foundation.gui.widgets.BoxWidget;
import com.simibubi.create.foundation.item.TooltipHelper;
import net.minecraft.util.text.IFormattableTextComponent;
import net.minecraft.util.text.StringTextComponent;
@ -52,7 +54,7 @@ public class ValueEntry<T> extends ConfigScreenList.LabeledEntry {
listeners.add(resetButton);
List<String> path = value.getPath();
labelTooltip.add(new StringTextComponent(path.get(path.size()-1)).formatted(TextFormatting.GRAY));
labelTooltip.add(new StringTextComponent(label).formatted(TextFormatting.WHITE));
String comment = spec.getComment();
if (comment == null || comment.isEmpty())
return;
@ -76,8 +78,14 @@ public class ValueEntry<T> extends ConfigScreenList.LabeledEntry {
u = "in SU";
unit = u;
}
//add comment to tooltip
labelTooltip.addAll(Arrays.stream(commentLines).map(StringTextComponent::new).collect(Collectors.toList()));
// add comment to tooltip
labelTooltip.addAll(Arrays.stream(commentLines)
.filter(Predicates.not(s -> s.startsWith("Range")))
.map(StringTextComponent::new)
.flatMap(stc -> TooltipHelper.cutTextComponent(stc, TextFormatting.GRAY, TextFormatting.GRAY)
.stream())
.collect(Collectors.toList()));
labelTooltip.add(new StringTextComponent(ConfigScreen.modID + ":" + path.get(path.size() - 1)).formatted(TextFormatting.DARK_GRAY));
}
@Override

View file

@ -14,11 +14,11 @@ import com.simibubi.create.CreateClient;
import com.simibubi.create.content.AllSections;
import com.simibubi.create.content.contraptions.fluids.VirtualFluid;
import com.simibubi.create.content.contraptions.relays.encased.CasingConnectivity;
import com.simibubi.create.foundation.block.IBlockVertexColor;
import com.simibubi.create.foundation.block.connected.CTModel;
import com.simibubi.create.foundation.block.connected.ConnectedTextureBehaviour;
import com.simibubi.create.foundation.block.render.ColoredVertexModel;
import com.simibubi.create.foundation.block.render.CustomRenderedItemModel;
import com.simibubi.create.foundation.block.render.IBlockVertexColor;
import com.simibubi.create.foundation.item.render.CustomRenderedItemModel;
import com.tterrag.registrate.AbstractRegistrate;
import com.tterrag.registrate.builders.BlockBuilder;
import com.tterrag.registrate.builders.Builder;
@ -34,14 +34,11 @@ import com.tterrag.registrate.util.nullness.NonNullUnaryOperator;
import net.minecraft.block.AbstractBlock.Properties;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.color.IBlockColor;
import net.minecraft.client.renderer.color.IItemColor;
import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.fluid.Fluid;
import net.minecraft.item.Item;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.IItemProvider;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.fluids.FluidAttributes;
@ -114,7 +111,7 @@ public class CreateRegistrate extends AbstractRegistrate<CreateRegistrate> {
public <T extends TileEntity> CreateTileEntityBuilder<T, CreateRegistrate> tileEntity(String name,
NonNullFunction<TileEntityType<T>, ? extends T> factory) {
return this.tileEntity(this.self(), name, (NonNullFunction) factory);
return this.tileEntity(this.self(), name, factory);
}
@Override
@ -173,30 +170,22 @@ public class CreateRegistrate extends AbstractRegistrate<CreateRegistrate> {
}
public static <T extends Block> NonNullConsumer<? super T> casingConnectivity(
BiConsumer<T, CasingConnectivity> consumer) {
BiConsumer<T, CasingConnectivity> consumer) {
return entry -> onClient(() -> () -> registerCasingConnectivity(entry, consumer));
}
public static <T extends Block> NonNullConsumer<? super T> blockModel(
Supplier<NonNullFunction<IBakedModel, ? extends IBakedModel>> func) {
return entry -> onClient(() -> () -> registerBlockModel(entry, func));
}
public static <T extends Block> NonNullConsumer<? super T> blockColors(Supplier<Supplier<IBlockColor>> colorFunc) {
return entry -> onClient(() -> () -> registerBlockColor(entry, colorFunc));
}
public static <T extends Block> NonNullConsumer<? super T> blockVertexColors(IBlockVertexColor colorFunc) {
return entry -> onClient(() -> () -> registerBlockVertexColor(entry, colorFunc));
}
public static <T extends Item> NonNullConsumer<? super T> itemModel(
Supplier<NonNullFunction<IBakedModel, ? extends IBakedModel>> func) {
return entry -> onClient(() -> () -> registerItemModel(entry, func));
public static <T extends Block> NonNullConsumer<? super T> blockModel(
Supplier<NonNullFunction<IBakedModel, ? extends IBakedModel>> func) {
return entry -> onClient(() -> () -> registerBlockModel(entry, func));
}
public static <T extends Item> NonNullConsumer<? super T> itemColors(Supplier<Supplier<IItemColor>> colorFunc) {
return entry -> onClient(() -> () -> registerItemColor(entry, colorFunc));
public static <T extends Item> NonNullConsumer<? super T> itemModel(
Supplier<NonNullFunction<IBakedModel, ? extends IBakedModel>> func) {
return entry -> onClient(() -> () -> registerItemModel(entry, func));
}
public static <T extends Item, P> NonNullUnaryOperator<ItemBuilder<T, P>> customRenderedItem(
@ -250,18 +239,4 @@ public class CreateRegistrate extends AbstractRegistrate<CreateRegistrate> {
.register(entry.delegate, func.get());
}
@OnlyIn(Dist.CLIENT)
private static void registerBlockColor(Block entry, Supplier<Supplier<IBlockColor>> colorFunc) {
CreateClient.getColorHandler()
.register(entry, colorFunc.get()
.get());
}
@OnlyIn(Dist.CLIENT)
private static void registerItemColor(IItemProvider entry, Supplier<Supplier<IItemColor>> colorFunc) {
CreateClient.getColorHandler()
.register(entry, colorFunc.get()
.get());
}
}

View file

@ -1,6 +1,6 @@
package com.simibubi.create.foundation.gui;
import java.awt.Color;
import java.awt.*;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.Create;
@ -20,6 +20,8 @@ public enum AllGuiTextures implements IScreenRenderable {
TERRAINZAPPER("curiosities.png", 234, 103),
TERRAINZAPPER_INACTIVE_PARAM("curiosities.png", 238, 0, 18, 18),
LOGO("logo.png", 256, 256),
SCHEMATIC("schematics.png", 192, 121),
SCHEMATIC_SLOT("widgets.png", 54, 0, 16, 16),
SCHEMATIC_PROMPT("schematics_2.png", 213, 77),
@ -57,8 +59,9 @@ public enum AllGuiTextures implements IScreenRenderable {
SEQUENCER_END("sequencer.png", 0, 80, 162, 22),
SEQUENCER_EMPTY("sequencer.png", 0, 102, 162, 22),
SEQUENCER_AWAIT("sequencer.png", 0, 160, 162, 22),
LINKED_CONTROLLER("curiosities2.png", 180, 109),
BLUEPRINT("curiosities2.png", 0, 109, 179, 109),
PROJECTOR("projector.png", 235, 185),
PROJECTOR_FILTER_STRENGTH("projector.png", 0, 14, 162, 22),
@ -90,13 +93,16 @@ public enum AllGuiTextures implements IScreenRenderable {
INDICATOR_YELLOW("widgets.png", 54, 18, 18, 6),
INDICATOR_RED("widgets.png", 72, 18, 18, 6),
HOTSLOT_ARROW("widgets.png", 24, 51, 20, 12),
HOTSLOT("widgets.png", 0, 68, 22, 22),
HOTSLOT_ACTIVE("widgets.png", 0, 46, 22, 22),
HOTSLOT_SUPER_ACTIVE("widgets.png", 27, 67, 24, 24),
SPEECH_TOOLTIP_BACKGROUND("widgets.png", 0, 24, 8, 8),
SPEECH_TOOLTIP_COLOR("widgets.png", 8, 24, 8, 8),
// PlacementIndicator
PLACEMENT_INDICATOR_SHEET("placement_indicator.png", 0, 0, 16, 256);
;
PLACEMENT_INDICATOR_SHEET("placement_indicator.png", 0, 0, 16, 256);;
public static final int FONT_COLOR = 0x575F7A;

View file

@ -20,21 +20,28 @@ import net.minecraft.util.text.Style;
public class ConfirmationScreen extends AbstractSimiScreen {
private Screen source;
private Consumer<Boolean> action = _success -> {};
private Consumer<Response> action = _success -> {
};
private List<ITextProperties> text = new ArrayList<>();
private boolean centered = false;
private int x;
private int y;
private int textWidth;
private int textHeight;
private boolean tristate;
private BoxWidget confirm;
private BoxWidget confirmDontSave;
private BoxWidget cancel;
private BoxElement textBackground;
public enum Response {
Confirm, ConfirmDontSave, Cancel
}
/*
* Removes text lines from the back of the list
* */
* Removes text lines from the back of the list
* */
public ConfirmationScreen removeTextLines(int amount) {
if (amount > text.size())
return clearText();
@ -70,7 +77,13 @@ public class ConfirmationScreen extends AbstractSimiScreen {
}
public ConfirmationScreen withAction(Consumer<Boolean> action) {
this.action = r -> action.accept(r == Response.Confirm);
return this;
}
public ConfirmationScreen withThreeActions(Consumer<Response> action) {
this.action = action;
this.tristate = true;
return this;
}
@ -115,32 +128,46 @@ public class ConfirmationScreen extends AbstractSimiScreen {
y = height - textHeight - 30;
}
TextStencilElement confirmText = new TextStencilElement(client.fontRenderer, "Confirm").centered(true, true);
confirm = new BoxWidget(x + 4, y + textHeight + 2 , textWidth/2 - 10, 20)
.withCallback(() -> accept(true));
int buttonX = x + textWidth / 2 - 6 - (int) (70 * (tristate ? 1.5f : 1));
TextStencilElement confirmText =
new TextStencilElement(client.fontRenderer, tristate ? "Save" : "Confirm").centered(true, true);
confirm = new BoxWidget(buttonX, y + textHeight + 6, 70, 16).withCallback(() -> accept(Response.Confirm));
confirm.showingElement(confirmText.withElementRenderer(BoxWidget.gradientFactory.apply(confirm)));
widgets.add(confirm);
buttonX += 12 + 70;
if (tristate) {
TextStencilElement confirmDontSaveText =
new TextStencilElement(client.fontRenderer, "Don't Save").centered(true, true);
confirmDontSave =
new BoxWidget(buttonX, y + textHeight + 6, 70, 16).withCallback(() -> accept(Response.ConfirmDontSave));
confirmDontSave.showingElement(
confirmDontSaveText.withElementRenderer(BoxWidget.gradientFactory.apply(confirmDontSave)));
widgets.add(confirmDontSave);
buttonX += 12 + 70;
}
TextStencilElement cancelText = new TextStencilElement(client.fontRenderer, "Cancel").centered(true, true);
cancel = new BoxWidget(x + textWidth/2 + 6, y + textHeight + 2, textWidth/2 - 10, 20)
.withCallback(() -> accept(false));
cancel = new BoxWidget(buttonX, y + textHeight + 6, 70, 16)
.withCallback(() -> accept(Response.Cancel));
cancel.showingElement(cancelText.withElementRenderer(BoxWidget.gradientFactory.apply(cancel)));
widgets.add(confirm);
widgets.add(cancel);
textBackground = new BoxElement()
.gradientBorder(Theme.p(Theme.Key.BUTTON_DISABLE))
.withBounds(textWidth, textHeight)
.at(x, y);
.withBounds(width + 10, textHeight + 35)
.at(-5, y - 5);
}
@Override
public void onClose() {
accept(false);
accept(Response.Cancel);
}
private void accept(boolean success) {
private void accept(Response success) {
client.currentScreen = source;
action.accept(success);
}
@ -157,11 +184,12 @@ public class ConfirmationScreen extends AbstractSimiScreen {
for (ITextProperties line : text) {
lineY = lineY + offset;
if (line == null)
continue;
client.fontRenderer.draw(ms, line.getString(), x, lineY, 0xeaeaea);
int textX = x;
if (text.size() == 1)
x = (width - client.fontRenderer.getWidth(line)) / 2;
client.fontRenderer.draw(ms, line.getString(), textX, lineY, 0xeaeaea);
}
ms.pop();
@ -175,7 +203,7 @@ public class ConfirmationScreen extends AbstractSimiScreen {
ms.push();
UIRenderHelper.framebuffer.bindFramebuffer(true);
source.render(ms, mouseX, mouseY, 10);
source.render(ms, 0, 0, 10); // zero mouse coords to prevent further tooltips
UIRenderHelper.framebuffer.unbindFramebuffer();
Framebuffer mainBuffer = Minecraft.getInstance().getFramebuffer();
ms.pop();
@ -183,7 +211,7 @@ public class ConfirmationScreen extends AbstractSimiScreen {
//fixme replace with glVersioned-backend calls once they are merged from jozu's branch
GL30.glBindFramebuffer(GL30.GL_READ_FRAMEBUFFER, UIRenderHelper.framebuffer.framebufferObject);
GL30.glBindFramebuffer(GL30.GL_DRAW_FRAMEBUFFER, mainBuffer.framebufferObject);
GL30.glBlitFramebuffer(0, 0, mainBuffer.framebufferWidth, mainBuffer.framebufferHeight, 0, 0, mainBuffer.framebufferWidth, mainBuffer.framebufferHeight, GL30.GL_COLOR_BUFFER_BIT, GL30.GL_LINEAR);
GL30.glBlitFramebuffer(0, 0, mainBuffer.framebufferWidth, mainBuffer.framebufferHeight, 0, 0, mainBuffer.framebufferWidth, mainBuffer.framebufferHeight, GL30.GL_COLOR_BUFFER_BIT, GL30.GL_LINEAR);
mainBuffer.bindFramebuffer(true);
this.fillGradient(ms, 0, 0, this.width, this.height, 0x70101010, 0x80101010);

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