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

# Conflicts:
#	src/main/java/com/simibubi/create/CreateClient.java
#	src/main/java/com/simibubi/create/compat/jei/category/BlockzapperUpgradeCategory.java
#	src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandScreen.java
#	src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperScreen.java
This commit is contained in:
zelophed 2021-05-03 19:58:39 +02:00
commit fd62f2f8f4
295 changed files with 12093 additions and 9440 deletions

View file

@ -406,20 +406,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
97e9ee471ea650f6b7f3d3f39f00201cd5ad752d assets/create/lang/en_ud.json
514ab1f6fa3d24dc575a5dcaaaa96a8009da7414 assets/create/lang/en_us.json
7e45e9a69fb4d21d199174673f2ea6fe35ee6859 assets/create/lang/unfinished/de_de.json
2af0dd8cd0776b8ed5110990405f3cd515abe8e8 assets/create/lang/unfinished/es_es.json
90fc3a9475b957eebf10380a960416b072987541 assets/create/lang/unfinished/es_mx.json
997cc00c6a9afbb142e25c5a1840908363afad41 assets/create/lang/unfinished/fr_fr.json
6a9c89ff7a7c2df5f78a6a739a204744a4a5607a assets/create/lang/unfinished/it_it.json
e21697e70444e3c8fb367b7a4fe867726157390d assets/create/lang/unfinished/ja_jp.json
9f2d7b6fc84f6257837b4c517489f6ef31a4e1a5 assets/create/lang/unfinished/ko_kr.json
5bcfe026f3bb3f0aa0ea415e54dedad4195bb70a assets/create/lang/unfinished/nl_nl.json
bc60cb08266e8d13523d086cdb85aa12da78a47b assets/create/lang/unfinished/pt_br.json
288e3e76a1aa090a676415aeb9f5383b3386e40d assets/create/lang/unfinished/ru_ru.json
0b6852ca1cea71d24cfdee7004ab37fa7810a0fe assets/create/lang/unfinished/zh_cn.json
619d82eba592f4ae88ddbc2c9dfae02627876300 assets/create/lang/unfinished/zh_tw.json
0e10e87986a76f18efeb1255f2c025d1aad8f8fa assets/create/lang/en_ud.json
949bac58ef9534024eac6d9082f5d241ce5b91f3 assets/create/lang/en_us.json
26ab60b925659e6daac2e449267d202c68cafe94 assets/create/lang/unfinished/de_de.json
78086e1c23ce96db3a9ec3d304d7418f39ed96fa assets/create/lang/unfinished/es_es.json
62fcca040385405c7655ea6e4b524b2a5e652e4c assets/create/lang/unfinished/es_mx.json
0f527cc6472caec6ec090985c5000e6f7f93208f assets/create/lang/unfinished/fr_fr.json
812f7e66a1d5a06a7b81a41216ee2151e678db69 assets/create/lang/unfinished/it_it.json
8122ad97eac98b1f549a08e623066be1ffd3a29e assets/create/lang/unfinished/ja_jp.json
2c3a1bd28a6a08bec850cc36735204c59045b188 assets/create/lang/unfinished/ko_kr.json
27559156601b57cc2e9fae07a92c7f79a7f4e473 assets/create/lang/unfinished/nl_nl.json
f401f044ec0785b9399d29d2a82f0f998a2a4db7 assets/create/lang/unfinished/pl_pl.json
fa22d8055979012a45a6648009ef0094be4560d8 assets/create/lang/unfinished/pt_br.json
d1b6b069a4547c107c58af4f8837f3cc843e1613 assets/create/lang/unfinished/ru_ru.json
b1650c7805cfe03c6b3b9d43f96964b695f55415 assets/create/lang/unfinished/zh_cn.json
8052350b58969035d456f882fa5624ee16a0024c 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
@ -1305,7 +1306,6 @@ b50e3471476783be80f28bb4e3543f5a426b9eb6 assets/create/models/item/dark_scoria_b
e67fe11e9036c81f0f54d368b41a971822a84a32 assets/create/models/item/dark_scoria_cobblestone_stairs.json
6e6867197215635b7febac7ffca77b763c021cc4 assets/create/models/item/dark_scoria_cobblestone_wall.json
f5b2995929ac9dca9857d4618660ffa7778d5618 assets/create/models/item/dark_scoria_pillar.json
f06f56ffb1cd7c9a2b81c65f7796726692e5cc59 assets/create/models/item/deforester.json
2104c1276259ab67b94f3d4fe97e14b6bc6941ac assets/create/models/item/deployer.json
84d87f715efab45dc7bcb2e3c0870ed56fa20ee9 assets/create/models/item/depot.json
a97ca9b6fc3e10a9c9409b27458a852222045e4e assets/create/models/item/diorite_bricks.json
@ -1408,7 +1408,6 @@ e7daa31c1fc445d542bad476dfe1d6a8811f2070 assets/create/models/item/gray_seat.jso
1c9c9157a06108bf58967bfc4fb069c35d20e90a assets/create/models/item/green_seat.json
ecb9f32f62d3fa43fb226ab85adc2eb229fdfb77 assets/create/models/item/green_valve_handle.json
398b1a7c76c7bdb6a23b1248fdce98f6d835467f assets/create/models/item/hand_crank.json
cfab82a2cf7495d21778c1de9730a26afbdd523d assets/create/models/item/handheld_blockzapper.json
dee43bf1a9c211a752fac2c07aeba123f7f0c914 assets/create/models/item/handheld_worldshaper.json
f0d5af58e23e2705b3ef675c30bdf85ed9567c57 assets/create/models/item/honey_bucket.json
068729724f5f7b276b9bc378e533898a92e8debe assets/create/models/item/honeyed_apple.json
@ -1648,8 +1647,8 @@ d080b1b25e5bc8baf5aee68691b08c7f12ece3b0 assets/create/models/item/windmill_bear
866fbb0ce2878a73e0440d1caf6534c8bd7c384f assets/create/models/item/zinc_ingot.json
a80fb25a0b655e76be986b5b49fcb0f03461a1ab assets/create/models/item/zinc_nugget.json
b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json
71739e613693c476e481dfcf38628a4f52f0f570 assets/create/sounds.json
5d0cc4c0255dc241e61c173b31ddca70c88d08e4 data/create/advancements/aesthetics.json
7b73f40a65af0c2288c886928c609ec783c0fc40 assets/create/sounds.json
0f1b4b980afba9bf2caf583b88e261bba8b10313 data/create/advancements/aesthetics.json
187921fa131b06721bfaf63f2623a28c141aae9a data/create/advancements/andesite_alloy.json
0ea2db7173b5be28b289ea7c9a6a0cf5805c60c7 data/create/advancements/andesite_casing.json
83c046bd200623933545c9e4326f782fb02c87fa data/create/advancements/arm_blaze_burner.json
@ -1674,7 +1673,6 @@ d1015e059a2f2008a364b6d045a011a6d671f20d data/create/advancements/copper_casing.
8e2a12a26218a46665c46f350ef9c3418a901988 data/create/advancements/crafter.json
d1fbc14303c7327e9fc02e505e7e434591b7f785 data/create/advancements/crushing_wheel.json
e9e1789de5cd5577a801a09d489a13f2c98779dc data/create/advancements/cuckoo.json
0761f3e12d587fec7a2ddf326b43969d262771e3 data/create/advancements/deforester.json
2a96fad5b44b62f233c9af5b4a637faf32ce24af data/create/advancements/deployer.json
eb8e7c13163923d2f88c999c6eb5afa4b7d2426e data/create/advancements/dual_extendo_grip.json
04eaf829696d735244c0e4798dd3bdeb26e13a32 data/create/advancements/electron_tube.json
@ -1773,8 +1771,6 @@ c368cadffa9177fefb9e92ff4453b40bc8dd670d data/create/advancements/recipes/create
4bb60ef5e186f12a9d52e61319db8c78300c64ab data/create/advancements/recipes/create.base/blasting/zinc_ingot_from_ore.json
dd487f98c411f1ff22cb7fc208b8cc24b27deb2f data/create/advancements/recipes/create.base/crafting/appliances/dough.json
51cdcf168087f47e4458eed7543d227da1ee5ca0 data/create/advancements/recipes/create.base/crafting/appliances/tree_fertilizer.json
eba09a9ca1c5c249517da9b3a883479fd6480ac6 data/create/advancements/recipes/create.base/crafting/curiosities/deforester.json
0479fa3c10130c799269c40df6b18deb3a3d8331 data/create/advancements/recipes/create.base/crafting/curiosities/handheld_blockzapper.json
d531f87f425d199aee4777a588c1cd6cab6f5173 data/create/advancements/recipes/create.base/crafting/curiosities/minecart_coupling.json
2eef3201017af03f6a2f0f015645e3ff5e25d9c1 data/create/advancements/recipes/create.base/crafting/curiosities/wand_of_symmetry.json
80155fa8e28e7de87adad3dc2cd79564496d7ef7 data/create/advancements/recipes/create.base/crafting/kinetics/adjustable_chain_gearshift.json
@ -2365,13 +2361,11 @@ b69d174d7a5e9eab8ca013b66bc9d02244d7f9a3 data/create/advancements/spout.json
15f73da913c54cd2f945e4d7402fb8d587cbaa9f data/create/advancements/spout_potion.json
0efdaf483d84791044f085f79197b6bab3e15872 data/create/advancements/stressometer.json
1aceaa6e47709aa03f3d4f606fa5dcaacc899835 data/create/advancements/tunnel.json
42461143b64112fdf6f123b9fcd44b5457df3915 data/create/advancements/upgraded_zapper.json
4fef92dce84fa1a075db31fb33081f5fb8ec7e9e data/create/advancements/upward_chute.json
fe37896bb804d2be9b8abf3744c5b9b7bc1c086e data/create/advancements/wand_of_symmetry.json
2c278dc6e6e4c12c0cfce22b5192844586a2d5c1 data/create/advancements/water_wheel.json
d6b94fd499cb4fb0ae587b0e9e7088832f67fe01 data/create/advancements/windmill.json
4513d0c4dd40c948028a3fc8e6f3b4d0356c0a90 data/create/advancements/wrench.json
33c1224f4f6a7bb0a3439eb0f8b8af9341b62574 data/create/advancements/zapper.json
054392b614e410c6d1b37c546b4bfd36f50aec4a data/create/loot_tables/blocks/acacia_window.json
64b95066bf96a3f0de95919d526243ba4f5a3ade data/create/loot_tables/blocks/acacia_window_pane.json
113f225f01d45c420ee038e8aad3d6c5e836dea2 data/create/loot_tables/blocks/adjustable_chain_gearshift.json
@ -2846,8 +2840,6 @@ f7879d404d7a848d818278b4e788f285a9087e63 data/create/recipes/compacting/blaze_ca
19526da3a59fc136654ff1bc93c0251581f397a9 data/create/recipes/crafting/appliances/dough.json
7b5f863dda3d05a79cb85943a178eba0bd8a7dc7 data/create/recipes/crafting/appliances/slime_ball.json
b159ba84428eee6ef6e23df1766f2a18f2c8a63e data/create/recipes/crafting/appliances/tree_fertilizer.json
8c00fe124ea516511f00a89bcf9e63a6d1fa47e4 data/create/recipes/crafting/curiosities/deforester.json
87a4a5ec53a0f8e125dfdbd77906a418a9b83d9c data/create/recipes/crafting/curiosities/handheld_blockzapper.json
660e92da2b1b6698b1c0df74bd74a56a25fb3eca data/create/recipes/crafting/curiosities/minecart_coupling.json
fcbc04d0a7eaf820a74bc7e4736a4a581e0a9dff data/create/recipes/crafting/curiosities/wand_of_symmetry.json
cc56d21a25286a9024e506dde9fa161230eaf46d data/create/recipes/crafting/kinetics/adjustable_chain_gearshift.json

View file

@ -449,7 +449,6 @@
"item.create.crushed_tin_ore": "\u01DD\u0279O u\u0131\u27D8 p\u01DD\u0265sn\u0279\u0186",
"item.create.crushed_uranium_ore": "\u01DD\u0279O \u026Fn\u0131u\u0250\u0279\u2229 p\u01DD\u0265sn\u0279\u0186",
"item.create.crushed_zinc_ore": "\u01DD\u0279O \u0254u\u0131Z p\u01DD\u0265sn\u0279\u0186",
"item.create.deforester": "\u0279\u01DD\u0287s\u01DD\u0279o\u025F\u01DD\u15E1",
"item.create.dough": "\u0265bno\u15E1",
"item.create.electron_tube": "\u01DDqn\u27D8 uo\u0279\u0287\u0254\u01DD\u05DF\u018E",
"item.create.empty_blaze_burner": "\u0279\u01DDu\u0279n\u15FA \u01DDz\u0250\u05DF\u15FA \u028E\u0287d\u026F\u018E",
@ -459,8 +458,7 @@
"item.create.furnace_minecart_contraption": "uo\u0131\u0287d\u0250\u0279\u0287uo\u0186 \u0287\u0279\u0250\u0254\u01DDu\u0131W \u01DD\u0254\u0250u\u0279n\u2132",
"item.create.goggles": "s\u01DD\u05DFbbo\u2141 s,\u0279\u01DD\u01DDu\u0131bu\u018E",
"item.create.golden_sheet": "\u0287\u01DD\u01DD\u0265S u\u01DDp\u05DFo\u2141",
"item.create.handheld_blockzapper": "\u0279\u01DDdd\u0250z\u029E\u0254o\u05DF\u15FA p\u05DF\u01DD\u0265pu\u0250H",
"item.create.handheld_worldshaper": "\u0279\u01DDd\u0250\u0265sp\u05DF\u0279oM p\u05DF\u01DD\u0265pu\u0250H",
"item.create.handheld_worldshaper": "\u0279\u01DDd\u0250\u0265sp\u05DF\u0279oM \u01DD\u028C\u0131\u0287\u0250\u01DD\u0279\u0186",
"item.create.honey_bucket": "\u0287\u01DD\u029E\u0254n\u15FA \u028E\u01DDuoH",
"item.create.honeyed_apple": "\u01DD\u05DFdd\u2C6F p\u01DD\u028E\u01DDuoH",
"item.create.integrated_circuit": "\u0287\u0131n\u0254\u0279\u0131\u0186 p\u01DD\u0287\u0250\u0279b\u01DD\u0287uI",

View file

@ -455,7 +455,6 @@
"item.create.crushed_tin_ore": "Crushed Tin Ore",
"item.create.crushed_uranium_ore": "Crushed Uranium Ore",
"item.create.crushed_zinc_ore": "Crushed Zinc Ore",
"item.create.deforester": "Deforester",
"item.create.dough": "Dough",
"item.create.electron_tube": "Electron Tube",
"item.create.empty_blaze_burner": "Empty Blaze Burner",
@ -465,8 +464,7 @@
"item.create.furnace_minecart_contraption": "Furnace Minecart Contraption",
"item.create.goggles": "Engineer's Goggles",
"item.create.golden_sheet": "Golden Sheet",
"item.create.handheld_blockzapper": "Handheld Blockzapper",
"item.create.handheld_worldshaper": "Handheld Worldshaper",
"item.create.handheld_worldshaper": "Creative Worldshaper",
"item.create.honey_bucket": "Honey Bucket",
"item.create.honeyed_apple": "Honeyed Apple",
"item.create.integrated_circuit": "Integrated Circuit",
@ -644,14 +642,8 @@
"advancement.create.refined_radiance.desc": "Create Refined Radiance, a powerful chromatic substance.",
"advancement.create.chromatic_age": "The Chromatic Age",
"advancement.create.chromatic_age.desc": "Create casing blocks of the light and dark.",
"advancement.create.zapper": "Building With Style",
"advancement.create.zapper.desc": "Craft a Blockzapper. A radiant laser gun that helps you build.",
"advancement.create.upgraded_zapper": "Radiant Overdrive",
"advancement.create.upgraded_zapper.desc": "Create and activate a fully upgraded Blockzapper.",
"advancement.create.wand_of_symmetry": "Radiant Mirrors",
"advancement.create.wand_of_symmetry.desc": "Craft a Staff of Symmetry.",
"advancement.create.deforester": "Radiant Chopping",
"advancement.create.deforester.desc": "Craft a Deforester, and say goodbye to the local forest.",
"advancement.create.extendo_grip": "Boioioing!",
"advancement.create.extendo_grip.desc": "Get hold of an Extendo Grip.",
"advancement.create.dual_extendo_grip": "Ultimate Boing-age",
@ -694,7 +686,6 @@
"create.recipe.automatic_shaped": "Automated Shaped Crafting",
"create.recipe.block_cutting": "Block Cutting",
"create.recipe.wood_cutting": "Wood Cutting",
"create.recipe.blockzapper_upgrade": "Handheld Blockzapper",
"create.recipe.sandpaper_polishing": "Sandpaper Polishing",
"create.recipe.mystery_conversion": "Mysterious Conversion",
"create.recipe.spout_filling": "Filling by Spout",
@ -751,20 +742,16 @@
"create.orientation.alongZ": "Along Z",
"create.orientation.alongX": "Along X",
"create.gui.blockzapper.title": "Handheld Blockzapper",
"create.gui.blockzapper.replaceMode": "Replace Mode",
"create.gui.blockzapper.searchDiagonal": "Follow Diagonals",
"create.gui.blockzapper.searchFuzzy": "Ignore Material Borders",
"create.gui.blockzapper.range": "Spread Range",
"create.gui.blockzapper.needsUpgradedAmplifier": "Requires Upgraded Amplifier",
"create.gui.blockzapper.patternSection": "Pattern",
"create.gui.blockzapper.pattern.solid": "Solid",
"create.gui.blockzapper.pattern.checkered": "Checkerboard",
"create.gui.blockzapper.pattern.inversecheckered": "Inverted Checkerboard",
"create.gui.blockzapper.pattern.chance25": "25% Roll",
"create.gui.blockzapper.pattern.chance50": "50% Roll",
"create.gui.blockzapper.pattern.chance75": "75% Roll",
"create.gui.terrainzapper.title": "Handheld Worldshaper",
"create.gui.terrainzapper.title": "Handheld Blockzapper",
"create.gui.terrainzapper.searchDiagonal": "Follow Diagonals",
"create.gui.terrainzapper.searchFuzzy": "Ignore Material Borders",
"create.gui.terrainzapper.patternSection": "Pattern",
"create.gui.terrainzapper.pattern.solid": "Solid",
"create.gui.terrainzapper.pattern.checkered": "Checkerboard",
"create.gui.terrainzapper.pattern.inversecheckered": "Inverted Checkerboard",
"create.gui.terrainzapper.pattern.chance25": "25% Roll",
"create.gui.terrainzapper.pattern.chance50": "50% Roll",
"create.gui.terrainzapper.pattern.chance75": "75% Roll",
"create.gui.terrainzapper.placement": "Placement",
"create.gui.terrainzapper.placement.merged": "Merged",
"create.gui.terrainzapper.placement.attached": "Attached",
@ -773,6 +760,8 @@
"create.gui.terrainzapper.brush.cuboid": "Cuboid",
"create.gui.terrainzapper.brush.sphere": "Sphere",
"create.gui.terrainzapper.brush.cylinder": "Cylinder",
"create.gui.terrainzapper.brush.surface": "Surface",
"create.gui.terrainzapper.brush.cluster": "Cluster",
"create.gui.terrainzapper.tool": "Tool",
"create.gui.terrainzapper.tool.fill": "Fill",
"create.gui.terrainzapper.tool.place": "Place",
@ -782,19 +771,8 @@
"create.gui.terrainzapper.tool.flatten": "Flatten",
"create.terrainzapper.shiftRightClickToSet": "Shift-Right-Click to Select a Shape",
"create.blockzapper.usingBlock": "Using: %1$s",
"create.blockzapper.componentUpgrades": "Component Upgrades:",
"create.blockzapper.component.body": "Body",
"create.blockzapper.component.amplifier": "Amplifier",
"create.blockzapper.component.accelerator": "Accelerator",
"create.blockzapper.component.retriever": "Retriever",
"create.blockzapper.component.scope": "Scope",
"create.blockzapper.componentTier.none": "None",
"create.blockzapper.componentTier.brass": "Brass",
"create.blockzapper.componentTier.chromatic": "Chromatic",
"create.blockzapper.leftClickToSet": "Left-Click a Block to set Material",
"create.blockzapper.empty": "Out of Blocks!",
"create.terrainzapper.usingBlock": "Using: %1$s",
"create.terrainzapper.leftClickToSet": "Left-Click a Block to set Material",
"create.minecart_coupling.two_couplings_max": "Minecarts cannot have more than two couplings each",
"create.minecart_coupling.unloaded": "Parts of your train seem to be in unloaded chunks",
@ -1154,20 +1132,26 @@
"create.subtitle.cogs": "Cogwheels rumble",
"create.subtitle.slime_added": "Slime squishes",
"create.subtitle.contraption_disassemble": "Contraption stops",
"create.subtitle.wrench_rotate": "Wrench used",
"create.subtitle.mixing": "Mixing Noises",
"create.subtitle.mechanical_press_activation_belt": "Mechanical Press bonks",
"create.subtitle.blockzapper_confirm": "Affirmative ding",
"create.subtitle.worldshaper_place": "Worldshaper zaps",
"create.subtitle.depot_slide": "Item slides",
"create.subtitle.blockzapper_place": "Blockzapper zaps",
"create.subtitle.deny": "Declining boop",
"create.subtitle.blaze_munch": "Blaze Burner munches",
"create.subtitle.schematicannon_launch_block": "Schematicannon fires",
"create.subtitle.funnel_flap": "Funnel Flaps",
"create.subtitle.schematicannon_finish": "Schematicannon dings",
"create.subtitle.scroll_value": "Scroll-input clicks",
"create.subtitle.mechanical_press_activation": "Mechanical Press clangs",
"create.subtitle.blockzapper_deny": "Declining boop",
"create.subtitle.contraption_assemble": "Contraption moves",
"create.subtitle.crafter_craft": "Crafter crafts",
"create.subtitle.cranking": "Hand Crank turns",
"create.subtitle.crafter_click": "Crafter clicks",
"create.subtitle.wrench_remove": "Component breaks",
"create.subtitle.depot_plop": "Item lands",
"create.subtitle.confirm": "Affirmative ding",
"_": "->------------------------] Item Descriptions [------------------------<-",
@ -1273,15 +1257,6 @@
"item.create.wand_of_symmetry.tooltip.control3": "R-Click while Sneaking",
"item.create.wand_of_symmetry.tooltip.action3": "Opens the _Configuration Interface_",
"item.create.handheld_blockzapper.tooltip": "BLOCKZAPPER",
"item.create.handheld_blockzapper.tooltip.summary": "Novel gadget for placing or exchanging blocks at a distance.",
"item.create.handheld_blockzapper.tooltip.control1": "L-Click at Block",
"item.create.handheld_blockzapper.tooltip.action1": "Sets blocks placed by the tool to the targeted block.",
"item.create.handheld_blockzapper.tooltip.control2": "R-Click at Block",
"item.create.handheld_blockzapper.tooltip.action2": "_Places_ or _Replaces_ the targeted block.",
"item.create.handheld_blockzapper.tooltip.control3": "R-Click while Sneaking",
"item.create.handheld_blockzapper.tooltip.action3": "Opens the _Configuration Interface_.",
"item.create.handheld_worldshaper.tooltip": "HANDHELD WORLDSHAPER",
"item.create.handheld_worldshaper.tooltip.summary": "Handy tool for creating _landscapes_ and _terrain features_.",
"item.create.handheld_worldshaper.tooltip.control1": "L-Click at Block",
@ -1296,9 +1271,6 @@
"item.create.tree_fertilizer.tooltip.condition1": "When used on a Sapling",
"item.create.tree_fertilizer.tooltip.behaviour1": "Grows Trees _regardless_ of their _spacing conditions_",
"item.create.deforester.tooltip": "DEFORESTER",
"item.create.deforester.tooltip.summary": "A _radiant axe_ able to chop down trees in a split second.",
"item.create.extendo_grip.tooltip": "EXTENDO GRIP",
"item.create.extendo_grip.tooltip.summary": "Boioioing! Greatly _increases reach distance_ of the wielder.",
"item.create.extendo_grip.tooltip.condition1": "When in Off-Hand",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 921",
"_": "Missing Localizations: 935",
"_": "->------------------------] Game Elements [------------------------<-",
@ -456,7 +456,6 @@
"item.create.crushed_tin_ore": "Zerkleinertes Zinnerz",
"item.create.crushed_uranium_ore": "Zerkleinertes Uranerz",
"item.create.crushed_zinc_ore": "Zerkleinertes Zinkerz",
"item.create.deforester": "Entforster",
"item.create.dough": "Teig",
"item.create.electron_tube": "Elektronenröhre",
"item.create.empty_blaze_burner": "Leerer Lohenbrenner",
@ -466,7 +465,6 @@
"item.create.furnace_minecart_contraption": "Antriebsloren Vorrichtung",
"item.create.goggles": "Ingenieursbrille",
"item.create.golden_sheet": "Goldblech",
"item.create.handheld_blockzapper": "Blockpistole",
"item.create.handheld_worldshaper": "Geländeformer",
"item.create.honey_bucket": "Honigeimer",
"item.create.honeyed_apple": "Honigapfel",
@ -645,14 +643,8 @@
"advancement.create.refined_radiance.desc": "UNLOCALIZED: Create Refined Radiance, a powerful chromatic substance.",
"advancement.create.chromatic_age": "UNLOCALIZED: The Chromatic Age",
"advancement.create.chromatic_age.desc": "UNLOCALIZED: Create casing blocks of the light and dark.",
"advancement.create.zapper": "UNLOCALIZED: Building With Style",
"advancement.create.zapper.desc": "UNLOCALIZED: Craft a Blockzapper. A radiant laser gun that helps you build.",
"advancement.create.upgraded_zapper": "UNLOCALIZED: Radiant Overdrive",
"advancement.create.upgraded_zapper.desc": "UNLOCALIZED: Create and activate a fully upgraded Blockzapper.",
"advancement.create.wand_of_symmetry": "UNLOCALIZED: Radiant Mirrors",
"advancement.create.wand_of_symmetry.desc": "UNLOCALIZED: Craft a Staff of Symmetry.",
"advancement.create.deforester": "UNLOCALIZED: Radiant Chopping",
"advancement.create.deforester.desc": "UNLOCALIZED: Craft a Deforester, and say goodbye to the local forest.",
"advancement.create.extendo_grip": "Boioioing!",
"advancement.create.extendo_grip.desc": "Beschaffe einen Extendo Griff.",
"advancement.create.dual_extendo_grip": "Ultimatives Boing-Zeitalter",
@ -695,7 +687,6 @@
"create.recipe.automatic_shaped": "Automatisiertes Geformtes Bauen",
"create.recipe.block_cutting": "Schneiden von Blöcken",
"create.recipe.wood_cutting": "Schneiden von Holz",
"create.recipe.blockzapper_upgrade": "Blockpistole",
"create.recipe.sandpaper_polishing": "Schleifen",
"create.recipe.mystery_conversion": "Mysteriöse Konvertierung",
"create.recipe.spout_filling": "Befüllung per Ausguss",
@ -752,20 +743,16 @@
"create.orientation.alongZ": "Entlang Z",
"create.orientation.alongX": "Entlang X",
"create.gui.blockzapper.title": "Blockpistole",
"create.gui.blockzapper.replaceMode": "Austauschmodus",
"create.gui.blockzapper.searchDiagonal": "Diagonalen folgen",
"create.gui.blockzapper.searchFuzzy": "Materialgrenzen ignorieren",
"create.gui.blockzapper.range": "Reichweite",
"create.gui.blockzapper.needsUpgradedAmplifier": "Benötigt besseren Verstärker",
"create.gui.blockzapper.patternSection": "Muster",
"create.gui.blockzapper.pattern.solid": "Fest",
"create.gui.blockzapper.pattern.checkered": "Schachbrett",
"create.gui.blockzapper.pattern.inversecheckered": "Inverses Schachbrett",
"create.gui.blockzapper.pattern.chance25": "25%-Chance",
"create.gui.blockzapper.pattern.chance50": "50%-Chance",
"create.gui.blockzapper.pattern.chance75": "75%-Chance",
"create.gui.terrainzapper.title": "Tragbarer Geländeformer",
"create.gui.terrainzapper.searchDiagonal": "UNLOCALIZED: Follow Diagonals",
"create.gui.terrainzapper.searchFuzzy": "UNLOCALIZED: Ignore Material Borders",
"create.gui.terrainzapper.patternSection": "UNLOCALIZED: Pattern",
"create.gui.terrainzapper.pattern.solid": "UNLOCALIZED: Solid",
"create.gui.terrainzapper.pattern.checkered": "UNLOCALIZED: Checkerboard",
"create.gui.terrainzapper.pattern.inversecheckered": "UNLOCALIZED: Inverted Checkerboard",
"create.gui.terrainzapper.pattern.chance25": "UNLOCALIZED: 25% Roll",
"create.gui.terrainzapper.pattern.chance50": "UNLOCALIZED: 50% Roll",
"create.gui.terrainzapper.pattern.chance75": "UNLOCALIZED: 75% Roll",
"create.gui.terrainzapper.placement": "Platzierung",
"create.gui.terrainzapper.placement.merged": "Zusammengeführt",
"create.gui.terrainzapper.placement.attached": "Angefügt",
@ -774,6 +761,8 @@
"create.gui.terrainzapper.brush.cuboid": "Quader",
"create.gui.terrainzapper.brush.sphere": "Kugel",
"create.gui.terrainzapper.brush.cylinder": "Zylinder",
"create.gui.terrainzapper.brush.surface": "UNLOCALIZED: Surface",
"create.gui.terrainzapper.brush.cluster": "UNLOCALIZED: Cluster",
"create.gui.terrainzapper.tool": "Werkzeug",
"create.gui.terrainzapper.tool.fill": "Füllen",
"create.gui.terrainzapper.tool.place": "Platzieren",
@ -783,19 +772,8 @@
"create.gui.terrainzapper.tool.flatten": "Abflachen",
"create.terrainzapper.shiftRightClickToSet": "Shift-Rechts-Klick um eine Form auszuwählen",
"create.blockzapper.usingBlock": "Auswahl: %1$s",
"create.blockzapper.componentUpgrades": "Bauteil-Upgrades:",
"create.blockzapper.component.body": "Rumpf",
"create.blockzapper.component.amplifier": "Verstärker",
"create.blockzapper.component.accelerator": "Beschleuniger",
"create.blockzapper.component.retriever": "Empfänger",
"create.blockzapper.component.scope": "Fernrohr",
"create.blockzapper.componentTier.none": "Nichts",
"create.blockzapper.componentTier.brass": "Messing",
"create.blockzapper.componentTier.chromatic": "Chromatisch",
"create.blockzapper.leftClickToSet": "Linksklick auf einen Block zum Auswählen",
"create.blockzapper.empty": "Keine Blöcke übrig!",
"create.terrainzapper.usingBlock": "UNLOCALIZED: Using: %1$s",
"create.terrainzapper.leftClickToSet": "UNLOCALIZED: Left-Click a Block to set Material",
"create.minecart_coupling.two_couplings_max": "Jede Lore kann nicht mehr als zwei Kupplungen haben",
"create.minecart_coupling.unloaded": "Teile des Zuges scheinen in nicht geladenen Chunks zu sein",
@ -1155,20 +1133,26 @@
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "Schleim matscht",
"create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
"create.subtitle.blockzapper_confirm": "Bestätigendes Ding",
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
"create.subtitle.blockzapper_place": "Blöcke zappen an Ort und Stelle",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.blaze_munch": "Lohe kaut glücklich",
"create.subtitle.schematicannon_launch_block": "Bauplankanone schießt",
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
"create.subtitle.schematicannon_finish": "Bauplankanone endet",
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
"create.subtitle.mechanical_press_activation": "Mechanische Presse wird aktiviert",
"create.subtitle.blockzapper_deny": "Ablehnendes Boop",
"create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.crafter_click": "UNLOCALIZED: Crafter clicks",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.depot_plop": "UNLOCALIZED: Item lands",
"create.subtitle.confirm": "UNLOCALIZED: Affirmative ding",
"_": "->------------------------] Item Descriptions [------------------------<-",
@ -1274,15 +1258,6 @@
"item.create.wand_of_symmetry.tooltip.control3": "R-Klick beim Schleichen",
"item.create.wand_of_symmetry.tooltip.action3": "Öffnet das _Konfigurationsmenü_",
"item.create.handheld_blockzapper.tooltip": "BLOCKPISTOLE",
"item.create.handheld_blockzapper.tooltip.summary": "Ermöglicht das Platzieren und Austauschen von Blöcken aus großer Entfernung.",
"item.create.handheld_blockzapper.tooltip.control1": "L-Klick auf Block",
"item.create.handheld_blockzapper.tooltip.action1": "Legt die von dem Werkzeug platzierten Blöcke auf den angeschauten Block fest.",
"item.create.handheld_blockzapper.tooltip.control2": "R-Klick auf Block",
"item.create.handheld_blockzapper.tooltip.action2": "_Platziert_ oder _Ersetzt_ den ausgewählten Block.",
"item.create.handheld_blockzapper.tooltip.control3": "R-Klick beim Schleichen",
"item.create.handheld_blockzapper.tooltip.action3": "Öffnet das _Konfigurationsmenü_",
"item.create.handheld_worldshaper.tooltip": "UNLOCALIZED: HANDHELD WORLDSHAPER",
"item.create.handheld_worldshaper.tooltip.summary": "UNLOCALIZED: Handy tool for creating _landscapes_ and _terrain features_.",
"item.create.handheld_worldshaper.tooltip.control1": "UNLOCALIZED: L-Click at Block",
@ -1297,9 +1272,6 @@
"item.create.tree_fertilizer.tooltip.condition1": "Wenn auf einen Setzling angewendet",
"item.create.tree_fertilizer.tooltip.behaviour1": "Lässt Bäume unabhängig vom Platz um sie herum wachsen",
"item.create.deforester.tooltip": "UNLOCALIZED: DEFORESTER",
"item.create.deforester.tooltip.summary": "UNLOCALIZED: A _radiant axe_ able to chop down trees in a split second.",
"item.create.extendo_grip.tooltip": "UNLOCALIZED: EXTENDO GRIP",
"item.create.extendo_grip.tooltip.summary": "UNLOCALIZED: Boioioing! Greatly _increases reach distance_ of the wielder.",
"item.create.extendo_grip.tooltip.condition1": "UNLOCALIZED: When in Off-Hand",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 614",
"_": "Missing Localizations: 636",
"_": "->------------------------] Game Elements [------------------------<-",
@ -456,7 +456,6 @@
"item.create.crushed_tin_ore": "Mineral de estaño molido",
"item.create.crushed_uranium_ore": "Mineral de uranio molido",
"item.create.crushed_zinc_ore": "Mineral de zinc molido",
"item.create.deforester": "Deforestador",
"item.create.dough": "Masilla",
"item.create.electron_tube": "Tubo de electrones",
"item.create.empty_blaze_burner": "Quemador de Blaze vacío",
@ -466,7 +465,6 @@
"item.create.furnace_minecart_contraption": "Artilugio de vagoneta de horno",
"item.create.goggles": "Gafas del Ingeniero",
"item.create.golden_sheet": "Lámina de oro",
"item.create.handheld_blockzapper": "Blockzapper",
"item.create.handheld_worldshaper": "Worldshaper",
"item.create.honey_bucket": "Cubo de miel",
"item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple",
@ -645,14 +643,8 @@
"advancement.create.refined_radiance.desc": "Crea un Resplandor refinado, una poderosa sustancia cromática.",
"advancement.create.chromatic_age": "La edad cromática",
"advancement.create.chromatic_age.desc": "Crear bloques de revestimiento de la luz y la oscuridad.",
"advancement.create.zapper": "Construir con estilo",
"advancement.create.zapper.desc": "Construye un Blockzapper. Una pistola láser radiante que te ayuda a construir.",
"advancement.create.upgraded_zapper": "Radiante sobrecarga",
"advancement.create.upgraded_zapper.desc": "Crear y activar un Blockzapper totalmente mejorado.",
"advancement.create.wand_of_symmetry": "Espejos radiantes",
"advancement.create.wand_of_symmetry.desc": "Crear un bastón de simetría.",
"advancement.create.deforester": "Picado radiante",
"advancement.create.deforester.desc": "Crea un Deforestador y despídete del bosque local.",
"advancement.create.extendo_grip": "Boioioing!",
"advancement.create.extendo_grip.desc": "Hazte con un Agarre extentido.",
"advancement.create.dual_extendo_grip": "La última edad del boing",
@ -695,7 +687,6 @@
"create.recipe.automatic_shaped": "Elaboración automatizada de productos con forma",
"create.recipe.block_cutting": "Corte de bloques",
"create.recipe.wood_cutting": "Corte de maderas",
"create.recipe.blockzapper_upgrade": "Blockzapper",
"create.recipe.sandpaper_polishing": "Pulido con papel de lija",
"create.recipe.mystery_conversion": "Conversión misteriosa",
"create.recipe.spout_filling": "Llenar por el pico",
@ -752,20 +743,16 @@
"create.orientation.alongZ": "A lo largo de Z",
"create.orientation.alongX": "A lo largo de X",
"create.gui.blockzapper.title": "Blockzapper",
"create.gui.blockzapper.replaceMode": "Modo de sustitución",
"create.gui.blockzapper.searchDiagonal": "Seguir las diagonales",
"create.gui.blockzapper.searchFuzzy": "Ignorar los bordes del material",
"create.gui.blockzapper.range": "Alcance del margen de maniobra",
"create.gui.blockzapper.needsUpgradedAmplifier": "Requiere un amplificador mejorado",
"create.gui.blockzapper.patternSection": "Patrón",
"create.gui.blockzapper.pattern.solid": "Sólido",
"create.gui.blockzapper.pattern.checkered": "Tablero de ajedrez",
"create.gui.blockzapper.pattern.inversecheckered": "Tablero de ajedrez invertido",
"create.gui.blockzapper.pattern.chance25": "25% Roll",
"create.gui.blockzapper.pattern.chance50": "50% Roll",
"create.gui.blockzapper.pattern.chance75": "75% Roll",
"create.gui.terrainzapper.title": "Worldshaper",
"create.gui.terrainzapper.searchDiagonal": "UNLOCALIZED: Follow Diagonals",
"create.gui.terrainzapper.searchFuzzy": "UNLOCALIZED: Ignore Material Borders",
"create.gui.terrainzapper.patternSection": "UNLOCALIZED: Pattern",
"create.gui.terrainzapper.pattern.solid": "UNLOCALIZED: Solid",
"create.gui.terrainzapper.pattern.checkered": "UNLOCALIZED: Checkerboard",
"create.gui.terrainzapper.pattern.inversecheckered": "UNLOCALIZED: Inverted Checkerboard",
"create.gui.terrainzapper.pattern.chance25": "UNLOCALIZED: 25% Roll",
"create.gui.terrainzapper.pattern.chance50": "UNLOCALIZED: 50% Roll",
"create.gui.terrainzapper.pattern.chance75": "UNLOCALIZED: 75% Roll",
"create.gui.terrainzapper.placement": "Colocación",
"create.gui.terrainzapper.placement.merged": "Fusionado",
"create.gui.terrainzapper.placement.attached": "Adjuntado",
@ -774,6 +761,8 @@
"create.gui.terrainzapper.brush.cuboid": "Cuboide",
"create.gui.terrainzapper.brush.sphere": "Esfera",
"create.gui.terrainzapper.brush.cylinder": "Cilindro",
"create.gui.terrainzapper.brush.surface": "UNLOCALIZED: Surface",
"create.gui.terrainzapper.brush.cluster": "UNLOCALIZED: Cluster",
"create.gui.terrainzapper.tool": "Herramienta",
"create.gui.terrainzapper.tool.fill": "Llenar",
"create.gui.terrainzapper.tool.place": "Sitio",
@ -783,19 +772,8 @@
"create.gui.terrainzapper.tool.flatten": "Aplanar",
"create.terrainzapper.shiftRightClickToSet": "Shift+Clic con el botón derecho para seleccionar una forma",
"create.blockzapper.usingBlock": "Utilizando: %1$s",
"create.blockzapper.componentUpgrades": "Mejoras de componentes:",
"create.blockzapper.component.body": "Cuerpo",
"create.blockzapper.component.amplifier": "Amplificador",
"create.blockzapper.component.accelerator": "Acelerador",
"create.blockzapper.component.retriever": "Recuperador",
"create.blockzapper.component.scope": "Mira telescópica",
"create.blockzapper.componentTier.none": "Ninguno",
"create.blockzapper.componentTier.brass": "Latón",
"create.blockzapper.componentTier.chromatic": "Cromático",
"create.blockzapper.leftClickToSet": "Clic izquierdo en un bloque para establecer el material",
"create.blockzapper.empty": "Sin bloques!",
"create.terrainzapper.usingBlock": "UNLOCALIZED: Using: %1$s",
"create.terrainzapper.leftClickToSet": "UNLOCALIZED: Left-Click a Block to set Material",
"create.minecart_coupling.two_couplings_max": "Las vagonetas no pueden tener más de dos enganches cada una",
"create.minecart_coupling.unloaded": "Algunas partes de su tren parecen estar en chunks no cargados",
@ -1155,20 +1133,26 @@
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "Slime aplastado",
"create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
"create.subtitle.blockzapper_confirm": "Ding afirmativo",
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
"create.subtitle.blockzapper_place": "Los bloques se colocan en su sitio",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.blaze_munch": "Blaze mastica felizmente",
"create.subtitle.schematicannon_launch_block": "Disparos de Schematicannon",
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
"create.subtitle.schematicannon_finish": "Acabados de Schematicannon",
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
"create.subtitle.mechanical_press_activation": "La Prensa Mecánica se activa",
"create.subtitle.blockzapper_deny": "Boop declinante",
"create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.crafter_click": "UNLOCALIZED: Crafter clicks",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.depot_plop": "UNLOCALIZED: Item lands",
"create.subtitle.confirm": "UNLOCALIZED: Affirmative ding",
"_": "->------------------------] Item Descriptions [------------------------<-",
@ -1274,15 +1258,6 @@
"item.create.wand_of_symmetry.tooltip.control3": "Click derecho mientras se agacha",
"item.create.wand_of_symmetry.tooltip.action3": "Abre la _Interfaz de Configuración_",
"item.create.handheld_blockzapper.tooltip": "BLOCKZAPPER",
"item.create.handheld_blockzapper.tooltip.summary": "Novedoso artefacto para colocar o intercambiar bloques a distancia",
"item.create.handheld_blockzapper.tooltip.control1": "Click izquierdo en un bloque",
"item.create.handheld_blockzapper.tooltip.action1": "Establece los bloques colocados por la herramienta en el bloque objetivo",
"item.create.handheld_blockzapper.tooltip.control2": "Click derecho en un bloque",
"item.create.handheld_blockzapper.tooltip.action2": "_Coloca_ o _Reemplaza_ el bloque objetivo",
"item.create.handheld_blockzapper.tooltip.control3": "Click derecho mientras se agacha",
"item.create.handheld_blockzapper.tooltip.action3": "Abre la _Interfaz de Configuración_",
"item.create.handheld_worldshaper.tooltip": "WORLDSHAPER",
"item.create.handheld_worldshaper.tooltip.summary": "Práctica herramienta para crear _paisajes_ y _características del terreno_",
"item.create.handheld_worldshaper.tooltip.control1": "Click izquierdo en un bloque",
@ -1297,9 +1272,6 @@
"item.create.tree_fertilizer.tooltip.condition1": "Cuando se utiliza en un árbol joven",
"item.create.tree_fertilizer.tooltip.behaviour1": "Hace crecer los árboles _independientemente_ de sus condiciones de _espacio_",
"item.create.deforester.tooltip": "DEFORESTADOR",
"item.create.deforester.tooltip.summary": "Un hacha _radiante_ capaz de talar árboles en una fracción de segundo",
"item.create.extendo_grip.tooltip": "AGARRE EXTENDIDO",
"item.create.extendo_grip.tooltip.summary": "¡Boioioing! Aumenta enormemente la _distancia de alcance_ del portador",
"item.create.extendo_grip.tooltip.condition1": "Cuando está fuera de la mano",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1272",
"_": "Missing Localizations: 1259",
"_": "->------------------------] Game Elements [------------------------<-",
@ -456,7 +456,6 @@
"item.create.crushed_tin_ore": "Mineral de Estaño Molido",
"item.create.crushed_uranium_ore": "Mineral de Uranio Molido",
"item.create.crushed_zinc_ore": "Mineral de Zinc Molido",
"item.create.deforester": "Deforestador",
"item.create.dough": "Masa",
"item.create.electron_tube": "Válvula Electrónica",
"item.create.empty_blaze_burner": "Quemador de Blaze Vacío",
@ -466,7 +465,6 @@
"item.create.furnace_minecart_contraption": "Artefacto de Vagón con Horno",
"item.create.goggles": "Gafas de Protección para Ingenieros",
"item.create.golden_sheet": "Lámina de Oro",
"item.create.handheld_blockzapper": "Pistola de Manipulación de Bloques",
"item.create.handheld_worldshaper": "Pistola de Manipulación de Mundo",
"item.create.honey_bucket": "Cubeta de Miel",
"item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple",
@ -645,14 +643,8 @@
"advancement.create.refined_radiance.desc": "UNLOCALIZED: Create Refined Radiance, a powerful chromatic substance.",
"advancement.create.chromatic_age": "UNLOCALIZED: The Chromatic Age",
"advancement.create.chromatic_age.desc": "UNLOCALIZED: Create casing blocks of the light and dark.",
"advancement.create.zapper": "UNLOCALIZED: Building With Style",
"advancement.create.zapper.desc": "UNLOCALIZED: Craft a Blockzapper. A radiant laser gun that helps you build.",
"advancement.create.upgraded_zapper": "UNLOCALIZED: Radiant Overdrive",
"advancement.create.upgraded_zapper.desc": "UNLOCALIZED: Create and activate a fully upgraded Blockzapper.",
"advancement.create.wand_of_symmetry": "UNLOCALIZED: Radiant Mirrors",
"advancement.create.wand_of_symmetry.desc": "UNLOCALIZED: Craft a Staff of Symmetry.",
"advancement.create.deforester": "UNLOCALIZED: Radiant Chopping",
"advancement.create.deforester.desc": "UNLOCALIZED: Craft a Deforester, and say goodbye to the local forest.",
"advancement.create.extendo_grip": "UNLOCALIZED: Boioioing!",
"advancement.create.extendo_grip.desc": "UNLOCALIZED: Get hold of an Extendo Grip.",
"advancement.create.dual_extendo_grip": "UNLOCALIZED: Ultimate Boing-age",
@ -695,7 +687,6 @@
"create.recipe.automatic_shaped": "UNLOCALIZED: Automated Shaped Crafting",
"create.recipe.block_cutting": "UNLOCALIZED: Block Cutting",
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
"create.recipe.blockzapper_upgrade": "UNLOCALIZED: Handheld Blockzapper",
"create.recipe.sandpaper_polishing": "UNLOCALIZED: Sandpaper Polishing",
"create.recipe.mystery_conversion": "UNLOCALIZED: Mysterious Conversion",
"create.recipe.spout_filling": "UNLOCALIZED: Filling by Spout",
@ -752,20 +743,16 @@
"create.orientation.alongZ": "UNLOCALIZED: Along Z",
"create.orientation.alongX": "UNLOCALIZED: Along X",
"create.gui.blockzapper.title": "UNLOCALIZED: Handheld Blockzapper",
"create.gui.blockzapper.replaceMode": "UNLOCALIZED: Replace Mode",
"create.gui.blockzapper.searchDiagonal": "UNLOCALIZED: Follow Diagonals",
"create.gui.blockzapper.searchFuzzy": "UNLOCALIZED: Ignore Material Borders",
"create.gui.blockzapper.range": "UNLOCALIZED: Spread Range",
"create.gui.blockzapper.needsUpgradedAmplifier": "UNLOCALIZED: Requires Upgraded Amplifier",
"create.gui.blockzapper.patternSection": "UNLOCALIZED: Pattern",
"create.gui.blockzapper.pattern.solid": "UNLOCALIZED: Solid",
"create.gui.blockzapper.pattern.checkered": "UNLOCALIZED: Checkerboard",
"create.gui.blockzapper.pattern.inversecheckered": "UNLOCALIZED: Inverted Checkerboard",
"create.gui.blockzapper.pattern.chance25": "UNLOCALIZED: 25% Roll",
"create.gui.blockzapper.pattern.chance50": "UNLOCALIZED: 50% Roll",
"create.gui.blockzapper.pattern.chance75": "UNLOCALIZED: 75% Roll",
"create.gui.terrainzapper.title": "UNLOCALIZED: Handheld Worldshaper",
"create.gui.terrainzapper.title": "UNLOCALIZED: Handheld Blockzapper",
"create.gui.terrainzapper.searchDiagonal": "UNLOCALIZED: Follow Diagonals",
"create.gui.terrainzapper.searchFuzzy": "UNLOCALIZED: Ignore Material Borders",
"create.gui.terrainzapper.patternSection": "UNLOCALIZED: Pattern",
"create.gui.terrainzapper.pattern.solid": "UNLOCALIZED: Solid",
"create.gui.terrainzapper.pattern.checkered": "UNLOCALIZED: Checkerboard",
"create.gui.terrainzapper.pattern.inversecheckered": "UNLOCALIZED: Inverted Checkerboard",
"create.gui.terrainzapper.pattern.chance25": "UNLOCALIZED: 25% Roll",
"create.gui.terrainzapper.pattern.chance50": "UNLOCALIZED: 50% Roll",
"create.gui.terrainzapper.pattern.chance75": "UNLOCALIZED: 75% Roll",
"create.gui.terrainzapper.placement": "UNLOCALIZED: Placement",
"create.gui.terrainzapper.placement.merged": "UNLOCALIZED: Merged",
"create.gui.terrainzapper.placement.attached": "UNLOCALIZED: Attached",
@ -774,6 +761,8 @@
"create.gui.terrainzapper.brush.cuboid": "UNLOCALIZED: Cuboid",
"create.gui.terrainzapper.brush.sphere": "UNLOCALIZED: Sphere",
"create.gui.terrainzapper.brush.cylinder": "UNLOCALIZED: Cylinder",
"create.gui.terrainzapper.brush.surface": "UNLOCALIZED: Surface",
"create.gui.terrainzapper.brush.cluster": "UNLOCALIZED: Cluster",
"create.gui.terrainzapper.tool": "UNLOCALIZED: Tool",
"create.gui.terrainzapper.tool.fill": "UNLOCALIZED: Fill",
"create.gui.terrainzapper.tool.place": "UNLOCALIZED: Place",
@ -783,19 +772,8 @@
"create.gui.terrainzapper.tool.flatten": "UNLOCALIZED: Flatten",
"create.terrainzapper.shiftRightClickToSet": "UNLOCALIZED: Shift-Right-Click to Select a Shape",
"create.blockzapper.usingBlock": "UNLOCALIZED: Using: %1$s",
"create.blockzapper.componentUpgrades": "UNLOCALIZED: Component Upgrades:",
"create.blockzapper.component.body": "UNLOCALIZED: Body",
"create.blockzapper.component.amplifier": "UNLOCALIZED: Amplifier",
"create.blockzapper.component.accelerator": "UNLOCALIZED: Accelerator",
"create.blockzapper.component.retriever": "UNLOCALIZED: Retriever",
"create.blockzapper.component.scope": "UNLOCALIZED: Scope",
"create.blockzapper.componentTier.none": "UNLOCALIZED: None",
"create.blockzapper.componentTier.brass": "UNLOCALIZED: Brass",
"create.blockzapper.componentTier.chromatic": "UNLOCALIZED: Chromatic",
"create.blockzapper.leftClickToSet": "UNLOCALIZED: Left-Click a Block to set Material",
"create.blockzapper.empty": "UNLOCALIZED: Out of Blocks!",
"create.terrainzapper.usingBlock": "UNLOCALIZED: Using: %1$s",
"create.terrainzapper.leftClickToSet": "UNLOCALIZED: Left-Click a Block to set Material",
"create.minecart_coupling.two_couplings_max": "UNLOCALIZED: Minecarts cannot have more than two couplings each",
"create.minecart_coupling.unloaded": "UNLOCALIZED: Parts of your train seem to be in unloaded chunks",
@ -1155,20 +1133,26 @@
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "UNLOCALIZED: Slime squishes",
"create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
"create.subtitle.blockzapper_confirm": "UNLOCALIZED: Affirmative ding",
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
"create.subtitle.blockzapper_place": "UNLOCALIZED: Blockzapper zaps",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.blaze_munch": "UNLOCALIZED: Blaze Burner munches",
"create.subtitle.schematicannon_launch_block": "UNLOCALIZED: Schematicannon fires",
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
"create.subtitle.schematicannon_finish": "UNLOCALIZED: Schematicannon dings",
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
"create.subtitle.mechanical_press_activation": "UNLOCALIZED: Mechanical Press clangs",
"create.subtitle.blockzapper_deny": "UNLOCALIZED: Declining boop",
"create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.crafter_click": "UNLOCALIZED: Crafter clicks",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.depot_plop": "UNLOCALIZED: Item lands",
"create.subtitle.confirm": "UNLOCALIZED: Affirmative ding",
"_": "->------------------------] Item Descriptions [------------------------<-",
@ -1274,15 +1258,6 @@
"item.create.wand_of_symmetry.tooltip.control3": "Click Derecho cuando se esta agachado",
"item.create.wand_of_symmetry.tooltip.action3": "Abre la _Interfaz_ _de_ _Configuración_",
"item.create.handheld_blockzapper.tooltip": "BLOCKZAPPER",
"item.create.handheld_blockzapper.tooltip.summary": "Novedoso artilugio para colocar o intercambiar bloques a distancia.",
"item.create.handheld_blockzapper.tooltip.control1": "Click Izquierdo a un bloque",
"item.create.handheld_blockzapper.tooltip.action1": "Establece los bloques que serán colocados por la herramienta en el bloque objetivo.",
"item.create.handheld_blockzapper.tooltip.control2": "Click Derecho en un bloque",
"item.create.handheld_blockzapper.tooltip.action2": "_Coloca_ o _reemplaza_ el bloque objetivo.",
"item.create.handheld_blockzapper.tooltip.control3": "Click Derecho mientras se está agachado",
"item.create.handheld_blockzapper.tooltip.action3": "Abre la _Interfaz_ _de_ _Configuración._",
"item.create.handheld_worldshaper.tooltip": "HANDHELD WORLDSHAPER",
"item.create.handheld_worldshaper.tooltip.summary": "Una herramienta útil para crear _paisajes_ y _características_ en el _terreno._",
"item.create.handheld_worldshaper.tooltip.control1": "Click Izquierdo a un bloque",
@ -1297,9 +1272,6 @@
"item.create.tree_fertilizer.tooltip.condition1": "Cuando se usa en un retoño de árbol",
"item.create.tree_fertilizer.tooltip.behaviour1": "Hace crecer los árboles, sin importar el espacio entre ellos.",
"item.create.deforester.tooltip": "DEFORESTER",
"item.create.deforester.tooltip.summary": "Un _hacha_ _radiante_ capaz de cortar árboles en una fracción de segundo.",
"item.create.extendo_grip.tooltip": "EXTENDO GRIP",
"item.create.extendo_grip.tooltip.summary": "Boioioing! En gran medida, _aumenta_ _la_ _distancia_ _de_ _alcance_ del portador.",
"item.create.extendo_grip.tooltip.condition1": "Cuando está en la mano secundaria",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1171",
"_": "Missing Localizations: 1187",
"_": "->------------------------] Game Elements [------------------------<-",
@ -456,7 +456,6 @@
"item.create.crushed_tin_ore": "Etain concassé",
"item.create.crushed_uranium_ore": "Uranium concassé",
"item.create.crushed_zinc_ore": "Zinc concassé",
"item.create.deforester": "Déforesteur",
"item.create.dough": "Pâte",
"item.create.electron_tube": "Tube électronique",
"item.create.empty_blaze_burner": "Brûleur à blaze vide",
@ -466,7 +465,6 @@
"item.create.furnace_minecart_contraption": "Engin de wagon avec fourneau",
"item.create.goggles": "Lunettes d'ingénieur",
"item.create.golden_sheet": "Feuille d'or",
"item.create.handheld_blockzapper": "Blockzappeur portable",
"item.create.handheld_worldshaper": "Térraformeur portable",
"item.create.honey_bucket": "Seau de miel",
"item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple",
@ -645,14 +643,8 @@
"advancement.create.refined_radiance.desc": "UNLOCALIZED: Create Refined Radiance, a powerful chromatic substance.",
"advancement.create.chromatic_age": "UNLOCALIZED: The Chromatic Age",
"advancement.create.chromatic_age.desc": "UNLOCALIZED: Create casing blocks of the light and dark.",
"advancement.create.zapper": "UNLOCALIZED: Building With Style",
"advancement.create.zapper.desc": "UNLOCALIZED: Craft a Blockzapper. A radiant laser gun that helps you build.",
"advancement.create.upgraded_zapper": "UNLOCALIZED: Radiant Overdrive",
"advancement.create.upgraded_zapper.desc": "UNLOCALIZED: Create and activate a fully upgraded Blockzapper.",
"advancement.create.wand_of_symmetry": "UNLOCALIZED: Radiant Mirrors",
"advancement.create.wand_of_symmetry.desc": "UNLOCALIZED: Craft a Staff of Symmetry.",
"advancement.create.deforester": "UNLOCALIZED: Radiant Chopping",
"advancement.create.deforester.desc": "UNLOCALIZED: Craft a Deforester, and say goodbye to the local forest.",
"advancement.create.extendo_grip": "UNLOCALIZED: Boioioing!",
"advancement.create.extendo_grip.desc": "UNLOCALIZED: Get hold of an Extendo Grip.",
"advancement.create.dual_extendo_grip": "UNLOCALIZED: Ultimate Boing-age",
@ -695,7 +687,6 @@
"create.recipe.automatic_shaped": "UNLOCALIZED: Automated Shaped Crafting",
"create.recipe.block_cutting": "Coupe de bloc",
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
"create.recipe.blockzapper_upgrade": "Blockzappeur portable",
"create.recipe.sandpaper_polishing": "Polissage au papier de verre",
"create.recipe.mystery_conversion": "Métamorphose chromatique",
"create.recipe.spout_filling": "Remplissage par un bec verseur",
@ -752,20 +743,16 @@
"create.orientation.alongZ": "Sur Z",
"create.orientation.alongX": "Sur X",
"create.gui.blockzapper.title": "Blockzappeur portable",
"create.gui.blockzapper.replaceMode": "Mode de remplacement",
"create.gui.blockzapper.searchDiagonal": "Suivez les diagonales",
"create.gui.blockzapper.searchFuzzy": "Ignorer les bordures de matériau",
"create.gui.blockzapper.range": "Plage de propagation",
"create.gui.blockzapper.needsUpgradedAmplifier": "Nécessite un amplificateur amélioré",
"create.gui.blockzapper.patternSection": "Motif",
"create.gui.blockzapper.pattern.solid": "Solide",
"create.gui.blockzapper.pattern.checkered": "Quamechanical_drillage",
"create.gui.blockzapper.pattern.inversecheckered": "Quamechanical_drillage inversé",
"create.gui.blockzapper.pattern.chance25": "25%",
"create.gui.blockzapper.pattern.chance50": "50%",
"create.gui.blockzapper.pattern.chance75": "75%",
"create.gui.terrainzapper.title": "Térraformeur portable",
"create.gui.terrainzapper.searchDiagonal": "UNLOCALIZED: Follow Diagonals",
"create.gui.terrainzapper.searchFuzzy": "UNLOCALIZED: Ignore Material Borders",
"create.gui.terrainzapper.patternSection": "UNLOCALIZED: Pattern",
"create.gui.terrainzapper.pattern.solid": "UNLOCALIZED: Solid",
"create.gui.terrainzapper.pattern.checkered": "UNLOCALIZED: Checkerboard",
"create.gui.terrainzapper.pattern.inversecheckered": "UNLOCALIZED: Inverted Checkerboard",
"create.gui.terrainzapper.pattern.chance25": "UNLOCALIZED: 25% Roll",
"create.gui.terrainzapper.pattern.chance50": "UNLOCALIZED: 50% Roll",
"create.gui.terrainzapper.pattern.chance75": "UNLOCALIZED: 75% Roll",
"create.gui.terrainzapper.placement": "Placement",
"create.gui.terrainzapper.placement.merged": "Fusionner",
"create.gui.terrainzapper.placement.attached": "Attacher",
@ -774,6 +761,8 @@
"create.gui.terrainzapper.brush.cuboid": "Cuboïde",
"create.gui.terrainzapper.brush.sphere": "Sphère",
"create.gui.terrainzapper.brush.cylinder": "Cylindre",
"create.gui.terrainzapper.brush.surface": "UNLOCALIZED: Surface",
"create.gui.terrainzapper.brush.cluster": "UNLOCALIZED: Cluster",
"create.gui.terrainzapper.tool": "Outil",
"create.gui.terrainzapper.tool.fill": "Remplir",
"create.gui.terrainzapper.tool.place": "Placer",
@ -783,19 +772,8 @@
"create.gui.terrainzapper.tool.flatten": "Applatir",
"create.terrainzapper.shiftRightClickToSet": "Maj + clic droit pour sélectionner une forme",
"create.blockzapper.usingBlock": "Utilisation: %1$s",
"create.blockzapper.componentUpgrades": "Mises à niveau des composants:",
"create.blockzapper.component.body": "Corps",
"create.blockzapper.component.amplifier": "Amplifieur",
"create.blockzapper.component.accelerator": "Accélérateur",
"create.blockzapper.component.retriever": "Récupérateur",
"create.blockzapper.component.scope": "Lunette",
"create.blockzapper.componentTier.none": "Aucun",
"create.blockzapper.componentTier.brass": "Laiton",
"create.blockzapper.componentTier.chromatic": "Chromatique",
"create.blockzapper.leftClickToSet": "Clic gauche sur un bloc pour en définir le matériau",
"create.blockzapper.empty": "Plus de blocs!",
"create.terrainzapper.usingBlock": "UNLOCALIZED: Using: %1$s",
"create.terrainzapper.leftClickToSet": "UNLOCALIZED: Left-Click a Block to set Material",
"create.minecart_coupling.two_couplings_max": "UNLOCALIZED: Minecarts cannot have more than two couplings each",
"create.minecart_coupling.unloaded": "UNLOCALIZED: Parts of your train seem to be in unloaded chunks",
@ -1155,20 +1133,26 @@
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "Bruit de slime",
"create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
"create.subtitle.blockzapper_confirm": "Ding d'affirmation",
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
"create.subtitle.blockzapper_place": "Blocs se zappant en place",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.blaze_munch": "UNLOCALIZED: Blaze Burner munches",
"create.subtitle.schematicannon_launch_block": "Tir de schémacanon",
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
"create.subtitle.schematicannon_finish": "Fin de schémacanon",
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
"create.subtitle.mechanical_press_activation": "Activation de la presse mechanique",
"create.subtitle.blockzapper_deny": "Boop de déclin",
"create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.crafter_click": "UNLOCALIZED: Crafter clicks",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.depot_plop": "UNLOCALIZED: Item lands",
"create.subtitle.confirm": "UNLOCALIZED: Affirmative ding",
"_": "->------------------------] Item Descriptions [------------------------<-",
@ -1274,15 +1258,6 @@
"item.create.wand_of_symmetry.tooltip.control3": "Clic droit en étant accroupi",
"item.create.wand_of_symmetry.tooltip.action3": "Ouvre l'_interface_ _de_ _configuration_",
"item.create.handheld_blockzapper.tooltip": "BLOCKZAPPEUR",
"item.create.handheld_blockzapper.tooltip.summary": "Nouveau gadget pour placer ou échanger des blocs à distance.",
"item.create.handheld_blockzapper.tooltip.control1": "Clic gauche sur un bloc",
"item.create.handheld_blockzapper.tooltip.action1": "Définit les blocs placés par l'outil sur le bloc ciblé.",
"item.create.handheld_blockzapper.tooltip.control2": "Clic droit sur un bloc",
"item.create.handheld_blockzapper.tooltip.action2": "_Place_ ou _remplace_ le bloc ciblé.",
"item.create.handheld_blockzapper.tooltip.control3": "Clic droit en étant accroupi",
"item.create.handheld_blockzapper.tooltip.action3": "Ouvre l'_interface_ _de_ _configuration_.",
"item.create.handheld_worldshaper.tooltip": "TERRAFORMEUR",
"item.create.handheld_worldshaper.tooltip.summary": "Outil pratique pour créer des _paysage_ et _caractéristiques_ _de_ _terrain_.",
"item.create.handheld_worldshaper.tooltip.control1": "Clic gauche sur un bloc",
@ -1297,9 +1272,6 @@
"item.create.tree_fertilizer.tooltip.condition1": "Lorsqu'utilisé sur une pousse d'rotor",
"item.create.tree_fertilizer.tooltip.behaviour1": "Fait pousser des rotors _indépendamment_ de leurs _conditions_ _d'emplacement_",
"item.create.deforester.tooltip": "DÉFORESTEUR",
"item.create.deforester.tooltip.summary": "Une _hache_ _rayonnante_ capable d'abattre des rotors en une fraction de seconde.",
"item.create.extendo_grip.tooltip": "UNLOCALIZED: EXTENDO GRIP",
"item.create.extendo_grip.tooltip.summary": "UNLOCALIZED: Boioioing! Greatly _increases reach distance_ of the wielder.",
"item.create.extendo_grip.tooltip.condition1": "UNLOCALIZED: When in Off-Hand",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 631",
"_": "Missing Localizations: 653",
"_": "->------------------------] Game Elements [------------------------<-",
@ -456,7 +456,6 @@
"item.create.crushed_tin_ore": "Stagno grezzo frantumato",
"item.create.crushed_uranium_ore": "Uranio grezzo frantumato",
"item.create.crushed_zinc_ore": "Zinco grezzo frantumato",
"item.create.deforester": "Deforestatore",
"item.create.dough": "Impasto",
"item.create.electron_tube": "Valvola",
"item.create.empty_blaze_burner": "Inceneritore di blaze vuoto",
@ -466,7 +465,6 @@
"item.create.furnace_minecart_contraption": "Contrazione per carrello da miniera con fornace",
"item.create.goggles": "Occhiali da ingegnere",
"item.create.golden_sheet": "Lamiera d'oro",
"item.create.handheld_blockzapper": "Zapper di blocchi portatile",
"item.create.handheld_worldshaper": "Plasmatore del mondo portatile",
"item.create.honey_bucket": "Secchio di miele",
"item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple",
@ -645,14 +643,8 @@
"advancement.create.refined_radiance.desc": "Crea la radiance raffinata, una sostanza cromatica potente.",
"advancement.create.chromatic_age": "L'era cromatica",
"advancement.create.chromatic_age.desc": "Crea involucri di luce e d'ombra.",
"advancement.create.zapper": "Stile nella costruzione",
"advancement.create.zapper.desc": "Crea uno zapper di blocchi. Una pistola laser che ti aiuta a costruire.",
"advancement.create.upgraded_zapper": "Overdrive",
"advancement.create.upgraded_zapper.desc": "Crea e attiva uno zapper di blocchi potenziato al massimo.",
"advancement.create.wand_of_symmetry": "Perfettamente simmetrico",
"advancement.create.wand_of_symmetry.desc": "Crea un'asta di simmetria.",
"advancement.create.deforester": "Deforestazione avanzata",
"advancement.create.deforester.desc": "Crea un deforestatore. Ciao ciao alberelli...",
"advancement.create.extendo_grip": "BOIOIOING",
"advancement.create.extendo_grip.desc": "Procurati una presa extendo.",
"advancement.create.dual_extendo_grip": "Boingaggio estremo",
@ -695,7 +687,6 @@
"create.recipe.automatic_shaped": "Costruzione con forma automatizzata",
"create.recipe.block_cutting": "Taglio di blocchi",
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
"create.recipe.blockzapper_upgrade": "Zapper di blocchi portatile",
"create.recipe.sandpaper_polishing": "Levigamento da carta vetrata",
"create.recipe.mystery_conversion": "Metamorfosi cromatica",
"create.recipe.spout_filling": "Riempimento da spruzzo",
@ -752,20 +743,16 @@
"create.orientation.alongZ": "Lungo Z",
"create.orientation.alongX": "Lungo X",
"create.gui.blockzapper.title": "Zapper di blocchi",
"create.gui.blockzapper.replaceMode": "Modalità sostituzione",
"create.gui.blockzapper.searchDiagonal": "Segui diagonali",
"create.gui.blockzapper.searchFuzzy": "Ignora i bordi dei materiali",
"create.gui.blockzapper.range": "Gamma diffusione",
"create.gui.blockzapper.needsUpgradedAmplifier": "Richiede aggiornamento dell'amplificatore",
"create.gui.blockzapper.patternSection": "Schema",
"create.gui.blockzapper.pattern.solid": "Solido",
"create.gui.blockzapper.pattern.checkered": "Scacchiera",
"create.gui.blockzapper.pattern.inversecheckered": "Scacchiera invertita",
"create.gui.blockzapper.pattern.chance25": "Riempito al 25%",
"create.gui.blockzapper.pattern.chance50": "Riempito al 50%",
"create.gui.blockzapper.pattern.chance75": "Riempito al 75%",
"create.gui.terrainzapper.title": "Plasmatore del mondo",
"create.gui.terrainzapper.searchDiagonal": "UNLOCALIZED: Follow Diagonals",
"create.gui.terrainzapper.searchFuzzy": "UNLOCALIZED: Ignore Material Borders",
"create.gui.terrainzapper.patternSection": "UNLOCALIZED: Pattern",
"create.gui.terrainzapper.pattern.solid": "UNLOCALIZED: Solid",
"create.gui.terrainzapper.pattern.checkered": "UNLOCALIZED: Checkerboard",
"create.gui.terrainzapper.pattern.inversecheckered": "UNLOCALIZED: Inverted Checkerboard",
"create.gui.terrainzapper.pattern.chance25": "UNLOCALIZED: 25% Roll",
"create.gui.terrainzapper.pattern.chance50": "UNLOCALIZED: 50% Roll",
"create.gui.terrainzapper.pattern.chance75": "UNLOCALIZED: 75% Roll",
"create.gui.terrainzapper.placement": "Piazzamento",
"create.gui.terrainzapper.placement.merged": "Fuso",
"create.gui.terrainzapper.placement.attached": "Attaccato",
@ -774,6 +761,8 @@
"create.gui.terrainzapper.brush.cuboid": "Cuboide",
"create.gui.terrainzapper.brush.sphere": "Sferico",
"create.gui.terrainzapper.brush.cylinder": "Cilindrico",
"create.gui.terrainzapper.brush.surface": "UNLOCALIZED: Surface",
"create.gui.terrainzapper.brush.cluster": "UNLOCALIZED: Cluster",
"create.gui.terrainzapper.tool": "Strumento",
"create.gui.terrainzapper.tool.fill": "Riempi",
"create.gui.terrainzapper.tool.place": "Piazza",
@ -783,19 +772,8 @@
"create.gui.terrainzapper.tool.flatten": "Appiattisci",
"create.terrainzapper.shiftRightClickToSet": "Clic destro e shift per selezionare una forma",
"create.blockzapper.usingBlock": "In utilizzo: %1$s",
"create.blockzapper.componentUpgrades": "Componenti:",
"create.blockzapper.component.body": "Corpo",
"create.blockzapper.component.amplifier": "Amplificatore",
"create.blockzapper.component.accelerator": "Acceleratore",
"create.blockzapper.component.retriever": "Retriever",
"create.blockzapper.component.scope": "Portata",
"create.blockzapper.componentTier.none": "Nessuno",
"create.blockzapper.componentTier.brass": "Ottone",
"create.blockzapper.componentTier.chromatic": "Cromatico",
"create.blockzapper.leftClickToSet": "Clic sinistro su un blocco per impostare il materiale",
"create.blockzapper.empty": "Fuori dai blocchi!",
"create.terrainzapper.usingBlock": "UNLOCALIZED: Using: %1$s",
"create.terrainzapper.leftClickToSet": "UNLOCALIZED: Left-Click a Block to set Material",
"create.minecart_coupling.two_couplings_max": "I carrelli da miniera non possono avere più di due agganci ciascuno",
"create.minecart_coupling.unloaded": "Parti del tuo treno sembrano essere in mezzo a chunk non caricati",
@ -1155,20 +1133,26 @@
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "Slime schiacciato",
"create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
"create.subtitle.blockzapper_confirm": "Ding affermativo",
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
"create.subtitle.blockzapper_place": "Posiziona blocchi nello spazio",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.blaze_munch": "Il blaze lo gusta felicemente",
"create.subtitle.schematicannon_launch_block": "Tiri del cannoneschematico",
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
"create.subtitle.schematicannon_finish": "Finiture cannoneschematico",
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
"create.subtitle.mechanical_press_activation": "Pressa meccanica attiva",
"create.subtitle.blockzapper_deny": "Boop in calo",
"create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.crafter_click": "UNLOCALIZED: Crafter clicks",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.depot_plop": "UNLOCALIZED: Item lands",
"create.subtitle.confirm": "UNLOCALIZED: Affirmative ding",
"_": "->------------------------] Item Descriptions [------------------------<-",
@ -1274,15 +1258,6 @@
"item.create.wand_of_symmetry.tooltip.control3": "Clic destro da accovacciato",
"item.create.wand_of_symmetry.tooltip.action3": "Apre l'_interfaccia_ _di_ _configurazione_",
"item.create.handheld_blockzapper.tooltip": "ZAPPER DI BLOCCHI PORTATILE",
"item.create.handheld_blockzapper.tooltip.summary": "Nuovo gadget per posizionare o scambiare blocchi a distanza.",
"item.create.handheld_blockzapper.tooltip.control1": "Clic sinistro su un blocco",
"item.create.handheld_blockzapper.tooltip.action1": "Imposta i blocchi posizionati dallo strumento sul blocco selezionato.",
"item.create.handheld_blockzapper.tooltip.control2": "Clic destro su un blocco",
"item.create.handheld_blockzapper.tooltip.action2": "_Piazza_ o _sostituisce_ il blocco selezionato.",
"item.create.handheld_blockzapper.tooltip.control3": "Clic destro da accovacciato",
"item.create.handheld_blockzapper.tooltip.action3": "Apre l'_interfaccia_ _di_ _configurazione_.",
"item.create.handheld_worldshaper.tooltip": "PLASMATORE DEL MONDO PORTATILE",
"item.create.handheld_worldshaper.tooltip.summary": "Strumento per la creazione di _paesaggi_ e _caratteristiche_ _del_ _terreno_.",
"item.create.handheld_worldshaper.tooltip.control1": "Clic sinistro su un blocco",
@ -1297,9 +1272,6 @@
"item.create.tree_fertilizer.tooltip.condition1": "Se utilizzato su un arboscello",
"item.create.tree_fertilizer.tooltip.behaviour1": "Fa crescere gli alberi _indipendentemente_ dalle _condizioni_ _di_ _spazio_",
"item.create.deforester.tooltip": "DEFORESTATORE",
"item.create.deforester.tooltip.summary": "Un'_ascia_ _radiante_ in grado di abbattere alberi in una frazione di secondo.",
"item.create.extendo_grip.tooltip": "PRESA EXTENDO",
"item.create.extendo_grip.tooltip.summary": "Boioioing! _Incrementa notevolmente la distanza per piazzare_ di chi lo brandisce.",
"item.create.extendo_grip.tooltip.condition1": "Quando in mano secondaria",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 684",
"_": "Missing Localizations: 706",
"_": "->------------------------] Game Elements [------------------------<-",
@ -456,7 +456,6 @@
"item.create.crushed_tin_ore": "UNLOCALIZED: Crushed Tin Ore",
"item.create.crushed_uranium_ore": "UNLOCALIZED: Crushed Uranium Ore",
"item.create.crushed_zinc_ore": "분쇄된 아연 광석",
"item.create.deforester": "산림파괴자",
"item.create.dough": "반죽",
"item.create.electron_tube": "전지 튜브",
"item.create.empty_blaze_burner": "빈 블레이즈 버너",
@ -466,7 +465,6 @@
"item.create.furnace_minecart_contraption": "화로가 실린 광산 수레 장치",
"item.create.goggles": "엔지니어의 고글",
"item.create.golden_sheet": "금 판",
"item.create.handheld_blockzapper": "휴대용 블록발사기",
"item.create.handheld_worldshaper": "휴대용 세계편집기",
"item.create.honey_bucket": "꿀 양동이",
"item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple",
@ -645,14 +643,8 @@
"advancement.create.refined_radiance.desc": "강력한 색채 물질, 정제된 빛을 생성하세요.",
"advancement.create.chromatic_age": "양극 시대",
"advancement.create.chromatic_age.desc": "빛과 어둠의 케이스를 제작하세요.",
"advancement.create.zapper": "나는 스타일있게 건축해",
"advancement.create.zapper.desc": "당신의 건축을 도와줄 멋진 레이저 건, 휴대용 블록발사기를 만드세요.",
"advancement.create.upgraded_zapper": "화려한 빛이 날 감싸네",
"advancement.create.upgraded_zapper.desc": "완전히 업그레이드된 휴대용 블록발사기를 만들고 써보세요.",
"advancement.create.wand_of_symmetry": "빛나는 건축",
"advancement.create.wand_of_symmetry.desc": "대칭의 지팡이를 만드세요.",
"advancement.create.deforester": "빛나는 벌목",
"advancement.create.deforester.desc": "산림파괴자를 만들고, 숲에게 작별인사를 하세요.",
"advancement.create.extendo_grip": "띠요오옹!",
"advancement.create.extendo_grip.desc": "외장형 연장 팔을 드세요.",
"advancement.create.dual_extendo_grip": "궁극의 띠용!",
@ -695,7 +687,6 @@
"create.recipe.automatic_shaped": "유형 자동 조합",
"create.recipe.block_cutting": "블 절단",
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
"create.recipe.blockzapper_upgrade": "휴대용 블록발사기 업그레이드",
"create.recipe.sandpaper_polishing": "사포질",
"create.recipe.mystery_conversion": "?",
"create.recipe.spout_filling": "채우기",
@ -752,20 +743,16 @@
"create.orientation.alongZ": "Z좌표를 따라",
"create.orientation.alongX": "X좌표를 따라",
"create.gui.blockzapper.title": "휴대용 블록발사기",
"create.gui.blockzapper.replaceMode": "대체 모드",
"create.gui.blockzapper.searchDiagonal": "대각선을 따라",
"create.gui.blockzapper.searchFuzzy": "물질 경계 무시",
"create.gui.blockzapper.range": "범위",
"create.gui.blockzapper.needsUpgradedAmplifier": "업그레이드가 필요합니다",
"create.gui.blockzapper.patternSection": "패턴 설정",
"create.gui.blockzapper.pattern.solid": "원형",
"create.gui.blockzapper.pattern.checkered": "체스판",
"create.gui.blockzapper.pattern.inversecheckered": "반전된 체스판",
"create.gui.blockzapper.pattern.chance25": "랜덤으로 25% 채우기",
"create.gui.blockzapper.pattern.chance50": "랜덤으로 50% 채우기",
"create.gui.blockzapper.pattern.chance75": "랜덤으로 75% 채우기",
"create.gui.terrainzapper.title": "휴대용 세계편집기",
"create.gui.terrainzapper.searchDiagonal": "UNLOCALIZED: Follow Diagonals",
"create.gui.terrainzapper.searchFuzzy": "UNLOCALIZED: Ignore Material Borders",
"create.gui.terrainzapper.patternSection": "UNLOCALIZED: Pattern",
"create.gui.terrainzapper.pattern.solid": "UNLOCALIZED: Solid",
"create.gui.terrainzapper.pattern.checkered": "UNLOCALIZED: Checkerboard",
"create.gui.terrainzapper.pattern.inversecheckered": "UNLOCALIZED: Inverted Checkerboard",
"create.gui.terrainzapper.pattern.chance25": "UNLOCALIZED: 25% Roll",
"create.gui.terrainzapper.pattern.chance50": "UNLOCALIZED: 50% Roll",
"create.gui.terrainzapper.pattern.chance75": "UNLOCALIZED: 75% Roll",
"create.gui.terrainzapper.placement": "설치방식",
"create.gui.terrainzapper.placement.merged": "선택한 블록에",
"create.gui.terrainzapper.placement.attached": "선택한 블록 옆에",
@ -774,6 +761,8 @@
"create.gui.terrainzapper.brush.cuboid": "정육면체",
"create.gui.terrainzapper.brush.sphere": "구",
"create.gui.terrainzapper.brush.cylinder": "원통",
"create.gui.terrainzapper.brush.surface": "UNLOCALIZED: Surface",
"create.gui.terrainzapper.brush.cluster": "UNLOCALIZED: Cluster",
"create.gui.terrainzapper.tool": "도구",
"create.gui.terrainzapper.tool.fill": "채우기",
"create.gui.terrainzapper.tool.place": "설치",
@ -783,19 +772,8 @@
"create.gui.terrainzapper.tool.flatten": "평탄화",
"create.terrainzapper.shiftRightClickToSet": "쉬프트-우클릭으로 모양 설정하기",
"create.blockzapper.usingBlock": "현재 블록: %1$s",
"create.blockzapper.componentUpgrades": "부품 업그레이드:",
"create.blockzapper.component.body": "몸통",
"create.blockzapper.component.amplifier": "증폭기",
"create.blockzapper.component.accelerator": "가속기",
"create.blockzapper.component.retriever": "회수기",
"create.blockzapper.component.scope": "스코프",
"create.blockzapper.componentTier.none": "없음",
"create.blockzapper.componentTier.brass": "황동",
"create.blockzapper.componentTier.chromatic": "혼돈의 결정체",
"create.blockzapper.leftClickToSet": "좌클릭으로 블록 설정하기",
"create.blockzapper.empty": "블록이 없습니다!",
"create.terrainzapper.usingBlock": "UNLOCALIZED: Using: %1$s",
"create.terrainzapper.leftClickToSet": "UNLOCALIZED: Left-Click a Block to set Material",
"create.minecart_coupling.two_couplings_max": "광산 수레는 최대 2개의 커플링만 가질 수 있습니다",
"create.minecart_coupling.unloaded": "열차 일부분이 로딩되지 않은 청크에 있는 것 같습니다",
@ -1155,20 +1133,26 @@
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "슬라임이 철퍽거림",
"create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
"create.subtitle.blockzapper_confirm": "확인 효과음",
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
"create.subtitle.blockzapper_place": "블록이 순간이동됨",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.blaze_munch": "블레이즈가 행복하게 섭취함",
"create.subtitle.schematicannon_launch_block": "청사진 대포가 발포함",
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
"create.subtitle.schematicannon_finish": "청사진 대포가 끝남",
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
"create.subtitle.mechanical_press_activation": "압착기가 가동됨",
"create.subtitle.blockzapper_deny": "취소 효과음",
"create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.crafter_click": "UNLOCALIZED: Crafter clicks",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.depot_plop": "UNLOCALIZED: Item lands",
"create.subtitle.confirm": "UNLOCALIZED: Affirmative ding",
"_": "->------------------------] Item Descriptions [------------------------<-",
@ -1274,15 +1258,6 @@
"item.create.wand_of_symmetry.tooltip.control3": "웅크린 상태에서 우클릭",
"item.create.wand_of_symmetry.tooltip.action3": "_설정_ _창_을 엽니다.",
"item.create.handheld_blockzapper.tooltip": "BLOCKZAPPER",
"item.create.handheld_blockzapper.tooltip.summary": "멀리있는 블록을 교체, 설치하는 놀라운 도구입니다.",
"item.create.handheld_blockzapper.tooltip.control1": "블록을 보고 좌클릭",
"item.create.handheld_blockzapper.tooltip.action1": "이 도구로 설치할 블록을 설정합니다.",
"item.create.handheld_blockzapper.tooltip.control2": "블록을 보고 우클릭",
"item.create.handheld_blockzapper.tooltip.action2": "해당 위치에 설정된 블록으로 설치하거나 교체합니다.",
"item.create.handheld_blockzapper.tooltip.control3": "웅크린 상태에서 우클릭",
"item.create.handheld_blockzapper.tooltip.action3": "_설정_ _창_을 엽니다.",
"item.create.handheld_worldshaper.tooltip": "HANDHELD WORLDSHAPER",
"item.create.handheld_worldshaper.tooltip.summary": "_지형경관_을 만들 때 좋은 간편한 도구입니다.",
"item.create.handheld_worldshaper.tooltip.control1": "블록을 보고 좌클릭",
@ -1297,9 +1272,6 @@
"item.create.tree_fertilizer.tooltip.condition1": "묘목에 사용했을 때",
"item.create.tree_fertilizer.tooltip.behaviour1": "묘목을 주위 공간과 _상관없이_ 성장시킵니다.",
"item.create.deforester.tooltip": "DEFORESTER",
"item.create.deforester.tooltip.summary": "수 초 만에 나무를 쓰러뜨리는 _놀라운_ _도끼_입니다.",
"item.create.extendo_grip.tooltip": "EXTENDO GRIP",
"item.create.extendo_grip.tooltip.summary": "띠요오옹! 사용자의 _사거리_를 늘려줍니다.",
"item.create.extendo_grip.tooltip.condition1": "다른 손에 있을 때",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1561",
"_": "Missing Localizations: 1570",
"_": "->------------------------] Game Elements [------------------------<-",
@ -456,7 +456,6 @@
"item.create.crushed_tin_ore": "UNLOCALIZED: Crushed Tin Ore",
"item.create.crushed_uranium_ore": "UNLOCALIZED: Crushed Uranium Ore",
"item.create.crushed_zinc_ore": "UNLOCALIZED: Crushed Zinc Ore",
"item.create.deforester": "Ontbosser",
"item.create.dough": "Deeg",
"item.create.electron_tube": "UNLOCALIZED: Electron Tube",
"item.create.empty_blaze_burner": "UNLOCALIZED: Empty Blaze Burner",
@ -466,8 +465,7 @@
"item.create.furnace_minecart_contraption": "UNLOCALIZED: Furnace Minecart Contraption",
"item.create.goggles": "Ingenieur's Bril",
"item.create.golden_sheet": "UNLOCALIZED: Golden Sheet",
"item.create.handheld_blockzapper": "Blokzapper",
"item.create.handheld_worldshaper": "UNLOCALIZED: Handheld Worldshaper",
"item.create.handheld_worldshaper": "UNLOCALIZED: Creative Worldshaper",
"item.create.honey_bucket": "UNLOCALIZED: Honey Bucket",
"item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple",
"item.create.integrated_circuit": "UNLOCALIZED: Integrated Circuit",
@ -645,14 +643,8 @@
"advancement.create.refined_radiance.desc": "UNLOCALIZED: Create Refined Radiance, a powerful chromatic substance.",
"advancement.create.chromatic_age": "UNLOCALIZED: The Chromatic Age",
"advancement.create.chromatic_age.desc": "UNLOCALIZED: Create casing blocks of the light and dark.",
"advancement.create.zapper": "UNLOCALIZED: Building With Style",
"advancement.create.zapper.desc": "UNLOCALIZED: Craft a Blockzapper. A radiant laser gun that helps you build.",
"advancement.create.upgraded_zapper": "UNLOCALIZED: Radiant Overdrive",
"advancement.create.upgraded_zapper.desc": "UNLOCALIZED: Create and activate a fully upgraded Blockzapper.",
"advancement.create.wand_of_symmetry": "UNLOCALIZED: Radiant Mirrors",
"advancement.create.wand_of_symmetry.desc": "UNLOCALIZED: Craft a Staff of Symmetry.",
"advancement.create.deforester": "UNLOCALIZED: Radiant Chopping",
"advancement.create.deforester.desc": "UNLOCALIZED: Craft a Deforester, and say goodbye to the local forest.",
"advancement.create.extendo_grip": "UNLOCALIZED: Boioioing!",
"advancement.create.extendo_grip.desc": "UNLOCALIZED: Get hold of an Extendo Grip.",
"advancement.create.dual_extendo_grip": "UNLOCALIZED: Ultimate Boing-age",
@ -695,7 +687,6 @@
"create.recipe.automatic_shaped": "UNLOCALIZED: Automated Shaped Crafting",
"create.recipe.block_cutting": "Blok Zagen",
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
"create.recipe.blockzapper_upgrade": "Blokzapper",
"create.recipe.sandpaper_polishing": "UNLOCALIZED: Sandpaper Polishing",
"create.recipe.mystery_conversion": "UNLOCALIZED: Mysterious Conversion",
"create.recipe.spout_filling": "UNLOCALIZED: Filling by Spout",
@ -752,20 +743,16 @@
"create.orientation.alongZ": "Langs Z-as",
"create.orientation.alongX": "Langs X-as",
"create.gui.blockzapper.title": "Blokzapper",
"create.gui.blockzapper.replaceMode": "Vervang Modus",
"create.gui.blockzapper.searchDiagonal": "Volg Diagonalen",
"create.gui.blockzapper.searchFuzzy": "Negeer materiaal granzen",
"create.gui.blockzapper.range": "Verspreid bereik",
"create.gui.blockzapper.needsUpgradedAmplifier": "Benodigd een opgewaardeerde versterker",
"create.gui.blockzapper.patternSection": "Patronen",
"create.gui.blockzapper.pattern.solid": "Vast",
"create.gui.blockzapper.pattern.checkered": "Schaakbord",
"create.gui.blockzapper.pattern.inversecheckered": "Omgekeerd Schaakbord",
"create.gui.blockzapper.pattern.chance25": "25% Gedraaid",
"create.gui.blockzapper.pattern.chance50": "50% Gedraaid",
"create.gui.blockzapper.pattern.chance75": "75% Gedraaid",
"create.gui.terrainzapper.title": "UNLOCALIZED: Handheld Worldshaper",
"create.gui.terrainzapper.title": "UNLOCALIZED: Handheld Blockzapper",
"create.gui.terrainzapper.searchDiagonal": "UNLOCALIZED: Follow Diagonals",
"create.gui.terrainzapper.searchFuzzy": "UNLOCALIZED: Ignore Material Borders",
"create.gui.terrainzapper.patternSection": "UNLOCALIZED: Pattern",
"create.gui.terrainzapper.pattern.solid": "UNLOCALIZED: Solid",
"create.gui.terrainzapper.pattern.checkered": "UNLOCALIZED: Checkerboard",
"create.gui.terrainzapper.pattern.inversecheckered": "UNLOCALIZED: Inverted Checkerboard",
"create.gui.terrainzapper.pattern.chance25": "UNLOCALIZED: 25% Roll",
"create.gui.terrainzapper.pattern.chance50": "UNLOCALIZED: 50% Roll",
"create.gui.terrainzapper.pattern.chance75": "UNLOCALIZED: 75% Roll",
"create.gui.terrainzapper.placement": "UNLOCALIZED: Placement",
"create.gui.terrainzapper.placement.merged": "UNLOCALIZED: Merged",
"create.gui.terrainzapper.placement.attached": "UNLOCALIZED: Attached",
@ -774,6 +761,8 @@
"create.gui.terrainzapper.brush.cuboid": "UNLOCALIZED: Cuboid",
"create.gui.terrainzapper.brush.sphere": "UNLOCALIZED: Sphere",
"create.gui.terrainzapper.brush.cylinder": "UNLOCALIZED: Cylinder",
"create.gui.terrainzapper.brush.surface": "UNLOCALIZED: Surface",
"create.gui.terrainzapper.brush.cluster": "UNLOCALIZED: Cluster",
"create.gui.terrainzapper.tool": "UNLOCALIZED: Tool",
"create.gui.terrainzapper.tool.fill": "UNLOCALIZED: Fill",
"create.gui.terrainzapper.tool.place": "UNLOCALIZED: Place",
@ -783,19 +772,8 @@
"create.gui.terrainzapper.tool.flatten": "UNLOCALIZED: Flatten",
"create.terrainzapper.shiftRightClickToSet": "UNLOCALIZED: Shift-Right-Click to Select a Shape",
"create.blockzapper.usingBlock": "Gebruikt: %1$s",
"create.blockzapper.componentUpgrades": "Component Upgrades:",
"create.blockzapper.component.body": "Lichaam",
"create.blockzapper.component.amplifier": "Versterker",
"create.blockzapper.component.accelerator": "Accelerator",
"create.blockzapper.component.retriever": "Ontvanger",
"create.blockzapper.component.scope": "Omvang",
"create.blockzapper.componentTier.none": "Geen",
"create.blockzapper.componentTier.brass": "UNLOCALIZED: Brass",
"create.blockzapper.componentTier.chromatic": "UNLOCALIZED: Chromatic",
"create.blockzapper.leftClickToSet": "Klik met links op een Blok om een Materiaal te kiezen",
"create.blockzapper.empty": "De Blokken zijn op!",
"create.terrainzapper.usingBlock": "UNLOCALIZED: Using: %1$s",
"create.terrainzapper.leftClickToSet": "UNLOCALIZED: Left-Click a Block to set Material",
"create.minecart_coupling.two_couplings_max": "UNLOCALIZED: Minecarts cannot have more than two couplings each",
"create.minecart_coupling.unloaded": "UNLOCALIZED: Parts of your train seem to be in unloaded chunks",
@ -1155,20 +1133,26 @@
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "UNLOCALIZED: Slime squishes",
"create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
"create.subtitle.blockzapper_confirm": "UNLOCALIZED: Affirmative ding",
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
"create.subtitle.blockzapper_place": "UNLOCALIZED: Blockzapper zaps",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.blaze_munch": "UNLOCALIZED: Blaze Burner munches",
"create.subtitle.schematicannon_launch_block": "UNLOCALIZED: Schematicannon fires",
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
"create.subtitle.schematicannon_finish": "UNLOCALIZED: Schematicannon dings",
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
"create.subtitle.mechanical_press_activation": "UNLOCALIZED: Mechanical Press clangs",
"create.subtitle.blockzapper_deny": "UNLOCALIZED: Declining boop",
"create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.crafter_click": "UNLOCALIZED: Crafter clicks",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.depot_plop": "UNLOCALIZED: Item lands",
"create.subtitle.confirm": "UNLOCALIZED: Affirmative ding",
"_": "->------------------------] Item Descriptions [------------------------<-",
@ -1274,15 +1258,6 @@
"item.create.wand_of_symmetry.tooltip.control3": "R-Klik terwijl je Sluipt",
"item.create.wand_of_symmetry.tooltip.action3": "Opent de _Configuratie_ _Interface_",
"item.create.handheld_blockzapper.tooltip": "BLOKZAPPER",
"item.create.handheld_blockzapper.tooltip.summary": "Ongebruikelijke gadget voor het plaatsen en verwissel van blokken over een afstand",
"item.create.handheld_blockzapper.tooltip.control1": "L-Klik op een Blok",
"item.create.handheld_blockzapper.tooltip.action1": "Zet het doelwit blok om naar het geselecteerde blok.",
"item.create.handheld_blockzapper.tooltip.control2": "R-Klik op een Blok",
"item.create.handheld_blockzapper.tooltip.action2": "_Plaatst_ of _Vervangt_ het doelwit blok.",
"item.create.handheld_blockzapper.tooltip.control3": "R-Click while Sneaking",
"item.create.handheld_blockzapper.tooltip.action3": "Opent de _Configuratie_ _Interface_",
"item.create.handheld_worldshaper.tooltip": "UNLOCALIZED: HANDHELD WORLDSHAPER",
"item.create.handheld_worldshaper.tooltip.summary": "UNLOCALIZED: Handy tool for creating _landscapes_ and _terrain features_.",
"item.create.handheld_worldshaper.tooltip.control1": "UNLOCALIZED: L-Click at Block",
@ -1297,9 +1272,6 @@
"item.create.tree_fertilizer.tooltip.condition1": "Wanneer gebruikt op Kiemplanten",
"item.create.tree_fertilizer.tooltip.behaviour1": "Groeit bomen onafhankelijk van beschikbare ruimte",
"item.create.deforester.tooltip": "UNLOCALIZED: DEFORESTER",
"item.create.deforester.tooltip.summary": "UNLOCALIZED: A _radiant axe_ able to chop down trees in a split second.",
"item.create.extendo_grip.tooltip": "UNLOCALIZED: EXTENDO GRIP",
"item.create.extendo_grip.tooltip.summary": "UNLOCALIZED: Boioioing! Greatly _increases reach distance_ of the wielder.",
"item.create.extendo_grip.tooltip.condition1": "UNLOCALIZED: When in Off-Hand",

File diff suppressed because it is too large Load diff

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1615",
"_": "Missing Localizations: 1622",
"_": "->------------------------] Game Elements [------------------------<-",
@ -456,7 +456,6 @@
"item.create.crushed_tin_ore": "UNLOCALIZED: Crushed Tin Ore",
"item.create.crushed_uranium_ore": "UNLOCALIZED: Crushed Uranium Ore",
"item.create.crushed_zinc_ore": "UNLOCALIZED: Crushed Zinc Ore",
"item.create.deforester": "UNLOCALIZED: Deforester",
"item.create.dough": "Massa",
"item.create.electron_tube": "UNLOCALIZED: Electron Tube",
"item.create.empty_blaze_burner": "UNLOCALIZED: Empty Blaze Burner",
@ -466,8 +465,7 @@
"item.create.furnace_minecart_contraption": "UNLOCALIZED: Furnace Minecart Contraption",
"item.create.goggles": "UNLOCALIZED: Engineer's Goggles",
"item.create.golden_sheet": "UNLOCALIZED: Golden Sheet",
"item.create.handheld_blockzapper": "Blockzapper Portátil",
"item.create.handheld_worldshaper": "UNLOCALIZED: Handheld Worldshaper",
"item.create.handheld_worldshaper": "UNLOCALIZED: Creative Worldshaper",
"item.create.honey_bucket": "UNLOCALIZED: Honey Bucket",
"item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple",
"item.create.integrated_circuit": "UNLOCALIZED: Integrated Circuit",
@ -645,14 +643,8 @@
"advancement.create.refined_radiance.desc": "UNLOCALIZED: Create Refined Radiance, a powerful chromatic substance.",
"advancement.create.chromatic_age": "UNLOCALIZED: The Chromatic Age",
"advancement.create.chromatic_age.desc": "UNLOCALIZED: Create casing blocks of the light and dark.",
"advancement.create.zapper": "UNLOCALIZED: Building With Style",
"advancement.create.zapper.desc": "UNLOCALIZED: Craft a Blockzapper. A radiant laser gun that helps you build.",
"advancement.create.upgraded_zapper": "UNLOCALIZED: Radiant Overdrive",
"advancement.create.upgraded_zapper.desc": "UNLOCALIZED: Create and activate a fully upgraded Blockzapper.",
"advancement.create.wand_of_symmetry": "UNLOCALIZED: Radiant Mirrors",
"advancement.create.wand_of_symmetry.desc": "UNLOCALIZED: Craft a Staff of Symmetry.",
"advancement.create.deforester": "UNLOCALIZED: Radiant Chopping",
"advancement.create.deforester.desc": "UNLOCALIZED: Craft a Deforester, and say goodbye to the local forest.",
"advancement.create.extendo_grip": "UNLOCALIZED: Boioioing!",
"advancement.create.extendo_grip.desc": "UNLOCALIZED: Get hold of an Extendo Grip.",
"advancement.create.dual_extendo_grip": "UNLOCALIZED: Ultimate Boing-age",
@ -695,7 +687,6 @@
"create.recipe.automatic_shaped": "UNLOCALIZED: Automated Shaped Crafting",
"create.recipe.block_cutting": "UNLOCALIZED: Block Cutting",
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
"create.recipe.blockzapper_upgrade": "Blockzapper Portátil",
"create.recipe.sandpaper_polishing": "UNLOCALIZED: Sandpaper Polishing",
"create.recipe.mystery_conversion": "UNLOCALIZED: Mysterious Conversion",
"create.recipe.spout_filling": "UNLOCALIZED: Filling by Spout",
@ -752,20 +743,16 @@
"create.orientation.alongZ": "Através de Z",
"create.orientation.alongX": "Através de X",
"create.gui.blockzapper.title": "Blockzapper Portátil",
"create.gui.blockzapper.replaceMode": "Modo de Substituição",
"create.gui.blockzapper.searchDiagonal": "Seguir as Diagonais",
"create.gui.blockzapper.searchFuzzy": "Ignorar Material nas Bordas",
"create.gui.blockzapper.range": "Raio de Expansão",
"create.gui.blockzapper.needsUpgradedAmplifier": "UNLOCALIZED: Requires Upgraded Amplifier",
"create.gui.blockzapper.patternSection": "Padrões",
"create.gui.blockzapper.pattern.solid": "Sólido",
"create.gui.blockzapper.pattern.checkered": "Xadrez",
"create.gui.blockzapper.pattern.inversecheckered": "Xadrez invertido",
"create.gui.blockzapper.pattern.chance25": "25% de chance",
"create.gui.blockzapper.pattern.chance50": "50% de chance",
"create.gui.blockzapper.pattern.chance75": "75% de chance",
"create.gui.terrainzapper.title": "UNLOCALIZED: Handheld Worldshaper",
"create.gui.terrainzapper.title": "UNLOCALIZED: Handheld Blockzapper",
"create.gui.terrainzapper.searchDiagonal": "UNLOCALIZED: Follow Diagonals",
"create.gui.terrainzapper.searchFuzzy": "UNLOCALIZED: Ignore Material Borders",
"create.gui.terrainzapper.patternSection": "UNLOCALIZED: Pattern",
"create.gui.terrainzapper.pattern.solid": "UNLOCALIZED: Solid",
"create.gui.terrainzapper.pattern.checkered": "UNLOCALIZED: Checkerboard",
"create.gui.terrainzapper.pattern.inversecheckered": "UNLOCALIZED: Inverted Checkerboard",
"create.gui.terrainzapper.pattern.chance25": "UNLOCALIZED: 25% Roll",
"create.gui.terrainzapper.pattern.chance50": "UNLOCALIZED: 50% Roll",
"create.gui.terrainzapper.pattern.chance75": "UNLOCALIZED: 75% Roll",
"create.gui.terrainzapper.placement": "UNLOCALIZED: Placement",
"create.gui.terrainzapper.placement.merged": "UNLOCALIZED: Merged",
"create.gui.terrainzapper.placement.attached": "UNLOCALIZED: Attached",
@ -774,6 +761,8 @@
"create.gui.terrainzapper.brush.cuboid": "UNLOCALIZED: Cuboid",
"create.gui.terrainzapper.brush.sphere": "UNLOCALIZED: Sphere",
"create.gui.terrainzapper.brush.cylinder": "UNLOCALIZED: Cylinder",
"create.gui.terrainzapper.brush.surface": "UNLOCALIZED: Surface",
"create.gui.terrainzapper.brush.cluster": "UNLOCALIZED: Cluster",
"create.gui.terrainzapper.tool": "UNLOCALIZED: Tool",
"create.gui.terrainzapper.tool.fill": "UNLOCALIZED: Fill",
"create.gui.terrainzapper.tool.place": "UNLOCALIZED: Place",
@ -783,19 +772,8 @@
"create.gui.terrainzapper.tool.flatten": "UNLOCALIZED: Flatten",
"create.terrainzapper.shiftRightClickToSet": "UNLOCALIZED: Shift-Right-Click to Select a Shape",
"create.blockzapper.usingBlock": "Usando: %1$s",
"create.blockzapper.componentUpgrades": "Melhorias do Componente:",
"create.blockzapper.component.body": "Corpo",
"create.blockzapper.component.amplifier": "Amplificador",
"create.blockzapper.component.accelerator": "Acelerador",
"create.blockzapper.component.retriever": "Retornador",
"create.blockzapper.component.scope": "Mira",
"create.blockzapper.componentTier.none": "Nada",
"create.blockzapper.componentTier.brass": "UNLOCALIZED: Brass",
"create.blockzapper.componentTier.chromatic": "UNLOCALIZED: Chromatic",
"create.blockzapper.leftClickToSet": "Botão-Esquerdo em um Bloco para selecionar Material",
"create.blockzapper.empty": "Sem Blocos!",
"create.terrainzapper.usingBlock": "UNLOCALIZED: Using: %1$s",
"create.terrainzapper.leftClickToSet": "UNLOCALIZED: Left-Click a Block to set Material",
"create.minecart_coupling.two_couplings_max": "UNLOCALIZED: Minecarts cannot have more than two couplings each",
"create.minecart_coupling.unloaded": "UNLOCALIZED: Parts of your train seem to be in unloaded chunks",
@ -1155,20 +1133,26 @@
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "UNLOCALIZED: Slime squishes",
"create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
"create.subtitle.blockzapper_confirm": "UNLOCALIZED: Affirmative ding",
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
"create.subtitle.blockzapper_place": "UNLOCALIZED: Blockzapper zaps",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.blaze_munch": "UNLOCALIZED: Blaze Burner munches",
"create.subtitle.schematicannon_launch_block": "UNLOCALIZED: Schematicannon fires",
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
"create.subtitle.schematicannon_finish": "UNLOCALIZED: Schematicannon dings",
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
"create.subtitle.mechanical_press_activation": "UNLOCALIZED: Mechanical Press clangs",
"create.subtitle.blockzapper_deny": "UNLOCALIZED: Declining boop",
"create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.crafter_click": "UNLOCALIZED: Crafter clicks",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.depot_plop": "UNLOCALIZED: Item lands",
"create.subtitle.confirm": "UNLOCALIZED: Affirmative ding",
"_": "->------------------------] Item Descriptions [------------------------<-",
@ -1274,15 +1258,6 @@
"item.create.wand_of_symmetry.tooltip.control3": "B-Direito enquanto Abaixado",
"item.create.wand_of_symmetry.tooltip.action3": "Abre _Interface_ de _Configuração_",
"item.create.handheld_blockzapper.tooltip": "BLOCKZAPPER",
"item.create.handheld_blockzapper.tooltip.summary": "Gadget imaginário para colocar ou substituir blocos a distância.",
"item.create.handheld_blockzapper.tooltip.control1": "B-Esquerdo no Bloco",
"item.create.handheld_blockzapper.tooltip.action1": "Define os blocos colocados pela ferramenta no bloco de destino.",
"item.create.handheld_blockzapper.tooltip.control2": "B-Direito em Bloco",
"item.create.handheld_blockzapper.tooltip.action2": "_Coloca_ ou _Substitui_ o bloco alvo.",
"item.create.handheld_blockzapper.tooltip.control3": "B-Direito equando Abaixado",
"item.create.handheld_blockzapper.tooltip.action3": "Abre _Interface_ de _Configuração_",
"item.create.handheld_worldshaper.tooltip": "UNLOCALIZED: HANDHELD WORLDSHAPER",
"item.create.handheld_worldshaper.tooltip.summary": "UNLOCALIZED: Handy tool for creating _landscapes_ and _terrain features_.",
"item.create.handheld_worldshaper.tooltip.control1": "UNLOCALIZED: L-Click at Block",
@ -1297,9 +1272,6 @@
"item.create.tree_fertilizer.tooltip.condition1": "Quando usada em Mudas",
"item.create.tree_fertilizer.tooltip.behaviour1": "Cresce Arvores independentemente das suas Regras de espaço",
"item.create.deforester.tooltip": "UNLOCALIZED: DEFORESTER",
"item.create.deforester.tooltip.summary": "UNLOCALIZED: A _radiant axe_ able to chop down trees in a split second.",
"item.create.extendo_grip.tooltip": "UNLOCALIZED: EXTENDO GRIP",
"item.create.extendo_grip.tooltip.summary": "UNLOCALIZED: Boioioing! Greatly _increases reach distance_ of the wielder.",
"item.create.extendo_grip.tooltip.condition1": "UNLOCALIZED: When in Off-Hand",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 528",
"_": "Missing Localizations: 550",
"_": "->------------------------] Game Elements [------------------------<-",
@ -456,7 +456,6 @@
"item.create.crushed_tin_ore": "Дроблёная оловянная руда",
"item.create.crushed_uranium_ore": "Дроблёная урановая руда",
"item.create.crushed_zinc_ore": "Дроблёная цинковая руда",
"item.create.deforester": "Уничтожитель леса",
"item.create.dough": "Тесто",
"item.create.electron_tube": "Электронная лампа",
"item.create.empty_blaze_burner": "Пустая горелека Всполоха",
@ -466,7 +465,6 @@
"item.create.furnace_minecart_contraption": "Печно-вагонеточная штуковина",
"item.create.goggles": "Инженерные очки",
"item.create.golden_sheet": "Золотой лист",
"item.create.handheld_blockzapper": "Ручная блоковая пушка",
"item.create.handheld_worldshaper": "Ручной редактор мира",
"item.create.honey_bucket": "Ведро мёда",
"item.create.honeyed_apple": "Яблоко в меду",
@ -508,7 +506,7 @@
"advancement.create.shifting_gears": "Механизм переключения",
"advancement.create.shifting_gears.desc": "Подсоедините большую шестерню к шестерне, что позволит изменить скорость вращения.",
"advancement.create.overstressed": "Перегрузка",
"advancement.create.overstressed.desc": "Испытайте предельную перегрузку из первых рук.",
"advancement.create.overstressed.desc": "Столкнитесь с предельной перегрузкой лицом к лицу.",
"advancement.create.belt": "Передайте за проезд!",
"advancement.create.belt.desc": "Соедините два вала с помощью механического ремня.",
"advancement.create.tunnel": "В укрытие!",
@ -645,18 +643,12 @@
"advancement.create.refined_radiance.desc": "Создайте изысканное сияние, мощное хроматическое вещество.",
"advancement.create.chromatic_age": "Хроматический век",
"advancement.create.chromatic_age.desc": "Создайте блоки корпуса из света и тьмы.",
"advancement.create.zapper": "Строительство со стилем",
"advancement.create.zapper.desc": "Создайте ручную блоковую пушку, которая поможет вам строить.",
"advancement.create.upgraded_zapper": "Сияющий овердрайв",
"advancement.create.upgraded_zapper.desc": "Создайте и активируйте полностью модернизированную ручную блоковую пушку.",
"advancement.create.wand_of_symmetry": "Сияющие зеркала",
"advancement.create.wand_of_symmetry.desc": "Создайте жезл симметрии.",
"advancement.create.deforester": "Лучистая рубка",
"advancement.create.deforester.desc": "Создайте уничтожитель леса и попрощайтесь с местным лесом.",
"advancement.create.extendo_grip": "Кипение!",
"advancement.create.extendo_grip.desc": "Возьмите в руки удлинённую руку",
"advancement.create.dual_extendo_grip": "Окончательное выкипание",
"advancement.create.dual_extendo_grip.desc": "Две удлинённой руки для сверхчеловеческого охвата.",
"advancement.create.dual_extendo_grip.desc": "Две удлинённых руки для сверхчеловеческого охвата.",
"advancement.create.eob": "Конец бета-версии",
"advancement.create.eob.desc": "Ожидайте больше контента здесь в будущем. <3",
@ -695,7 +687,6 @@
"create.recipe.automatic_shaped": "Автоматическая форменная сборка",
"create.recipe.block_cutting": "Резка блока",
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
"create.recipe.blockzapper_upgrade": "Ручная блоковая пушка",
"create.recipe.sandpaper_polishing": "Полировка наждачной бумагой",
"create.recipe.mystery_conversion": "Хроматический метаморфоз",
"create.recipe.spout_filling": "Заполнение дозатором",
@ -752,20 +743,16 @@
"create.orientation.alongZ": "Вдоль Z",
"create.orientation.alongX": "Вдоль X",
"create.gui.blockzapper.title": "Ручная блоковая пушка",
"create.gui.blockzapper.replaceMode": "Режим замены",
"create.gui.blockzapper.searchDiagonal": "Следовать по диагонали",
"create.gui.blockzapper.searchFuzzy": "Игнорировать границы материала",
"create.gui.blockzapper.range": "Диапазон распространения",
"create.gui.blockzapper.needsUpgradedAmplifier": "Требуется модернизированный усилитель",
"create.gui.blockzapper.patternSection": "Шаблон",
"create.gui.blockzapper.pattern.solid": "Всё",
"create.gui.blockzapper.pattern.checkered": "Шахматная доска",
"create.gui.blockzapper.pattern.inversecheckered": "Перевернутая шахматная доска",
"create.gui.blockzapper.pattern.chance25": "25% крен",
"create.gui.blockzapper.pattern.chance50": "50% крен",
"create.gui.blockzapper.pattern.chance75": "75% крен",
"create.gui.terrainzapper.title": "Ручной редактор мира",
"create.gui.terrainzapper.searchDiagonal": "UNLOCALIZED: Follow Diagonals",
"create.gui.terrainzapper.searchFuzzy": "UNLOCALIZED: Ignore Material Borders",
"create.gui.terrainzapper.patternSection": "UNLOCALIZED: Pattern",
"create.gui.terrainzapper.pattern.solid": "UNLOCALIZED: Solid",
"create.gui.terrainzapper.pattern.checkered": "UNLOCALIZED: Checkerboard",
"create.gui.terrainzapper.pattern.inversecheckered": "UNLOCALIZED: Inverted Checkerboard",
"create.gui.terrainzapper.pattern.chance25": "UNLOCALIZED: 25% Roll",
"create.gui.terrainzapper.pattern.chance50": "UNLOCALIZED: 50% Roll",
"create.gui.terrainzapper.pattern.chance75": "UNLOCALIZED: 75% Roll",
"create.gui.terrainzapper.placement": "Размещение",
"create.gui.terrainzapper.placement.merged": "Слитый",
"create.gui.terrainzapper.placement.attached": "Прикреплённый",
@ -774,6 +761,8 @@
"create.gui.terrainzapper.brush.cuboid": "Куб",
"create.gui.terrainzapper.brush.sphere": "Сфера",
"create.gui.terrainzapper.brush.cylinder": "Цилиндр",
"create.gui.terrainzapper.brush.surface": "UNLOCALIZED: Surface",
"create.gui.terrainzapper.brush.cluster": "UNLOCALIZED: Cluster",
"create.gui.terrainzapper.tool": "Инструмент",
"create.gui.terrainzapper.tool.fill": "Заполнить",
"create.gui.terrainzapper.tool.place": "Поставить",
@ -783,19 +772,8 @@
"create.gui.terrainzapper.tool.flatten": "Выравнивание",
"create.terrainzapper.shiftRightClickToSet": "ПКМ крадучись, чтобы выбрать форму",
"create.blockzapper.usingBlock": "С помощью: %1$s",
"create.blockzapper.componentUpgrades": "Обновления компонентов:",
"create.blockzapper.component.body": "Корпус",
"create.blockzapper.component.amplifier": "Усилитель",
"create.blockzapper.component.accelerator": "Ускоритель",
"create.blockzapper.component.retriever": "Поисковик",
"create.blockzapper.component.scope": "Объем",
"create.blockzapper.componentTier.none": "Нет",
"create.blockzapper.componentTier.brass": "Латунный",
"create.blockzapper.componentTier.chromatic": "Хроматический",
"create.blockzapper.leftClickToSet": "Щелкните ЛКМ по блоку, чтобы выбрать материал",
"create.blockzapper.empty": "Вне блоков!",
"create.terrainzapper.usingBlock": "UNLOCALIZED: Using: %1$s",
"create.terrainzapper.leftClickToSet": "UNLOCALIZED: Left-Click a Block to set Material",
"create.minecart_coupling.two_couplings_max": "Вагонетки могут иметь только две связи",
"create.minecart_coupling.unloaded": "Кажется, часть вашего поезда в незагруженных чанках",
@ -1155,20 +1133,26 @@
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "Намазывание слизи",
"create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
"create.subtitle.blockzapper_confirm": "Утвердительный динь",
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
"create.subtitle.blockzapper_place": "Блок запрыгивает на место",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.blaze_munch": "Всполох радостно жуёт",
"create.subtitle.schematicannon_launch_block": "Выстрелы схематичной пушки",
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
"create.subtitle.schematicannon_finish": "Схематичная пушка закончила работу",
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
"create.subtitle.mechanical_press_activation": "Механический пресс активирован",
"create.subtitle.blockzapper_deny": "Тихий буп",
"create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.crafter_click": "UNLOCALIZED: Crafter clicks",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.depot_plop": "UNLOCALIZED: Item lands",
"create.subtitle.confirm": "UNLOCALIZED: Affirmative ding",
"_": "->------------------------] Item Descriptions [------------------------<-",
@ -1274,15 +1258,6 @@
"item.create.wand_of_symmetry.tooltip.control3": "ПКМ крадучись",
"item.create.wand_of_symmetry.tooltip.action3": "Открывает _интерфейс_ _конфигурации_",
"item.create.handheld_blockzapper.tooltip": "BLOCKZAPPER",
"item.create.handheld_blockzapper.tooltip.summary": "Новейшее устройство для размещения или замены блоков на расстоянии.",
"item.create.handheld_blockzapper.tooltip.control1": "ЛКМ на блок",
"item.create.handheld_blockzapper.tooltip.action1": "Устанавливает выбранный блок как материал.",
"item.create.handheld_blockzapper.tooltip.control2": "ПКМ на блок",
"item.create.handheld_blockzapper.tooltip.action2": "_Размещает_ или _Замещает_ блок.",
"item.create.handheld_blockzapper.tooltip.control3": "ПКМ крадучись",
"item.create.handheld_blockzapper.tooltip.action3": "Открывает _интерфейс_ _конфигурации_",
"item.create.handheld_worldshaper.tooltip": "HANDHELD WORLDSHAPER",
"item.create.handheld_worldshaper.tooltip.summary": "Удобный инструмент для создания _ландшафтов_ и _рельефа_ _местности_.",
"item.create.handheld_worldshaper.tooltip.control1": "ЛКМ на блок",
@ -1297,9 +1272,6 @@
"item.create.tree_fertilizer.tooltip.condition1": "При использовании на саженце",
"item.create.tree_fertilizer.tooltip.behaviour1": "Выращивает деревья,_независимо_ от _условий_ _их_ _расположения_",
"item.create.deforester.tooltip": "DEFORESTER",
"item.create.deforester.tooltip.summary": "_Уничтожитель_ _леса_, способен рубить деревья за доли секунды.",
"item.create.extendo_grip.tooltip": "EXTENDO GRIP",
"item.create.extendo_grip.tooltip.summary": "Бойоиоинг! Значительно _увеличивает_ _досягаемость_ владельца.",
"item.create.extendo_grip.tooltip.condition1": "Находясь в другой руке",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 633",
"_": "Missing Localizations: 655",
"_": "->------------------------] Game Elements [------------------------<-",
@ -456,7 +456,6 @@
"item.create.crushed_tin_ore": "碎狀錫礦石",
"item.create.crushed_uranium_ore": "碎狀鈾礦石",
"item.create.crushed_zinc_ore": "碎狀鋅礦石",
"item.create.deforester": "連根拔樹斧",
"item.create.dough": "麵團",
"item.create.electron_tube": "真空管",
"item.create.empty_blaze_burner": "空的烈焰使者動力爐",
@ -466,7 +465,6 @@
"item.create.furnace_minecart_contraption": "裝配過的機械礦車",
"item.create.goggles": "MR護目鏡",
"item.create.golden_sheet": "金板",
"item.create.handheld_blockzapper": "方塊放置器",
"item.create.handheld_worldshaper": "地形雕塑器",
"item.create.honey_bucket": "蜂蜜桶",
"item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple",
@ -645,14 +643,8 @@
"advancement.create.refined_radiance.desc": "製作光輝石",
"advancement.create.chromatic_age": "繽紛時代",
"advancement.create.chromatic_age.desc": "創造出光與影的機殼。",
"advancement.create.zapper": "專業的建築師",
"advancement.create.zapper.desc": "製作一個非常方便的方塊放置器",
"advancement.create.upgraded_zapper": "來自異世界的超頻",
"advancement.create.upgraded_zapper.desc": "製作一個完全升級的方塊放置器",
"advancement.create.wand_of_symmetry": "簡單的鏡面幾何學",
"advancement.create.wand_of_symmetry.desc": "製作一個對稱杖",
"advancement.create.deforester": "超時空砍伐",
"advancement.create.deforester.desc": "製作一個連根拔樹斧,然後跟你後院的樹林道別吧",
"advancement.create.extendo_grip": "piu piu piu!",
"advancement.create.extendo_grip.desc": "拿到一個伸縮機械手",
"advancement.create.dual_extendo_grip": "piu——piu——piu——",
@ -695,7 +687,6 @@
"create.recipe.automatic_shaped": "自動合成",
"create.recipe.block_cutting": "方塊切割",
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
"create.recipe.blockzapper_upgrade": "方塊放置器",
"create.recipe.sandpaper_polishing": "砂紙打磨",
"create.recipe.mystery_conversion": "神秘轉化",
"create.recipe.spout_filling": "注液",
@ -752,20 +743,16 @@
"create.orientation.alongZ": "以z軸對齊",
"create.orientation.alongX": "以x軸對齊",
"create.gui.blockzapper.title": "方塊放置機",
"create.gui.blockzapper.replaceMode": "替換模式",
"create.gui.blockzapper.searchDiagonal": "對角線延伸",
"create.gui.blockzapper.searchFuzzy": "忽視種類分界",
"create.gui.blockzapper.range": "延伸範圍",
"create.gui.blockzapper.needsUpgradedAmplifier": "需要升級範圍擴大器",
"create.gui.blockzapper.patternSection": "模式",
"create.gui.blockzapper.pattern.solid": "實心",
"create.gui.blockzapper.pattern.checkered": "棋盤",
"create.gui.blockzapper.pattern.inversecheckered": "反轉棋盤",
"create.gui.blockzapper.pattern.chance25": "25% ",
"create.gui.blockzapper.pattern.chance50": "50% ",
"create.gui.blockzapper.pattern.chance75": "75% ",
"create.gui.terrainzapper.title": "地形雕塑器",
"create.gui.terrainzapper.searchDiagonal": "UNLOCALIZED: Follow Diagonals",
"create.gui.terrainzapper.searchFuzzy": "UNLOCALIZED: Ignore Material Borders",
"create.gui.terrainzapper.patternSection": "UNLOCALIZED: Pattern",
"create.gui.terrainzapper.pattern.solid": "UNLOCALIZED: Solid",
"create.gui.terrainzapper.pattern.checkered": "UNLOCALIZED: Checkerboard",
"create.gui.terrainzapper.pattern.inversecheckered": "UNLOCALIZED: Inverted Checkerboard",
"create.gui.terrainzapper.pattern.chance25": "UNLOCALIZED: 25% Roll",
"create.gui.terrainzapper.pattern.chance50": "UNLOCALIZED: 50% Roll",
"create.gui.terrainzapper.pattern.chance75": "UNLOCALIZED: 75% Roll",
"create.gui.terrainzapper.placement": "放置模式",
"create.gui.terrainzapper.placement.merged": "結合",
"create.gui.terrainzapper.placement.attached": "依附",
@ -774,6 +761,8 @@
"create.gui.terrainzapper.brush.cuboid": "矩形體",
"create.gui.terrainzapper.brush.sphere": "球體",
"create.gui.terrainzapper.brush.cylinder": "圓柱體",
"create.gui.terrainzapper.brush.surface": "UNLOCALIZED: Surface",
"create.gui.terrainzapper.brush.cluster": "UNLOCALIZED: Cluster",
"create.gui.terrainzapper.tool": "填充類型",
"create.gui.terrainzapper.tool.fill": "填充",
"create.gui.terrainzapper.tool.place": "覆寫",
@ -783,19 +772,8 @@
"create.gui.terrainzapper.tool.flatten": "平整",
"create.terrainzapper.shiftRightClickToSet": "Shift+滑鼠右鍵 以設定雕塑類型",
"create.blockzapper.usingBlock": "使用:%1$s",
"create.blockzapper.componentUpgrades": "零件升級:",
"create.blockzapper.component.body": "放置器機體",
"create.blockzapper.component.amplifier": "範圍擴大器",
"create.blockzapper.component.accelerator": "射擊加速器",
"create.blockzapper.component.retriever": "物品撿回器",
"create.blockzapper.component.scope": "距離觀察鏡",
"create.blockzapper.componentTier.none": "無",
"create.blockzapper.componentTier.brass": "黃銅",
"create.blockzapper.componentTier.chromatic": "異彩化合物",
"create.blockzapper.leftClickToSet": "左鍵點擊方塊以設定方塊種類",
"create.blockzapper.empty": "方塊不足!",
"create.terrainzapper.usingBlock": "UNLOCALIZED: Using: %1$s",
"create.terrainzapper.leftClickToSet": "UNLOCALIZED: Left-Click a Block to set Material",
"create.minecart_coupling.two_couplings_max": "礦車無法被連接兩個以上的礦車連結器",
"create.minecart_coupling.unloaded": "有一部份礦車存在於未讀取區塊中",
@ -1155,20 +1133,26 @@
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "黏液擠壓",
"create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
"create.subtitle.blockzapper_confirm": "選擇方塊",
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
"create.subtitle.blockzapper_place": "放置方塊",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.blaze_munch": "烈焰使者開心地吃著",
"create.subtitle.schematicannon_launch_block": "藍圖大炮發射",
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
"create.subtitle.schematicannon_finish": "藍圖大炮完成任務",
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
"create.subtitle.mechanical_press_activation": "液壓機工作",
"create.subtitle.blockzapper_deny": "放置失敗",
"create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.crafter_click": "UNLOCALIZED: Crafter clicks",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.depot_plop": "UNLOCALIZED: Item lands",
"create.subtitle.confirm": "UNLOCALIZED: Affirmative ding",
"_": "->------------------------] Item Descriptions [------------------------<-",
@ -1274,15 +1258,6 @@
"item.create.wand_of_symmetry.tooltip.control3": "當潛行右鍵時",
"item.create.wand_of_symmetry.tooltip.action3": "打開_gui界面_",
"item.create.handheld_blockzapper.tooltip": "方塊放置器",
"item.create.handheld_blockzapper.tooltip.summary": "新穎的小工具,可以遠距離放置或更換方塊。",
"item.create.handheld_blockzapper.tooltip.control1": "當左鍵方塊時",
"item.create.handheld_blockzapper.tooltip.action1": "設定放置此方塊。",
"item.create.handheld_blockzapper.tooltip.control2": "當右鍵方塊時",
"item.create.handheld_blockzapper.tooltip.action2": "_放置_或_替換_目標方塊。",
"item.create.handheld_blockzapper.tooltip.control3": "當潛行右鍵時",
"item.create.handheld_blockzapper.tooltip.action3": "打開_gui界面_",
"item.create.handheld_worldshaper.tooltip": "環境塑形器",
"item.create.handheld_worldshaper.tooltip.summary": "_大面積_更改地形的手持工具",
"item.create.handheld_worldshaper.tooltip.control1": "當左鍵方塊時",
@ -1297,9 +1272,6 @@
"item.create.tree_fertilizer.tooltip.condition1": "在樹苗上使用時",
"item.create.tree_fertilizer.tooltip.behaviour1": "無論_生長時間_多少直接長大",
"item.create.deforester.tooltip": "連根拔樹斧",
"item.create.deforester.tooltip.summary": "_連根拔樹斧_從最根砍樹時能夠瞬間連根拔起一棵樹",
"item.create.extendo_grip.tooltip": "伸縮機械手",
"item.create.extendo_grip.tooltip.summary": "biubiubiu! 大幅度_增加了_使用者的_觸碰距離_。",
"item.create.extendo_grip.tooltip.condition1": "放置於副手欄時",

View file

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

View file

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

View file

@ -8,38 +8,72 @@
],
"subtitle": "create.subtitle.blaze_munch"
},
"blockzapper_confirm": {
"cogs": {
"sounds": [
"create:cogs"
],
"subtitle": "create.subtitle.cogs"
},
"confirm": {
"sounds": [
{
"name": "minecraft:block.note_block.bell",
"type": "event"
}
],
"subtitle": "create.subtitle.blockzapper_confirm"
"subtitle": "create.subtitle.confirm"
},
"blockzapper_deny": {
"contraption_assemble": {
"sounds": [
{
"name": "minecraft:block.note_block.bass",
"name": "minecraft:block.wooden_trapdoor.open",
"type": "event"
}
],
"subtitle": "create.subtitle.blockzapper_deny"
"subtitle": "create.subtitle.contraption_assemble"
},
"blockzapper_place": {
"contraption_assemble_compounded_1": {
"sounds": [
{
"name": "minecraft:block.note_block.basedrum",
"name": "minecraft:block.chest.open",
"type": "event"
}
]
},
"contraption_disassemble": {
"sounds": [
{
"name": "minecraft:block.iron_trapdoor.close",
"type": "event"
}
],
"subtitle": "create.subtitle.blockzapper_place"
"subtitle": "create.subtitle.contraption_disassemble"
},
"cogs": {
"crafter_click": {
"sounds": [
"create:cogs"
{
"name": "minecraft:block.netherite_block.hit",
"type": "event"
}
],
"subtitle": "create.subtitle.cogs"
"subtitle": "create.subtitle.crafter_click"
},
"crafter_click_compounded_1": {
"sounds": [
{
"name": "minecraft:block.wooden_trapdoor.open",
"type": "event"
}
]
},
"crafter_craft": {
"sounds": [
{
"name": "minecraft:entity.item.break",
"type": "event"
}
],
"subtitle": "create.subtitle.crafter_craft"
},
"cranking": {
"sounds": [
@ -58,6 +92,15 @@
}
]
},
"deny": {
"sounds": [
{
"name": "minecraft:block.note_block.bass",
"type": "event"
}
],
"subtitle": "create.subtitle.deny"
},
"depot_plop": {
"sounds": [
{
@ -179,5 +222,40 @@
}
],
"subtitle": "create.subtitle.slime_added"
},
"worldshaper_place": {
"sounds": [
{
"name": "minecraft:block.note_block.basedrum",
"type": "event"
}
],
"subtitle": "create.subtitle.worldshaper_place"
},
"wrench_remove": {
"sounds": [
{
"name": "minecraft:entity.item.pickup",
"type": "event"
}
],
"subtitle": "create.subtitle.wrench_remove"
},
"wrench_remove_compounded_1": {
"sounds": [
{
"name": "minecraft:block.netherite_block.hit",
"type": "event"
}
]
},
"wrench_rotate": {
"sounds": [
{
"name": "minecraft:block.wooden_trapdoor.close",
"type": "event"
}
],
"subtitle": "create.subtitle.wrench_rotate"
}
}

View file

@ -1,36 +0,0 @@
{
"parent": "create:refined_radiance",
"display": {
"icon": {
"item": "create:deforester",
"nbt": "{Damage:0}"
},
"title": {
"translate": "advancement.create.deforester"
},
"description": {
"translate": "advancement.create.deforester.desc"
},
"frame": "task",
"show_toast": true,
"announce_to_chat": false,
"hidden": false
},
"criteria": {
"0": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "create:deforester"
}
]
}
}
},
"requirements": [
[
"0"
]
]
}

View file

@ -1,32 +0,0 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"create:crafting/curiosities/deforester"
]
},
"criteria": {
"has_item": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "create:refined_radiance"
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "create:crafting/curiosities/deforester"
}
}
},
"requirements": [
[
"has_item",
"has_the_recipe"
]
]
}

View file

@ -1,32 +0,0 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"create:crafting/curiosities/handheld_blockzapper"
]
},
"criteria": {
"has_item": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "create:refined_radiance"
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "create:crafting/curiosities/handheld_blockzapper"
}
}
},
"requirements": [
[
"has_item",
"has_the_recipe"
]
]
}

View file

@ -1,30 +0,0 @@
{
"parent": "create:zapper",
"display": {
"icon": {
"item": "create:handheld_blockzapper",
"nbt": "{Retriever:\"Chromatic\",Scope:\"Chromatic\",Amplifier:\"Chromatic\",Body:\"Chromatic\",Accelerator:\"Chromatic\"}"
},
"title": {
"translate": "advancement.create.upgraded_zapper"
},
"description": {
"translate": "advancement.create.upgraded_zapper.desc"
},
"frame": "challenge",
"show_toast": true,
"announce_to_chat": true,
"hidden": false
},
"criteria": {
"0": {
"trigger": "create:upgraded_zapper",
"conditions": {}
}
},
"requirements": [
[
"0"
]
]
}

View file

@ -1,35 +0,0 @@
{
"parent": "create:refined_radiance",
"display": {
"icon": {
"item": "create:handheld_blockzapper"
},
"title": {
"translate": "advancement.create.zapper"
},
"description": {
"translate": "advancement.create.zapper.desc"
},
"frame": "task",
"show_toast": true,
"announce_to_chat": false,
"hidden": false
},
"criteria": {
"0": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "create:handheld_blockzapper"
}
]
}
}
},
"requirements": [
[
"0"
]
]
}

View file

@ -1,22 +0,0 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"EG",
"EO",
" O"
],
"key": {
"E": {
"item": "create:refined_radiance"
},
"G": {
"item": "create:cogwheel"
},
"O": {
"tag": "forge:obsidian"
}
},
"result": {
"item": "create:deforester"
}
}

View file

@ -1,22 +0,0 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
" E",
" O ",
"OA "
],
"key": {
"E": {
"item": "create:refined_radiance"
},
"A": {
"item": "create:andesite_alloy"
},
"O": {
"tag": "forge:obsidian"
}
},
"result": {
"item": "create:handheld_blockzapper"
}
}

View file

@ -1,38 +1,20 @@
package com.simibubi.create;
import static net.minecraft.state.properties.BlockStateProperties.FACING;
import static net.minecraft.state.properties.BlockStateProperties.HORIZONTAL_FACING;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Supplier;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.content.contraptions.fluids.FluidTransportBehaviour.AttachmentTypes;
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock.HeatLevel;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
import com.simibubi.create.foundation.render.backend.instancing.RenderMaterial;
import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.content.contraptions.fluids.FluidTransportBehaviour;
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock;
import com.simibubi.create.foundation.render.backend.core.PartialModel;
import com.simibubi.create.foundation.utility.Iterate;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.MatrixStacker;
import net.minecraft.block.BlockState;
import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.util.Direction;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.event.ModelBakeEvent;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.client.model.ModelLoader;
public class AllBlockPartials {
private static final List<AllBlockPartials> all = new ArrayList<>();
public static final AllBlockPartials SCHEMATICANNON_CONNECTOR = get("schematicannon/connector"),
public static final PartialModel SCHEMATICANNON_CONNECTOR = get("schematicannon/connector"),
SCHEMATICANNON_PIPE = get("schematicannon/pipe"),
SHAFTLESS_COGWHEEL = get("cogwheel_shaftless"), SHAFT_HALF = get("shaft_half"),
@ -123,124 +105,40 @@ public class AllBlockPartials {
;
public static final Map<AttachmentTypes, Map<Direction, AllBlockPartials>> PIPE_ATTACHMENTS = map();
public static final Map<HeatLevel, AllBlockPartials> BLAZES = map();
public static final Map<FluidTransportBehaviour.AttachmentTypes, Map<Direction, PartialModel>> PIPE_ATTACHMENTS = new HashMap<>();
public static final Map<BlazeBurnerBlock.HeatLevel, PartialModel> BLAZES = new HashMap<>();
static {
populateMaps();
}
;
private ResourceLocation modelLocation;
private IBakedModel bakedModel;
private AllBlockPartials() {}
private static void populateMaps() {
for (AttachmentTypes type : AttachmentTypes.values()) {
static void populateMaps() {
for (FluidTransportBehaviour.AttachmentTypes type : FluidTransportBehaviour.AttachmentTypes.values()) {
if (!type.hasModel())
continue;
Map<Direction, AllBlockPartials> map = map();
Map<Direction, PartialModel> map = new HashMap<>();
for (Direction d : Iterate.directions) {
String asId = Lang.asId(type.name());
map.put(d, get("fluid_pipe/" + asId + "/" + Lang.asId(d.getString())));
}
PIPE_ATTACHMENTS.put(type, map);
}
for (HeatLevel heat : HeatLevel.values()) {
if (heat == HeatLevel.NONE)
for (BlazeBurnerBlock.HeatLevel heat : BlazeBurnerBlock.HeatLevel.values()) {
if (heat == BlazeBurnerBlock.HeatLevel.NONE)
continue;
BLAZES.put(heat, get("blaze_burner/blaze/" + heat.getString()));
}
}
private static <T, U> Map<T, U> map() {
return new HashMap<>();
private static PartialModel getEntity(String path) {
return new PartialModel(new ResourceLocation(Create.ID, "entity/" + path));
}
private static AllBlockPartials getEntity(String path) {
AllBlockPartials partials = new AllBlockPartials();
partials.modelLocation = new ResourceLocation(Create.ID, "entity/" + path);
all.add(partials);
return partials;
private static PartialModel get(String path) {
return new PartialModel(new ResourceLocation(Create.ID, "block/" + path));
}
private static AllBlockPartials get(String path) {
AllBlockPartials partials = new AllBlockPartials();
partials.modelLocation = new ResourceLocation(Create.ID, "block/" + path);
all.add(partials);
return partials;
public static void clientInit() {
// init static fields
}
public static void onModelRegistry(ModelRegistryEvent event) {
for (AllBlockPartials partial : all)
ModelLoader.addSpecialModel(partial.modelLocation);
}
public static void onModelBake(ModelBakeEvent event) {
Map<ResourceLocation, IBakedModel> modelRegistry = event.getModelRegistry();
for (AllBlockPartials partial : all)
partial.bakedModel = modelRegistry.get(partial.modelLocation);
}
public IBakedModel get() {
return bakedModel;
}
public SuperByteBuffer renderOn(BlockState referenceState) {
return CreateClient.bufferCache.renderPartial(this, referenceState);
}
public SuperByteBuffer renderOnDirectionalSouth(BlockState referenceState) {
Direction facing = referenceState.get(FACING);
return renderOnDirectionalSouth(referenceState, facing);
}
public SuperByteBuffer renderOnDirectional(BlockState referenceState) {
Direction facing = referenceState.get(FACING);
return renderOnDirectional(referenceState, facing);
}
public SuperByteBuffer renderOnHorizontal(BlockState referenceState) {
Direction facing = referenceState.get(HORIZONTAL_FACING);
return renderOnDirectionalSouth(referenceState, facing);
}
public SuperByteBuffer renderOnDirectionalSouth(BlockState referenceState, Direction facing) {
MatrixStack ms = new MatrixStack();
// TODO 1.15 find a way to cache this model matrix computation
MatrixStacker.of(ms)
.centre()
.rotateY(AngleHelper.horizontalAngle(facing))
.rotateX(AngleHelper.verticalAngle(facing))
.unCentre();
return CreateClient.bufferCache.renderDirectionalPartial(this, referenceState, facing, ms);
}
public SuperByteBuffer renderOnDirectional(BlockState referenceState, Direction facing) {
MatrixStack ms = new MatrixStack();
// TODO 1.15 find a way to cache this model matrix computation
MatrixStacker.of(ms)
.centre()
.rotateY(AngleHelper.horizontalAngle(facing))
.rotateX(facing == Direction.UP ? 0 : facing == Direction.DOWN ? 180 : 90)
.unCentre();
return CreateClient.bufferCache.renderDirectionalPartial(this, referenceState, facing, ms);
}
public <M extends InstancedModel<?>> M getModel(RenderMaterial<?, M> mat, BlockState referenceState,
Direction facing) {
Supplier<MatrixStack> ms = () -> {
MatrixStack stack = new MatrixStack();
MatrixStacker.of(stack)
.centre()
.rotateY(AngleHelper.horizontalAngle(facing))
.rotateX(AngleHelper.verticalAngle(facing))
.unCentre();
return stack;
};
return mat.getModel(this, referenceState, facing, ms);
}
}

View file

@ -179,6 +179,7 @@ import net.minecraft.client.renderer.RenderType;
import net.minecraft.data.ShapedRecipeBuilder;
import net.minecraft.item.DyeColor;
import net.minecraft.item.Item;
import net.minecraft.item.Rarity;
import net.minecraft.state.properties.PistonType;
import net.minecraft.tags.BlockTags;
import net.minecraft.tags.ItemTags;
@ -336,6 +337,7 @@ public class AllBlocks {
.blockstate(new CreativeMotorGenerator()::generate)
.transform(StressConfigDefaults.setCapacity(16384.0))
.item()
.properties(p -> p.rarity(Rarity.EPIC))
.transform(customItemModel())
.register();
@ -644,6 +646,7 @@ public class AllBlocks {
.onRegister(CreateRegistrate.blockModel(() -> FluidTankModel::creative))
.addLayer(() -> RenderType::getCutoutMipped)
.item(FluidTankItem::new)
.properties(p -> p.rarity(Rarity.EPIC))
.model((c, p) -> p.withExistingParent(c.getName(), p.modLoc("block/fluid_tank/block_single_window"))
.texture("5", p.modLoc("block/creative_fluid_tank_window_single"))
.texture("1", p.modLoc("block/creative_fluid_tank"))

View file

@ -1,10 +1,10 @@
package com.simibubi.create;
import static com.simibubi.create.AllTags.forgeItemTag;
import static com.simibubi.create.AllTags.AllItemTags.CREATE_INGOTS;
import static com.simibubi.create.AllTags.AllItemTags.CRUSHED_ORES;
import static com.simibubi.create.AllTags.AllItemTags.NUGGETS;
import static com.simibubi.create.AllTags.AllItemTags.PLATES;
import static com.simibubi.create.AllTags.forgeItemTag;
import static com.simibubi.create.content.AllSections.CURIOSITIES;
import static com.simibubi.create.content.AllSections.KINETICS;
import static com.simibubi.create.content.AllSections.LOGISTICS;
@ -31,14 +31,10 @@ import com.simibubi.create.content.curiosities.ShadowSteelItem;
import com.simibubi.create.content.curiosities.TreeFertilizerItem;
import com.simibubi.create.content.curiosities.symmetry.SymmetryWandItem;
import com.simibubi.create.content.curiosities.symmetry.client.SymmetryWandModel;
import com.simibubi.create.content.curiosities.tools.DeforesterItem;
import com.simibubi.create.content.curiosities.tools.DeforesterModel;
import com.simibubi.create.content.curiosities.tools.ExtendoGripItem;
import com.simibubi.create.content.curiosities.tools.ExtendoGripModel;
import com.simibubi.create.content.curiosities.tools.SandPaperItem;
import com.simibubi.create.content.curiosities.tools.SandPaperItemRenderer.SandPaperModel;
import com.simibubi.create.content.curiosities.zapper.blockzapper.BlockzapperItem;
import com.simibubi.create.content.curiosities.zapper.blockzapper.BlockzapperModel;
import com.simibubi.create.content.curiosities.zapper.terrainzapper.WorldshaperItem;
import com.simibubi.create.content.curiosities.zapper.terrainzapper.WorldshaperModel;
import com.simibubi.create.content.logistics.item.filter.FilterItem;
@ -208,6 +204,25 @@ public class AllItems {
.model(AssetLookup.itemModelWithPartials())
.register();
public static final ItemEntry<ExtendoGripItem> EXTENDO_GRIP = REGISTRATE.item("extendo_grip", ExtendoGripItem::new)
.transform(CreateRegistrate.customRenderedItem(() -> ExtendoGripModel::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))
.model(AssetLookup.itemModelWithPartials())
.register();
public static final ItemEntry<WorldshaperItem> WORLDSHAPER =
REGISTRATE.item("handheld_worldshaper", WorldshaperItem::new)
.properties(p -> p.rarity(Rarity.EPIC))
.transform(CreateRegistrate.customRenderedItem(() -> WorldshaperModel::new))
.lang("Creative Worldshaper")
.model(AssetLookup.itemModelWithPartials())
.register();
public static final ItemEntry<MinecartContraptionItem> MINECART_CONTRAPTION =
REGISTRATE.item("minecart_contraption", MinecartContraptionItem::rideable)
.register();
@ -245,34 +260,6 @@ public class AllItems {
REGISTRATE.item("tree_fertilizer", TreeFertilizerItem::new)
.register();
public static final ItemEntry<BlockzapperItem> BLOCKZAPPER =
REGISTRATE.item("handheld_blockzapper", BlockzapperItem::new)
.transform(CreateRegistrate.customRenderedItem(() -> BlockzapperModel::new))
.model(AssetLookup.itemModelWithPartials())
.register();
public static final ItemEntry<WorldshaperItem> WORLDSHAPER =
REGISTRATE.item("handheld_worldshaper", WorldshaperItem::new)
.transform(CreateRegistrate.customRenderedItem(() -> WorldshaperModel::new))
.model(AssetLookup.itemModelWithPartials())
.register();
public static final ItemEntry<DeforesterItem> DEFORESTER = REGISTRATE.item("deforester", DeforesterItem::new)
.transform(CreateRegistrate.customRenderedItem(() -> DeforesterModel::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))
.model(AssetLookup.itemModelWithPartials())
.register();
public static final ItemEntry<ExtendoGripItem> EXTENDO_GRIP = REGISTRATE.item("extendo_grip", ExtendoGripItem::new)
.transform(CreateRegistrate.customRenderedItem(() -> ExtendoGripModel::new))
.model(AssetLookup.itemModelWithPartials())
.register();
// Schematics
static {

View file

@ -19,7 +19,6 @@ import com.simibubi.create.content.contraptions.processing.ProcessingRecipe;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeFactory;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipeSerializer;
import com.simibubi.create.content.curiosities.tools.SandPaperPolishingRecipe;
import com.simibubi.create.content.curiosities.zapper.blockzapper.BlockzapperUpgradeRecipe;
import com.simibubi.create.foundation.utility.Lang;
import net.minecraft.inventory.IInventory;
@ -34,9 +33,7 @@ import net.minecraftforge.event.RegistryEvent;
public enum AllRecipeTypes {
BLOCKZAPPER_UPGRADE(BlockzapperUpgradeRecipe.Serializer::new, IRecipeType.CRAFTING),
MECHANICAL_CRAFTING(MechanicalCraftingRecipe.Serializer::new),
CONVERSION(processingSerializer(ConversionRecipe::new)),
CRUSHING(processingSerializer(CrushingRecipe::new)),
CUTTING(processingSerializer(CuttingRecipe::new)),

View file

@ -91,22 +91,22 @@ public class AllSoundEvents {
.category(SoundCategory.BLOCKS)
.build(),
BLOCKZAPPER_PLACE = create("blockzapper_place").subtitle("Blockzapper zaps")
WORLDSHAPER_PLACE = create("worldshaper_place").subtitle("Worldshaper zaps")
.playExisting(SoundEvents.BLOCK_NOTE_BLOCK_BASEDRUM)
.category(SoundCategory.PLAYERS)
.build(),
SCROLL_VALUE = create("scroll_value").subtitle("Scroll-input clicks")
.playExisting(SoundEvents.BLOCK_NOTE_BLOCK_HAT, .124f, 1f)
.category(SoundCategory.PLAYERS)
.build(),
BLOCKZAPPER_CONFIRM = create("blockzapper_confirm").subtitle("Affirmative ding")
CONFIRM = create("confirm").subtitle("Affirmative ding")
.playExisting(SoundEvents.BLOCK_NOTE_BLOCK_BELL, 0.5f, 0.8f)
.category(SoundCategory.PLAYERS)
.build(),
BLOCKZAPPER_DENY = create("blockzapper_deny").subtitle("Declining boop")
DENY = create("deny").subtitle("Declining boop")
.playExisting(SoundEvents.BLOCK_NOTE_BLOCK_BASS, 1f, 0.5f)
.category(SoundCategory.PLAYERS)
.build(),
@ -115,6 +115,39 @@ public class AllSoundEvents {
.category(SoundCategory.BLOCKS)
.build(),
CONTRAPTION_ASSEMBLE = create("contraption_assemble").subtitle("Contraption moves")
.playExisting(SoundEvents.BLOCK_WOODEN_TRAPDOOR_OPEN, .5f, .5f)
.playExisting(SoundEvents.BLOCK_CHEST_OPEN, .045f, .74f)
.category(SoundCategory.BLOCKS)
.build(),
CONTRAPTION_DISASSEMBLE = create("contraption_disassemble").subtitle("Contraption stops")
.playExisting(SoundEvents.BLOCK_IRON_TRAPDOOR_CLOSE, .35f, .75f)
.category(SoundCategory.BLOCKS)
.build(),
WRENCH_ROTATE = create("wrench_rotate").subtitle("Wrench used")
.playExisting(SoundEvents.BLOCK_WOODEN_TRAPDOOR_CLOSE, .25f, 1.25f)
.category(SoundCategory.BLOCKS)
.build(),
WRENCH_REMOVE = create("wrench_remove").subtitle("Component breaks")
.playExisting(SoundEvents.ENTITY_ITEM_PICKUP, .25f, .75f)
.playExisting(SoundEvents.BLOCK_NETHERITE_BLOCK_HIT, .25f, .75f)
.category(SoundCategory.BLOCKS)
.build(),
CRAFTER_CLICK = create("crafter_click").subtitle("Crafter clicks")
.playExisting(SoundEvents.BLOCK_NETHERITE_BLOCK_HIT, .25f, 1)
.playExisting(SoundEvents.BLOCK_WOODEN_TRAPDOOR_OPEN, .125f, 1)
.category(SoundCategory.BLOCKS)
.build(),
CRAFTER_CRAFT = create("crafter_craft").subtitle("Crafter crafts")
.playExisting(SoundEvents.ENTITY_ITEM_BREAK, .125f, .75f)
.category(SoundCategory.BLOCKS)
.build(),
BLAZE_MUNCH = create("blaze_munch").subtitle("Blaze Burner munches")
.playExisting(SoundEvents.ENTITY_GENERIC_EAT, .5f, 1f)
.category(SoundCategory.BLOCKS)

View file

@ -28,6 +28,7 @@ import com.simibubi.create.foundation.render.KineticRenderer;
import com.simibubi.create.foundation.render.SuperByteBufferCache;
import com.simibubi.create.foundation.render.backend.Backend;
import com.simibubi.create.foundation.render.backend.OptifineHandler;
import com.simibubi.create.foundation.render.backend.core.PartialModel;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
import com.simibubi.create.foundation.utility.WorldAttached;
import com.simibubi.create.foundation.utility.ghost.GhostBlocks;
@ -119,7 +120,7 @@ public class CreateClient {
if (resourceManager instanceof IReloadableResourceManager)
((IReloadableResourceManager) resourceManager).addReloadListener(new ResourceReloadHandler());
AllBlockPartials.clientInit();
}
public static void onTextureStitch(TextureStitchEvent.Pre event) {
@ -133,7 +134,7 @@ public class CreateClient {
public static void onModelBake(ModelBakeEvent event) {
Map<ResourceLocation, IBakedModel> modelRegistry = event.getModelRegistry();
AllBlockPartials.onModelBake(event);
PartialModel.onModelBake(event);
getCustomBlockModels()
.foreach((block, modelFunc) -> swapModels(modelRegistry, getAllBlockStateModelLocations(block), modelFunc));
@ -146,7 +147,7 @@ public class CreateClient {
}
public static void onModelRegistry(ModelRegistryEvent event) {
AllBlockPartials.onModelRegistry(event);
PartialModel.onModelRegistry(event);
getCustomRenderedItems().foreach((item, modelFunc) -> modelFunc.apply(null)
.getModelLocations()

View file

@ -17,7 +17,6 @@ import com.simibubi.create.AllRecipeTypes;
import com.simibubi.create.Create;
import com.simibubi.create.compat.jei.category.BlockCuttingCategory;
import com.simibubi.create.compat.jei.category.BlockCuttingCategory.CondensedBlockCuttingRecipe;
import com.simibubi.create.compat.jei.category.BlockzapperUpgradeCategory;
import com.simibubi.create.compat.jei.category.CreateRecipeCategory;
import com.simibubi.create.compat.jei.category.CrushingCategory;
import com.simibubi.create.compat.jei.category.FanBlastingCategory;
@ -54,7 +53,6 @@ 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.ISubtypeRegistration;
import mezz.jei.api.runtime.IIngredientManager;
import net.minecraft.client.Minecraft;
import net.minecraft.item.ItemStack;
@ -110,11 +108,6 @@ public class CreateJEI implements IModPlugin {
.catalystStack(ProcessingViaFanCategory.getFan("fan_blasting"))
.build(),
blockzapper = register("blockzapper_upgrade", BlockzapperUpgradeCategory::new)
.recipes(AllRecipeTypes.BLOCKZAPPER_UPGRADE.serializer.getRegistryName())
.catalyst(AllItems.BLOCKZAPPER::get)
.build(),
mixing = register("mixing", MixingCategory::standard).recipes(AllRecipeTypes.MIXING::getType)
.catalyst(AllBlocks.MECHANICAL_MIXER::get)
.catalyst(AllBlocks.BASIN::get)
@ -208,11 +201,6 @@ public class CreateJEI implements IModPlugin {
return new CategoryBuilder<T>(name, supplier);
}
@Override
public void registerItemSubtypes(ISubtypeRegistration registration) {
registration.useNbtForSubtypes(AllItems.BLOCKZAPPER.get());
}
@Override
public void registerCategories(IRecipeCategoryRegistration registration) {
ALL.forEach(registration::addRecipeCategories);

View file

@ -1,95 +0,0 @@
package com.simibubi.create.compat.jei.category;
import static com.simibubi.create.foundation.gui.AllGuiTextures.BLOCKZAPPER_UPGRADE_RECIPE;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllItems;
import com.simibubi.create.compat.jei.ScreenResourceWrapper;
import com.simibubi.create.content.curiosities.zapper.blockzapper.BlockzapperUpgradeRecipe;
import com.simibubi.create.foundation.gui.GuiGameElement;
import com.simibubi.create.foundation.utility.Lang;
import mezz.jei.api.constants.VanillaTypes;
import mezz.jei.api.gui.IRecipeLayout;
import mezz.jei.api.gui.ingredient.IGuiItemStackGroup;
import mezz.jei.api.ingredients.IIngredients;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.item.crafting.ShapedRecipe;
import net.minecraft.util.NonNullList;
import net.minecraft.util.text.IFormattableTextComponent;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;
public class BlockzapperUpgradeCategory extends CreateRecipeCategory<BlockzapperUpgradeRecipe> {
public BlockzapperUpgradeCategory() {
super(itemIcon(AllItems.BLOCKZAPPER.get()), new ScreenResourceWrapper(BLOCKZAPPER_UPGRADE_RECIPE));
}
@Override
public Class<? extends BlockzapperUpgradeRecipe> getRecipeClass() {
return BlockzapperUpgradeRecipe.class;
}
@Override
public void setIngredients(BlockzapperUpgradeRecipe recipe, IIngredients ingredients) {
ingredients.setInputIngredients(recipe.getIngredients());
ingredients.setOutput(VanillaTypes.ITEM, recipe.getRecipeOutput());
}
@Override
public void setRecipe(IRecipeLayout recipeLayout, BlockzapperUpgradeRecipe recipe, IIngredients ingredients) {
IGuiItemStackGroup itemStacks = recipeLayout.getItemStacks();
ShapedRecipe shape = recipe.getRecipe();
NonNullList<Ingredient> shapedIngredients = shape.getIngredients();
int top = 0;
int left = 0;
int i = 0;
for (int y = 0; y < shape.getRecipeHeight(); y++) {
for (int x = 0; x < shape.getRecipeWidth(); x++) {
itemStacks.init(i, true, left + x * 18, top + y * 18);
itemStacks.set(i, Arrays.asList(shapedIngredients.get(i)
.getMatchingStacks()));
i++;
}
}
}
@Override
public List<ITextComponent> getTooltipStrings(BlockzapperUpgradeRecipe recipe, double mouseX, double mouseY) {
List<ITextComponent> list = new ArrayList<>();
if (mouseX < 91 || mouseX > 91 + 52 || mouseY < 1 || mouseY > 53)
return list;
list.addAll(recipe.getRecipeOutput()
.getTooltip(Minecraft.getInstance().player,
Minecraft.getInstance().gameSettings.advancedItemTooltips ? ITooltipFlag.TooltipFlags.ADVANCED
: ITooltipFlag.TooltipFlags.NORMAL));
return list;
}
@Override
public void draw(BlockzapperUpgradeRecipe recipe, MatrixStack matrixStack, double mouseX, double mouseY) {
FontRenderer font = Minecraft.getInstance().fontRenderer;
IFormattableTextComponent textComponent =
new StringTextComponent("+ ")
.append(Lang.translate("blockzapper.component." + Lang.asId(recipe.getUpgradedComponent().name())))
.formatted(recipe.getTier().color);
font.drawWithShadow(matrixStack, textComponent, (BLOCKZAPPER_UPGRADE_RECIPE.width - font.getStringWidth(textComponent.getString())) / 2f, 57, 0x8B8B8B);
GuiGameElement.of(recipe.getRecipeOutput())
.<GuiGameElement.GuiRenderBuilder>at(90, 0)
.scale(3.5)
.render(matrixStack);
}
}

View file

@ -28,7 +28,7 @@ public abstract class ProcessingViaFanCategory<T extends IRecipe<?>> extends Cre
public ProcessingViaFanCategory(IDrawable icon) {
this(177, icon);
}
protected ProcessingViaFanCategory(int width, IDrawable icon) {
super(icon, emptyBackground(width, 71));
}

View file

@ -5,6 +5,7 @@ import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock.HeatLevel;
import com.simibubi.create.foundation.gui.GuiGameElement;
import com.simibubi.create.foundation.render.backend.core.PartialModel;
import mezz.jei.api.gui.drawable.IDrawable;
import net.minecraft.util.math.vector.Vector3f;
@ -30,7 +31,7 @@ public class AnimatedBlazeBurner implements IDrawable {
.scale(scale)
.render(matrixStack);
AllBlockPartials blaze = AllBlockPartials.BLAZES.get(heatLevel);
PartialModel blaze = AllBlockPartials.BLAZES.get(heatLevel);
GuiGameElement.of(blaze)
.atLocal(1, 1.65, 1)
.rotate(0, 180, 0)

View file

@ -2,6 +2,7 @@ package com.simibubi.create.compat.jei.category.animations;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.foundation.render.backend.core.PartialModel;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
import mezz.jei.api.gui.drawable.IDrawable;
@ -14,15 +15,15 @@ public abstract class AnimatedKinetics implements IDrawable {
public static float getCurrentAngle() {
return ((AnimationTickHolder.getRenderTime()) * 4f) % 360;
}
protected BlockState shaft(Axis axis) {
return AllBlocks.SHAFT.getDefaultState().with(BlockStateProperties.AXIS, axis);
}
protected AllBlockPartials cogwheel() {
protected PartialModel cogwheel() {
return AllBlockPartials.SHAFTLESS_COGWHEEL;
}
@Override
public int getWidth() {
return 50;

View file

@ -20,7 +20,7 @@ public class AnimatedMillstone extends AnimatedKinetics {
.rotateBlock(22.5, getCurrentAngle() * 2, 0)
.scale(scale)
.render(matrixStack);
GuiGameElement.of(AllBlocks.MILLSTONE.getDefaultState())
.rotateBlock(22.5, 22.5, 0)
.scale(scale)

View file

@ -14,9 +14,9 @@ public class HalfShaftInstance extends SingleRotatingInstance {
@Override
protected InstancedModel<RotatingData> getModel() {
Direction dir = getShaftDirection();
return AllBlockPartials.SHAFT_HALF.getModel(getRotatingMaterial(), blockState, dir);
}
Direction dir = getShaftDirection();
return getRotatingMaterial().getModel(AllBlockPartials.SHAFT_HALF, blockState, dir);
}
protected Direction getShaftDirection() {
return blockState.get(BlockStateProperties.FACING);

View file

@ -581,7 +581,7 @@ public abstract class KineticTileEntity extends SmartTileEntity
SoundScapes.playGeneralKineticAmbience(pos, pitch);
Block block = getBlockState().getBlock();
if (ICogWheel.isSmallCog(block) || ICogWheel.isSmallCog(block) || block instanceof GearboxBlock)
if (ICogWheel.isSmallCog(block) || ICogWheel.isLargeCog(block) || block instanceof GearboxBlock)
SoundScapes.playCogwheelAmbience(pos, pitch);
}

View file

@ -15,6 +15,7 @@ import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.NBTUtil;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.vector.Vector3d;
@ -113,6 +114,7 @@ public abstract class BlockBreakingKineticTileEntity extends KineticTileEntity {
float breakSpeed = getBreakSpeed();
destroyProgress += MathHelper.clamp((int) (breakSpeed / blockHardness), 1, 10 - destroyProgress);
world.playSound(null, pos, stateToBreak.getSoundType().getHitSound(), SoundCategory.NEUTRAL, .25f, 1);
if (destroyProgress >= 10) {
onBlockBroken(stateToBreak);

View file

@ -14,6 +14,7 @@ import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.NBTUtil;
import net.minecraft.util.DamageSource;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
@ -164,7 +165,8 @@ public class BlockBreakingMovementBehaviour extends MovementBehaviour {
float breakSpeed = MathHelper.clamp(Math.abs(context.getAnimationSpeed()) / 500f, 1 / 128f, 16f);
destroyProgress += MathHelper.clamp((int) (breakSpeed / blockHardness), 1, 10 - destroyProgress);
world.playSound(null, breakingPos, stateToBreak.getSoundType().getHitSound(), SoundCategory.NEUTRAL, .25f, 1);
if (destroyProgress >= 10) {
world.sendBlockBreakProgress(id, breakingPos, -1);

View file

@ -10,6 +10,7 @@ import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
import net.minecraft.block.BlockState;
import net.minecraft.util.Direction;
public class DrillInstance extends SingleRotatingInstance {
@ -20,6 +21,7 @@ public class DrillInstance extends SingleRotatingInstance {
@Override
protected InstancedModel<RotatingData> getModel() {
BlockState referenceState = tile.getBlockState();
return AllBlockPartials.DRILL_HEAD.getModel(getRotatingMaterial(), referenceState, referenceState.get(FACING));
Direction facing = referenceState.get(FACING);
return getRotatingMaterial().getModel(AllBlockPartials.DRILL_HEAD, referenceState, facing);
}
}

View file

@ -5,6 +5,7 @@ import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
import com.simibubi.create.foundation.render.PartialBufferer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
@ -25,22 +26,18 @@ public class DrillRenderer extends KineticTileEntityRenderer {
@Override
protected SuperByteBuffer getRotatedModel(KineticTileEntity te) {
return AllBlockPartials.DRILL_HEAD.renderOnDirectionalSouth(te.getBlockState());
}
protected static SuperByteBuffer getRotatingModel(BlockState state) {
return AllBlockPartials.DRILL_HEAD.renderOnDirectionalSouth(state);
return PartialBufferer.getFacing(AllBlockPartials.DRILL_HEAD, te.getBlockState());
}
public static void renderInContraption(MovementContext context, MatrixStack ms, MatrixStack msLocal,
IRenderTypeBuffer buffer) {
MatrixStack[] matrixStacks = new MatrixStack[] { ms, msLocal };
MatrixStack[] matrixStacks = new MatrixStack[]{ms, msLocal};
BlockState state = context.state;
SuperByteBuffer superBuffer = AllBlockPartials.DRILL_HEAD.renderOn(state);
SuperByteBuffer superBuffer = PartialBufferer.get(AllBlockPartials.DRILL_HEAD, state);
Direction facing = state.get(DrillBlock.FACING);
float speed = (float) (context.contraption.stalled
|| !VecHelper.isVecPointingTowards(context.relativeMotion, facing
|| !VecHelper.isVecPointingTowards(context.relativeMotion, facing
.getOpposite()) ? context.getAnimationSpeed() : 0);
float time = AnimationTickHolder.getRenderTime() / 20;
float angle = (float) (((time * speed) % 360));
@ -52,11 +49,11 @@ public class DrillRenderer extends KineticTileEntityRenderer {
.rotateX(AngleHelper.verticalAngle(facing))
.rotateZ(angle)
.unCentre();
superBuffer
.light(msLocal.peek()
.getModel())
.renderInto(ms, buffer.getBuffer(RenderType.getSolid()));
}
}
}

View file

@ -6,6 +6,7 @@ import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher;
import com.simibubi.create.foundation.render.PartialBufferer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
import com.simibubi.create.foundation.utility.AngleHelper;
@ -31,28 +32,28 @@ public class HarvesterRenderer extends SafeTileEntityRenderer<HarvesterTileEntit
protected void renderSafe(HarvesterTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer,
int light, int overlay) {
BlockState blockState = te.getBlockState();
SuperByteBuffer superBuffer = AllBlockPartials.HARVESTER_BLADE.renderOn(blockState);
SuperByteBuffer superBuffer = PartialBufferer.get(AllBlockPartials.HARVESTER_BLADE, blockState);
transform(te.getWorld(), blockState.get(HarvesterBlock.HORIZONTAL_FACING), superBuffer,
te.manuallyAnimatedSpeed);
te.manuallyAnimatedSpeed);
superBuffer.light(light)
.renderInto(ms, buffer.getBuffer(RenderType.getCutoutMipped()));
.renderInto(ms, buffer.getBuffer(RenderType.getCutoutMipped()));
}
public static void renderInContraption(MovementContext context, MatrixStack ms, MatrixStack msLocal,
IRenderTypeBuffer buffers) {
BlockState blockState = context.state;
Direction facing = blockState.get(HORIZONTAL_FACING);
SuperByteBuffer superBuffer = AllBlockPartials.HARVESTER_BLADE.renderOn(blockState);
SuperByteBuffer superBuffer = PartialBufferer.get(AllBlockPartials.HARVESTER_BLADE, blockState);
float speed = (float) (!VecHelper.isVecPointingTowards(context.relativeMotion, facing.getOpposite())
? context.getAnimationSpeed()
: 0);
? context.getAnimationSpeed()
: 0);
if (context.contraption.stalled)
speed = 0;
transform(context.world, facing, superBuffer, speed);
superBuffer.light(msLocal.peek()
.getModel(), ContraptionRenderDispatcher.getLightOnContraption(context))
.getModel(), ContraptionRenderDispatcher.getLightOnContraption(context))
.renderInto(ms, buffers.getBuffer(RenderType.getCutoutMipped()));
}

View file

@ -8,7 +8,9 @@ import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher;
import com.simibubi.create.foundation.render.PartialBufferer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.backend.core.PartialModel;
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
@ -63,16 +65,16 @@ public class PortableStorageInterfaceRenderer extends SafeTileEntityRenderer<Por
for (MatrixStack ms : matrixStacks)
ms.push();
SuperByteBuffer middle = getMiddleForState(blockState, lit).renderOn(blockState);
SuperByteBuffer top = getTopForState(blockState).renderOn(blockState);
SuperByteBuffer middle = PartialBufferer.get(getMiddleForState(blockState, lit), blockState);
SuperByteBuffer top = PartialBufferer.get(getTopForState(blockState), blockState);
Direction facing = blockState.get(PortableStorageInterfaceBlock.FACING);
for (MatrixStack ms : matrixStacks)
MatrixStacker.of(ms)
.centre()
.rotateY(AngleHelper.horizontalAngle(facing))
.rotateX(facing == Direction.UP ? 0 : facing == Direction.DOWN ? 180 : 90)
.unCentre();
.centre()
.rotateY(AngleHelper.horizontalAngle(facing))
.rotateX(facing == Direction.UP ? 0 : facing == Direction.DOWN ? 180 : 90)
.unCentre();
for (MatrixStack ms : matrixStacks) {
ms.translate(0, progress / 2f, 0);
@ -109,7 +111,7 @@ public class PortableStorageInterfaceRenderer extends SafeTileEntityRenderer<Por
return psi;
}
static AllBlockPartials getMiddleForState(BlockState state, boolean lit) {
static PartialModel getMiddleForState(BlockState state, boolean lit) {
if (AllBlocks.PORTABLE_FLUID_INTERFACE.has(state))
return lit ? AllBlockPartials.PORTABLE_FLUID_INTERFACE_MIDDLE_POWERED
: AllBlockPartials.PORTABLE_FLUID_INTERFACE_MIDDLE;
@ -117,7 +119,7 @@ public class PortableStorageInterfaceRenderer extends SafeTileEntityRenderer<Por
: AllBlockPartials.PORTABLE_STORAGE_INTERFACE_MIDDLE;
}
static AllBlockPartials getTopForState(BlockState state) {
static PartialModel getTopForState(BlockState state) {
if (AllBlocks.PORTABLE_FLUID_INTERFACE.has(state))
return AllBlockPartials.PORTABLE_FLUID_INTERFACE_TOP;
return AllBlockPartials.PORTABLE_STORAGE_INTERFACE_TOP;

View file

@ -6,7 +6,9 @@ import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.content.contraptions.components.clock.CuckooClockTileEntity.Animation;
import com.simibubi.create.foundation.render.PartialBufferer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.backend.core.PartialModel;
import com.simibubi.create.foundation.utility.AngleHelper;
import net.minecraft.block.BlockState;
@ -38,18 +40,18 @@ public class CuckooClockRenderer extends KineticTileEntityRenderer {
IVertexBuilder vb = buffer.getBuffer(RenderType.getSolid());
// Render Hands
SuperByteBuffer hourHand = AllBlockPartials.CUCKOO_HOUR_HAND.renderOn(blockState);
SuperByteBuffer minuteHand = AllBlockPartials.CUCKOO_MINUTE_HAND.renderOn(blockState);
SuperByteBuffer hourHand = PartialBufferer.get(AllBlockPartials.CUCKOO_HOUR_HAND, blockState);
SuperByteBuffer minuteHand = PartialBufferer.get(AllBlockPartials.CUCKOO_MINUTE_HAND, blockState);
float hourAngle = clock.hourHand.get(partialTicks);
float minuteAngle = clock.minuteHand.get(partialTicks);
rotateHand(hourHand, hourAngle, direction).light(packedLightmapCoords)
.renderInto(ms, vb);
.renderInto(ms, vb);
rotateHand(minuteHand, minuteAngle, direction).light(packedLightmapCoords)
.renderInto(ms, vb);
.renderInto(ms, vb);
// Doors
SuperByteBuffer leftDoor = AllBlockPartials.CUCKOO_LEFT_DOOR.renderOn(blockState);
SuperByteBuffer rightDoor = AllBlockPartials.CUCKOO_RIGHT_DOOR.renderOn(blockState);
SuperByteBuffer leftDoor = PartialBufferer.get(AllBlockPartials.CUCKOO_LEFT_DOOR, blockState);
SuperByteBuffer rightDoor = PartialBufferer.get(AllBlockPartials.CUCKOO_RIGHT_DOOR, blockState);
float angle = 0;
float offset = 0;
@ -78,13 +80,13 @@ public class CuckooClockRenderer extends KineticTileEntityRenderer {
// Figure
if (clock.animationType != Animation.NONE) {
offset = -(angle / 135) * 1 / 2f + 10 / 16f;
PartialModel partialModel = (clock.animationType == Animation.PIG ? AllBlockPartials.CUCKOO_PIG : AllBlockPartials.CUCKOO_CREEPER);
SuperByteBuffer figure =
(clock.animationType == Animation.PIG ? AllBlockPartials.CUCKOO_PIG : AllBlockPartials.CUCKOO_CREEPER)
.renderOn(blockState);
PartialBufferer.get(partialModel, blockState);
figure.rotateCentered(Direction.UP, AngleHelper.rad(AngleHelper.horizontalAngle(direction.rotateYCCW())));
figure.translate(offset, 0, 0);
figure.light(packedLightmapCoords)
.renderInto(ms, vb);
.renderInto(ms, vb);
}
}
@ -94,10 +96,10 @@ public class CuckooClockRenderer extends KineticTileEntityRenderer {
return transform(AllBlockPartials.SHAFT_HALF, te);
}
private SuperByteBuffer transform(AllBlockPartials partial, KineticTileEntity te) {
return partial.renderOnDirectionalSouth(te.getBlockState(), te.getBlockState()
.get(CuckooClockBlock.HORIZONTAL_FACING)
.getOpposite());
private SuperByteBuffer transform(PartialModel partial, KineticTileEntity te) {
return PartialBufferer.getFacing(partial, te.getBlockState(), te.getBlockState()
.get(CuckooClockBlock.HORIZONTAL_FACING)
.getOpposite());
}
private SuperByteBuffer rotateHand(SuperByteBuffer buffer, float angle, Direction facing) {

View file

@ -9,8 +9,10 @@ import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllSpriteShifts;
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterTileEntity.Phase;
import com.simibubi.create.content.contraptions.components.crafter.RecipeGridHandler.GroupedItems;
import com.simibubi.create.foundation.render.PartialBufferer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.backend.FastRenderDispatcher;
import com.simibubi.create.foundation.render.backend.core.PartialModel;
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
@ -155,7 +157,7 @@ public class MechanicalCrafterRenderer extends SafeTileEntityRenderer<Mechanical
IVertexBuilder vb = buffer.getBuffer(RenderType.getSolid());
if (!FastRenderDispatcher.available(te.getWorld())) {
SuperByteBuffer superBuffer = AllBlockPartials.SHAFTLESS_COGWHEEL.renderOn(blockState);
SuperByteBuffer superBuffer = PartialBufferer.get(AllBlockPartials.SHAFTLESS_COGWHEEL, blockState);
standardKineticRotationTransform(superBuffer, te, light);
superBuffer.rotateCentered(Direction.UP, (float) (blockState.get(HORIZONTAL_FACING).getAxis() != Direction.Axis.X ? 0 : Math.PI / 2));
superBuffer.rotateCentered(Direction.EAST, (float) (Math.PI / 2));
@ -180,7 +182,7 @@ public class MechanicalCrafterRenderer extends SafeTileEntityRenderer<Mechanical
if (te.phase == Phase.EXPORTING) {
int textureIndex = (int) ((te.getCountDownSpeed() / 128f * AnimationTickHolder.getTicks()));
beltBuffer.shiftUVtoSheet(AllSpriteShifts.CRAFTER_THINGIES, (textureIndex % 4) / 4f, 0, 1);
}
}
beltBuffer.renderInto(ms, vb);
beltFrameBuffer.renderInto(ms, vb);
@ -193,11 +195,11 @@ public class MechanicalCrafterRenderer extends SafeTileEntityRenderer<Mechanical
}
private SuperByteBuffer renderAndTransform(MechanicalCrafterTileEntity te, AllBlockPartials renderBlock,
private SuperByteBuffer renderAndTransform(MechanicalCrafterTileEntity te, PartialModel renderBlock,
BlockState crafterState, BlockPos pos) {
SuperByteBuffer buffer = renderBlock.renderOn(crafterState);
SuperByteBuffer buffer = PartialBufferer.get(renderBlock, crafterState);
float xRot = crafterState.get(MechanicalCrafterBlock.POINTING)
.getXRotation();
.getXRotation();
float yRot = AngleHelper.horizontalAngle(crafterState.get(HORIZONTAL_FACING));
buffer.rotateCentered(Direction.UP, (float) ((yRot + 90) / 180 * Math.PI));
buffer.rotateCentered(Direction.EAST, (float) ((xRot) / 180 * Math.PI));

View file

@ -11,6 +11,7 @@ import org.apache.commons.lang3.tuple.Pair;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllItems;
import com.simibubi.create.AllSoundEvents;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.components.crafter.ConnectedInputHandler.ConnectedInput;
import com.simibubi.create.content.contraptions.components.crafter.RecipeGridHandler.GroupedItems;
@ -31,6 +32,8 @@ import net.minecraft.particles.ItemParticleData;
import net.minecraft.particles.ParticleTypes;
import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.Direction;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.SoundEvents;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.vector.Vector3d;
@ -67,7 +70,12 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity {
return stack;
if (te.covered)
return stack;
return super.insertItem(slot, stack, simulate);
ItemStack insertItem = super.insertItem(slot, stack, simulate);
if (insertItem.getCount() != stack.getCount() && !simulate)
te.getWorld()
.playSound(null, te.getPos(), SoundEvents.ENTITY_ITEM_FRAME_ADD_ITEM, SoundCategory.BLOCKS, .25f,
.5f);
return insertItem;
}
}
@ -173,10 +181,12 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity {
groupedItemsBeforeCraft = before;
if (phaseBefore == Phase.EXPORTING && phase == Phase.WAITING) {
Direction facing = getBlockState().get(MechanicalCrafterBlock.HORIZONTAL_FACING);
Vector3d vec = Vector3d.of(facing.getDirectionVec()).scale(.75)
Vector3d vec = Vector3d.of(facing.getDirectionVec())
.scale(.75)
.add(VecHelper.getCenterOf(pos));
Direction targetDirection = MechanicalCrafterBlock.getTargetDirection(getBlockState());
vec = vec.add(Vector3d.of(targetDirection.getDirectionVec()).scale(1));
vec = vec.add(Vector3d.of(targetDirection.getDirectionVec())
.scale(1));
world.addParticle(ParticleTypes.CRIT, vec.x, vec.y, vec.z, 0, 0, 0);
}
}
@ -275,6 +285,10 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity {
Pointing pointing = getBlockState().get(MechanicalCrafterBlock.POINTING);
groupedItems.mergeOnto(targetingCrafter.groupedItems, pointing);
groupedItems = new GroupedItems();
float pitch = targetingCrafter.groupedItems.grid.size() * 1/16f + .5f;
AllSoundEvents.CRAFTER_CLICK.playOnServer(world, pos, 1, pitch);
phase = Phase.WAITING;
countDown = 0;
sendData();
@ -319,7 +333,14 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity {
}
}
int prev = countDown;
countDown -= getCountDownSpeed();
if (countDown < 1000 && prev >= 1000) {
AllSoundEvents.CRAFTER_CLICK.playOnServer(world, pos, 1, 2);
AllSoundEvents.CRAFTER_CRAFT.playOnServer(world, pos);
}
if (countDown < 0) {
countDown = 0;
if (!runLogic)
@ -391,7 +412,8 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity {
BlockState blockState = getBlockState();
boolean present = AllBlocks.MECHANICAL_CRAFTER.has(blockState);
Vector3d vec = present ? Vector3d.of(blockState.get(HORIZONTAL_FACING)
.getDirectionVec()).scale(.75f) : Vector3d.ZERO;
.getDirectionVec())
.scale(.75f) : Vector3d.ZERO;
Vector3d ejectPos = VecHelper.getCenterOf(pos)
.add(vec);
groupedItems.grid.forEach((pair, stack) -> dropItem(ejectPos, stack));

View file

@ -6,6 +6,7 @@ import com.simibubi.create.AllTileEntities;
import com.simibubi.create.content.contraptions.base.DirectionalKineticBlock;
import com.simibubi.create.foundation.block.ITE;
import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.render.backend.core.PartialModel;
import net.minecraft.block.Block;
import net.minecraft.block.BlockRenderType;
@ -38,12 +39,12 @@ public class HandCrankBlock extends DirectionalKineticBlock implements ITE<HandC
public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) {
return AllShapes.CRANK.get(state.get(FACING));
}
@OnlyIn(Dist.CLIENT)
public AllBlockPartials getRenderedHandle() {
public PartialModel getRenderedHandle() {
return AllBlockPartials.HAND_CRANK_HANDLE;
}
public int getRotationSpeed() {
return 32;
}
@ -117,7 +118,7 @@ public class HandCrankBlock extends DirectionalKineticBlock implements ITE<HandC
public Class<HandCrankTileEntity> getTileEntityClass() {
return HandCrankTileEntity.class;
}
@Override
public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) {
return false;

View file

@ -1,9 +1,9 @@
package com.simibubi.create.content.contraptions.components.crank;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.SingleRotatingInstance;
import com.simibubi.create.foundation.render.backend.core.ModelData;
import com.simibubi.create.foundation.render.backend.core.PartialModel;
import com.simibubi.create.foundation.render.backend.instancing.IDynamicInstance;
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
@ -22,21 +22,22 @@ public class HandCrankInstance extends SingleRotatingInstance implements IDynami
public HandCrankInstance(InstancedTileRenderer<?> modelManager, HandCrankTileEntity tile) {
super(modelManager, tile);
this.tile = tile;
this.tile = tile;
Block block = blockState.getBlock();
AllBlockPartials renderedHandle = null;
if (block instanceof HandCrankBlock)
renderedHandle = ((HandCrankBlock) block).getRenderedHandle();
if (renderedHandle == null)
return;
Block block = blockState.getBlock();
PartialModel renderedHandle = null;
if (block instanceof HandCrankBlock)
renderedHandle = ((HandCrankBlock) block).getRenderedHandle();
if (renderedHandle == null)
return;
facing = blockState.get(BlockStateProperties.FACING);
InstancedModel<ModelData> model = renderedHandle.getModel(getTransformMaterial(), blockState, facing.getOpposite());
crank = model.createInstance();
facing = blockState.get(BlockStateProperties.FACING);
Direction opposite = facing.getOpposite();
InstancedModel<ModelData> model = getTransformMaterial().getModel(renderedHandle, blockState, opposite);
crank = model.createInstance();
rotateCrank();
}
rotateCrank();
}
@Override
public void beginFrame() {

View file

@ -3,11 +3,12 @@ package com.simibubi.create.content.contraptions.components.crank;
import static net.minecraft.state.properties.BlockStateProperties.FACING;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.foundation.render.PartialBufferer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.backend.FastRenderDispatcher;
import com.simibubi.create.foundation.render.backend.core.PartialModel;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
@ -31,17 +32,17 @@ public class HandCrankRenderer extends KineticTileEntityRenderer {
BlockState state = te.getBlockState();
Block block = state.getBlock();
AllBlockPartials renderedHandle = null;
PartialModel renderedHandle = null;
if (block instanceof HandCrankBlock)
renderedHandle = ((HandCrankBlock) block).getRenderedHandle();
if (renderedHandle == null)
return;
Direction facing = state.get(FACING);
SuperByteBuffer handle = renderedHandle.renderOnDirectionalSouth(state, facing.getOpposite());
SuperByteBuffer handle = PartialBufferer.getFacing(renderedHandle, state, facing.getOpposite());
HandCrankTileEntity crank = (HandCrankTileEntity) te;
kineticRotationTransform(handle, te, facing.getAxis(),
(crank.independentAngle + partialTicks * crank.chasingVelocity) / 360, light);
(crank.independentAngle + partialTicks * crank.chasingVelocity) / 360, light);
handle.renderInto(ms, buffer.getBuffer(RenderType.getSolid()));
}

View file

@ -84,10 +84,10 @@ public class HandCrankTileEntity extends GeneratingKineticTileEntity {
@Override
public void tickAudio() {
super.tickAudio();
if (inUse > 0 && AnimationTickHolder.getTicks() % 2 == 0) {
if (inUse > 0 && AnimationTickHolder.getTicks() % 10 == 0) {
if (!AllBlocks.HAND_CRANK.has(getBlockState()))
return;
AllSoundEvents.CRANKING.playAt(world, pos, (inUse) / 5f, .65f + (10 - inUse) / 10f, true);
AllSoundEvents.CRANKING.playAt(world, pos, (inUse) / 2.5f, .65f + (10 - inUse) / 10f, true);
}
}

View file

@ -2,8 +2,8 @@ package com.simibubi.create.content.contraptions.components.crank;
import javax.annotation.ParametersAreNonnullByDefault;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.foundation.render.backend.core.PartialModel;
import com.simibubi.create.foundation.utility.DyeHelper;
import net.minecraft.block.BlockState;
@ -68,7 +68,7 @@ public class ValveHandleBlock extends HandCrankBlock {
@Override
@OnlyIn(Dist.CLIENT)
public AllBlockPartials getRenderedHandle() {
public PartialModel getRenderedHandle() {
return null;
}

View file

@ -14,6 +14,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.ren
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionKineticRenderer;
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionProgram;
import com.simibubi.create.foundation.render.backend.core.ModelData;
import com.simibubi.create.foundation.render.backend.core.PartialModel;
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
import com.simibubi.create.foundation.render.backend.instancing.RenderMaterial;
import com.simibubi.create.foundation.utility.AngleHelper;
@ -48,7 +49,7 @@ public class DeployerActorInstance extends ActorInstance {
BlockState state = context.state;
DeployerTileEntity.Mode mode = NBTHelper.readEnum(context.tileData, "Mode", DeployerTileEntity.Mode.class);
AllBlockPartials handPose = DeployerRenderer.getHandPose(mode);
PartialModel handPose = DeployerRenderer.getHandPose(mode);
stationaryTimer = context.data.contains("StationaryTimer");
facing = state.get(FACING);

View file

@ -215,6 +215,7 @@ public class DeployerHandler {
if (blockBreakingProgress != null)
before = blockBreakingProgress.getValue();
progress += before;
world.playSound(null, clickedPos, clickedState.getSoundType().getHitSound(), SoundCategory.NEUTRAL, .25f, 1);
if (progress >= 1) {
tryHarvestBlock(player.interactionManager, clickedPos);

View file

@ -7,6 +7,7 @@ import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.relays.encased.ShaftInstance;
import com.simibubi.create.foundation.render.backend.core.OrientedData;
import com.simibubi.create.foundation.render.backend.core.PartialModel;
import com.simibubi.create.foundation.render.backend.instancing.IDynamicInstance;
import com.simibubi.create.foundation.render.backend.instancing.ITickableInstance;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
@ -31,7 +32,7 @@ public class DeployerInstance extends ShaftInstance implements IDynamicInstance,
protected OrientedData hand;
AllBlockPartials currentHand;
PartialModel currentHand;
float progress;
private boolean newHand = false;
@ -89,7 +90,7 @@ public class DeployerInstance extends ShaftInstance implements IDynamicInstance,
}
private boolean updateHandPose() {
AllBlockPartials handPose = tile.getHandPose();
PartialModel handPose = tile.getHandPose();
if (currentHand == handPose) return false;
currentHand = handPose;

View file

@ -11,8 +11,10 @@ import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.content.contraptions.components.deployer.DeployerTileEntity.Mode;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher;
import com.simibubi.create.foundation.render.PartialBufferer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.backend.FastRenderDispatcher;
import com.simibubi.create.foundation.render.backend.core.PartialModel;
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringRenderer;
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
import com.simibubi.create.foundation.utility.AngleHelper;
@ -117,14 +119,13 @@ public class DeployerRenderer extends SafeTileEntityRenderer<DeployerTileEntity>
BlockPos pos = te.getPos();
Vector3d offset = getHandOffset(te, partialTicks, blockState);
SuperByteBuffer pole = AllBlockPartials.DEPLOYER_POLE.renderOn(blockState);
SuperByteBuffer hand = te.getHandPose()
.renderOn(blockState);
SuperByteBuffer pole = PartialBufferer.get(AllBlockPartials.DEPLOYER_POLE, blockState);
SuperByteBuffer hand = PartialBufferer.get(te.getHandPose(), blockState);
transform(te.getWorld(), pole.translate(offset.x, offset.y, offset.z), blockState, pos, true).renderInto(ms,
vb);
vb);
transform(te.getWorld(), hand.translate(offset.x, offset.y, offset.z), blockState, pos, false).renderInto(ms,
vb);
vb);
}
protected Vector3d getHandOffset(DeployerTileEntity te, float partialTicks, BlockState blockState) {
@ -155,16 +156,16 @@ public class DeployerRenderer extends SafeTileEntityRenderer<DeployerTileEntity>
public static void renderInContraption(MovementContext context, MatrixStack ms, MatrixStack msLocal,
IRenderTypeBuffer buffer) {
MatrixStack[] matrixStacks = new MatrixStack[] { ms, msLocal };
MatrixStack[] matrixStacks = new MatrixStack[]{ms, msLocal};
IVertexBuilder builder = buffer.getBuffer(RenderType.getSolid());
BlockState blockState = context.state;
BlockPos pos = BlockPos.ZERO;
Mode mode = NBTHelper.readEnum(context.tileData, "Mode", Mode.class);
World world = context.world;
AllBlockPartials handPose = getHandPose(mode);
PartialModel handPose = getHandPose(mode);
SuperByteBuffer pole = AllBlockPartials.DEPLOYER_POLE.renderOn(blockState);
SuperByteBuffer hand = handPose.renderOn(blockState);
SuperByteBuffer pole = PartialBufferer.get(AllBlockPartials.DEPLOYER_POLE, blockState);
SuperByteBuffer hand = PartialBufferer.get(handPose, blockState);
pole = transform(world, pole, blockState, pos, true);
hand = transform(world, hand, blockState, pos, false);
@ -192,7 +193,7 @@ public class DeployerRenderer extends SafeTileEntityRenderer<DeployerTileEntity>
.renderInto(ms, builder);
}
static AllBlockPartials getHandPose(DeployerTileEntity.Mode mode) {
static PartialModel getHandPose(DeployerTileEntity.Mode mode) {
return mode == DeployerTileEntity.Mode.PUNCH ? AllBlockPartials.DEPLOYER_HAND_PUNCHING : AllBlockPartials.DEPLOYER_HAND_POINTING;
}

View file

@ -11,6 +11,7 @@ import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.curiosities.tools.SandPaperItem;
import com.simibubi.create.foundation.advancement.AllTriggers;
import com.simibubi.create.foundation.item.TooltipHelper;
import com.simibubi.create.foundation.render.backend.core.PartialModel;
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
import com.simibubi.create.foundation.utility.NBTHelper;
@ -113,7 +114,7 @@ public class DeployerTileEntity extends KineticTileEntity {
@Override
public void tick() {
super.tick();
if (getSpeed() == 0)
return;
if (!world.isRemote && player != null && player.blockBreakingProgress != null) {
@ -331,7 +332,7 @@ public class DeployerTileEntity extends KineticTileEntity {
private IItemHandlerModifiable createHandler() {
return new DeployerItemHandler(this);
}
public void redstoneUpdate() {
if (world.isRemote)
return;
@ -342,7 +343,7 @@ public class DeployerTileEntity extends KineticTileEntity {
sendData();
}
public AllBlockPartials getHandPose() {
public PartialModel getHandPose() {
return mode == Mode.PUNCH ? AllBlockPartials.DEPLOYER_HAND_PUNCHING
: heldItem.isEmpty() ? AllBlockPartials.DEPLOYER_HAND_POINTING : AllBlockPartials.DEPLOYER_HAND_HOLDING;
}
@ -395,7 +396,7 @@ public class DeployerTileEntity extends KineticTileEntity {
float progress = 0;
int timerSpeed = getTimerSpeed();
AllBlockPartials handPose = getHandPose();
PartialModel handPose = getHandPose();
if (state == State.EXPANDING)
progress = 1 - (timer - partialTicks * timerSpeed) / 1000f;

View file

@ -7,6 +7,7 @@ import com.mojang.blaze3d.vertex.IVertexBuilder;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.foundation.render.PartialBufferer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.backend.FastRenderDispatcher;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
@ -30,17 +31,17 @@ public class EncasedFanRenderer extends KineticTileEntityRenderer {
if (FastRenderDispatcher.available(te.getWorld())) return;
Direction direction = te.getBlockState()
.get(FACING);
.get(FACING);
IVertexBuilder vb = buffer.getBuffer(RenderType.getCutoutMipped());
int lightBehind = WorldRenderer.getLightmapCoordinates(te.getWorld(), te.getPos().offset(direction.getOpposite()));
int lightInFront = WorldRenderer.getLightmapCoordinates(te.getWorld(), te.getPos().offset(direction));
SuperByteBuffer shaftHalf =
AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouth(te.getBlockState(), direction.getOpposite());
PartialBufferer.getFacing(AllBlockPartials.SHAFT_HALF, te.getBlockState(), direction.getOpposite());
SuperByteBuffer fanInner =
AllBlockPartials.ENCASED_FAN_INNER.renderOnDirectionalSouth(te.getBlockState(), direction.getOpposite());
PartialBufferer.getFacing(AllBlockPartials.ENCASED_FAN_INNER, te.getBlockState(), direction.getOpposite());
float time = AnimationTickHolder.getRenderTime(te.getWorld());
float speed = te.getSpeed() * 5;
if (speed > 0)

View file

@ -19,17 +19,17 @@ public class FanInstance extends KineticTileInstance<EncasedFanTileEntity> {
private final Direction opposite;
public FanInstance(InstancedTileRenderer<?> modelManager, EncasedFanTileEntity tile) {
super(modelManager, tile);
super(modelManager, tile);
direction = blockState.get(FACING);
direction = blockState.get(FACING);
opposite = direction.getOpposite();
shaft = AllBlockPartials.SHAFT_HALF.getModel(getRotatingMaterial(), blockState, opposite).createInstance();
fan = AllBlockPartials.ENCASED_FAN_INNER.getModel(getRotatingMaterial(), blockState, opposite).createInstance();
opposite = direction.getOpposite();
shaft = getRotatingMaterial().getModel(AllBlockPartials.SHAFT_HALF, blockState, opposite).createInstance();
fan = getRotatingMaterial().getModel(AllBlockPartials.ENCASED_FAN_INNER, blockState, opposite).createInstance();
setup(shaft);
setup(fan, getFanSpeed());
}
setup(shaft);
setup(fan, getFanSpeed());
}
private float getFanSpeed() {
float speed = tile.getSpeed() * 5;

View file

@ -46,24 +46,24 @@ public class FlyWheelInstance extends KineticTileInstance<FlywheelTileEntity> im
protected float lastAngle = Float.NaN;
public FlyWheelInstance(InstancedTileRenderer<?> modelManager, FlywheelTileEntity tile) {
super(modelManager, tile);
super(modelManager, tile);
facing = blockState.get(HORIZONTAL_FACING);
facing = blockState.get(HORIZONTAL_FACING);
shaft = setup(shaftModel().createInstance());
shaft = setup(shaftModel().createInstance());
BlockState referenceState = blockState.rotate(Rotation.CLOCKWISE_90);
wheel = AllBlockPartials.FLYWHEEL.getModel(getTransformMaterial(), referenceState, referenceState.get(HORIZONTAL_FACING)).createInstance();
BlockState referenceState = blockState.rotate(Rotation.CLOCKWISE_90);
wheel = getTransformMaterial().getModel(AllBlockPartials.FLYWHEEL, referenceState, referenceState.get(HORIZONTAL_FACING)).createInstance();
connection = FlywheelBlock.getConnection(blockState);
if (connection != null) {
connectedLeft = blockState.get(FlywheelBlock.CONNECTION) == FlywheelBlock.ConnectionState.LEFT;
connection = FlywheelBlock.getConnection(blockState);
if (connection != null) {
connectedLeft = blockState.get(FlywheelBlock.CONNECTION) == FlywheelBlock.ConnectionState.LEFT;
boolean flipAngle = connection.getAxis() == Direction.Axis.X ^ connection.getAxisDirection() == Direction.AxisDirection.NEGATIVE;
boolean flipAngle = connection.getAxis() == Direction.Axis.X ^ connection.getAxisDirection() == Direction.AxisDirection.NEGATIVE;
connectorAngleMult = flipAngle ? -1 : 1;
connectorAngleMult = flipAngle ? -1 : 1;
RenderMaterial<?, InstancedModel<ModelData>> mat = getTransformMaterial();
RenderMaterial<?, InstancedModel<ModelData>> mat = getTransformMaterial();
upperRotating = mat.getModel(AllBlockPartials.FLYWHEEL_UPPER_ROTATING, blockState).createInstance();
lowerRotating = mat.getModel(AllBlockPartials.FLYWHEEL_LOWER_ROTATING, blockState).createInstance();
@ -159,8 +159,9 @@ public class FlyWheelInstance extends KineticTileInstance<FlywheelTileEntity> im
}
protected InstancedModel<RotatingData> shaftModel() {
return AllBlockPartials.SHAFT_HALF.getModel(getRotatingMaterial(), blockState, facing.getOpposite());
}
Direction opposite = facing.getOpposite();
return getRotatingMaterial().getModel(AllBlockPartials.SHAFT_HALF, blockState, opposite);
}
protected void transformConnector(MatrixStacker ms, boolean upper, boolean rotating, float angle, boolean flip) {
float shift = upper ? 1 / 4f : -1 / 8f;

View file

@ -8,6 +8,7 @@ import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.content.contraptions.components.flywheel.FlywheelBlock.ConnectionState;
import com.simibubi.create.foundation.render.PartialBufferer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.backend.FastRenderDispatcher;
import com.simibubi.create.foundation.utility.AngleHelper;
@ -17,6 +18,7 @@ import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.WorldRenderer;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.util.Direction;
import net.minecraft.util.Direction.Axis;
import net.minecraft.util.Direction.AxisDirection;
@ -54,33 +56,39 @@ public class FlywheelRenderer extends KineticTileEntityRenderer {
boolean flip = blockState.get(FlywheelBlock.CONNECTION) == ConnectionState.LEFT;
transformConnector(
rotateToFacing(AllBlockPartials.FLYWHEEL_UPPER_ROTATING.renderOn(blockState), connection), true, true,
rotation, flip).light(light)
rotateToFacing(PartialBufferer.get(AllBlockPartials.FLYWHEEL_UPPER_ROTATING, blockState), connection), true, true,
rotation, flip).light(light)
.renderInto(ms, vb);
transformConnector(
rotateToFacing(AllBlockPartials.FLYWHEEL_LOWER_ROTATING.renderOn(blockState), connection), false, true,
rotation, flip).light(light)
rotateToFacing(PartialBufferer.get(AllBlockPartials.FLYWHEEL_LOWER_ROTATING, blockState), connection), false, true,
rotation, flip).light(light)
.renderInto(ms, vb);
transformConnector(rotateToFacing(AllBlockPartials.FLYWHEEL_UPPER_SLIDING.renderOn(blockState), connection),
true, false, rotation, flip).light(light)
transformConnector(rotateToFacing(PartialBufferer.get(AllBlockPartials.FLYWHEEL_UPPER_SLIDING, blockState), connection),
true, false, rotation, flip).light(light)
.renderInto(ms, vb);
transformConnector(rotateToFacing(AllBlockPartials.FLYWHEEL_LOWER_SLIDING.renderOn(blockState), connection),
false, false, rotation, flip).light(light)
transformConnector(rotateToFacing(PartialBufferer.get(AllBlockPartials.FLYWHEEL_LOWER_SLIDING, blockState), connection),
false, false, rotation, flip).light(light)
.renderInto(ms, vb);
}
SuperByteBuffer wheel = AllBlockPartials.FLYWHEEL.renderOnHorizontal(blockState.rotate(Rotation.CLOCKWISE_90));
renderFlywheel(te, ms, light, blockState, angle, vb);
}
private void renderFlywheel(KineticTileEntity te, MatrixStack ms, int light, BlockState blockState, float angle, IVertexBuilder vb) {
BlockState referenceState = blockState.rotate(Rotation.CLOCKWISE_90);
Direction facing = referenceState.get(BlockStateProperties.HORIZONTAL_FACING);
SuperByteBuffer wheel = PartialBufferer.getFacing(AllBlockPartials.FLYWHEEL, referenceState, facing);
kineticRotationTransform(wheel, te, blockState.get(HORIZONTAL_FACING)
.getAxis(), AngleHelper.rad(angle), light);
.getAxis(), AngleHelper.rad(angle), light);
wheel.renderInto(ms, vb);
}
@Override
protected SuperByteBuffer getRotatedModel(KineticTileEntity te) {
return AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouth(te.getBlockState(), te.getBlockState()
.get(HORIZONTAL_FACING)
.getOpposite());
return PartialBufferer.getFacing(AllBlockPartials.SHAFT_HALF, te.getBlockState(), te.getBlockState()
.get(BlockStateProperties.HORIZONTAL_FACING)
.getOpposite());
}
protected SuperByteBuffer transformConnector(SuperByteBuffer buffer, boolean upper, boolean rotating, float angle,

View file

@ -2,8 +2,8 @@ package com.simibubi.create.content.contraptions.components.flywheel.engine;
import javax.annotation.Nullable;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
import com.simibubi.create.foundation.render.backend.core.PartialModel;
import com.simibubi.create.foundation.utility.Iterate;
import net.minecraft.block.Block;
@ -37,12 +37,12 @@ public abstract class EngineBlock extends HorizontalBlock implements IWrenchable
public boolean hasTileEntity(BlockState state) {
return true;
}
@Override
public ActionResultType onWrenched(BlockState state, ItemUseContext context) {
return ActionResultType.FAIL;
}
@Override
public abstract TileEntity createTileEntity(BlockState state, IBlockReader world);
@ -88,14 +88,14 @@ public abstract class EngineBlock extends HorizontalBlock implements IWrenchable
return true;
}
public static BlockPos getBaseBlockPos(BlockState state, BlockPos pos) {
return pos.offset(state.get(HORIZONTAL_FACING).getOpposite());
}
@Nullable
@OnlyIn(Dist.CLIENT)
public abstract AllBlockPartials getFrameModel();
public abstract PartialModel getFrameModel();
protected abstract boolean isValidBaseBlock(BlockState baseBlock, IBlockReader world, BlockPos pos);

View file

@ -1,8 +1,8 @@
package com.simibubi.create.content.contraptions.components.flywheel.engine;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.foundation.render.backend.core.ModelData;
import com.simibubi.create.foundation.render.backend.core.PartialModel;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
import com.simibubi.create.foundation.render.backend.instancing.TileEntityInstance;
import com.simibubi.create.foundation.utility.AngleHelper;
@ -25,7 +25,7 @@ public class EngineInstance extends TileEntityInstance<EngineTileEntity> {
return;
EngineBlock engineBlock = (EngineBlock) block;
AllBlockPartials frame = engineBlock.getFrameModel();
PartialModel frame = engineBlock.getFrameModel();
Direction facing = blockState.get(BlockStateProperties.HORIZONTAL_FACING);

View file

@ -1,8 +1,9 @@
package com.simibubi.create.content.contraptions.components.flywheel.engine;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.foundation.render.PartialBufferer;
import com.simibubi.create.foundation.render.backend.FastRenderDispatcher;
import com.simibubi.create.foundation.render.backend.core.PartialModel;
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
import com.simibubi.create.foundation.utility.AngleHelper;
@ -29,16 +30,16 @@ public class EngineRenderer<T extends EngineTileEntity> extends SafeTileEntityRe
.getBlock();
if (block instanceof EngineBlock) {
EngineBlock engineBlock = (EngineBlock) block;
AllBlockPartials frame = engineBlock.getFrameModel();
PartialModel frame = engineBlock.getFrameModel();
if (frame != null) {
Direction facing = te.getBlockState()
.get(EngineBlock.HORIZONTAL_FACING);
.get(EngineBlock.HORIZONTAL_FACING);
float angle = AngleHelper.rad(AngleHelper.horizontalAngle(facing));
frame.renderOn(te.getBlockState())
.rotateCentered(Direction.UP, angle)
.translate(0, 0, -1)
.light(WorldRenderer.getLightmapCoordinates(te.getWorld(), te.getBlockState(), te.getPos()))
.renderInto(ms, buffer.getBuffer(RenderType.getSolid()));
PartialBufferer.get(frame, te.getBlockState())
.rotateCentered(Direction.UP, angle)
.translate(0, 0, -1)
.light(WorldRenderer.getLightmapCoordinates(te.getWorld(), te.getBlockState(), te.getPos()))
.renderInto(ms, buffer.getBuffer(RenderType.getSolid()));
}
}
}

View file

@ -5,6 +5,7 @@ import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllShapes;
import com.simibubi.create.AllTileEntities;
import com.simibubi.create.foundation.block.ITE;
import com.simibubi.create.foundation.render.backend.core.PartialModel;
import com.simibubi.create.foundation.utility.worldWrappers.WrappedWorld;
import net.minecraft.block.AbstractFurnaceBlock;
@ -41,7 +42,7 @@ public class FurnaceEngineBlock extends EngineBlock implements ITE<FurnaceEngine
}
@Override
public AllBlockPartials getFrameModel() {
public PartialModel getFrameModel() {
return AllBlockPartials.FURNACE_GENERATOR_FRAME;
}

View file

@ -18,5 +18,5 @@ public class MillstoneRenderer extends KineticTileEntityRenderer {
protected SuperByteBuffer getRotatedModel(KineticTileEntity te) {
return CreateClient.bufferCache.renderPartial(AllBlockPartials.MILLSTONE_COG, te.getBlockState());
}
}

View file

@ -5,6 +5,7 @@ import com.mojang.blaze3d.vertex.IVertexBuilder;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.foundation.render.PartialBufferer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.backend.FastRenderDispatcher;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
@ -40,7 +41,7 @@ public class MechanicalMixerRenderer extends KineticTileEntityRenderer {
IVertexBuilder vb = buffer.getBuffer(RenderType.getSolid());
SuperByteBuffer superBuffer = AllBlockPartials.SHAFTLESS_COGWHEEL.renderOn(blockState);
SuperByteBuffer superBuffer = PartialBufferer.get(AllBlockPartials.SHAFTLESS_COGWHEEL, blockState);
standardKineticRotationTransform(superBuffer, te, light).renderInto(ms, vb);
int packedLightmapCoords = WorldRenderer.getLightmapCoordinates(te.getWorld(), blockState, pos);
@ -49,16 +50,16 @@ public class MechanicalMixerRenderer extends KineticTileEntityRenderer {
float time = AnimationTickHolder.getRenderTime(te.getWorld());
float angle = ((time * speed * 6 / 10f) % 360) / 180 * (float) Math.PI;
SuperByteBuffer poleRender = AllBlockPartials.MECHANICAL_MIXER_POLE.renderOn(blockState);
SuperByteBuffer poleRender = PartialBufferer.get(AllBlockPartials.MECHANICAL_MIXER_POLE, blockState);
poleRender.translate(0, -renderedHeadOffset, 0)
.light(packedLightmapCoords)
.renderInto(ms, vb);
.light(packedLightmapCoords)
.renderInto(ms, vb);
SuperByteBuffer headRender = AllBlockPartials.MECHANICAL_MIXER_HEAD.renderOn(blockState);
SuperByteBuffer headRender = PartialBufferer.get(AllBlockPartials.MECHANICAL_MIXER_HEAD, blockState);
headRender.rotateCentered(Direction.UP, angle)
.translate(0, -renderedHeadOffset, 0)
.light(packedLightmapCoords)
.renderInto(ms, vb);
.translate(0, -renderedHeadOffset, 0)
.light(packedLightmapCoords)
.renderInto(ms, vb);
}
}

View file

@ -3,6 +3,7 @@ package com.simibubi.create.content.contraptions.components.motor;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.foundation.render.PartialBufferer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
@ -15,7 +16,7 @@ public class CreativeMotorRenderer extends KineticTileEntityRenderer {
@Override
protected SuperByteBuffer getRotatedModel(KineticTileEntity te) {
return AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouth(te.getBlockState());
return PartialBufferer.getFacing(AllBlockPartials.SHAFT_HALF, te.getBlockState());
}
}

View file

@ -1,9 +1,12 @@
package com.simibubi.create.content.contraptions.components.press;
import static net.minecraft.state.properties.BlockStateProperties.HORIZONTAL_FACING;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.foundation.render.PartialBufferer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.backend.FastRenderDispatcher;
@ -37,10 +40,10 @@ public class MechanicalPressRenderer extends KineticTileEntityRenderer {
int packedLightmapCoords = WorldRenderer.getLightmapCoordinates(te.getWorld(), blockState, pos);
float renderedHeadOffset = ((MechanicalPressTileEntity) te).getRenderedHeadOffset(partialTicks);
SuperByteBuffer headRender = AllBlockPartials.MECHANICAL_PRESS_HEAD.renderOnHorizontal(blockState);
SuperByteBuffer headRender = PartialBufferer.getFacing(AllBlockPartials.MECHANICAL_PRESS_HEAD, blockState, blockState.get(HORIZONTAL_FACING));
headRender.translate(0, -renderedHeadOffset, 0)
.light(packedLightmapCoords)
.renderInto(ms, buffer.getBuffer(RenderType.getSolid()));
.light(packedLightmapCoords)
.renderInto(ms, buffer.getBuffer(RenderType.getSolid()));
}
@Override

View file

@ -10,6 +10,7 @@ import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
import net.minecraft.block.BlockState;
import net.minecraft.util.Direction;
import net.minecraft.util.Rotation;
public class SawInstance extends SingleRotatingInstance {
@ -22,7 +23,8 @@ public class SawInstance extends SingleRotatingInstance {
protected InstancedModel<RotatingData> getModel() {
if (blockState.get(FACING).getAxis().isHorizontal()) {
BlockState referenceState = blockState.rotate(tile.getWorld(), tile.getPos(), Rotation.CLOCKWISE_180);
return AllBlockPartials.SHAFT_HALF.getModel(getRotatingMaterial(), referenceState, referenceState.get(FACING));
Direction facing = referenceState.get(FACING);
return getRotatingMaterial().getModel(AllBlockPartials.SHAFT_HALF, referenceState, facing);
} else {
return getRotatingMaterial().getModel(shaft());
}

View file

@ -9,8 +9,10 @@ import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher;
import com.simibubi.create.foundation.render.PartialBufferer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.backend.FastRenderDispatcher;
import com.simibubi.create.foundation.render.backend.core.PartialModel;
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringRenderer;
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
import com.simibubi.create.foundation.utility.AngleHelper;
@ -53,7 +55,7 @@ public class SawRenderer extends SafeTileEntityRenderer<SawTileEntity> {
protected void renderBlade(SawTileEntity te, MatrixStack ms, IRenderTypeBuffer buffer, int light) {
BlockState blockState = te.getBlockState();
SuperByteBuffer superBuffer;
AllBlockPartials partial;
PartialModel partial;
float speed = te.getSpeed();
ms.push();
@ -77,13 +79,13 @@ public class SawRenderer extends SafeTileEntityRenderer<SawTileEntity> {
if (!blockState.get(SawBlock.AXIS_ALONG_FIRST_COORDINATE))
MatrixStacker.of(ms)
.centre()
.rotateY(90)
.unCentre();
.centre()
.rotateY(90)
.unCentre();
}
superBuffer = partial.renderOnDirectionalSouth(blockState);
superBuffer = PartialBufferer.getFacing(partial, blockState);
superBuffer.light(light)
.renderInto(ms, buffer.getBuffer(RenderType.getCutoutMipped()));
.renderInto(ms, buffer.getBuffer(RenderType.getCutoutMipped()));
ms.pop();
}
@ -140,7 +142,7 @@ public class SawRenderer extends SafeTileEntityRenderer<SawTileEntity> {
protected SuperByteBuffer getRotatedModel(KineticTileEntity te) {
BlockState state = te.getBlockState();
if (state.get(FACING).getAxis().isHorizontal())
return AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouth(state.rotate(te.getWorld(), te.getPos(), Rotation.CLOCKWISE_180));
return PartialBufferer.getFacing(AllBlockPartials.SHAFT_HALF, state.rotate(te.getWorld(), te.getPos(), Rotation.CLOCKWISE_180));
return CreateClient.bufferCache.renderBlockIn(KineticTileEntityRenderer.KINETIC_TILE,
getRenderedBlockState(te));
}
@ -171,14 +173,14 @@ public class SawRenderer extends SafeTileEntityRenderer<SawTileEntity> {
if (SawBlock.isHorizontal(state)) {
if (shouldAnimate)
superBuffer = AllBlockPartials.SAW_BLADE_HORIZONTAL_ACTIVE.renderOn(state);
superBuffer = PartialBufferer.get(AllBlockPartials.SAW_BLADE_HORIZONTAL_ACTIVE, state);
else
superBuffer = AllBlockPartials.SAW_BLADE_HORIZONTAL_INACTIVE.renderOn(state);
superBuffer = PartialBufferer.get(AllBlockPartials.SAW_BLADE_HORIZONTAL_INACTIVE, state);
} else {
if (shouldAnimate)
superBuffer = AllBlockPartials.SAW_BLADE_VERTICAL_ACTIVE.renderOn(state);
superBuffer = PartialBufferer.get(AllBlockPartials.SAW_BLADE_VERTICAL_ACTIVE, state);
else
superBuffer = AllBlockPartials.SAW_BLADE_VERTICAL_INACTIVE.renderOn(state);
superBuffer = PartialBufferer.get(AllBlockPartials.SAW_BLADE_VERTICAL_INACTIVE, state);
}
for (MatrixStack m : matrixStacks) {

View file

@ -4,6 +4,7 @@ import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.BackHalfShaftInstance;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.foundation.render.backend.core.OrientedData;
import com.simibubi.create.foundation.render.backend.core.PartialModel;
import com.simibubi.create.foundation.render.backend.instancing.IDynamicInstance;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
import com.simibubi.create.foundation.utility.AngleHelper;
@ -31,7 +32,7 @@ public class BearingInstance<B extends KineticTileEntity & IBearingTileEntity> e
blockOrientation = getBlockStateOrientation(facing);
AllBlockPartials top =
PartialModel top =
bearing.isWoodenTop() ? AllBlockPartials.BEARING_TOP_WOODEN : AllBlockPartials.BEARING_TOP;
topInstance = getOrientedMaterial().getModel(top, blockState).createInstance();

View file

@ -4,8 +4,10 @@ import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.foundation.render.PartialBufferer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.backend.FastRenderDispatcher;
import com.simibubi.create.foundation.render.backend.core.PartialModel;
import com.simibubi.create.foundation.utility.AngleHelper;
import net.minecraft.client.renderer.IRenderTypeBuffer;
@ -30,27 +32,27 @@ public class BearingRenderer extends KineticTileEntityRenderer {
IBearingTileEntity bearingTe = (IBearingTileEntity) te;
final Direction facing = te.getBlockState()
.get(BlockStateProperties.FACING);
AllBlockPartials top =
bearingTe.isWoodenTop() ? AllBlockPartials.BEARING_TOP_WOODEN : AllBlockPartials.BEARING_TOP;
SuperByteBuffer superBuffer = top.renderOn(te.getBlockState());
.get(BlockStateProperties.FACING);
PartialModel top =
bearingTe.isWoodenTop() ? AllBlockPartials.BEARING_TOP_WOODEN : AllBlockPartials.BEARING_TOP;
SuperByteBuffer superBuffer = PartialBufferer.get(top, te.getBlockState());
float interpolatedAngle = bearingTe.getInterpolatedAngle(partialTicks - 1);
kineticRotationTransform(superBuffer, te, facing.getAxis(), (float) (interpolatedAngle / 180 * Math.PI), light);
if (facing.getAxis()
.isHorizontal())
.isHorizontal())
superBuffer.rotateCentered(Direction.UP,
AngleHelper.rad(AngleHelper.horizontalAngle(facing.getOpposite())));
AngleHelper.rad(AngleHelper.horizontalAngle(facing.getOpposite())));
superBuffer.rotateCentered(Direction.EAST, AngleHelper.rad(-90 - AngleHelper.verticalAngle(facing)));
superBuffer.renderInto(ms, buffer.getBuffer(RenderType.getSolid()));
}
@Override
protected SuperByteBuffer getRotatedModel(KineticTileEntity te) {
return AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouth(te.getBlockState(), te.getBlockState()
.get(BearingBlock.FACING)
.getOpposite());
return PartialBufferer.getFacing(AllBlockPartials.SHAFT_HALF, te.getBlockState(), te.getBlockState()
.get(BearingBlock.FACING)
.getOpposite());
}
}

View file

@ -4,6 +4,7 @@ import static net.minecraft.state.properties.BlockStateProperties.FACING;
import java.util.List;
import com.simibubi.create.AllSoundEvents;
import com.simibubi.create.content.contraptions.base.GeneratingKineticTileEntity;
import com.simibubi.create.content.contraptions.components.structureMovement.AbstractContraptionEntity;
import com.simibubi.create.content.contraptions.components.structureMovement.AssemblyException;
@ -168,6 +169,8 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity
movedContraption.setPosition(anchor.getX(), anchor.getY(), anchor.getZ());
movedContraption.setRotationAxis(direction.getAxis());
world.addEntity(movedContraption);
AllSoundEvents.CONTRAPTION_ASSEMBLE.playOnServer(world, pos);
running = true;
angle = 0;
@ -181,8 +184,10 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity
angle = 0;
if (isWindmill())
applyRotation();
if (movedContraption != null)
if (movedContraption != null) {
movedContraption.disassemble();
AllSoundEvents.CONTRAPTION_DISASSEMBLE.playOnServer(world, pos);
}
movedContraption = null;
running = false;

View file

@ -12,8 +12,10 @@ import com.simibubi.create.content.contraptions.components.structureMovement.Ori
import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance;
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionKineticRenderer;
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher;
import com.simibubi.create.foundation.render.PartialBufferer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.backend.FastRenderDispatcher;
import com.simibubi.create.foundation.render.backend.core.PartialModel;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
import net.minecraft.client.renderer.IRenderTypeBuffer;
@ -34,8 +36,8 @@ public class StabilizedBearingMovementBehaviour extends MovementBehaviour {
if (FastRenderDispatcher.available()) return;
Direction facing = context.state.get(BlockStateProperties.FACING);
AllBlockPartials top = AllBlockPartials.BEARING_TOP;
SuperByteBuffer superBuffer = top.renderOn(context.state);
PartialModel top = AllBlockPartials.BEARING_TOP;
SuperByteBuffer superBuffer = PartialBufferer.get(top, context.state);
float renderPartialTicks = AnimationTickHolder.getPartialTicks();
// rotate to match blockstate

View file

@ -2,6 +2,7 @@ package com.simibubi.create.content.contraptions.components.structureMovement.ch
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.foundation.render.PartialBufferer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.backend.FastRenderDispatcher;
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
@ -28,7 +29,7 @@ public class StickerRenderer extends SafeTileEntityRenderer<StickerTileEntity> {
if (FastRenderDispatcher.available(te.getWorld())) return;
BlockState state = te.getBlockState();
SuperByteBuffer head = AllBlockPartials.STICKER_HEAD.renderOn(state);
SuperByteBuffer head = PartialBufferer.get(AllBlockPartials.STICKER_HEAD, state);
float offset = te.piston.getValue(AnimationTickHolder.getPartialTicks(te.getWorld()));
if (te.getWorld() != Minecraft.getInstance().world && !te.isVirtual())
@ -36,9 +37,9 @@ public class StickerRenderer extends SafeTileEntityRenderer<StickerTileEntity> {
Direction facing = state.get(StickerBlock.FACING);
head.matrixStacker()
.nudge(te.hashCode())
.centre()
.rotateY(AngleHelper.horizontalAngle(facing))
.nudge(te.hashCode())
.centre()
.rotateY(AngleHelper.horizontalAngle(facing))
.rotateX(AngleHelper.verticalAngle(facing) + 90)
.unCentre()
.translate(0, (offset * offset) * 4 / 16f, 0);

View file

@ -4,6 +4,7 @@ import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.foundation.render.PartialBufferer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.backend.FastRenderDispatcher;
import com.simibubi.create.foundation.utility.AngleHelper;
@ -54,16 +55,16 @@ public class GantryCarriageRenderer extends KineticTileEntityRenderer {
if (facing == Direction.NORTH || facing == Direction.EAST)
angleForTe *= -1;
SuperByteBuffer cogs = AllBlockPartials.GANTRY_COGS.renderOn(state);
SuperByteBuffer cogs = PartialBufferer.get(AllBlockPartials.GANTRY_COGS, state);
cogs.matrixStacker()
.centre()
.rotateY(AngleHelper.horizontalAngle(facing))
.rotateX(facing == Direction.UP ? 0 : facing == Direction.DOWN ? 180 : 90)
.rotateY(alongFirst ^ facing.getAxis() == Axis.Z ? 90 : 0)
.translate(0, -9 / 16f, 0)
.multiply(Vector3f.POSITIVE_X.getRadialQuaternion(-angleForTe))
.translate(0, 9 / 16f, 0)
.unCentre();
.centre()
.rotateY(AngleHelper.horizontalAngle(facing))
.rotateX(facing == Direction.UP ? 0 : facing == Direction.DOWN ? 180 : 90)
.rotateY(alongFirst ^ facing.getAxis() == Axis.Z ? 90 : 0)
.translate(0, -9 / 16f, 0)
.multiply(Vector3f.POSITIVE_X.getRadialQuaternion(-angleForTe))
.translate(0, 9 / 16f, 0)
.unCentre();
cogs.light(light)
.renderInto(ms, buffer.getBuffer(RenderType.getSolid()));

View file

@ -1,6 +1,7 @@
package com.simibubi.create.content.contraptions.components.structureMovement.piston;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllSoundEvents;
import com.simibubi.create.content.contraptions.base.IRotate;
import com.simibubi.create.content.contraptions.components.structureMovement.AssemblyException;
import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionCollider;
@ -83,6 +84,8 @@ public class MechanicalPistonTileEntity extends LinearActuatorTileEntity {
applyContraptionPosition();
forceMove = true;
world.addEntity(movedContraption);
AllSoundEvents.CONTRAPTION_ASSEMBLE.playOnServer(world, pos);
}
@Override
@ -95,6 +98,7 @@ public class MechanicalPistonTileEntity extends LinearActuatorTileEntity {
if (movedContraption != null) {
applyContraptionPosition();
movedContraption.disassemble();
AllSoundEvents.CONTRAPTION_DISASSEMBLE.playOnServer(world, pos);
}
running = false;
movedContraption = null;

View file

@ -2,12 +2,13 @@ package com.simibubi.create.content.contraptions.components.structureMovement.pu
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.vertex.IVertexBuilder;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.IRotate;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.foundation.render.PartialBufferer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.backend.FastRenderDispatcher;
import com.simibubi.create.foundation.render.backend.core.PartialModel;
import com.simibubi.create.foundation.utility.AngleHelper;
import net.minecraft.block.BlockState;
@ -24,11 +25,11 @@ import net.minecraft.world.World;
public abstract class AbstractPulleyRenderer extends KineticTileEntityRenderer {
private AllBlockPartials halfRope;
private AllBlockPartials halfMagnet;
private PartialModel halfRope;
private PartialModel halfMagnet;
public AbstractPulleyRenderer(TileEntityRendererDispatcher dispatcher, AllBlockPartials halfRope,
AllBlockPartials halfMagnet) {
public AbstractPulleyRenderer(TileEntityRendererDispatcher dispatcher, PartialModel halfRope,
PartialModel halfMagnet) {
super(dispatcher);
this.halfRope = halfRope;
this.halfMagnet = halfMagnet;
@ -50,16 +51,16 @@ public abstract class AbstractPulleyRenderer extends KineticTileEntityRenderer {
boolean running = isRunning(te);
Axis rotationAxis = ((IRotate) te.getBlockState()
.getBlock()).getRotationAxis(te.getBlockState());
.getBlock()).getRotationAxis(te.getBlockState());
kineticRotationTransform(getRotatedCoil(te), te, rotationAxis, AngleHelper.rad(offset * 180), light)
.renderInto(ms, buffer.getBuffer(RenderType.getSolid()));
.renderInto(ms, buffer.getBuffer(RenderType.getSolid()));
World world = te.getWorld();
BlockState blockState = te.getBlockState();
BlockPos pos = te.getPos();
SuperByteBuffer halfMagnet = this.halfMagnet.renderOn(blockState);
SuperByteBuffer halfRope = this.halfRope.renderOn(blockState);
SuperByteBuffer halfMagnet = PartialBufferer.get(this.halfMagnet, blockState);
SuperByteBuffer halfRope = PartialBufferer.get(this.halfRope, blockState);
SuperByteBuffer magnet = renderMagnet(te);
SuperByteBuffer rope = renderRope(te);
@ -89,7 +90,7 @@ public abstract class AbstractPulleyRenderer extends KineticTileEntityRenderer {
protected abstract Axis getShaftAxis(KineticTileEntity te);
protected abstract AllBlockPartials getCoil();
protected abstract PartialModel getCoil();
protected abstract SuperByteBuffer renderRope(KineticTileEntity te);
@ -106,8 +107,7 @@ public abstract class AbstractPulleyRenderer extends KineticTileEntityRenderer {
protected SuperByteBuffer getRotatedCoil(KineticTileEntity te) {
BlockState blockState = te.getBlockState();
return getCoil().renderOnDirectionalSouth(blockState,
Direction.getFacingFromAxis(AxisDirection.POSITIVE, getShaftAxis(te)));
return PartialBufferer.getFacing(getCoil(), blockState, Direction.getFacingFromAxis(AxisDirection.POSITIVE, getShaftAxis(te)));
}
}

View file

@ -28,7 +28,7 @@ public class HosePulleyInstance extends AbstractPulleyInstance {
}
protected InstancedModel<OrientedData> getCoilModel() {
return AllBlockPartials.HOSE_COIL.getModel(getOrientedMaterial(), blockState, rotatingAbout);
return getOrientedMaterial().getModel(AllBlockPartials.HOSE_COIL, blockState, rotatingAbout);
}
protected InstancedModel<OrientedData> getHalfRopeModel() {

View file

@ -6,6 +6,7 @@ import com.simibubi.create.CreateClient;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.components.structureMovement.AbstractContraptionEntity;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.backend.core.PartialModel;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.util.Direction.Axis;
@ -24,7 +25,7 @@ public class PulleyRenderer extends AbstractPulleyRenderer {
}
@Override
protected AllBlockPartials getCoil() {
protected PartialModel getCoil() {
return AllBlockPartials.ROPE_COIL;
}

View file

@ -29,7 +29,7 @@ public class RopePulleyInstance extends AbstractPulleyInstance {
}
protected InstancedModel<OrientedData> getCoilModel() {
return AllBlockPartials.ROPE_COIL.getModel(getOrientedMaterial(), blockState, rotatingAbout);
return getOrientedMaterial().getModel(AllBlockPartials.ROPE_COIL, blockState, rotatingAbout);
}
protected InstancedModel<OrientedData> getHalfRopeModel() {

View file

@ -44,7 +44,6 @@ import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.vector.Matrix4f;
import net.minecraft.world.IBlockDisplayReader;
import net.minecraft.world.LightType;
import net.minecraft.world.World;
import net.minecraft.world.gen.feature.template.Template;
@ -52,57 +51,27 @@ import net.minecraftforge.client.ForgeHooksClient;
import net.minecraftforge.client.model.data.EmptyModelData;
public class ContraptionRenderDispatcher {
public static final Int2ObjectMap<RenderedContraption> renderers = new Int2ObjectOpenHashMap<>();
public static final Compartment<Pair<Contraption, Integer>> CONTRAPTION = new Compartment<>();
protected static PlacementSimulationWorld renderWorld;
public static final Int2ObjectMap<RenderedContraption> renderers = new Int2ObjectOpenHashMap<>();
public static final Compartment<Pair<Contraption, Integer>> CONTRAPTION = new Compartment<>();
protected static PlacementSimulationWorld renderWorld;
public static void notifyLightPacket(IBlockDisplayReader world, int chunkX, int chunkZ) {
for (RenderedContraption renderer : renderers.values()) {
renderer.getLighter().lightVolume.notifyLightPacket(world, chunkX, chunkZ);
}
}
public static void tick() {
if (Minecraft.getInstance().isGamePaused()) return;
public static void renderTileEntities(World world, Contraption c, MatrixStack ms, MatrixStack msLocal,
IRenderTypeBuffer buffer) {
PlacementSimulationWorld renderWorld = null;
if (Backend.canUseVBOs()) {
RenderedContraption renderer = getRenderer(world, c);
for (RenderedContraption contraption : renderers.values()) {
contraption.getLighter().tick(contraption);
renderWorld = renderer.renderWorld;
}
TileEntityRenderHelper.renderTileEntities(world, renderWorld, c.specialRenderedTileEntities, ms, msLocal, buffer);
contraption.kinetics.tick();
}
}
}
public static void beginFrame(ActiveRenderInfo info, double camX, double camY, double camZ) {
for (RenderedContraption renderer : renderers.values()) {
renderer.beginFrame(info, camX, camY, camZ);
}
}
public static void tick() {
if (Minecraft.getInstance().isGamePaused()) return;
for (RenderedContraption contraption : renderers.values()) {
contraption.getLighter().tick(contraption);
contraption.kinetics.tick();
}
}
private static RenderedContraption getRenderer(World world, Contraption c) {
int entityId = c.entity.getEntityId();
RenderedContraption contraption = renderers.get(entityId);
if (contraption == null) {
contraption = new RenderedContraption(world, c);
renderers.put(entityId, contraption);
}
return contraption;
}
public static void beginFrame(ActiveRenderInfo info, double camX, double camY, double camZ) {
for (RenderedContraption renderer : renderers.values()) {
renderer.beginFrame(info, camX, camY, camZ);
}
}
public static void renderLayer(RenderType layer, Matrix4f viewProjection, double camX, double camY, double camZ) {
public static void renderLayer(RenderType layer, Matrix4f viewProjection, double camX, double camY, double camZ) {
removeDeadContraptions();
if (renderers.isEmpty()) return;
@ -121,79 +90,110 @@ public class ContraptionRenderDispatcher {
if (Backend.canUseInstancing()) {
for (RenderedContraption renderer : renderers.values()) {
renderer.kinetics.render(layer, viewProjection, camX, camY, camZ, renderer::setup);
renderer.teardown();
}
}
renderer.kinetics.render(layer, viewProjection, camX, camY, camZ, renderer::setup);
renderer.teardown();
}
}
layer.endDrawing();
GL11.glDisable(GL13.GL_TEXTURE_3D);
GL13.glActiveTexture(GL40.GL_TEXTURE0);
}
layer.endDrawing();
GL11.glDisable(GL13.GL_TEXTURE_3D);
GL13.glActiveTexture(GL40.GL_TEXTURE0);
}
public static void removeDeadContraptions() {
renderers.values().removeIf(renderer -> {
if (renderer.isDead()) {
renderer.invalidate();
return true;
}
return false;
});
}
private static RenderedContraption getRenderer(World world, Contraption c) {
int entityId = c.entity.getEntityId();
RenderedContraption contraption = renderers.get(entityId);
public static void invalidateAll() {
for (RenderedContraption renderer : renderers.values()) {
renderer.invalidate();
}
if (contraption == null) {
contraption = new RenderedContraption(world, c);
renderers.put(entityId, contraption);
}
renderers.clear();
}
return contraption;
}
public static void render(AbstractContraptionEntity entity, MatrixStack ms, IRenderTypeBuffer buffers,
MatrixStack msLocal, Contraption contraption) {
if (Backend.canUseVBOs()) {
ContraptionRenderDispatcher.renderDynamic(entity.world, contraption, ms, msLocal, buffers);
} else {
ContraptionRenderDispatcher.renderDynamic(entity.world, contraption, ms, msLocal, buffers);
ContraptionRenderDispatcher.renderStructure(entity.world, contraption, ms, msLocal, buffers);
}
}
public static void render(AbstractContraptionEntity entity, MatrixStack ms, IRenderTypeBuffer buffers,
MatrixStack msLocal, Contraption contraption) {
if (Backend.canUseVBOs() && Backend.isFlywheelWorld(entity.world)) {
ContraptionRenderDispatcher.renderDynamic(entity.world, contraption, ms, msLocal, buffers);
} else {
ContraptionRenderDispatcher.renderDynamic(entity.world, contraption, ms, msLocal, buffers);
ContraptionRenderDispatcher.renderStructure(entity.world, contraption, ms, msLocal, buffers);
}
}
public static void renderDynamic(World world, Contraption c, MatrixStack ms, MatrixStack msLocal,
IRenderTypeBuffer buffer) {
renderTileEntities(world, c, ms, msLocal, buffer);
if (buffer instanceof IRenderTypeBuffer.Impl)
((IRenderTypeBuffer.Impl) buffer).draw();
renderActors(world, c, ms, msLocal, buffer);
}
public static void renderStructure(World world, Contraption c, MatrixStack ms, MatrixStack msLocal,
IRenderTypeBuffer buffer) {
SuperByteBufferCache bufferCache = CreateClient.bufferCache;
List<RenderType> blockLayers = RenderType.getBlockLayers();
public static void renderStructure(World world, Contraption c, MatrixStack ms, MatrixStack msLocal,
IRenderTypeBuffer buffer) {
SuperByteBufferCache bufferCache = CreateClient.bufferCache;
List<RenderType> blockLayers = RenderType.getBlockLayers();
buffer.getBuffer(RenderType.getSolid());
for (int i = 0; i < blockLayers.size(); i++) {
RenderType layer = blockLayers.get(i);
Pair<Contraption, Integer> key = Pair.of(c, i);
SuperByteBuffer contraptionBuffer = bufferCache.get(CONTRAPTION, key, () -> buildStructureBuffer(c, layer));
if (contraptionBuffer.isEmpty())
continue;
Matrix4f model = msLocal.peek()
.getModel();
contraptionBuffer.light(model)
.renderInto(ms, buffer.getBuffer(layer));
}
}
buffer.getBuffer(RenderType.getSolid());
for (int i = 0; i < blockLayers.size(); i++) {
RenderType layer = blockLayers.get(i);
Pair<Contraption, Integer> key = Pair.of(c, i);
SuperByteBuffer contraptionBuffer = bufferCache.get(CONTRAPTION, key, () -> buildStructureBuffer(c, layer));
if (contraptionBuffer.isEmpty())
continue;
Matrix4f model = msLocal.peek()
.getModel();
contraptionBuffer.light(model)
.renderInto(ms, buffer.getBuffer(layer));
}
}
public static void renderDynamic(World world, Contraption c, MatrixStack ms, MatrixStack msLocal,
IRenderTypeBuffer buffer) {
renderTileEntities(world, c, ms, msLocal, buffer);
if (buffer instanceof IRenderTypeBuffer.Impl)
((IRenderTypeBuffer.Impl) buffer).draw();
renderActors(world, c, ms, msLocal, buffer);
}
private static SuperByteBuffer buildStructureBuffer(Contraption c, RenderType layer) {
BufferBuilder builder = buildStructure(c, layer);
return new SuperByteBuffer(builder);
}
public static void renderTileEntities(World world, Contraption c, MatrixStack ms, MatrixStack msLocal,
IRenderTypeBuffer buffer) {
PlacementSimulationWorld renderWorld = null;
if (Backend.canUseVBOs() && Backend.isFlywheelWorld(world)) {
RenderedContraption renderer = getRenderer(world, c);
public static BufferBuilder buildStructure(Contraption c, RenderType layer) {
if (renderWorld == null || renderWorld.getWorld() != Minecraft.getInstance().world)
renderWorld = new PlacementSimulationWorld(Minecraft.getInstance().world);
renderWorld = renderer.renderWorld;
}
TileEntityRenderHelper.renderTileEntities(world, renderWorld, c.specialRenderedTileEntities, ms, msLocal, buffer);
}
protected static void renderActors(World world, Contraption c, MatrixStack ms, MatrixStack msLocal,
IRenderTypeBuffer buffer) {
MatrixStack[] matrixStacks = new MatrixStack[]{ms, msLocal};
for (Pair<Template.BlockInfo, MovementContext> actor : c.getActors()) {
MovementContext context = actor.getRight();
if (context == null)
continue;
if (context.world == null)
context.world = world;
Template.BlockInfo blockInfo = actor.getLeft();
for (MatrixStack m : matrixStacks) {
m.push();
MatrixStacker.of(m)
.translate(blockInfo.pos);
}
MovementBehaviour movementBehaviour = AllMovementBehaviours.of(blockInfo.state);
if (movementBehaviour != null)
movementBehaviour.renderInContraption(context, ms, msLocal, buffer);
for (MatrixStack m : matrixStacks)
m.pop();
}
}
private static SuperByteBuffer buildStructureBuffer(Contraption c, RenderType layer) {
BufferBuilder builder = buildStructure(c, layer);
return new SuperByteBuffer(builder);
}
public static BufferBuilder buildStructure(Contraption c, RenderType layer) {
if (renderWorld == null || renderWorld.getWorld() != Minecraft.getInstance().world)
renderWorld = new PlacementSimulationWorld(Minecraft.getInstance().world);
ForgeHooksClient.setRenderLayer(layer);
MatrixStack ms = new MatrixStack();
@ -232,31 +232,6 @@ public class ContraptionRenderDispatcher {
return builder;
}
protected static void renderActors(World world, Contraption c, MatrixStack ms, MatrixStack msLocal,
IRenderTypeBuffer buffer) {
MatrixStack[] matrixStacks = new MatrixStack[] { ms, msLocal };
for (Pair<Template.BlockInfo, MovementContext> actor : c.getActors()) {
MovementContext context = actor.getRight();
if (context == null)
continue;
if (context.world == null)
context.world = world;
Template.BlockInfo blockInfo = actor.getLeft();
for (MatrixStack m : matrixStacks) {
m.push();
MatrixStacker.of(m)
.translate(blockInfo.pos);
}
MovementBehaviour movementBehaviour = AllMovementBehaviours.of(blockInfo.state);
if (movementBehaviour != null)
movementBehaviour.renderInContraption(context, ms, msLocal, buffer);
for (MatrixStack m : matrixStacks)
m.pop();
}
}
public static int getLight(World world, float lx, float ly, float lz) {
BlockPos.Mutable pos = new BlockPos.Mutable();
float sky = 0, block = 0;
@ -292,14 +267,32 @@ public class ContraptionRenderDispatcher {
return packedLight;
}
public static int getLightOnContraption(MovementContext context) {
int entityId = context.contraption.entity.getEntityId();
public static int getLightOnContraption(MovementContext context) {
int entityId = context.contraption.entity.getEntityId();
RenderedContraption renderedContraption = renderers.get(entityId);
if (renderedContraption != null) {
return renderedContraption.renderWorld.getLightLevel(LightType.BLOCK, context.localPos);
} else {
return -1;
}
}
RenderedContraption renderedContraption = renderers.get(entityId);
if (renderedContraption != null) {
return renderedContraption.renderWorld.getLightLevel(LightType.BLOCK, context.localPos);
} else {
return -1;
}
}
public static void invalidateAll() {
for (RenderedContraption renderer : renderers.values()) {
renderer.invalidate();
}
renderers.clear();
}
public static void removeDeadContraptions() {
renderers.values().removeIf(renderer -> {
if (renderer.isDead()) {
renderer.invalidate();
return true;
}
return false;
});
}
}

View file

@ -8,6 +8,7 @@ import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.CreateClient;
import com.simibubi.create.content.contraptions.KineticDebugger;
import com.simibubi.create.content.contraptions.components.structureMovement.train.capability.MinecartController;
import com.simibubi.create.foundation.render.PartialBufferer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
import com.simibubi.create.foundation.utility.ColorHelper;
@ -36,7 +37,7 @@ public class CouplingRenderer {
c -> {
if (c.getFirst().hasContraptionCoupling(true))
return;
CouplingRenderer.renderCoupling(ms, buffer, c.map(MinecartController::cart));
CouplingRenderer.renderCoupling(ms, buffer, c.map(MinecartController::cart));
});
}
@ -47,37 +48,37 @@ public class CouplingRenderer {
public static void renderCoupling(MatrixStack ms, IRenderTypeBuffer buffer, Couple<AbstractMinecartEntity> carts) {
ClientWorld world = Minecraft.getInstance().world;
if (carts.getFirst() == null || carts.getSecond() == null)
return;
Couple<Integer> lightValues =
carts.map(c -> WorldRenderer.getLightmapCoordinates(world, new BlockPos(c.getBoundingBox()
.getCenter())));
Vector3d center = carts.getFirst()
.getPositionVec()
.add(carts.getSecond()
.getPositionVec())
.scale(.5f);
.getPositionVec()
.add(carts.getSecond()
.getPositionVec())
.scale(.5f);
Couple<CartEndpoint> transforms = carts.map(c -> getSuitableCartEndpoint(c, center));
BlockState renderState = Blocks.AIR.getDefaultState();
IVertexBuilder builder = buffer.getBuffer(RenderType.getSolid());
SuperByteBuffer attachment = AllBlockPartials.COUPLING_ATTACHMENT.renderOn(renderState);
SuperByteBuffer ring = AllBlockPartials.COUPLING_RING.renderOn(renderState);
SuperByteBuffer connector = AllBlockPartials.COUPLING_CONNECTOR.renderOn(renderState);
SuperByteBuffer attachment = PartialBufferer.get(AllBlockPartials.COUPLING_ATTACHMENT, renderState);
SuperByteBuffer ring = PartialBufferer.get(AllBlockPartials.COUPLING_RING, renderState);
SuperByteBuffer connector = PartialBufferer.get(AllBlockPartials.COUPLING_CONNECTOR, renderState);
Vector3d zero = Vector3d.ZERO;
Vector3d firstEndpoint = transforms.getFirst()
.apply(zero);
.apply(zero);
Vector3d secondEndpoint = transforms.getSecond()
.apply(zero);
.apply(zero);
Vector3d endPointDiff = secondEndpoint.subtract(firstEndpoint);
double connectorYaw = -Math.atan2(endPointDiff.z, endPointDiff.x) * 180.0D / Math.PI;
double connectorPitch = Math.atan2(endPointDiff.y, endPointDiff.mul(1, 0, 1)
.length()) * 180 / Math.PI;
.length()) * 180 / Math.PI;
MatrixStacker msr = MatrixStacker.of(ms);
carts.forEachWithContext((cart, isFirst) -> {

View file

@ -10,6 +10,7 @@ import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
import net.minecraft.block.BlockState;
import net.minecraft.util.Direction;
public class PumpCogInstance extends SingleRotatingInstance {
@ -19,7 +20,8 @@ public class PumpCogInstance extends SingleRotatingInstance {
@Override
protected InstancedModel<RotatingData> getModel() {
BlockState referenceState = tile.getBlockState();
return AllBlockPartials.MECHANICAL_PUMP_COG.getModel(getRotatingMaterial(), referenceState, referenceState.get(FACING));
}
BlockState referenceState = tile.getBlockState();
Direction facing = referenceState.get(FACING);
return getRotatingMaterial().getModel(AllBlockPartials.MECHANICAL_PUMP_COG, referenceState, facing);
}
}

View file

@ -4,6 +4,7 @@ import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.foundation.render.PartialBufferer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.MatrixStacker;
@ -34,17 +35,17 @@ public class PumpRenderer extends KineticTileEntityRenderer {
float angle = MathHelper.lerp(pump.arrowDirection.getValue(partialTicks), 0, 90) - 90;
for (float yRot : new float[] { 0, 90 }) {
ms.push();
SuperByteBuffer arrow = AllBlockPartials.MECHANICAL_PUMP_ARROW.renderOn(blockState);
SuperByteBuffer arrow = PartialBufferer.get(AllBlockPartials.MECHANICAL_PUMP_ARROW, blockState);
Direction direction = blockState.get(PumpBlock.FACING);
MatrixStacker.of(ms)
.centre()
.rotateY(AngleHelper.horizontalAngle(direction) + 180)
.rotateX(-AngleHelper.verticalAngle(direction) - 90)
.unCentre()
.translate(rotationOffset)
.rotateY(yRot)
.rotateZ(angle)
.translateBack(rotationOffset);
.centre()
.rotateY(AngleHelper.horizontalAngle(direction) + 180)
.rotateX(-AngleHelper.verticalAngle(direction) - 90)
.unCentre()
.translate(rotationOffset)
.rotateY(yRot)
.rotateZ(angle)
.translateBack(rotationOffset);
arrow.light(light).renderInto(ms, buffer.getBuffer(RenderType.getSolid()));
ms.pop();
}
@ -52,7 +53,7 @@ public class PumpRenderer extends KineticTileEntityRenderer {
@Override
protected SuperByteBuffer getRotatedModel(KineticTileEntity te) {
return AllBlockPartials.MECHANICAL_PUMP_COG.renderOnDirectionalSouth(te.getBlockState());
return PartialBufferer.getFacing(AllBlockPartials.MECHANICAL_PUMP_COG, te.getBlockState());
}
}

View file

@ -3,7 +3,9 @@ package com.simibubi.create.content.contraptions.fluids.actors;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.components.structureMovement.pulley.AbstractPulleyRenderer;
import com.simibubi.create.foundation.render.PartialBufferer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.backend.core.PartialModel;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.util.Direction.Axis;
@ -23,18 +25,18 @@ public class HosePulleyRenderer extends AbstractPulleyRenderer {
}
@Override
protected AllBlockPartials getCoil() {
protected PartialModel getCoil() {
return AllBlockPartials.HOSE_COIL;
}
@Override
protected SuperByteBuffer renderRope(KineticTileEntity te) {
return AllBlockPartials.HOSE.renderOn(te.getBlockState());
return PartialBufferer.get(AllBlockPartials.HOSE, te.getBlockState());
}
@Override
protected SuperByteBuffer renderMagnet(KineticTileEntity te) {
return AllBlockPartials.HOSE_MAGNET.renderOn(te.getBlockState());
return PartialBufferer.get(AllBlockPartials.HOSE_MAGNET, te.getBlockState());
}
@Override

View file

@ -3,6 +3,8 @@ package com.simibubi.create.content.contraptions.fluids.actors;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.foundation.fluid.FluidRenderer;
import com.simibubi.create.foundation.render.PartialBufferer;
import com.simibubi.create.foundation.render.backend.core.PartialModel;
import com.simibubi.create.foundation.tileEntity.behaviour.fluid.SmartFluidTankBehaviour;
import com.simibubi.create.foundation.tileEntity.behaviour.fluid.SmartFluidTankBehaviour.TankSegment;
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
@ -20,7 +22,7 @@ public class SpoutRenderer extends SafeTileEntityRenderer<SpoutTileEntity> {
super(dispatcher);
}
static final AllBlockPartials[] BITS =
static final PartialModel[] BITS =
{ AllBlockPartials.SPOUT_TOP, AllBlockPartials.SPOUT_MIDDLE, AllBlockPartials.SPOUT_BOTTOM };
@Override
@ -69,10 +71,10 @@ public class SpoutRenderer extends SafeTileEntityRenderer<SpoutTileEntity> {
squeeze = -1;
ms.push();
for (AllBlockPartials bit : BITS) {
bit.renderOn(te.getBlockState())
.light(light)
.renderInto(ms, buffer.getBuffer(RenderType.getSolid()));
for (PartialModel bit : BITS) {
PartialBufferer.get(bit, te.getBlockState())
.light(light)
.renderInto(ms, buffer.getBuffer(RenderType.getSolid()));
ms.translate(0, -3 * squeeze / 32f, 0);
}
ms.pop();

View file

@ -4,6 +4,7 @@ import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.foundation.render.PartialBufferer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.backend.FastRenderDispatcher;
import com.simibubi.create.foundation.utility.AngleHelper;
@ -31,7 +32,7 @@ public class FluidValveRenderer extends KineticTileEntityRenderer {
super.renderSafe(te, partialTicks, ms, buffer, light, overlay);
BlockState blockState = te.getBlockState();
SuperByteBuffer pointer = AllBlockPartials.FLUID_VALVE_POINTER.renderOn(blockState);
SuperByteBuffer pointer = PartialBufferer.get(AllBlockPartials.FLUID_VALVE_POINTER, blockState);
Direction facing = blockState.get(FluidValveBlock.FACING);
if (!(te instanceof FluidValveTileEntity))

View file

@ -3,31 +3,19 @@ package com.simibubi.create.content.contraptions.fluids.recipe;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.client.resources.ReloadListener;
import com.simibubi.create.foundation.utility.ISimpleReloadListener;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.profiler.IProfiler;
import net.minecraft.resources.IResourceManager;
public class FluidTransferRecipes {
public static List<ItemStack> POTION_ITEMS = new ArrayList<>();
public static List<Item> FILLED_BUCKETS = new ArrayList<>();
public static final ReloadListener<Object> LISTENER = new ReloadListener<Object>() {
@Override
protected Object prepare(IResourceManager p_212854_1_, IProfiler p_212854_2_) {
return new Object();
}
@Override
protected void apply(Object p_212853_1_, IResourceManager p_212853_2_, IProfiler p_212853_3_) {
POTION_ITEMS.clear();
FILLED_BUCKETS.clear();
}
public static final ISimpleReloadListener LISTENER = (resourceManager, profiler) -> {
POTION_ITEMS.clear();
FILLED_BUCKETS.clear();
};
}

View file

@ -15,8 +15,8 @@ import com.simibubi.create.content.contraptions.fluids.potion.PotionFluidHandler
import com.simibubi.create.content.contraptions.processing.HeatCondition;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder;
import com.simibubi.create.foundation.fluid.FluidIngredient;
import com.simibubi.create.foundation.utility.ISimpleReloadListener;
import net.minecraft.client.resources.ReloadListener;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.Ingredient;
@ -24,8 +24,6 @@ import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionBrewing;
import net.minecraft.potion.PotionUtils;
import net.minecraft.potion.Potions;
import net.minecraft.profiler.IProfiler;
import net.minecraft.resources.IResourceManager;
import net.minecraftforge.common.brewing.BrewingRecipeRegistry;
import net.minecraftforge.common.brewing.IBrewingRecipe;
import net.minecraftforge.common.brewing.VanillaBrewingRecipe;
@ -133,27 +131,17 @@ public class PotionMixingRecipeManager {
.collect(Collectors.toList());
}
public static final ReloadListener<Object> LISTENER = new ReloadListener<Object>() {
@Override
protected Object prepare(IResourceManager p_212854_1_, IProfiler p_212854_2_) {
return new Object();
}
@Override
protected void apply(Object p_212853_1_, IResourceManager p_212853_2_, IProfiler p_212853_3_) {
ALL.clear();
getAllBrewingRecipes().forEach(recipe -> {
for (Ingredient ingredient : recipe.getIngredients()) {
for (ItemStack itemStack : ingredient.getMatchingStacks()) {
ALL.computeIfAbsent(itemStack.getItem(), t -> new ArrayList<>())
.add(recipe);
return;
}
public static final ISimpleReloadListener LISTENER = (resourceManager, profiler) -> {
ALL.clear();
getAllBrewingRecipes().forEach(recipe -> {
for (Ingredient ingredient : recipe.getIngredients()) {
for (ItemStack itemStack : ingredient.getMatchingStacks()) {
ALL.computeIfAbsent(itemStack.getItem(), t -> new ArrayList<>())
.add(recipe);
return;
}
});
}
}
});
};
}

View file

@ -2,12 +2,12 @@ package com.simibubi.create.content.contraptions.goggles;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.foundation.block.render.WrappedBakedModel;
import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.model.ItemCameraTransforms.TransformType;
import net.minecraftforge.client.model.BakedModelWrapper;
public class GogglesModel extends WrappedBakedModel {
public class GogglesModel extends BakedModelWrapper<IBakedModel> {
public GogglesModel(IBakedModel template) {
super(template);
@ -21,4 +21,4 @@ public class GogglesModel extends WrappedBakedModel {
return super.handlePerspective(cameraTransformType, mat);
}
}
}

View file

@ -3,7 +3,9 @@ package com.simibubi.create.content.contraptions.processing.burner;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock.HeatLevel;
import com.simibubi.create.foundation.render.PartialBufferer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.backend.core.PartialModel;
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
@ -30,11 +32,11 @@ public class BlazeBurnerRenderer extends SafeTileEntityRenderer<BlazeBurnerTileE
float renderTick = AnimationTickHolder.getRenderTime(te.getWorld()) + (te.hashCode() % 13) * 16f;
float offset = (MathHelper.sin((float) ((renderTick / 16f) % (2 * Math.PI))) + .5f) / 16f;
AllBlockPartials blazeModel = AllBlockPartials.BLAZES.get(heatLevel);
SuperByteBuffer blazeBuffer = blazeModel.renderOn(te.getBlockState());
PartialModel blazeModel = AllBlockPartials.BLAZES.get(heatLevel);
SuperByteBuffer blazeBuffer = PartialBufferer.get(blazeModel, te.getBlockState());
blazeBuffer.rotateCentered(Direction.UP, AngleHelper.rad(te.headAngle.getValue(partialTicks)));
blazeBuffer.translate(0, offset, 0);
blazeBuffer.light(0xF000F0)
.renderInto(ms, buffer.getBuffer(RenderType.getSolid()));
.renderInto(ms, buffer.getBuffer(RenderType.getSolid()));
}
}

View file

@ -5,6 +5,7 @@ import com.mojang.blaze3d.vertex.IVertexBuilder;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.CreateClient;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.foundation.render.PartialBufferer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.backend.FastRenderDispatcher;
import com.simibubi.create.foundation.tileEntity.renderer.SmartTileEntityRenderer;
@ -43,10 +44,10 @@ public class SpeedControllerRenderer extends SmartTileEntityRenderer<SpeedContro
BlockState blockState = tileEntityIn.getBlockState();
boolean alongX = blockState.get(SpeedControllerBlock.HORIZONTAL_AXIS) == Axis.X;
SuperByteBuffer bracket = AllBlockPartials.SPEED_CONTROLLER_BRACKET.renderOn(blockState);
SuperByteBuffer bracket = PartialBufferer.get(AllBlockPartials.SPEED_CONTROLLER_BRACKET, blockState);
bracket.translate(0, 1, 0);
bracket.rotateCentered(Direction.UP,
(float) (alongX ? Math.PI : Math.PI / 2));
(float) (alongX ? Math.PI : Math.PI / 2));
bracket.light(WorldRenderer.getLightmapCoordinates(world, pos.up()));
bracket.renderInto(ms, builder);
}

View file

@ -10,6 +10,7 @@ import com.simibubi.create.content.contraptions.base.KineticRenderMaterials;
import com.simibubi.create.content.contraptions.base.KineticTileInstance;
import com.simibubi.create.content.contraptions.base.RotatingData;
import com.simibubi.create.foundation.block.render.SpriteShiftEntry;
import com.simibubi.create.foundation.render.backend.core.PartialModel;
import com.simibubi.create.foundation.render.backend.instancing.InstanceData;
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
@ -57,7 +58,7 @@ public class BeltInstance extends KineticTileInstance<BeltTileEntity> {
DyeColor color = tile.color.orElse(null);
for (boolean bottom : Iterate.trueAndFalse) {
AllBlockPartials beltPartial = BeltRenderer.getBeltPartial(diagonal, start, end, bottom);
PartialModel beltPartial = BeltRenderer.getBeltPartial(diagonal, start, end, bottom);
SpriteShiftEntry spriteShift = BeltRenderer.getSpriteShiftEntry(color, diagonal, bottom);
InstancedModel<BeltData> beltModel = modelManager.getMaterial(KineticRenderMaterials.BELTS).getModel(beltPartial, blockState);

View file

@ -3,12 +3,12 @@ package com.simibubi.create.content.contraptions.relays.belt;
import static com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity.CASING_PROPERTY;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import com.simibubi.create.AllSpriteShifts;
import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity.CasingType;
import com.simibubi.create.foundation.block.render.QuadHelper;
import com.simibubi.create.foundation.block.render.SpriteShiftEntry;
import com.simibubi.create.foundation.render.SuperByteBuffer;
@ -30,14 +30,16 @@ public class BeltModel extends BakedModelWrapper<IBakedModel> {
@Override
public List<BakedQuad> getQuads(BlockState state, Direction side, Random rand, IModelData extraData) {
List<BakedQuad> quads = new ArrayList<>(super.getQuads(state, side, rand, extraData));
List<BakedQuad> quads = super.getQuads(state, side, rand, extraData);
if (!extraData.hasProperty(CASING_PROPERTY))
return quads;
CasingType type = extraData.getData(CASING_PROPERTY);
if (type == CasingType.NONE || type == CasingType.BRASS)
return quads;
quads = new ArrayList<>(quads);
SpriteShiftEntry spriteShift = AllSpriteShifts.ANDESIDE_BELT_CASING;
VertexFormat format = DefaultVertexFormats.BLOCK;
for (int i = 0; i < quads.size(); i++) {
BakedQuad quad = quads.get(i);
@ -48,10 +50,7 @@ public class BeltModel extends BakedModelWrapper<IBakedModel> {
TextureAtlasSprite original = quad.getSprite();
TextureAtlasSprite target = spriteShift.getTarget();
BakedQuad newQuad = new BakedQuad(Arrays.copyOf(quad.getVertexData(), quad.getVertexData().length),
quad.getTintIndex(), quad.getFace(), target, quad.hasShade());
VertexFormat format = DefaultVertexFormats.BLOCK;
BakedQuad newQuad = QuadHelper.clone(quad);
int[] vertexData = newQuad.getVertexData();
for (int vertex = 0; vertex < vertexData.length; vertex += format.getIntegerSize()) {
@ -61,9 +60,9 @@ public class BeltModel extends BakedModelWrapper<IBakedModel> {
float u = Float.intBitsToFloat(vertexData[uIndex]);
float v = Float.intBitsToFloat(vertexData[vIndex]);
vertexData[uIndex] =
Float.floatToRawIntBits(target.getInterpolatedU((SuperByteBuffer.getUnInterpolatedU(original, u))));
Float.floatToRawIntBits(target.getInterpolatedU(SuperByteBuffer.getUnInterpolatedU(original, u)));
vertexData[vIndex] =
Float.floatToRawIntBits(target.getInterpolatedV((SuperByteBuffer.getUnInterpolatedV(original, v))));
Float.floatToRawIntBits(target.getInterpolatedV(SuperByteBuffer.getUnInterpolatedV(original, v)));
}
quads.set(i, newQuad);

View file

@ -1,6 +1,7 @@
package com.simibubi.create.content.contraptions.relays.belt;
import java.util.Random;
import java.util.function.Supplier;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.vertex.IVertexBuilder;
@ -11,9 +12,11 @@ import com.simibubi.create.CreateClient;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.content.contraptions.relays.belt.transport.TransportedItemStack;
import com.simibubi.create.foundation.block.render.SpriteShiftEntry;
import com.simibubi.create.foundation.render.PartialBufferer;
import com.simibubi.create.foundation.render.ShadowRenderHelper;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.backend.FastRenderDispatcher;
import com.simibubi.create.foundation.render.backend.core.PartialModel;
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
@ -93,10 +96,10 @@ public class BeltRenderer extends SafeTileEntityRenderer<BeltTileEntity> {
for (boolean bottom : Iterate.trueAndFalse) {
AllBlockPartials beltPartial = getBeltPartial(diagonal, start, end, bottom);
PartialModel beltPartial = getBeltPartial(diagonal, start, end, bottom);
SuperByteBuffer beltBuffer = beltPartial.renderOn(blockState)
.light(light);
SuperByteBuffer beltBuffer = PartialBufferer.get(beltPartial, blockState)
.light(light);
SpriteShiftEntry spriteShift = getSpriteShiftEntry(color, diagonal, bottom);
@ -127,18 +130,20 @@ public class BeltRenderer extends SafeTileEntityRenderer<BeltTileEntity> {
}
if (te.hasPulley()) {
// TODO 1.15 find a way to cache this model matrix computation
MatrixStack modelTransform = new MatrixStack();
Direction dir = blockState.get(BeltBlock.HORIZONTAL_FACING).rotateY();
if (sideways) dir = Direction.UP;
msr = MatrixStacker.of(modelTransform);
msr.centre();
if (dir.getAxis() == Axis.X) msr.rotateY(90);
if (dir.getAxis() == Axis.Y) msr.rotateX(90);
msr.rotateX(90);
msr.unCentre();
Direction dir = sideways ? Direction.UP : blockState.get(BeltBlock.HORIZONTAL_FACING).rotateY();
SuperByteBuffer superBuffer = CreateClient.bufferCache.renderDirectionalPartial(AllBlockPartials.BELT_PULLEY, blockState, dir, modelTransform);
Supplier<MatrixStack> matrixStackSupplier = () -> {
MatrixStack stack = new MatrixStack();
MatrixStacker stacker = MatrixStacker.of(stack);
stacker.centre();
if (dir.getAxis() == Axis.X) stacker.rotateY(90);
if (dir.getAxis() == Axis.Y) stacker.rotateX(90);
stacker.rotateX(90);
stacker.unCentre();
return stack;
};
SuperByteBuffer superBuffer = CreateClient.bufferCache.renderDirectionalPartial(AllBlockPartials.BELT_PULLEY, blockState, dir, matrixStackSupplier);
KineticTileEntityRenderer.standardKineticRotationTransform(superBuffer, te, light).renderInto(ms, vb);
}
}
@ -155,7 +160,7 @@ public class BeltRenderer extends SafeTileEntityRenderer<BeltTileEntity> {
: bottom ? AllSpriteShifts.BELT_OFFSET : AllSpriteShifts.BELT;
}
public static AllBlockPartials getBeltPartial(boolean diagonal, boolean start, boolean end, boolean bottom) {
public static PartialModel getBeltPartial(boolean diagonal, boolean start, boolean end, boolean bottom) {
if (diagonal) {
if (start) return AllBlockPartials.BELT_DIAGONAL_START;
if (end) return AllBlockPartials.BELT_DIAGONAL_END;

View file

@ -495,7 +495,7 @@ public class BeltTileEntity extends KineticTileEntity implements LightUpdateList
return empty;
}
public static ModelProperty<CasingType> CASING_PROPERTY = new ModelProperty<>();
public static final ModelProperty<CasingType> CASING_PROPERTY = new ModelProperty<>();
@Override
public IModelData getModelData() {

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