mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-12-14 17:33:52 +01:00
Merge branch 'mc1.18/dev' into mc1.18/global-railways
This commit is contained in:
commit
9db9c3f710
183 changed files with 4429 additions and 3570 deletions
2
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
2
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
|
@ -49,6 +49,8 @@ body:
|
|||
label: Mod Version
|
||||
description: The version of the mod you were using when the bug occured
|
||||
options:
|
||||
- "0.4.0f"
|
||||
- "0.4.0e"
|
||||
- "0.4.0d"
|
||||
- "0.4.0c"
|
||||
- "0.4.0b"
|
||||
|
|
|
@ -48,8 +48,6 @@ minecraft {
|
|||
arg '-mixin.config=flywheel.mixins.json'
|
||||
//jvmArgs '-XX:+UnlockCommercialFeatures' // uncomment for profiling
|
||||
property 'forge.logging.console.level', 'info'
|
||||
property 'mixin.env.remapRefMap', 'true'
|
||||
property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg"
|
||||
mods {
|
||||
create {
|
||||
source sourceSets.main
|
||||
|
@ -67,8 +65,6 @@ minecraft {
|
|||
workingDirectory project.file('run/server')
|
||||
arg '-mixin.config=create.mixins.json'
|
||||
property 'forge.logging.console.level', 'info'
|
||||
property 'mixin.env.remapRefMap', 'true'
|
||||
property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg"
|
||||
mods {
|
||||
create {
|
||||
source sourceSets.main
|
||||
|
@ -80,8 +76,6 @@ minecraft {
|
|||
workingDirectory project.file('run')
|
||||
property 'forge.logging.markers', 'REGISTRIES,REGISTRYDUMP'
|
||||
property 'forge.logging.console.level', 'debug'
|
||||
property 'mixin.env.remapRefMap', 'true'
|
||||
property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg"
|
||||
args '--mod', 'create', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources')
|
||||
mods {
|
||||
create {
|
||||
|
|
|
@ -4,9 +4,9 @@ org.gradle.jvmargs = -Xmx3G
|
|||
org.gradle.daemon = false
|
||||
|
||||
# mod version info
|
||||
mod_version = 0.4d
|
||||
minecraft_version = 1.18.1
|
||||
forge_version = 39.0.59
|
||||
mod_version = 0.4.1
|
||||
minecraft_version = 1.18.2
|
||||
forge_version = 40.0.19
|
||||
|
||||
# build dependency versions
|
||||
forgegradle_version = 5.1.+
|
||||
|
@ -15,13 +15,13 @@ mixin_version = 0.8.5
|
|||
librarian_version = 1.+
|
||||
shadow_version = 7.1.0
|
||||
cursegradle_version = 1.4.0
|
||||
parchment_version = 2022.01.23
|
||||
parchment_version = 2022.03.13
|
||||
|
||||
# dependency versions
|
||||
registrate_version = MC1.18-1.0.21
|
||||
flywheel_version = 1.18-0.6.1.62
|
||||
jei_minecraft_version = 1.18.1
|
||||
jei_version = 9.3.2.92
|
||||
registrate_version = MC1.18.2-1.0.24
|
||||
flywheel_version = 1.18-0.6.2.64
|
||||
jei_minecraft_version = 1.18.2
|
||||
jei_version = 9.5.3.143
|
||||
|
||||
# curseforge information
|
||||
projectId = 328085
|
||||
|
|
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Binary file not shown.
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
|
@ -1,5 +1,5 @@
|
|||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.1-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.1-bin.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
|
10
gradlew
vendored
10
gradlew
vendored
|
@ -1,7 +1,7 @@
|
|||
#!/bin/sh
|
||||
|
||||
#
|
||||
# Copyright © 2015-2021 the original authors.
|
||||
# Copyright © 2015-2021 the original authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
|
@ -32,10 +32,10 @@
|
|||
# Busybox and similar reduced shells will NOT work, because this script
|
||||
# requires all of these POSIX shell features:
|
||||
# * functions;
|
||||
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
|
||||
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
|
||||
# * compound commands having a testable exit status, especially «case»;
|
||||
# * various built-in commands including «command», «set», and «ulimit».
|
||||
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
|
||||
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
|
||||
# * compound commands having a testable exit status, especially «case»;
|
||||
# * various built-in commands including «command», «set», and «ulimit».
|
||||
#
|
||||
# Important for patching:
|
||||
#
|
||||
|
|
|
@ -540,22 +540,22 @@ bf2b0310500213ff853c748c236eb5d01f61658e assets/create/blockstates/yellow_toolbo
|
|||
6801fa1f466f172700e573e5b8ee8ee5f9ca4583 assets/create/blockstates/yellow_valve_handle.json
|
||||
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
|
||||
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
|
||||
255e47ab7894ba35851a2f34c82be3dc9c9e8784 assets/create/lang/en_ud.json
|
||||
e6698e4672c04cf7b8251e2267b1fe3d6c60e50c assets/create/lang/en_us.json
|
||||
dfd5234276f508edfb10160fa2b7859363acc313 assets/create/lang/unfinished/de_de.json
|
||||
c23ca905e7aa9983057c970d9e799b4ba91a9acd assets/create/lang/unfinished/es_cl.json
|
||||
1781ed3854e04116319528699b4edee9cff4a435 assets/create/lang/unfinished/es_es.json
|
||||
24d421795a67a19efd3a092b693c2397b3b84d9b assets/create/lang/unfinished/fr_fr.json
|
||||
50107fc09f422527f20b0a2ddee7e961540e4f6c assets/create/lang/unfinished/it_it.json
|
||||
570cc561fcb7f1839212e7ba3e1a68886874c846 assets/create/lang/unfinished/ja_jp.json
|
||||
f5ddd8b98314636c4c763cdd8aee7acd462b00a9 assets/create/lang/unfinished/ko_kr.json
|
||||
f3696cf3bfcdff92eb11882be9be9fa2759c51c6 assets/create/lang/unfinished/nl_nl.json
|
||||
3df68a7b3fb44dd666de541d7437c300d596aa7b assets/create/lang/unfinished/pl_pl.json
|
||||
6a7fb1146f15117abca1a0ea970ab4054a1ee6a7 assets/create/lang/unfinished/pt_br.json
|
||||
6e993c9e6f5faa55448a8b24456082096cb10935 assets/create/lang/unfinished/pt_pt.json
|
||||
d8fc231286d4a53e249037905c92513857432c4c assets/create/lang/unfinished/ru_ru.json
|
||||
3aedca5bf7cf2f08cb53d6e8b5949009cddc1843 assets/create/lang/unfinished/zh_cn.json
|
||||
30f01dd054c4706d37f6d5ece0fc09ad241a6214 assets/create/lang/unfinished/zh_tw.json
|
||||
03a6020bfac9e4f979252abc8a631e6aafaa6b8b assets/create/lang/en_ud.json
|
||||
f30503db6d2841ebc7c59bf0a79b680a765613cd assets/create/lang/en_us.json
|
||||
3730041212c67067395b57218f26a403a18016c9 assets/create/lang/unfinished/de_de.json
|
||||
f1dd81b07e832b0f3187b2f52fdf3cdbea41fec1 assets/create/lang/unfinished/es_cl.json
|
||||
afc637fd921e0f17ec2b70d93b7a474d347a6a18 assets/create/lang/unfinished/es_es.json
|
||||
7258250074ffe3e50fe4803a2effe4f2b7a94c4e assets/create/lang/unfinished/fr_fr.json
|
||||
91cd404b62a87dd820cc5602622c88c65a5d5dbb assets/create/lang/unfinished/it_it.json
|
||||
7716adb1099e6b164d07390679b3a1b77397048e assets/create/lang/unfinished/ja_jp.json
|
||||
4b2b3ff736dbbfc58803432463e11850d651e631 assets/create/lang/unfinished/ko_kr.json
|
||||
23ec8c0fbb3d82e92397ef5857b2f57e2f72ae40 assets/create/lang/unfinished/nl_nl.json
|
||||
e8ef3db7b90bbc2a91bd104228c81b54bca638e7 assets/create/lang/unfinished/pl_pl.json
|
||||
0213870418b26af7f67c794973144594918fa114 assets/create/lang/unfinished/pt_br.json
|
||||
c0fccd4886228185a61af35535f3a92944d64c98 assets/create/lang/unfinished/pt_pt.json
|
||||
2cf778412184edac79cf457adb57f68475d7bcf0 assets/create/lang/unfinished/ru_ru.json
|
||||
feab3d65b3b95ecb6730d5d45fd672e4e2545ee3 assets/create/lang/unfinished/zh_cn.json
|
||||
eee611a3eecfa457050d522195f76e95a35dca81 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
|
||||
|
@ -1630,6 +1630,7 @@ dcb09deae110077bcddf090996b51cc66e9a7de3 assets/create/models/item/cogwheel.json
|
|||
9dbd63c9e1b09a663fd4b83d76e3ab5967086167 assets/create/models/item/controller_rail.json
|
||||
9a93b3ccef02cd0abd8106edec954dc0f2269229 assets/create/models/item/controls.json
|
||||
10397036fc0bb1e18a767cfd7b19b10d805a83fe assets/create/models/item/copper_backtank.json
|
||||
3652f8f7b454940050f090ab32d38e04b93e14f8 assets/create/models/item/copper_backtank_placeable.json
|
||||
759bcb5fe7dfdd628716f9b4ff19a5ab00393381 assets/create/models/item/copper_casing.json
|
||||
751324b03f657f4166460eb10a64dae47cb97bd4 assets/create/models/item/copper_nugget.json
|
||||
177dafb51d70c55ec62036332868efed4e01f353 assets/create/models/item/copper_sheet.json
|
||||
|
@ -2143,7 +2144,7 @@ d080b1b25e5bc8baf5aee68691b08c7f12ece3b0 assets/create/models/item/windmill_bear
|
|||
a80fb25a0b655e76be986b5b49fcb0f03461a1ab assets/create/models/item/zinc_nugget.json
|
||||
b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json
|
||||
5049f72c327a88f175f6f9425909e098fc711100 assets/create/sounds.json
|
||||
5d0cc4c0255dc241e61c173b31ddca70c88d08e4 data/create/advancements/aesthetics.json
|
||||
0f1b4b980afba9bf2caf583b88e261bba8b10313 data/create/advancements/aesthetics.json
|
||||
613e64b44bed959da899fdd54c1cacb227fb33f2 data/create/advancements/andesite_alloy.json
|
||||
81885c6bfb85792c88aaa7c9b70f58832945d31f data/create/advancements/andesite_casing.json
|
||||
83c046bd200623933545c9e4326f782fb02c87fa data/create/advancements/arm_blaze_burner.json
|
||||
|
@ -3357,7 +3358,6 @@ c633372228a13023f9dde2cd3478a7dc90affcea data/create/loot_tables/blocks/crimsite
|
|||
62800d2baf79e7a45b246896f2679fd6f5082efe data/create/loot_tables/blocks/crimson_window.json
|
||||
572dfdf4daaaf2c97882f3b2a856737365bf5873 data/create/loot_tables/blocks/crimson_window_pane.json
|
||||
3503b55a82b94ddaeebbc510eece2cc313c33e43 data/create/loot_tables/blocks/crushing_wheel.json
|
||||
5c1df8443043b3fe3b665dba348e2ff188bcbe31 data/create/loot_tables/blocks/crushing_wheel_controller.json
|
||||
252a6476bd2dd730dd97afbf2c69d9627f0d1672 data/create/loot_tables/blocks/cuckoo_clock.json
|
||||
838c008dc2881fbb4136773b3c84c3d988483f73 data/create/loot_tables/blocks/cut_andesite.json
|
||||
accd5aecce569330b1821d12f031a68259a42f27 data/create/loot_tables/blocks/cut_andesite_brick_slab.json
|
||||
|
@ -5216,13 +5216,16 @@ ac265a674626e0e832330086fd18fe0be37fc327 data/create/recipes/weathered_copper_ti
|
|||
10781e8cfcbb3486327aace3aa00e437fb44b331 data/create/tags/blocks/ore_override_stone.json
|
||||
197ed7ee3b284045c005011d28c38ac5b2e44d8c data/create/tags/blocks/passive_boiler_heaters.json
|
||||
557a29a61145b0f266760ef06256188a296739a7 data/create/tags/blocks/safe_nbt.json
|
||||
c9ac7e3e5ec18554e7184168d65e9b8e44ef5610 data/create/tags/blocks/sails.json
|
||||
6cdeeac1689f7b5bfd9bc40b462143d8eaf3ad0b data/create/tags/blocks/seats.json
|
||||
d063e12c9ef75f39518c6d129ea35d833464d547 data/create/tags/blocks/toolboxes.json
|
||||
50936b211d94167a35ec78c89954082a336b6269 data/create/tags/blocks/valve_handles.json
|
||||
eac71740fb12bdb38b5dfaa2268613d7ba82b809 data/create/tags/blocks/windmill_sails.json
|
||||
74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/create/tags/blocks/windowable.json
|
||||
893a01e6004d6d8272bd1658e98da88bb572ee57 data/create/tags/blocks/wrench_pickup.json
|
||||
a8bdc387cfa6296ebcc4af14323e2ddb632234dc data/create/tags/fluids/bottomless/allow.json
|
||||
74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/create/tags/fluids/bottomless/deny.json
|
||||
74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/create/tags/items/blaze_burner_fuel/regular.json
|
||||
97061ef67cac1fafd869493d06115b968bcb99bf data/create/tags/items/blaze_burner_fuel/special.json
|
||||
5212172aee2239136c94f9868ad39ec2e17cf1c6 data/create/tags/items/create_ingots.json
|
||||
4480f211f4a37bfee193eba945bc9f5a8d2c6e34 data/create/tags/items/crushed_ores.json
|
||||
bce28787b0271382842823d04a977912a88b01c2 data/create/tags/items/sandpaper.json
|
||||
|
|
|
@ -570,6 +570,7 @@
|
|||
"item.create.chromatic_compound": "punod\u026Fo\u0186 \u0254\u0131\u0287\u0250\u026Fo\u0279\u0265\u0186",
|
||||
"item.create.cinder_flour": "\u0279no\u05DF\u2132 \u0279\u01DDpu\u0131\u0186",
|
||||
"item.create.copper_backtank": "\u029Eu\u0250\u0287\u029E\u0254\u0250\u15FA \u0279\u01DDddo\u0186",
|
||||
"item.create.copper_backtank_placeable": "\u01DD\u05DFq\u0250\u01DD\u0254\u0250\u05DF\u0500 \u029Eu\u0250\u0287\u029E\u0254\u0250\u15FA \u0279\u01DDddo\u0186",
|
||||
"item.create.copper_nugget": "\u0287\u01DDbbnN \u0279\u01DDddo\u0186",
|
||||
"item.create.copper_sheet": "\u0287\u01DD\u01DD\u0265S \u0279\u01DDddo\u0186",
|
||||
"item.create.crafter_slot_cover": "\u0279\u01DD\u028Co\u0186 \u0287o\u05DFS \u0279\u01DD\u0287\u025F\u0250\u0279\u0186",
|
||||
|
|
|
@ -577,6 +577,7 @@
|
|||
"item.create.chromatic_compound": "Chromatic Compound",
|
||||
"item.create.cinder_flour": "Cinder Flour",
|
||||
"item.create.copper_backtank": "Copper Backtank",
|
||||
"item.create.copper_backtank_placeable": "Copper Backtank Placeable",
|
||||
"item.create.copper_nugget": "Copper Nugget",
|
||||
"item.create.copper_sheet": "Copper Sheet",
|
||||
"item.create.crafter_slot_cover": "Crafter Slot Cover",
|
||||
|
@ -652,23 +653,23 @@
|
|||
"advancement.create.its_alive": "It's Alive!",
|
||||
"advancement.create.its_alive.desc": "Watch your first kinetic component spin.",
|
||||
"advancement.create.shifting_gears": "Shifting Gears",
|
||||
"advancement.create.shifting_gears.desc": "Connect a Large Cogwheel to a Small Cogwheel, allowing you to change the speed of your contraption.",
|
||||
"advancement.create.shifting_gears.desc": "Connect a Large Cogwheel to a Small Cogwheel, allowing you to change the speed of your Contraption.",
|
||||
"advancement.create.overstressed": "Overstressed",
|
||||
"advancement.create.overstressed.desc": "Experience the limits of stress firsthand.",
|
||||
"advancement.create.belt": "Kelp Drive",
|
||||
"advancement.create.belt.desc": "Connect two shafts with a Mechanical Belt.",
|
||||
"advancement.create.tunnel": "Take cover!",
|
||||
"advancement.create.tunnel.desc": "Embellish your mechanical belt with a Tunnel.",
|
||||
"advancement.create.tunnel": "Take Cover!",
|
||||
"advancement.create.tunnel.desc": "Embellish your Mechanical Belt with a Tunnel.",
|
||||
"advancement.create.splitter_tunnel": "Divide and Conquer",
|
||||
"advancement.create.splitter_tunnel.desc": "Create a splitter with a group of Brass Tunnels.",
|
||||
"advancement.create.chute": "Tumbling down",
|
||||
"advancement.create.chute.desc": "Place a chute, the vertical counterpart of the belt.",
|
||||
"advancement.create.chute": "Tumbling Down",
|
||||
"advancement.create.chute.desc": "Place a Chute, the vertical counterpart of the Belt.",
|
||||
"advancement.create.upward_chute": "Aerial Abduction",
|
||||
"advancement.create.upward_chute.desc": "Watch a thrown item fly up into a fan-powered chute.",
|
||||
"advancement.create.upward_chute.desc": "Watch a thrown item fly up into a Fan-powered Chute.",
|
||||
"advancement.create.belt_funnel": "Funnels' Flappy Danglers",
|
||||
"advancement.create.belt_funnel.desc": "Place a sideways funnel on top of a belt or depot to create a special type.",
|
||||
"advancement.create.belt_funnel.desc": "Place a sideways Funnel on top of a Belt or Depot to create a special type.",
|
||||
"advancement.create.belt_funnel_kiss": "The Parrots and the Flaps",
|
||||
"advancement.create.belt_funnel_kiss.desc": "Make two belt mounted funnels kiss.",
|
||||
"advancement.create.belt_funnel_kiss.desc": "Make two Belt-mounted Funnels kiss.",
|
||||
"advancement.create.fan": "Mechanical Airbender",
|
||||
"advancement.create.fan.desc": "Ride the stream of air provided by an Encased Fan.",
|
||||
"advancement.create.fan_lava": "Geothermal Space Heater",
|
||||
|
@ -676,32 +677,32 @@
|
|||
"advancement.create.fan_water": "Wacky Washing",
|
||||
"advancement.create.fan_water.desc": "Get caught in a stream of air that washes things.",
|
||||
"advancement.create.fan_smoke": "Mechanical Bellows",
|
||||
"advancement.create.fan_smoke.desc": "Get caught in a stream of air that smokes items.",
|
||||
"advancement.create.fan_smoke.desc": "Get caught in a stream of air that smokes things.",
|
||||
"advancement.create.wrench": "Configure Conveniently",
|
||||
"advancement.create.wrench.desc": "Create a Wrench to aid you in building your contraptions.",
|
||||
"advancement.create.wrench.desc": "Create a Wrench to aid you in building your Contraptions.",
|
||||
"advancement.create.goggles": "Stress-O-Vision",
|
||||
"advancement.create.goggles.desc": "Create some Engineer's Goggles to aid you in getting more kinetic information from components.",
|
||||
"advancement.create.speedometer": "But How Fast Exactly?",
|
||||
"advancement.create.speedometer.desc": "Place and power a Speedometer. Look at it through your goggles to read its exact value.",
|
||||
"advancement.create.speedometer.desc": "Place and power a Speedometer. Look at it through your Goggles to read its exact value.",
|
||||
"advancement.create.stressometer": "But How Stressed Exactly?",
|
||||
"advancement.create.stressometer.desc": "Place and power a Stressometer. Look at it through your goggles to read its exact value.",
|
||||
"advancement.create.stressometer.desc": "Place and power a Stressometer. Look at it through your Goggles to read its exact value.",
|
||||
"advancement.create.aesthetics": "Boom, Aesthetics!",
|
||||
"advancement.create.aesthetics.desc": "Place brackets on a shaft, pipe and cogwheel.",
|
||||
"advancement.create.aesthetics.desc": "Place Brackets on a Shaft, Pipe, and Cogwheel.",
|
||||
"advancement.create.reinforced": "Boom, Reinforced!",
|
||||
"advancement.create.reinforced.desc": "Use fitting casing blocks on a shaft, pipe and mechanical belt.",
|
||||
"advancement.create.reinforced.desc": "Use fitting Casing blocks on a Shaft, Pipe, and Mechanical Belt.",
|
||||
"advancement.create.water_wheel": "Harnessing Hydraulics",
|
||||
"advancement.create.water_wheel.desc": "Place a Water Wheel and try getting it to spin!",
|
||||
"advancement.create.chocolate_wheel": "Tasteful power",
|
||||
"advancement.create.chocolate_wheel.desc": "Run a Water Wheel with molten Chocolate.",
|
||||
"advancement.create.chocolate_wheel": "Tasteful Power",
|
||||
"advancement.create.chocolate_wheel.desc": "Run a Water Wheel with Molten Chocolate.",
|
||||
"advancement.create.lava_wheel": "Magma Wheel",
|
||||
"advancement.create.lava_wheel.desc": "This shouldn't have worked.",
|
||||
"advancement.create.cuckoo": "Is it time?",
|
||||
"advancement.create.cuckoo.desc": "Witness a cuckhoo clock announce bedtime.",
|
||||
"advancement.create.cuckoo": "Is It Time?",
|
||||
"advancement.create.cuckoo.desc": "Witness a Cuckoo Clock announce bedtime.",
|
||||
"advancement.create.millstone": "Pocket Crusher",
|
||||
"advancement.create.millstone.desc": "Place and power a Millstone.",
|
||||
"advancement.create.windmill": "A mild Breeze",
|
||||
"advancement.create.windmill": "A Mild Breeze",
|
||||
"advancement.create.windmill.desc": "Assemble a windmill.",
|
||||
"advancement.create.maxed_windmill": "A strong breeze",
|
||||
"advancement.create.maxed_windmill": "A Strong Breeze",
|
||||
"advancement.create.maxed_windmill.desc": "Assemble a windmill of maximum strength.",
|
||||
"advancement.create.andesite_casing": "The Andesite Age",
|
||||
"advancement.create.andesite_casing.desc": "Use some Andesite Alloy and Wood to create a basic Casing.",
|
||||
|
@ -719,7 +720,7 @@
|
|||
"advancement.create.basin.desc": "Place a Basin and try throwing items into it.",
|
||||
"advancement.create.mixer": "Mixin' It Up",
|
||||
"advancement.create.mixer.desc": "Place a Mechanical Mixer above the Basin, power it, and start mixing some ingredients.",
|
||||
"advancement.create.blaze_burner": "A living Fireplace",
|
||||
"advancement.create.blaze_burner": "A Living Fireplace",
|
||||
"advancement.create.blaze_burner.desc": "Obtain a Blaze Burner.",
|
||||
"advancement.create.compact": "Automated Compacting",
|
||||
"advancement.create.compact.desc": "Use a Press and a Basin to compact some items.",
|
||||
|
@ -730,42 +731,42 @@
|
|||
"advancement.create.copper_casing": "The Copper Age",
|
||||
"advancement.create.copper_casing.desc": "Use some Copper Sheets and Wood to create some Copper Casings.",
|
||||
"advancement.create.spout": "Sploosh",
|
||||
"advancement.create.spout.desc": "Watch a fluid item being filled using a spout.",
|
||||
"advancement.create.spout.desc": "Watch a fluid item being filled using a Spout.",
|
||||
"advancement.create.spout_potion": "Global Brewery",
|
||||
"advancement.create.spout_potion.desc": "Watch a spout fill a bottle with potion fluid.",
|
||||
"advancement.create.chocolate": "A world of Imagination",
|
||||
"advancement.create.chocolate.desc": "Obtain a bucket of Molten Chocolate.",
|
||||
"advancement.create.spout_potion.desc": "Watch a Spout fill a Bottle with potion fluid.",
|
||||
"advancement.create.chocolate": "A World of Imagination",
|
||||
"advancement.create.chocolate.desc": "Obtain a Bucket of Molten Chocolate.",
|
||||
"advancement.create.item_drain": "Tumble Draining",
|
||||
"advancement.create.item_drain.desc": "Watch a fluid item being emptied by an item drain.",
|
||||
"advancement.create.chained_item_drain": "Let it roll!",
|
||||
"advancement.create.chained_item_drain.desc": "Watch an item roll across several chained item drains.",
|
||||
"advancement.create.item_drain.desc": "Watch a fluid item being emptied by an Item Drain.",
|
||||
"advancement.create.chained_item_drain": "Let It Roll!",
|
||||
"advancement.create.chained_item_drain.desc": "Watch an item roll across several chained Item Drains.",
|
||||
"advancement.create.glass_pipe": "Flow Spy",
|
||||
"advancement.create.glass_pipe.desc": "Watch fluid propagate through a windowed fluid pipe. Straight fluid pipes become windowed when a wrench is used on them.",
|
||||
"advancement.create.pipe_collision": "Never cross the Streams!",
|
||||
"advancement.create.glass_pipe.desc": "Watch fluid propagate through a windowed Fluid Pipe. Straight Fluid Pipes become windowed when a Wrench is used on them.",
|
||||
"advancement.create.pipe_collision": "Never Cross the Streams!",
|
||||
"advancement.create.pipe_collision.desc": "Watch two fluids meet in your pipe network.",
|
||||
"advancement.create.pipe_spill": "There's a leak!",
|
||||
"advancement.create.pipe_spill.desc": "Watch an open end of a pipe take or place fluids into the world.",
|
||||
"advancement.create.pipe_spill": "There's a Leak!",
|
||||
"advancement.create.pipe_spill.desc": "Watch an open end of a Pipe take or place fluids into the world.",
|
||||
"advancement.create.hose_pulley": "Industrial Spillage",
|
||||
"advancement.create.hose_pulley.desc": "Lower a hose pulley and watch it drain or fill a body of fluid.",
|
||||
"advancement.create.hose_pulley.desc": "Lower a Hose Pulley and watch it drain or fill a body of fluid.",
|
||||
"advancement.create.infinite_water": "Draining the Ocean",
|
||||
"advancement.create.infinite_water.desc": "Pump from a body of Water large enough to be considered Infinite.",
|
||||
"advancement.create.infinite_water.desc": "Pump from a body of Water large enough to be considered infinite.",
|
||||
"advancement.create.infinite_lava": "Draining the Planets' Core",
|
||||
"advancement.create.infinite_lava.desc": "Pump from a body of Lava large enough to be considered Infinite.",
|
||||
"advancement.create.infinite_lava.desc": "Pump from a body of Lava large enough to be considered infinite.",
|
||||
"advancement.create.infinite_chocolate": "Drowning in Imagination",
|
||||
"advancement.create.infinite_chocolate.desc": "Pump from a body of Molten Chocolate large enough to be considered Infinite.",
|
||||
"advancement.create.infinite_chocolate.desc": "Pump from a body of Molten Chocolate large enough to be considered infinite.",
|
||||
"advancement.create.crafter": "Automated Assembly",
|
||||
"advancement.create.crafter.desc": "Place and power some Mechanical Crafters.",
|
||||
"advancement.create.clockwork_bearing": "Contraption o'clock",
|
||||
"advancement.create.clockwork_bearing.desc": "Assemble a Structure mounted on a Clockwork Bearing.",
|
||||
"advancement.create.clockwork_bearing": "Contraption O'Clock",
|
||||
"advancement.create.clockwork_bearing.desc": "Assemble a structure mounted on a Clockwork Bearing.",
|
||||
"advancement.create.nixie_tube": "Signs of Style",
|
||||
"advancement.create.nixie_tube.desc": "Obtain and place down a pair of Nixie Tubes.",
|
||||
"advancement.create.deployer": "Poke, Place, and Attack",
|
||||
"advancement.create.deployer.desc": "Place and power a Deployer, the perfect reflection of yourself.",
|
||||
"advancement.create.speed_controller": "Engineers hate him!",
|
||||
"advancement.create.speed_controller": "Engineers Hate Him!",
|
||||
"advancement.create.speed_controller.desc": "Place a Rotation Speed Controller, the ultimate device for changing gear.",
|
||||
"advancement.create.flywheel": "Heart of the Factory",
|
||||
"advancement.create.flywheel.desc": "Successfully connect an engine to the Flywheel.",
|
||||
"advancement.create.overstress_flywheel": "High levels of Stress",
|
||||
"advancement.create.flywheel.desc": "Successfully connect a Furnace Engine to the Flywheel.",
|
||||
"advancement.create.overstress_flywheel": "High Levels of Stress",
|
||||
"advancement.create.overstress_flywheel.desc": "Overstress a Furnace Engine.",
|
||||
"advancement.create.precision_mechanism": "Complex Curiosities",
|
||||
"advancement.create.precision_mechanism.desc": "Assemble a Precision Mechanism.",
|
||||
|
@ -782,7 +783,7 @@
|
|||
"advancement.create.crushing_wheel": "A Pair of Giants",
|
||||
"advancement.create.crushing_wheel.desc": "Create some Crushing Wheels to break down more materials more effectively.",
|
||||
"advancement.create.blaze_cake": "Sugar Rush",
|
||||
"advancement.create.blaze_cake.desc": "Bake your blaze burner a special cake.",
|
||||
"advancement.create.blaze_cake.desc": "Bake your Blaze Burner a special cake.",
|
||||
"advancement.create.wand_of_symmetry": "Radiant Mirrors",
|
||||
"advancement.create.wand_of_symmetry.desc": "Craft a Staff of Symmetry.",
|
||||
"advancement.create.extendo_grip": "Boioioing!",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1438",
|
||||
"_": "Missing Localizations: 1439",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -578,6 +578,7 @@
|
|||
"item.create.chromatic_compound": "Chromatische Verbindung",
|
||||
"item.create.cinder_flour": "Aschenmehl",
|
||||
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
|
||||
"item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable",
|
||||
"item.create.copper_nugget": "Kupferklumpen",
|
||||
"item.create.copper_sheet": "Kupferblech",
|
||||
"item.create.crafter_slot_cover": "Handwerkseinheit Slot Abdeckung",
|
||||
|
@ -756,17 +757,17 @@
|
|||
"advancement.create.infinite_chocolate.desc": "Pumpe aus einem Schokoladenbecken, das groß genug ist, um als unendlich bezeichnet zu werden.",
|
||||
"advancement.create.crafter": "Automatisierte Montage",
|
||||
"advancement.create.crafter.desc": "Plaziere und aktiviere ein paar Mechanische Handwerkseinheiten.",
|
||||
"advancement.create.clockwork_bearing": "UNLOCALIZED: Contraption o'clock",
|
||||
"advancement.create.clockwork_bearing.desc": "UNLOCALIZED: Assemble a Structure mounted on a Clockwork Bearing.",
|
||||
"advancement.create.clockwork_bearing": "UNLOCALIZED: Contraption O'Clock",
|
||||
"advancement.create.clockwork_bearing.desc": "UNLOCALIZED: Assemble a structure mounted on a Clockwork Bearing.",
|
||||
"advancement.create.nixie_tube": "UNLOCALIZED: Signs of Style",
|
||||
"advancement.create.nixie_tube.desc": "UNLOCALIZED: Obtain and place down a pair of Nixie Tubes.",
|
||||
"advancement.create.deployer": "UNLOCALIZED: Poke, Place, and Attack",
|
||||
"advancement.create.deployer.desc": "UNLOCALIZED: Place and power a Deployer, the perfect reflection of yourself.",
|
||||
"advancement.create.speed_controller": "UNLOCALIZED: Engineers hate him!",
|
||||
"advancement.create.speed_controller": "UNLOCALIZED: Engineers Hate Him!",
|
||||
"advancement.create.speed_controller.desc": "UNLOCALIZED: Place a Rotation Speed Controller, the ultimate device for changing gear.",
|
||||
"advancement.create.flywheel": "UNLOCALIZED: Heart of the Factory",
|
||||
"advancement.create.flywheel.desc": "UNLOCALIZED: Successfully connect an engine to the Flywheel.",
|
||||
"advancement.create.overstress_flywheel": "UNLOCALIZED: High levels of Stress",
|
||||
"advancement.create.flywheel.desc": "UNLOCALIZED: Successfully connect a Furnace Engine to the Flywheel.",
|
||||
"advancement.create.overstress_flywheel": "UNLOCALIZED: High Levels of Stress",
|
||||
"advancement.create.overstress_flywheel.desc": "UNLOCALIZED: Overstress a Furnace Engine.",
|
||||
"advancement.create.precision_mechanism": "UNLOCALIZED: Complex Curiosities",
|
||||
"advancement.create.precision_mechanism.desc": "UNLOCALIZED: Assemble a Precision Mechanism.",
|
||||
|
@ -783,7 +784,7 @@
|
|||
"advancement.create.crushing_wheel": "UNLOCALIZED: A Pair of Giants",
|
||||
"advancement.create.crushing_wheel.desc": "UNLOCALIZED: Create some Crushing Wheels to break down more materials more effectively.",
|
||||
"advancement.create.blaze_cake": "UNLOCALIZED: Sugar Rush",
|
||||
"advancement.create.blaze_cake.desc": "UNLOCALIZED: Bake your blaze burner a special cake.",
|
||||
"advancement.create.blaze_cake.desc": "UNLOCALIZED: Bake your Blaze Burner a special cake.",
|
||||
"advancement.create.wand_of_symmetry": "UNLOCALIZED: Radiant Mirrors",
|
||||
"advancement.create.wand_of_symmetry.desc": "UNLOCALIZED: Craft a Staff of Symmetry.",
|
||||
"advancement.create.extendo_grip": "Boioioing!",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 449",
|
||||
"_": "Missing Localizations: 450",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -578,6 +578,7 @@
|
|||
"item.create.chromatic_compound": "Compuesto Cromático",
|
||||
"item.create.cinder_flour": "Harina de Cenizas",
|
||||
"item.create.copper_backtank": "Mochila-Tanque de Cobre",
|
||||
"item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable",
|
||||
"item.create.copper_nugget": "Nugget de Cobre",
|
||||
"item.create.copper_sheet": "Plancha de Cobre",
|
||||
"item.create.crafter_slot_cover": "Cubre Ranuras",
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1700",
|
||||
"_": "Missing Localizations: 1701",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -578,6 +578,7 @@
|
|||
"item.create.chromatic_compound": "Composé chromatique",
|
||||
"item.create.cinder_flour": "Farine de braise",
|
||||
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
|
||||
"item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable",
|
||||
"item.create.copper_nugget": "Pépite de cuivre",
|
||||
"item.create.copper_sheet": "Plaques de cuivre",
|
||||
"item.create.crafter_slot_cover": "Couvercle",
|
||||
|
@ -658,18 +659,18 @@
|
|||
"advancement.create.overstressed.desc": "Testez d'abord les limites de la force mécanique",
|
||||
"advancement.create.belt": "UNLOCALIZED: Kelp Drive",
|
||||
"advancement.create.belt.desc": "UNLOCALIZED: Connect two shafts with a Mechanical Belt.",
|
||||
"advancement.create.tunnel": "UNLOCALIZED: Take cover!",
|
||||
"advancement.create.tunnel.desc": "UNLOCALIZED: Embellish your mechanical belt with a Tunnel.",
|
||||
"advancement.create.tunnel": "UNLOCALIZED: Take Cover!",
|
||||
"advancement.create.tunnel.desc": "UNLOCALIZED: Embellish your Mechanical Belt with a Tunnel.",
|
||||
"advancement.create.splitter_tunnel": "UNLOCALIZED: Divide and Conquer",
|
||||
"advancement.create.splitter_tunnel.desc": "UNLOCALIZED: Create a splitter with a group of Brass Tunnels.",
|
||||
"advancement.create.chute": "UNLOCALIZED: Tumbling down",
|
||||
"advancement.create.chute.desc": "UNLOCALIZED: Place a chute, the vertical counterpart of the belt.",
|
||||
"advancement.create.chute": "UNLOCALIZED: Tumbling Down",
|
||||
"advancement.create.chute.desc": "UNLOCALIZED: Place a Chute, the vertical counterpart of the Belt.",
|
||||
"advancement.create.upward_chute": "UNLOCALIZED: Aerial Abduction",
|
||||
"advancement.create.upward_chute.desc": "UNLOCALIZED: Watch a thrown item fly up into a fan-powered chute.",
|
||||
"advancement.create.upward_chute.desc": "UNLOCALIZED: Watch a thrown item fly up into a Fan-powered Chute.",
|
||||
"advancement.create.belt_funnel": "UNLOCALIZED: Funnels' Flappy Danglers",
|
||||
"advancement.create.belt_funnel.desc": "UNLOCALIZED: Place a sideways funnel on top of a belt or depot to create a special type.",
|
||||
"advancement.create.belt_funnel.desc": "UNLOCALIZED: Place a sideways Funnel on top of a Belt or Depot to create a special type.",
|
||||
"advancement.create.belt_funnel_kiss": "UNLOCALIZED: The Parrots and the Flaps",
|
||||
"advancement.create.belt_funnel_kiss.desc": "UNLOCALIZED: Make two belt mounted funnels kiss.",
|
||||
"advancement.create.belt_funnel_kiss.desc": "UNLOCALIZED: Make two Belt-mounted Funnels kiss.",
|
||||
"advancement.create.fan": "UNLOCALIZED: Mechanical Airbender",
|
||||
"advancement.create.fan.desc": "UNLOCALIZED: Ride the stream of air provided by an Encased Fan.",
|
||||
"advancement.create.fan_lava": "UNLOCALIZED: Geothermal Space Heater",
|
||||
|
@ -677,27 +678,27 @@
|
|||
"advancement.create.fan_water": "UNLOCALIZED: Wacky Washing",
|
||||
"advancement.create.fan_water.desc": "UNLOCALIZED: Get caught in a stream of air that washes things.",
|
||||
"advancement.create.fan_smoke": "UNLOCALIZED: Mechanical Bellows",
|
||||
"advancement.create.fan_smoke.desc": "UNLOCALIZED: Get caught in a stream of air that smokes items.",
|
||||
"advancement.create.fan_smoke.desc": "UNLOCALIZED: Get caught in a stream of air that smokes things.",
|
||||
"advancement.create.wrench": "UNLOCALIZED: Configure Conveniently",
|
||||
"advancement.create.wrench.desc": "UNLOCALIZED: Create a Wrench to aid you in building your contraptions.",
|
||||
"advancement.create.wrench.desc": "UNLOCALIZED: Create a Wrench to aid you in building your Contraptions.",
|
||||
"advancement.create.goggles": "UNLOCALIZED: Stress-O-Vision",
|
||||
"advancement.create.goggles.desc": "UNLOCALIZED: Create some Engineer's Goggles to aid you in getting more kinetic information from components.",
|
||||
"advancement.create.speedometer": "UNLOCALIZED: But How Fast Exactly?",
|
||||
"advancement.create.speedometer.desc": "UNLOCALIZED: Place and power a Speedometer. Look at it through your goggles to read its exact value.",
|
||||
"advancement.create.speedometer.desc": "UNLOCALIZED: Place and power a Speedometer. Look at it through your Goggles to read its exact value.",
|
||||
"advancement.create.stressometer": "UNLOCALIZED: But How Stressed Exactly?",
|
||||
"advancement.create.stressometer.desc": "UNLOCALIZED: Place and power a Stressometer. Look at it through your goggles to read its exact value.",
|
||||
"advancement.create.stressometer.desc": "UNLOCALIZED: Place and power a Stressometer. Look at it through your Goggles to read its exact value.",
|
||||
"advancement.create.aesthetics": "UNLOCALIZED: Boom, Aesthetics!",
|
||||
"advancement.create.aesthetics.desc": "UNLOCALIZED: Place brackets on a shaft, pipe and cogwheel.",
|
||||
"advancement.create.aesthetics.desc": "UNLOCALIZED: Place Brackets on a Shaft, Pipe, and Cogwheel.",
|
||||
"advancement.create.reinforced": "UNLOCALIZED: Boom, Reinforced!",
|
||||
"advancement.create.reinforced.desc": "UNLOCALIZED: Use fitting casing blocks on a shaft, pipe and mechanical belt.",
|
||||
"advancement.create.reinforced.desc": "UNLOCALIZED: Use fitting Casing blocks on a Shaft, Pipe, and Mechanical Belt.",
|
||||
"advancement.create.water_wheel": "UNLOCALIZED: Harnessing Hydraulics",
|
||||
"advancement.create.water_wheel.desc": "UNLOCALIZED: Place a Water Wheel and try getting it to spin!",
|
||||
"advancement.create.chocolate_wheel": "UNLOCALIZED: Tasteful power",
|
||||
"advancement.create.chocolate_wheel.desc": "UNLOCALIZED: Run a Water Wheel with molten Chocolate.",
|
||||
"advancement.create.chocolate_wheel": "UNLOCALIZED: Tasteful Power",
|
||||
"advancement.create.chocolate_wheel.desc": "UNLOCALIZED: Run a Water Wheel with Molten Chocolate.",
|
||||
"advancement.create.lava_wheel": "Roue à aubes... dans de la lave?",
|
||||
"advancement.create.lava_wheel.desc": "Cela... N'aurait pas dû fonctionner.",
|
||||
"advancement.create.cuckoo": "C'est déjà l'heure?",
|
||||
"advancement.create.cuckoo.desc": "UNLOCALIZED: Witness a cuckhoo clock announce bedtime.",
|
||||
"advancement.create.cuckoo.desc": "UNLOCALIZED: Witness a Cuckoo Clock announce bedtime.",
|
||||
"advancement.create.millstone": "UNLOCALIZED: Pocket Crusher",
|
||||
"advancement.create.millstone.desc": "UNLOCALIZED: Place and power a Millstone.",
|
||||
"advancement.create.windmill": "Une brise moyenne...",
|
||||
|
@ -720,7 +721,7 @@
|
|||
"advancement.create.basin.desc": "UNLOCALIZED: Place a Basin and try throwing items into it.",
|
||||
"advancement.create.mixer": "UNLOCALIZED: Mixin' It Up",
|
||||
"advancement.create.mixer.desc": "UNLOCALIZED: Place a Mechanical Mixer above the Basin, power it, and start mixing some ingredients.",
|
||||
"advancement.create.blaze_burner": "UNLOCALIZED: A living Fireplace",
|
||||
"advancement.create.blaze_burner": "UNLOCALIZED: A Living Fireplace",
|
||||
"advancement.create.blaze_burner.desc": "UNLOCALIZED: Obtain a Blaze Burner.",
|
||||
"advancement.create.compact": "UNLOCALIZED: Automated Compacting",
|
||||
"advancement.create.compact.desc": "UNLOCALIZED: Use a Press and a Basin to compact some items.",
|
||||
|
@ -731,42 +732,42 @@
|
|||
"advancement.create.copper_casing": "UNLOCALIZED: The Copper Age",
|
||||
"advancement.create.copper_casing.desc": "UNLOCALIZED: Use some Copper Sheets and Wood to create some Copper Casings.",
|
||||
"advancement.create.spout": "UNLOCALIZED: Sploosh",
|
||||
"advancement.create.spout.desc": "UNLOCALIZED: Watch a fluid item being filled using a spout.",
|
||||
"advancement.create.spout.desc": "UNLOCALIZED: Watch a fluid item being filled using a Spout.",
|
||||
"advancement.create.spout_potion": "UNLOCALIZED: Global Brewery",
|
||||
"advancement.create.spout_potion.desc": "UNLOCALIZED: Watch a spout fill a bottle with potion fluid.",
|
||||
"advancement.create.chocolate": "UNLOCALIZED: A world of Imagination",
|
||||
"advancement.create.chocolate.desc": "UNLOCALIZED: Obtain a bucket of Molten Chocolate.",
|
||||
"advancement.create.spout_potion.desc": "UNLOCALIZED: Watch a Spout fill a Bottle with potion fluid.",
|
||||
"advancement.create.chocolate": "UNLOCALIZED: A World of Imagination",
|
||||
"advancement.create.chocolate.desc": "UNLOCALIZED: Obtain a Bucket of Molten Chocolate.",
|
||||
"advancement.create.item_drain": "UNLOCALIZED: Tumble Draining",
|
||||
"advancement.create.item_drain.desc": "UNLOCALIZED: Watch a fluid item being emptied by an item drain.",
|
||||
"advancement.create.chained_item_drain": "UNLOCALIZED: Let it roll!",
|
||||
"advancement.create.chained_item_drain.desc": "UNLOCALIZED: Watch an item roll across several chained item drains.",
|
||||
"advancement.create.item_drain.desc": "UNLOCALIZED: Watch a fluid item being emptied by an Item Drain.",
|
||||
"advancement.create.chained_item_drain": "UNLOCALIZED: Let It Roll!",
|
||||
"advancement.create.chained_item_drain.desc": "UNLOCALIZED: Watch an item roll across several chained Item Drains.",
|
||||
"advancement.create.glass_pipe": "UNLOCALIZED: Flow Spy",
|
||||
"advancement.create.glass_pipe.desc": "UNLOCALIZED: Watch fluid propagate through a windowed fluid pipe. Straight fluid pipes become windowed when a wrench is used on them.",
|
||||
"advancement.create.pipe_collision": "UNLOCALIZED: Never cross the Streams!",
|
||||
"advancement.create.glass_pipe.desc": "UNLOCALIZED: Watch fluid propagate through a windowed Fluid Pipe. Straight Fluid Pipes become windowed when a Wrench is used on them.",
|
||||
"advancement.create.pipe_collision": "UNLOCALIZED: Never Cross the Streams!",
|
||||
"advancement.create.pipe_collision.desc": "UNLOCALIZED: Watch two fluids meet in your pipe network.",
|
||||
"advancement.create.pipe_spill": "UNLOCALIZED: There's a leak!",
|
||||
"advancement.create.pipe_spill.desc": "UNLOCALIZED: Watch an open end of a pipe take or place fluids into the world.",
|
||||
"advancement.create.pipe_spill": "UNLOCALIZED: There's a Leak!",
|
||||
"advancement.create.pipe_spill.desc": "UNLOCALIZED: Watch an open end of a Pipe take or place fluids into the world.",
|
||||
"advancement.create.hose_pulley": "UNLOCALIZED: Industrial Spillage",
|
||||
"advancement.create.hose_pulley.desc": "UNLOCALIZED: Lower a hose pulley and watch it drain or fill a body of fluid.",
|
||||
"advancement.create.hose_pulley.desc": "UNLOCALIZED: Lower a Hose Pulley and watch it drain or fill a body of fluid.",
|
||||
"advancement.create.infinite_water": "UNLOCALIZED: Draining the Ocean",
|
||||
"advancement.create.infinite_water.desc": "UNLOCALIZED: Pump from a body of Water large enough to be considered Infinite.",
|
||||
"advancement.create.infinite_water.desc": "UNLOCALIZED: Pump from a body of Water large enough to be considered infinite.",
|
||||
"advancement.create.infinite_lava": "UNLOCALIZED: Draining the Planets' Core",
|
||||
"advancement.create.infinite_lava.desc": "UNLOCALIZED: Pump from a body of Lava large enough to be considered Infinite.",
|
||||
"advancement.create.infinite_lava.desc": "UNLOCALIZED: Pump from a body of Lava large enough to be considered infinite.",
|
||||
"advancement.create.infinite_chocolate": "UNLOCALIZED: Drowning in Imagination",
|
||||
"advancement.create.infinite_chocolate.desc": "UNLOCALIZED: Pump from a body of Molten Chocolate large enough to be considered Infinite.",
|
||||
"advancement.create.infinite_chocolate.desc": "UNLOCALIZED: Pump from a body of Molten Chocolate large enough to be considered infinite.",
|
||||
"advancement.create.crafter": "UNLOCALIZED: Automated Assembly",
|
||||
"advancement.create.crafter.desc": "UNLOCALIZED: Place and power some Mechanical Crafters.",
|
||||
"advancement.create.clockwork_bearing": "UNLOCALIZED: Contraption o'clock",
|
||||
"advancement.create.clockwork_bearing.desc": "UNLOCALIZED: Assemble a Structure mounted on a Clockwork Bearing.",
|
||||
"advancement.create.clockwork_bearing": "UNLOCALIZED: Contraption O'Clock",
|
||||
"advancement.create.clockwork_bearing.desc": "UNLOCALIZED: Assemble a structure mounted on a Clockwork Bearing.",
|
||||
"advancement.create.nixie_tube": "UNLOCALIZED: Signs of Style",
|
||||
"advancement.create.nixie_tube.desc": "UNLOCALIZED: Obtain and place down a pair of Nixie Tubes.",
|
||||
"advancement.create.deployer": "UNLOCALIZED: Poke, Place, and Attack",
|
||||
"advancement.create.deployer.desc": "UNLOCALIZED: Place and power a Deployer, the perfect reflection of yourself.",
|
||||
"advancement.create.speed_controller": "UNLOCALIZED: Engineers hate him!",
|
||||
"advancement.create.speed_controller": "UNLOCALIZED: Engineers Hate Him!",
|
||||
"advancement.create.speed_controller.desc": "UNLOCALIZED: Place a Rotation Speed Controller, the ultimate device for changing gear.",
|
||||
"advancement.create.flywheel": "UNLOCALIZED: Heart of the Factory",
|
||||
"advancement.create.flywheel.desc": "UNLOCALIZED: Successfully connect an engine to the Flywheel.",
|
||||
"advancement.create.overstress_flywheel": "UNLOCALIZED: High levels of Stress",
|
||||
"advancement.create.flywheel.desc": "UNLOCALIZED: Successfully connect a Furnace Engine to the Flywheel.",
|
||||
"advancement.create.overstress_flywheel": "UNLOCALIZED: High Levels of Stress",
|
||||
"advancement.create.overstress_flywheel.desc": "UNLOCALIZED: Overstress a Furnace Engine.",
|
||||
"advancement.create.precision_mechanism": "UNLOCALIZED: Complex Curiosities",
|
||||
"advancement.create.precision_mechanism.desc": "UNLOCALIZED: Assemble a Precision Mechanism.",
|
||||
|
@ -783,7 +784,7 @@
|
|||
"advancement.create.crushing_wheel": "UNLOCALIZED: A Pair of Giants",
|
||||
"advancement.create.crushing_wheel.desc": "UNLOCALIZED: Create some Crushing Wheels to break down more materials more effectively.",
|
||||
"advancement.create.blaze_cake": "UNLOCALIZED: Sugar Rush",
|
||||
"advancement.create.blaze_cake.desc": "UNLOCALIZED: Bake your blaze burner a special cake.",
|
||||
"advancement.create.blaze_cake.desc": "UNLOCALIZED: Bake your Blaze Burner a special cake.",
|
||||
"advancement.create.wand_of_symmetry": "UNLOCALIZED: Radiant Mirrors",
|
||||
"advancement.create.wand_of_symmetry.desc": "UNLOCALIZED: Craft a Staff of Symmetry.",
|
||||
"advancement.create.extendo_grip": "UNLOCALIZED: Boioioing!",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1389",
|
||||
"_": "Missing Localizations: 1390",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -578,6 +578,7 @@
|
|||
"item.create.chromatic_compound": "Composto cromatico",
|
||||
"item.create.cinder_flour": "Cenere farinosa",
|
||||
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
|
||||
"item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable",
|
||||
"item.create.copper_nugget": "Pepita di rame",
|
||||
"item.create.copper_sheet": "Lamiera di rame",
|
||||
"item.create.crafter_slot_cover": "Rivestimento per slot da costruzione",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 119",
|
||||
"_": "Missing Localizations: 116",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -578,6 +578,7 @@
|
|||
"item.create.chromatic_compound": "色彩の化合物",
|
||||
"item.create.cinder_flour": "ネザーラックの粉",
|
||||
"item.create.copper_backtank": "銅のバックタンク",
|
||||
"item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable",
|
||||
"item.create.copper_nugget": "銅塊",
|
||||
"item.create.copper_sheet": "銅板",
|
||||
"item.create.crafter_slot_cover": "クラフタースロットカバー",
|
||||
|
@ -654,7 +655,7 @@
|
|||
"advancement.create.its_alive.desc": "機械の回転を初めて見る",
|
||||
"advancement.create.shifting_gears": "ギアシフト!",
|
||||
"advancement.create.shifting_gears.desc": "大きい歯車と小さい歯車を噛み合わせて回転速度を変更する",
|
||||
"advancement.create.overstressed": "超過応力",
|
||||
"advancement.create.overstressed": "応力超過",
|
||||
"advancement.create.overstressed.desc": "応力の限界を肌で感じる",
|
||||
"advancement.create.belt": "ベルトコンブア",
|
||||
"advancement.create.belt.desc": "2つのシャフトをメカニカルベルトで繋ぐ",
|
||||
|
@ -767,7 +768,7 @@
|
|||
"advancement.create.flywheel": "工場の心臓部",
|
||||
"advancement.create.flywheel.desc": "かまどエンジンを弾み車に繋ぐ",
|
||||
"advancement.create.overstress_flywheel": "ハイレベル応力",
|
||||
"advancement.create.overstress_flywheel.desc": "かまどエンジンに超過応力をかける",
|
||||
"advancement.create.overstress_flywheel.desc": "かまどエンジンに応力超過をかける",
|
||||
"advancement.create.precision_mechanism": "手間暇かけた骨董品",
|
||||
"advancement.create.precision_mechanism.desc": "精密機構を組み立てる",
|
||||
"advancement.create.mechanical_arm": "手が離せない!",
|
||||
|
@ -833,8 +834,8 @@
|
|||
"create.recipe.fan_washing.fan": "水の奥のケース入りファン",
|
||||
"create.recipe.fan_smoking": "一括燻製",
|
||||
"create.recipe.fan_smoking.fan": "炎の奥のケース入りファン",
|
||||
"create.recipe.fan_haunting": "UNLOCALIZED: Bulk Haunting",
|
||||
"create.recipe.fan_haunting.fan": "UNLOCALIZED: Fan behind Soul Fire",
|
||||
"create.recipe.fan_haunting": "一括憑霊",
|
||||
"create.recipe.fan_haunting.fan": "魂の炎の奥のケース入りファン",
|
||||
"create.recipe.fan_blasting": "一括精錬",
|
||||
"create.recipe.fan_blasting.fan": "溶岩の奥のケース入りファン",
|
||||
"create.recipe.pressing": "プレス",
|
||||
|
@ -1011,10 +1012,10 @@
|
|||
"create.gui.speedometer.title": "回転速度",
|
||||
"create.gui.stressometer.title": "ネットワークの応力",
|
||||
"create.gui.stressometer.capacity": "残りの応力許容量",
|
||||
"create.gui.stressometer.overstressed": "超過応力",
|
||||
"create.gui.stressometer.overstressed": "応力超過",
|
||||
"create.gui.stressometer.no_rotation": "回転なし",
|
||||
"create.gui.contraptions.not_fast_enough": "この %1$s は_十分速く_回転_していない_ようです。",
|
||||
"create.gui.contraptions.network_overstressed": "この仕掛けは_超過応力_のようです。さらに原動機を追加するか、_応力_への影響が大きい機械の回転速度を_下げて_ください。",
|
||||
"create.gui.contraptions.network_overstressed": "この仕掛けは_応力超過_のようです。さらに原動機を追加するか、_応力_への影響が大きい機械の回転速度を_下げて_ください。",
|
||||
"create.gui.adjustable_crate.title": "可変クレート",
|
||||
"create.gui.adjustable_crate.storageSpace": "収納スペース",
|
||||
"create.gui.stockpile_switch.title": "在庫スイッチ",
|
||||
|
@ -1183,8 +1184,8 @@
|
|||
"create.item_attributes.furnace_fuel.inverted": "かまどの燃料でないか",
|
||||
"create.item_attributes.washable": "洗浄できるかか",
|
||||
"create.item_attributes.washable.inverted": "洗浄できないか",
|
||||
"create.item_attributes.hauntable": "UNLOCALIZED: can be Haunted",
|
||||
"create.item_attributes.hauntable.inverted": "UNLOCALIZED: cannot be Haunted",
|
||||
"create.item_attributes.hauntable": "憑霊できるか",
|
||||
"create.item_attributes.hauntable.inverted": "憑霊できないか",
|
||||
"create.item_attributes.crushable": "粉砕できるかか",
|
||||
"create.item_attributes.crushable.inverted": "粉砕できないか",
|
||||
"create.item_attributes.smeltable": "精錬できるかか",
|
||||
|
@ -1255,7 +1256,7 @@
|
|||
"create.tooltip.stressImpact.low": "低",
|
||||
"create.tooltip.stressImpact.medium": "中",
|
||||
"create.tooltip.stressImpact.high": "高",
|
||||
"create.tooltip.stressImpact.overstressed": "超過応力",
|
||||
"create.tooltip.stressImpact.overstressed": "応力超過",
|
||||
"create.tooltip.capacityProvided": "応力許容量: %1$s",
|
||||
"create.tooltip.capacityProvided.low": "小",
|
||||
"create.tooltip.capacityProvided.medium": "中",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 121",
|
||||
"_": "Missing Localizations: 116",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -578,6 +578,7 @@
|
|||
"item.create.chromatic_compound": "색채 혼합물",
|
||||
"item.create.cinder_flour": "잿가루",
|
||||
"item.create.copper_backtank": "구리 산소통",
|
||||
"item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable",
|
||||
"item.create.copper_nugget": "구리 조각",
|
||||
"item.create.copper_sheet": "구리 판",
|
||||
"item.create.crafter_slot_cover": "조합기 슬롯 덮개",
|
||||
|
@ -833,8 +834,8 @@
|
|||
"create.recipe.fan_washing.fan": "물과 선풍기",
|
||||
"create.recipe.fan_smoking": "훈연",
|
||||
"create.recipe.fan_smoking.fan": "불과 선풍기",
|
||||
"create.recipe.fan_haunting": "UNLOCALIZED: Bulk Haunting",
|
||||
"create.recipe.fan_haunting.fan": "UNLOCALIZED: Fan behind Soul Fire",
|
||||
"create.recipe.fan_haunting": "심령",
|
||||
"create.recipe.fan_haunting.fan": "영혼 불과 선풍기",
|
||||
"create.recipe.fan_blasting": "제련",
|
||||
"create.recipe.fan_blasting.fan": "용암과 선풍기",
|
||||
"create.recipe.pressing": "압착",
|
||||
|
@ -912,7 +913,7 @@
|
|||
"create.gui.toolmenu.cycle": "스크롤로 순환",
|
||||
|
||||
"create.toolbox.unequip": "되돌리기: %1$s",
|
||||
"create.toolbox.outOfRange": "현재 아이템은 공구상자와 너무 멀리있습니다",
|
||||
"create.toolbox.outOfRange": "현재 아이템은 공구상자와 너무 멀리 있습니다",
|
||||
"create.toolbox.detach": "공구상자와 연결 끊기",
|
||||
"create.toolbox.depositAll": "근처 공구상자로 모든 아이템 되돌리기",
|
||||
"create.toolbox.depositBox": "공구상자로 아이템 되돌리기",
|
||||
|
@ -1049,7 +1050,7 @@
|
|||
"create.schematicAndQuill.abort": "위치 설정을 제거했습니다.",
|
||||
"create.schematicAndQuill.title": "설계도 이름:",
|
||||
"create.schematicAndQuill.convert": "저장하고 즉시 적용",
|
||||
"create.schematicAndQuill.fallbackName": "My Schematic",
|
||||
"create.schematicAndQuill.fallbackName": "내 청사진",
|
||||
"create.schematicAndQuill.saved": "%1$s으(로) 저장했습니다",
|
||||
|
||||
"create.schematic.invalid": "[!] 없는 아이템 - 청사진 테이블을 이용하세요",
|
||||
|
@ -1118,12 +1119,12 @@
|
|||
"create.gui.schematicannon.option.replaceWithAny": "온전한 블록을 아무 재료로 대체함",
|
||||
"create.gui.schematicannon.option.replaceWithEmpty": "온전한 블록을 공기로 채움",
|
||||
"create.gui.schematicannon.option.skipMissing": "부족한 블록을 무시하고 진행",
|
||||
"create.gui.schematicannon.option.skipTileEntities": "UNLOCALIZED: Protect Tile Entities",
|
||||
"create.gui.schematicannon.option.skipTileEntities": "블록 엔티티 보호",
|
||||
"create.gui.schematicannon.slot.gunpowder": "화약을 넣어 대포 연료를 채우세요",
|
||||
"create.gui.schematicannon.slot.listPrinter": "책을 넣어 건축 재료 체크리스트를 인쇄하세요",
|
||||
"create.gui.schematicannon.slot.schematic": "여기에 청사진을 넣으세요. 건설 구역이 설정되어 있어야 합니다.",
|
||||
"create.gui.schematicannon.option.skipMissing.description": "만약 대포가 설치에 필요한 블록을 찾지 못할 경우,건너뛰고 다음 블록 설치를 진행합니다.",
|
||||
"create.gui.schematicannon.option.skipTileEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.",
|
||||
"create.gui.schematicannon.option.skipTileEntities.description": "대포가 상자, 화로같이 데이터가 담긴 블록을 설치하지 않습니다.",
|
||||
"create.gui.schematicannon.option.dontReplaceSolid.description": "대포가 작업구역의 온전한 블록을 대체하지 않습니다.",
|
||||
"create.gui.schematicannon.option.replaceWithSolid.description": "대포가 작업구역의 온전한 블록을 대포가 가진 재료로 대체합니다.",
|
||||
"create.gui.schematicannon.option.replaceWithAny.description": "대포가 작업구역의 온전한 블록을 대포가 가진 어떠한 재료로든 대체합니다.",
|
||||
|
@ -1183,8 +1184,8 @@
|
|||
"create.item_attributes.furnace_fuel.inverted": "화로 연료로 쓸 수 없음",
|
||||
"create.item_attributes.washable": "세척될 수 있음",
|
||||
"create.item_attributes.washable.inverted": "세척될 수 없음",
|
||||
"create.item_attributes.hauntable": "UNLOCALIZED: can be Haunted",
|
||||
"create.item_attributes.hauntable.inverted": "UNLOCALIZED: cannot be Haunted",
|
||||
"create.item_attributes.hauntable": "귀신들릴 수 있음",
|
||||
"create.item_attributes.hauntable.inverted": "귀신들릴 수 없음",
|
||||
"create.item_attributes.crushable": "분쇄될 수 있음",
|
||||
"create.item_attributes.crushable.inverted": "분쇄될 수 없음",
|
||||
"create.item_attributes.smeltable": "구워질 수 있음",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 2053",
|
||||
"_": "Missing Localizations: 2054",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -578,6 +578,7 @@
|
|||
"item.create.chromatic_compound": "UNLOCALIZED: Chromatic Compound",
|
||||
"item.create.cinder_flour": "UNLOCALIZED: Cinder Flour",
|
||||
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
|
||||
"item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable",
|
||||
"item.create.copper_nugget": "Koper klompje",
|
||||
"item.create.copper_sheet": "UNLOCALIZED: Copper Sheet",
|
||||
"item.create.crafter_slot_cover": "UNLOCALIZED: Crafter Slot Cover",
|
||||
|
@ -653,23 +654,23 @@
|
|||
"advancement.create.its_alive": "UNLOCALIZED: It's Alive!",
|
||||
"advancement.create.its_alive.desc": "UNLOCALIZED: Watch your first kinetic component spin.",
|
||||
"advancement.create.shifting_gears": "UNLOCALIZED: Shifting Gears",
|
||||
"advancement.create.shifting_gears.desc": "UNLOCALIZED: Connect a Large Cogwheel to a Small Cogwheel, allowing you to change the speed of your contraption.",
|
||||
"advancement.create.shifting_gears.desc": "UNLOCALIZED: Connect a Large Cogwheel to a Small Cogwheel, allowing you to change the speed of your Contraption.",
|
||||
"advancement.create.overstressed": "UNLOCALIZED: Overstressed",
|
||||
"advancement.create.overstressed.desc": "UNLOCALIZED: Experience the limits of stress firsthand.",
|
||||
"advancement.create.belt": "UNLOCALIZED: Kelp Drive",
|
||||
"advancement.create.belt.desc": "UNLOCALIZED: Connect two shafts with a Mechanical Belt.",
|
||||
"advancement.create.tunnel": "UNLOCALIZED: Take cover!",
|
||||
"advancement.create.tunnel.desc": "UNLOCALIZED: Embellish your mechanical belt with a Tunnel.",
|
||||
"advancement.create.tunnel": "UNLOCALIZED: Take Cover!",
|
||||
"advancement.create.tunnel.desc": "UNLOCALIZED: Embellish your Mechanical Belt with a Tunnel.",
|
||||
"advancement.create.splitter_tunnel": "UNLOCALIZED: Divide and Conquer",
|
||||
"advancement.create.splitter_tunnel.desc": "UNLOCALIZED: Create a splitter with a group of Brass Tunnels.",
|
||||
"advancement.create.chute": "UNLOCALIZED: Tumbling down",
|
||||
"advancement.create.chute.desc": "UNLOCALIZED: Place a chute, the vertical counterpart of the belt.",
|
||||
"advancement.create.chute": "UNLOCALIZED: Tumbling Down",
|
||||
"advancement.create.chute.desc": "UNLOCALIZED: Place a Chute, the vertical counterpart of the Belt.",
|
||||
"advancement.create.upward_chute": "UNLOCALIZED: Aerial Abduction",
|
||||
"advancement.create.upward_chute.desc": "UNLOCALIZED: Watch a thrown item fly up into a fan-powered chute.",
|
||||
"advancement.create.upward_chute.desc": "UNLOCALIZED: Watch a thrown item fly up into a Fan-powered Chute.",
|
||||
"advancement.create.belt_funnel": "UNLOCALIZED: Funnels' Flappy Danglers",
|
||||
"advancement.create.belt_funnel.desc": "UNLOCALIZED: Place a sideways funnel on top of a belt or depot to create a special type.",
|
||||
"advancement.create.belt_funnel.desc": "UNLOCALIZED: Place a sideways Funnel on top of a Belt or Depot to create a special type.",
|
||||
"advancement.create.belt_funnel_kiss": "UNLOCALIZED: The Parrots and the Flaps",
|
||||
"advancement.create.belt_funnel_kiss.desc": "UNLOCALIZED: Make two belt mounted funnels kiss.",
|
||||
"advancement.create.belt_funnel_kiss.desc": "UNLOCALIZED: Make two Belt-mounted Funnels kiss.",
|
||||
"advancement.create.fan": "UNLOCALIZED: Mechanical Airbender",
|
||||
"advancement.create.fan.desc": "UNLOCALIZED: Ride the stream of air provided by an Encased Fan.",
|
||||
"advancement.create.fan_lava": "UNLOCALIZED: Geothermal Space Heater",
|
||||
|
@ -677,32 +678,32 @@
|
|||
"advancement.create.fan_water": "UNLOCALIZED: Wacky Washing",
|
||||
"advancement.create.fan_water.desc": "UNLOCALIZED: Get caught in a stream of air that washes things.",
|
||||
"advancement.create.fan_smoke": "UNLOCALIZED: Mechanical Bellows",
|
||||
"advancement.create.fan_smoke.desc": "UNLOCALIZED: Get caught in a stream of air that smokes items.",
|
||||
"advancement.create.fan_smoke.desc": "UNLOCALIZED: Get caught in a stream of air that smokes things.",
|
||||
"advancement.create.wrench": "UNLOCALIZED: Configure Conveniently",
|
||||
"advancement.create.wrench.desc": "UNLOCALIZED: Create a Wrench to aid you in building your contraptions.",
|
||||
"advancement.create.wrench.desc": "UNLOCALIZED: Create a Wrench to aid you in building your Contraptions.",
|
||||
"advancement.create.goggles": "UNLOCALIZED: Stress-O-Vision",
|
||||
"advancement.create.goggles.desc": "UNLOCALIZED: Create some Engineer's Goggles to aid you in getting more kinetic information from components.",
|
||||
"advancement.create.speedometer": "UNLOCALIZED: But How Fast Exactly?",
|
||||
"advancement.create.speedometer.desc": "UNLOCALIZED: Place and power a Speedometer. Look at it through your goggles to read its exact value.",
|
||||
"advancement.create.speedometer.desc": "UNLOCALIZED: Place and power a Speedometer. Look at it through your Goggles to read its exact value.",
|
||||
"advancement.create.stressometer": "UNLOCALIZED: But How Stressed Exactly?",
|
||||
"advancement.create.stressometer.desc": "UNLOCALIZED: Place and power a Stressometer. Look at it through your goggles to read its exact value.",
|
||||
"advancement.create.stressometer.desc": "UNLOCALIZED: Place and power a Stressometer. Look at it through your Goggles to read its exact value.",
|
||||
"advancement.create.aesthetics": "UNLOCALIZED: Boom, Aesthetics!",
|
||||
"advancement.create.aesthetics.desc": "UNLOCALIZED: Place brackets on a shaft, pipe and cogwheel.",
|
||||
"advancement.create.aesthetics.desc": "UNLOCALIZED: Place Brackets on a Shaft, Pipe, and Cogwheel.",
|
||||
"advancement.create.reinforced": "UNLOCALIZED: Boom, Reinforced!",
|
||||
"advancement.create.reinforced.desc": "UNLOCALIZED: Use fitting casing blocks on a shaft, pipe and mechanical belt.",
|
||||
"advancement.create.reinforced.desc": "UNLOCALIZED: Use fitting Casing blocks on a Shaft, Pipe, and Mechanical Belt.",
|
||||
"advancement.create.water_wheel": "UNLOCALIZED: Harnessing Hydraulics",
|
||||
"advancement.create.water_wheel.desc": "UNLOCALIZED: Place a Water Wheel and try getting it to spin!",
|
||||
"advancement.create.chocolate_wheel": "UNLOCALIZED: Tasteful power",
|
||||
"advancement.create.chocolate_wheel.desc": "UNLOCALIZED: Run a Water Wheel with molten Chocolate.",
|
||||
"advancement.create.chocolate_wheel": "UNLOCALIZED: Tasteful Power",
|
||||
"advancement.create.chocolate_wheel.desc": "UNLOCALIZED: Run a Water Wheel with Molten Chocolate.",
|
||||
"advancement.create.lava_wheel": "UNLOCALIZED: Magma Wheel",
|
||||
"advancement.create.lava_wheel.desc": "UNLOCALIZED: This shouldn't have worked.",
|
||||
"advancement.create.cuckoo": "UNLOCALIZED: Is it time?",
|
||||
"advancement.create.cuckoo.desc": "UNLOCALIZED: Witness a cuckhoo clock announce bedtime.",
|
||||
"advancement.create.cuckoo": "UNLOCALIZED: Is It Time?",
|
||||
"advancement.create.cuckoo.desc": "UNLOCALIZED: Witness a Cuckoo Clock announce bedtime.",
|
||||
"advancement.create.millstone": "UNLOCALIZED: Pocket Crusher",
|
||||
"advancement.create.millstone.desc": "UNLOCALIZED: Place and power a Millstone.",
|
||||
"advancement.create.windmill": "UNLOCALIZED: A mild Breeze",
|
||||
"advancement.create.windmill": "UNLOCALIZED: A Mild Breeze",
|
||||
"advancement.create.windmill.desc": "UNLOCALIZED: Assemble a windmill.",
|
||||
"advancement.create.maxed_windmill": "UNLOCALIZED: A strong breeze",
|
||||
"advancement.create.maxed_windmill": "UNLOCALIZED: A Strong Breeze",
|
||||
"advancement.create.maxed_windmill.desc": "UNLOCALIZED: Assemble a windmill of maximum strength.",
|
||||
"advancement.create.andesite_casing": "UNLOCALIZED: The Andesite Age",
|
||||
"advancement.create.andesite_casing.desc": "UNLOCALIZED: Use some Andesite Alloy and Wood to create a basic Casing.",
|
||||
|
@ -720,7 +721,7 @@
|
|||
"advancement.create.basin.desc": "UNLOCALIZED: Place a Basin and try throwing items into it.",
|
||||
"advancement.create.mixer": "UNLOCALIZED: Mixin' It Up",
|
||||
"advancement.create.mixer.desc": "UNLOCALIZED: Place a Mechanical Mixer above the Basin, power it, and start mixing some ingredients.",
|
||||
"advancement.create.blaze_burner": "UNLOCALIZED: A living Fireplace",
|
||||
"advancement.create.blaze_burner": "UNLOCALIZED: A Living Fireplace",
|
||||
"advancement.create.blaze_burner.desc": "UNLOCALIZED: Obtain a Blaze Burner.",
|
||||
"advancement.create.compact": "UNLOCALIZED: Automated Compacting",
|
||||
"advancement.create.compact.desc": "UNLOCALIZED: Use a Press and a Basin to compact some items.",
|
||||
|
@ -731,42 +732,42 @@
|
|||
"advancement.create.copper_casing": "UNLOCALIZED: The Copper Age",
|
||||
"advancement.create.copper_casing.desc": "UNLOCALIZED: Use some Copper Sheets and Wood to create some Copper Casings.",
|
||||
"advancement.create.spout": "UNLOCALIZED: Sploosh",
|
||||
"advancement.create.spout.desc": "UNLOCALIZED: Watch a fluid item being filled using a spout.",
|
||||
"advancement.create.spout.desc": "UNLOCALIZED: Watch a fluid item being filled using a Spout.",
|
||||
"advancement.create.spout_potion": "UNLOCALIZED: Global Brewery",
|
||||
"advancement.create.spout_potion.desc": "UNLOCALIZED: Watch a spout fill a bottle with potion fluid.",
|
||||
"advancement.create.chocolate": "UNLOCALIZED: A world of Imagination",
|
||||
"advancement.create.chocolate.desc": "UNLOCALIZED: Obtain a bucket of Molten Chocolate.",
|
||||
"advancement.create.spout_potion.desc": "UNLOCALIZED: Watch a Spout fill a Bottle with potion fluid.",
|
||||
"advancement.create.chocolate": "UNLOCALIZED: A World of Imagination",
|
||||
"advancement.create.chocolate.desc": "UNLOCALIZED: Obtain a Bucket of Molten Chocolate.",
|
||||
"advancement.create.item_drain": "UNLOCALIZED: Tumble Draining",
|
||||
"advancement.create.item_drain.desc": "UNLOCALIZED: Watch a fluid item being emptied by an item drain.",
|
||||
"advancement.create.chained_item_drain": "UNLOCALIZED: Let it roll!",
|
||||
"advancement.create.chained_item_drain.desc": "UNLOCALIZED: Watch an item roll across several chained item drains.",
|
||||
"advancement.create.item_drain.desc": "UNLOCALIZED: Watch a fluid item being emptied by an Item Drain.",
|
||||
"advancement.create.chained_item_drain": "UNLOCALIZED: Let It Roll!",
|
||||
"advancement.create.chained_item_drain.desc": "UNLOCALIZED: Watch an item roll across several chained Item Drains.",
|
||||
"advancement.create.glass_pipe": "UNLOCALIZED: Flow Spy",
|
||||
"advancement.create.glass_pipe.desc": "UNLOCALIZED: Watch fluid propagate through a windowed fluid pipe. Straight fluid pipes become windowed when a wrench is used on them.",
|
||||
"advancement.create.pipe_collision": "UNLOCALIZED: Never cross the Streams!",
|
||||
"advancement.create.glass_pipe.desc": "UNLOCALIZED: Watch fluid propagate through a windowed Fluid Pipe. Straight Fluid Pipes become windowed when a Wrench is used on them.",
|
||||
"advancement.create.pipe_collision": "UNLOCALIZED: Never Cross the Streams!",
|
||||
"advancement.create.pipe_collision.desc": "UNLOCALIZED: Watch two fluids meet in your pipe network.",
|
||||
"advancement.create.pipe_spill": "UNLOCALIZED: There's a leak!",
|
||||
"advancement.create.pipe_spill.desc": "UNLOCALIZED: Watch an open end of a pipe take or place fluids into the world.",
|
||||
"advancement.create.pipe_spill": "UNLOCALIZED: There's a Leak!",
|
||||
"advancement.create.pipe_spill.desc": "UNLOCALIZED: Watch an open end of a Pipe take or place fluids into the world.",
|
||||
"advancement.create.hose_pulley": "UNLOCALIZED: Industrial Spillage",
|
||||
"advancement.create.hose_pulley.desc": "UNLOCALIZED: Lower a hose pulley and watch it drain or fill a body of fluid.",
|
||||
"advancement.create.hose_pulley.desc": "UNLOCALIZED: Lower a Hose Pulley and watch it drain or fill a body of fluid.",
|
||||
"advancement.create.infinite_water": "UNLOCALIZED: Draining the Ocean",
|
||||
"advancement.create.infinite_water.desc": "UNLOCALIZED: Pump from a body of Water large enough to be considered Infinite.",
|
||||
"advancement.create.infinite_water.desc": "UNLOCALIZED: Pump from a body of Water large enough to be considered infinite.",
|
||||
"advancement.create.infinite_lava": "UNLOCALIZED: Draining the Planets' Core",
|
||||
"advancement.create.infinite_lava.desc": "UNLOCALIZED: Pump from a body of Lava large enough to be considered Infinite.",
|
||||
"advancement.create.infinite_lava.desc": "UNLOCALIZED: Pump from a body of Lava large enough to be considered infinite.",
|
||||
"advancement.create.infinite_chocolate": "UNLOCALIZED: Drowning in Imagination",
|
||||
"advancement.create.infinite_chocolate.desc": "UNLOCALIZED: Pump from a body of Molten Chocolate large enough to be considered Infinite.",
|
||||
"advancement.create.infinite_chocolate.desc": "UNLOCALIZED: Pump from a body of Molten Chocolate large enough to be considered infinite.",
|
||||
"advancement.create.crafter": "UNLOCALIZED: Automated Assembly",
|
||||
"advancement.create.crafter.desc": "UNLOCALIZED: Place and power some Mechanical Crafters.",
|
||||
"advancement.create.clockwork_bearing": "UNLOCALIZED: Contraption o'clock",
|
||||
"advancement.create.clockwork_bearing.desc": "UNLOCALIZED: Assemble a Structure mounted on a Clockwork Bearing.",
|
||||
"advancement.create.clockwork_bearing": "UNLOCALIZED: Contraption O'Clock",
|
||||
"advancement.create.clockwork_bearing.desc": "UNLOCALIZED: Assemble a structure mounted on a Clockwork Bearing.",
|
||||
"advancement.create.nixie_tube": "UNLOCALIZED: Signs of Style",
|
||||
"advancement.create.nixie_tube.desc": "UNLOCALIZED: Obtain and place down a pair of Nixie Tubes.",
|
||||
"advancement.create.deployer": "UNLOCALIZED: Poke, Place, and Attack",
|
||||
"advancement.create.deployer.desc": "UNLOCALIZED: Place and power a Deployer, the perfect reflection of yourself.",
|
||||
"advancement.create.speed_controller": "UNLOCALIZED: Engineers hate him!",
|
||||
"advancement.create.speed_controller": "UNLOCALIZED: Engineers Hate Him!",
|
||||
"advancement.create.speed_controller.desc": "UNLOCALIZED: Place a Rotation Speed Controller, the ultimate device for changing gear.",
|
||||
"advancement.create.flywheel": "UNLOCALIZED: Heart of the Factory",
|
||||
"advancement.create.flywheel.desc": "UNLOCALIZED: Successfully connect an engine to the Flywheel.",
|
||||
"advancement.create.overstress_flywheel": "UNLOCALIZED: High levels of Stress",
|
||||
"advancement.create.flywheel.desc": "UNLOCALIZED: Successfully connect a Furnace Engine to the Flywheel.",
|
||||
"advancement.create.overstress_flywheel": "UNLOCALIZED: High Levels of Stress",
|
||||
"advancement.create.overstress_flywheel.desc": "UNLOCALIZED: Overstress a Furnace Engine.",
|
||||
"advancement.create.precision_mechanism": "UNLOCALIZED: Complex Curiosities",
|
||||
"advancement.create.precision_mechanism.desc": "UNLOCALIZED: Assemble a Precision Mechanism.",
|
||||
|
@ -783,7 +784,7 @@
|
|||
"advancement.create.crushing_wheel": "UNLOCALIZED: A Pair of Giants",
|
||||
"advancement.create.crushing_wheel.desc": "UNLOCALIZED: Create some Crushing Wheels to break down more materials more effectively.",
|
||||
"advancement.create.blaze_cake": "UNLOCALIZED: Sugar Rush",
|
||||
"advancement.create.blaze_cake.desc": "UNLOCALIZED: Bake your blaze burner a special cake.",
|
||||
"advancement.create.blaze_cake.desc": "UNLOCALIZED: Bake your Blaze Burner a special cake.",
|
||||
"advancement.create.wand_of_symmetry": "UNLOCALIZED: Radiant Mirrors",
|
||||
"advancement.create.wand_of_symmetry.desc": "UNLOCALIZED: Craft a Staff of Symmetry.",
|
||||
"advancement.create.extendo_grip": "UNLOCALIZED: Boioioing!",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 488",
|
||||
"_": "Missing Localizations: 489",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -578,6 +578,7 @@
|
|||
"item.create.chromatic_compound": "Związek chromatyczny",
|
||||
"item.create.cinder_flour": "Rozżarzona mąka",
|
||||
"item.create.copper_backtank": "Miedziany zbiornik w plecaku",
|
||||
"item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable",
|
||||
"item.create.copper_nugget": "Bryłka miedzi",
|
||||
"item.create.copper_sheet": "Arkusz miedzi",
|
||||
"item.create.crafter_slot_cover": "Przykrywka na slot stołu rzemieślniczego",
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1672",
|
||||
"_": "Missing Localizations: 1301",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
"block.create.acacia_window": "UNLOCALIZED: Acacia Window",
|
||||
"block.create.acacia_window_pane": "UNLOCALIZED: Acacia Window Pane",
|
||||
"block.create.acacia_window": "Janela de Acácia",
|
||||
"block.create.acacia_window_pane": "Vidraça de Acácia",
|
||||
"block.create.adjustable_chain_gearshift": "Correia Ajustável",
|
||||
"block.create.analog_lever": "Alavanca Analógica",
|
||||
"block.create.andesite_belt_funnel": "Funil de Esteira de Andesito",
|
||||
|
@ -13,14 +13,14 @@
|
|||
"block.create.andesite_encased_large_cogwheel": "Roda dentada grande revestida com andesito",
|
||||
"block.create.andesite_encased_shaft": "Eixo revestido com latão",
|
||||
"block.create.andesite_funnel": "Funil de Andesito",
|
||||
"block.create.andesite_pillar": "UNLOCALIZED: Andesite Pillar",
|
||||
"block.create.andesite_pillar": "Pilar de andesito",
|
||||
"block.create.andesite_tunnel": "Tunel de Andesito",
|
||||
"block.create.asurine": "UNLOCALIZED: Asurine",
|
||||
"block.create.asurine_pillar": "UNLOCALIZED: Asurine Pillar",
|
||||
"block.create.asurine": "Asurino",
|
||||
"block.create.asurine_pillar": "Pilar de Asurino",
|
||||
"block.create.basin": "Bacia",
|
||||
"block.create.belt": "Esteira Mecânica",
|
||||
"block.create.birch_window": "UNLOCALIZED: Birch Window",
|
||||
"block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane",
|
||||
"block.create.birch_window": "Janela de Bétula",
|
||||
"block.create.birch_window_pane": "Vidraça de Bétula",
|
||||
"block.create.black_nixie_tube": "Tubo nixie preto",
|
||||
"block.create.black_sail": "Vela preta",
|
||||
"block.create.black_seat": "Assento preto",
|
||||
|
@ -45,7 +45,7 @@
|
|||
"block.create.brown_seat": "Assento marrom",
|
||||
"block.create.brown_toolbox": "Caixa de ferramentas marrom",
|
||||
"block.create.brown_valve_handle": "Válvula marrom",
|
||||
"block.create.calcite_pillar": "UNLOCALIZED: Calcite Pillar",
|
||||
"block.create.calcite_pillar": "Pilar de Calcita",
|
||||
"block.create.cart_assembler": "Montador de Carrinho de Mina",
|
||||
"block.create.chocolate": "Chocolate",
|
||||
"block.create.chute": "Calha",
|
||||
|
@ -57,170 +57,170 @@
|
|||
"block.create.controls": "UNLOCALIZED: Controls",
|
||||
"block.create.copper_backtank": "Tanque Traseiro de Cobre",
|
||||
"block.create.copper_casing": "Revestimento de Cobre",
|
||||
"block.create.copper_shingle_slab": "UNLOCALIZED: Copper Shingle Slab",
|
||||
"block.create.copper_shingle_stairs": "UNLOCALIZED: Copper Shingle Stairs",
|
||||
"block.create.copper_shingles": "UNLOCALIZED: Copper Shingles",
|
||||
"block.create.copper_tile_slab": "UNLOCALIZED: Copper Tile Slab",
|
||||
"block.create.copper_tile_stairs": "UNLOCALIZED: Copper Tile Stairs",
|
||||
"block.create.copper_tiles": "UNLOCALIZED: Copper Tiles",
|
||||
"block.create.copper_shingle_slab": "Laje de telha de cobre",
|
||||
"block.create.copper_shingle_stairs": "Escada de telha de cobre",
|
||||
"block.create.copper_shingles": "Telha de cobre",
|
||||
"block.create.copper_tile_slab": "Laje de ladrilho de cobre",
|
||||
"block.create.copper_tile_stairs": "Escada de ladrilho de cobre",
|
||||
"block.create.copper_tiles": "Ladrilho de cobre",
|
||||
"block.create.copper_valve_handle": "Válvula de Cobre",
|
||||
"block.create.creative_crate": "Caixa Criativa",
|
||||
"block.create.creative_fluid_tank": "Tanque de Fluidos Criativo",
|
||||
"block.create.creative_motor": "Motor Criativo",
|
||||
"block.create.crimsite": "UNLOCALIZED: Crimsite",
|
||||
"block.create.crimsite_pillar": "UNLOCALIZED: Crimsite Pillar",
|
||||
"block.create.crimson_window": "UNLOCALIZED: Crimson Window",
|
||||
"block.create.crimson_window_pane": "UNLOCALIZED: Crimson Window Pane",
|
||||
"block.create.crimsite": "Carmesito",
|
||||
"block.create.crimsite_pillar": "Pilar de Camesito",
|
||||
"block.create.crimson_window": "Janela carmesim",
|
||||
"block.create.crimson_window_pane": "Vidraça carmesim",
|
||||
"block.create.crushing_wheel": "Roda de Moer",
|
||||
"block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller",
|
||||
"block.create.crushing_wheel_controller": "Controlador da roda de moer",
|
||||
"block.create.cuckoo_clock": "Relógio Cuckoo",
|
||||
"block.create.cut_andesite": "UNLOCALIZED: Cut Andesite",
|
||||
"block.create.cut_andesite_brick_slab": "UNLOCALIZED: Cut Andesite Brick Slab",
|
||||
"block.create.cut_andesite_brick_stairs": "UNLOCALIZED: Cut Andesite Brick Stairs",
|
||||
"block.create.cut_andesite_brick_wall": "UNLOCALIZED: Cut Andesite Brick Wall",
|
||||
"block.create.cut_andesite_bricks": "UNLOCALIZED: Cut Andesite Bricks",
|
||||
"block.create.cut_andesite_slab": "UNLOCALIZED: Cut Andesite Slab",
|
||||
"block.create.cut_andesite_stairs": "UNLOCALIZED: Cut Andesite Stairs",
|
||||
"block.create.cut_andesite_wall": "UNLOCALIZED: Cut Andesite Wall",
|
||||
"block.create.cut_asurine": "UNLOCALIZED: Cut Asurine",
|
||||
"block.create.cut_asurine_brick_slab": "UNLOCALIZED: Cut Asurine Brick Slab",
|
||||
"block.create.cut_asurine_brick_stairs": "UNLOCALIZED: Cut Asurine Brick Stairs",
|
||||
"block.create.cut_asurine_brick_wall": "UNLOCALIZED: Cut Asurine Brick Wall",
|
||||
"block.create.cut_asurine_bricks": "UNLOCALIZED: Cut Asurine Bricks",
|
||||
"block.create.cut_asurine_slab": "UNLOCALIZED: Cut Asurine Slab",
|
||||
"block.create.cut_asurine_stairs": "UNLOCALIZED: Cut Asurine Stairs",
|
||||
"block.create.cut_asurine_wall": "UNLOCALIZED: Cut Asurine Wall",
|
||||
"block.create.cut_calcite": "UNLOCALIZED: Cut Calcite",
|
||||
"block.create.cut_calcite_brick_slab": "UNLOCALIZED: Cut Calcite Brick Slab",
|
||||
"block.create.cut_calcite_brick_stairs": "UNLOCALIZED: Cut Calcite Brick Stairs",
|
||||
"block.create.cut_calcite_brick_wall": "UNLOCALIZED: Cut Calcite Brick Wall",
|
||||
"block.create.cut_calcite_bricks": "UNLOCALIZED: Cut Calcite Bricks",
|
||||
"block.create.cut_calcite_slab": "UNLOCALIZED: Cut Calcite Slab",
|
||||
"block.create.cut_calcite_stairs": "UNLOCALIZED: Cut Calcite Stairs",
|
||||
"block.create.cut_calcite_wall": "UNLOCALIZED: Cut Calcite Wall",
|
||||
"block.create.cut_crimsite": "UNLOCALIZED: Cut Crimsite",
|
||||
"block.create.cut_crimsite_brick_slab": "UNLOCALIZED: Cut Crimsite Brick Slab",
|
||||
"block.create.cut_crimsite_brick_stairs": "UNLOCALIZED: Cut Crimsite Brick Stairs",
|
||||
"block.create.cut_crimsite_brick_wall": "UNLOCALIZED: Cut Crimsite Brick Wall",
|
||||
"block.create.cut_crimsite_bricks": "UNLOCALIZED: Cut Crimsite Bricks",
|
||||
"block.create.cut_crimsite_slab": "UNLOCALIZED: Cut Crimsite Slab",
|
||||
"block.create.cut_crimsite_stairs": "UNLOCALIZED: Cut Crimsite Stairs",
|
||||
"block.create.cut_crimsite_wall": "UNLOCALIZED: Cut Crimsite Wall",
|
||||
"block.create.cut_deepslate": "UNLOCALIZED: Cut Deepslate",
|
||||
"block.create.cut_deepslate_brick_slab": "UNLOCALIZED: Cut Deepslate Brick Slab",
|
||||
"block.create.cut_deepslate_brick_stairs": "UNLOCALIZED: Cut Deepslate Brick Stairs",
|
||||
"block.create.cut_deepslate_brick_wall": "UNLOCALIZED: Cut Deepslate Brick Wall",
|
||||
"block.create.cut_deepslate_bricks": "UNLOCALIZED: Cut Deepslate Bricks",
|
||||
"block.create.cut_deepslate_slab": "UNLOCALIZED: Cut Deepslate Slab",
|
||||
"block.create.cut_deepslate_stairs": "UNLOCALIZED: Cut Deepslate Stairs",
|
||||
"block.create.cut_deepslate_wall": "UNLOCALIZED: Cut Deepslate Wall",
|
||||
"block.create.cut_diorite": "UNLOCALIZED: Cut Diorite",
|
||||
"block.create.cut_diorite_brick_slab": "UNLOCALIZED: Cut Diorite Brick Slab",
|
||||
"block.create.cut_diorite_brick_stairs": "UNLOCALIZED: Cut Diorite Brick Stairs",
|
||||
"block.create.cut_diorite_brick_wall": "UNLOCALIZED: Cut Diorite Brick Wall",
|
||||
"block.create.cut_diorite_bricks": "UNLOCALIZED: Cut Diorite Bricks",
|
||||
"block.create.cut_diorite_slab": "UNLOCALIZED: Cut Diorite Slab",
|
||||
"block.create.cut_diorite_stairs": "UNLOCALIZED: Cut Diorite Stairs",
|
||||
"block.create.cut_diorite_wall": "UNLOCALIZED: Cut Diorite Wall",
|
||||
"block.create.cut_dripstone": "UNLOCALIZED: Cut Dripstone",
|
||||
"block.create.cut_dripstone_brick_slab": "UNLOCALIZED: Cut Dripstone Brick Slab",
|
||||
"block.create.cut_dripstone_brick_stairs": "UNLOCALIZED: Cut Dripstone Brick Stairs",
|
||||
"block.create.cut_dripstone_brick_wall": "UNLOCALIZED: Cut Dripstone Brick Wall",
|
||||
"block.create.cut_dripstone_bricks": "UNLOCALIZED: Cut Dripstone Bricks",
|
||||
"block.create.cut_dripstone_slab": "UNLOCALIZED: Cut Dripstone Slab",
|
||||
"block.create.cut_dripstone_stairs": "UNLOCALIZED: Cut Dripstone Stairs",
|
||||
"block.create.cut_dripstone_wall": "UNLOCALIZED: Cut Dripstone Wall",
|
||||
"block.create.cut_granite": "UNLOCALIZED: Cut Granite",
|
||||
"block.create.cut_granite_brick_slab": "UNLOCALIZED: Cut Granite Brick Slab",
|
||||
"block.create.cut_granite_brick_stairs": "UNLOCALIZED: Cut Granite Brick Stairs",
|
||||
"block.create.cut_granite_brick_wall": "UNLOCALIZED: Cut Granite Brick Wall",
|
||||
"block.create.cut_granite_bricks": "UNLOCALIZED: Cut Granite Bricks",
|
||||
"block.create.cut_granite_slab": "UNLOCALIZED: Cut Granite Slab",
|
||||
"block.create.cut_granite_stairs": "UNLOCALIZED: Cut Granite Stairs",
|
||||
"block.create.cut_granite_wall": "UNLOCALIZED: Cut Granite Wall",
|
||||
"block.create.cut_limestone": "UNLOCALIZED: Cut Limestone",
|
||||
"block.create.cut_limestone_brick_slab": "UNLOCALIZED: Cut Limestone Brick Slab",
|
||||
"block.create.cut_limestone_brick_stairs": "UNLOCALIZED: Cut Limestone Brick Stairs",
|
||||
"block.create.cut_limestone_brick_wall": "UNLOCALIZED: Cut Limestone Brick Wall",
|
||||
"block.create.cut_limestone_bricks": "UNLOCALIZED: Cut Limestone Bricks",
|
||||
"block.create.cut_limestone_slab": "UNLOCALIZED: Cut Limestone Slab",
|
||||
"block.create.cut_limestone_stairs": "UNLOCALIZED: Cut Limestone Stairs",
|
||||
"block.create.cut_limestone_wall": "UNLOCALIZED: Cut Limestone Wall",
|
||||
"block.create.cut_ochrum": "UNLOCALIZED: Cut Ochrum",
|
||||
"block.create.cut_ochrum_brick_slab": "UNLOCALIZED: Cut Ochrum Brick Slab",
|
||||
"block.create.cut_ochrum_brick_stairs": "UNLOCALIZED: Cut Ochrum Brick Stairs",
|
||||
"block.create.cut_ochrum_brick_wall": "UNLOCALIZED: Cut Ochrum Brick Wall",
|
||||
"block.create.cut_ochrum_bricks": "UNLOCALIZED: Cut Ochrum Bricks",
|
||||
"block.create.cut_ochrum_slab": "UNLOCALIZED: Cut Ochrum Slab",
|
||||
"block.create.cut_ochrum_stairs": "UNLOCALIZED: Cut Ochrum Stairs",
|
||||
"block.create.cut_ochrum_wall": "UNLOCALIZED: Cut Ochrum Wall",
|
||||
"block.create.cut_scorchia": "UNLOCALIZED: Cut Scorchia",
|
||||
"block.create.cut_scorchia_brick_slab": "UNLOCALIZED: Cut Scorchia Brick Slab",
|
||||
"block.create.cut_scorchia_brick_stairs": "UNLOCALIZED: Cut Scorchia Brick Stairs",
|
||||
"block.create.cut_scorchia_brick_wall": "UNLOCALIZED: Cut Scorchia Brick Wall",
|
||||
"block.create.cut_scorchia_bricks": "UNLOCALIZED: Cut Scorchia Bricks",
|
||||
"block.create.cut_scorchia_slab": "UNLOCALIZED: Cut Scorchia Slab",
|
||||
"block.create.cut_scorchia_stairs": "UNLOCALIZED: Cut Scorchia Stairs",
|
||||
"block.create.cut_scorchia_wall": "UNLOCALIZED: Cut Scorchia Wall",
|
||||
"block.create.cut_scoria": "UNLOCALIZED: Cut Scoria",
|
||||
"block.create.cut_scoria_brick_slab": "UNLOCALIZED: Cut Scoria Brick Slab",
|
||||
"block.create.cut_scoria_brick_stairs": "UNLOCALIZED: Cut Scoria Brick Stairs",
|
||||
"block.create.cut_scoria_brick_wall": "UNLOCALIZED: Cut Scoria Brick Wall",
|
||||
"block.create.cut_scoria_bricks": "UNLOCALIZED: Cut Scoria Bricks",
|
||||
"block.create.cut_scoria_slab": "UNLOCALIZED: Cut Scoria Slab",
|
||||
"block.create.cut_scoria_stairs": "UNLOCALIZED: Cut Scoria Stairs",
|
||||
"block.create.cut_scoria_wall": "UNLOCALIZED: Cut Scoria Wall",
|
||||
"block.create.cut_tuff": "UNLOCALIZED: Cut Tuff",
|
||||
"block.create.cut_tuff_brick_slab": "UNLOCALIZED: Cut Tuff Brick Slab",
|
||||
"block.create.cut_tuff_brick_stairs": "UNLOCALIZED: Cut Tuff Brick Stairs",
|
||||
"block.create.cut_tuff_brick_wall": "UNLOCALIZED: Cut Tuff Brick Wall",
|
||||
"block.create.cut_tuff_bricks": "UNLOCALIZED: Cut Tuff Bricks",
|
||||
"block.create.cut_tuff_slab": "UNLOCALIZED: Cut Tuff Slab",
|
||||
"block.create.cut_tuff_stairs": "UNLOCALIZED: Cut Tuff Stairs",
|
||||
"block.create.cut_tuff_wall": "UNLOCALIZED: Cut Tuff Wall",
|
||||
"block.create.cut_veridium": "UNLOCALIZED: Cut Veridium",
|
||||
"block.create.cut_veridium_brick_slab": "UNLOCALIZED: Cut Veridium Brick Slab",
|
||||
"block.create.cut_veridium_brick_stairs": "UNLOCALIZED: Cut Veridium Brick Stairs",
|
||||
"block.create.cut_veridium_brick_wall": "UNLOCALIZED: Cut Veridium Brick Wall",
|
||||
"block.create.cut_veridium_bricks": "UNLOCALIZED: Cut Veridium Bricks",
|
||||
"block.create.cut_veridium_slab": "UNLOCALIZED: Cut Veridium Slab",
|
||||
"block.create.cut_veridium_stairs": "UNLOCALIZED: Cut Veridium Stairs",
|
||||
"block.create.cut_veridium_wall": "UNLOCALIZED: Cut Veridium Wall",
|
||||
"block.create.cut_andesite": "Andesito lapidado",
|
||||
"block.create.cut_andesite_brick_slab": "Laje de tijolos lapidados de andesito",
|
||||
"block.create.cut_andesite_brick_stairs": "Escada de tijolos lapidados de andesito",
|
||||
"block.create.cut_andesite_brick_wall": "Muro de tijolos lapidados de andesito",
|
||||
"block.create.cut_andesite_bricks": "Tijolos lapidados de andesito",
|
||||
"block.create.cut_andesite_slab": "Laje de andesito lapidado",
|
||||
"block.create.cut_andesite_stairs": "Escada de andesito lapidado",
|
||||
"block.create.cut_andesite_wall": "Muro de andesito lapidado",
|
||||
"block.create.cut_asurine": "Asurino lapidado",
|
||||
"block.create.cut_asurine_brick_slab": "Laje de tijolos lapidados de Asurino",
|
||||
"block.create.cut_asurine_brick_stairs": "Escada de tijolos lapidados de Asurino",
|
||||
"block.create.cut_asurine_brick_wall": "Muro de tijolos lapidados de Asurino",
|
||||
"block.create.cut_asurine_bricks": "Tijolos lapidados de Asurino",
|
||||
"block.create.cut_asurine_slab": "Laje de Asurino lapidado",
|
||||
"block.create.cut_asurine_stairs": "Escada de Asurino lapidado",
|
||||
"block.create.cut_asurine_wall": "Muro de Asurino lapidado",
|
||||
"block.create.cut_calcite": "Calcita lapidada",
|
||||
"block.create.cut_calcite_brick_slab": "Laje de tijolos lapidados de Calcita",
|
||||
"block.create.cut_calcite_brick_stairs": "Escada de tijolos lapidados de Calcita",
|
||||
"block.create.cut_calcite_brick_wall": "Muro de tijolos lapidados de Calcita",
|
||||
"block.create.cut_calcite_bricks": "Tijolos lapidados de Calcita",
|
||||
"block.create.cut_calcite_slab": "Laje de Calcita lapidada",
|
||||
"block.create.cut_calcite_stairs": "Escada de Calcita lapidada",
|
||||
"block.create.cut_calcite_wall": "Muro de Calcita lapidada",
|
||||
"block.create.cut_crimsite": "Carmesito lapidado",
|
||||
"block.create.cut_crimsite_brick_slab": "Laje de tijolos lapidados de Carmesito",
|
||||
"block.create.cut_crimsite_brick_stairs": "Escada de tijolos lapidados de Carmesito",
|
||||
"block.create.cut_crimsite_brick_wall": "Muro de tijolos lapidados de Carmesito",
|
||||
"block.create.cut_crimsite_bricks": "Tijolos lapidados de Carmesito",
|
||||
"block.create.cut_crimsite_slab": "Laje de Carmesito lapidado",
|
||||
"block.create.cut_crimsite_stairs": "Escada de Carmesito lapidado",
|
||||
"block.create.cut_crimsite_wall": "Muro de Carmesito lapidado",
|
||||
"block.create.cut_deepslate": "Ardósia lapidada",
|
||||
"block.create.cut_deepslate_brick_slab": "Laje de tijolos lapidados de ardósia",
|
||||
"block.create.cut_deepslate_brick_stairs": "Escada de tijolos lapidados de ardósia",
|
||||
"block.create.cut_deepslate_brick_wall": "Muro de tijolos lapidados de ardósia",
|
||||
"block.create.cut_deepslate_bricks": "Tijolos lapidados de ardósia",
|
||||
"block.create.cut_deepslate_slab": "Laje de ardósia lapidada",
|
||||
"block.create.cut_deepslate_stairs": "Escada de ardósia lapidada",
|
||||
"block.create.cut_deepslate_wall": "Muro de ardósia lapidada",
|
||||
"block.create.cut_diorite": "Diorito lapidado",
|
||||
"block.create.cut_diorite_brick_slab": "Laje de tijolos lapidados de diorito",
|
||||
"block.create.cut_diorite_brick_stairs": "Escada de tijolos lapidados de diorito",
|
||||
"block.create.cut_diorite_brick_wall": "Muro de tijolos lapidados de diorito",
|
||||
"block.create.cut_diorite_bricks": "Tijolos lapidados de diorito",
|
||||
"block.create.cut_diorite_slab": "Laje de diorito lapidado",
|
||||
"block.create.cut_diorite_stairs": "Escada de diorito lapidado",
|
||||
"block.create.cut_diorite_wall": "Muro de diorito lapidado",
|
||||
"block.create.cut_dripstone": "Espeleotema lapidado",
|
||||
"block.create.cut_dripstone_brick_slab": "Laje de tijolos lapidados de espeleotema",
|
||||
"block.create.cut_dripstone_brick_stairs": "Escada de tijolos lapidados de espeleotema",
|
||||
"block.create.cut_dripstone_brick_wall": "Muro de tijolos lapidados de espeleotema",
|
||||
"block.create.cut_dripstone_bricks": "Tijolos lapidados de espeleotema",
|
||||
"block.create.cut_dripstone_slab": "Laje de espeleotema lapidado",
|
||||
"block.create.cut_dripstone_stairs": "Escada de espeleotema lapidado",
|
||||
"block.create.cut_dripstone_wall": "Muro de espeleotema lapidado",
|
||||
"block.create.cut_granite": "Granito lapidado",
|
||||
"block.create.cut_granite_brick_slab": "Laje de tijolos lapidados de granito",
|
||||
"block.create.cut_granite_brick_stairs": "Escada de tijolos lapidados de granito",
|
||||
"block.create.cut_granite_brick_wall": "Muro de tijolos lapidados de granito",
|
||||
"block.create.cut_granite_bricks": "Tijolos lapidados de granito",
|
||||
"block.create.cut_granite_slab": "Laje de granito lapidado",
|
||||
"block.create.cut_granite_stairs": "Escada de granito lapidado",
|
||||
"block.create.cut_granite_wall": "Muro de granito lapidado",
|
||||
"block.create.cut_limestone": "Calcário lapidado",
|
||||
"block.create.cut_limestone_brick_slab": "Laje de tijolos lapidados de calcário",
|
||||
"block.create.cut_limestone_brick_stairs": "Escada de tijolos lapidados de calcário",
|
||||
"block.create.cut_limestone_brick_wall": "Muro de tijolos lapidados de calcário",
|
||||
"block.create.cut_limestone_bricks": "Tijolos lapidados de calcário",
|
||||
"block.create.cut_limestone_slab": "Laje de calcário lapidado",
|
||||
"block.create.cut_limestone_stairs": "Escada de calcário lapidado",
|
||||
"block.create.cut_limestone_wall": "Muro de calcário lapidado",
|
||||
"block.create.cut_ochrum": "Ocrom",
|
||||
"block.create.cut_ochrum_brick_slab": "Laje de tijolos lapidados de Ocrom",
|
||||
"block.create.cut_ochrum_brick_stairs": "Escada de tijolos lapidados de Ocrom",
|
||||
"block.create.cut_ochrum_brick_wall": "Muro de tijolos lapidados de Ocrom",
|
||||
"block.create.cut_ochrum_bricks": "Tijolos lapidados de Ocrom",
|
||||
"block.create.cut_ochrum_slab": "Laje de Ocrom lapidado",
|
||||
"block.create.cut_ochrum_stairs": "Escada de Ocrom lapidado",
|
||||
"block.create.cut_ochrum_wall": "Muro de Ocrom lapidado",
|
||||
"block.create.cut_scorchia": "Escória negra lapidada",
|
||||
"block.create.cut_scorchia_brick_slab": "Laje de tijolos lapidados de escória negra",
|
||||
"block.create.cut_scorchia_brick_stairs": "Escada de tijolos lapidados de escória negra",
|
||||
"block.create.cut_scorchia_brick_wall": "Muro de tijolos lapidados de escória negra",
|
||||
"block.create.cut_scorchia_bricks": "Tijolos lapidados de escória negra",
|
||||
"block.create.cut_scorchia_slab": "Laje de escória negra lapidada",
|
||||
"block.create.cut_scorchia_stairs": "Escada de escória negra lapidada",
|
||||
"block.create.cut_scorchia_wall": "Muro de escória negra lapidada",
|
||||
"block.create.cut_scoria": "Escória lapidada",
|
||||
"block.create.cut_scoria_brick_slab": "Laje de tijolos lapidados de escória",
|
||||
"block.create.cut_scoria_brick_stairs": "Escada de tijolos lapidados de escória",
|
||||
"block.create.cut_scoria_brick_wall": "Muro de tijolos lapidados de escória",
|
||||
"block.create.cut_scoria_bricks": "Tijolos lapidados de escória",
|
||||
"block.create.cut_scoria_slab": "Laje de escória lapidada",
|
||||
"block.create.cut_scoria_stairs": "Escada de escória lapidada",
|
||||
"block.create.cut_scoria_wall": "Muro de escória lapidada",
|
||||
"block.create.cut_tuff": "Tufo lapidado",
|
||||
"block.create.cut_tuff_brick_slab": "Laje de tijolos lapidados de tufo",
|
||||
"block.create.cut_tuff_brick_stairs": "Escada de tijolos lapidados de tufo",
|
||||
"block.create.cut_tuff_brick_wall": "Muro de tijolos lapidados de tufo",
|
||||
"block.create.cut_tuff_bricks": "Tijolos lapidados de tufo",
|
||||
"block.create.cut_tuff_slab": "Laje de tufo lapidado",
|
||||
"block.create.cut_tuff_stairs": "Escada de tufo lapidado",
|
||||
"block.create.cut_tuff_wall": "Muro de tufo lapidado",
|
||||
"block.create.cut_veridium": "Veridiano lapidado",
|
||||
"block.create.cut_veridium_brick_slab": "Laje de tijolos lapidados de Veridiano",
|
||||
"block.create.cut_veridium_brick_stairs": "Escada de tijolos lapidados de Veridiano",
|
||||
"block.create.cut_veridium_brick_wall": "Muro de tijolos lapidados de Veridiano",
|
||||
"block.create.cut_veridium_bricks": "Tijolos lapidados de Veridiano",
|
||||
"block.create.cut_veridium_slab": "Laje de Veridiano lapidado",
|
||||
"block.create.cut_veridium_stairs": "Escada de Veridiano lapidado",
|
||||
"block.create.cut_veridium_wall": "Muro de Veridiano lapidado",
|
||||
"block.create.cyan_nixie_tube": "Tubo nixie ciano",
|
||||
"block.create.cyan_sail": "Vela ciano",
|
||||
"block.create.cyan_seat": "Assento ciano",
|
||||
"block.create.cyan_toolbox": "caixa de ferramentas ciano",
|
||||
"block.create.cyan_valve_handle": "Válvula ciano",
|
||||
"block.create.dark_oak_window": "UNLOCALIZED: Dark Oak Window",
|
||||
"block.create.dark_oak_window_pane": "UNLOCALIZED: Dark Oak Window Pane",
|
||||
"block.create.deepslate_pillar": "UNLOCALIZED: Deepslate Pillar",
|
||||
"block.create.dark_oak_window": "Janela de carvalho escuro",
|
||||
"block.create.dark_oak_window_pane": "Vidraça de carvalho escuro",
|
||||
"block.create.deepslate_pillar": "Pilar de ardósia",
|
||||
"block.create.deepslate_zinc_ore": "Minério de zinco de ardósia",
|
||||
"block.create.deployer": "Implantador",
|
||||
"block.create.depot": "Depósito",
|
||||
"block.create.diorite_pillar": "UNLOCALIZED: Diorite Pillar",
|
||||
"block.create.dripstone_pillar": "UNLOCALIZED: Dripstone Pillar",
|
||||
"block.create.diorite_pillar": "Pilar de diorito",
|
||||
"block.create.dripstone_pillar": "Pilar de espeleotema",
|
||||
"block.create.encased_chain_drive": "Correia Revestida",
|
||||
"block.create.encased_fan": "Ventilador Revestida",
|
||||
"block.create.encased_fluid_pipe": "Cano de Fluidos Revestido",
|
||||
"block.create.exposed_copper_shingle_slab": "UNLOCALIZED: Exposed Copper Shingle Slab",
|
||||
"block.create.exposed_copper_shingle_stairs": "UNLOCALIZED: Exposed Copper Shingle Stairs",
|
||||
"block.create.exposed_copper_shingles": "UNLOCALIZED: Exposed Copper Shingles",
|
||||
"block.create.exposed_copper_tile_slab": "UNLOCALIZED: Exposed Copper Tile Slab",
|
||||
"block.create.exposed_copper_tile_stairs": "UNLOCALIZED: Exposed Copper Tile Stairs",
|
||||
"block.create.exposed_copper_tiles": "UNLOCALIZED: Exposed Copper Tiles",
|
||||
"block.create.exposed_copper_shingle_slab": "Laje de telha de cobre exposta",
|
||||
"block.create.exposed_copper_shingle_stairs": "Escada de telha de cobre exposta",
|
||||
"block.create.exposed_copper_shingles": "Telha de cobre exposta",
|
||||
"block.create.exposed_copper_tile_slab": "Laje de ladrilho de cobre exposta",
|
||||
"block.create.exposed_copper_tile_stairs": "Escada de ladrilho de cobre exposta",
|
||||
"block.create.exposed_copper_tiles": "Ladrilho de cobre exposto",
|
||||
"block.create.fluid_pipe": "Cano de Fluido",
|
||||
"block.create.fluid_tank": "Tanque de fluido",
|
||||
"block.create.fluid_valve": "Válvula",
|
||||
"block.create.flywheel": "Volante de inércia",
|
||||
"block.create.framed_glass": "UNLOCALIZED: Framed Glass",
|
||||
"block.create.framed_glass_pane": "UNLOCALIZED: Framed Glass Pane",
|
||||
"block.create.framed_glass": "Vidro emoldurado",
|
||||
"block.create.framed_glass_pane": "Vidraça emoldurada",
|
||||
"block.create.furnace_engine": "Motor de Fornalha",
|
||||
"block.create.gantry_carriage": "Carruagem de Pórtico",
|
||||
"block.create.gantry_shaft": "Eixo de Pórtico",
|
||||
"block.create.gearbox": "Caixa de Transmissão",
|
||||
"block.create.gearshift": "Câmbio",
|
||||
"block.create.glass_fluid_pipe": "Cano de Fluido de Vidro",
|
||||
"block.create.granite_pillar": "UNLOCALIZED: Granite Pillar",
|
||||
"block.create.granite_pillar": "Pilar de granito",
|
||||
"block.create.gray_nixie_tube": "Tubo nixie cinza",
|
||||
"block.create.gray_sail": "Vela cinza",
|
||||
"block.create.gray_seat": "Assento cinza",
|
||||
|
@ -234,29 +234,29 @@
|
|||
"block.create.hand_crank": "Manivela",
|
||||
"block.create.haunted_bell": "Sino assombrado",
|
||||
"block.create.honey": "Mel",
|
||||
"block.create.horizontal_framed_glass": "UNLOCALIZED: Horizontal Framed Glass",
|
||||
"block.create.horizontal_framed_glass_pane": "UNLOCALIZED: Horizontal Framed Glass Pane",
|
||||
"block.create.horizontal_framed_glass": "Vidro emoldurado horizontal",
|
||||
"block.create.horizontal_framed_glass_pane": "Vidraça emoldurada horizontal",
|
||||
"block.create.hose_pulley": "Polia de Mangueira",
|
||||
"block.create.item_drain": "Dreno de Item",
|
||||
"block.create.item_vault": "Cofre de itens",
|
||||
"block.create.jungle_window": "UNLOCALIZED: Jungle Window",
|
||||
"block.create.jungle_window_pane": "UNLOCALIZED: Jungle Window Pane",
|
||||
"block.create.jungle_window": "Janela da selva",
|
||||
"block.create.jungle_window_pane": "Vidraça da selva",
|
||||
"block.create.large_bogey": "UNLOCALIZED: Large Bogey",
|
||||
"block.create.large_cogwheel": "UNLOCALIZED: Large Cogwheel",
|
||||
"block.create.layered_andesite": "UNLOCALIZED: Layered Andesite",
|
||||
"block.create.layered_asurine": "UNLOCALIZED: Layered Asurine",
|
||||
"block.create.layered_calcite": "UNLOCALIZED: Layered Calcite",
|
||||
"block.create.layered_crimsite": "UNLOCALIZED: Layered Crimsite",
|
||||
"block.create.layered_deepslate": "UNLOCALIZED: Layered Deepslate",
|
||||
"block.create.layered_diorite": "UNLOCALIZED: Layered Diorite",
|
||||
"block.create.layered_dripstone": "UNLOCALIZED: Layered Dripstone",
|
||||
"block.create.layered_granite": "UNLOCALIZED: Layered Granite",
|
||||
"block.create.layered_limestone": "UNLOCALIZED: Layered Limestone",
|
||||
"block.create.layered_ochrum": "UNLOCALIZED: Layered Ochrum",
|
||||
"block.create.layered_scorchia": "UNLOCALIZED: Layered Scorchia",
|
||||
"block.create.layered_scoria": "UNLOCALIZED: Layered Scoria",
|
||||
"block.create.layered_tuff": "UNLOCALIZED: Layered Tuff",
|
||||
"block.create.layered_veridium": "UNLOCALIZED: Layered Veridium",
|
||||
"block.create.large_cogwheel": "Roda dentada grande",
|
||||
"block.create.layered_andesite": "Andesito estratificado",
|
||||
"block.create.layered_asurine": "Asurino estratificado",
|
||||
"block.create.layered_calcite": "Calcita estratificada",
|
||||
"block.create.layered_crimsite": "Carmesito estratificado",
|
||||
"block.create.layered_deepslate": "Ardósia estratificado",
|
||||
"block.create.layered_diorite": "Diorito estratificado",
|
||||
"block.create.layered_dripstone": "Espeleotema estratificado",
|
||||
"block.create.layered_granite": "Granito estratificado",
|
||||
"block.create.layered_limestone": "Calcário estratificado",
|
||||
"block.create.layered_ochrum": "Ocrom estratificado",
|
||||
"block.create.layered_scorchia": "Escória negra estratificada",
|
||||
"block.create.layered_scoria": "Escória estratificada",
|
||||
"block.create.layered_tuff": "Tufo estratificado",
|
||||
"block.create.layered_veridium": "Veridiano estratificado",
|
||||
"block.create.lectern_controller": "Controle de Atril",
|
||||
"block.create.light_blue_nixie_tube": "tubo nixie azul claro",
|
||||
"block.create.light_blue_sail": "Vela azul claro",
|
||||
|
@ -302,22 +302,22 @@
|
|||
"block.create.mysterious_cuckoo_clock": "Relógio cuckoo",
|
||||
"block.create.nixie_tube": "Tubo Nixie",
|
||||
"block.create.nozzle": "Bocal",
|
||||
"block.create.oak_window": "UNLOCALIZED: Oak Window",
|
||||
"block.create.oak_window_pane": "UNLOCALIZED: Oak Window Pane",
|
||||
"block.create.ochrum": "UNLOCALIZED: Ochrum",
|
||||
"block.create.ochrum_pillar": "UNLOCALIZED: Ochrum Pillar",
|
||||
"block.create.oak_window": "janela de carvalho",
|
||||
"block.create.oak_window_pane": "Vidraça de carvalho",
|
||||
"block.create.ochrum": "Ocrom",
|
||||
"block.create.ochrum_pillar": "Pilar de Ocrom",
|
||||
"block.create.orange_sail": "Vela laranja",
|
||||
"block.create.orange_seat": "Assento laranja",
|
||||
"block.create.orange_toolbox": "Caixa de ferramentas laranja",
|
||||
"block.create.orange_valve_handle": "Válvula laranja",
|
||||
"block.create.ornate_iron_window": "UNLOCALIZED: Ornate Iron Window",
|
||||
"block.create.ornate_iron_window_pane": "UNLOCALIZED: Ornate Iron Window Pane",
|
||||
"block.create.oxidized_copper_shingle_slab": "UNLOCALIZED: Oxidized Copper Shingle Slab",
|
||||
"block.create.oxidized_copper_shingle_stairs": "UNLOCALIZED: Oxidized Copper Shingle Stairs",
|
||||
"block.create.oxidized_copper_shingles": "UNLOCALIZED: Oxidized Copper Shingles",
|
||||
"block.create.oxidized_copper_tile_slab": "UNLOCALIZED: Oxidized Copper Tile Slab",
|
||||
"block.create.oxidized_copper_tile_stairs": "UNLOCALIZED: Oxidized Copper Tile Stairs",
|
||||
"block.create.oxidized_copper_tiles": "UNLOCALIZED: Oxidized Copper Tiles",
|
||||
"block.create.ornate_iron_window": "Janela ornamentada com ferro",
|
||||
"block.create.ornate_iron_window_pane": "Vidraça ornamentada com ferro",
|
||||
"block.create.oxidized_copper_shingle_slab": "Laje de telha de cobre oxidada",
|
||||
"block.create.oxidized_copper_shingle_stairs": "Escada de telha de cobre oxidada",
|
||||
"block.create.oxidized_copper_shingles": "Telha de cobre oxidada",
|
||||
"block.create.oxidized_copper_tile_slab": "Laje de ladrilho de cobre oxidado",
|
||||
"block.create.oxidized_copper_tile_stairs": "Escada de ladrilho de cobre oxidado",
|
||||
"block.create.oxidized_copper_tiles": "Ladrilho de cobre oxidado",
|
||||
"block.create.peculiar_bell": "Sino peculiar",
|
||||
"block.create.pink_nixie_tube": "Tubo nixie rosa",
|
||||
"block.create.pink_sail": "Vela rosa",
|
||||
|
@ -325,67 +325,67 @@
|
|||
"block.create.pink_toolbox": "Caixa de ferramentas rosa",
|
||||
"block.create.pink_valve_handle": "Válvula rosa",
|
||||
"block.create.piston_extension_pole": "Vara de Extensão do Pistão",
|
||||
"block.create.polished_cut_andesite": "UNLOCALIZED: Polished Cut Andesite",
|
||||
"block.create.polished_cut_andesite_slab": "UNLOCALIZED: Polished Cut Andesite Slab",
|
||||
"block.create.polished_cut_andesite_stairs": "UNLOCALIZED: Polished Cut Andesite Stairs",
|
||||
"block.create.polished_cut_andesite_wall": "UNLOCALIZED: Polished Cut Andesite Wall",
|
||||
"block.create.polished_cut_asurine": "UNLOCALIZED: Polished Cut Asurine",
|
||||
"block.create.polished_cut_asurine_slab": "UNLOCALIZED: Polished Cut Asurine Slab",
|
||||
"block.create.polished_cut_asurine_stairs": "UNLOCALIZED: Polished Cut Asurine Stairs",
|
||||
"block.create.polished_cut_asurine_wall": "UNLOCALIZED: Polished Cut Asurine Wall",
|
||||
"block.create.polished_cut_calcite": "UNLOCALIZED: Polished Cut Calcite",
|
||||
"block.create.polished_cut_calcite_slab": "UNLOCALIZED: Polished Cut Calcite Slab",
|
||||
"block.create.polished_cut_calcite_stairs": "UNLOCALIZED: Polished Cut Calcite Stairs",
|
||||
"block.create.polished_cut_calcite_wall": "UNLOCALIZED: Polished Cut Calcite Wall",
|
||||
"block.create.polished_cut_crimsite": "UNLOCALIZED: Polished Cut Crimsite",
|
||||
"block.create.polished_cut_crimsite_slab": "UNLOCALIZED: Polished Cut Crimsite Slab",
|
||||
"block.create.polished_cut_crimsite_stairs": "UNLOCALIZED: Polished Cut Crimsite Stairs",
|
||||
"block.create.polished_cut_crimsite_wall": "UNLOCALIZED: Polished Cut Crimsite Wall",
|
||||
"block.create.polished_cut_deepslate": "UNLOCALIZED: Polished Cut Deepslate",
|
||||
"block.create.polished_cut_deepslate_slab": "UNLOCALIZED: Polished Cut Deepslate Slab",
|
||||
"block.create.polished_cut_deepslate_stairs": "UNLOCALIZED: Polished Cut Deepslate Stairs",
|
||||
"block.create.polished_cut_deepslate_wall": "UNLOCALIZED: Polished Cut Deepslate Wall",
|
||||
"block.create.polished_cut_diorite": "UNLOCALIZED: Polished Cut Diorite",
|
||||
"block.create.polished_cut_diorite_slab": "UNLOCALIZED: Polished Cut Diorite Slab",
|
||||
"block.create.polished_cut_diorite_stairs": "UNLOCALIZED: Polished Cut Diorite Stairs",
|
||||
"block.create.polished_cut_diorite_wall": "UNLOCALIZED: Polished Cut Diorite Wall",
|
||||
"block.create.polished_cut_dripstone": "UNLOCALIZED: Polished Cut Dripstone",
|
||||
"block.create.polished_cut_dripstone_slab": "UNLOCALIZED: Polished Cut Dripstone Slab",
|
||||
"block.create.polished_cut_dripstone_stairs": "UNLOCALIZED: Polished Cut Dripstone Stairs",
|
||||
"block.create.polished_cut_dripstone_wall": "UNLOCALIZED: Polished Cut Dripstone Wall",
|
||||
"block.create.polished_cut_granite": "UNLOCALIZED: Polished Cut Granite",
|
||||
"block.create.polished_cut_granite_slab": "UNLOCALIZED: Polished Cut Granite Slab",
|
||||
"block.create.polished_cut_granite_stairs": "UNLOCALIZED: Polished Cut Granite Stairs",
|
||||
"block.create.polished_cut_granite_wall": "UNLOCALIZED: Polished Cut Granite Wall",
|
||||
"block.create.polished_cut_limestone": "UNLOCALIZED: Polished Cut Limestone",
|
||||
"block.create.polished_cut_limestone_slab": "UNLOCALIZED: Polished Cut Limestone Slab",
|
||||
"block.create.polished_cut_limestone_stairs": "UNLOCALIZED: Polished Cut Limestone Stairs",
|
||||
"block.create.polished_cut_limestone_wall": "UNLOCALIZED: Polished Cut Limestone Wall",
|
||||
"block.create.polished_cut_ochrum": "UNLOCALIZED: Polished Cut Ochrum",
|
||||
"block.create.polished_cut_ochrum_slab": "UNLOCALIZED: Polished Cut Ochrum Slab",
|
||||
"block.create.polished_cut_ochrum_stairs": "UNLOCALIZED: Polished Cut Ochrum Stairs",
|
||||
"block.create.polished_cut_ochrum_wall": "UNLOCALIZED: Polished Cut Ochrum Wall",
|
||||
"block.create.polished_cut_scorchia": "UNLOCALIZED: Polished Cut Scorchia",
|
||||
"block.create.polished_cut_scorchia_slab": "UNLOCALIZED: Polished Cut Scorchia Slab",
|
||||
"block.create.polished_cut_scorchia_stairs": "UNLOCALIZED: Polished Cut Scorchia Stairs",
|
||||
"block.create.polished_cut_scorchia_wall": "UNLOCALIZED: Polished Cut Scorchia Wall",
|
||||
"block.create.polished_cut_scoria": "UNLOCALIZED: Polished Cut Scoria",
|
||||
"block.create.polished_cut_scoria_slab": "UNLOCALIZED: Polished Cut Scoria Slab",
|
||||
"block.create.polished_cut_scoria_stairs": "UNLOCALIZED: Polished Cut Scoria Stairs",
|
||||
"block.create.polished_cut_scoria_wall": "UNLOCALIZED: Polished Cut Scoria Wall",
|
||||
"block.create.polished_cut_tuff": "UNLOCALIZED: Polished Cut Tuff",
|
||||
"block.create.polished_cut_tuff_slab": "UNLOCALIZED: Polished Cut Tuff Slab",
|
||||
"block.create.polished_cut_tuff_stairs": "UNLOCALIZED: Polished Cut Tuff Stairs",
|
||||
"block.create.polished_cut_tuff_wall": "UNLOCALIZED: Polished Cut Tuff Wall",
|
||||
"block.create.polished_cut_veridium": "UNLOCALIZED: Polished Cut Veridium",
|
||||
"block.create.polished_cut_veridium_slab": "UNLOCALIZED: Polished Cut Veridium Slab",
|
||||
"block.create.polished_cut_veridium_stairs": "UNLOCALIZED: Polished Cut Veridium Stairs",
|
||||
"block.create.polished_cut_veridium_wall": "UNLOCALIZED: Polished Cut Veridium Wall",
|
||||
"block.create.polished_cut_andesite": "Andesito lapidado polido",
|
||||
"block.create.polished_cut_andesite_slab": "Laje de andesito lapidado polido",
|
||||
"block.create.polished_cut_andesite_stairs": "Escada de andesito lapidado polido",
|
||||
"block.create.polished_cut_andesite_wall": "Muro de andesito lapidado polido",
|
||||
"block.create.polished_cut_asurine": "Asurino lapidado polido",
|
||||
"block.create.polished_cut_asurine_slab": "Laje de Asurino lapidado polido",
|
||||
"block.create.polished_cut_asurine_stairs": "Escada de Asurino lapidado polido",
|
||||
"block.create.polished_cut_asurine_wall": "Muro de Asurino lapidado polido",
|
||||
"block.create.polished_cut_calcite": "Calcita lapidada polida",
|
||||
"block.create.polished_cut_calcite_slab": "Laje de calcita lapidada polida",
|
||||
"block.create.polished_cut_calcite_stairs": "Escada de calcita lapidada polida",
|
||||
"block.create.polished_cut_calcite_wall": "Muro de calcita lapidada polida",
|
||||
"block.create.polished_cut_crimsite": "Carmesito lapidado polido",
|
||||
"block.create.polished_cut_crimsite_slab": "Laje de Carmesito lapidado polido",
|
||||
"block.create.polished_cut_crimsite_stairs": "Escada de Carmesito lapidado polido",
|
||||
"block.create.polished_cut_crimsite_wall": "Muro de Carmesito lapidado polido",
|
||||
"block.create.polished_cut_deepslate": "Ardósia lapidado polido",
|
||||
"block.create.polished_cut_deepslate_slab": "Laje de ardósia lapidado polido",
|
||||
"block.create.polished_cut_deepslate_stairs": "Escada de ardósia lapidado polido",
|
||||
"block.create.polished_cut_deepslate_wall": "Muro de ardósia lapidado polido",
|
||||
"block.create.polished_cut_diorite": "Diorito lapidado polido",
|
||||
"block.create.polished_cut_diorite_slab": "Laje de diorito lapidado polido",
|
||||
"block.create.polished_cut_diorite_stairs": "Escada de diorito lapidado polido",
|
||||
"block.create.polished_cut_diorite_wall": "Muro de diorito lapidado polido",
|
||||
"block.create.polished_cut_dripstone": "Espeleotema lapidado polido",
|
||||
"block.create.polished_cut_dripstone_slab": "Laje de espeleotema lapidado polido",
|
||||
"block.create.polished_cut_dripstone_stairs": "Escada de espeleotema lapidado polido",
|
||||
"block.create.polished_cut_dripstone_wall": "Muro de espeleotema lapidado polido",
|
||||
"block.create.polished_cut_granite": "Granito lapidado polido",
|
||||
"block.create.polished_cut_granite_slab": "Laje de granito lapidado polido",
|
||||
"block.create.polished_cut_granite_stairs": "Escada de granito lapidado polido",
|
||||
"block.create.polished_cut_granite_wall": "Muro de granito lapidado polido",
|
||||
"block.create.polished_cut_limestone": "Calcário lapidado polido",
|
||||
"block.create.polished_cut_limestone_slab": "Laje de calcário lapidado polido",
|
||||
"block.create.polished_cut_limestone_stairs": "Escada de calcário lapidado polido",
|
||||
"block.create.polished_cut_limestone_wall": "Muro de calcário lapidado polido",
|
||||
"block.create.polished_cut_ochrum": "Ocrom lapidado polido",
|
||||
"block.create.polished_cut_ochrum_slab": "Laje de Ocrom lapidado polido",
|
||||
"block.create.polished_cut_ochrum_stairs": "Escada de Ocrom lapidado polido",
|
||||
"block.create.polished_cut_ochrum_wall": "Muro de Ocrom lapidado polido",
|
||||
"block.create.polished_cut_scorchia": "Escória negra lapidada polida",
|
||||
"block.create.polished_cut_scorchia_slab": "Laje de escória negra lapidada polida",
|
||||
"block.create.polished_cut_scorchia_stairs": "Escada de escória negra lapidada polida",
|
||||
"block.create.polished_cut_scorchia_wall": "Muro de escória negra lapidada polida",
|
||||
"block.create.polished_cut_scoria": "Escória lapidada polida",
|
||||
"block.create.polished_cut_scoria_slab": "Laje de escória lapidada polida",
|
||||
"block.create.polished_cut_scoria_stairs": "Escada de escória lapidada polida",
|
||||
"block.create.polished_cut_scoria_wall": "Muro de escória lapidada polida",
|
||||
"block.create.polished_cut_tuff": "Tufo lapidado polido",
|
||||
"block.create.polished_cut_tuff_slab": "Laje de tufo lapidado polido",
|
||||
"block.create.polished_cut_tuff_stairs": "Escada de tufo lapidado polido",
|
||||
"block.create.polished_cut_tuff_wall": "Muro de tufo lapidado polido",
|
||||
"block.create.polished_cut_veridium": "Veridiano lapidado polido",
|
||||
"block.create.polished_cut_veridium_slab": "Laje de Veridiano lapidado polido",
|
||||
"block.create.polished_cut_veridium_stairs": "Escada de Veridiano lapidado polido",
|
||||
"block.create.polished_cut_veridium_wall": "muro de Veridiano lapidado polido",
|
||||
"block.create.portable_fluid_interface": "Interface de fluidos portátil",
|
||||
"block.create.portable_storage_interface": "Interface de armazenamento portátil",
|
||||
"block.create.powered_latch": "UNLOCALIZED: Powered Latch",
|
||||
"block.create.powered_latch": "Trava de redstone",
|
||||
"block.create.powered_shaft": "UNLOCALIZED: Powered Shaft",
|
||||
"block.create.powered_toggle_latch": "UNLOCALIZED: Powered Toggle Latch",
|
||||
"block.create.powered_toggle_latch": "Trave de alternância de redstone",
|
||||
"block.create.pulley_magnet": "Imã da Polia",
|
||||
"block.create.pulse_extender": "Extensor de pulso",
|
||||
"block.create.pulse_repeater": "Repetidor de Pulso",
|
||||
|
@ -410,77 +410,77 @@
|
|||
"block.create.sail_frame": "moldura de vela",
|
||||
"block.create.schematic_table": "Mesa de Esquema",
|
||||
"block.create.schematicannon": "Canhão de Esquema",
|
||||
"block.create.scorchia": "UNLOCALIZED: Scorchia",
|
||||
"block.create.scorchia_pillar": "UNLOCALIZED: Scorchia Pillar",
|
||||
"block.create.scoria": "UNLOCALIZED: Scoria",
|
||||
"block.create.scoria_pillar": "UNLOCALIZED: Scoria Pillar",
|
||||
"block.create.scorchia": "Escória negra",
|
||||
"block.create.scorchia_pillar": "Pilar de escória negra",
|
||||
"block.create.scoria": "Escória",
|
||||
"block.create.scoria_pillar": "Pilar de escória",
|
||||
"block.create.secondary_linear_chassis": "Chassis linear secundário",
|
||||
"block.create.sequenced_gearshift": "Câmbio sequenciado",
|
||||
"block.create.shadow_steel_casing": "Revestiment das Sombras",
|
||||
"block.create.shaft": "Eixo",
|
||||
"block.create.small_andesite_brick_slab": "UNLOCALIZED: Small Andesite Brick Slab",
|
||||
"block.create.small_andesite_brick_stairs": "UNLOCALIZED: Small Andesite Brick Stairs",
|
||||
"block.create.small_andesite_brick_wall": "UNLOCALIZED: Small Andesite Brick Wall",
|
||||
"block.create.small_andesite_bricks": "UNLOCALIZED: Small Andesite Bricks",
|
||||
"block.create.small_asurine_brick_slab": "UNLOCALIZED: Small Asurine Brick Slab",
|
||||
"block.create.small_asurine_brick_stairs": "UNLOCALIZED: Small Asurine Brick Stairs",
|
||||
"block.create.small_asurine_brick_wall": "UNLOCALIZED: Small Asurine Brick Wall",
|
||||
"block.create.small_asurine_bricks": "UNLOCALIZED: Small Asurine Bricks",
|
||||
"block.create.small_andesite_brick_slab": "Laje de tijolos pequenos de andesito",
|
||||
"block.create.small_andesite_brick_stairs": "Escada de tijolos pequenos de andesito",
|
||||
"block.create.small_andesite_brick_wall": "Muro de tijolos pequenos de andesito",
|
||||
"block.create.small_andesite_bricks": "Tijolos pequenos de andesito",
|
||||
"block.create.small_asurine_brick_slab": "Laje de tijolos pequenos de Asurino",
|
||||
"block.create.small_asurine_brick_stairs": "Escada de tijolos pequenos de Asurino",
|
||||
"block.create.small_asurine_brick_wall": "Muro de tijolos pequenos de Asurino",
|
||||
"block.create.small_asurine_bricks": "Tijolos pequenos de Asurino",
|
||||
"block.create.small_bogey": "UNLOCALIZED: Small Bogey",
|
||||
"block.create.small_calcite_brick_slab": "UNLOCALIZED: Small Calcite Brick Slab",
|
||||
"block.create.small_calcite_brick_stairs": "UNLOCALIZED: Small Calcite Brick Stairs",
|
||||
"block.create.small_calcite_brick_wall": "UNLOCALIZED: Small Calcite Brick Wall",
|
||||
"block.create.small_calcite_bricks": "UNLOCALIZED: Small Calcite Bricks",
|
||||
"block.create.small_crimsite_brick_slab": "UNLOCALIZED: Small Crimsite Brick Slab",
|
||||
"block.create.small_crimsite_brick_stairs": "UNLOCALIZED: Small Crimsite Brick Stairs",
|
||||
"block.create.small_crimsite_brick_wall": "UNLOCALIZED: Small Crimsite Brick Wall",
|
||||
"block.create.small_crimsite_bricks": "UNLOCALIZED: Small Crimsite Bricks",
|
||||
"block.create.small_deepslate_brick_slab": "UNLOCALIZED: Small Deepslate Brick Slab",
|
||||
"block.create.small_deepslate_brick_stairs": "UNLOCALIZED: Small Deepslate Brick Stairs",
|
||||
"block.create.small_deepslate_brick_wall": "UNLOCALIZED: Small Deepslate Brick Wall",
|
||||
"block.create.small_deepslate_bricks": "UNLOCALIZED: Small Deepslate Bricks",
|
||||
"block.create.small_diorite_brick_slab": "UNLOCALIZED: Small Diorite Brick Slab",
|
||||
"block.create.small_diorite_brick_stairs": "UNLOCALIZED: Small Diorite Brick Stairs",
|
||||
"block.create.small_diorite_brick_wall": "UNLOCALIZED: Small Diorite Brick Wall",
|
||||
"block.create.small_diorite_bricks": "UNLOCALIZED: Small Diorite Bricks",
|
||||
"block.create.small_dripstone_brick_slab": "UNLOCALIZED: Small Dripstone Brick Slab",
|
||||
"block.create.small_dripstone_brick_stairs": "UNLOCALIZED: Small Dripstone Brick Stairs",
|
||||
"block.create.small_dripstone_brick_wall": "UNLOCALIZED: Small Dripstone Brick Wall",
|
||||
"block.create.small_dripstone_bricks": "UNLOCALIZED: Small Dripstone Bricks",
|
||||
"block.create.small_granite_brick_slab": "UNLOCALIZED: Small Granite Brick Slab",
|
||||
"block.create.small_granite_brick_stairs": "UNLOCALIZED: Small Granite Brick Stairs",
|
||||
"block.create.small_granite_brick_wall": "UNLOCALIZED: Small Granite Brick Wall",
|
||||
"block.create.small_granite_bricks": "UNLOCALIZED: Small Granite Bricks",
|
||||
"block.create.small_limestone_brick_slab": "UNLOCALIZED: Small Limestone Brick Slab",
|
||||
"block.create.small_limestone_brick_stairs": "UNLOCALIZED: Small Limestone Brick Stairs",
|
||||
"block.create.small_limestone_brick_wall": "UNLOCALIZED: Small Limestone Brick Wall",
|
||||
"block.create.small_limestone_bricks": "UNLOCALIZED: Small Limestone Bricks",
|
||||
"block.create.small_ochrum_brick_slab": "UNLOCALIZED: Small Ochrum Brick Slab",
|
||||
"block.create.small_ochrum_brick_stairs": "UNLOCALIZED: Small Ochrum Brick Stairs",
|
||||
"block.create.small_ochrum_brick_wall": "UNLOCALIZED: Small Ochrum Brick Wall",
|
||||
"block.create.small_ochrum_bricks": "UNLOCALIZED: Small Ochrum Bricks",
|
||||
"block.create.small_scorchia_brick_slab": "UNLOCALIZED: Small Scorchia Brick Slab",
|
||||
"block.create.small_scorchia_brick_stairs": "UNLOCALIZED: Small Scorchia Brick Stairs",
|
||||
"block.create.small_scorchia_brick_wall": "UNLOCALIZED: Small Scorchia Brick Wall",
|
||||
"block.create.small_scorchia_bricks": "UNLOCALIZED: Small Scorchia Bricks",
|
||||
"block.create.small_scoria_brick_slab": "UNLOCALIZED: Small Scoria Brick Slab",
|
||||
"block.create.small_scoria_brick_stairs": "UNLOCALIZED: Small Scoria Brick Stairs",
|
||||
"block.create.small_scoria_brick_wall": "UNLOCALIZED: Small Scoria Brick Wall",
|
||||
"block.create.small_scoria_bricks": "UNLOCALIZED: Small Scoria Bricks",
|
||||
"block.create.small_tuff_brick_slab": "UNLOCALIZED: Small Tuff Brick Slab",
|
||||
"block.create.small_tuff_brick_stairs": "UNLOCALIZED: Small Tuff Brick Stairs",
|
||||
"block.create.small_tuff_brick_wall": "UNLOCALIZED: Small Tuff Brick Wall",
|
||||
"block.create.small_tuff_bricks": "UNLOCALIZED: Small Tuff Bricks",
|
||||
"block.create.small_veridium_brick_slab": "UNLOCALIZED: Small Veridium Brick Slab",
|
||||
"block.create.small_veridium_brick_stairs": "UNLOCALIZED: Small Veridium Brick Stairs",
|
||||
"block.create.small_veridium_brick_wall": "UNLOCALIZED: Small Veridium Brick Wall",
|
||||
"block.create.small_veridium_bricks": "UNLOCALIZED: Small Veridium Bricks",
|
||||
"block.create.smart_chute": "calha Inteligente",
|
||||
"block.create.small_calcite_brick_slab": "Laje de tijolos pequenos de calcita",
|
||||
"block.create.small_calcite_brick_stairs": "Escada de tijolos pequenos de calcita",
|
||||
"block.create.small_calcite_brick_wall": "Muro de tijolos pequenos de calcita",
|
||||
"block.create.small_calcite_bricks": "Tijolos pequenos de calcita",
|
||||
"block.create.small_crimsite_brick_slab": "Laje de tijolos pequenos de Carmesito",
|
||||
"block.create.small_crimsite_brick_stairs": "Escada de tijolos pequenos de Carmesito",
|
||||
"block.create.small_crimsite_brick_wall": "Muro de tijolos pequenos de Carmesito",
|
||||
"block.create.small_crimsite_bricks": "Tijolos pequenos de Carmesito",
|
||||
"block.create.small_deepslate_brick_slab": "Laje de tijolos pequenos de ardósia",
|
||||
"block.create.small_deepslate_brick_stairs": "Escada de tijolos pequenos de ardósia",
|
||||
"block.create.small_deepslate_brick_wall": "Muro de tijolos pequenos de ardósia",
|
||||
"block.create.small_deepslate_bricks": "Tijolos pequenos de ardósia",
|
||||
"block.create.small_diorite_brick_slab": "Laje de tijolos pequenos de diorito",
|
||||
"block.create.small_diorite_brick_stairs": "Escada de tijolos pequenos de diorito",
|
||||
"block.create.small_diorite_brick_wall": "Muro de tijolos pequenos de diorito",
|
||||
"block.create.small_diorite_bricks": "Tijolos pequenos de diorito",
|
||||
"block.create.small_dripstone_brick_slab": "Laje de tijolos pequenos de espeleotema",
|
||||
"block.create.small_dripstone_brick_stairs": "Escada de tijolos pequenos de espeleotema",
|
||||
"block.create.small_dripstone_brick_wall": "Muro de tijolos pequenos de espeleotema",
|
||||
"block.create.small_dripstone_bricks": "Tijolos pequenos de espeleotema",
|
||||
"block.create.small_granite_brick_slab": "Laje de tijolos pequenos de granito",
|
||||
"block.create.small_granite_brick_stairs": "Escada de tijolos pequenos de granito",
|
||||
"block.create.small_granite_brick_wall": "Muro de tijolos pequenos de granito",
|
||||
"block.create.small_granite_bricks": "Tijolos pequenos de granito",
|
||||
"block.create.small_limestone_brick_slab": "Laje de tijolos pequenos de calcário",
|
||||
"block.create.small_limestone_brick_stairs": "Escada de tijolos pequenos de calcário",
|
||||
"block.create.small_limestone_brick_wall": "Muro de tijolos pequenos de calcário",
|
||||
"block.create.small_limestone_bricks": "Tijolos pequenos de calcário",
|
||||
"block.create.small_ochrum_brick_slab": "Laje de tijolos pequenos de Ocrom",
|
||||
"block.create.small_ochrum_brick_stairs": "Escada de tijolos pequenos de Ocrom",
|
||||
"block.create.small_ochrum_brick_wall": "Muro de tijolos pequenos de Ocrom",
|
||||
"block.create.small_ochrum_bricks": "Tijolos pequenos de Ocrom",
|
||||
"block.create.small_scorchia_brick_slab": "Laje de tijolos pequenos de escória negra",
|
||||
"block.create.small_scorchia_brick_stairs": "Escada de tijolos pequenos de escória negra",
|
||||
"block.create.small_scorchia_brick_wall": "Muro de tijolos pequenos de escória negra",
|
||||
"block.create.small_scorchia_bricks": "Tijolos pequenos de escória negra",
|
||||
"block.create.small_scoria_brick_slab": "Laje de tijolos pequenos de escória",
|
||||
"block.create.small_scoria_brick_stairs": "Escada de tijolos pequenos de escória",
|
||||
"block.create.small_scoria_brick_wall": "Muro de tijolos pequenos de escória",
|
||||
"block.create.small_scoria_bricks": "Tijolos pequenos de escória",
|
||||
"block.create.small_tuff_brick_slab": "Laje de tijolos pequenos de tufo",
|
||||
"block.create.small_tuff_brick_stairs": "Escada de tijolos pequenos de tufo",
|
||||
"block.create.small_tuff_brick_wall": "Muro de tijolos pequenos de tufo",
|
||||
"block.create.small_tuff_bricks": "Tijolos pequenos de tufo",
|
||||
"block.create.small_veridium_brick_slab": "Laje de tijolos pequenos de Veridiano",
|
||||
"block.create.small_veridium_brick_stairs": "Escada de tijolos pequenos de Veridiano",
|
||||
"block.create.small_veridium_brick_wall": "Muro de tijolos pequenos de Veridiano",
|
||||
"block.create.small_veridium_bricks": "Tijolos pequenos de Veridiano",
|
||||
"block.create.smart_chute": "Calha Inteligente",
|
||||
"block.create.smart_fluid_pipe": "Cano de Fluidos Inteligente",
|
||||
"block.create.speedometer": "Velocímetro",
|
||||
"block.create.spout": "Bica",
|
||||
"block.create.spruce_window": "UNLOCALIZED: Spruce Window",
|
||||
"block.create.spruce_window_pane": "UNLOCALIZED: Spruce Window Pane",
|
||||
"block.create.spruce_window": "Janela de pinheiro",
|
||||
"block.create.spruce_window_pane": "Vidraça de pinheiro",
|
||||
"block.create.steam_engine": "UNLOCALIZED: Steam Engine",
|
||||
"block.create.sticker": "Adesivo",
|
||||
"block.create.sticky_mechanical_piston": "Pistão Mecânico Grudento",
|
||||
|
@ -491,46 +491,46 @@
|
|||
"block.create.track": "UNLOCALIZED: Train Track",
|
||||
"block.create.track_signal": "UNLOCALIZED: Train Signal",
|
||||
"block.create.track_station": "UNLOCALIZED: Train Station",
|
||||
"block.create.tuff_pillar": "UNLOCALIZED: Tuff Pillar",
|
||||
"block.create.tuff_pillar": "Pilar de tufo",
|
||||
"block.create.turntable": "Mesa giratória",
|
||||
"block.create.veridium": "UNLOCALIZED: Veridium",
|
||||
"block.create.veridium_pillar": "UNLOCALIZED: Veridium Pillar",
|
||||
"block.create.vertical_framed_glass": "UNLOCALIZED: Vertical Framed Glass",
|
||||
"block.create.vertical_framed_glass_pane": "UNLOCALIZED: Vertical Framed Glass Pane",
|
||||
"block.create.warped_window": "UNLOCALIZED: Warped Window",
|
||||
"block.create.warped_window_pane": "UNLOCALIZED: Warped Window Pane",
|
||||
"block.create.veridium": "Veridiano",
|
||||
"block.create.veridium_pillar": "Pilar de Verdiano",
|
||||
"block.create.vertical_framed_glass": "Vidro emoldurado vertical",
|
||||
"block.create.vertical_framed_glass_pane": "Vidraça emoldurada vertical",
|
||||
"block.create.warped_window": "Janela distorcida",
|
||||
"block.create.warped_window_pane": "Vidraça distorcida",
|
||||
"block.create.water_wheel": "Roda de Água",
|
||||
"block.create.waxed_copper_shingle_slab": "UNLOCALIZED: Waxed Copper Shingle Slab",
|
||||
"block.create.waxed_copper_shingle_stairs": "UNLOCALIZED: Waxed Copper Shingle Stairs",
|
||||
"block.create.waxed_copper_shingles": "UNLOCALIZED: Waxed Copper Shingles",
|
||||
"block.create.waxed_copper_tile_slab": "UNLOCALIZED: Waxed Copper Tile Slab",
|
||||
"block.create.waxed_copper_tile_stairs": "UNLOCALIZED: Waxed Copper Tile Stairs",
|
||||
"block.create.waxed_copper_tiles": "UNLOCALIZED: Waxed Copper Tiles",
|
||||
"block.create.waxed_exposed_copper_shingle_slab": "UNLOCALIZED: Waxed Exposed Copper Shingle Slab",
|
||||
"block.create.waxed_exposed_copper_shingle_stairs": "UNLOCALIZED: Waxed Exposed Copper Shingle Stairs",
|
||||
"block.create.waxed_exposed_copper_shingles": "UNLOCALIZED: Waxed Exposed Copper Shingles",
|
||||
"block.create.waxed_exposed_copper_tile_slab": "UNLOCALIZED: Waxed Exposed Copper Tile Slab",
|
||||
"block.create.waxed_exposed_copper_tile_stairs": "UNLOCALIZED: Waxed Exposed Copper Tile Stairs",
|
||||
"block.create.waxed_exposed_copper_tiles": "UNLOCALIZED: Waxed Exposed Copper Tiles",
|
||||
"block.create.waxed_oxidized_copper_shingle_slab": "UNLOCALIZED: Waxed Oxidized Copper Shingle Slab",
|
||||
"block.create.waxed_oxidized_copper_shingle_stairs": "UNLOCALIZED: Waxed Oxidized Copper Shingle Stairs",
|
||||
"block.create.waxed_oxidized_copper_shingles": "UNLOCALIZED: Waxed Oxidized Copper Shingles",
|
||||
"block.create.waxed_oxidized_copper_tile_slab": "UNLOCALIZED: Waxed Oxidized Copper Tile Slab",
|
||||
"block.create.waxed_oxidized_copper_tile_stairs": "UNLOCALIZED: Waxed Oxidized Copper Tile Stairs",
|
||||
"block.create.waxed_oxidized_copper_tiles": "UNLOCALIZED: Waxed Oxidized Copper Tiles",
|
||||
"block.create.waxed_weathered_copper_shingle_slab": "UNLOCALIZED: Waxed Weathered Copper Shingle Slab",
|
||||
"block.create.waxed_weathered_copper_shingle_stairs": "UNLOCALIZED: Waxed Weathered Copper Shingle Stairs",
|
||||
"block.create.waxed_weathered_copper_shingles": "UNLOCALIZED: Waxed Weathered Copper Shingles",
|
||||
"block.create.waxed_weathered_copper_tile_slab": "UNLOCALIZED: Waxed Weathered Copper Tile Slab",
|
||||
"block.create.waxed_weathered_copper_tile_stairs": "UNLOCALIZED: Waxed Weathered Copper Tile Stairs",
|
||||
"block.create.waxed_weathered_copper_tiles": "UNLOCALIZED: Waxed Weathered Copper Tiles",
|
||||
"block.create.weathered_copper_shingle_slab": "UNLOCALIZED: Weathered Copper Shingle Slab",
|
||||
"block.create.weathered_copper_shingle_stairs": "UNLOCALIZED: Weathered Copper Shingle Stairs",
|
||||
"block.create.weathered_copper_shingles": "UNLOCALIZED: Weathered Copper Shingles",
|
||||
"block.create.weathered_copper_tile_slab": "UNLOCALIZED: Weathered Copper Tile Slab",
|
||||
"block.create.weathered_copper_tile_stairs": "UNLOCALIZED: Weathered Copper Tile Stairs",
|
||||
"block.create.weathered_copper_tiles": "UNLOCALIZED: Weathered Copper Tiles",
|
||||
"block.create.weighted_ejector": "Ejetor ´ponderado",
|
||||
"block.create.waxed_copper_shingle_slab": "Laje de telha de cobre encerada",
|
||||
"block.create.waxed_copper_shingle_stairs": "Escada de telha de cobre encerada",
|
||||
"block.create.waxed_copper_shingles": "Telha de cobre encerada",
|
||||
"block.create.waxed_copper_tile_slab": "Laje de ladrilho de cobre encerada",
|
||||
"block.create.waxed_copper_tile_stairs": "Escada de ladrilho de cobre encerada",
|
||||
"block.create.waxed_copper_tiles": "Ladrilho de cobre encerado",
|
||||
"block.create.waxed_exposed_copper_shingle_slab": "Laje de telha de cobre exposta encerada",
|
||||
"block.create.waxed_exposed_copper_shingle_stairs": "Escada de telha de cobre exposta encerada",
|
||||
"block.create.waxed_exposed_copper_shingles": "Telha de cobre exposta encerada",
|
||||
"block.create.waxed_exposed_copper_tile_slab": "Laje de ladrilho de cobre exposta encerada",
|
||||
"block.create.waxed_exposed_copper_tile_stairs": "Escada de ladrilho de cobre exposta encerada",
|
||||
"block.create.waxed_exposed_copper_tiles": "Ladrilhos de cobre exposto encerado",
|
||||
"block.create.waxed_oxidized_copper_shingle_slab": "Laje de telha de cobre oxidada encerada",
|
||||
"block.create.waxed_oxidized_copper_shingle_stairs": "Escada de telha de cobre oxidada encerada",
|
||||
"block.create.waxed_oxidized_copper_shingles": "Telha de cobre oxidada encerada",
|
||||
"block.create.waxed_oxidized_copper_tile_slab": "Laje de ladrilhos de cobre oxidada encerada",
|
||||
"block.create.waxed_oxidized_copper_tile_stairs": "Escada de ladrilhos de cobre oxidada encerada",
|
||||
"block.create.waxed_oxidized_copper_tiles": "Ladrilhos de cobre oxidado encerado",
|
||||
"block.create.waxed_weathered_copper_shingle_slab": "Laje de telha de cobre desgastada encerada",
|
||||
"block.create.waxed_weathered_copper_shingle_stairs": "Escada de telha de cobre desgastada encerada",
|
||||
"block.create.waxed_weathered_copper_shingles": "Telha de cobre desgastada encereda",
|
||||
"block.create.waxed_weathered_copper_tile_slab": "Laje de ladrilho de cobre desgastado encerado",
|
||||
"block.create.waxed_weathered_copper_tile_stairs": "Escada de ladrilho de cobre desgastado encerado",
|
||||
"block.create.waxed_weathered_copper_tiles": "Ladrilho de cobre desgastado encerado",
|
||||
"block.create.weathered_copper_shingle_slab": "Laje de telha de cobre desgastada encerada",
|
||||
"block.create.weathered_copper_shingle_stairs": "Escada de telha de cobre desgastada encerada",
|
||||
"block.create.weathered_copper_shingles": "Telha de cobre desgastada encerada",
|
||||
"block.create.weathered_copper_tile_slab": "Laje de ladrilhos de cobre desgastada encerada",
|
||||
"block.create.weathered_copper_tile_stairs": "Escada de ladrilhos de cobre desgastada encerada",
|
||||
"block.create.weathered_copper_tiles": "Ladrilhos de cobre desgastado encerado",
|
||||
"block.create.weighted_ejector": "Ejetor ponderado",
|
||||
"block.create.white_nixie_tube": "Tubo nixie branco",
|
||||
"block.create.white_sail": "Vela branca",
|
||||
"block.create.white_seat": "Assento branco",
|
||||
|
@ -578,6 +578,7 @@
|
|||
"item.create.chromatic_compound": "Composto Cromático",
|
||||
"item.create.cinder_flour": "Farinha de Netherrack",
|
||||
"item.create.copper_backtank": "Tanque Traseiro",
|
||||
"item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable",
|
||||
"item.create.copper_nugget": "Pepita de Cobre",
|
||||
"item.create.copper_sheet": "Chapa de Cobre",
|
||||
"item.create.crafter_slot_cover": "Cobertura do slot de fabricador",
|
||||
|
@ -608,7 +609,7 @@
|
|||
"item.create.furnace_minecart_contraption": "Engenhoca de Carrinho de Mina com Fornalha",
|
||||
"item.create.goggles": "Óculos de Engenheiro",
|
||||
"item.create.golden_sheet": "Chapa de Ouro",
|
||||
"item.create.handheld_worldshaper": "Modelador de Mundo Criativo",
|
||||
"item.create.handheld_worldshaper": "Terraformador de Mundo Criativo",
|
||||
"item.create.honey_bucket": "Balde de Mel",
|
||||
"item.create.honeyed_apple": "Maçã com Cobertura de Mel",
|
||||
"item.create.incomplete_cogwheel": "Roda Dentada Incompleta",
|
||||
|
@ -669,7 +670,7 @@
|
|||
"advancement.create.belt_funnel": "UNLOCALIZED: Funnels' Flappy Danglers",
|
||||
"advancement.create.belt_funnel.desc": "Coloque um funil lateral em cima de uma esteira ou depósito para criar um tipo especial.",
|
||||
"advancement.create.belt_funnel_kiss": "UNLOCALIZED: The Parrots and the Flaps",
|
||||
"advancement.create.belt_funnel_kiss.desc": "UNLOCALIZED: Make two belt mounted funnels kiss.",
|
||||
"advancement.create.belt_funnel_kiss.desc": "Faça dois funis de esteira beijarem.",
|
||||
"advancement.create.fan": "Dobrador de ar mecânico",
|
||||
"advancement.create.fan.desc": "Pegue uma carona no fluxo de ar provido pelo ventilador revestido.",
|
||||
"advancement.create.fan_lava": "Aquecedor de espaço geotermal",
|
||||
|
@ -732,7 +733,7 @@
|
|||
"advancement.create.copper_casing.desc": "Use um pouco de chapas de cobre e madeira para criar um pouco de revestimentos de cobre.",
|
||||
"advancement.create.spout": "Sploosh",
|
||||
"advancement.create.spout.desc": "Assista um item ser enchido usando uma bica.",
|
||||
"advancement.create.spout_potion": "UNLOCALIZED: Global Brewery",
|
||||
"advancement.create.spout_potion": "Mestre de química",
|
||||
"advancement.create.spout_potion.desc": "Assista uma bica encher uma garrafa com uma poção.",
|
||||
"advancement.create.chocolate": "Um mundo de imaginação",
|
||||
"advancement.create.chocolate.desc": "Obtenha um balde de chocolate.",
|
||||
|
@ -778,11 +779,11 @@
|
|||
"advancement.create.arm_many_targets.desc": "Programe um braço mecânico com dez ou mais locais de saida.",
|
||||
"advancement.create.arm_blaze_burner": "Combuste-tron",
|
||||
"advancement.create.arm_blaze_burner.desc": "Instrua um braço mecânico para alimentar seu queimador de blaze.",
|
||||
"advancement.create.fist_bump": "UNLOCALIZED: Pound It, Bro!",
|
||||
"advancement.create.fist_bump.desc": "UNLOCALIZED: Make two Deployers fist-bump.",
|
||||
"advancement.create.fist_bump": "Bate isso, mano!",
|
||||
"advancement.create.fist_bump.desc": "Faça dois implantadores baterem com o punho.",
|
||||
"advancement.create.crushing_wheel": "Par de gigantes",
|
||||
"advancement.create.crushing_wheel.desc": "Crie algumas rodas de moer para triturar alguns materiais eficientemente.",
|
||||
"advancement.create.blaze_cake": "UNLOCALIZED: Sugar Rush",
|
||||
"advancement.create.blaze_cake": "Descarga de açucar",
|
||||
"advancement.create.blaze_cake.desc": "Asse para o seu queimador de blaze um bolo especial.",
|
||||
"advancement.create.wand_of_symmetry": "Espelhos radiantes",
|
||||
"advancement.create.wand_of_symmetry.desc": "Fabrique uma varinha de simetria.",
|
||||
|
@ -827,47 +828,47 @@
|
|||
"create.menu.report_bugs": "UNLOCALIZED: Report Issues",
|
||||
"create.menu.support": "UNLOCALIZED: Support Us",
|
||||
|
||||
"create.recipe.crushing": "Moendo",
|
||||
"create.recipe.milling": "UNLOCALIZED: Milling",
|
||||
"create.recipe.crushing": "Triturando",
|
||||
"create.recipe.milling": "Moendo",
|
||||
"create.recipe.fan_washing": "Lavagem em massa",
|
||||
"create.recipe.fan_washing.fan": "Ventilador atrás de água",
|
||||
"create.recipe.fan_smoking": "Defumação em massa",
|
||||
"create.recipe.fan_smoking.fan": "Ventilador atrás de fogo",
|
||||
"create.recipe.fan_haunting": "UNLOCALIZED: Bulk Haunting",
|
||||
"create.recipe.fan_haunting.fan": "UNLOCALIZED: Fan behind Soul Fire",
|
||||
"create.recipe.fan_smoking.fan": "Ventilador atrás do fogo",
|
||||
"create.recipe.fan_haunting": "Assombração em massa",
|
||||
"create.recipe.fan_haunting.fan": "Ventilador atrás do fogo das almas ",
|
||||
"create.recipe.fan_blasting": "Fundição em massa",
|
||||
"create.recipe.fan_blasting.fan": "entilador atrás de lava",
|
||||
"create.recipe.pressing": "Prensa Mecânica",
|
||||
"create.recipe.pressing": "Prensando",
|
||||
"create.recipe.mixing": "Misturando",
|
||||
"create.recipe.deploying": "Implantando",
|
||||
"create.recipe.automatic_shapeless": "UNLOCALIZED: Automated Shapeless Crafting",
|
||||
"create.recipe.automatic_shapeless": "Fabricação sem forma automático",
|
||||
"create.recipe.automatic_brewing": "UNLOCALIZED: Automated Brewing",
|
||||
"create.recipe.packing": "Compactando",
|
||||
"create.recipe.automatic_packing": "UNLOCALIZED: Automated Packing",
|
||||
"create.recipe.sawing": "UNLOCALIZED: Sawing",
|
||||
"create.recipe.mechanical_crafting": "UNLOCALIZED: Mechanical Crafting",
|
||||
"create.recipe.automatic_shaped": "UNLOCALIZED: Automated Shaped Crafting",
|
||||
"create.recipe.block_cutting": "UNLOCALIZED: Block Cutting",
|
||||
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
|
||||
"create.recipe.sandpaper_polishing": "UNLOCALIZED: Sandpaper Polishing",
|
||||
"create.recipe.mystery_conversion": "UNLOCALIZED: Mysterious Conversion",
|
||||
"create.recipe.spout_filling": "UNLOCALIZED: Filling by Spout",
|
||||
"create.recipe.draining": "UNLOCALIZED: Item Draining",
|
||||
"create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly",
|
||||
"create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s",
|
||||
"create.recipe.assembly.step": "UNLOCALIZED: Step %1$s:",
|
||||
"create.recipe.assembly.progress": "UNLOCALIZED: Progress: %1$s/%2$s",
|
||||
"create.recipe.assembly.pressing": "UNLOCALIZED: Process in Press",
|
||||
"create.recipe.assembly.spout_filling_fluid": "UNLOCALIZED: Spout %1$s",
|
||||
"create.recipe.assembly.deploying_item": "UNLOCALIZED: Deploy %1$s",
|
||||
"create.recipe.assembly.cutting": "UNLOCALIZED: Cut with Saw",
|
||||
"create.recipe.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times",
|
||||
"create.recipe.assembly.junk": "UNLOCALIZED: Random salvage",
|
||||
"create.recipe.processing.chance": "UNLOCALIZED: %1$s%% Chance",
|
||||
"create.recipe.deploying.not_consumed": "UNLOCALIZED: Not Consumed",
|
||||
"create.recipe.heat_requirement.none": "UNLOCALIZED: No Heating Required",
|
||||
"create.recipe.heat_requirement.heated": "UNLOCALIZED: Heated",
|
||||
"create.recipe.heat_requirement.superheated": "UNLOCALIZED: Super-Heated",
|
||||
"create.recipe.automatic_packing": "Compactamento automático",
|
||||
"create.recipe.sawing": "Serrando",
|
||||
"create.recipe.mechanical_crafting": "Fabricação mecânica",
|
||||
"create.recipe.automatic_shaped": "Fabricação com forma automática",
|
||||
"create.recipe.block_cutting": "Corte de blocos",
|
||||
"create.recipe.wood_cutting": "Corte de madeira",
|
||||
"create.recipe.sandpaper_polishing": "Polimento com lixa",
|
||||
"create.recipe.mystery_conversion": "Conversão misteriosa",
|
||||
"create.recipe.spout_filling": "Preenchimento com bica",
|
||||
"create.recipe.draining": "Drenação de item",
|
||||
"create.recipe.sequenced_assembly": "Montagem sequenciada",
|
||||
"create.recipe.assembly.next": "Proximo: %1$s",
|
||||
"create.recipe.assembly.step": "Passo %1$s:",
|
||||
"create.recipe.assembly.progress": "Progresso: %1$s/%2$s",
|
||||
"create.recipe.assembly.pressing": "Processa na prensa",
|
||||
"create.recipe.assembly.spout_filling_fluid": "Despejar %1$s",
|
||||
"create.recipe.assembly.deploying_item": "Implantar %1$s",
|
||||
"create.recipe.assembly.cutting": "Cortado com serra",
|
||||
"create.recipe.assembly.repeat": "Repetir sequencia %1$s vezes",
|
||||
"create.recipe.assembly.junk": "Recuperação aleatório",
|
||||
"create.recipe.processing.chance": "%1$s%% Chance",
|
||||
"create.recipe.deploying.not_consumed": "Não consumido",
|
||||
"create.recipe.heat_requirement.none": "Aquecimento não requerido",
|
||||
"create.recipe.heat_requirement.heated": "Aquecido",
|
||||
"create.recipe.heat_requirement.superheated": "Super-aquecido",
|
||||
|
||||
"create.generic.range": "Área",
|
||||
"create.generic.radius": "Raio",
|
||||
|
@ -1135,7 +1136,7 @@
|
|||
"create.schematicannon.status.finished": "Concluído",
|
||||
"create.schematicannon.status.paused": "Pausado",
|
||||
"create.schematicannon.status.stopped": "Parada",
|
||||
"create.schematicannon.status.noGunpowder": "UNLOCALIZED: Sem pólvora",
|
||||
"create.schematicannon.status.noGunpowder": "Sem pólvora",
|
||||
"create.schematicannon.status.targetNotLoaded": "Bloco não carregado",
|
||||
"create.schematicannon.status.targetOutsideRange": "Alvo está muito Longe",
|
||||
"create.schematicannon.status.searching": "Procurando",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1672",
|
||||
"_": "Missing Localizations: 1673",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -578,6 +578,7 @@
|
|||
"item.create.chromatic_compound": "Composto Cromático",
|
||||
"item.create.cinder_flour": "Farinha de Netherrack",
|
||||
"item.create.copper_backtank": "Tanque Traseiro",
|
||||
"item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable",
|
||||
"item.create.copper_nugget": "Pepita de Cobre",
|
||||
"item.create.copper_sheet": "Chapa de Cobre",
|
||||
"item.create.crafter_slot_cover": "Cobertura do slot de fabricador",
|
||||
|
@ -669,7 +670,7 @@
|
|||
"advancement.create.belt_funnel": "UNLOCALIZED: Funnels' Flappy Danglers",
|
||||
"advancement.create.belt_funnel.desc": "Coloque um funil lateral em cima de uma esteira ou depósito para criar um tipo especial.",
|
||||
"advancement.create.belt_funnel_kiss": "UNLOCALIZED: The Parrots and the Flaps",
|
||||
"advancement.create.belt_funnel_kiss.desc": "UNLOCALIZED: Make two belt mounted funnels kiss.",
|
||||
"advancement.create.belt_funnel_kiss.desc": "UNLOCALIZED: Make two Belt-mounted Funnels kiss.",
|
||||
"advancement.create.fan": "Dobrador de ar mecânico",
|
||||
"advancement.create.fan.desc": "Pegue uma carona no fluxo de ar provido pelo ventilador revestido.",
|
||||
"advancement.create.fan_lava": "Aquecedor de espaço geotermal",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 493",
|
||||
"_": "Missing Localizations: 494",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -578,6 +578,7 @@
|
|||
"item.create.chromatic_compound": "Хроматический компаунд",
|
||||
"item.create.cinder_flour": "Незераковая пыль",
|
||||
"item.create.copper_backtank": "Медный баллон",
|
||||
"item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable",
|
||||
"item.create.copper_nugget": "Кусочек меди",
|
||||
"item.create.copper_sheet": "Медный лист",
|
||||
"item.create.crafter_slot_cover": "Крышка на слот крафтера",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 119",
|
||||
"_": "Missing Localizations: 116",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -234,8 +234,8 @@
|
|||
"block.create.hand_crank": "手摇曲柄",
|
||||
"block.create.haunted_bell": "森魂钟",
|
||||
"block.create.honey": "蜂蜜",
|
||||
"block.create.horizontal_framed_glass": "竖直边框玻璃",
|
||||
"block.create.horizontal_framed_glass_pane": "竖直边框玻璃板",
|
||||
"block.create.horizontal_framed_glass": "水平边框玻璃",
|
||||
"block.create.horizontal_framed_glass_pane": "水平边框玻璃板",
|
||||
"block.create.hose_pulley": "软管滑轮",
|
||||
"block.create.item_drain": "分液池",
|
||||
"block.create.item_vault": "物品保险库",
|
||||
|
@ -578,6 +578,7 @@
|
|||
"item.create.chromatic_compound": "异彩化合物",
|
||||
"item.create.cinder_flour": "下界面粉",
|
||||
"item.create.copper_backtank": "铜制背罐",
|
||||
"item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable",
|
||||
"item.create.copper_nugget": "铜粒",
|
||||
"item.create.copper_sheet": "铜板",
|
||||
"item.create.crafter_slot_cover": "合成器盖板",
|
||||
|
@ -833,8 +834,8 @@
|
|||
"create.recipe.fan_washing.fan": "在水后放置鼓风机",
|
||||
"create.recipe.fan_smoking": "批量烟熏",
|
||||
"create.recipe.fan_smoking.fan": "在火焰后放置鼓风机",
|
||||
"create.recipe.fan_haunting": "UNLOCALIZED: Bulk Haunting",
|
||||
"create.recipe.fan_haunting.fan": "UNLOCALIZED: Fan behind Soul Fire",
|
||||
"create.recipe.fan_haunting": "批量缠魂",
|
||||
"create.recipe.fan_haunting.fan": "在灵魂火后放置鼓风机",
|
||||
"create.recipe.fan_blasting": "批量熔炼",
|
||||
"create.recipe.fan_blasting.fan": "在熔岩后放置鼓风机",
|
||||
"create.recipe.pressing": "金属压片",
|
||||
|
@ -1183,8 +1184,8 @@
|
|||
"create.item_attributes.furnace_fuel.inverted": "不可作为燃料",
|
||||
"create.item_attributes.washable": "可被洗涤",
|
||||
"create.item_attributes.washable.inverted": "不可被洗涤",
|
||||
"create.item_attributes.hauntable": "UNLOCALIZED: can be Haunted",
|
||||
"create.item_attributes.hauntable.inverted": "UNLOCALIZED: cannot be Haunted",
|
||||
"create.item_attributes.hauntable": "可被缠魂",
|
||||
"create.item_attributes.hauntable.inverted": "不可被缠魂",
|
||||
"create.item_attributes.crushable": "可被粉碎",
|
||||
"create.item_attributes.crushable.inverted": "不可被粉碎",
|
||||
"create.item_attributes.smeltable": "可被熔炉烧制",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 507",
|
||||
"_": "Missing Localizations: 508",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -578,6 +578,7 @@
|
|||
"item.create.chromatic_compound": "異彩化合物",
|
||||
"item.create.cinder_flour": "地獄麵粉",
|
||||
"item.create.copper_backtank": "銅製後背包",
|
||||
"item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable",
|
||||
"item.create.copper_nugget": "銅粒",
|
||||
"item.create.copper_sheet": "銅板",
|
||||
"item.create.crafter_slot_cover": "合成器蓋板",
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"parent": "minecraft:item/barrier"
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
{
|
||||
"type": "minecraft:block",
|
||||
"pools": [
|
||||
{
|
||||
"rolls": 1.0,
|
||||
"bonus_rolls": 0.0,
|
||||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"name": "minecraft:air"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"condition": "minecraft:survives_explosion"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"create:orange_sail",
|
||||
"create:magenta_sail",
|
||||
"create:light_blue_sail",
|
||||
"create:yellow_sail",
|
||||
"create:lime_sail",
|
||||
"create:pink_sail",
|
||||
"create:gray_sail",
|
||||
"create:light_gray_sail",
|
||||
"create:cyan_sail",
|
||||
"create:purple_sail",
|
||||
"create:blue_sail",
|
||||
"create:brown_sail",
|
||||
"create:green_sail",
|
||||
"create:red_sail",
|
||||
"create:black_sail"
|
||||
]
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"minecraft:water",
|
||||
"minecraft:lava"
|
||||
]
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"replace": false,
|
||||
"values": []
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"replace": false,
|
||||
"values": []
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"create:blaze_cake"
|
||||
]
|
||||
}
|
|
@ -53,6 +53,7 @@ import com.simibubi.create.content.contraptions.components.saw.SawBlock;
|
|||
import com.simibubi.create.content.contraptions.components.saw.SawGenerator;
|
||||
import com.simibubi.create.content.contraptions.components.steam.PoweredShaftBlock;
|
||||
import com.simibubi.create.content.contraptions.components.steam.SteamEngineBlock;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.BlankSailBlockItem;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.ClockworkBearingBlock;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.MechanicalBearingBlock;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.SailBlock;
|
||||
|
@ -419,7 +420,7 @@ public class AllBlocks {
|
|||
.register();
|
||||
|
||||
public static final BlockEntry<BeltBlock> BELT = REGISTRATE.block("belt", BeltBlock::new)
|
||||
.initialProperties(SharedProperties.beltMaterial, MaterialColor.COLOR_GRAY)
|
||||
.initialProperties(SharedProperties.BELT_MATERIAL, MaterialColor.COLOR_GRAY)
|
||||
.properties(p -> p.sound(SoundType.WOOL))
|
||||
.properties(p -> p.strength(0.8F))
|
||||
.transform(axeOrPickaxe())
|
||||
|
@ -526,7 +527,8 @@ public class AllBlocks {
|
|||
|
||||
public static final BlockEntry<CrushingWheelControllerBlock> CRUSHING_WHEEL_CONTROLLER =
|
||||
REGISTRATE.block("crushing_wheel_controller", CrushingWheelControllerBlock::new)
|
||||
.initialProperties(() -> Blocks.AIR)
|
||||
.initialProperties(SharedProperties.CRUSHING_WHEEL_CONTROLLER_MATERIAL)
|
||||
.properties(p -> p.noOcclusion().noDrops().air())
|
||||
.blockstate((c, p) -> p.getVariantBuilder(c.get())
|
||||
.forAllStatesExcept(state -> ConfiguredModel.builder()
|
||||
.modelFile(p.models()
|
||||
|
@ -969,7 +971,7 @@ public class AllBlocks {
|
|||
.register();
|
||||
|
||||
public static final BlockEntry<PulleyBlock.RopeBlock> ROPE = REGISTRATE.block("rope", PulleyBlock.RopeBlock::new)
|
||||
.initialProperties(SharedProperties.beltMaterial, MaterialColor.COLOR_BROWN)
|
||||
.initialProperties(SharedProperties.BELT_MATERIAL, MaterialColor.COLOR_BROWN)
|
||||
.tag(AllBlockTags.BRITTLE.tag)
|
||||
.properties(p -> p.sound(SoundType.WOOL))
|
||||
.blockstate((c, p) -> p.simpleBlock(c.get(), p.models()
|
||||
|
@ -1187,7 +1189,8 @@ public class AllBlocks {
|
|||
.transform(axeOnly())
|
||||
.blockstate(BlockStateGen.directionalBlockProvider(false))
|
||||
.tag(AllBlockTags.WINDMILL_SAILS.tag)
|
||||
.simpleItem()
|
||||
.item(BlankSailBlockItem::new)
|
||||
.build()
|
||||
.register();
|
||||
|
||||
public static final DyedBlockList<SailBlock> DYED_SAILS = new DyedBlockList<>(colour -> {
|
||||
|
@ -1197,13 +1200,13 @@ public class AllBlocks {
|
|||
String colourName = colour.getSerializedName();
|
||||
return REGISTRATE.block(colourName + "_sail", p -> SailBlock.withCanvas(p, colour))
|
||||
.initialProperties(SharedProperties::wooden)
|
||||
.properties(BlockBehaviour.Properties::noOcclusion)
|
||||
.properties(p -> p.sound(SoundType.SCAFFOLDING)
|
||||
.noOcclusion())
|
||||
.transform(axeOnly())
|
||||
.blockstate((c, p) -> p.directionalBlock(c.get(), p.models()
|
||||
.withExistingParent(colourName + "_sail", p.modLoc("block/white_sail"))
|
||||
.texture("0", p.modLoc("block/sail/canvas_" + colourName))))
|
||||
.tag(AllBlockTags.WINDMILL_SAILS.tag)
|
||||
.tag(AllBlockTags.SAILS.tag)
|
||||
.loot((p, b) -> p.dropOther(b, SAIL.get()))
|
||||
.register();
|
||||
});
|
||||
|
|
|
@ -9,6 +9,15 @@ import static com.simibubi.create.content.AllSections.KINETICS;
|
|||
import static com.simibubi.create.content.AllSections.LOGISTICS;
|
||||
import static com.simibubi.create.content.AllSections.MATERIALS;
|
||||
import static com.simibubi.create.content.AllSections.SCHEMATICS;
|
||||
import static com.simibubi.create.foundation.data.recipe.CompatMetals.ALUMINUM;
|
||||
import static com.simibubi.create.foundation.data.recipe.CompatMetals.LEAD;
|
||||
import static com.simibubi.create.foundation.data.recipe.CompatMetals.NICKEL;
|
||||
import static com.simibubi.create.foundation.data.recipe.CompatMetals.OSMIUM;
|
||||
import static com.simibubi.create.foundation.data.recipe.CompatMetals.PLATINUM;
|
||||
import static com.simibubi.create.foundation.data.recipe.CompatMetals.QUICKSILVER;
|
||||
import static com.simibubi.create.foundation.data.recipe.CompatMetals.SILVER;
|
||||
import static com.simibubi.create.foundation.data.recipe.CompatMetals.TIN;
|
||||
import static com.simibubi.create.foundation.data.recipe.CompatMetals.URANIUM;
|
||||
|
||||
import com.simibubi.create.AllTags.AllItemTags;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueItem;
|
||||
|
@ -31,6 +40,7 @@ import com.simibubi.create.content.curiosities.ShadowSteelItem;
|
|||
import com.simibubi.create.content.curiosities.TreeFertilizerItem;
|
||||
import com.simibubi.create.content.curiosities.armor.CopperArmorItem;
|
||||
import com.simibubi.create.content.curiosities.armor.CopperBacktankItem;
|
||||
import com.simibubi.create.content.curiosities.armor.CopperBacktankItem.CopperBacktankBlockItem;
|
||||
import com.simibubi.create.content.curiosities.armor.DivingBootsItem;
|
||||
import com.simibubi.create.content.curiosities.armor.DivingHelmetItem;
|
||||
import com.simibubi.create.content.curiosities.symmetry.SymmetryWandItem;
|
||||
|
@ -46,16 +56,15 @@ import com.simibubi.create.content.schematics.item.SchematicAndQuillItem;
|
|||
import com.simibubi.create.content.schematics.item.SchematicItem;
|
||||
import com.simibubi.create.foundation.data.AssetLookup;
|
||||
import com.simibubi.create.foundation.data.CreateRegistrate;
|
||||
import com.simibubi.create.foundation.data.recipe.CompatMetals;
|
||||
import com.simibubi.create.foundation.item.HiddenIngredientItem;
|
||||
import com.simibubi.create.foundation.item.TagDependentIngredientItem;
|
||||
import com.simibubi.create.foundation.item.TooltipHelper;
|
||||
import com.tterrag.registrate.util.entry.ItemEntry;
|
||||
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.tags.ItemTags;
|
||||
import net.minecraft.tags.Tag;
|
||||
import net.minecraft.tags.TagKey;
|
||||
import net.minecraft.world.food.FoodProperties;
|
||||
import net.minecraft.world.item.BlockItem;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.Rarity;
|
||||
import net.minecraftforge.common.Tags;
|
||||
|
@ -101,7 +110,7 @@ public class AllItems {
|
|||
.register();
|
||||
|
||||
public static final ItemEntry<CombustibleItem> BLAZE_CAKE = REGISTRATE.item("blaze_cake", CombustibleItem::new)
|
||||
.tag(AllItemTags.UPRIGHT_ON_BELT.tag)
|
||||
.tag(AllItemTags.BLAZE_BURNER_FUEL_SPECIAL.tag, AllItemTags.UPRIGHT_ON_BELT.tag)
|
||||
.onRegister(i -> i.setBurnTime(6400))
|
||||
.register();
|
||||
|
||||
|
@ -189,11 +198,11 @@ public class AllItems {
|
|||
CRUSHED_COPPER = taggedIngredient("crushed_copper_ore", CRUSHED_ORES.tag),
|
||||
CRUSHED_ZINC = taggedIngredient("crushed_zinc_ore", CRUSHED_ORES.tag);
|
||||
|
||||
public static final ItemEntry<TagDependentIngredientItem> CRUSHED_OSMIUM = compatCrushedOre("osmium"),
|
||||
CRUSHED_PLATINUM = compatCrushedOre("platinum"), CRUSHED_SILVER = compatCrushedOre("silver"),
|
||||
CRUSHED_TIN = compatCrushedOre("tin"), CRUSHED_LEAD = compatCrushedOre("lead"),
|
||||
CRUSHED_QUICKSILVER = compatCrushedOre("quicksilver"), CRUSHED_BAUXITE = compatCrushedOre("aluminum"),
|
||||
CRUSHED_URANIUM = compatCrushedOre("uranium"), CRUSHED_NICKEL = compatCrushedOre("nickel");
|
||||
public static final ItemEntry<TagDependentIngredientItem> CRUSHED_OSMIUM = compatCrushedOre(OSMIUM),
|
||||
CRUSHED_PLATINUM = compatCrushedOre(PLATINUM), CRUSHED_SILVER = compatCrushedOre(SILVER),
|
||||
CRUSHED_TIN = compatCrushedOre(TIN), CRUSHED_LEAD = compatCrushedOre(LEAD),
|
||||
CRUSHED_QUICKSILVER = compatCrushedOre(QUICKSILVER), CRUSHED_BAUXITE = compatCrushedOre(ALUMINUM),
|
||||
CRUSHED_URANIUM = compatCrushedOre(URANIUM), CRUSHED_NICKEL = compatCrushedOre(NICKEL);
|
||||
|
||||
// Kinetics
|
||||
|
||||
|
@ -235,13 +244,18 @@ public class AllItems {
|
|||
REGISTRATE.item("crafting_blueprint", BlueprintItem::new)
|
||||
.register();
|
||||
|
||||
// wrapped by COPPER_BACKTANK for block placement uses.
|
||||
// must be registered as of 1.18.2
|
||||
public static final ItemEntry<CopperBacktankBlockItem> COPPER_BACKTANK_PLACEABLE = REGISTRATE
|
||||
.item("copper_backtank_placeable", p -> new CopperBacktankBlockItem(AllBlocks.COPPER_BACKTANK.get(), p))
|
||||
.model((c, p) -> p.withExistingParent(c.getName(), p.mcLoc("item/barrier")))
|
||||
.register();
|
||||
|
||||
public static final ItemEntry<? extends CopperArmorItem>
|
||||
|
||||
COPPER_BACKTANK =
|
||||
REGISTRATE
|
||||
.item("copper_backtank", p -> new CopperBacktankItem(p, new BlockItem(AllBlocks.COPPER_BACKTANK.get(), p)))
|
||||
.model(AssetLookup.<CopperBacktankItem>customGenericItemModel("_", "item"))
|
||||
.register(),
|
||||
COPPER_BACKTANK = REGISTRATE.item("copper_backtank", p -> new CopperBacktankItem(p, COPPER_BACKTANK_PLACEABLE))
|
||||
.model(AssetLookup.customGenericItemModel("_", "item"))
|
||||
.register(),
|
||||
|
||||
DIVING_HELMET = REGISTRATE.item("diving_helmet", DivingHelmetItem::new)
|
||||
.register(),
|
||||
|
@ -299,7 +313,8 @@ public class AllItems {
|
|||
|
||||
public static final ItemEntry<SymmetryWandItem> WAND_OF_SYMMETRY =
|
||||
REGISTRATE.item("wand_of_symmetry", SymmetryWandItem::new)
|
||||
.properties(p -> p.stacksTo(1).rarity(Rarity.UNCOMMON))
|
||||
.properties(p -> p.stacksTo(1)
|
||||
.rarity(Rarity.UNCOMMON))
|
||||
.model(AssetLookup.itemModelWithPartials())
|
||||
.register();
|
||||
|
||||
|
@ -365,16 +380,17 @@ public class AllItems {
|
|||
}
|
||||
|
||||
@SafeVarargs
|
||||
private static ItemEntry<Item> taggedIngredient(String name, Tag.Named<Item>... tags) {
|
||||
private static ItemEntry<Item> taggedIngredient(String name, TagKey<Item>... tags) {
|
||||
return REGISTRATE.item(name, Item::new)
|
||||
.tag(tags)
|
||||
.register();
|
||||
}
|
||||
|
||||
private static ItemEntry<TagDependentIngredientItem> compatCrushedOre(String metalName) {
|
||||
private static ItemEntry<TagDependentIngredientItem> compatCrushedOre(CompatMetals metal) {
|
||||
String metalName = metal.getName();
|
||||
return REGISTRATE
|
||||
.item("crushed_" + metalName + "_ore",
|
||||
props -> new TagDependentIngredientItem(props, new ResourceLocation("forge", "ores/" + metalName)))
|
||||
props -> new TagDependentIngredientItem(props, AllTags.forgeItemTag("ores/" + metalName)))
|
||||
.tag(CRUSHED_ORES.tag)
|
||||
.register();
|
||||
}
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
package com.simibubi.create;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.simibubi.create.compat.jei.ConversionRecipe;
|
||||
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCraftingRecipe;
|
||||
import com.simibubi.create.content.contraptions.components.crusher.CrushingRecipe;
|
||||
|
@ -134,7 +136,13 @@ public enum AllRecipeTypes implements IRecipeTypeInfo {
|
|||
});
|
||||
}
|
||||
|
||||
public static boolean isManualRecipe(Recipe<?> recipe) {
|
||||
public static final Set<ResourceLocation> RECIPE_DENY_SET =
|
||||
ImmutableSet.of(new ResourceLocation("occultism", "spirit_trade"), new ResourceLocation("occultism", "ritual"));
|
||||
|
||||
public static boolean shouldIgnoreInAutomation(Recipe<?> recipe) {
|
||||
RecipeSerializer<?> serializer = recipe.getSerializer();
|
||||
if (serializer != null && RECIPE_DENY_SET.contains(serializer.getRegistryName()))
|
||||
return true;
|
||||
return recipe.getId()
|
||||
.getPath()
|
||||
.endsWith("_manual_only");
|
||||
|
|
|
@ -4,7 +4,7 @@ import static com.simibubi.create.AllTags.NameSpace.FORGE;
|
|||
import static com.simibubi.create.AllTags.NameSpace.MOD;
|
||||
import static com.simibubi.create.AllTags.NameSpace.TIC;
|
||||
|
||||
import java.util.function.Function;
|
||||
import java.util.Collections;
|
||||
|
||||
import com.simibubi.create.foundation.data.CreateRegistrate;
|
||||
import com.simibubi.create.foundation.utility.Lang;
|
||||
|
@ -17,7 +17,7 @@ import net.minecraft.resources.ResourceLocation;
|
|||
import net.minecraft.tags.BlockTags;
|
||||
import net.minecraft.tags.FluidTags;
|
||||
import net.minecraft.tags.ItemTags;
|
||||
import net.minecraft.tags.Tag;
|
||||
import net.minecraft.tags.TagKey;
|
||||
import net.minecraft.world.item.BlockItem;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
|
@ -26,32 +26,36 @@ import net.minecraft.world.level.block.Block;
|
|||
import net.minecraft.world.level.block.Blocks;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.level.material.Fluid;
|
||||
import net.minecraft.world.level.material.FluidState;
|
||||
import net.minecraft.world.level.material.Fluids;
|
||||
import net.minecraftforge.common.Tags;
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
import net.minecraftforge.registries.IForgeRegistry;
|
||||
import net.minecraftforge.registries.IForgeRegistryEntry;
|
||||
|
||||
public class AllTags {
|
||||
|
||||
private static final CreateRegistrate REGISTRATE = Create.registrate()
|
||||
.creativeModeTab(() -> Create.BASE_CREATIVE_TAB);
|
||||
|
||||
public static <T> Tag.Named<T> tag(Function<ResourceLocation, Tag.Named<T>> wrapperFactory, String namespace,
|
||||
String path) {
|
||||
return wrapperFactory.apply(new ResourceLocation(namespace, path));
|
||||
public static <T extends IForgeRegistryEntry<T>> TagKey<T> optionalTag(IForgeRegistry<T> registry, ResourceLocation id) {
|
||||
return registry.tags().createOptionalTagKey(id, Collections.emptySet());
|
||||
}
|
||||
|
||||
public static <T> Tag.Named<T> forgeTag(Function<ResourceLocation, Tag.Named<T>> wrapperFactory, String path) {
|
||||
return tag(wrapperFactory, "forge", path);
|
||||
public static <T extends IForgeRegistryEntry<T>> TagKey<T> forgeTag(IForgeRegistry<T> registry, String path) {
|
||||
return optionalTag(registry, new ResourceLocation("forge", path));
|
||||
}
|
||||
|
||||
public static Tag.Named<Block> forgeBlockTag(String path) {
|
||||
return forgeTag(BlockTags::createOptional, path);
|
||||
public static TagKey<Block> forgeBlockTag(String path) {
|
||||
return forgeTag(ForgeRegistries.BLOCKS, path);
|
||||
}
|
||||
|
||||
public static Tag.Named<Item> forgeItemTag(String path) {
|
||||
return forgeTag(ItemTags::createOptional, path);
|
||||
public static TagKey<Item> forgeItemTag(String path) {
|
||||
return forgeTag(ForgeRegistries.ITEMS, path);
|
||||
}
|
||||
|
||||
public static Tag.Named<Fluid> forgeFluidTag(String path) {
|
||||
return forgeTag(FluidTags::createOptional, path);
|
||||
public static TagKey<Fluid> forgeFluidTag(String path) {
|
||||
return forgeTag(ForgeRegistries.FLUIDS, path);
|
||||
}
|
||||
|
||||
public static <T extends Block, P> NonNullFunction<BlockBuilder<T, P>, BlockBuilder<T, P>> axeOrPickaxe() {
|
||||
|
@ -81,7 +85,9 @@ public class AllTags {
|
|||
|
||||
public enum NameSpace {
|
||||
|
||||
MOD(Create.ID, false, true), FORGE("forge"), TIC("tconstruct")
|
||||
MOD(Create.ID, false, true),
|
||||
FORGE("forge"),
|
||||
TIC("tconstruct")
|
||||
|
||||
;
|
||||
|
||||
|
@ -106,8 +112,8 @@ public class AllTags {
|
|||
BRITTLE,
|
||||
FAN_HEATERS,
|
||||
FAN_TRANSPARENT,
|
||||
ORE_OVERRIDE_STONE,
|
||||
SAFE_NBT,
|
||||
SAILS,
|
||||
SEATS,
|
||||
TOOLBOXES,
|
||||
VALVE_HANDLES,
|
||||
|
@ -118,15 +124,14 @@ public class AllTags {
|
|||
PASSIVE_BOILER_HEATERS,
|
||||
ACTIVE_BOILER_HEATERS,
|
||||
|
||||
ORE_OVERRIDE_STONE,
|
||||
|
||||
RELOCATION_NOT_SUPPORTED(FORGE),
|
||||
WG_STONE(FORGE),
|
||||
|
||||
SLIMY_LOGS(TIC),
|
||||
|
||||
;
|
||||
|
||||
public final Tag.Named<Block> tag;
|
||||
public final TagKey<Block> tag;
|
||||
|
||||
AllBlockTags() {
|
||||
this(MOD);
|
||||
|
@ -147,21 +152,22 @@ public class AllTags {
|
|||
AllBlockTags(NameSpace namespace, String path, boolean optional, boolean alwaysDatagen) {
|
||||
ResourceLocation id = new ResourceLocation(namespace.id, path == null ? Lang.asId(name()) : path);
|
||||
if (optional) {
|
||||
tag = BlockTags.createOptional(id);
|
||||
tag = optionalTag(ForgeRegistries.BLOCKS, id);
|
||||
} else {
|
||||
tag = BlockTags.bind(id.toString());
|
||||
tag = BlockTags.create(id);
|
||||
}
|
||||
if (alwaysDatagen) {
|
||||
REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(tag));
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public boolean matches(Block block) {
|
||||
return tag.contains(block);
|
||||
return block.builtInRegistryHolder().is(tag);
|
||||
}
|
||||
|
||||
public boolean matches(BlockState state) {
|
||||
return matches(state.getBlock());
|
||||
return state.is(tag);
|
||||
}
|
||||
|
||||
public void add(Block... values) {
|
||||
|
@ -169,7 +175,7 @@ public class AllTags {
|
|||
.add(values));
|
||||
}
|
||||
|
||||
public void includeIn(Tag.Named<Block> parent) {
|
||||
public void includeIn(TagKey<Block> parent) {
|
||||
REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(parent)
|
||||
.addTag(tag));
|
||||
}
|
||||
|
@ -178,7 +184,7 @@ public class AllTags {
|
|||
includeIn(parent.tag);
|
||||
}
|
||||
|
||||
public void includeAll(Tag.Named<Block> child) {
|
||||
public void includeAll(TagKey<Block> child) {
|
||||
REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(tag)
|
||||
.addTag(child));
|
||||
}
|
||||
|
@ -187,6 +193,8 @@ public class AllTags {
|
|||
|
||||
public enum AllItemTags {
|
||||
|
||||
BLAZE_BURNER_FUEL_REGULAR(MOD, "blaze_burner_fuel/regular"),
|
||||
BLAZE_BURNER_FUEL_SPECIAL(MOD, "blaze_burner_fuel/special"),
|
||||
CREATE_INGOTS,
|
||||
CRUSHED_ORES,
|
||||
SANDPAPER,
|
||||
|
@ -200,7 +208,7 @@ public class AllTags {
|
|||
|
||||
;
|
||||
|
||||
public final Tag.Named<Item> tag;
|
||||
public final TagKey<Item> tag;
|
||||
|
||||
AllItemTags() {
|
||||
this(MOD);
|
||||
|
@ -221,17 +229,22 @@ public class AllTags {
|
|||
AllItemTags(NameSpace namespace, String path, boolean optional, boolean alwaysDatagen) {
|
||||
ResourceLocation id = new ResourceLocation(namespace.id, path == null ? Lang.asId(name()) : path);
|
||||
if (optional) {
|
||||
tag = ItemTags.createOptional(id);
|
||||
tag = optionalTag(ForgeRegistries.ITEMS, id);
|
||||
} else {
|
||||
tag = ItemTags.bind(id.toString());
|
||||
tag = ItemTags.create(id);
|
||||
}
|
||||
if (alwaysDatagen) {
|
||||
REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.tag(tag));
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public boolean matches(Item item) {
|
||||
return item.builtInRegistryHolder().is(tag);
|
||||
}
|
||||
|
||||
public boolean matches(ItemStack stack) {
|
||||
return tag.contains(stack.getItem());
|
||||
return stack.is(tag);
|
||||
}
|
||||
|
||||
public void add(Item... values) {
|
||||
|
@ -239,7 +252,7 @@ public class AllTags {
|
|||
.add(values));
|
||||
}
|
||||
|
||||
public void includeIn(Tag.Named<Item> parent) {
|
||||
public void includeIn(TagKey<Item> parent) {
|
||||
REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.tag(parent)
|
||||
.addTag(tag));
|
||||
}
|
||||
|
@ -248,7 +261,7 @@ public class AllTags {
|
|||
includeIn(parent.tag);
|
||||
}
|
||||
|
||||
public void includeAll(Tag.Named<Item> child) {
|
||||
public void includeAll(TagKey<Item> child) {
|
||||
REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.tag(tag)
|
||||
.addTag(child));
|
||||
}
|
||||
|
@ -257,13 +270,14 @@ public class AllTags {
|
|||
|
||||
public enum AllFluidTags {
|
||||
|
||||
NO_INFINITE_DRAINING(MOD, true, false),
|
||||
BOTTOMLESS_ALLOW(MOD, "bottomless/allow"),
|
||||
BOTTOMLESS_DENY(MOD, "bottomless/deny"),
|
||||
|
||||
HONEY(FORGE)
|
||||
|
||||
;
|
||||
|
||||
public final Tag.Named<Fluid> tag;
|
||||
public final TagKey<Fluid> tag;
|
||||
|
||||
AllFluidTags() {
|
||||
this(MOD);
|
||||
|
@ -284,17 +298,22 @@ public class AllTags {
|
|||
AllFluidTags(NameSpace namespace, String path, boolean optional, boolean alwaysDatagen) {
|
||||
ResourceLocation id = new ResourceLocation(namespace.id, path == null ? Lang.asId(name()) : path);
|
||||
if (optional) {
|
||||
tag = FluidTags.createOptional(id);
|
||||
tag = optionalTag(ForgeRegistries.FLUIDS, id);
|
||||
} else {
|
||||
tag = FluidTags.bind(id.toString());
|
||||
tag = FluidTags.create(id);
|
||||
}
|
||||
if (alwaysDatagen) {
|
||||
REGISTRATE.addDataGenerator(ProviderType.FLUID_TAGS, prov -> prov.tag(tag));
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public boolean matches(Fluid fluid) {
|
||||
return fluid != null && fluid.is(tag);
|
||||
return fluid.is(tag);
|
||||
}
|
||||
|
||||
public boolean matches(FluidState state) {
|
||||
return state.is(tag);
|
||||
}
|
||||
|
||||
public void add(Fluid... values) {
|
||||
|
@ -302,7 +321,7 @@ public class AllTags {
|
|||
.add(values));
|
||||
}
|
||||
|
||||
public void includeIn(Tag.Named<Fluid> parent) {
|
||||
public void includeIn(TagKey<Fluid> parent) {
|
||||
REGISTRATE.addDataGenerator(ProviderType.FLUID_TAGS, prov -> prov.tag(parent)
|
||||
.addTag(tag));
|
||||
}
|
||||
|
@ -311,17 +330,15 @@ public class AllTags {
|
|||
includeIn(parent.tag);
|
||||
}
|
||||
|
||||
public void includeAll(Tag.Named<Fluid> child) {
|
||||
public void includeAll(TagKey<Fluid> child) {
|
||||
REGISTRATE.addDataGenerator(ProviderType.FLUID_TAGS, prov -> prov.tag(tag)
|
||||
.addTag(child));
|
||||
}
|
||||
|
||||
private static void loadClass() {}
|
||||
|
||||
}
|
||||
|
||||
public static void register() {
|
||||
AllFluidTags.loadClass();
|
||||
AllFluidTags.BOTTOMLESS_ALLOW.add(Fluids.WATER, Fluids.LAVA);
|
||||
|
||||
AllItemTags.CREATE_INGOTS.includeIn(AllItemTags.BEACON_PAYMENT);
|
||||
AllItemTags.CREATE_INGOTS.includeIn(Tags.Items.INGOTS);
|
||||
|
|
|
@ -32,7 +32,7 @@ import com.simibubi.create.foundation.data.recipe.SequencedAssemblyRecipeGen;
|
|||
import com.simibubi.create.foundation.data.recipe.StandardRecipeGen;
|
||||
import com.simibubi.create.foundation.networking.AllPackets;
|
||||
import com.simibubi.create.foundation.worldgen.AllWorldFeatures;
|
||||
import com.tterrag.registrate.util.NonNullLazyValue;
|
||||
import com.tterrag.registrate.util.nullness.NonNullSupplier;
|
||||
|
||||
import net.minecraft.core.particles.ParticleType;
|
||||
import net.minecraft.data.DataGenerator;
|
||||
|
@ -59,7 +59,7 @@ public class Create {
|
|||
|
||||
public static final String ID = "create";
|
||||
public static final String NAME = "Create";
|
||||
public static final String VERSION = "0.4d";
|
||||
public static final String VERSION = "0.4.1";
|
||||
|
||||
public static final Logger LOGGER = LogManager.getLogger();
|
||||
|
||||
|
@ -77,7 +77,7 @@ public class Create {
|
|||
public static final ServerLagger LAGGER = new ServerLagger();
|
||||
public static final Random RANDOM = new Random();
|
||||
|
||||
private static final NonNullLazyValue<CreateRegistrate> REGISTRATE = CreateRegistrate.lazy(ID);
|
||||
private static final NonNullSupplier<CreateRegistrate> REGISTRATE = CreateRegistrate.lazy(ID);
|
||||
|
||||
public Create() {
|
||||
onCtor();
|
||||
|
|
|
@ -1,15 +1,50 @@
|
|||
package com.simibubi.create.compat.jei;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import com.google.common.base.Predicates;
|
||||
import com.simibubi.create.*;
|
||||
import com.simibubi.create.compat.jei.category.*;
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.AllFluids;
|
||||
import com.simibubi.create.AllItems;
|
||||
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.CreateRecipeCategory;
|
||||
import com.simibubi.create.compat.jei.category.CrushingCategory;
|
||||
import com.simibubi.create.compat.jei.category.DeployingCategory;
|
||||
import com.simibubi.create.compat.jei.category.FanBlastingCategory;
|
||||
import com.simibubi.create.compat.jei.category.FanHauntingCategory;
|
||||
import com.simibubi.create.compat.jei.category.FanSmokingCategory;
|
||||
import com.simibubi.create.compat.jei.category.FanWashingCategory;
|
||||
import com.simibubi.create.compat.jei.category.ItemDrainCategory;
|
||||
import com.simibubi.create.compat.jei.category.MechanicalCraftingCategory;
|
||||
import com.simibubi.create.compat.jei.category.MillingCategory;
|
||||
import com.simibubi.create.compat.jei.category.MixingCategory;
|
||||
import com.simibubi.create.compat.jei.category.MysteriousItemConversionCategory;
|
||||
import com.simibubi.create.compat.jei.category.PackingCategory;
|
||||
import com.simibubi.create.compat.jei.category.PolishingCategory;
|
||||
import com.simibubi.create.compat.jei.category.PressingCategory;
|
||||
import com.simibubi.create.compat.jei.category.ProcessingViaFanCategory;
|
||||
import com.simibubi.create.compat.jei.category.SawingCategory;
|
||||
import com.simibubi.create.compat.jei.category.SequencedAssemblyCategory;
|
||||
import com.simibubi.create.compat.jei.category.SpoutCategory;
|
||||
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCraftingRecipe;
|
||||
import com.simibubi.create.content.contraptions.components.deployer.DeployerApplicationRecipe;
|
||||
import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity;
|
||||
import com.simibubi.create.content.contraptions.components.saw.SawTileEntity;
|
||||
import com.simibubi.create.content.contraptions.fluids.potion.PotionFluid;
|
||||
import com.simibubi.create.content.contraptions.fluids.recipe.PotionMixingRecipeManager;
|
||||
import com.simibubi.create.content.contraptions.fluids.recipe.PotionMixingRecipes;
|
||||
import com.simibubi.create.content.contraptions.processing.BasinRecipe;
|
||||
import com.simibubi.create.content.curiosities.tools.BlueprintScreen;
|
||||
import com.simibubi.create.content.logistics.item.LinkedControllerScreen;
|
||||
|
@ -23,26 +58,25 @@ import com.simibubi.create.foundation.utility.recipe.IRecipeTypeInfo;
|
|||
import mezz.jei.api.IModPlugin;
|
||||
import mezz.jei.api.JeiPlugin;
|
||||
import mezz.jei.api.constants.VanillaRecipeCategoryUid;
|
||||
import mezz.jei.api.registration.*;
|
||||
import mezz.jei.api.recipe.category.IRecipeCategory;
|
||||
import mezz.jei.api.registration.IGuiHandlerRegistration;
|
||||
import mezz.jei.api.registration.IRecipeCatalystRegistration;
|
||||
import mezz.jei.api.registration.IRecipeCategoryRegistration;
|
||||
import mezz.jei.api.registration.IRecipeRegistration;
|
||||
import mezz.jei.api.registration.IRecipeTransferRegistration;
|
||||
import mezz.jei.api.registration.ISubtypeRegistration;
|
||||
import mezz.jei.api.runtime.IIngredientManager;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.item.crafting.*;
|
||||
import net.minecraft.world.item.crafting.CraftingRecipe;
|
||||
import net.minecraft.world.item.crafting.Recipe;
|
||||
import net.minecraft.world.item.crafting.RecipeType;
|
||||
import net.minecraft.world.level.ItemLike;
|
||||
import net.minecraftforge.common.crafting.IShapedRecipe;
|
||||
import net.minecraftforge.fml.ModList;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@JeiPlugin
|
||||
@SuppressWarnings("unused")
|
||||
public class CreateJEI implements IModPlugin {
|
||||
|
@ -51,144 +85,152 @@ public class CreateJEI implements IModPlugin {
|
|||
|
||||
public IIngredientManager ingredientManager;
|
||||
private final List<CreateRecipeCategory<?>> allCategories = new ArrayList<>();
|
||||
private final CreateRecipeCategory<?>
|
||||
|
||||
milling = register("milling", MillingCategory::new).recipes(AllRecipeTypes.MILLING)
|
||||
private void loadCategories() {
|
||||
allCategories.clear();
|
||||
CreateRecipeCategory<?>
|
||||
|
||||
milling = register("milling", MillingCategory::new).addTypedRecipes(AllRecipeTypes.MILLING)
|
||||
.catalyst(AllBlocks.MILLSTONE::get)
|
||||
.build(),
|
||||
|
||||
crushing = register("crushing", CrushingCategory::new).recipes(AllRecipeTypes.CRUSHING)
|
||||
.recipesExcluding(AllRecipeTypes.MILLING::getType, AllRecipeTypes.CRUSHING::getType)
|
||||
.catalyst(AllBlocks.CRUSHING_WHEEL::get)
|
||||
.build(),
|
||||
crushing = register("crushing", CrushingCategory::new).addTypedRecipes(AllRecipeTypes.CRUSHING)
|
||||
.addTypedRecipesExcluding(AllRecipeTypes.MILLING::getType, AllRecipeTypes.CRUSHING::getType)
|
||||
.catalyst(AllBlocks.CRUSHING_WHEEL::get)
|
||||
.build(),
|
||||
|
||||
pressing = register("pressing", PressingCategory::new).recipes(AllRecipeTypes.PRESSING)
|
||||
.catalyst(AllBlocks.MECHANICAL_PRESS::get)
|
||||
.build(),
|
||||
pressing = register("pressing", PressingCategory::new).addTypedRecipes(AllRecipeTypes.PRESSING)
|
||||
.catalyst(AllBlocks.MECHANICAL_PRESS::get)
|
||||
.build(),
|
||||
|
||||
washing = register("fan_washing", FanWashingCategory::new).recipes(AllRecipeTypes.SPLASHING)
|
||||
.catalystStack(ProcessingViaFanCategory.getFan("fan_washing"))
|
||||
.build(),
|
||||
washing = register("fan_washing", FanWashingCategory::new).addTypedRecipes(AllRecipeTypes.SPLASHING)
|
||||
.catalystStack(ProcessingViaFanCategory.getFan("fan_washing"))
|
||||
.build(),
|
||||
|
||||
smoking = register("fan_smoking", FanSmokingCategory::new).recipes(() -> RecipeType.SMOKING)
|
||||
.catalystStack(ProcessingViaFanCategory.getFan("fan_smoking"))
|
||||
.build(),
|
||||
smoking = register("fan_smoking", FanSmokingCategory::new).addTypedRecipes(() -> RecipeType.SMOKING)
|
||||
.catalystStack(ProcessingViaFanCategory.getFan("fan_smoking"))
|
||||
.build(),
|
||||
|
||||
soul_smoking = register("fan_haunting", FanHauntingCategory::new).recipes(AllRecipeTypes.HAUNTING)
|
||||
.catalystStack(ProcessingViaFanCategory.getFan("fan_haunting")).build(),
|
||||
blasting = register("fan_blasting", FanBlastingCategory::new)
|
||||
.addTypedRecipesExcluding(() -> RecipeType.SMELTING, () -> RecipeType.BLASTING)
|
||||
.addTypedRecipes(() -> RecipeType.BLASTING)
|
||||
.removeRecipes(() -> RecipeType.SMOKING)
|
||||
.catalystStack(ProcessingViaFanCategory.getFan("fan_blasting"))
|
||||
.build(),
|
||||
|
||||
blasting = register("fan_blasting", FanBlastingCategory::new)
|
||||
.recipesExcluding(() -> RecipeType.SMELTING, () -> RecipeType.BLASTING)
|
||||
.recipes(() -> RecipeType.BLASTING)
|
||||
.removeRecipes(() -> RecipeType.SMOKING)
|
||||
.catalystStack(ProcessingViaFanCategory.getFan("fan_blasting"))
|
||||
.build(),
|
||||
haunting = register("fan_haunting", FanHauntingCategory::new).addTypedRecipes(AllRecipeTypes.HAUNTING)
|
||||
.catalystStack(ProcessingViaFanCategory.getFan("fan_haunting"))
|
||||
.build(),
|
||||
|
||||
mixing = register("mixing", MixingCategory::standard).recipes(AllRecipeTypes.MIXING::getType)
|
||||
.catalyst(AllBlocks.MECHANICAL_MIXER::get)
|
||||
.catalyst(AllBlocks.BASIN::get)
|
||||
.build(),
|
||||
mixing = register("mixing", MixingCategory::standard).addTypedRecipes(AllRecipeTypes.MIXING)
|
||||
.catalyst(AllBlocks.MECHANICAL_MIXER::get)
|
||||
.catalyst(AllBlocks.BASIN::get)
|
||||
.build(),
|
||||
|
||||
seqAssembly = register("sequenced_assembly", SequencedAssemblyCategory::new)
|
||||
.recipes(AllRecipeTypes.SEQUENCED_ASSEMBLY::getType)
|
||||
.build(),
|
||||
seqAssembly = register("sequenced_assembly", SequencedAssemblyCategory::new)
|
||||
.addTypedRecipes(AllRecipeTypes.SEQUENCED_ASSEMBLY)
|
||||
.build(),
|
||||
|
||||
autoShapeless = register("automatic_shapeless", MixingCategory::autoShapeless)
|
||||
.recipes(r -> r.getSerializer() == RecipeSerializer.SHAPELESS_RECIPE && r.getIngredients()
|
||||
.size() > 1 && !MechanicalPressTileEntity.canCompress(r) && !AllRecipeTypes.isManualRecipe(r),
|
||||
autoShapeless = register("automatic_shapeless", MixingCategory::autoShapeless)
|
||||
.addAllRecipesIf(r -> r instanceof CraftingRecipe && !(r instanceof IShapedRecipe<?>)
|
||||
&& r.getIngredients()
|
||||
.size() > 1
|
||||
&& !MechanicalPressTileEntity.canCompress(r) && !AllRecipeTypes.shouldIgnoreInAutomation(r),
|
||||
BasinRecipe::convertShapeless)
|
||||
.catalyst(AllBlocks.MECHANICAL_MIXER::get)
|
||||
.catalyst(AllBlocks.BASIN::get)
|
||||
.enableWhen(c -> c.allowShapelessInMixer)
|
||||
.build(),
|
||||
.catalyst(AllBlocks.MECHANICAL_MIXER::get)
|
||||
.catalyst(AllBlocks.BASIN::get)
|
||||
.enableWhen(c -> c.allowShapelessInMixer)
|
||||
.build(),
|
||||
|
||||
brewing = register("automatic_brewing", MixingCategory::autoBrewing)
|
||||
.recipeList(PotionMixingRecipeManager::getAllBrewingRecipes)
|
||||
.catalyst(AllBlocks.MECHANICAL_MIXER::get)
|
||||
.catalyst(AllBlocks.BASIN::get)
|
||||
.build(),
|
||||
brewing =
|
||||
register("automatic_brewing", MixingCategory::autoBrewing).addRecipes(() -> PotionMixingRecipes.ALL)
|
||||
.catalyst(AllBlocks.MECHANICAL_MIXER::get)
|
||||
.catalyst(AllBlocks.BASIN::get)
|
||||
.build(),
|
||||
|
||||
sawing = register("sawing", SawingCategory::new).recipes(AllRecipeTypes.CUTTING)
|
||||
.catalyst(AllBlocks.MECHANICAL_SAW::get)
|
||||
.build(),
|
||||
sawing = register("sawing", SawingCategory::new).addTypedRecipes(AllRecipeTypes.CUTTING)
|
||||
.catalyst(AllBlocks.MECHANICAL_SAW::get)
|
||||
.build(),
|
||||
|
||||
blockCutting = register("block_cutting", () -> new BlockCuttingCategory(Items.STONE_BRICK_STAIRS))
|
||||
.recipeList(() -> CondensedBlockCuttingRecipe.condenseRecipes(findRecipes(
|
||||
recipe -> recipe.getType() == RecipeType.STONECUTTING && !AllRecipeTypes.isManualRecipe(recipe))))
|
||||
.catalyst(AllBlocks.MECHANICAL_SAW::get)
|
||||
.enableWhen(c -> c.allowStonecuttingOnSaw)
|
||||
.build(),
|
||||
blockCutting =
|
||||
register("block_cutting", () -> new BlockCuttingCategory(Items.STONE_BRICK_STAIRS))
|
||||
.addRecipes(() -> CondensedBlockCuttingRecipe.condenseRecipes(getTypedRecipesExcluding(
|
||||
RecipeType.STONECUTTING, recipe -> AllRecipeTypes.shouldIgnoreInAutomation(recipe))))
|
||||
.catalyst(AllBlocks.MECHANICAL_SAW::get)
|
||||
.enableWhen(c -> c.allowStonecuttingOnSaw)
|
||||
.build(),
|
||||
|
||||
woodCutting = register("wood_cutting", () -> new BlockCuttingCategory(Items.OAK_STAIRS))
|
||||
.recipeList(() -> CondensedBlockCuttingRecipe
|
||||
.condenseRecipes(findRecipes(recipe -> recipe.getType() == SawTileEntity.woodcuttingRecipeType.get()
|
||||
&& !AllRecipeTypes.isManualRecipe(recipe))))
|
||||
.catalyst(AllBlocks.MECHANICAL_SAW::get)
|
||||
.enableWhenBool(c -> c.allowWoodcuttingOnSaw.get() && ModList.get()
|
||||
woodCutting = register("wood_cutting", () -> new BlockCuttingCategory(Items.OAK_STAIRS))
|
||||
.addRecipes(() -> CondensedBlockCuttingRecipe
|
||||
.condenseRecipes(getTypedRecipesExcluding(SawTileEntity.woodcuttingRecipeType.get(),
|
||||
recipe -> AllRecipeTypes.shouldIgnoreInAutomation(recipe))))
|
||||
.catalyst(AllBlocks.MECHANICAL_SAW::get)
|
||||
.enableWhenBool(c -> c.allowWoodcuttingOnSaw.get() && ModList.get()
|
||||
.isLoaded("druidcraft"))
|
||||
.build(),
|
||||
.build(),
|
||||
|
||||
packing = register("packing", PackingCategory::standard).recipes(AllRecipeTypes.COMPACTING)
|
||||
.catalyst(AllBlocks.MECHANICAL_PRESS::get)
|
||||
.catalyst(AllBlocks.BASIN::get)
|
||||
.build(),
|
||||
packing = register("packing", PackingCategory::standard).addTypedRecipes(AllRecipeTypes.COMPACTING)
|
||||
.catalyst(AllBlocks.MECHANICAL_PRESS::get)
|
||||
.catalyst(AllBlocks.BASIN::get)
|
||||
.build(),
|
||||
|
||||
autoSquare = register("automatic_packing", PackingCategory::autoSquare)
|
||||
.recipes(
|
||||
autoSquare = register("automatic_packing", PackingCategory::autoSquare)
|
||||
.addAllRecipesIf(
|
||||
r -> (r instanceof CraftingRecipe) && !(r instanceof MechanicalCraftingRecipe)
|
||||
&& MechanicalPressTileEntity.canCompress(r) && !AllRecipeTypes.isManualRecipe(r),
|
||||
&& MechanicalPressTileEntity.canCompress(r) && !AllRecipeTypes.shouldIgnoreInAutomation(r),
|
||||
BasinRecipe::convertShapeless)
|
||||
.catalyst(AllBlocks.MECHANICAL_PRESS::get)
|
||||
.catalyst(AllBlocks.BASIN::get)
|
||||
.enableWhen(c -> c.allowShapedSquareInPress)
|
||||
.build(),
|
||||
.catalyst(AllBlocks.MECHANICAL_PRESS::get)
|
||||
.catalyst(AllBlocks.BASIN::get)
|
||||
.enableWhen(c -> c.allowShapedSquareInPress)
|
||||
.build(),
|
||||
|
||||
polishing = register("sandpaper_polishing", PolishingCategory::new).recipes(AllRecipeTypes.SANDPAPER_POLISHING)
|
||||
.catalyst(AllItems.SAND_PAPER::get)
|
||||
.catalyst(AllItems.RED_SAND_PAPER::get)
|
||||
.build(),
|
||||
polishing = register("sandpaper_polishing", PolishingCategory::new)
|
||||
.addTypedRecipes(AllRecipeTypes.SANDPAPER_POLISHING)
|
||||
.catalyst(AllItems.SAND_PAPER::get)
|
||||
.catalyst(AllItems.RED_SAND_PAPER::get)
|
||||
.build(),
|
||||
|
||||
deploying = register("deploying", DeployingCategory::new)
|
||||
.recipeList(() -> DeployerApplicationRecipe
|
||||
.convert(findRecipesByType(AllRecipeTypes.SANDPAPER_POLISHING.getType())))
|
||||
.recipes(AllRecipeTypes.DEPLOYING)
|
||||
.catalyst(AllBlocks.DEPLOYER::get)
|
||||
.catalyst(AllBlocks.DEPOT::get)
|
||||
.catalyst(AllItems.BELT_CONNECTOR::get)
|
||||
.build(),
|
||||
deploying = register("deploying", DeployingCategory::new).addTypedRecipes(AllRecipeTypes.DEPLOYING)
|
||||
.addTypedRecipes(AllRecipeTypes.SANDPAPER_POLISHING::getType, DeployerApplicationRecipe::convert)
|
||||
.catalyst(AllBlocks.DEPLOYER::get)
|
||||
.catalyst(AllBlocks.DEPOT::get)
|
||||
.catalyst(AllItems.BELT_CONNECTOR::get)
|
||||
.build(),
|
||||
|
||||
mysteryConversion = register("mystery_conversion", MysteriousItemConversionCategory::new)
|
||||
.recipeList(MysteriousItemConversionCategory::getRecipes)
|
||||
.build(),
|
||||
mysteryConversion = register("mystery_conversion", MysteriousItemConversionCategory::new)
|
||||
.addRecipes(() -> MysteriousItemConversionCategory.RECIPES)
|
||||
.build(),
|
||||
|
||||
spoutFilling = register("spout_filling", SpoutCategory::new).recipes(AllRecipeTypes.FILLING)
|
||||
.recipeList(() -> SpoutCategory.getRecipes(ingredientManager))
|
||||
.catalyst(AllBlocks.SPOUT::get)
|
||||
.build(),
|
||||
spoutFilling = register("spout_filling", SpoutCategory::new).addTypedRecipes(AllRecipeTypes.FILLING)
|
||||
.addRecipeListConsumer(recipes -> SpoutCategory.consumeRecipes(recipes::add, ingredientManager))
|
||||
.catalyst(AllBlocks.SPOUT::get)
|
||||
.build(),
|
||||
|
||||
draining = register("draining", ItemDrainCategory::new)
|
||||
.recipeList(() -> ItemDrainCategory.getRecipes(ingredientManager))
|
||||
.recipes(AllRecipeTypes.EMPTYING)
|
||||
.catalyst(AllBlocks.ITEM_DRAIN::get)
|
||||
.build(),
|
||||
draining = register("draining", ItemDrainCategory::new)
|
||||
.addRecipeListConsumer(recipes -> ItemDrainCategory.consumeRecipes(recipes::add, ingredientManager))
|
||||
.addTypedRecipes(AllRecipeTypes.EMPTYING)
|
||||
.catalyst(AllBlocks.ITEM_DRAIN::get)
|
||||
.build(),
|
||||
|
||||
autoShaped = register("automatic_shaped", MechanicalCraftingCategory::new)
|
||||
.recipes(r -> r.getSerializer() == RecipeSerializer.SHAPELESS_RECIPE && r.getIngredients()
|
||||
.size() == 1)
|
||||
.recipes(r -> (r.getType() == RecipeType.CRAFTING
|
||||
&& r.getType() != AllRecipeTypes.MECHANICAL_CRAFTING.getType()) && (r instanceof ShapedRecipe)
|
||||
&& !AllRecipeTypes.isManualRecipe(r))
|
||||
.catalyst(AllBlocks.MECHANICAL_CRAFTER::get)
|
||||
.enableWhen(c -> c.allowRegularCraftingInCrafter)
|
||||
.build(),
|
||||
autoShaped = register("automatic_shaped", MechanicalCraftingCategory::new)
|
||||
.addAllRecipesIf(r -> r instanceof CraftingRecipe && !(r instanceof IShapedRecipe<?>)
|
||||
&& r.getIngredients()
|
||||
.size() == 1
|
||||
&& !AllRecipeTypes.shouldIgnoreInAutomation(r))
|
||||
.addTypedRecipesIf(() -> RecipeType.CRAFTING,
|
||||
recipe -> recipe instanceof IShapedRecipe<?> && !AllRecipeTypes.shouldIgnoreInAutomation(recipe))
|
||||
.catalyst(AllBlocks.MECHANICAL_CRAFTER::get)
|
||||
.enableWhen(c -> c.allowRegularCraftingInCrafter)
|
||||
.build(),
|
||||
|
||||
mechanicalCrafting =
|
||||
register("mechanical_crafting", MechanicalCraftingCategory::new).recipes(AllRecipeTypes.MECHANICAL_CRAFTING)
|
||||
.catalyst(AllBlocks.MECHANICAL_CRAFTER::get)
|
||||
.build();
|
||||
mechanicalCrafting = register("mechanical_crafting", MechanicalCraftingCategory::new)
|
||||
.addTypedRecipes(AllRecipeTypes.MECHANICAL_CRAFTING)
|
||||
.catalyst(AllBlocks.MECHANICAL_CRAFTER::get)
|
||||
.build();
|
||||
|
||||
private <T extends Recipe<?>> CategoryBuilder<T> register(String name,
|
||||
Supplier<CreateRecipeCategory<T>> supplier) {
|
||||
}
|
||||
|
||||
private <T extends Recipe<?>> CategoryBuilder<T> register(String name, Supplier<CreateRecipeCategory<T>> supplier) {
|
||||
return new CategoryBuilder<T>(name, supplier);
|
||||
}
|
||||
|
||||
|
@ -205,7 +247,8 @@ public class CreateJEI implements IModPlugin {
|
|||
|
||||
@Override
|
||||
public void registerCategories(IRecipeCategoryRegistration registration) {
|
||||
allCategories.forEach(registration::addRecipeCategories);
|
||||
loadCategories();
|
||||
registration.addRecipeCategories(allCategories.toArray(IRecipeCategory[]::new));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -222,7 +265,7 @@ public class CreateJEI implements IModPlugin {
|
|||
allCategories.forEach(c -> c.recipes.forEach(s -> registration.addRecipes(s.get(), c.getUid())));
|
||||
|
||||
registration.addRecipes(ToolboxColoringRecipeMaker.createRecipes()
|
||||
.collect(Collectors.toList()), VanillaRecipeCategoryUid.CRAFTING);
|
||||
.collect(Collectors.toList()), VanillaRecipeCategoryUid.CRAFTING);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -230,7 +273,7 @@ public class CreateJEI implements IModPlugin {
|
|||
allCategories.forEach(c -> c.recipeCatalysts.forEach(s -> registration.addRecipeCatalyst(s.get(), c.getUid())));
|
||||
}
|
||||
|
||||
@SuppressWarnings({"unchecked", "rawtypes"})
|
||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||
@Override
|
||||
public void registerGuiHandlers(IGuiHandlerRegistration registration) {
|
||||
registration.addGenericGuiContainerHandler(AbstractSimiContainerScreen.class, new SlotMover());
|
||||
|
@ -251,63 +294,87 @@ public class CreateJEI implements IModPlugin {
|
|||
pred = Predicates.alwaysTrue();
|
||||
}
|
||||
|
||||
public CategoryBuilder<T> recipes(IRecipeTypeInfo recipeTypeEntry) {
|
||||
return recipes(recipeTypeEntry::getType);
|
||||
}
|
||||
|
||||
public CategoryBuilder<T> recipes(Supplier<RecipeType<? extends T>> recipeType) {
|
||||
return recipes(r -> r.getType() == recipeType.get());
|
||||
}
|
||||
|
||||
public CategoryBuilder<T> recipes(ResourceLocation serializer) {
|
||||
return recipes(r -> r.getSerializer()
|
||||
.getRegistryName()
|
||||
.equals(serializer));
|
||||
}
|
||||
|
||||
public CategoryBuilder<T> recipes(Predicate<Recipe<?>> pred) {
|
||||
return recipeList(() -> findRecipes(pred));
|
||||
}
|
||||
|
||||
public CategoryBuilder<T> recipes(Predicate<Recipe<?>> pred, Function<Recipe<?>, T> converter) {
|
||||
return recipeList(() -> findRecipes(pred), converter);
|
||||
}
|
||||
|
||||
public CategoryBuilder<T> recipeList(Supplier<List<? extends Recipe<?>>> list) {
|
||||
return recipeList(list, null);
|
||||
}
|
||||
|
||||
public CategoryBuilder<T> recipeList(Supplier<List<? extends Recipe<?>>> list,
|
||||
Function<Recipe<?>, T> converter) {
|
||||
recipeListConsumers.add(recipes -> {
|
||||
List<? extends Recipe<?>> toAdd = list.get();
|
||||
if (converter != null)
|
||||
toAdd = toAdd.stream()
|
||||
.map(converter)
|
||||
.collect(Collectors.toList());
|
||||
recipes.addAll(toAdd);
|
||||
});
|
||||
public CategoryBuilder<T> addRecipeListConsumer(Consumer<List<Recipe<?>>> consumer) {
|
||||
recipeListConsumers.add(consumer);
|
||||
return this;
|
||||
}
|
||||
|
||||
public CategoryBuilder<T> recipesExcluding(Supplier<RecipeType<? extends T>> recipeType,
|
||||
Supplier<RecipeType<? extends T>> excluded) {
|
||||
recipeListConsumers.add(recipes -> {
|
||||
recipes.addAll(findRecipesByTypeExcluding(recipeType.get(), excluded.get()));
|
||||
public CategoryBuilder<T> addRecipes(Supplier<Collection<? extends Recipe<?>>> collection) {
|
||||
return addRecipeListConsumer(recipes -> recipes.addAll(collection.get()));
|
||||
}
|
||||
|
||||
public CategoryBuilder<T> addAllRecipesIf(Predicate<Recipe<?>> pred) {
|
||||
return addRecipeListConsumer(recipes -> consumeAllRecipes(recipe -> {
|
||||
if (pred.test(recipe)) {
|
||||
recipes.add(recipe);
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
public CategoryBuilder<T> addAllRecipesIf(Predicate<Recipe<?>> pred, Function<Recipe<?>, T> converter) {
|
||||
return addRecipeListConsumer(recipes -> consumeAllRecipes(recipe -> {
|
||||
if (pred.test(recipe)) {
|
||||
recipes.add(converter.apply(recipe));
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
public CategoryBuilder<T> addTypedRecipes(IRecipeTypeInfo recipeTypeEntry) {
|
||||
return addTypedRecipes(recipeTypeEntry::getType);
|
||||
}
|
||||
|
||||
public CategoryBuilder<T> addTypedRecipes(Supplier<RecipeType<? extends T>> recipeType) {
|
||||
return addRecipeListConsumer(recipes -> consumeTypedRecipes(recipes::add, recipeType.get()));
|
||||
}
|
||||
|
||||
public CategoryBuilder<T> addTypedRecipes(Supplier<RecipeType<? extends T>> recipeType,
|
||||
Function<Recipe<?>, T> converter) {
|
||||
return addRecipeListConsumer(recipes -> consumeTypedRecipes(recipe -> {
|
||||
recipes.add(converter.apply(recipe));
|
||||
}, recipeType.get()));
|
||||
}
|
||||
|
||||
public CategoryBuilder<T> addTypedRecipesIf(Supplier<RecipeType<? extends T>> recipeType,
|
||||
Predicate<Recipe<?>> pred) {
|
||||
return addRecipeListConsumer(recipes -> consumeTypedRecipes(recipe -> {
|
||||
if (pred.test(recipe)) {
|
||||
recipes.add(recipe);
|
||||
}
|
||||
}, recipeType.get()));
|
||||
}
|
||||
|
||||
public CategoryBuilder<T> addTypedRecipesExcluding(Supplier<RecipeType<? extends T>> recipeType,
|
||||
Supplier<RecipeType<? extends T>> excluded) {
|
||||
return addRecipeListConsumer(recipes -> {
|
||||
List<Recipe<?>> excludedRecipes = getTypedRecipes(excluded.get());
|
||||
consumeTypedRecipes(recipe -> {
|
||||
for (Recipe<?> excludedRecipe : excludedRecipes) {
|
||||
if (doInputsMatch(recipe, excludedRecipe)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
recipes.add(recipe);
|
||||
}, recipeType.get());
|
||||
});
|
||||
return this;
|
||||
}
|
||||
|
||||
public CategoryBuilder<T> removeRecipes(Supplier<RecipeType<? extends T>> recipeType) {
|
||||
recipeListConsumers.add(recipes -> {
|
||||
removeRecipesByType(recipes, recipeType.get());
|
||||
return addRecipeListConsumer(recipes -> {
|
||||
List<Recipe<?>> excludedRecipes = getTypedRecipes(recipeType.get());
|
||||
recipes.removeIf(recipe -> {
|
||||
for (Recipe<?> excludedRecipe : excludedRecipes) {
|
||||
if (doInputsMatch(recipe, excludedRecipe)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
});
|
||||
});
|
||||
return this;
|
||||
}
|
||||
|
||||
public CategoryBuilder<T> catalyst(Supplier<ItemLike> supplier) {
|
||||
return catalystStack(() -> new ItemStack(supplier.get()
|
||||
.asItem()));
|
||||
.asItem()));
|
||||
}
|
||||
|
||||
public CategoryBuilder<T> catalystStack(Supplier<ItemStack> supplier) {
|
||||
|
@ -317,7 +384,7 @@ public class CreateJEI implements IModPlugin {
|
|||
|
||||
public CategoryBuilder<T> enableWhen(Function<CRecipes, ConfigBool> configValue) {
|
||||
pred = c -> configValue.apply(c)
|
||||
.get();
|
||||
.get();
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -340,52 +407,52 @@ public class CreateJEI implements IModPlugin {
|
|||
|
||||
}
|
||||
|
||||
public static List<Recipe<?>> findRecipes(Predicate<Recipe<?>> predicate) {
|
||||
return Minecraft.getInstance()
|
||||
public static void consumeAllRecipes(Consumer<Recipe<?>> consumer) {
|
||||
Minecraft.getInstance()
|
||||
.getConnection()
|
||||
.getRecipeManager()
|
||||
.getRecipes()
|
||||
.stream()
|
||||
.filter(predicate)
|
||||
.collect(Collectors.toList());
|
||||
.forEach(consumer);
|
||||
}
|
||||
|
||||
public static List<Recipe<?>> findRecipesByType(RecipeType<?> type) {
|
||||
return findRecipes(recipe -> recipe.getType() == type);
|
||||
public static void consumeTypedRecipes(Consumer<Recipe<?>> consumer, RecipeType<?> type) {
|
||||
Map<ResourceLocation, Recipe<?>> map = Minecraft.getInstance()
|
||||
.getConnection()
|
||||
.getRecipeManager().recipes.get(type);
|
||||
if (map != null) {
|
||||
map.values()
|
||||
.forEach(consumer);
|
||||
}
|
||||
}
|
||||
|
||||
public static List<Recipe<?>> findRecipesByTypeExcluding(RecipeType<?> type, RecipeType<?> excludingType) {
|
||||
List<Recipe<?>> byType = findRecipesByType(type);
|
||||
removeRecipesByType(byType, excludingType);
|
||||
return byType;
|
||||
public static List<Recipe<?>> getTypedRecipes(RecipeType<?> type) {
|
||||
List<Recipe<?>> recipes = new ArrayList<>();
|
||||
consumeTypedRecipes(recipes::add, type);
|
||||
return recipes;
|
||||
}
|
||||
|
||||
public static List<Recipe<?>> findRecipesByTypeExcluding(RecipeType<?> type, RecipeType<?>... excludingTypes) {
|
||||
List<Recipe<?>> byType = findRecipesByType(type);
|
||||
for (RecipeType<?> excludingType : excludingTypes)
|
||||
removeRecipesByType(byType, excludingType);
|
||||
return byType;
|
||||
}
|
||||
|
||||
public static void removeRecipesByType(List<Recipe<?>> recipes, RecipeType<?> type) {
|
||||
List<Recipe<?>> byType = findRecipesByType(type);
|
||||
recipes.removeIf(recipe -> {
|
||||
for (Recipe<?> r : byType)
|
||||
if (doInputsMatch(recipe, r))
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
public static List<Recipe<?>> getTypedRecipesExcluding(RecipeType<?> type, Predicate<Recipe<?>> exclusionPred) {
|
||||
List<Recipe<?>> recipes = getTypedRecipes(type);
|
||||
recipes.removeIf(exclusionPred);
|
||||
return recipes;
|
||||
}
|
||||
|
||||
public static boolean doInputsMatch(Recipe<?> recipe1, Recipe<?> recipe2) {
|
||||
if (recipe1.getIngredients()
|
||||
.isEmpty()
|
||||
|| recipe2.getIngredients()
|
||||
.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
ItemStack[] matchingStacks = recipe1.getIngredients()
|
||||
.get(0)
|
||||
.getItems();
|
||||
if (matchingStacks.length == 0)
|
||||
return true;
|
||||
.get(0)
|
||||
.getItems();
|
||||
if (matchingStacks.length == 0) {
|
||||
return false;
|
||||
}
|
||||
if (recipe2.getIngredients()
|
||||
.get(0)
|
||||
.test(matchingStacks[0]))
|
||||
.get(0)
|
||||
.test(matchingStacks[0]))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@ import com.simibubi.create.Create;
|
|||
|
||||
import net.minecraft.core.NonNullList;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.tags.Tag;
|
||||
import net.minecraft.tags.TagKey;
|
||||
import net.minecraft.world.item.DyeColor;
|
||||
import net.minecraft.world.item.DyeItem;
|
||||
import net.minecraft.world.item.Item;
|
||||
|
@ -32,7 +32,7 @@ public final class ToolboxColoringRecipeMaker {
|
|||
.map(color -> {
|
||||
DyeItem dye = DyeItem.byColor(color);
|
||||
ItemStack dyeStack = new ItemStack(dye);
|
||||
Tag<Item> colorTag = color.getTag();
|
||||
TagKey<Item> colorTag = color.getTag();
|
||||
Ingredient.Value dyeList = new Ingredient.ItemValue(dyeStack);
|
||||
Ingredient.Value colorList = new Ingredient.TagValue(colorTag);
|
||||
Stream<Ingredient.Value> colorIngredientStream = Stream.of(dyeList, colorList);
|
||||
|
|
|
@ -86,7 +86,7 @@ public class BlockCuttingCategory extends CreateRecipeCategory<CondensedBlockCut
|
|||
public List<ItemStack> getOutputs() {
|
||||
return outputs;
|
||||
}
|
||||
|
||||
|
||||
public List<List<ItemStack>> getCondensedOutputs() {
|
||||
List<List<ItemStack>> result = new ArrayList<>();
|
||||
int index = 0;
|
||||
|
@ -104,6 +104,11 @@ public class BlockCuttingCategory extends CreateRecipeCategory<CondensedBlockCut
|
|||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSpecial() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public static List<CondensedBlockCuttingRecipe> condenseRecipes(List<Recipe<?>> stoneCuttingRecipes) {
|
||||
List<CondensedBlockCuttingRecipe> condensed = new ArrayList<>();
|
||||
Recipes: for (Recipe<?> recipe : stoneCuttingRecipes) {
|
||||
|
@ -120,11 +125,6 @@ public class BlockCuttingCategory extends CreateRecipeCategory<CondensedBlockCut
|
|||
}
|
||||
return condensed;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSpecial() {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
package com.simibubi.create.compat.jei.category;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
|
@ -41,53 +41,47 @@ public class ItemDrainCategory extends CreateRecipeCategory<EmptyingRecipe> {
|
|||
drain = new AnimatedItemDrain();
|
||||
}
|
||||
|
||||
public static List<EmptyingRecipe> getRecipes(IIngredientManager ingredientManager) {
|
||||
List<EmptyingRecipe> recipes = new ArrayList<>();
|
||||
public static void consumeRecipes(Consumer<EmptyingRecipe> consumer, IIngredientManager ingredientManager) {
|
||||
for (ItemStack stack : ingredientManager.getAllIngredients(VanillaTypes.ITEM)) {
|
||||
if (stack.getItem() instanceof PotionItem) {
|
||||
FluidStack fluidFromPotionItem = PotionFluidHandler.getFluidFromPotionItem(stack);
|
||||
Ingredient potion = Ingredient.of(stack);
|
||||
consumer.accept(new ProcessingRecipeBuilder<>(EmptyingRecipe::new, Create.asResource("potions"))
|
||||
.withItemIngredients(potion)
|
||||
.withFluidOutputs(fluidFromPotionItem)
|
||||
.withSingleItemOutput(new ItemStack(Items.GLASS_BOTTLE))
|
||||
.build());
|
||||
continue;
|
||||
}
|
||||
|
||||
ingredientManager.getAllIngredients(VanillaTypes.ITEM)
|
||||
.stream()
|
||||
.forEach(stack -> {
|
||||
if (stack.getItem() instanceof PotionItem) {
|
||||
FluidStack fluidFromPotionItem = PotionFluidHandler.getFluidFromPotionItem(stack);
|
||||
Ingredient potion = Ingredient.of(stack);
|
||||
recipes.add(new ProcessingRecipeBuilder<>(EmptyingRecipe::new, Create.asResource("potions"))
|
||||
.withItemIngredients(potion)
|
||||
.withFluidOutputs(fluidFromPotionItem)
|
||||
.withSingleItemOutput(new ItemStack(Items.GLASS_BOTTLE))
|
||||
LazyOptional<IFluidHandlerItem> capability =
|
||||
stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY);
|
||||
if (!capability.isPresent())
|
||||
continue;
|
||||
|
||||
ItemStack copy = stack.copy();
|
||||
capability = copy.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY);
|
||||
IFluidHandlerItem handler = capability.orElse(null);
|
||||
FluidStack extracted = handler.drain(1000, FluidAction.EXECUTE);
|
||||
ItemStack result = handler.getContainer();
|
||||
if (extracted.isEmpty())
|
||||
continue;
|
||||
if (result.isEmpty())
|
||||
continue;
|
||||
|
||||
Ingredient ingredient = Ingredient.of(stack);
|
||||
ResourceLocation itemName = stack.getItem()
|
||||
.getRegistryName();
|
||||
ResourceLocation fluidName = extracted.getFluid()
|
||||
.getRegistryName();
|
||||
|
||||
consumer.accept(new ProcessingRecipeBuilder<>(EmptyingRecipe::new,
|
||||
Create.asResource("empty_" + itemName.getNamespace() + "_" + itemName.getPath() + "_of_"
|
||||
+ fluidName.getNamespace() + "_" + fluidName.getPath())).withItemIngredients(ingredient)
|
||||
.withFluidOutputs(extracted)
|
||||
.withSingleItemOutput(result)
|
||||
.build());
|
||||
return;
|
||||
}
|
||||
|
||||
LazyOptional<IFluidHandlerItem> capability =
|
||||
stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY);
|
||||
if (!capability.isPresent())
|
||||
return;
|
||||
|
||||
ItemStack copy = stack.copy();
|
||||
capability = copy.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY);
|
||||
IFluidHandlerItem handler = capability.orElse(null);
|
||||
FluidStack extracted = handler.drain(1000, FluidAction.EXECUTE);
|
||||
ItemStack result = handler.getContainer();
|
||||
if (extracted.isEmpty())
|
||||
return;
|
||||
if (result.isEmpty())
|
||||
return;
|
||||
|
||||
Ingredient ingredient = Ingredient.of(stack);
|
||||
ResourceLocation itemName = stack.getItem()
|
||||
.getRegistryName();
|
||||
ResourceLocation fluidName = extracted.getFluid()
|
||||
.getRegistryName();
|
||||
|
||||
recipes.add(new ProcessingRecipeBuilder<>(EmptyingRecipe::new,
|
||||
Create.asResource("empty_" + itemName.getNamespace() + "_" + itemName.getPath() + "_of_"
|
||||
+ fluidName.getNamespace() + "_" + fluidName.getPath())).withItemIngredients(ingredient)
|
||||
.withFluidOutputs(extracted)
|
||||
.withSingleItemOutput(result)
|
||||
.build());
|
||||
});
|
||||
|
||||
return recipes;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -27,7 +27,7 @@ import net.minecraft.world.item.ItemStack;
|
|||
import net.minecraft.world.item.TooltipFlag;
|
||||
import net.minecraft.world.item.crafting.CraftingRecipe;
|
||||
import net.minecraft.world.item.crafting.Ingredient;
|
||||
import net.minecraft.world.item.crafting.ShapedRecipe;
|
||||
import net.minecraftforge.common.crafting.IShapedRecipe;
|
||||
|
||||
public class MechanicalCraftingCategory extends CreateRecipeCategory<CraftingRecipe> {
|
||||
|
||||
|
@ -86,11 +86,11 @@ public class MechanicalCraftingCategory extends CreateRecipeCategory<CraftingRec
|
|||
}
|
||||
|
||||
private static int getWidth(CraftingRecipe recipe) {
|
||||
return recipe instanceof ShapedRecipe ? ((ShapedRecipe) recipe).getWidth() : 1;
|
||||
return recipe instanceof IShapedRecipe<?> ? ((IShapedRecipe<?>) recipe).getRecipeWidth() : 1;
|
||||
}
|
||||
|
||||
private static int getHeight(CraftingRecipe recipe) {
|
||||
return recipe instanceof ShapedRecipe ? ((ShapedRecipe) recipe).getHeight() : 1;
|
||||
return recipe instanceof IShapedRecipe<?> ? ((IShapedRecipe<?>) recipe).getRecipeHeight() : 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -155,6 +155,7 @@ public class MechanicalCraftingCategory extends CreateRecipeCategory<CraftingRec
|
|||
modelViewStack.pushPose();
|
||||
modelViewStack.mulPoseMatrix(matrixStack.last()
|
||||
.pose());
|
||||
RenderSystem.applyModelViewMatrix();
|
||||
RenderSystem.enableDepthTest();
|
||||
Minecraft minecraft = Minecraft.getInstance();
|
||||
Font font = getFontRenderer(minecraft, ingredient);
|
||||
|
@ -163,6 +164,7 @@ public class MechanicalCraftingCategory extends CreateRecipeCategory<CraftingRec
|
|||
itemRenderer.renderGuiItemDecorations(font, ingredient, xPosition, yPosition, null);
|
||||
RenderSystem.disableBlend();
|
||||
modelViewStack.popPose();
|
||||
RenderSystem.applyModelViewMatrix();
|
||||
}
|
||||
|
||||
matrixStack.popPose();
|
||||
|
|
|
@ -18,13 +18,13 @@ import mezz.jei.api.ingredients.IIngredients;
|
|||
|
||||
public class MysteriousItemConversionCategory extends CreateRecipeCategory<ConversionRecipe> {
|
||||
|
||||
public static List<ConversionRecipe> getRecipes() {
|
||||
List<ConversionRecipe> recipes = new ArrayList<>();
|
||||
recipes.add(ConversionRecipe.create(AllItems.EMPTY_BLAZE_BURNER.asStack(), AllBlocks.BLAZE_BURNER.asStack()));
|
||||
recipes.add(ConversionRecipe.create(AllItems.CHROMATIC_COMPOUND.asStack(), AllItems.SHADOW_STEEL.asStack()));
|
||||
recipes.add(ConversionRecipe.create(AllItems.CHROMATIC_COMPOUND.asStack(), AllItems.REFINED_RADIANCE.asStack()));
|
||||
recipes.add(ConversionRecipe.create(AllBlocks.PECULIAR_BELL.asStack(), AllBlocks.HAUNTED_BELL.asStack()));
|
||||
return recipes;
|
||||
public static final List<ConversionRecipe> RECIPES = new ArrayList<>();
|
||||
|
||||
static {
|
||||
RECIPES.add(ConversionRecipe.create(AllItems.EMPTY_BLAZE_BURNER.asStack(), AllBlocks.BLAZE_BURNER.asStack()));
|
||||
RECIPES.add(ConversionRecipe.create(AllBlocks.PECULIAR_BELL.asStack(), AllBlocks.HAUNTED_BELL.asStack()));
|
||||
RECIPES.add(ConversionRecipe.create(AllItems.CHROMATIC_COMPOUND.asStack(), AllItems.SHADOW_STEEL.asStack()));
|
||||
RECIPES.add(ConversionRecipe.create(AllItems.CHROMATIC_COMPOUND.asStack(), AllItems.REFINED_RADIANCE.asStack()));
|
||||
}
|
||||
|
||||
public MysteriousItemConversionCategory() {
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
package com.simibubi.create.compat.jei.category;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
@ -44,62 +45,55 @@ public class SpoutCategory extends CreateRecipeCategory<FillingRecipe> {
|
|||
spout = new AnimatedSpout();
|
||||
}
|
||||
|
||||
public static List<FillingRecipe> getRecipes(IIngredientManager ingredientManager) {
|
||||
List<FillingRecipe> recipes = new ArrayList<>();
|
||||
public static void consumeRecipes(Consumer<FillingRecipe> consumer, IIngredientManager ingredientManager) {
|
||||
Collection<FluidStack> fluidStacks = ingredientManager.getAllIngredients(VanillaTypes.FLUID);
|
||||
for (ItemStack stack : ingredientManager.getAllIngredients(VanillaTypes.ITEM)) {
|
||||
if (stack.getItem() instanceof PotionItem) {
|
||||
FluidStack fluidFromPotionItem = PotionFluidHandler.getFluidFromPotionItem(stack);
|
||||
Ingredient bottle = Ingredient.of(Items.GLASS_BOTTLE);
|
||||
consumer.accept(new ProcessingRecipeBuilder<>(FillingRecipe::new, Create.asResource("potions"))
|
||||
.withItemIngredients(bottle)
|
||||
.withFluidIngredients(FluidIngredient.fromFluidStack(fluidFromPotionItem))
|
||||
.withSingleItemOutput(stack)
|
||||
.build());
|
||||
continue;
|
||||
}
|
||||
|
||||
ingredientManager.getAllIngredients(VanillaTypes.ITEM)
|
||||
.stream()
|
||||
.forEach(stack -> {
|
||||
if (stack.getItem() instanceof PotionItem) {
|
||||
FluidStack fluidFromPotionItem = PotionFluidHandler.getFluidFromPotionItem(stack);
|
||||
Ingredient bottle = Ingredient.of(Items.GLASS_BOTTLE);
|
||||
recipes.add(new ProcessingRecipeBuilder<>(FillingRecipe::new, Create.asResource("potions"))
|
||||
.withItemIngredients(bottle)
|
||||
.withFluidIngredients(FluidIngredient.fromFluidStack(fluidFromPotionItem))
|
||||
.withSingleItemOutput(stack)
|
||||
.build());
|
||||
return;
|
||||
}
|
||||
LazyOptional<IFluidHandlerItem> capability =
|
||||
stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY);
|
||||
if (!capability.isPresent())
|
||||
continue;
|
||||
|
||||
LazyOptional<IFluidHandlerItem> capability =
|
||||
stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY);
|
||||
if (!capability.isPresent())
|
||||
return;
|
||||
for (FluidStack fluidStack : fluidStacks) {
|
||||
ItemStack copy = stack.copy();
|
||||
copy.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY)
|
||||
.ifPresent(fhi -> {
|
||||
if (!GenericItemFilling.isFluidHandlerValid(copy, fhi))
|
||||
return;
|
||||
FluidStack fluidCopy = fluidStack.copy();
|
||||
fluidCopy.setAmount(1000);
|
||||
fhi.fill(fluidCopy, FluidAction.EXECUTE);
|
||||
ItemStack container = fhi.getContainer();
|
||||
if (container.sameItem(copy))
|
||||
return;
|
||||
if (container.isEmpty())
|
||||
return;
|
||||
|
||||
ingredientManager.getAllIngredients(VanillaTypes.FLUID)
|
||||
.stream()
|
||||
.forEach(fluidStack -> {
|
||||
ItemStack copy = stack.copy();
|
||||
copy.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY)
|
||||
.ifPresent(fhi -> {
|
||||
if (!GenericItemFilling.isFluidHandlerValid(copy, fhi))
|
||||
return;
|
||||
FluidStack fluidCopy = fluidStack.copy();
|
||||
fluidCopy.setAmount(1000);
|
||||
fhi.fill(fluidCopy, FluidAction.EXECUTE);
|
||||
ItemStack container = fhi.getContainer();
|
||||
if (container.sameItem(copy))
|
||||
return;
|
||||
if (container.isEmpty())
|
||||
return;
|
||||
|
||||
Ingredient bucket = Ingredient.of(stack);
|
||||
ResourceLocation itemName = stack.getItem()
|
||||
.getRegistryName();
|
||||
ResourceLocation fluidName = fluidCopy.getFluid()
|
||||
.getRegistryName();
|
||||
recipes.add(new ProcessingRecipeBuilder<>(FillingRecipe::new,
|
||||
Create.asResource("fill_" + itemName.getNamespace() + "_" + itemName.getPath()
|
||||
+ "_with_" + fluidName.getNamespace() + "_" + fluidName.getPath()))
|
||||
.withItemIngredients(bucket)
|
||||
.withFluidIngredients(FluidIngredient.fromFluidStack(fluidCopy))
|
||||
.withSingleItemOutput(container)
|
||||
.build());
|
||||
});
|
||||
Ingredient bucket = Ingredient.of(stack);
|
||||
ResourceLocation itemName = stack.getItem()
|
||||
.getRegistryName();
|
||||
ResourceLocation fluidName = fluidCopy.getFluid()
|
||||
.getRegistryName();
|
||||
consumer.accept(new ProcessingRecipeBuilder<>(FillingRecipe::new,
|
||||
Create.asResource("fill_" + itemName.getNamespace() + "_" + itemName.getPath()
|
||||
+ "_with_" + fluidName.getNamespace() + "_" + fluidName.getPath()))
|
||||
.withItemIngredients(bucket)
|
||||
.withFluidIngredients(FluidIngredient.fromFluidStack(fluidCopy))
|
||||
.withSingleItemOutput(container)
|
||||
.build());
|
||||
});
|
||||
});
|
||||
|
||||
return recipes;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -534,7 +534,7 @@ public class KineticTileEntity extends SmartTileEntity
|
|||
.forEach(offset -> {
|
||||
if (axis.choose(offset.getX(), offset.getY(), offset.getZ()) != 0)
|
||||
return;
|
||||
if (offset.distSqr(0, 0, 0, false) != BlockPos.ZERO.distSqr(1, 1, 0, false))
|
||||
if (offset.distSqr(BlockPos.ZERO) != 2)
|
||||
return;
|
||||
neighbours.add(worldPosition.offset(offset));
|
||||
});
|
||||
|
|
|
@ -14,84 +14,84 @@ import net.minecraft.world.level.block.state.BlockState;
|
|||
|
||||
public abstract class KineticTileInstance<T extends KineticTileEntity> extends BlockEntityInstance<T> {
|
||||
|
||||
protected final Direction.Axis axis;
|
||||
protected final Direction.Axis axis;
|
||||
|
||||
public KineticTileInstance(MaterialManager modelManager, T tile) {
|
||||
super(modelManager, tile);
|
||||
public KineticTileInstance(MaterialManager modelManager, T tile) {
|
||||
super(modelManager, tile);
|
||||
|
||||
axis = ((IRotate) blockState.getBlock()).getRotationAxis(blockState);
|
||||
}
|
||||
axis = ((IRotate) blockState.getBlock()).getRotationAxis(blockState);
|
||||
}
|
||||
|
||||
protected final void updateRotation(RotatingData instance) {
|
||||
updateRotation(instance, getRotationAxis(), getTileSpeed());
|
||||
}
|
||||
protected final void updateRotation(RotatingData instance) {
|
||||
updateRotation(instance, getRotationAxis(), getTileSpeed());
|
||||
}
|
||||
|
||||
protected final void updateRotation(RotatingData instance, Direction.Axis axis) {
|
||||
updateRotation(instance, axis, getTileSpeed());
|
||||
}
|
||||
protected final void updateRotation(RotatingData instance, Direction.Axis axis) {
|
||||
updateRotation(instance, axis, getTileSpeed());
|
||||
}
|
||||
|
||||
protected final void updateRotation(RotatingData instance, float speed) {
|
||||
updateRotation(instance, getRotationAxis(), speed);
|
||||
}
|
||||
protected final void updateRotation(RotatingData instance, float speed) {
|
||||
updateRotation(instance, getRotationAxis(), speed);
|
||||
}
|
||||
|
||||
protected final void updateRotation(RotatingData instance, Direction.Axis axis, float speed) {
|
||||
instance.setRotationAxis(axis)
|
||||
.setRotationOffset(getRotationOffset(axis))
|
||||
.setRotationalSpeed(speed)
|
||||
.setColor(blockEntity);
|
||||
}
|
||||
protected final void updateRotation(RotatingData instance, Direction.Axis axis, float speed) {
|
||||
instance.setRotationAxis(axis)
|
||||
.setRotationOffset(getRotationOffset(axis))
|
||||
.setRotationalSpeed(speed)
|
||||
.setColor(blockEntity);
|
||||
}
|
||||
|
||||
protected final RotatingData setup(RotatingData key) {
|
||||
return setup(key, getRotationAxis(), getTileSpeed());
|
||||
}
|
||||
protected final RotatingData setup(RotatingData key) {
|
||||
return setup(key, getRotationAxis(), getTileSpeed());
|
||||
}
|
||||
|
||||
protected final RotatingData setup(RotatingData key, Direction.Axis axis) {
|
||||
return setup(key, axis, getTileSpeed());
|
||||
}
|
||||
protected final RotatingData setup(RotatingData key, Direction.Axis axis) {
|
||||
return setup(key, axis, getTileSpeed());
|
||||
}
|
||||
|
||||
protected final RotatingData setup(RotatingData key, float speed) {
|
||||
return setup(key, getRotationAxis(), speed);
|
||||
}
|
||||
protected final RotatingData setup(RotatingData key, float speed) {
|
||||
return setup(key, getRotationAxis(), speed);
|
||||
}
|
||||
|
||||
protected final RotatingData setup(RotatingData key, Direction.Axis axis, float speed) {
|
||||
key.setRotationAxis(axis)
|
||||
.setRotationalSpeed(speed)
|
||||
.setRotationOffset(getRotationOffset(axis))
|
||||
.setColor(blockEntity)
|
||||
.setPosition(getInstancePosition());
|
||||
protected final RotatingData setup(RotatingData key, Direction.Axis axis, float speed) {
|
||||
key.setRotationAxis(axis)
|
||||
.setRotationalSpeed(speed)
|
||||
.setRotationOffset(getRotationOffset(axis))
|
||||
.setColor(blockEntity)
|
||||
.setPosition(getInstancePosition());
|
||||
|
||||
return key;
|
||||
}
|
||||
return key;
|
||||
}
|
||||
|
||||
protected float getRotationOffset(final Direction.Axis axis) {
|
||||
float offset = ICogWheel.isLargeCog(blockState) ? 11.25f : 0;
|
||||
double d = (((axis == Direction.Axis.X) ? 0 : pos.getX()) + ((axis == Direction.Axis.Y) ? 0 : pos.getY())
|
||||
+ ((axis == Direction.Axis.Z) ? 0 : pos.getZ())) % 2;
|
||||
if (d == 0) {
|
||||
offset = 22.5f;
|
||||
}
|
||||
return offset + blockEntity.getRotationAngleOffset(axis);
|
||||
}
|
||||
protected float getRotationOffset(final Direction.Axis axis) {
|
||||
float offset = ICogWheel.isLargeCog(blockState) ? 11.25f : 0;
|
||||
double d = (((axis == Direction.Axis.X) ? 0 : pos.getX()) + ((axis == Direction.Axis.Y) ? 0 : pos.getY())
|
||||
+ ((axis == Direction.Axis.Z) ? 0 : pos.getZ())) % 2;
|
||||
if (d == 0) {
|
||||
offset = 22.5f;
|
||||
}
|
||||
return offset;
|
||||
}
|
||||
|
||||
protected Direction.Axis getRotationAxis() {
|
||||
return axis;
|
||||
}
|
||||
protected Direction.Axis getRotationAxis() {
|
||||
return axis;
|
||||
}
|
||||
|
||||
protected float getTileSpeed() {
|
||||
return blockEntity.getSpeed();
|
||||
}
|
||||
protected float getTileSpeed() {
|
||||
return blockEntity.getSpeed();
|
||||
}
|
||||
|
||||
protected BlockState shaft() {
|
||||
return shaft(getRotationAxis());
|
||||
}
|
||||
protected BlockState shaft() {
|
||||
return shaft(getRotationAxis());
|
||||
}
|
||||
|
||||
protected Material<RotatingData> getRotatingMaterial() {
|
||||
protected Material<RotatingData> getRotatingMaterial() {
|
||||
return materialManager.defaultSolid()
|
||||
.material(AllMaterialSpecs.ROTATING);
|
||||
}
|
||||
|
||||
public static BlockState shaft(Direction.Axis axis) {
|
||||
return AllBlocks.SHAFT.getDefaultState()
|
||||
.setValue(ShaftBlock.AXIS, axis);
|
||||
}
|
||||
public static BlockState shaft(Direction.Axis axis) {
|
||||
return AllBlocks.SHAFT.getDefaultState()
|
||||
.setValue(ShaftBlock.AXIS, axis);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,35 +10,35 @@ public class SingleRotatingInstance extends KineticTileInstance<KineticTileEntit
|
|||
|
||||
protected RotatingData rotatingModel;
|
||||
|
||||
public SingleRotatingInstance(MaterialManager modelManager, KineticTileEntity tile) {
|
||||
public SingleRotatingInstance(MaterialManager modelManager, KineticTileEntity tile) {
|
||||
super(modelManager, tile);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
rotatingModel = setup(getModel().createInstance());
|
||||
}
|
||||
@Override
|
||||
public void init() {
|
||||
rotatingModel = setup(getModel().createInstance());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
updateRotation(rotatingModel);
|
||||
}
|
||||
@Override
|
||||
public void update() {
|
||||
updateRotation(rotatingModel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateLight() {
|
||||
relight(pos, rotatingModel);
|
||||
}
|
||||
@Override
|
||||
public void updateLight() {
|
||||
relight(pos, rotatingModel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove() {
|
||||
rotatingModel.delete();
|
||||
}
|
||||
@Override
|
||||
public void remove() {
|
||||
rotatingModel.delete();
|
||||
}
|
||||
|
||||
protected BlockState getRenderedBlockState() {
|
||||
return blockState;
|
||||
}
|
||||
protected BlockState getRenderedBlockState() {
|
||||
return blockState;
|
||||
}
|
||||
|
||||
protected Instancer<RotatingData> getModel() {
|
||||
return getRotatingMaterial().getModel(getRenderedBlockState());
|
||||
}
|
||||
protected Instancer<RotatingData> getModel() {
|
||||
return getRotatingMaterial().getModel(getRenderedBlockState());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ import net.minecraft.world.level.Level;
|
|||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
public class BellMovementBehaviour extends MovementBehaviour {
|
||||
public class BellMovementBehaviour implements MovementBehaviour {
|
||||
|
||||
@Override
|
||||
public boolean renderAsNormalTileEntity() {
|
||||
|
|
|
@ -21,7 +21,7 @@ import net.minecraft.world.level.block.state.BlockState;
|
|||
import net.minecraft.world.phys.AABB;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
public class BlockBreakingMovementBehaviour extends MovementBehaviour {
|
||||
public class BlockBreakingMovementBehaviour implements MovementBehaviour {
|
||||
|
||||
@Override
|
||||
public void startMoving(MovementContext context) {
|
||||
|
|
|
@ -8,7 +8,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.Mov
|
|||
import net.minecraft.core.particles.ParticleTypes;
|
||||
import net.minecraft.world.level.block.CampfireBlock;
|
||||
|
||||
public class CampfireMovementBehaviour extends MovementBehaviour {
|
||||
public class CampfireMovementBehaviour implements MovementBehaviour {
|
||||
@Override
|
||||
public boolean renderAsNormalTileEntity() {
|
||||
return true;
|
||||
|
|
|
@ -35,7 +35,7 @@ import net.minecraft.world.level.block.state.properties.Property;
|
|||
import net.minecraft.world.phys.Vec3;
|
||||
import net.minecraftforge.common.IPlantable;
|
||||
|
||||
public class HarvesterMovementBehaviour extends MovementBehaviour {
|
||||
public class HarvesterMovementBehaviour implements MovementBehaviour {
|
||||
|
||||
@Override
|
||||
public boolean isActive(MovementContext context) {
|
||||
|
|
|
@ -27,7 +27,7 @@ import net.minecraft.world.phys.Vec3;
|
|||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
|
||||
public class PortableStorageInterfaceMovement extends MovementBehaviour {
|
||||
public class PortableStorageInterfaceMovement implements MovementBehaviour {
|
||||
|
||||
static final String _workingPos_ = "WorkingPos";
|
||||
static final String _clientPrevPos_ = "ClientPrevPos";
|
||||
|
|
|
@ -15,11 +15,11 @@ import net.minecraft.world.level.block.state.BlockState;
|
|||
import net.minecraft.world.level.block.state.properties.SlabType;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
public class SeatMovementBehaviour extends MovementBehaviour {
|
||||
public class SeatMovementBehaviour implements MovementBehaviour {
|
||||
|
||||
@Override
|
||||
public void startMoving(MovementContext context) {
|
||||
super.startMoving(context);
|
||||
MovementBehaviour.super.startMoving(context);
|
||||
int indexOf = context.contraption.getSeats()
|
||||
.indexOf(context.localPos);
|
||||
context.data.putInt("SeatIndex", indexOf);
|
||||
|
@ -27,8 +27,8 @@ public class SeatMovementBehaviour extends MovementBehaviour {
|
|||
|
||||
@Override
|
||||
public void visitNewPosition(MovementContext context, BlockPos pos) {
|
||||
super.visitNewPosition(context, pos);
|
||||
|
||||
MovementBehaviour.super.visitNewPosition(context, pos);
|
||||
|
||||
AbstractContraptionEntity contraptionEntity = context.contraption.entity;
|
||||
if (contraptionEntity == null)
|
||||
return;
|
||||
|
|
|
@ -2,11 +2,9 @@ package com.simibubi.create.content.contraptions.components.actors.dispenser;
|
|||
|
||||
import java.util.HashMap;
|
||||
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
||||
import com.simibubi.create.foundation.mixin.accessor.DispenserBlockAccessor;
|
||||
|
||||
import net.minecraft.MethodsReturnNonnullByDefault;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.core.dispenser.AbstractProjectileDispenseBehavior;
|
||||
|
@ -16,54 +14,57 @@ import net.minecraft.world.item.Item;
|
|||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import net.minecraft.world.level.block.DispenserBlock;
|
||||
import net.minecraft.world.level.block.state.BlockBehaviour;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
public class DispenserMovementBehaviour extends DropperMovementBehaviour {
|
||||
private static final HashMap<Item, IMovedDispenseItemBehaviour> MOVED_DISPENSE_ITEM_BEHAVIOURS = new HashMap<>();
|
||||
private static final HashMap<Item, IMovedDispenseItemBehaviour> MOVED_PROJECTILE_DISPENSE_BEHAVIOURS = new HashMap<>();
|
||||
private static final DispenserLookup BEHAVIOUR_LOOKUP = new DispenserLookup();
|
||||
private static boolean spawneggsRegistered = false;
|
||||
private static boolean spawnEggsRegistered = false;
|
||||
|
||||
public static void gatherMovedDispenseItemBehaviours() {
|
||||
IMovedDispenseItemBehaviour.init();
|
||||
}
|
||||
|
||||
public static void registerMovedDispenseItemBehaviour(Item item, IMovedDispenseItemBehaviour movedDispenseItemBehaviour) {
|
||||
public static void registerMovedDispenseItemBehaviour(Item item,
|
||||
IMovedDispenseItemBehaviour movedDispenseItemBehaviour) {
|
||||
MOVED_DISPENSE_ITEM_BEHAVIOURS.put(item, movedDispenseItemBehaviour);
|
||||
}
|
||||
|
||||
public static DispenseItemBehavior getDispenseMethod(ItemStack itemstack) {
|
||||
return ((DispenserBlockAccessor) Blocks.DISPENSER).create$callGetDispenseMethod(itemstack);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void activate(MovementContext context, BlockPos pos) {
|
||||
if (!spawneggsRegistered) {
|
||||
spawneggsRegistered = true;
|
||||
IMovedDispenseItemBehaviour.initSpawneggs();
|
||||
if (!spawnEggsRegistered) {
|
||||
spawnEggsRegistered = true;
|
||||
IMovedDispenseItemBehaviour.initSpawnEggs();
|
||||
}
|
||||
|
||||
|
||||
DispenseItemLocation location = getDispenseLocation(context);
|
||||
if (location.isEmpty()) {
|
||||
context.world.levelEvent(1001, pos, 0);
|
||||
} else {
|
||||
ItemStack itemstack = getItemStackAt(location, context);
|
||||
ItemStack itemStack = getItemStackAt(location, context);
|
||||
// Special dispense item behaviour for moving contraptions
|
||||
if (MOVED_DISPENSE_ITEM_BEHAVIOURS.containsKey(itemstack.getItem())) {
|
||||
setItemStackAt(location, MOVED_DISPENSE_ITEM_BEHAVIOURS.get(itemstack.getItem()).dispense(itemstack, context, pos), context);
|
||||
if (MOVED_DISPENSE_ITEM_BEHAVIOURS.containsKey(itemStack.getItem())) {
|
||||
setItemStackAt(location, MOVED_DISPENSE_ITEM_BEHAVIOURS.get(itemStack.getItem()).dispense(itemStack, context, pos), context);
|
||||
return;
|
||||
}
|
||||
|
||||
ItemStack backup = itemstack.copy();
|
||||
ItemStack backup = itemStack.copy();
|
||||
// If none is there, try vanilla registry
|
||||
try {
|
||||
if (MOVED_PROJECTILE_DISPENSE_BEHAVIOURS.containsKey(itemstack.getItem())) {
|
||||
setItemStackAt(location, MOVED_PROJECTILE_DISPENSE_BEHAVIOURS.get(itemstack.getItem()).dispense(itemstack, context, pos), context);
|
||||
if (MOVED_PROJECTILE_DISPENSE_BEHAVIOURS.containsKey(itemStack.getItem())) {
|
||||
setItemStackAt(location, MOVED_PROJECTILE_DISPENSE_BEHAVIOURS.get(itemStack.getItem()).dispense(itemStack, context, pos), context);
|
||||
return;
|
||||
}
|
||||
|
||||
DispenseItemBehavior idispenseitembehavior = BEHAVIOUR_LOOKUP.getDispenseMethod(itemstack);
|
||||
if (idispenseitembehavior instanceof AbstractProjectileDispenseBehavior) { // Projectile behaviours can be converted most of the time
|
||||
IMovedDispenseItemBehaviour iMovedDispenseItemBehaviour = MovedProjectileDispenserBehaviour.of((AbstractProjectileDispenseBehavior) idispenseitembehavior);
|
||||
setItemStackAt(location, iMovedDispenseItemBehaviour.dispense(itemstack, context, pos), context);
|
||||
MOVED_PROJECTILE_DISPENSE_BEHAVIOURS.put(itemstack.getItem(), iMovedDispenseItemBehaviour); // buffer conversion if successful
|
||||
DispenseItemBehavior behavior = getDispenseMethod(itemStack);
|
||||
if (behavior instanceof AbstractProjectileDispenseBehavior) { // Projectile behaviours can be converted most of the time
|
||||
IMovedDispenseItemBehaviour movedBehaviour = MovedProjectileDispenserBehaviour.of((AbstractProjectileDispenseBehavior) behavior);
|
||||
setItemStackAt(location, movedBehaviour.dispense(itemStack, context, pos), context);
|
||||
MOVED_PROJECTILE_DISPENSE_BEHAVIOURS.put(itemStack.getItem(), movedBehaviour); // buffer conversion if successful
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -73,27 +74,16 @@ public class DispenserMovementBehaviour extends DropperMovementBehaviour {
|
|||
Direction clostestFacing = Direction.getNearest(facingVec.x, facingVec.y, facingVec.z);
|
||||
ContraptionBlockSource blockSource = new ContraptionBlockSource(context, pos, clostestFacing);
|
||||
|
||||
if (idispenseitembehavior.getClass() != DefaultDispenseItemBehavior.class) { // There is a dispense item behaviour registered for the vanilla dispenser
|
||||
setItemStackAt(location, idispenseitembehavior.dispense(blockSource, itemstack), context);
|
||||
if (behavior.getClass() != DefaultDispenseItemBehavior.class) { // There is a dispense item behaviour registered for the vanilla dispenser
|
||||
setItemStackAt(location, behavior.dispense(blockSource, itemStack), context);
|
||||
return;
|
||||
}
|
||||
} catch (NullPointerException ignored) {
|
||||
itemstack = backup; // Something went wrong with the TE being null in ContraptionBlockSource, reset the stack
|
||||
itemStack = backup; // Something went wrong with the TE being null in ContraptionBlockSource, reset the stack
|
||||
}
|
||||
|
||||
setItemStackAt(location, defaultBehaviour.dispense(itemstack, context, pos), context); // the default: launch the item
|
||||
setItemStackAt(location, DEFAULT_BEHAVIOUR.dispense(itemStack, context, pos), context); // the default: launch the item
|
||||
}
|
||||
}
|
||||
|
||||
@ParametersAreNonnullByDefault
|
||||
@MethodsReturnNonnullByDefault
|
||||
private static class DispenserLookup extends DispenserBlock {
|
||||
protected DispenserLookup() {
|
||||
super(BlockBehaviour.Properties.copy(Blocks.DISPENSER));
|
||||
}
|
||||
|
||||
public DispenseItemBehavior getDispenseMethod(ItemStack itemStack) {
|
||||
return super.getDispenseMethod(itemStack);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,8 +14,8 @@ import net.minecraft.world.ContainerHelper;
|
|||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Items;
|
||||
|
||||
public class DropperMovementBehaviour extends MovementBehaviour {
|
||||
protected static final MovedDefaultDispenseItemBehaviour defaultBehaviour = new MovedDefaultDispenseItemBehaviour();
|
||||
public class DropperMovementBehaviour implements MovementBehaviour {
|
||||
protected static final MovedDefaultDispenseItemBehaviour DEFAULT_BEHAVIOUR = new MovedDefaultDispenseItemBehaviour();
|
||||
private static final Random RNG = new Random();
|
||||
|
||||
protected void activate(MovementContext context, BlockPos pos) {
|
||||
|
@ -23,7 +23,7 @@ public class DropperMovementBehaviour extends MovementBehaviour {
|
|||
if (location.isEmpty()) {
|
||||
context.world.levelEvent(1001, pos, 0);
|
||||
} else {
|
||||
setItemStackAt(location, defaultBehaviour.dispense(getItemStackAt(location, context), context, pos), context);
|
||||
setItemStackAt(location, DEFAULT_BEHAVIOUR.dispense(getItemStackAt(location, context), context, pos), context);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -81,7 +81,7 @@ public class DropperMovementBehaviour extends MovementBehaviour {
|
|||
|
||||
@Override
|
||||
public void stopMoving(MovementContext context) {
|
||||
super.stopMoving(context);
|
||||
MovementBehaviour.super.stopMoving(context);
|
||||
writeExtraData(context);
|
||||
}
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@ import net.minecraft.world.phys.Vec3;
|
|||
|
||||
public interface IMovedDispenseItemBehaviour {
|
||||
|
||||
static void initSpawneggs() {
|
||||
static void initSpawnEggs() {
|
||||
final IMovedDispenseItemBehaviour spawnEggDispenseBehaviour = new MovedDefaultDispenseItemBehaviour() {
|
||||
@Override
|
||||
protected ItemStack dispenseStack(ItemStack itemStack, MovementContext context, BlockPos pos, Vec3 facing) {
|
||||
|
|
|
@ -15,7 +15,7 @@ import net.minecraft.world.phys.Vec3;
|
|||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
|
||||
public class MovedDefaultDispenseItemBehaviour implements IMovedDispenseItemBehaviour {
|
||||
private static final MovedDefaultDispenseItemBehaviour defaultInstance = new MovedDefaultDispenseItemBehaviour();
|
||||
private static final MovedDefaultDispenseItemBehaviour DEFAULT_INSTANCE = new MovedDefaultDispenseItemBehaviour();
|
||||
|
||||
public static void doDispense(Level p_82486_0_, ItemStack p_82486_1_, int p_82486_2_, Vec3 facing, BlockPos p_82486_4_, MovementContext context) {
|
||||
double d0 = p_82486_4_.getX() + facing.x + .5;
|
||||
|
@ -87,7 +87,7 @@ public class MovedDefaultDispenseItemBehaviour implements IMovedDispenseItemBeha
|
|||
consumedFrom.shrink(1);
|
||||
ItemStack remainder = ItemHandlerHelper.insertItem(context.contraption.inventory, output.copy(), false);
|
||||
if (!remainder.isEmpty())
|
||||
defaultInstance.dispenseStack(output, context, pos, facing);
|
||||
DEFAULT_INSTANCE.dispenseStack(output, context, pos, facing);
|
||||
return consumedFrom;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,20 +1,17 @@
|
|||
package com.simibubi.create.content.contraptions.components.actors.dispenser;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
||||
import com.simibubi.create.foundation.mixin.accessor.AbstractProjectileDispenseBehaviorAccessor;
|
||||
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Position;
|
||||
import net.minecraft.core.dispenser.AbstractProjectileDispenseBehavior;
|
||||
import net.minecraft.world.entity.projectile.Projectile;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.LevelAccessor;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
import net.minecraftforge.fml.util.ObfuscationReflectionHelper;
|
||||
|
||||
public abstract class MovedProjectileDispenserBehaviour extends MovedDefaultDispenseItemBehaviour {
|
||||
|
||||
|
@ -50,51 +47,22 @@ public abstract class MovedProjectileDispenserBehaviour extends MovedDefaultDisp
|
|||
}
|
||||
|
||||
public static MovedProjectileDispenserBehaviour of(AbstractProjectileDispenseBehavior vanillaBehaviour) {
|
||||
AbstractProjectileDispenseBehaviorAccessor accessor = (AbstractProjectileDispenseBehaviorAccessor) vanillaBehaviour;
|
||||
return new MovedProjectileDispenserBehaviour() {
|
||||
@Override
|
||||
protected Projectile getProjectileEntity(Level world, double x, double y, double z, ItemStack itemStack) {
|
||||
try {
|
||||
return (Projectile) MovedProjectileDispenserBehaviour.getProjectileEntityLookup().invoke(vanillaBehaviour, world, new SimplePos(x, y, z) , itemStack);
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
return null;
|
||||
return accessor.create$callGetProjectile(world, new SimplePos(x, y, z), itemStack);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected float getProjectileInaccuracy() {
|
||||
try {
|
||||
return (float) MovedProjectileDispenserBehaviour.getProjectileInaccuracyLookup().invoke(vanillaBehaviour);
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
return super.getProjectileInaccuracy();
|
||||
return accessor.create$callGetUncertainty();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected float getProjectileVelocity() {
|
||||
try {
|
||||
return (float) MovedProjectileDispenserBehaviour.getProjectileVelocityLookup().invoke(vanillaBehaviour);
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
return super.getProjectileVelocity();
|
||||
return accessor.create$callGetPower();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private static Method getProjectileEntityLookup() {
|
||||
Method getProjectileEntity = ObfuscationReflectionHelper.findMethod(AbstractProjectileDispenseBehavior.class, "m_6895_", Level.class, Position.class, ItemStack.class); // getProjectile
|
||||
getProjectileEntity.setAccessible(true);
|
||||
return getProjectileEntity;
|
||||
}
|
||||
|
||||
private static Method getProjectileInaccuracyLookup() {
|
||||
Method getProjectileInaccuracy = ObfuscationReflectionHelper.findMethod(AbstractProjectileDispenseBehavior.class, "m_7101_"); // getUncertainty
|
||||
getProjectileInaccuracy.setAccessible(true);
|
||||
return getProjectileInaccuracy;
|
||||
}
|
||||
|
||||
private static Method getProjectileVelocityLookup() {
|
||||
Method getProjectileVelocity = ObfuscationReflectionHelper.findMethod(AbstractProjectileDispenseBehavior.class, "m_7104_"); // getPower
|
||||
getProjectileVelocity.setAccessible(true);
|
||||
return getProjectileVelocity;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -166,7 +166,7 @@ public class RecipeGridHandler {
|
|||
if (numItems > 9)
|
||||
return false;
|
||||
}
|
||||
if (AllRecipeTypes.isManualRecipe(recipe))
|
||||
if (AllRecipeTypes.shouldIgnoreInAutomation(recipe))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -87,8 +87,8 @@ public class CrushingWheelControllerBlock extends DirectionalBlock implements IT
|
|||
return;
|
||||
if (te.crushingspeed == 0)
|
||||
return;
|
||||
if (entityIn instanceof ItemEntity)
|
||||
((ItemEntity) entityIn).setPickUpDelay(10);
|
||||
// if (entityIn instanceof ItemEntity)
|
||||
// ((ItemEntity) entityIn).setPickUpDelay(10);
|
||||
CompoundTag data = entityIn.getPersistentData();
|
||||
if (data.contains("BypassCrushingWheel")) {
|
||||
if (pos.equals(NbtUtils.readBlockPos(data.getCompound("BypassCrushingWheel"))))
|
||||
|
|
|
@ -144,8 +144,7 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity {
|
|||
inventory.remainingTime = 0;
|
||||
|
||||
// Output Items
|
||||
if (facing.getAxis()
|
||||
.isHorizontal() || facing == Direction.DOWN) {
|
||||
if (facing != Direction.UP) {
|
||||
BlockPos nextPos = worldPosition.offset(facing.getAxis() == Axis.X ? 1f * offset : 0f, (-1f),
|
||||
facing.getAxis() == Axis.Z ? 1f * offset : 0f);
|
||||
DirectBeltInputBehaviour behaviour =
|
||||
|
|
|
@ -3,7 +3,6 @@ package com.simibubi.create.content.contraptions.components.deployer;
|
|||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import com.simibubi.create.AllBlocks;
|
||||
|
@ -74,17 +73,15 @@ public class DeployerApplicationRecipe extends ProcessingRecipe<RecipeWrapper> i
|
|||
return ingredients.get(0);
|
||||
}
|
||||
|
||||
public static List<DeployerApplicationRecipe> convert(List<Recipe<?>> sandpaperRecipes) {
|
||||
return sandpaperRecipes.stream()
|
||||
.map(r -> new ProcessingRecipeBuilder<>(DeployerApplicationRecipe::new, new ResourceLocation(r.getId()
|
||||
.getNamespace(),
|
||||
r.getId()
|
||||
.getPath() + "_using_deployer")).require(r.getIngredients()
|
||||
public static DeployerApplicationRecipe convert(Recipe<?> sandpaperRecipe) {
|
||||
return new ProcessingRecipeBuilder<>(DeployerApplicationRecipe::new,
|
||||
new ResourceLocation(sandpaperRecipe.getId().getNamespace(),
|
||||
sandpaperRecipe.getId().getPath() + "_using_deployer"))
|
||||
.require(sandpaperRecipe.getIngredients()
|
||||
.get(0))
|
||||
.require(AllItemTags.SANDPAPER.tag)
|
||||
.output(r.getResultItem())
|
||||
.build())
|
||||
.collect(Collectors.toList());
|
||||
.require(AllItemTags.SANDPAPER.tag)
|
||||
.output(sandpaperRecipe.getResultItem())
|
||||
.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
package com.simibubi.create.content.contraptions.components.deployer;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
|
||||
|
||||
import net.minecraft.world.InteractionHand;
|
||||
|
@ -21,12 +19,12 @@ public class DeployerItemHandler implements IItemHandlerModifiable {
|
|||
|
||||
@Override
|
||||
public int getSlots() {
|
||||
return 1;
|
||||
return 1 + te.overflowItems.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getStackInSlot(int slot) {
|
||||
return getHeld();
|
||||
return slot >= te.overflowItems.size() ? getHeld() : te.overflowItems.get(slot);
|
||||
}
|
||||
|
||||
public ItemStack getHeld() {
|
||||
|
@ -47,14 +45,18 @@ public class DeployerItemHandler implements IItemHandlerModifiable {
|
|||
|
||||
@Override
|
||||
public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) {
|
||||
ItemStack held = getHeld();
|
||||
if (slot < te.overflowItems.size())
|
||||
return stack;
|
||||
if (!isItemValid(slot, stack))
|
||||
return stack;
|
||||
|
||||
ItemStack held = getHeld();
|
||||
if (held.isEmpty()) {
|
||||
if (!simulate)
|
||||
set(stack);
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
|
||||
if (!ItemHandlerHelper.canItemStacksStack(held, stack))
|
||||
return stack;
|
||||
|
||||
|
@ -78,36 +80,18 @@ public class DeployerItemHandler implements IItemHandlerModifiable {
|
|||
if (amount == 0)
|
||||
return ItemStack.EMPTY;
|
||||
|
||||
ItemStack extractedFromOverflow = ItemStack.EMPTY;
|
||||
ItemStack returnToOverflow = ItemStack.EMPTY;
|
||||
|
||||
for (Iterator<ItemStack> iterator = te.overflowItems.iterator(); iterator.hasNext();) {
|
||||
ItemStack existing = iterator.next();
|
||||
if (existing.isEmpty()) {
|
||||
iterator.remove();
|
||||
continue;
|
||||
}
|
||||
|
||||
int toExtract = Math.min(amount, existing.getMaxStackSize());
|
||||
if (existing.getCount() <= toExtract) {
|
||||
if (!simulate)
|
||||
iterator.remove();
|
||||
extractedFromOverflow = existing;
|
||||
break;
|
||||
}
|
||||
if (!simulate) {
|
||||
iterator.remove();
|
||||
returnToOverflow = ItemHandlerHelper.copyStackWithSize(existing, existing.getCount() - toExtract);
|
||||
}
|
||||
extractedFromOverflow = ItemHandlerHelper.copyStackWithSize(existing, toExtract);
|
||||
break;
|
||||
if (slot < te.overflowItems.size()) {
|
||||
ItemStack itemStack = te.overflowItems.get(slot);
|
||||
int toExtract = Math.min(amount, itemStack.getCount());
|
||||
ItemStack extracted = simulate ? itemStack.copy() : itemStack.split(toExtract);
|
||||
extracted.setCount(toExtract);
|
||||
if (!simulate && itemStack.isEmpty())
|
||||
te.overflowItems.remove(slot);
|
||||
if (!simulate && !extracted.isEmpty())
|
||||
te.setChanged();
|
||||
return extracted;
|
||||
}
|
||||
|
||||
if (!returnToOverflow.isEmpty())
|
||||
te.overflowItems.add(returnToOverflow);
|
||||
if (!extractedFromOverflow.isEmpty())
|
||||
return extractedFromOverflow;
|
||||
|
||||
ItemStack held = getHeld();
|
||||
if (amount == 0 || held.isEmpty())
|
||||
return ItemStack.EMPTY;
|
||||
|
@ -126,7 +110,7 @@ public class DeployerItemHandler implements IItemHandlerModifiable {
|
|||
|
||||
@Override
|
||||
public int getSlotLimit(int slot) {
|
||||
return Math.min(getHeld().getMaxStackSize(), 64);
|
||||
return Math.min(getStackInSlot(slot).getMaxStackSize(), 64);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -137,6 +121,10 @@ public class DeployerItemHandler implements IItemHandlerModifiable {
|
|||
|
||||
@Override
|
||||
public void setStackInSlot(int slot, ItemStack stack) {
|
||||
if (slot < te.overflowItems.size()) {
|
||||
te.overflowItems.set(slot, stack);
|
||||
return;
|
||||
}
|
||||
set(stack);
|
||||
}
|
||||
|
||||
|
|
|
@ -47,7 +47,7 @@ import net.minecraftforge.common.util.BlockSnapshot;
|
|||
import net.minecraftforge.event.ForgeEventFactory;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
|
||||
public class DeployerMovementBehaviour extends MovementBehaviour {
|
||||
public class DeployerMovementBehaviour implements MovementBehaviour {
|
||||
|
||||
@Override
|
||||
public Vec3 getActiveAreaOffset(MovementContext context) {
|
||||
|
|
|
@ -96,7 +96,7 @@ public class EncasedFanTileEntity extends GeneratingKineticTileEntity implements
|
|||
return false;
|
||||
BlockState checkState = level.getBlockState(worldPosition.below());
|
||||
|
||||
if (!checkState.is(AllBlockTags.FAN_HEATERS.tag))
|
||||
if (!AllBlockTags.FAN_HEATERS.matches(checkState))
|
||||
return false;
|
||||
|
||||
if (checkState.hasProperty(BlazeBurnerBlock.HEAT_LEVEL) && !checkState.getValue(BlazeBurnerBlock.HEAT_LEVEL)
|
||||
|
|
|
@ -7,7 +7,7 @@ import com.simibubi.create.AllRecipeTypes;
|
|||
import com.simibubi.create.AllSoundEvents;
|
||||
import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity;
|
||||
import com.simibubi.create.content.contraptions.fluids.FluidFX;
|
||||
import com.simibubi.create.content.contraptions.fluids.recipe.PotionMixingRecipeManager;
|
||||
import com.simibubi.create.content.contraptions.fluids.recipe.PotionMixingRecipes;
|
||||
import com.simibubi.create.content.contraptions.processing.BasinOperatingTileEntity;
|
||||
import com.simibubi.create.content.contraptions.processing.BasinTileEntity;
|
||||
import com.simibubi.create.content.contraptions.processing.ProcessingRecipe;
|
||||
|
@ -32,14 +32,15 @@ import net.minecraft.sounds.SoundSource;
|
|||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.world.Container;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.crafting.CraftingRecipe;
|
||||
import net.minecraft.world.item.crafting.Recipe;
|
||||
import net.minecraft.world.item.crafting.RecipeSerializer;
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.phys.AABB;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
import net.minecraftforge.common.crafting.IShapedRecipe;
|
||||
import net.minecraftforge.items.CapabilityItemHandler;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
|
||||
|
@ -224,7 +225,7 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity {
|
|||
if (stack.isEmpty())
|
||||
continue;
|
||||
|
||||
List<MixingRecipe> list = PotionMixingRecipeManager.ALL.get(stack.getItem());
|
||||
List<MixingRecipe> list = PotionMixingRecipes.BY_ITEM.get(stack.getItem());
|
||||
if (list == null)
|
||||
continue;
|
||||
for (MixingRecipe mixingRecipe : list)
|
||||
|
@ -237,10 +238,10 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity {
|
|||
|
||||
@Override
|
||||
protected <C extends Container> boolean matchStaticFilters(Recipe<C> r) {
|
||||
return ((r.getSerializer() == RecipeSerializer.SHAPELESS_RECIPE
|
||||
&& AllConfigs.SERVER.recipes.allowShapelessInMixer.get() && r.getIngredients()
|
||||
return ((r instanceof CraftingRecipe && !(r instanceof IShapedRecipe<?>)
|
||||
&& AllConfigs.SERVER.recipes.allowShapelessInMixer.get() && r.getIngredients()
|
||||
.size() > 1
|
||||
&& !MechanicalPressTileEntity.canCompress(r)) && !AllRecipeTypes.isManualRecipe(r)
|
||||
&& !MechanicalPressTileEntity.canCompress(r)) && !AllRecipeTypes.shouldIgnoreInAutomation(r)
|
||||
|| r.getType() == AllRecipeTypes.MIXING.getType());
|
||||
}
|
||||
|
||||
|
@ -289,9 +290,9 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity {
|
|||
|
||||
// SoundEvents.BLOCK_STONE_BREAK
|
||||
boolean slow = Math.abs(getSpeed()) < 65;
|
||||
if (slow && AnimationTickHolder.getTicks() % 2 == 0)
|
||||
if (slow && AnimationTickHolder.getTicks() % 2 == 0)
|
||||
return;
|
||||
if (runningTicks == 20)
|
||||
if (runningTicks == 20)
|
||||
AllSoundEvents.MIXING.playAt(level, worldPosition, .75f, 1, true);
|
||||
}
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.AllRecipeTypes;
|
||||
import com.simibubi.create.AllSoundEvents;
|
||||
|
@ -31,7 +30,6 @@ import net.minecraft.core.particles.ItemParticleOption;
|
|||
import net.minecraft.core.particles.ParticleTypes;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.nbt.Tag;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.world.Container;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
|
@ -40,7 +38,6 @@ import net.minecraft.world.item.ItemStack;
|
|||
import net.minecraft.world.item.crafting.CraftingRecipe;
|
||||
import net.minecraft.world.item.crafting.Ingredient;
|
||||
import net.minecraft.world.item.crafting.Recipe;
|
||||
import net.minecraft.world.item.crafting.RecipeSerializer;
|
||||
import net.minecraft.world.level.block.SoundType;
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
|
@ -344,28 +341,17 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity {
|
|||
return AllRecipeTypes.PRESSING.find(pressingInv, level);
|
||||
}
|
||||
|
||||
private static final List<ResourceLocation> RECIPE_DENY_LIST =
|
||||
ImmutableList.of(new ResourceLocation("occultism", "spirit_trade"), new ResourceLocation("occultism", "ritual"));
|
||||
|
||||
public static <C extends Container> boolean canCompress(Recipe<C> recipe) {
|
||||
NonNullList<Ingredient> ingredients = recipe.getIngredients();
|
||||
if (!(recipe instanceof CraftingRecipe))
|
||||
if (!(recipe instanceof CraftingRecipe) || !AllConfigs.SERVER.recipes.allowShapedSquareInPress.get())
|
||||
return false;
|
||||
|
||||
RecipeSerializer<?> serializer = recipe.getSerializer();
|
||||
for (ResourceLocation denied : RECIPE_DENY_LIST)
|
||||
if (serializer != null && denied.equals(serializer.getRegistryName()))
|
||||
return false;
|
||||
|
||||
return AllConfigs.SERVER.recipes.allowShapedSquareInPress.get()
|
||||
&& (ingredients.size() == 4 || ingredients.size() == 9) && ItemHelper.condenseIngredients(ingredients)
|
||||
.size() == 1;
|
||||
NonNullList<Ingredient> ingredients = recipe.getIngredients();
|
||||
return (ingredients.size() == 4 || ingredients.size() == 9) && ItemHelper.matchAllIngredients(ingredients);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected <C extends Container> boolean matchStaticFilters(Recipe<C> recipe) {
|
||||
return (recipe instanceof CraftingRecipe && !(recipe instanceof MechanicalCraftingRecipe)
|
||||
&& canCompress(recipe) && !AllRecipeTypes.isManualRecipe(recipe))
|
||||
&& canCompress(recipe) && !AllRecipeTypes.shouldIgnoreInAutomation(recipe))
|
||||
|| recipe.getType() == AllRecipeTypes.COMPACTING.getType();
|
||||
}
|
||||
|
||||
|
|
|
@ -365,7 +365,7 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity {
|
|||
return startedSearch.stream()
|
||||
.filter(RecipeConditions.outputMatchesFilter(filtering))
|
||||
.filter(RecipeConditions.firstIngredientMatches(inventory.getStackInSlot(0)))
|
||||
.filter(r -> !AllRecipeTypes.isManualRecipe(r))
|
||||
.filter(r -> !AllRecipeTypes.shouldIgnoreInAutomation(r))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
|
|
|
@ -60,7 +60,6 @@ import net.minecraft.world.phys.Vec3;
|
|||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
import net.minecraftforge.entity.IEntityAdditionalSpawnData;
|
||||
import net.minecraftforge.fml.util.ObfuscationReflectionHelper;
|
||||
import net.minecraftforge.network.NetworkHooks;
|
||||
import net.minecraftforge.network.PacketDistributor;
|
||||
|
||||
|
@ -76,7 +75,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
|
|||
protected Contraption contraption;
|
||||
protected boolean initialized;
|
||||
protected boolean prevPosInvalid;
|
||||
private boolean ticking;
|
||||
private boolean skipActorStop;
|
||||
|
||||
public AbstractContraptionEntity(EntityType<?> entityTypeIn, Level worldIn) {
|
||||
super(entityTypeIn, worldIn);
|
||||
|
@ -302,7 +301,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
|
|||
if (!level.isClientSide)
|
||||
contraption.stalled = false;
|
||||
|
||||
ticking = true;
|
||||
skipActorStop = true;
|
||||
for (MutablePair<StructureBlockInfo, MovementContext> pair : contraption.getActors()) {
|
||||
MovementContext context = pair.right;
|
||||
StructureBlockInfo blockInfo = pair.left;
|
||||
|
@ -339,7 +338,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
|
|||
contraption.stop(level);
|
||||
return;
|
||||
}
|
||||
ticking = false;
|
||||
skipActorStop = false;
|
||||
|
||||
for (Entity entity : getPassengers()) {
|
||||
if (!(entity instanceof OrientedContraptionEntity))
|
||||
|
@ -497,6 +496,8 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
|
|||
return;
|
||||
|
||||
StructureTransform transform = makeStructureTransform();
|
||||
|
||||
contraption.stop(level);
|
||||
AllPackets.channel.send(PacketDistributor.TRACKING_ENTITY.with(() -> this),
|
||||
new ContraptionDisassemblyPacket(this.getId(), transform));
|
||||
|
||||
|
@ -515,6 +516,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
|
|||
((AbstractContraptionEntity) entity).disassemble();
|
||||
}
|
||||
|
||||
skipActorStop = true;
|
||||
discard();
|
||||
|
||||
ejectPassengers();
|
||||
|
@ -535,9 +537,8 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
|
|||
|
||||
@Override
|
||||
public void remove(RemovalReason p_146834_) {
|
||||
if (!level.isClientSide && !isRemoved() && contraption != null)
|
||||
if (!ticking)
|
||||
contraption.stop(level);
|
||||
if (!level.isClientSide && !isRemoved() && contraption != null && !skipActorStop)
|
||||
contraption.stop(level);
|
||||
if (contraption != null)
|
||||
contraption.onEntityRemoved(this);
|
||||
super.remove(p_146834_);
|
||||
|
@ -605,8 +606,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
|
|||
|
||||
for (Entity entity : passengers) {
|
||||
// setPos has world accessing side-effects when removed == null
|
||||
String srg = "f_146795_"; // removalReason
|
||||
ObfuscationReflectionHelper.setPrivateValue(Entity.class, entity, RemovalReason.UNLOADED_TO_CHUNK, srg);
|
||||
entity.removalReason = RemovalReason.UNLOADED_TO_CHUNK;
|
||||
|
||||
// Gather passengers into same chunk when saving
|
||||
Vec3 prevVec = entity.position();
|
||||
|
@ -614,7 +614,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
|
|||
|
||||
// Super requires all passengers to not be removed in order to write them to the
|
||||
// tag
|
||||
ObfuscationReflectionHelper.setPrivateValue(Entity.class, entity, null, srg);
|
||||
entity.removalReason = null;
|
||||
}
|
||||
|
||||
CompoundTag tag = super.saveWithoutId(nbt);
|
||||
|
|
|
@ -5,7 +5,6 @@ import java.util.List;
|
|||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.AllTags.AllBlockTags;
|
||||
import com.simibubi.create.Create;
|
||||
import com.simibubi.create.content.contraptions.components.actors.AttachedActorBlock;
|
||||
import com.simibubi.create.content.contraptions.components.actors.HarvesterBlock;
|
||||
import com.simibubi.create.content.contraptions.components.actors.PloughBlock;
|
||||
|
@ -39,7 +38,6 @@ import com.simibubi.create.foundation.config.ContraptionMovementSetting;
|
|||
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.BasePressurePlateBlock;
|
||||
import net.minecraft.world.level.block.BaseRailBlock;
|
||||
|
@ -78,7 +76,6 @@ public class BlockMovementChecks {
|
|||
private static final List<BrittleCheck> BRITTLE_CHECKS = new ArrayList<>();
|
||||
private static final List<AttachedCheck> ATTACHED_CHECKS = new ArrayList<>();
|
||||
private static final List<NotSupportiveCheck> NOT_SUPPORTIVE_CHECKS = new ArrayList<>();
|
||||
public static final ResourceLocation NON_MOVABLE = Create.asResource("non_movable");
|
||||
|
||||
// Registration
|
||||
// Add new checks to the front instead of the end
|
||||
|
@ -197,7 +194,7 @@ public class BlockMovementChecks {
|
|||
return true;
|
||||
if (state.getDestroySpeed(world, pos) == -1)
|
||||
return false;
|
||||
if (state.getBlock().getTags().contains(NON_MOVABLE))
|
||||
if (AllBlockTags.RELOCATION_NOT_SUPPORTED.matches(state))
|
||||
return false;
|
||||
if (ContraptionMovementSetting.get(state.getBlock()) == ContraptionMovementSetting.UNMOVABLE)
|
||||
return false;
|
||||
|
@ -262,7 +259,7 @@ public class BlockMovementChecks {
|
|||
return true;
|
||||
if (block instanceof WoolCarpetBlock)
|
||||
return true;
|
||||
return AllBlockTags.BRITTLE.tag.contains(block);
|
||||
return AllBlockTags.BRITTLE.matches(state);
|
||||
}
|
||||
|
||||
private static boolean isBlockAttachedTowardsFallback(BlockState state, Level world, BlockPos pos,
|
||||
|
|
|
@ -17,23 +17,26 @@ import net.minecraftforge.api.distmarker.Dist;
|
|||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
|
||||
public abstract class MovementBehaviour {
|
||||
public interface MovementBehaviour {
|
||||
|
||||
public boolean isActive(MovementContext context) {
|
||||
default boolean isActive(MovementContext context) {
|
||||
return true;
|
||||
}
|
||||
|
||||
public void tick(MovementContext context) {}
|
||||
default void tick(MovementContext context) {
|
||||
}
|
||||
|
||||
public void startMoving(MovementContext context) {}
|
||||
default void startMoving(MovementContext context) {
|
||||
}
|
||||
|
||||
public void visitNewPosition(MovementContext context, BlockPos pos) {}
|
||||
default void visitNewPosition(MovementContext context, BlockPos pos) {
|
||||
}
|
||||
|
||||
public Vec3 getActiveAreaOffset(MovementContext context) {
|
||||
default Vec3 getActiveAreaOffset(MovementContext context) {
|
||||
return Vec3.ZERO;
|
||||
}
|
||||
|
||||
public void dropItem(MovementContext context, ItemStack stack) {
|
||||
default void dropItem(MovementContext context, ItemStack stack) {
|
||||
ItemStack remainder;
|
||||
if (AllConfigs.SERVER.kinetics.moveItemsToStorage.get())
|
||||
remainder = ItemHandlerHelper.insertItem(context.contraption.inventory, stack, false);
|
||||
|
@ -49,32 +52,31 @@ public abstract class MovementBehaviour {
|
|||
context.world.addFreshEntity(itemEntity);
|
||||
}
|
||||
|
||||
public void stopMoving(MovementContext context) {
|
||||
|
||||
default void onSpeedChanged(MovementContext context, Vec3 oldMotion, Vec3 motion) {
|
||||
}
|
||||
|
||||
public void writeExtraData(MovementContext context) {
|
||||
|
||||
default void stopMoving(MovementContext context) {
|
||||
}
|
||||
|
||||
public boolean renderAsNormalTileEntity() {
|
||||
default void writeExtraData(MovementContext context) {
|
||||
}
|
||||
|
||||
default boolean renderAsNormalTileEntity() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean hasSpecialInstancedRendering() {
|
||||
default boolean hasSpecialInstancedRendering() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
public void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld,
|
||||
ContraptionMatrices matrices, MultiBufferSource buffer) {}
|
||||
default void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld,
|
||||
ContraptionMatrices matrices, MultiBufferSource buffer) {
|
||||
}
|
||||
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
@Nullable
|
||||
public ActorInstance createInstance(MaterialManager materialManager, VirtualRenderWorld simulationWorld, MovementContext context) {
|
||||
default ActorInstance createInstance(MaterialManager materialManager, VirtualRenderWorld simulationWorld, MovementContext context) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public void onSpeedChanged(MovementContext context, Vec3 oldMotion, Vec3 motion) {
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
package com.simibubi.create.content.contraptions.components.structureMovement.bearing;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.tterrag.registrate.util.entry.BlockEntry;
|
||||
|
||||
import net.minecraft.world.item.BlockItem;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
|
||||
public class BlankSailBlockItem extends BlockItem {
|
||||
public BlankSailBlockItem(Block block, Properties properties) {
|
||||
super(block, properties);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerBlocks(Map<Block, Item> blockToItemMap, Item item) {
|
||||
super.registerBlocks(blockToItemMap, item);
|
||||
for (BlockEntry<SailBlock> entry : AllBlocks.DYED_SAILS) {
|
||||
blockToItemMap.put(entry.get(), item);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeFromBlockToItemMap(Map<Block, Item> blockToItemMap, Item item) {
|
||||
super.removeFromBlockToItemMap(blockToItemMap, item);
|
||||
for (BlockEntry<SailBlock> entry : AllBlocks.DYED_SAILS) {
|
||||
blockToItemMap.remove(entry.get());
|
||||
}
|
||||
}
|
||||
}
|
|
@ -20,12 +20,14 @@ import com.simibubi.create.foundation.utility.placement.PlacementOffset;
|
|||
import net.minecraft.MethodsReturnNonnullByDefault;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.core.NonNullList;
|
||||
import net.minecraft.world.InteractionHand;
|
||||
import net.minecraft.world.InteractionResult;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.BlockItem;
|
||||
import net.minecraft.world.item.CreativeModeTab;
|
||||
import net.minecraft.world.item.DyeColor;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.ShearsItem;
|
||||
|
@ -62,6 +64,13 @@ public class SailBlock extends WrenchableDirectionalBlock {
|
|||
this.color = color;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fillItemCategory(CreativeModeTab tab, NonNullList<ItemStack> items) {
|
||||
if (frame || color == DyeColor.WHITE) {
|
||||
super.fillItemCategory(tab, items);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState getStateForPlacement(BlockPlaceContext context) {
|
||||
BlockState state = super.getStateForPlacement(context);
|
||||
|
|
|
@ -28,7 +28,7 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties;
|
|||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
|
||||
public class StabilizedBearingMovementBehaviour extends MovementBehaviour {
|
||||
public class StabilizedBearingMovementBehaviour implements MovementBehaviour {
|
||||
|
||||
@Override
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
|
|
|
@ -103,7 +103,7 @@ public class SuperGlueHandler {
|
|||
if (!world.isClientSide) {
|
||||
entity.playPlaceSound();
|
||||
world.addFreshEntity(entity);
|
||||
AllPackets.channel.send(PacketDistributor.TRACKING_ENTITY_AND_SELF.with(() -> entity),
|
||||
AllPackets.channel.send(PacketDistributor.TRACKING_ENTITY.with(() -> entity),
|
||||
new GlueEffectPacket(ray.getBlockPos(), face, true));
|
||||
}
|
||||
itemstack.hurtAndBreak(1, placer, SuperGlueItem::onBroken);
|
||||
|
|
|
@ -20,14 +20,18 @@ import net.minecraft.core.Direction;
|
|||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.sounds.SoundEvents;
|
||||
import net.minecraft.sounds.SoundSource;
|
||||
import net.minecraft.tags.BlockTags;
|
||||
import net.minecraft.tags.FluidTags;
|
||||
import net.minecraft.world.effect.MobEffect;
|
||||
import net.minecraft.world.effect.MobEffectInstance;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.item.alchemy.PotionUtils;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.AbstractCandleBlock;
|
||||
import net.minecraft.world.level.block.CampfireBlock;
|
||||
import net.minecraft.world.level.block.LiquidBlock;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.level.material.FluidState;
|
||||
|
@ -46,6 +50,8 @@ public class OpenEndedPipe extends FlowSource {
|
|||
static {
|
||||
registerEffectHandler(new PotionEffectHandler());
|
||||
registerEffectHandler(new MilkEffectHandler());
|
||||
registerEffectHandler(new WaterEffectHandler());
|
||||
registerEffectHandler(new LavaEffectHandler());
|
||||
}
|
||||
|
||||
private Level world;
|
||||
|
@ -173,11 +179,8 @@ public class OpenEndedPipe extends FlowSource {
|
|||
return false;
|
||||
if (fluid.isEmpty())
|
||||
return false;
|
||||
if (!FluidHelper.hasBlockState(fluid.getFluid())) {
|
||||
if (!simulate)
|
||||
applyEffects(fluid);
|
||||
if (!FluidHelper.hasBlockState(fluid.getFluid()))
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!fluidState.isEmpty() && fluidState.getType() != fluid.getFluid()) {
|
||||
FluidReactions.handlePipeSpillCollision(world, outputPos, fluid.getFluid(), fluidState);
|
||||
|
@ -266,6 +269,8 @@ public class OpenEndedPipe extends FlowSource {
|
|||
int fill = super.fill(resource, action);
|
||||
if (action.simulate())
|
||||
return fill;
|
||||
if (!resource.isEmpty())
|
||||
applyEffects(resource);
|
||||
if (getFluidAmount() == 1000 || !FluidHelper.hasBlockState(containedFluidStack.getFluid()))
|
||||
if (provideFluidToSpace(containedFluidStack, false))
|
||||
setFluid(FluidStack.EMPTY);
|
||||
|
@ -348,15 +353,15 @@ public class OpenEndedPipe extends FlowSource {
|
|||
if (pipe.cachedEffects.isEmpty())
|
||||
return;
|
||||
|
||||
List<LivingEntity> list =
|
||||
List<LivingEntity> entities =
|
||||
pipe.getWorld().getEntitiesOfClass(LivingEntity.class, pipe.getAOE(), LivingEntity::isAffectedByPotions);
|
||||
for (LivingEntity livingentity : list) {
|
||||
for (MobEffectInstance effectinstance : pipe.cachedEffects) {
|
||||
MobEffect effect = effectinstance.getEffect();
|
||||
for (LivingEntity entity : entities) {
|
||||
for (MobEffectInstance effectInstance : pipe.cachedEffects) {
|
||||
MobEffect effect = effectInstance.getEffect();
|
||||
if (effect.isInstantenous()) {
|
||||
effect.applyInstantenousEffect(null, null, livingentity, effectinstance.getAmplifier(), 0.5D);
|
||||
effect.applyInstantenousEffect(null, null, entity, effectInstance.getAmplifier(), 0.5D);
|
||||
} else {
|
||||
livingentity.addEffect(new MobEffectInstance(effectinstance));
|
||||
entity.addEffect(new MobEffectInstance(effectInstance));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -366,7 +371,7 @@ public class OpenEndedPipe extends FlowSource {
|
|||
public static class MilkEffectHandler implements IEffectHandler {
|
||||
@Override
|
||||
public boolean canApplyEffects(OpenEndedPipe pipe, FluidStack fluid) {
|
||||
return Tags.Fluids.MILK.contains(fluid.getFluid());
|
||||
return fluid.getFluid().is(Tags.Fluids.MILK);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -374,11 +379,60 @@ public class OpenEndedPipe extends FlowSource {
|
|||
Level world = pipe.getWorld();
|
||||
if (world.getGameTime() % 5 != 0)
|
||||
return;
|
||||
List<LivingEntity> list =
|
||||
List<LivingEntity> entities =
|
||||
world.getEntitiesOfClass(LivingEntity.class, pipe.getAOE(), LivingEntity::isAffectedByPotions);
|
||||
ItemStack curativeItem = new ItemStack(Items.MILK_BUCKET);
|
||||
for (LivingEntity livingentity : list)
|
||||
livingentity.curePotionEffects(curativeItem);
|
||||
for (LivingEntity entity : entities)
|
||||
entity.curePotionEffects(curativeItem);
|
||||
}
|
||||
}
|
||||
|
||||
public static class WaterEffectHandler implements IEffectHandler {
|
||||
@Override
|
||||
public boolean canApplyEffects(OpenEndedPipe pipe, FluidStack fluid) {
|
||||
return fluid.getFluid().is(FluidTags.WATER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applyEffects(OpenEndedPipe pipe, FluidStack fluid) {
|
||||
Level world = pipe.getWorld();
|
||||
if (world.getGameTime() % 5 != 0)
|
||||
return;
|
||||
List<Entity> entities = world.getEntities((Entity) null, pipe.getAOE(), Entity::isOnFire);
|
||||
for (Entity entity : entities)
|
||||
entity.clearFire();
|
||||
BlockPos.betweenClosedStream(pipe.getAOE()).forEach(pos -> dowseFire(world, pos));
|
||||
}
|
||||
|
||||
// Adapted from ThrownPotion
|
||||
private static void dowseFire(Level level, BlockPos pos) {
|
||||
BlockState state = level.getBlockState(pos);
|
||||
if (state.is(BlockTags.FIRE)) {
|
||||
level.removeBlock(pos, false);
|
||||
} else if (AbstractCandleBlock.isLit(state)) {
|
||||
AbstractCandleBlock.extinguish(null, state, level, pos);
|
||||
} else if (CampfireBlock.isLitCampfire(state)) {
|
||||
level.levelEvent(null, 1009, pos, 0);
|
||||
CampfireBlock.dowse(null, level, pos, state);
|
||||
level.setBlockAndUpdate(pos, state.setValue(CampfireBlock.LIT, false));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class LavaEffectHandler implements IEffectHandler {
|
||||
@Override
|
||||
public boolean canApplyEffects(OpenEndedPipe pipe, FluidStack fluid) {
|
||||
return fluid.getFluid().is(FluidTags.LAVA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applyEffects(OpenEndedPipe pipe, FluidStack fluid) {
|
||||
Level world = pipe.getWorld();
|
||||
if (world.getGameTime() % 5 != 0)
|
||||
return;
|
||||
List<Entity> entities = world.getEntities((Entity) null, pipe.getAOE(), entity -> !entity.fireImmune());
|
||||
for (Entity entity : entities)
|
||||
entity.setSecondsOnFire(3);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -5,8 +5,9 @@ import java.util.HashSet;
|
|||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import com.simibubi.create.AllTags;
|
||||
import com.simibubi.create.AllTags.AllFluidTags;
|
||||
import com.simibubi.create.foundation.config.AllConfigs;
|
||||
import com.simibubi.create.foundation.fluid.FluidHelper;
|
||||
import com.simibubi.create.foundation.networking.AllPackets;
|
||||
|
@ -212,7 +213,7 @@ public abstract class FluidManipulationBehaviour extends TileEntityBehaviour {
|
|||
}
|
||||
|
||||
protected boolean canDrainInfinitely(Fluid fluid) {
|
||||
return maxBlocks() != -1 && !AllTags.AllFluidTags.NO_INFINITE_DRAINING.matches(fluid);
|
||||
return maxBlocks() != -1 && AllConfigs.SERVER.fluids.bottomlessFluidMode.get().test(fluid);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -238,4 +239,31 @@ public abstract class FluidManipulationBehaviour extends TileEntityBehaviour {
|
|||
super.read(nbt, clientPacket);
|
||||
}
|
||||
|
||||
public enum BottomlessFluidMode implements Predicate<Fluid> {
|
||||
ALLOW_ALL {
|
||||
@Override
|
||||
public boolean test(Fluid fluid) {
|
||||
return true;
|
||||
}
|
||||
},
|
||||
DENY_ALL {
|
||||
@Override
|
||||
public boolean test(Fluid fluid) {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
ALLOW_BY_TAG {
|
||||
@Override
|
||||
public boolean test(Fluid fluid) {
|
||||
return AllFluidTags.BOTTOMLESS_ALLOW.matches(fluid);
|
||||
}
|
||||
},
|
||||
DENY_BY_TAG {
|
||||
@Override
|
||||
public boolean test(Fluid fluid) {
|
||||
return !AllFluidTags.BOTTOMLESS_DENY.matches(fluid);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -24,22 +24,49 @@ import net.minecraftforge.registries.ForgeRegistries;
|
|||
|
||||
public class PotionFluid extends VirtualFluid {
|
||||
|
||||
public enum BottleType {
|
||||
REGULAR, SPLASH, LINGERING;
|
||||
}
|
||||
|
||||
public PotionFluid(Properties properties) {
|
||||
super(properties);
|
||||
}
|
||||
|
||||
public static FluidStack withEffects(int amount, Potion potion, List<MobEffectInstance> customEffects) {
|
||||
public static FluidStack of(int amount, Potion potion) {
|
||||
FluidStack fluidStack = new FluidStack(AllFluids.POTION.get()
|
||||
.getSource(), amount);
|
||||
addPotionToFluidStack(fluidStack, potion);
|
||||
return fluidStack;
|
||||
}
|
||||
|
||||
public static FluidStack withEffects(int amount, Potion potion, List<MobEffectInstance> customEffects) {
|
||||
FluidStack fluidStack = of(amount, potion);
|
||||
appendEffects(fluidStack, customEffects);
|
||||
return fluidStack;
|
||||
}
|
||||
|
||||
public static FluidStack addPotionToFluidStack(FluidStack fs, Potion potion) {
|
||||
ResourceLocation resourcelocation = ForgeRegistries.POTIONS.getKey(potion);
|
||||
if (potion == Potions.EMPTY) {
|
||||
fs.removeChildTag("Potion");
|
||||
return fs;
|
||||
}
|
||||
fs.getOrCreateTag()
|
||||
.putString("Potion", resourcelocation.toString());
|
||||
return fs;
|
||||
}
|
||||
|
||||
public static FluidStack appendEffects(FluidStack fs, Collection<MobEffectInstance> customEffects) {
|
||||
if (customEffects.isEmpty())
|
||||
return fs;
|
||||
CompoundTag compoundnbt = fs.getOrCreateTag();
|
||||
ListTag listnbt = compoundnbt.getList("CustomPotionEffects", 9);
|
||||
for (MobEffectInstance effectinstance : customEffects)
|
||||
listnbt.add(effectinstance.save(new CompoundTag()));
|
||||
compoundnbt.put("CustomPotionEffects", listnbt);
|
||||
return fs;
|
||||
}
|
||||
|
||||
public enum BottleType {
|
||||
REGULAR, SPLASH, LINGERING;
|
||||
}
|
||||
|
||||
public static class PotionFluidAttributes extends FluidAttributes {
|
||||
|
||||
public PotionFluidAttributes(Builder builder, Fluid fluid) {
|
||||
|
@ -70,26 +97,4 @@ public class PotionFluid extends VirtualFluid {
|
|||
|
||||
}
|
||||
|
||||
public static FluidStack addPotionToFluidStack(FluidStack fs, Potion potion) {
|
||||
ResourceLocation resourcelocation = ForgeRegistries.POTIONS.getKey(potion);
|
||||
if (potion == Potions.EMPTY) {
|
||||
fs.removeChildTag("Potion");
|
||||
return fs;
|
||||
}
|
||||
fs.getOrCreateTag()
|
||||
.putString("Potion", resourcelocation.toString());
|
||||
return fs;
|
||||
}
|
||||
|
||||
public static FluidStack appendEffects(FluidStack fs, Collection<MobEffectInstance> customEffects) {
|
||||
if (customEffects.isEmpty())
|
||||
return fs;
|
||||
CompoundTag compoundnbt = fs.getOrCreateTag();
|
||||
ListTag listnbt = compoundnbt.getList("CustomPotionEffects", 9);
|
||||
for (MobEffectInstance effectinstance : customEffects)
|
||||
listnbt.add(effectinstance.save(new CompoundTag()));
|
||||
compoundnbt.put("CustomPotionEffects", listnbt);
|
||||
return fs;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -51,16 +51,23 @@ public class PotionFluidHandler {
|
|||
public static FluidStack getFluidFromPotionItem(ItemStack stack) {
|
||||
Potion potion = PotionUtils.getPotion(stack);
|
||||
List<MobEffectInstance> list = PotionUtils.getCustomEffects(stack);
|
||||
FluidStack fluid = PotionFluid.withEffects(250, potion, list);
|
||||
BottleType bottleTypeFromItem = bottleTypeFromItem(stack);
|
||||
BottleType bottleTypeFromItem = bottleTypeFromItem(stack.getItem());
|
||||
if (potion == Potions.WATER && list.isEmpty() && bottleTypeFromItem == BottleType.REGULAR)
|
||||
return new FluidStack(Fluids.WATER, fluid.getAmount());
|
||||
return new FluidStack(Fluids.WATER, 250);
|
||||
FluidStack fluid = PotionFluid.withEffects(250, potion, list);
|
||||
NBTHelper.writeEnum(fluid.getOrCreateTag(), "Bottle", bottleTypeFromItem);
|
||||
return fluid;
|
||||
}
|
||||
|
||||
public static BottleType bottleTypeFromItem(ItemStack stack) {
|
||||
Item item = stack.getItem();
|
||||
public static FluidStack getFluidFromPotion(Potion potion, BottleType bottleType, int amount) {
|
||||
if (potion == Potions.WATER && bottleType == BottleType.REGULAR)
|
||||
return new FluidStack(Fluids.WATER, amount);
|
||||
FluidStack fluid = PotionFluid.of(amount, potion);
|
||||
NBTHelper.writeEnum(fluid.getOrCreateTag(), "Bottle", bottleType);
|
||||
return fluid;
|
||||
}
|
||||
|
||||
public static BottleType bottleTypeFromItem(Item item) {
|
||||
if (item == Items.LINGERING_POTION)
|
||||
return BottleType.LINGERING;
|
||||
if (item == Items.SPLASH_POTION)
|
||||
|
|
|
@ -1,20 +0,0 @@
|
|||
package com.simibubi.create.content.contraptions.fluids.recipe;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.server.packs.resources.ResourceManagerReloadListener;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
|
||||
public class FluidTransferRecipes {
|
||||
|
||||
public static List<ItemStack> POTION_ITEMS = new ArrayList<>();
|
||||
public static List<Item> FILLED_BUCKETS = new ArrayList<>();
|
||||
|
||||
public static final ResourceManagerReloadListener LISTENER = resourceManager -> {
|
||||
POTION_ITEMS.clear();
|
||||
FILLED_BUCKETS.clear();
|
||||
};
|
||||
|
||||
}
|
|
@ -1,147 +0,0 @@
|
|||
package com.simibubi.create.content.contraptions.fluids.recipe;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.simibubi.create.Create;
|
||||
import com.simibubi.create.content.contraptions.components.mixer.MixingRecipe;
|
||||
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 net.minecraft.server.packs.resources.ResourceManagerReloadListener;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.alchemy.Potion;
|
||||
import net.minecraft.world.item.alchemy.PotionBrewing;
|
||||
import net.minecraft.world.item.alchemy.PotionUtils;
|
||||
import net.minecraft.world.item.alchemy.Potions;
|
||||
import net.minecraft.world.item.crafting.Ingredient;
|
||||
import net.minecraftforge.common.brewing.BrewingRecipeRegistry;
|
||||
import net.minecraftforge.common.brewing.IBrewingRecipe;
|
||||
import net.minecraftforge.common.brewing.VanillaBrewingRecipe;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
|
||||
public class PotionMixingRecipeManager {
|
||||
|
||||
public static Map<Item, List<MixingRecipe>> ALL = new HashMap<>();
|
||||
|
||||
public static List<MixingRecipe> getAllBrewingRecipes() {
|
||||
List<MixingRecipe> mixingRecipes = new ArrayList<>();
|
||||
|
||||
// Vanilla
|
||||
for (IBrewingRecipe iBrewingRecipe : BrewingRecipeRegistry.getRecipes()) {
|
||||
if (!(iBrewingRecipe instanceof VanillaBrewingRecipe))
|
||||
continue;
|
||||
|
||||
List<ItemStack> bottles = new ArrayList<>();
|
||||
PotionBrewing.ALLOWED_CONTAINERS.forEach(i -> {
|
||||
for (ItemStack itemStack : i.getItems())
|
||||
bottles.add(itemStack);
|
||||
});
|
||||
|
||||
Collection<ItemStack> reagents = getAllReagents(iBrewingRecipe);
|
||||
|
||||
Set<ItemStack> basicPotions = new HashSet<>();
|
||||
for (Potion potion : ForgeRegistries.POTIONS.getValues()) {
|
||||
if (potion == Potions.EMPTY)
|
||||
continue;
|
||||
for (ItemStack stack : bottles)
|
||||
basicPotions.add(PotionUtils.setPotion(stack.copy(), potion));
|
||||
}
|
||||
|
||||
Set<String> uniqueKeys = new HashSet<>();
|
||||
List<ItemStack> potionFrontier = new ArrayList<>();
|
||||
List<ItemStack> newPotions = new ArrayList<>();
|
||||
potionFrontier.addAll(basicPotions);
|
||||
|
||||
int recipeIndex = 0;
|
||||
|
||||
while (!potionFrontier.isEmpty()) {
|
||||
newPotions.clear();
|
||||
|
||||
for (ItemStack inputPotionStack : potionFrontier) {
|
||||
Potion inputPotion = PotionUtils.getPotion(inputPotionStack);
|
||||
|
||||
for (ItemStack potionReagent : reagents) {
|
||||
ItemStack outputPotionStack = iBrewingRecipe.getOutput(inputPotionStack.copy(), potionReagent);
|
||||
if (outputPotionStack.isEmpty())
|
||||
continue;
|
||||
|
||||
String uniqueKey = potionReagent.getItem()
|
||||
.getRegistryName()
|
||||
.toString() + "_"
|
||||
+ inputPotion.getRegistryName()
|
||||
.toString()
|
||||
+ "_" + inputPotionStack.getItem()
|
||||
.getRegistryName()
|
||||
.toString();
|
||||
|
||||
if (!uniqueKeys.add(uniqueKey))
|
||||
continue;
|
||||
|
||||
if (inputPotionStack.getItem() == outputPotionStack.getItem()) {
|
||||
Potion outputPotion = PotionUtils.getPotion(outputPotionStack);
|
||||
if (outputPotion == Potions.WATER)
|
||||
continue;
|
||||
}
|
||||
|
||||
FluidStack fluidFromPotionItem = PotionFluidHandler.getFluidFromPotionItem(inputPotionStack);
|
||||
FluidStack fluidFromPotionItem2 = PotionFluidHandler.getFluidFromPotionItem(outputPotionStack);
|
||||
fluidFromPotionItem.setAmount(1000);
|
||||
fluidFromPotionItem2.setAmount(1000);
|
||||
|
||||
MixingRecipe mixingRecipe = new ProcessingRecipeBuilder<>(MixingRecipe::new,
|
||||
Create.asResource("potion_" + recipeIndex++)).require(Ingredient.of(potionReagent))
|
||||
.require(FluidIngredient.fromFluidStack(fluidFromPotionItem))
|
||||
.output(fluidFromPotionItem2)
|
||||
.requiresHeat(HeatCondition.HEATED)
|
||||
.build();
|
||||
|
||||
mixingRecipes.add(mixingRecipe);
|
||||
newPotions.add(outputPotionStack);
|
||||
}
|
||||
}
|
||||
|
||||
potionFrontier.clear();
|
||||
potionFrontier.addAll(newPotions);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
// TODO Modded brewing recipes?
|
||||
|
||||
return mixingRecipes;
|
||||
}
|
||||
|
||||
public static Collection<ItemStack> getAllReagents(IBrewingRecipe recipe) {
|
||||
return ForgeRegistries.ITEMS.getValues()
|
||||
.stream()
|
||||
.map(ItemStack::new)
|
||||
.filter(recipe::isIngredient)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public static final ResourceManagerReloadListener LISTENER = resourceManager -> {
|
||||
ALL.clear();
|
||||
getAllBrewingRecipes().forEach(recipe -> {
|
||||
for (Ingredient ingredient : recipe.getIngredients()) {
|
||||
for (ItemStack itemStack : ingredient.getItems()) {
|
||||
ALL.computeIfAbsent(itemStack.getItem(), t -> new ArrayList<>())
|
||||
.add(recipe);
|
||||
return;
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
}
|
|
@ -0,0 +1,141 @@
|
|||
package com.simibubi.create.content.contraptions.fluids.recipe;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import com.simibubi.create.Create;
|
||||
import com.simibubi.create.content.contraptions.components.mixer.MixingRecipe;
|
||||
import com.simibubi.create.content.contraptions.fluids.potion.PotionFluid.BottleType;
|
||||
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 net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.item.alchemy.Potion;
|
||||
import net.minecraft.world.item.alchemy.PotionBrewing;
|
||||
import net.minecraft.world.item.alchemy.Potions;
|
||||
import net.minecraft.world.item.crafting.Ingredient;
|
||||
import net.minecraftforge.common.brewing.BrewingRecipe;
|
||||
import net.minecraftforge.common.brewing.BrewingRecipeRegistry;
|
||||
import net.minecraftforge.common.brewing.IBrewingRecipe;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
|
||||
public class PotionMixingRecipes {
|
||||
|
||||
public static final List<Item> SUPPORTED_CONTAINERS = List.of(Items.POTION, Items.SPLASH_POTION, Items.LINGERING_POTION);
|
||||
|
||||
public static final List<MixingRecipe> ALL = createRecipes();
|
||||
public static final Map<Item, List<MixingRecipe>> BY_ITEM = sortRecipesByItem(ALL);
|
||||
|
||||
private static List<MixingRecipe> createRecipes() {
|
||||
List<MixingRecipe> mixingRecipes = new ArrayList<>();
|
||||
|
||||
int recipeIndex = 0;
|
||||
|
||||
List<Item> allowedSupportedContainers = new ArrayList<>();
|
||||
List<ItemStack> supportedContainerStacks = new ArrayList<>();
|
||||
for (Item container : SUPPORTED_CONTAINERS) {
|
||||
ItemStack stack = new ItemStack(container);
|
||||
supportedContainerStacks.add(stack);
|
||||
if (PotionBrewing.ALLOWED_CONTAINER.test(stack)) {
|
||||
allowedSupportedContainers.add(container);
|
||||
}
|
||||
}
|
||||
|
||||
for (Item container : allowedSupportedContainers) {
|
||||
BottleType bottleType = PotionFluidHandler.bottleTypeFromItem(container);
|
||||
for (PotionBrewing.Mix<Potion> mix : PotionBrewing.POTION_MIXES) {
|
||||
FluidStack fromFluid = PotionFluidHandler.getFluidFromPotion(mix.from.get(), bottleType, 1000);
|
||||
FluidStack toFluid = PotionFluidHandler.getFluidFromPotion(mix.to.get(), bottleType, 1000);
|
||||
|
||||
mixingRecipes.add(createRecipe("potion_mixing_vanilla_" + recipeIndex++, mix.ingredient, fromFluid, toFluid));
|
||||
}
|
||||
}
|
||||
|
||||
for (PotionBrewing.Mix<Item> mix : PotionBrewing.CONTAINER_MIXES) {
|
||||
Item from = mix.from.get();
|
||||
if (!allowedSupportedContainers.contains(from)) {
|
||||
continue;
|
||||
}
|
||||
Item to = mix.to.get();
|
||||
if (!allowedSupportedContainers.contains(to)) {
|
||||
continue;
|
||||
}
|
||||
BottleType fromBottleType = PotionFluidHandler.bottleTypeFromItem(from);
|
||||
BottleType toBottleType = PotionFluidHandler.bottleTypeFromItem(to);
|
||||
Ingredient ingredient = mix.ingredient;
|
||||
|
||||
for (Potion potion : ForgeRegistries.POTIONS.getValues()) {
|
||||
if (potion == Potions.EMPTY) {
|
||||
continue;
|
||||
}
|
||||
|
||||
FluidStack fromFluid = PotionFluidHandler.getFluidFromPotion(potion, fromBottleType, 1000);
|
||||
FluidStack toFluid = PotionFluidHandler.getFluidFromPotion(potion, toBottleType, 1000);
|
||||
|
||||
mixingRecipes.add(createRecipe("potion_mixing_vanilla_" + recipeIndex++, ingredient, fromFluid, toFluid));
|
||||
}
|
||||
}
|
||||
|
||||
recipeIndex = 0;
|
||||
for (IBrewingRecipe recipe : BrewingRecipeRegistry.getRecipes()) {
|
||||
if (recipe instanceof BrewingRecipe recipeImpl) {
|
||||
ItemStack output = recipeImpl.getOutput();
|
||||
if (!SUPPORTED_CONTAINERS.contains(output.getItem())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
Ingredient input = recipeImpl.getInput();
|
||||
Ingredient ingredient = recipeImpl.getIngredient();
|
||||
FluidStack outputFluid = null;
|
||||
for (ItemStack stack : supportedContainerStacks) {
|
||||
if (input.test(stack)) {
|
||||
FluidStack inputFluid = PotionFluidHandler.getFluidFromPotionItem(stack);
|
||||
if (outputFluid == null) {
|
||||
outputFluid = PotionFluidHandler.getFluidFromPotionItem(output);
|
||||
}
|
||||
mixingRecipes.add(createRecipe("potion_mixing_modded_" + recipeIndex++, ingredient, inputFluid, outputFluid));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return mixingRecipes;
|
||||
}
|
||||
|
||||
private static MixingRecipe createRecipe(String id, Ingredient ingredient, FluidStack fromFluid, FluidStack toFluid) {
|
||||
return new ProcessingRecipeBuilder<>(MixingRecipe::new,
|
||||
Create.asResource(id)).require(ingredient)
|
||||
.require(FluidIngredient.fromFluidStack(fromFluid))
|
||||
.output(toFluid)
|
||||
.requiresHeat(HeatCondition.HEATED)
|
||||
.build();
|
||||
}
|
||||
|
||||
private static Map<Item, List<MixingRecipe>> sortRecipesByItem(List<MixingRecipe> all) {
|
||||
Map<Item, List<MixingRecipe>> byItem = new HashMap<>();
|
||||
Set<Item> processedItems = new HashSet<>();
|
||||
for (MixingRecipe recipe : all) {
|
||||
for (Ingredient ingredient : recipe.getIngredients()) {
|
||||
for (ItemStack itemStack : ingredient.getItems()) {
|
||||
Item item = itemStack.getItem();
|
||||
if (processedItems.add(item)) {
|
||||
byItem.computeIfAbsent(item, i -> new ArrayList<>())
|
||||
.add(recipe);
|
||||
}
|
||||
}
|
||||
}
|
||||
processedItems.clear();
|
||||
}
|
||||
return byItem;
|
||||
}
|
||||
|
||||
}
|
|
@ -23,7 +23,7 @@ import net.minecraftforge.client.model.data.ModelProperty;
|
|||
|
||||
public class FluidTankModel extends CTModel {
|
||||
|
||||
protected static ModelProperty<CullData> CULL_PROPERTY = new ModelProperty<>();
|
||||
protected static final ModelProperty<CullData> CULL_PROPERTY = new ModelProperty<>();
|
||||
|
||||
public static FluidTankModel standard(BakedModel originalModel) {
|
||||
return new FluidTankModel(originalModel, AllSpriteShifts.FLUID_TANK, AllSpriteShifts.COPPER_CASING);
|
||||
|
|
|
@ -15,7 +15,7 @@ import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuild
|
|||
|
||||
import net.minecraft.data.recipes.FinishedRecipe;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.tags.Tag;
|
||||
import net.minecraft.tags.TagKey;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.crafting.Ingredient;
|
||||
|
@ -52,7 +52,7 @@ public class SequencedAssemblyRecipeBuilder {
|
|||
return require(Ingredient.of(ingredient));
|
||||
}
|
||||
|
||||
public SequencedAssemblyRecipeBuilder require(Tag.Named<Item> tag) {
|
||||
public SequencedAssemblyRecipeBuilder require(TagKey<Item> tag) {
|
||||
return require(Ingredient.of(tag));
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package com.simibubi.create.content.contraptions.particle;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import com.simibubi.create.Create;
|
||||
import com.simibubi.create.content.contraptions.components.fan.IAirCurrentSource;
|
||||
import com.simibubi.create.content.contraptions.processing.InWorldProcessing;
|
||||
|
@ -7,7 +9,11 @@ import com.simibubi.create.foundation.utility.Color;
|
|||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
import net.minecraft.client.multiplayer.ClientLevel;
|
||||
import net.minecraft.client.particle.*;
|
||||
import net.minecraft.client.particle.Particle;
|
||||
import net.minecraft.client.particle.ParticleProvider;
|
||||
import net.minecraft.client.particle.ParticleRenderType;
|
||||
import net.minecraft.client.particle.SimpleAnimatedParticle;
|
||||
import net.minecraft.client.particle.SpriteSet;
|
||||
import net.minecraft.client.renderer.LevelRenderer;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.particles.BlockParticleOption;
|
||||
|
@ -17,8 +23,6 @@ import net.minecraft.world.level.block.Blocks;
|
|||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
public class AirFlowParticle extends SimpleAnimatedParticle {
|
||||
|
||||
private final IAirCurrentSource source;
|
||||
|
|
|
@ -13,7 +13,7 @@ import net.minecraft.world.level.block.entity.BlockEntity;
|
|||
import net.minecraft.world.phys.Vec3;
|
||||
import net.minecraftforge.items.ItemStackHandler;
|
||||
|
||||
public class BasinMovementBehaviour extends MovementBehaviour {
|
||||
public class BasinMovementBehaviour implements MovementBehaviour {
|
||||
public Map<String, ItemStackHandler> getOrReadInventory(MovementContext context) {
|
||||
Map<String, ItemStackHandler> map = new HashMap<>();
|
||||
map.put("InputItems", new ItemStackHandler(9));
|
||||
|
@ -29,7 +29,7 @@ public class BasinMovementBehaviour extends MovementBehaviour {
|
|||
|
||||
@Override
|
||||
public void tick(MovementContext context) {
|
||||
super.tick(context);
|
||||
MovementBehaviour.super.tick(context);
|
||||
if (context.temporaryData == null || (boolean) context.temporaryData) {
|
||||
Vec3 facingVec = context.rotation.apply(Vec3.atLowerCornerOf(Direction.UP.getNormal()));
|
||||
facingVec.normalize();
|
||||
|
|
|
@ -76,13 +76,9 @@ public class InWorldProcessing {
|
|||
if (compound.contains("Processing")) {
|
||||
CompoundTag processing = compound.getCompound("Processing");
|
||||
|
||||
if (Type.valueOf(processing.getString("Type")) != type) {
|
||||
boolean canProcess = type.canProcess(entity.getItem(), entity.level);
|
||||
processing.putString("Type", type.name());
|
||||
if (!canProcess)
|
||||
processing.putInt("Time", -1);
|
||||
return canProcess;
|
||||
} else if (processing.getInt("Time") >= 0)
|
||||
if (Type.valueOf(processing.getString("Type")) != type)
|
||||
return type.canProcess(entity.getItem(), entity.level);
|
||||
else if (processing.getInt("Time") >= 0)
|
||||
return true;
|
||||
else if (processing.getInt("Time") == -1)
|
||||
return false;
|
||||
|
@ -296,8 +292,8 @@ public class InWorldProcessing {
|
|||
}
|
||||
if (entity.isOnFire()) {
|
||||
entity.clearFire();
|
||||
level.playSound(null, entity.blockPosition(), SoundEvents.GENERIC_EXTINGUISH_FIRE, SoundSource.NEUTRAL,
|
||||
0.7F, 1.6F + (level.random.nextFloat() - level.random.nextFloat()) * 0.4F);
|
||||
level.playSound(null, entity.blockPosition(), SoundEvents.GENERIC_EXTINGUISH_FIRE,
|
||||
SoundSource.NEUTRAL, 0.7F, 1.6F + (level.random.nextFloat() - level.random.nextFloat()) * 0.4F);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -445,12 +441,10 @@ public class InWorldProcessing {
|
|||
},
|
||||
NONE {
|
||||
@Override
|
||||
public void spawnParticlesForProcessing(Level level, Vec3 pos) {
|
||||
}
|
||||
public void spawnParticlesForProcessing(Level level, Vec3 pos) {}
|
||||
|
||||
@Override
|
||||
public void affectEntity(Entity entity, Level level) {
|
||||
}
|
||||
public void affectEntity(Entity entity, Level level) {}
|
||||
|
||||
@Override
|
||||
public boolean canProcess(ItemStack stack, Level level) {
|
||||
|
@ -473,14 +467,18 @@ public class InWorldProcessing {
|
|||
if (block == Blocks.SOUL_FIRE
|
||||
|| block == Blocks.SOUL_CAMPFIRE && blockState.getOptionalValue(CampfireBlock.LIT)
|
||||
.orElse(false)
|
||||
|| AllBlocks.LIT_BLAZE_BURNER.has(blockState) && blockState.getOptionalValue(LitBlazeBurnerBlock.FLAME_TYPE)
|
||||
.map(flame -> flame == LitBlazeBurnerBlock.FlameType.SOUL).orElse(false))
|
||||
|| AllBlocks.LIT_BLAZE_BURNER.has(blockState)
|
||||
&& blockState.getOptionalValue(LitBlazeBurnerBlock.FLAME_TYPE)
|
||||
.map(flame -> flame == LitBlazeBurnerBlock.FlameType.SOUL)
|
||||
.orElse(false))
|
||||
return Type.HAUNTING;
|
||||
if (block == Blocks.FIRE
|
||||
|| BlockTags.CAMPFIRES.contains(block) && blockState.getOptionalValue(CampfireBlock.LIT)
|
||||
if (block == Blocks.FIRE || blockState.is(BlockTags.CAMPFIRES)
|
||||
&& blockState.getOptionalValue(CampfireBlock.LIT)
|
||||
.orElse(false)
|
||||
|| AllBlocks.LIT_BLAZE_BURNER.has(blockState) && blockState.getOptionalValue(LitBlazeBurnerBlock.FLAME_TYPE)
|
||||
.map(flame -> flame == LitBlazeBurnerBlock.FlameType.REGULAR).orElse(false)
|
||||
|| AllBlocks.LIT_BLAZE_BURNER.has(blockState)
|
||||
&& blockState.getOptionalValue(LitBlazeBurnerBlock.FLAME_TYPE)
|
||||
.map(flame -> flame == LitBlazeBurnerBlock.FlameType.REGULAR)
|
||||
.orElse(false)
|
||||
|| getHeatLevelOf(blockState) == BlazeBurnerBlock.HeatLevel.SMOULDERING)
|
||||
return Type.SMOKING;
|
||||
if (block == Blocks.LAVA || getHeatLevelOf(blockState).isAtLeast(BlazeBurnerBlock.HeatLevel.FADING))
|
||||
|
|
|
@ -14,7 +14,7 @@ import com.simibubi.create.foundation.utility.recipe.IRecipeTypeInfo;
|
|||
import net.minecraft.core.NonNullList;
|
||||
import net.minecraft.data.recipes.FinishedRecipe;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.tags.Tag;
|
||||
import net.minecraft.tags.TagKey;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.crafting.Ingredient;
|
||||
|
@ -103,7 +103,7 @@ public class ProcessingRecipeBuilder<T extends ProcessingRecipe<?>> {
|
|||
|
||||
// Datagen shortcuts
|
||||
|
||||
public ProcessingRecipeBuilder<T> require(Tag.Named<Item> tag) {
|
||||
public ProcessingRecipeBuilder<T> require(TagKey<Item> tag) {
|
||||
return require(Ingredient.of(tag));
|
||||
}
|
||||
|
||||
|
@ -120,7 +120,7 @@ public class ProcessingRecipeBuilder<T extends ProcessingRecipe<?>> {
|
|||
return require(FluidIngredient.fromFluid(fluid, amount));
|
||||
}
|
||||
|
||||
public ProcessingRecipeBuilder<T> require(Tag.Named<Fluid> fluidTag, int amount) {
|
||||
public ProcessingRecipeBuilder<T> require(TagKey<Fluid> fluidTag, int amount) {
|
||||
return require(FluidIngredient.fromTag(fluidTag, amount));
|
||||
}
|
||||
|
||||
|
|
|
@ -16,7 +16,6 @@ import net.minecraft.core.particles.ParticleTypes;
|
|||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.sounds.SoundEvents;
|
||||
import net.minecraft.sounds.SoundSource;
|
||||
import net.minecraft.util.random.SimpleWeightedRandomList;
|
||||
import net.minecraft.util.random.WeightedEntry.Wrapper;
|
||||
import net.minecraft.world.InteractionHand;
|
||||
import net.minecraft.world.InteractionResult;
|
||||
|
@ -36,7 +35,6 @@ import net.minecraft.world.level.block.Block;
|
|||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
import net.minecraft.world.level.block.entity.SpawnerBlockEntity;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
import net.minecraftforge.fml.util.ObfuscationReflectionHelper;
|
||||
|
||||
@MethodsReturnNonnullByDefault
|
||||
@ParametersAreNonnullByDefault
|
||||
|
@ -90,17 +88,15 @@ public class BlazeBurnerBlockItem extends BlockItem {
|
|||
return super.useOn(context);
|
||||
|
||||
BaseSpawner spawner = ((SpawnerBlockEntity) te).getSpawner();
|
||||
SimpleWeightedRandomList<SpawnData> spawnPotentials =
|
||||
ObfuscationReflectionHelper.getPrivateValue(BaseSpawner.class, spawner, "f_45443_"); // spawnPotentials
|
||||
|
||||
List<SpawnData> possibleSpawns = spawnPotentials.unwrap()
|
||||
List<SpawnData> possibleSpawns = spawner.spawnPotentials.unwrap()
|
||||
.stream()
|
||||
.map(Wrapper::getData)
|
||||
.toList();
|
||||
|
||||
if (possibleSpawns.isEmpty()) {
|
||||
possibleSpawns = new ArrayList<>();
|
||||
possibleSpawns.add(ObfuscationReflectionHelper.getPrivateValue(BaseSpawner.class, spawner, "f_45444_")); // nextSpawnData
|
||||
possibleSpawns.add(spawner.nextSpawnData);
|
||||
}
|
||||
|
||||
ResourceLocation blazeId = EntityType.BLAZE.getRegistryName();
|
||||
|
|
|
@ -4,6 +4,7 @@ import java.util.List;
|
|||
import java.util.Random;
|
||||
|
||||
import com.simibubi.create.AllItems;
|
||||
import com.simibubi.create.AllTags.AllItemTags;
|
||||
import com.simibubi.create.content.contraptions.particle.CubeParticleData;
|
||||
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock.HeatLevel;
|
||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||
|
@ -169,13 +170,17 @@ public class BlazeBurnerTileEntity extends SmartTileEntity {
|
|||
FuelType newFuel = FuelType.NONE;
|
||||
int newBurnTime;
|
||||
|
||||
if (AllItems.BLAZE_CAKE.isIn(itemStack)) {
|
||||
if (AllItemTags.BLAZE_BURNER_FUEL_SPECIAL.matches(itemStack)) {
|
||||
newBurnTime = 1000;
|
||||
newFuel = FuelType.SPECIAL;
|
||||
} else {
|
||||
newBurnTime = ForgeHooks.getBurnTime(itemStack, null);
|
||||
if (newBurnTime > 0)
|
||||
newFuel = FuelType.NORMAL;
|
||||
else if (AllItemTags.BLAZE_BURNER_FUEL_REGULAR.matches(itemStack)) {
|
||||
newBurnTime = 1600; // Same as coal
|
||||
newFuel = FuelType.NORMAL;
|
||||
}
|
||||
}
|
||||
|
||||
if (newFuel == FuelType.NONE)
|
||||
|
|
|
@ -130,7 +130,8 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE<BeltTileEnt
|
|||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getCloneItemStack(BlockState state, HitResult target, BlockGetter world, BlockPos pos, Player player) {
|
||||
public ItemStack getCloneItemStack(BlockState state, HitResult target, BlockGetter world, BlockPos pos,
|
||||
Player player) {
|
||||
return AllItems.BELT_CONNECTOR.asStack();
|
||||
}
|
||||
|
||||
|
@ -249,7 +250,7 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE<BeltTileEnt
|
|||
boolean isWrench = AllItems.WRENCH.isIn(heldItem);
|
||||
boolean isConnector = AllItems.BELT_CONNECTOR.isIn(heldItem);
|
||||
boolean isShaft = AllBlocks.SHAFT.isIn(heldItem);
|
||||
boolean isDye = Tags.Items.DYES.contains(heldItem.getItem());
|
||||
boolean isDye = heldItem.is(Tags.Items.DYES);
|
||||
boolean hasWater = EmptyingByBasin.emptyItem(world, heldItem, true)
|
||||
.getFirst()
|
||||
.getFluid()
|
||||
|
@ -603,7 +604,8 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE<BeltTileEnt
|
|||
|
||||
public static class RenderProperties extends ReducedDestroyEffects implements DestroyProgressRenderingHandler {
|
||||
@Override
|
||||
public boolean renderDestroyProgress(ClientLevel level, LevelRenderer renderer, int breakerId, BlockPos pos, int progress, BlockState blockState) {
|
||||
public boolean renderDestroyProgress(ClientLevel level, LevelRenderer renderer, int breakerId, BlockPos pos,
|
||||
int progress, BlockState blockState) {
|
||||
BlockEntity blockEntity = level.getBlockEntity(pos);
|
||||
if (blockEntity instanceof BeltTileEntity belt) {
|
||||
for (BlockPos beltPos : BeltBlock.getBeltChain(level, belt.getController())) {
|
||||
|
|
|
@ -17,7 +17,7 @@ public class BeltHelper {
|
|||
|
||||
public static boolean isItemUpright(ItemStack stack) {
|
||||
return stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY)
|
||||
.isPresent() || stack.is(AllItemTags.UPRIGHT_ON_BELT.tag);
|
||||
.isPresent() || AllItemTags.UPRIGHT_ON_BELT.matches(stack);
|
||||
}
|
||||
|
||||
public static BeltTileEntity getSegmentTE(LevelAccessor world, BlockPos pos) {
|
||||
|
|
|
@ -58,10 +58,10 @@ public class BeltInventory {
|
|||
belt.setChanged();
|
||||
belt.sendData();
|
||||
}
|
||||
|
||||
|
||||
if (belt.getSpeed() == 0)
|
||||
return;
|
||||
|
||||
|
||||
// Reverse item collection if belt just reversed
|
||||
if (beltMovementPositive != belt.getDirectionAwareBeltMovementSpeed() > 0) {
|
||||
beltMovementPositive = !beltMovementPositive;
|
||||
|
@ -107,7 +107,7 @@ public class BeltInventory {
|
|||
// Don't move if held by processing (client)
|
||||
if (world.isClientSide && currentItem.locked)
|
||||
continue;
|
||||
|
||||
|
||||
// Don't move if held by external components
|
||||
if (currentItem.lockedExternally) {
|
||||
currentItem.lockedExternally = false;
|
||||
|
@ -149,7 +149,11 @@ public class BeltInventory {
|
|||
if (currentItem.locked)
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
// Belt Funnels
|
||||
if (BeltFunnelInteractionHandler.checkForFunnels(this, currentItem, nextOffset))
|
||||
continue;
|
||||
|
||||
if (noMovement)
|
||||
continue;
|
||||
|
||||
|
@ -157,10 +161,6 @@ public class BeltInventory {
|
|||
if (BeltTunnelInteractionHandler.flapTunnelsAndCheckIfStuck(this, currentItem, nextOffset))
|
||||
continue;
|
||||
|
||||
// Belt Funnels
|
||||
if (BeltFunnelInteractionHandler.checkForFunnels(this, currentItem, nextOffset))
|
||||
continue;
|
||||
|
||||
// Horizontal Crushing Wheels
|
||||
if (BeltCrusherInteractionHandler.checkForCrushers(this, currentItem, nextOffset))
|
||||
continue;
|
||||
|
@ -216,7 +216,8 @@ public class BeltInventory {
|
|||
}
|
||||
}
|
||||
|
||||
protected boolean handleBeltProcessingAndCheckIfRemoved(TransportedItemStack currentItem, float nextOffset, boolean noMovement) {
|
||||
protected boolean handleBeltProcessingAndCheckIfRemoved(TransportedItemStack currentItem, float nextOffset,
|
||||
boolean noMovement) {
|
||||
int currentSegment = (int) currentItem.beltPosition;
|
||||
|
||||
// Continue processing if held
|
||||
|
@ -243,7 +244,7 @@ public class BeltInventory {
|
|||
belt.sendData();
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
if (noMovement)
|
||||
return false;
|
||||
|
||||
|
@ -314,8 +315,9 @@ public class BeltInventory {
|
|||
if (inputBehaviour != null)
|
||||
return Ending.INSERT;
|
||||
|
||||
if (BlockHelper.hasBlockSolidSide(world.getBlockState(nextPosition), world, nextPosition, belt.getMovementFacing()
|
||||
.getOpposite()))
|
||||
if (BlockHelper.hasBlockSolidSide(world.getBlockState(nextPosition), world, nextPosition,
|
||||
belt.getMovementFacing()
|
||||
.getOpposite()))
|
||||
return Ending.BLOCKED;
|
||||
|
||||
return Ending.EJECT;
|
||||
|
@ -404,9 +406,11 @@ public class BeltInventory {
|
|||
ItemStack ejected = stack.stack;
|
||||
Vec3 outPos = BeltHelper.getVectorForOffset(belt, stack.beltPosition);
|
||||
float movementSpeed = Math.max(Math.abs(belt.getBeltMovementSpeed()), 1 / 8f);
|
||||
Vec3 outMotion = Vec3.atLowerCornerOf(belt.getBeltChainDirection()).scale(movementSpeed)
|
||||
Vec3 outMotion = Vec3.atLowerCornerOf(belt.getBeltChainDirection())
|
||||
.scale(movementSpeed)
|
||||
.add(0, 1 / 8f, 0);
|
||||
outPos = outPos.add(outMotion.normalize().scale(0.001));
|
||||
outPos = outPos.add(outMotion.normalize()
|
||||
.scale(0.001));
|
||||
ItemEntity entity = new ItemEntity(belt.getLevel(), outPos.x, outPos.y + 6 / 16f, outPos.z, ejected);
|
||||
entity.setDeltaMovement(outMotion);
|
||||
entity.setDefaultPickUpDelay();
|
||||
|
@ -428,7 +432,7 @@ public class BeltInventory {
|
|||
if (Math.abs(position - transported.beltPosition) >= maxDistanceToPosition)
|
||||
continue;
|
||||
TransportedResult result = processFunction.apply(transported);
|
||||
if (result == null|| result.didntChangeFrom(stackBefore))
|
||||
if (result == null || result.didntChangeFrom(stackBefore))
|
||||
continue;
|
||||
|
||||
dirty = true;
|
||||
|
@ -449,5 +453,5 @@ public class BeltInventory {
|
|||
public List<TransportedItemStack> getTransportedItems() {
|
||||
return items;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@ public class SimpleKineticTileEntity extends KineticTileEntity {
|
|||
|
||||
BlockPos.betweenClosedStream(new BlockPos(-1, -1, -1), new BlockPos(1, 1, 1))
|
||||
.forEach(offset -> {
|
||||
if (offset.distSqr(0, 0, 0, false) == BlockPos.ZERO.distSqr(1, 1, 0, false))
|
||||
if (offset.distSqr(BlockPos.ZERO) == 2)
|
||||
neighbours.add(worldPosition.offset(offset));
|
||||
});
|
||||
return neighbours;
|
||||
|
|
|
@ -12,6 +12,7 @@ import com.simibubi.create.foundation.block.ITE;
|
|||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.core.Direction.Axis;
|
||||
import net.minecraft.core.NonNullList;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.nbt.ListTag;
|
||||
import net.minecraft.network.chat.Component;
|
||||
|
@ -23,6 +24,7 @@ import net.minecraft.world.entity.EquipmentSlot;
|
|||
import net.minecraft.world.entity.LivingEntity;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.BlockItem;
|
||||
import net.minecraft.world.item.CreativeModeTab;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.context.BlockPlaceContext;
|
||||
import net.minecraft.world.item.enchantment.EnchantmentHelper;
|
||||
|
@ -63,7 +65,10 @@ public class CopperBacktankBlock extends HorizontalKineticBlock
|
|||
builder.add(BlockStateProperties.WATERLOGGED);
|
||||
super.createBlockStateDefinition(builder);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void fillItemCategory(CreativeModeTab pTab, NonNullList<ItemStack> pItems) {}
|
||||
|
||||
@Override
|
||||
public boolean hasAnalogOutputSignal(BlockState p_149740_1_) {
|
||||
return true;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package com.simibubi.create.content.curiosities.armor;
|
||||
|
||||
import com.simibubi.create.content.curiosities.armor.CapacityEnchantment.ICapacityEnchantable;
|
||||
import com.tterrag.registrate.util.entry.ItemEntry;
|
||||
|
||||
import net.minecraft.core.NonNullList;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
|
@ -11,27 +12,29 @@ import net.minecraft.world.item.BlockItem;
|
|||
import net.minecraft.world.item.CreativeModeTab;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.context.UseOnContext;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
|
||||
public class CopperBacktankItem extends CopperArmorItem implements ICapacityEnchantable {
|
||||
|
||||
public static final int DURABILITY_BAR = 0xEFEFEF;
|
||||
private BlockItem blockItem;
|
||||
private ItemEntry<CopperBacktankBlockItem> blockItem;
|
||||
|
||||
public CopperBacktankItem(Properties p_i48534_3_, BlockItem blockItem) {
|
||||
public CopperBacktankItem(Properties p_i48534_3_, ItemEntry<CopperBacktankBlockItem> copperBacktankPlaceable) {
|
||||
super(EquipmentSlot.CHEST, p_i48534_3_);
|
||||
this.blockItem = blockItem;
|
||||
this.blockItem = copperBacktankPlaceable;
|
||||
}
|
||||
|
||||
@Override
|
||||
public InteractionResult useOn(UseOnContext p_195939_1_) {
|
||||
return blockItem.useOn(p_195939_1_);
|
||||
return blockItem.get()
|
||||
.useOn(p_195939_1_);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBeDepleted() {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean isEnchantable(ItemStack p_77616_1_) {
|
||||
return true;
|
||||
|
@ -41,7 +44,7 @@ public class CopperBacktankItem extends CopperArmorItem implements ICapacityEnch
|
|||
public void fillItemCategory(CreativeModeTab p_150895_1_, NonNullList<ItemStack> p_150895_2_) {
|
||||
if (!allowdedIn(p_150895_1_))
|
||||
return;
|
||||
|
||||
|
||||
ItemStack stack = new ItemStack(this);
|
||||
CompoundTag nbt = new CompoundTag();
|
||||
nbt.putInt("Air", BackTankUtil.maxAirWithoutEnchants());
|
||||
|
@ -68,5 +71,21 @@ public class CopperBacktankItem extends CopperArmorItem implements ICapacityEnch
|
|||
CompoundTag orCreateTag = stack.getOrCreateTag();
|
||||
return orCreateTag.getInt("Air");
|
||||
}
|
||||
|
||||
|
||||
public static class CopperBacktankBlockItem extends BlockItem {
|
||||
|
||||
public CopperBacktankBlockItem(Block pBlock, Properties pProperties) {
|
||||
super(pBlock, pProperties);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fillItemCategory(CreativeModeTab pGroup, NonNullList<ItemStack> pItems) {}
|
||||
|
||||
@Override
|
||||
public String getDescriptionId() {
|
||||
return this.getOrCreateDescriptionId();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -11,7 +11,6 @@ import net.minecraft.world.phys.Vec3;
|
|||
import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
||||
import net.minecraftforge.fml.util.ObfuscationReflectionHelper;
|
||||
|
||||
@EventBusSubscriber
|
||||
public class DivingBootsItem extends CopperArmorItem {
|
||||
|
@ -27,7 +26,7 @@ public class DivingBootsItem extends CopperArmorItem {
|
|||
return;
|
||||
|
||||
Vec3 motion = entity.getDeltaMovement();
|
||||
Boolean isJumping = ObfuscationReflectionHelper.getPrivateValue(LivingEntity.class, entity, "f_20899_"); // jumping
|
||||
boolean isJumping = entity.jumping;
|
||||
entity.setOnGround(entity.isOnGround() || entity.verticalCollision);
|
||||
|
||||
if (isJumping && entity.isOnGround()) {
|
||||
|
|
|
@ -11,12 +11,12 @@ import net.minecraft.client.multiplayer.ClientLevel;
|
|||
import net.minecraft.client.particle.Particle;
|
||||
import net.minecraft.client.particle.ParticleEngine;
|
||||
import net.minecraft.client.particle.SpriteSet;
|
||||
import net.minecraft.core.Registry;
|
||||
import net.minecraft.core.particles.ParticleOptions;
|
||||
import net.minecraft.core.particles.ParticleType;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
|
||||
@ParametersAreNonnullByDefault
|
||||
@MethodsReturnNonnullByDefault
|
||||
|
@ -61,7 +61,7 @@ public abstract class BasicParticleData<T extends Particle> implements ParticleO
|
|||
|
||||
@Override
|
||||
public String writeToString() {
|
||||
return Registry.PARTICLE_TYPE.getKey(getType()).toString();
|
||||
return ForgeRegistries.PARTICLE_TYPES.getKey(getType()).toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -119,7 +119,7 @@ public class SoulPulseEffect {
|
|||
for (int z = 0; z < MAX_DISTANCE; z++) {
|
||||
BlockPos candidate = new BlockPos(x, y, z);
|
||||
|
||||
int dist = (int) Math.round(Math.sqrt(candidate.distSqr(0, 0, 0, false)));
|
||||
int dist = (int) Math.round(Math.sqrt(candidate.distSqr(BlockPos.ZERO)));
|
||||
if (dist > MAX_DISTANCE)
|
||||
continue;
|
||||
if (dist <= 0)
|
||||
|
|
|
@ -13,6 +13,7 @@ import net.minecraft.core.NonNullList;
|
|||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.nbt.ListTag;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.tags.ItemTags;
|
||||
import net.minecraft.util.GsonHelper;
|
||||
import net.minecraft.world.InteractionResult;
|
||||
import net.minecraft.world.entity.EntityType;
|
||||
|
@ -26,10 +27,9 @@ import net.minecraft.world.item.crafting.Ingredient.ItemValue;
|
|||
import net.minecraft.world.item.crafting.Ingredient.TagValue;
|
||||
import net.minecraft.world.item.crafting.Ingredient.Value;
|
||||
import net.minecraft.world.item.crafting.Recipe;
|
||||
import net.minecraft.world.item.crafting.ShapedRecipe;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraftforge.common.crafting.IShapedRecipe;
|
||||
import net.minecraftforge.common.crafting.MultiItemValue;
|
||||
import net.minecraftforge.fml.util.ObfuscationReflectionHelper;
|
||||
import net.minecraftforge.items.ItemStackHandler;
|
||||
|
||||
public class BlueprintItem extends Item {
|
||||
|
@ -79,12 +79,12 @@ public class BlueprintItem extends Item {
|
|||
inv.setStackInSlot(i, ItemStack.EMPTY);
|
||||
inv.setStackInSlot(9, recipe.getResultItem());
|
||||
|
||||
if (recipe instanceof ShapedRecipe) {
|
||||
ShapedRecipe shapedRecipe = (ShapedRecipe) recipe;
|
||||
for (int row = 0; row < shapedRecipe.getHeight(); row++)
|
||||
for (int col = 0; col < shapedRecipe.getWidth(); col++)
|
||||
if (recipe instanceof IShapedRecipe) {
|
||||
IShapedRecipe<?> shapedRecipe = (IShapedRecipe<?>) recipe;
|
||||
for (int row = 0; row < shapedRecipe.getRecipeHeight(); row++)
|
||||
for (int col = 0; col < shapedRecipe.getRecipeWidth(); col++)
|
||||
inv.setStackInSlot(row * 3 + col,
|
||||
convertIngredientToFilter(ingredients.get(row * shapedRecipe.getWidth() + col)));
|
||||
convertIngredientToFilter(ingredients.get(row * shapedRecipe.getRecipeWidth() + col)));
|
||||
} else {
|
||||
for (int i = 0; i < ingredients.size(); i++)
|
||||
inv.setStackInSlot(i, convertIngredientToFilter(ingredients.get(i)));
|
||||
|
@ -92,8 +92,7 @@ public class BlueprintItem extends Item {
|
|||
}
|
||||
|
||||
private static ItemStack convertIngredientToFilter(Ingredient ingredient) {
|
||||
Ingredient.Value[] acceptedItems =
|
||||
ObfuscationReflectionHelper.getPrivateValue(Ingredient.class, ingredient, "f_43902_"); // values
|
||||
Ingredient.Value[] acceptedItems = ingredient.values;
|
||||
if (acceptedItems == null || acceptedItems.length > 18)
|
||||
return ItemStack.EMPTY;
|
||||
if (acceptedItems.length == 0)
|
||||
|
@ -123,7 +122,7 @@ public class BlueprintItem extends Item {
|
|||
filterItem.getOrCreateTag()
|
||||
.putInt("WhitelistMode", WhitelistMode.WHITELIST_DISJ.ordinal());
|
||||
ListTag attributes = new ListTag();
|
||||
ItemAttribute at = new ItemAttribute.InTag(resourcelocation);
|
||||
ItemAttribute at = new ItemAttribute.InTag(ItemTags.create(resourcelocation));
|
||||
CompoundTag compoundNBT = new CompoundTag();
|
||||
at.serializeNBT(compoundNBT);
|
||||
compoundNBT.putBoolean("Inverted", false);
|
||||
|
|
|
@ -24,14 +24,11 @@ import net.minecraft.ChatFormatting;
|
|||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.nbt.ListTag;
|
||||
import net.minecraft.tags.ItemTags;
|
||||
import net.minecraft.tags.Tag;
|
||||
import net.minecraft.world.inventory.CraftingContainer;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.item.crafting.CraftingRecipe;
|
||||
import net.minecraft.world.item.crafting.Ingredient;
|
||||
import net.minecraft.world.item.crafting.RecipeType;
|
||||
import net.minecraft.world.phys.EntityHitResult;
|
||||
import net.minecraft.world.phys.HitResult;
|
||||
|
@ -40,6 +37,9 @@ import net.minecraftforge.client.gui.ForgeIngameGui;
|
|||
import net.minecraftforge.client.gui.IIngameOverlay;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
import net.minecraftforge.items.ItemStackHandler;
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
import net.minecraftforge.registries.tags.ITag;
|
||||
import net.minecraftforge.registries.tags.ITagManager;
|
||||
|
||||
public class BlueprintOverlayRenderer {
|
||||
|
||||
|
@ -206,7 +206,8 @@ public class BlueprintOverlayRenderer {
|
|||
}
|
||||
}
|
||||
|
||||
public static void renderOverlay(ForgeIngameGui gui, PoseStack poseStack, float partialTicks, int width, int height) {
|
||||
public static void renderOverlay(ForgeIngameGui gui, PoseStack poseStack, float partialTicks, int width,
|
||||
int height) {
|
||||
if (!active || empty)
|
||||
return;
|
||||
|
||||
|
@ -277,13 +278,20 @@ public class BlueprintOverlayRenderer {
|
|||
ListTag attributes = tag.getList("MatchedAttributes", net.minecraft.nbt.Tag.TAG_COMPOUND);
|
||||
if (whitelistMode == WhitelistMode.WHITELIST_DISJ && attributes.size() == 1) {
|
||||
ItemAttribute fromNBT = ItemAttribute.fromNBT((CompoundTag) attributes.get(0));
|
||||
if (fromNBT instanceof ItemAttribute.InTag) {
|
||||
ItemAttribute.InTag inTag = (ItemAttribute.InTag) fromNBT;
|
||||
Tag<Item> itag = ItemTags.getAllTags()
|
||||
.getTag(inTag.tagName);
|
||||
if (itag != null)
|
||||
return Ingredient.of(itag)
|
||||
.getItems();
|
||||
if (fromNBT instanceof ItemAttribute.InTag inTag) {
|
||||
ITagManager<Item> tagManager = ForgeRegistries.ITEMS.tags();
|
||||
if (tagManager.isKnownTagName(inTag.tag)) {
|
||||
ITag<Item> taggedItems = tagManager.getTag(inTag.tag);
|
||||
if (!taggedItems.isEmpty()) {
|
||||
ItemStack[] stacks = new ItemStack[taggedItems.size()];
|
||||
int i = 0;
|
||||
for (Item item : taggedItems) {
|
||||
stacks[i] = new ItemStack(item);
|
||||
i++;
|
||||
}
|
||||
return stacks;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ import javax.annotation.ParametersAreNonnullByDefault;
|
|||
import com.simibubi.create.AllSoundEvents;
|
||||
import com.simibubi.create.foundation.item.CustomUseEffectsItem;
|
||||
import com.simibubi.create.foundation.item.render.SimpleCustomRenderer;
|
||||
import com.simibubi.create.foundation.mixin.accessor.LivingEntityAccessor;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
import net.minecraft.MethodsReturnNonnullByDefault;
|
||||
|
@ -213,7 +214,7 @@ public class SandPaperItem extends Item implements CustomUseEffectsItem {
|
|||
CompoundTag tag = stack.getOrCreateTag();
|
||||
if (tag.contains("Polishing")) {
|
||||
ItemStack polishing = ItemStack.of(tag.getCompound("Polishing"));
|
||||
entity.spawnItemParticles(polishing, 1);
|
||||
((LivingEntityAccessor) entity).create$callSpawnItemParticles(polishing, 1);
|
||||
}
|
||||
|
||||
// After 6 ticks play the sound every 7th
|
||||
|
@ -238,14 +239,9 @@ public class SandPaperItem extends Item implements CustomUseEffectsItem {
|
|||
return 32;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemEnchantability(ItemStack stack) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getEnchantmentValue() {
|
||||
return 5;
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue