mirror of
https://github.com/Creators-of-Create/Create.git
synced 2025-02-14 14:25:00 +01:00
Merge remote-tracking branch 'origin/mc1.16/dev' into chromatic-projector
This commit is contained in:
commit
d612cfdd34
143 changed files with 5052 additions and 2660 deletions
|
@ -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
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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!"
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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!"
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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!"
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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!"
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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!"
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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!"
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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!"
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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!"
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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!"
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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!"
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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!"
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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!"
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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!"
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "create:item/crafting_blueprint"
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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<>();
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
||||
}
|
|
@ -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() {
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
});
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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")));
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package com.simibubi.create.foundation.block;
|
||||
package com.simibubi.create.foundation.block.render;
|
||||
|
||||
@FunctionalInterface
|
||||
public interface IBlockVertexColor {
|
|
@ -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.";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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)
|
||||
));
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
Loading…
Reference in a new issue